1"use strict";(self.webpackChunkactus_documentation=self.webpackChunkactus_documentation||[]).push([[7828],{2348:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var s=t(4848),d=t(8453);const i={},r="Analysis Example: Multi-Contract Portfolio Analysis",c={id:"examples/advanced-examples/portfolioExample",title:"Analysis Example: Multi-Contract Portfolio Analysis",description:"This example demonstrates how to model, simulate, and analyze a portfolio of fixed-rate and floating-rate ACTUS contracts using the Awesome Actus Library (AAL).",source:"@site/docs/examples/advanced-examples/portfolioExample.md",sourceDirName:"examples/advanced-examples",slug:"/examples/advanced-examples/portfolioExample",permalink:"/docs/examples/advanced-examples/portfolioExample",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Analysis Example: Variable Rate Annuity Contract",permalink:"/docs/examples/advanced-examples/singleContract"},next:{title:"Simulating Value-at-Risk (VaR) for a Single PAM Contract",permalink:"/docs/examples/advanced-examples/VaR_example"}},l={},a=[{value:"Step 0: Setup and Imports",id:"step-0-setup-and-imports",level:2},{value:"Step 1: Define a Portfolio of Fixed and Floating Contracts",id:"step-1-define-a-portfolio-of-fixed-and-floating-contracts",level:2},{value:"Step 2: Define Risk Factors",id:"step-2-define-risk-factors",level:2},{value:"Step 3: Generate Cash Flow Events",id:"step-3-generate-cash-flow-events",level:2},{value:"Preview of Event Table (first 20 rows)",id:"preview-of-event-table-first-20-rows",level:3},{value:"Step 4: Liquidity Analysis",id:"step-4-liquidity-analysis",level:2},{value:"Step 5: Value Analysis",id:"step-5-value-analysis",level:2},{value:"Step 6: Income Analysis",id:"step-6-income-analysis",level:2}];function o(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"analysis-example-multi-contract-portfolio-analysis",children:"Analysis Example: Multi-Contract Portfolio Analysis"}),"\n",(0,s.jsx)(n.p,{children:"This example demonstrates how to model, simulate, and analyze a portfolio of fixed-rate and floating-rate ACTUS contracts using the Awesome Actus Library (AAL)."}),"\n",(0,s.jsx)(n.h2,{id:"step-0-setup-and-imports",children:"Step 0: Setup and Imports"}),"\n",(0,s.jsx)(n.p,{children:"We start by importing all required libraries, setting a random seed for reproducibility, and creating a folder to store plots."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"import numpy as np\nimport pandas as pd\nfrom awesome_actus_lib import PAM, ANN, Portfolio, ReferenceIndex, YieldCurve, PublicActusService, LiquidityAnalysis, ValueAnalysis, IncomeAnalysis\nnp.random.seed(42) # for reproducability \n"})}),"\n",(0,s.jsx)(n.h2,{id:"step-1-define-a-portfolio-of-fixed-and-floating-contracts",children:"Step 1: Define a Portfolio of Fixed and Floating Contracts"}),"\n",(0,s.jsx)(n.p,{children:"We create a portfolio consisting of:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"5 fixed-rate Principal-at-Maturity (PAM) contracts"}),"\n",(0,s.jsx)(n.li,{children:"3 fixed-rate Annuity (ANN) contracts"}),"\n",(0,s.jsx)(n.li,{children:"2 floating-rate Annuity (ANN) contracts linked to a reference index"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'contracts = []\n\n# Fixed-rate PAM contracts\nfor i in range(5):\n contracts.append(PAM(\n contractID=f"pam{i+1}",\n contractRole="RPA",\n statusDate="2024-12-31",\n initialExchangeDate=f"2025-01-0{i+1}",\n maturityDate=f"2028-01-0{i+1}",\n notionalPrincipal=10000 + i * 1000,\n nominalInterestRate=0.02 + i * 0.002,\n dayCountConvention="30E360",\n currency="USD",\n contractDealDate="2024-12-31",\n counterpartyID="CP01",\n creatorID="Bank01",\n cycleOfInterestPayment=["P1YL1","P6ML1","P3ML1","P1YL1","P9ML1"][i],\n ))\n\n# Fixed-rate ANN contracts\nfor i in range(3):\n contracts.append(ANN(\n contractID=f"ann{i+1}",\n contractRole="RPA",\n statusDate="2024-12-31",\n initialExchangeDate=f"2025-02-0{i+1}",\n maturityDate=f"2029-02-0{i+1}",\n notionalPrincipal=12000 + i * 1500,\n nominalInterestRate=0.025 + i * 0.0015,\n dayCountConvention="30E360",\n cycleOfInterestPayment="P1YL1",\n cycleOfPrincipalRedemption="P1YL1",\n cycleAnchorDateOfInterestPayment="2026-02-01",\n cycleAnchorDateOfPrincipalRedemption="2026-02-01",\n currency="USD",\n contractDealDate="2024-12-31",\n counterpartyID="CP01",\n creatorID="Bank01",\n ))\n\n# Floating-rate ANN contracts\nindex_code = "US_Floating_6M"\nfor i in range(2):\n contracts.append(ANN(\n contractID=f"vann{i+1}",\n contractRole="RPA",\n statusDate="2024-12-31",\n initialExchangeDate=f"2025-03-0{i+1}",\n maturityDate=f"2029-03-0{i+1}",\n notionalPrincipal=15000 + i * 1000,\n nominalInterestRate=0.0, # Overridden by reset\n dayCountConvention="30E360",\n cycleOfInterestPayment="P1YL1",\n cycleOfPrincipalRedemption="P1YL1",\n cycleAnchorDateOfInterestPayment="2026-03-01",\n cycleAnchorDateOfPrincipalRedemption="2026-03-01",\n cycleOfRateReset="P6ML1",\n marketObjectCodeOfRateReset=index_code,\n rateSpread=0.01,\n currency="USD",\n contractDealDate="2024-12-31",\n counterpartyID="CP02",\n creatorID="Bank01",\n ))\n\nptf = Portfolio(contracts)\n'})}),"\n",(0,s.jsx)(n.h2,{id:"step-2-define-risk-factors",children:"Step 2: Define Risk Factors"}),"\n",(0,s.jsx)(n.p,{children:"We define a discount curve and a reference index:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.strong,{children:"discount curve"})," is used later for value and income analysis."]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.strong,{children:"reference index"})," drives the rate reset of the floating-rate contracts."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note: We pass both risk factors to ",(0,s.jsx)(n.code,{children:"generateEvents()"})," even though the discount curve is not used for event generation \u2014 this ensures it is included in the resulting ",(0,s.jsx)(n.code,{children:"CashFlowStream"})," for later analyses. (An alternative would be to inject it into the ",(0,s.jsx)(n.code,{children:"CashFlowStream"})," manually after generation.)"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'tenors = ["6M", "1Y", "2Y", "3Y", "5Y", "7Y", "10Y"]\nrates = [0.01, 0.015, 0.02, 0.023, 0.028, 0.032, 0.035]\ndiscount_curve = YieldCurve(\n marketObjectCode="USD_DISCOUNT",\n referenceDate="2025-01-01",\n tenors=tenors,\n rates=rates,\n base=1.0\n)\ndiscount_curve.plot()\n\nindex_data = pd.DataFrame({\n "date": pd.date_range(start="2023-01-01", end="2030-12-31", peri
1ods=20).strftime("%Y-%m-%d"),\n "value": np.random.uniform(0.01, 0.04, size=20).round(4)\n})\nref_index = ReferenceIndex(marketObjectCode=index_code, source=index_data, base=1.0)\nref_index.plot()\n'})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Discount Curve",src:t(19).A+"",width:"800",height:"400"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Floating Index",src:t(49).A+"",width:"800",height:"400"})}),"\n",(0,s.jsx)(n.h2,{id:"step-3-generate-cash-flow-events",children:"Step 3: Generate Cash Flow Events"}),"\n",(0,s.jsx)(n.p,{children:"We simulate the full event schedule across all contracts:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"service = PublicActusService()\nevents = service.generateEvents(portfolio=ptf, riskFactors=[discount_curve, ref_index])\nevents.plot()\n"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Cashflows",src:t(485).A+"",width:"1400",height:"600"})}),"\n",(0,s.jsx)(n.h3,{id:"preview-of-event-table-first-20-rows",children:"Preview of Event Table (first 20 rows)"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"type"}),(0,s.jsx)(n.th,{children:"time"}),(0,s.jsx)(n.th,{children:"payoff"}),(0,s.jsx)(n.th,{children:"currency"}),(0,s.jsx)(n.th,{children:"nominalValue"}),(0,s.jsx)(n.th,{children:"nominalRate"}),(0,s.jsx)(n.th,{children:"nominalAccrued"}),(0,s.jsx)(n.th,{children:"contractId"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IED"}),(0,s.jsx)(n.td,{children:"2025-01-01T00:00"}),(0,s.jsx)(n.td,{children:"-10000"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"10000"}),(0,s.jsx)(n.td,{children:"0.02"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-01-01T00:00"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"10000"}),(0,s.jsx)(n.td,{children:"0.02"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2026-01-01T00:00"}),(0,s.jsx)(n.td,{children:"200"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"10000"}),(0,s.jsx)(n.td,{children:"0.02"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2027-01-01T00:00"}),(0,s.jsx)(n.td,{children:"200"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"10000"}),(0,s.jsx)(n.td,{children:"0.02"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2028-01-01T00:00"}),(0,s.jsx)(n.td,{children:"200"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"10000"}),(0,s.jsx)(n.td,{children:"0.02"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"MD"}),(0,s.jsx)(n.td,{children:"2028-01-01T00:00"}),(0,s.jsx)(n.td,{children:"10000"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"0.02"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IED"}),(0,s.jsx)(n.td,{children:"2025-01-02T00:00"}),(0,s.jsx)(n.td,{children:"-11000"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-01-02T00:00"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-07-02T00:00"}
1),(0,s.jsx)(n.td,{children:"121"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2026-01-02T00:00"}),(0,s.jsx)(n.td,{children:"121"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2026-07-02T00:00"}),(0,s.jsx)(n.td,{children:"121"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2027-01-02T00:00"}),(0,s.jsx)(n.td,{children:"121"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2027-07-02T00:00"}),(0,s.jsx)(n.td,{children:"121"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2028-01-02T00:00"}),(0,s.jsx)(n.td,{children:"121"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"MD"}),(0,s.jsx)(n.td,{children:"2028-01-02T00:00"}),(0,s.jsx)(n.td,{children:"11000"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"0.022"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam2"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IED"}),(0,s.jsx)(n.td,{children:"2025-01-03T00:00"}),(0,s.jsx)(n.td,{children:"-12000"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"12000"}),(0,s.jsx)(n.td,{children:"0.024"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-01-03T00:00"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"12000"}),(0,s.jsx)(n.td,{children:"0.024"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-04-03T00:00"}),(0,s.jsx)(n.td,{children:"72"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"12000"}),(0,s.jsx)(n.td,{children:"0.024"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-07-03T00:00"}),(0,s.jsx)(n.td,{children:"72"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"12000"}),(0,s.jsx)(n.td,{children:"0.024"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IP"}),(0,s.jsx)(n.td,{children:"2025-10-03T00:00"}),(0,s.jsx)(n.td,{children:"72"}),(0,s.jsx)(n.td,{children:"USD"}),(0,s.jsx)(n.td,{children:"12000"}),(0,s.jsx)(n.td,{children:"0.024"}),(0,s.jsx)(n.td,{children:"0"}),(0,s.jsx)(n.td,{children:"pam3"})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"step-4-liquidity-analysis",children:"Step 4: Liquidity Analysis"}),"\n",(0,s.jsx)(n.p,{children:"This shows net inflows and outflows aggregated per year. It is useful to assess funding needs or surpluses."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'liq = LiquidityAnalysis(cf_stream=events, freq="Y")\nliq.plot()\n'})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Liquidity",src:t(3757).A+"",width:"1000",height:"400"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:" netLiquidity\ntime \n2025 -130869.000000\n2026 18057.974013\n2027 18335.536044\n2028 78097.645896\n2029 26657.859228\n"})}),"\n",(0,s.jsx)(n.h2,{id:"step-5-value-analysis",children:"Step 5: Value Analysis"}),"\n",(0,s.jsxs)(n.p,{children:["We discount all future cash flows using the yield curve to compute present value as of ",(0,s.jsx)(n.code,{children:"2025-01-01"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'val = ValueAnalysis(cf_stream=events, as_of_date="2025-01-01", discount_curve_code="USD_DISCOUNT")\n'})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:" as_of_date nominal_value npv\n0 2025-01-01 10280.015181 1306.439457\n"})}),"\n",(0,s.jsx)(n.h2,{id:"step-6-income-analysis",children:"Step 6: Income Analysis"}
1),"\n",(0,s.jsx)(n.p,{children:"This breaks down recognized income over time, based on the contractual cash flows."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'inc = IncomeAnalysis(cf_stream=events, freq="Y")\ninc.plot()\n'})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Income",src:t(4504).A+"",width:"1000",height:"400"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:" netIncome\ntime \n2025 631.000000\n2026 3154.658472\n2027 3243.326902\n2028 2460.038044\n2029 790.991763\n"})})]})}function h(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},19:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/discount_curve-ee3c610515b7047ea5bfb67e873b8ebc.png"},49:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/floating_index-4089bacf5ce80ed905d7d1afbff00ec1.png"},485:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/portfolio_cashflows-f977aeb63615a92d9eadc3c450a373d0.png"},4504:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/portfolio_income-44094eb753201c7a066d24a395e95af4.png"},3757:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/portfolio_liquidity-35be8c108bbd2051116524094c3066ed.png"},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var s=t(6540);const d={},i=s.createContext(d);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]);
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.