PageSourceSearch

https://medarion.ai/assets/financialModelingPages-DsUG0h5M.js

js medarion.ai collected 2026-10-05 12:16:41 UTC 19,750 bytes, 1 lines download raw bytes

1import{r as o,j as e}from"./index-Dp6uzjnE.js";import{C as q}from"./CalculatorShell-BOPntKC-.js";function L(s,m){return!Number.isFinite(s)||s<0?{runway_months:null}:!Number.isFinite(m)||m<=0?{runway_months:null}:{runway_months:s/m}}function H(s){const m=Math.min(Math.max(s.max_months,1),240);let c=s.cash_balance,l=Math.max(0,s.starting_mrr);const i=Math.max(0,s.monthly_opex),u=Math.max(-.5,Math.min(2,(s.mom_mrr_growth_pct||0)/100)),x=Math.max(0,Math.min(1,(s.gross_margin_pct||0)/100));if(!Number.isFinite(c))return{runway_months:null,monthly_path:[]};const p=[];let h=0;for(;h<m&&c>.005;){h++;const b=l*x-i;c+=b,p.push({month:h,mrr:l,net_cf:b,ending_cash:c}),l*=1+u}return{runway_months:h>=m&&c>.005?null:h,months_simulated:h,ending_cash:c,monthly_path:p.slice(0,36)}}function V(s){const m=Math.max(0,s.monthly_operating_shortfall||0),c=Math.max(0,s.months_of_shortfall||0),l=Math.max(0,s.working_capital_reserve||0),i=Math.max(0,s.one_time_capex||0),u=m*c+l+i,x=Math.max(0,Math.min(100,s.contingency_pct||0))/100;return{operating_funding_need:m*c,working_capital_buffer:l,capex:i,subtotal:u,contingency_amount:u*x,total_capital_required:u*(1+x)}}function K(s){const m=Math.min(Math.max(Math.floor(s.horizon_months||12),1),120),c=Math.max(-.5,Math.min(2,(s.revenue_mom_growth_pct||0)/100)),l=Math.max(0,Math.min(1,(s.cogs_pct_of_revenue||0)/100)),i=Math.max(0,Math.min(1,(s.variable_opex_pct_of_revenue||0)/100)),u=Math.max(0,s.fixed_opex_monthly||0);let x=Math.max(0,s.starting_revenue_monthly||0),p=Number.isFinite(s.starting_cash)?s.starting_cash:0;const h=[];let g=p;for(let j=1;j<=m;j++){const f=x*l,v=x-f,w=u+x*i,M=v-w;p+=M,g=Math.min(g,p),h.push({month:j,revenue:x,cogs:f,gross_profit:v,opex:w,ebitda:M,cumulative_cash:p}),x*=1+c}const b=h[h.length-1];return{rows:h,min_cumulative_cash:g,final_ebitda:b?b.ebitda:0}}function U(s,m,c){if(!Number.isFinite(s)||s<=0)return{moic:null,simple_annual_irr_pct:null};if(!Number.isFinite(m)||m<0)return{moic:null,simple_annual_irr_pct:null};const l=m/s,i=Math.max(.25,c||1),u=Math.pow(l,1/i)-1;return{moic:l,simple_annual_irr_pct:u*100}}function A(s,m,c){const l=[],i=u=>Number(m[u]);if(s==="runway"&&(i("mom_mrr_growth_pct")>25&&l.push("MoM MRR growth above ~25% is very aggressive for a base case."),i("gross_margin_pct")>92&&l.push("Gross margin above ~92% is uncommon — confirm COGS definition."),i("monthly_opex")>0&&i("starting_mrr")*(i("gross_margin_pct")/100)>=i("monthly_opex")*1.02&&l.push("MRR × margin appears to cover opex — runway may be indefinite in this model; check assumptions.")),s==="capital_requirements"&&(i("contingency_pct")<5&&l.push("Contingency under 5% may understate execution risk."),i("months_of_shortfall")>48&&l.push("Very long shortfall horizon — consider staging milestones.")),s==="pro_forma"){i("revenue_mom_growth_pct")>20&&l.push("Revenue MoM growth above ~20% compounds extremely fast — stress-test downside.");const u=i("cogs_pct_of_revenue")/100,x=i("variable_opex_pct_of_revenue")/100;u+x>.95&&l.push("COGS + variable opex (as % of revenue) sum to a very high share — check double-counting.");const p=c.min_cumulative_cash_trough;typeof p=="number"&&p<0&&typeof c.cumulative_ebitda_final=="number"&&c.cumulative_ebitda_final>0&&l.push("Cumulative cash dipped negative before recovering — you may need a financing bridge.")}if(s==="investor_return"){i("holding_years")<1&&l.push("Holding period under 1 year may not match typical venture outcomes.");const u=c.moic;typeof u=="number"&&u>50&&l.push("MOIC above 50× is rare — verify exit proceeds and dilution.")}return l}const d="block text-[10px] text-ink-500 font-medium mb-1",_="w-full border border-border rounded-lg px-2 py-1.5 text-xs text-ink-950";function Y(){const[s,m]=o.useState("Demo Co"),[c,l]=o.useState("2400000"),[i,u]=o.useState(!0),[x,p]=o.useState("185000"),[h,g]=o.useState("320000"),[b,j]=o.useState("95000"),[f,v]=o.useState("6"),[w,M]=o.useState("78"),a=Number(c),N=Number(x),y=Number(h),S=Number(b),F=Number(f),C=Number(w),r=o.useMemo(()=>({project_name:s,cash_balance:a,use_mrr_model:i,monthly_net_burn:N,monthly_opex:y,starting_mrr:S,mom_mrr_growth_pct:F,gross_margin_pct:C}),[s,a,i,N,y,S,F,C]),{outputs:O,pathRows:k,fullOutputs:$}=o.useMemo(()=>
1{if(!i){const z=L(Number.isFinite(a)?a:0,Number.isFinite(N)?N:0),D={runway_months:z.runway_months!=null?Number(z.runway_months.toFixed(2)):"—",mode:"simple_cash_div_burn"};return{outputs:D,pathRows:[],fullOutputs:D}}const t=H({cash_balance:Number.isFinite(a)?a:0,monthly_opex:Number.isFinite(y)?y:0,starting_mrr:Number.isFinite(S)?S:0,mom_mrr_growth_pct:Number.isFinite(F)?F:0,gross_margin_pct:Number.isFinite(C)?C:0,max_months:120}),n=t.runway_months!=null,R={runway_months:n?t.runway_months:">120 (cash not depleted in window)",months_simulated:t.months_simulated,ending_cash:Number(t.ending_cash.toFixed(0)),status:n?t.ending_cash<0?"Cash depletes in this window (slight negative = last month overshoot)":"Cash depleted":"Still solvent within simulation window"};return{outputs:R,pathRows:t.monthly_path,fullOutputs:{...R,monthly_path:t.monthly_path}}},[i,a,N,y,S,F,C]),P=[];(!Number.isFinite(a)||a<0)&&P.push("cash_balance"),!i&&(!Number.isFinite(N)||N<=0)&&P.push("monthly_net_burn"),i&&(!Number.isFinite(y)||y<0)&&P.push("monthly_opex");const I=o.useMemo(()=>A("runway",r,O),[r,O]),W=t=>{t.project_name!=null&&m(String(t.project_name)),t.cash_balance!=null&&l(String(t.cash_balance)),t.use_mrr_model!=null&&u(!!t.use_mrr_model),t.monthly_net_burn!=null&&p(String(t.monthly_net_burn)),t.monthly_opex!=null&&g(String(t.monthly_opex)),t.starting_mrr!=null&&j(String(t.starting_mrr)),t.mom_mrr_growth_pct!=null&&v(String(t.mom_mrr_growth_pct)),t.gross_margin_pct!=null&&M(String(t.gross_margin_pct))},G=t=>t.toLocaleString(void 0,{maximumFractionDigits:0,style:"currency",currency:"USD"});return e.jsxs(q,{toolId:"runway",title:"Cash flow & runway",toolLabel:"Simple runway or MRR ramp vs fixed opex — monthly cash path shown below; export includes the full snapshot.",inputs:r,outputs:O,outputsForPersistence:$,missingFields:P,modelWarnings:I,draftKey:"medarion_ft_runway",onApplySave:W,afterResults:i&&k.length>0?e.jsxs("div",{className:"rounded-lg border border-border bg-white overflow-hidden",children:[e.jsxs("div",{className:"px-3 py-2 border-b border-border bg-surface-muted",children:[e.jsx("p",{className:"text-xs font-medium text-ink-950",children:"Monthly cash path"}),e.jsx("p",{className:"text-[10px] text-ink-500",children:"MRR · contribution · net cash flow · ending cash"})]}),e.jsx("div",{className:"overflow-x-auto max-h-80",children:e.jsxs("table",{className:"min-w-full text-[11px]",children:[e.jsx("thead",{className:"sticky top-0 bg-white border-b border-border text-ink-500",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left font-medium px-3 py-2",children:"Mo"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"MRR"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"Net CF"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"Ending cash"})]})}),e.jsx("tbody",{children:k.map(t=>e.jsxs("tr",{className:"border-b border-border/70 hover:bg-surface-muted/50",children:[e.jsx("td",{className:"px-3 py-1.5 text-ink-700 tabular-nums",children:t.month}),e.jsx("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink-950",children:G(t.mrr)}),e.jsx("td",{className:`px-3 py-1.5 text-right tabular-nums font-medium ${t.net_cf<0?"text-red-700":"text-emerald-700"}`,children:G(t.net_cf)}),e.jsx("td",{className:`px-3 py-1.5 text-right tabular-nums ${t.ending_cash<0?"text-red-700":"text-ink-950"}`,children:G(t.ending_cash)})]},t.month))})]})})]}):null,children:[e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Project / company name (for saves & export)"}),e.jsx("input",{value:s,onChange:t=>m(t.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Cash on hand ($)"}),e.jsx("input",{value:c,onChange:t=>l(t.target.value),className:_})]}),e.jsx("div",{className:"flex items-end",children:e.jsxs("label",{className:"flex items-center gap-2 text-xs text-ink-950 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:t=>u(t.target.checked),className:"rounded border-border"}),"Use MRR ramp model"]})}),i?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Fixed monthly opex ($)"}),e.jsx("input",{value:h,onChange:t=>g(t.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Starting MRR ($ / mo)"}),e.jsx("input",{value:b,onChange:t=>j(t.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"MRR MoM growth (%)"}),e.jsx("input",{value:f,onChange:t=>v(t.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Gross margin on MRR (%)"}),e.jsx("input",{value:w,onChange:t=>M(t.target.value),className:_})]})]}):e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Avg net burn / month ($)"}),e.jsx("input",{value:x,onChange:t=>p(t.target.value),className:_})]})]})}function J(){const[s,m]=o.useState("Demo Co"),[c,l]=o.useState("140000"),[i,u]=o.useState("18"),[x,p]=o.use
1State("400000"),[h,g]=o.useState("250000"),[b,j]=o.useState("12"),f=Number(c),v=Number(i),w=Number(x),M=Number(h),a=Number(b),N=o.useMemo(()=>({project_name:s,monthly_operating_shortfall:f,months_of_shortfall:v,working_capital_reserve:w,one_time_capex:M,contingency_pct:a}),[s,f,v,w,M,a]),y=o.useMemo(()=>{const r=V({monthly_operating_shortfall:Number.isFinite(f)?f:0,months_of_shortfall:Number.isFinite(v)?v:0,working_capital_reserve:Number.isFinite(w)?w:0,one_time_capex:Number.isFinite(M)?M:0,contingency_pct:Number.isFinite(a)?a:0});return{operating_funding_need:Number(r.operating_funding_need.toFixed(0)),working_capital_buffer:Number(r.working_capital_buffer.toFixed(0)),capex:Number(r.capex.toFixed(0)),subtotal:Number(r.subtotal.toFixed(0)),contingency_amount:Number(r.contingency_amount.toFixed(0)),total_capital_required:Number(r.total_capital_required.toFixed(0))}},[f,v,w,M,a]),S=[];(!Number.isFinite(f)||f<0)&&S.push("monthly_operating_shortfall");const F=o.useMemo(()=>A("capital_requirements",N,y),[N,y]),C=r=>{r.project_name!=null&&m(String(r.project_name)),r.monthly_operating_shortfall!=null&&l(String(r.monthly_operating_shortfall)),r.months_of_shortfall!=null&&u(String(r.months_of_shortfall)),r.working_capital_reserve!=null&&p(String(r.working_capital_reserve)),r.one_time_capex!=null&&g(String(r.one_time_capex)),r.contingency_pct!=null&&j(String(r.contingency_pct))};return e.jsxs(q,{toolId:"capital_requirements",title:"Capital requirements",toolLabel:"Operating shortfall × horizon + WC buffer + capex + contingency — use alongside pro forma for depth.",inputs:N,outputs:y,missingFields:S,modelWarnings:F,draftKey:"medarion_ft_capreq",onApplySave:C,children:[e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Project / company name"}),e.jsx("input",{value:s,onChange:r=>m(r.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Avg monthly operating shortfall ($)"}),e.jsx("input",{value:c,onChange:r=>l(r.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Months of shortfall (bridge to breakeven)"}),e.jsx("input",{value:i,onChange:r=>u(r.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Working capital reserve ($)"}),e.jsx("input",{value:x,onChange:r=>p(r.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"One-time capex ($)"}),e.jsx("input",{value:h,onChange:r=>g(r.target.value),className:_})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Contingency (% of subtotal)"}),e.jsx("input",{value:b,onChange:r=>j(r.target.value),className:_})]})]})}function Q(){const[s,m]=o.useState("Demo Co"),[c,l]=o.useState("24"),[i,u]=o.useState("420000"),[x,p]=o.useState("4"),[h,g]=o.useState("22"),[b,j]=o.useState("280000"),[f,v]=o.useState("18"),[w,M]=o.useState("1800000"),a=Number(c),N=Number(i),y=Number(x),S=Number(h),F=Number(b),C=Number(f),r=Number(w),O=o.useMemo(()=>({project_name:s,horizon_months:a,starting_revenue_monthly:N,revenue_mom_growth_pct:y,cogs_pct_of_revenue:S,fixed_opex_monthly:F,variable_opex_pct_of_revenue:C,starting_cash:r}),[s,a,N,y,S,F,C,r]),{outputs:k,rows:$}=o.useMemo(()=>{const n=K({horizon_months:Number.isFinite(a)?a:12,starting_revenue_monthly:Number.isFinite(N)?N:0,revenue_mom_growth_pct:Number.isFinite(y)?y:0,cogs_pct_of_revenue:Number.isFinite(S)?S:0,fixed_opex_monthly:Number.isFinite(F)?F:0,variable_opex_pct_of_revenue:Number.isFinite(C)?C:0,starting_cash:Number.isFinite(r)?r:0}),R=n.rows[n.rows.length-1],z={horizon_months:n.rows.length,min_cumulative_cash_trough:Number(n.min_cumulative_cash.toFixed(0)),final_monthly_revenue:R?Number(R.revenue.toFixed(0)):0,final_month_ebitda:R?Number(R.ebitda.toFixed(0)):0,cumulative_ebitda_final:R?Number(n.rows.reduce((D,E)=>D+E.ebitda,0).toFixed(0)):0,cumulative_cash_end:R?Number(R.cumulative_cash.toFixed(0)):0};return{outputs:z,rows:n.rows,full:{...z,monthly_detail:n.rows}}},[a,N,y,S,F,C,r]),P=o.useMemo(()=>({...k,monthly_detail:$}),[k,$]),I=[];(!Number.isFinite(a)||a<1)&&I.push("horizon_months");const W=o.useMemo(()=>A("pro_forma",O,k),[O,k]),G=n=>{n.project_name!=null&&m(String(n.project_name)),n.horizon_months!=null&&l(String(n.horizon_months)),n.starting_revenue_monthly!=null&&u(String(n.starting_revenue_monthly)),n.revenue_mom_growth_pct!=null&&p(String(n.revenue_mom_growth_pct)),n.cogs_pct_of_revenue!=null&&g(String(n.cogs_pct_of_revenue)),n.fixed_opex_monthly!=null&&j(String(n.fixed_opex_monthly)),n.variable_opex_pct_of_revenue!=null&&v(String(n.variable_opex_pct_of_revenue)),n.starting_cash!=null&&M(String(n.starting_cash))},t=n=>
1n.toLocaleString(void 0,{maximumFractionDigits:0,style:"currency",currency:"USD"});return e.jsxs(q,{toolId:"pro_forma",title:"Financial pro forma",toolLabel:"Monthly revenue ramp, COGS %, fixed + variable opex — cumulative cash includes starting cash + sum(EBITDA).",inputs:O,outputs:k,outputsForPersistence:P,missingFields:I,modelWarnings:W,draftKey:"medarion_ft_proforma",onApplySave:G,afterResults:e.jsxs("div",{className:"rounded-lg border border-border bg-white overflow-hidden",children:[e.jsxs("div",{className:"px-3 py-2 border-b border-border bg-surface-muted",children:[e.jsx("p",{className:"text-xs font-medium text-ink-950",children:"Monthly detail"}),e.jsx("p",{className:"text-[10px] text-ink-500",children:"Revenue · COGS · opex · EBITDA · cumulative cash"})]}),e.jsx("div",{className:"overflow-x-auto max-h-80",children:e.jsxs("table",{className:"min-w-full text-[11px]",children:[e.jsx("thead",{className:"sticky top-0 bg-white border-b border-border text-ink-500",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left font-medium px-3 py-2",children:"Mo"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"Revenue"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"COGS"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"Gross"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"Opex"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"EBITDA"}),e.jsx("th",{className:"text-right font-medium px-3 py-2",children:"Cash"})]})}),e.jsx("tbody",{children:$.map(n=>e.jsxs("tr",{className:"border-b border-border/70 hover:bg-surface-muted/50",children:[e.jsx("td",{className:"px-3 py-1.5 text-ink-700 tabular-nums",children:n.month}),e.jsx("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink-950",children:t(n.revenue)}),e.jsx("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink-700",children:t(n.cogs)}),e.jsx("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink-950",children:t(n.gross_profit)}),e.jsx("td",{className:"px-3 py-1.5 text-right tabular-nums text-ink-700",children:t(n.opex)}),e.jsx("td",{className:`px-3 py-1.5 text-right tabular-nums font-medium ${n.ebitda<0?"text-red-700":"text-emerald-700"}`,children:t(n.ebitda)}),e.jsx("td",{className:`px-3 py-1.5 text-right tabular-nums ${n.cumulative_cash<0?"text-red-700":"text-ink-950"}`,children:t(n.cumulative_cash)})]},n.month))})]})})]}),children:[e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Project / company name"}),e.jsx("input",{value:s,onChange:n=>m(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Horizon (months)"}),e.jsx("input",{value:c,onChange:n=>l(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Starting monthly revenue ($)"}),e.jsx("input",{value:i,onChange:n=>u(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Revenue MoM growth (%)"}),e.jsx("input",{value:x,onChange:n=>p(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"COGS % of revenue"}),e.jsx("input",{value:h,onChange:n=>g(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Fixed opex / month ($)"}),e.jsx("input",{value:b,onChange:n=>j(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Variable opex % of revenue"}),e.jsx("input",{value:f,onChange:n=>v(n.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Starting cash ($)"}),e.jsx("input",{value:w,onChange:n=>M(n.target.value),className:_})]})]})}function X(){const[s,m]=o.useState("Demo Co"),[c,l]=o.useState("2000000"),[i,u]=o.useState("18500000"),[x,p]=o.useState("5"),h=Number(c),g=Number(i),b=Number(x),j=o.useMemo(()=>({project_name:s,investment_amount:h,exit_proceeds:g,holding_years:b}),[s,h,g,b]),f=o.useMemo(()=>{const a=U(Number.isFinite(h)?h:0,Number.isFinite(g)?g:0,Number.isFinite(b)?b:1);return{moic:a.moic!=null?Number(a.moic.toFixed(2)):"—",simple_annual_irr_pct:a.simple_annual_irr_pct!=null?Number(a.simple_annual_irr_pct.toFixed(2)):"—",note:"IRR is a simplified single-exit approximation (no interim cash flows)."}},[h,g,b]),v=[];(!Number.isFinite(h)||h<=0)&&v.push("investment_amount"),(!Number.isFinite(g)||g<0)&&v.push("exit_proceeds");const w=o.useMemo(()=>A("investor_return",j,f),[j,f]),M=a=>{a.project_name!=null&&m(String(a.project_name)),a.investment_amount!=null&&l(String(a.investment_amount)),a.exit_proceeds!=null&&u(String(a.exit_proceeds)),a.holding_years!=null&&p(String(a.holding_years))};return e.jsxs(q,{toolId:"investor_return",title:"Investor return",toolLabel:"MOIC and a simple annualized IRR from entry vs exit (no interim dividends in v1).",inputs:j,outputs:f,missingFields:v,modelWarnings:w,draftKey:"medarion_ft_investor",onApplySave:M,children:[e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Project / company name"}),e.jsx("input",{value:s,onChange:a=>m(a.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Investment ($)"}),e.jsx("input",{value:c,onChange:a=>l(a.target.value),className:_})]}),e.jsxs("div",{children:[e.jsx("label",{className:d,children:"Exit proceeds ($)"}),e.jsx("input",{value:i,onChange:a=>u(a.target.value),className:_})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:d,children:"Holding period (years)"}),e.jsx("input",{value:x,onChange:a=>p(a.target.value),className:_})]})]})}export{J as CapitalRequirementsPage,X as InvestorReturnPage,Q as ProFormaPage,Y as RunwayPage};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.