PageSourceSearch

https://www.qu.ai/_next/static/chunks/app/roadmap/page-dddba8487a3…?dpl=dpl_2fNTGoeGvWWUPkRoXFCC33t2xaKU

js qu.ai collected 2026-10-05 12:26:08 UTC 40,252 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9329],{3633:(e,t,a)=>{"use strict";a.d(t,{RoadmapTabs:()=>_});var n=a(5155),i=a(2115);let r=e=>String(e).padStart(2,"0");function s(e,t){let a=7===t.length?"".concat(t,"-01"):t;return e.findIndex(e=>"next"!==e.kind&&a>=e.start&&a<e.end)}function o(e,t){let a=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"");return"".concat(e,"-").concat(a)}function l(e){return{"--tone":"var(--".concat(e,")")}}let c=[{id:"research",index:"01",label:"Research foundations",signal:"PUBLISHED / EVOLVED",items:[{code:"2018 / 10",status:"FOUNDATIONAL",date:"2018-10",tone:"live",title:"BlockReduce",description:"Original hierarchy of merge-mined chains for parallel state.",source:{label:"arXiv",href:"https://arxiv.org/abs/1811.00125"}},{code:"2019 / 01",status:"RESEARCH ONLY",date:"2019-01",tone:"archive",title:"HashCore",description:"General-purpose processor proof-of-work via inverted benchmarking.",source:{label:"arXiv",href:"https://arxiv.org/abs/1902.00112"}},{code:"2021 / 12",status:"PUBLISHED / EVOLVED",date:"2021-12",tone:"live",title:"Hierarchical longest chain",description:"Formalized shared PoW and native cross-chain coordination.",source:{label:"arXiv",href:"https://arxiv.org/abs/2112.11072"}},{code:"2023 / 03",status:"IMPLEMENTED",date:"2023-03",tone:"live",title:"Proof of Entropy Minima",description:"Intrinsic block work reduces orphaning and accelerates finality.",source:{label:"arXiv",href:"https://arxiv.org/abs/2303.04305"}},{code:"2023 / 12",status:"PUBLISHED RESEARCH",date:"2023-12",tone:"live",title:"Majority is not required",description:"Models rational double-spend profitability below majority hashpower.",source:{label:"arXiv",href:"https://arxiv.org/abs/2312.07709"}},{code:"2024 / 02",status:"FORMAL FOUNDATION",date:"2024-02",tone:"live",title:"A better PoW fork choice",description:"Security analysis for intrinsic-work chain selection.",source:{label:"IACR",href:"https://eprint.iacr.org/2024/200"}},{code:"2024 / 10",status:"LITEPAPER",date:"2024-10",tone:"live",title:"Reignite the Crypto Revolution",description:"PoEM, sharding, workshares, dual ledgers, and energy money.",source:{label:"Primer PDF",href:"https://www.qu.ai/wp-content/uploads/2024/10/Quai-Primer_10_14.pdf"}},{code:"2024 / 11",status:"ADVISOR",date:"2024-11",tone:"live",title:"Wolfram joins as advisor",description:"Stephen Wolfram advises Quai and records a three-part series on blockchain's future.",source:{label:"Announcement",href:"https://www.qu.ai/blog/stephen-wolfram-joins-quai-as-an-advisor-discusses-future-of-blockchain-on-three-part-series"}},{code:"2025 / 03",status:"LIVE \xb7 AFT 2026",date:"2025-03",tone:"live",title:"Proportional Reward Splitting",description:"Workshare-based payouts reduce selfish-mining incentives.",highlights:["Accepted to Advances in Financial Technologies (AFT) 2026 at LSE, 2026-07-16.","Developed with Common Prefix. Already live on mainnet as workshares."],links:[{label:"AFT 2026",href:"https://www.qu.ai/blog/quai-research-accepted-to-aft-2026"}],source:{label:"arXiv",href:"https://arxiv.org/abs/2503.10185"}},{code:"2026 / 08",status:"CURRENT RESEARCH",date:"2026-08",tone:"current",title:"Slow and Steady",description:"Verifiable delays as an anti-front-running mechanism.",source:{label:"arXiv",href:"https://arxiv.org/abs/2608.13271"}}]},{id:"testnets",index:"02",label:"Testnets",signal:"COMPLETED / ORCHARD LIVE",items:[{code:"2021 / 11",status:"COMPLETED",date:"2021-11",tone:"live",title:"Stone Age",description:"First incentivized alpha: mining, uptime, and transfers.",source:{label:"Launch",href:"https://www.qu.ai/blog/stone-age-testnet"}},{code:"2022 / 02",status:"COMPLETED",date:"2022-02",tone:"live",title:"Bronze Age",description:"1,700 nodes \xb7 1.4M blocks \xb7 110K+ transactions.",source:{label:"Postmortem",href:"https://www.qu.ai/blog/bronze-age-testnet-learnings"}},{code:"2023 / DEV",status:"INTEGRATION ENVS",date:"2023-02",tone:"live",title:"Colosseum \xb7 Garden \xb7 Orchard",description:"Internal integration and developer environments—not public Ages.",source:{label:"Dev roun
1dup",href:"https://www.qu.ai/blog/february-2023-developer-roundup"}},{code:"2023 / 09",status:"COMPLETED",date:"2023-09",tone:"live",title:"Iron Age",description:"PoEM, cross-chain EVMs, GPU mining, and Pelagus in public.",source:{label:"Launch",href:"https://www.qu.ai/blog/iron-age-testnet-is-live"}},{code:"2024 / 03",status:"MEASURED",date:"2024-03",tone:"live",title:"Iron Age stress test",description:"9 shards \xb7 2,000+ TPS \xb7 205M+ transactions \xb7 250K+ accounts.",source:{label:"Postmortem",href:"https://blog.qu.ai/iron-age-testnet-postmortem-firsts-metrics-79b4d8c292b3"}},{code:"2024 / 08",status:"TOOLING SHIPPED",date:"2024-08",tone:"live",title:"Mainnet-compatible devnet",description:"New SDK, Pelagus, faucet, RPC, explorer, and docs stack.",source:{label:"Devnet release",href:"https://www.qu.ai/blog/quai-network-unveils-new-mainnet-compatible-devnet-and-tooling/"}},{code:"2024 / 10",status:"COMPLETED",date:"2024-10",tone:"live",title:"Golden Age",description:"Final feature test: QUAI/Qi, conversions, lockups, PoEM, sharding.",source:{label:"Launch",href:"https://www.qu.ai/blog/quai-networks-golden-age-tesnet-is-live/"}},{code:"2025 / 01",status:"PERMANENT TESTNET",date:"2025-01",tone:"current",title:"Orchard",description:"Production-like public testing now runs alongside mainnet.",source:{label:"Orchard",href:"https://www.qu.ai/blog/introducing-orchard-quai-network-permanent-public-testing-environment/"}},{code:"ARCHIVE",status:"PLAN EVOLVED",tone:"archive",title:"Silicon Age",description:"Named in the early plan; no official launched era was found.",source:{label:"Early plan",href:"https://www.qu.ai/blog/intro-to-quai-network"}}]},{id:"mainnet",index:"03",label:"Mainnet rollout",signal:"LIVE / DUAL LEDGERS",items:[{code:"2025 / 02.04",status:"GENESIS",date:"2025-02-04",tone:"live",title:"First mainnet blocks",de
1scription:"Genesis established and Node Wrangler mining began.",source:{label:"Genesis",href:"https://www.qu.ai/blog/quai-foundation-mines-the-quai-network-genesis-block"}},{code:"2025 / 02.05",status:"LIVE",date:"2025-02-05",tone:"live",title:"Public mining",description:"Open proof-of-work participation began on mainnet.",source:{label:"Rollout",href:"https://www.qu.ai/blog/quai-foundation-mines-the-quai-network-genesis-block"}},{code:"2025 / 02.19",status:"LIVE",date:"2025-02-19",tone:"live",title:"QUAI transfers",description:"Account-ledger transfers and application deployment opened.",source:{label:"Rollout",href:"https://www.qu.ai/blog/quai-foundation-mines-the-quai-network-genesis-block"}},{code:"2025 / 04.16",status:"LIVE",date:"2025-04-16",tone:"live",title:"Qi activation",description:"UTXO energy money, wallet conversions, and cash-like privacy.",source:{label:"Qi activation",href:"https://www.qu.ai/blog/qi-activation-the-worlds-first-decentralized-energy-dollar"}},{code:"2025 / 05",status:"LIVE",date:"2025-05-21",tone:"live",title:"Wrapped Qi (WQI)",description:"EVM-wrapped Qi for contracts and DeFi. Shipped in Pelagus 1.0.46.",source:{label:"Pelagus 1.0.46",href:"https://github.com/PelagusWallet/pelagus-extension/releases/tag/1.0.46"}},{code:"2025 / 08",status:"APPROVED",date:"2025-08-26",tone:"live",title:"MiCA approval",description:"Full approval under the EU Markets in Crypto-Assets regulation.",source:{label:"MiCA post",href:"https://www.qu.ai/blog/mica-approval"}},{code:"2025 / 12",status:"LIVE",date:"2025-12",tone:"live",title:"SOAP",description:"External PoW work begins driving continuous QUAI demand.",source:{label:"SOAP launch",href:"https://www.qu.ai/blog/project-soap-launches-on-quai-mainnet"}},{code:"2026 / 03.19",status:"LIVE",date:"2026-03-19",tone:"live",title:"Singularity fork",description:"Supply reset at prime block 1,530,500. Future unlocks removed, workshares doubled.",highlights:["~1.67B genesis QUAI burned. Monthly unlocks skip those addresses.","Workshares per block 16 → 32; SHA and Scrypt shares 8 → 16 each.","Shipped in go-quai v0.51.0."],source:{label:"Fork details",href:"https://www.qu.ai/blog/singularity-fork-live"}}]},{id:"releases",index:"04",label:"Protocol releases",signal:"MAINNET UPGRADES",items:[{code:"v0.46.x",status:"QI HARDENING",date:"2025-05-06",tone:"live",highlights:["v0.46.0 → v0.46.4 shipped 2025-04-17 → 05-06, right after Qi activation.","v0.46.4 removed the post-Qi data dependency behind node desyncs (PR #2635).","Backwards compatible. Upgrade recommended to stay synced."],title:"Conversion and sync recovery",description:"Conversion slip and post-Qi desync fixes shipped in sequence.",source:{label:"v0.46.4",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.46.4"}},{code:"v0.47.0",status:"ACTIVATED",date:"2025-05-14",tone:"live",highlights:["ProgPoW lookup-cache fix ahead of the first epoch turnover at prime block 388,800.","CREATE opcode max tries 1,000 → 10,000 at zone block 1,865,000.","Not backward compatible. All nodes had to upgrade."],title:"Epoch transition + EVM fixes",description:"Hardened PoW verification and contract address grinding.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.47.0"}},{code:"v0.48.0",status:"ACTIVATED",date:"2025-08-19",tone:"live",highlights:["New EVM opcodes: PUSH0, MCOPY, TSTORE, TLOAD.","Max contract code size 24 KB → 32 KB at zone block 3,490,000.","kQuai reset to baseline and stricter entropy filtering on block fetch."],title:"EVM and entropy upgrade",description:"New opcodes, larger contract limit, and entropy adjustments.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.48.0"}},{code:"v0.49.0",status:"SOAP LIVE",date:"2025-12-12",tone:"live",highlights:["SOAP activation at prime block 1,171,500 (2025-12-17).","Block PoW moved from ProgPoW to KawPoW merged mining.","SHA-256 and Scrypt share mining added."],title:"Multi-algorithm proof of work",description:"KawPoW, SHA-256, Scrypt, workshares, buybacks, and burns.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.49.0"}}
1,{code:"v0.50.0",status:"ACTIVATED",date:"2026-01-24",tone:"live",highlights:["Deeper SHA and Scrypt inclusion to cut orphan workshares.","Firmware compatibility fixes for SHA and Scrypt ASIC models.","Linear staleness discount on share rewards."],title:"ASIC compatibility",description:"Improved firmware support and reduced orphan workshares.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.50.0"}},{code:"v0.51.0",status:"SINGULARITY LIVE",date:"2026-03-13",tone:"live",highlights:["Singularity fork at prime block 1,530,500 (2026-03-19).","~1.67B genesis QUAI burned. Future unlocks to those addresses skipped.","Workshares per block 16 → 32; SHA and Scrypt shares 8 → 16 each."],title:"Supply reset + workshare capacity",description:"Removed future unlocks and doubled workshare inclusion 16 → 32.",source:{label:"Fork details",href:"https://www.qu.ai/blog/singularity-fork-live"}},{code:"v0.52.0",status:"SHIPPED",date:"2026-04-18",tone:"live",highlights:["Mainnet API fix (PR #2710).","Full changelog v0.51.1 → v0.52.0 on GitHub."],title:"API repair",description:"Focused mainnet API fixes after Singularity.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.52.0"}},{code:"v0.53.0",status:"BIP-302 GROUNDWORK",date:"2026-05-12",tone:"live",highlights:["BIP-302 fork: consensus-enforced AuxPoW on the Quai side. Bitcoin itself is unchanged.","SHA-equivalent reward normalization as groundwork for native Bitcoin proofs.","Bitcoin SOAP revenue is not yet verified live."],title:"SHA-equivalent rewards",description:"Reward normalization prepared SOAP for native Bitcoin proofs.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.53.0"}},{code:"v0.54.0",status:"ACTIVATED",date:"2026-06-08",tone:"live",highlights:["Longer EMA window smooths rewards, difficulty, and conversion rates.","Net peers fix and API updates.","Activated 2026-06-12."],title:"Reward stability",description:"Longer EMA smooths rewards, difficulty, and conversions.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.54.0"}},{code:"v0.55.0",status:"ACTIVATED",date:"2026-06-25",tone:"live",highlights:["General node improvements.","Activated 2026-06-25. All nodes upgrade as soon as possible."],title:"Node improvements",description:"Latest required node upgrade in the public release record.",source:{label:"Release",href:"https://github.com/dominant-strategies/go-quai/releases/tag/v0.55.0"}},{code:"v0.55.1",status:"CURRENT TRAIN",date:"2026-08-11",tone:"current",highlights:["Improved KawPoW cache handling.","Stratum logic updates for local mining."],links:[{label:"Announcement",href:"https://t.me/s/QuaiNetwork_Announcements"}],title:"KawPoW cache guard",description:"Guards epoch and light-cache DAG size. Stratum fixes for local mining.",source:{label:"Tag v0.55.1",href:"https://github.com/dominant-strategies/go-quai/tree/v0.55.1"}}]},{id:"ecosystem",index:"05",label:"Ecosystem",signal:"SHIPPED PRODUCTS",items:[{code:"2022 / 10",status:"SHIPPED",date:"2022-10",tone:"live",title:"Quai Dashboard beta",description:"Early rewards and participation control surface.",source:{label:"Dashboard",href:"https://www.qu.ai/blog/the-quai-dashboard-beta-is-live"}},{code:"2023 / 06",status:"LIVE / EXPANDING",date:"2023-06",tone:"current",title:"Pelagus",description:"Open-source browser wallet for QUAI, Qi, and Quai apps.",source:{label:"Announcement",href:"https://www.qu.ai/blog/pelagus-wallet"}},{code:"2024 / 09",status:"1.0 ALPHA \xb7 EXPANDING",date:"2024-09-19",tone:"current",title:"quais.js SDK",description:"JavaScript SDK for Quai. The v1 rewrite shipped with the mainnet-compatible devnet.",highlights:["npm package `quais` since 2022-12. The v1 alpha series started 2024-09.","Latest 1.0.0-alpha.56 on npm, 2026-07-29. Qi wallet reliability landed in alpha.54 (2026-04)."],links:[{label:"npm",href:"https://www.npmjs.com/package/quais"}],source:{label:"GitHub",href:"https://github.com/dominant-strategies/quais.js"}},{code:"2024 / 11",status:"BETA SHIPPED",date:"2024-11",tone:"live",title:"Mobile Developer Kit",description:"Portable QUAI/Qi wallet foundation for mobile builders.",source:{label:"MDK beta",href:"https://www.qu.ai/blog/introducing-the-quai-mobile-developer-kit-beta/"}}
1,{code:"2025 / 04",status:"LIVE",date:"2025-04",tone:"live",title:"Kipper",description:"Creator tipping and rewards directly on X.",source:{label:"Kipper",href:"https://kipper.money/"}},{code:"2025 / 08",status:"SHIPPED",date:"2025-08-04",tone:"live",title:"Tangem hardware wallet",description:"Official Quai cold wallet with Tangem. Community-chosen design, pre-orders, then shipping.",source:{label:"Announcement",href:"https://x.com/QuaiNetwork/status/1952402315090014664"}},{code:"2025 / 09",status:"ANNOUNCED",date:"2025-09-24",tone:"current",title:"Zebec cards",description:"Spend QUAI on Zebec Silver and Carbon cards. Quai Black Card planned. Go-live not verified.",source:{label:"Zebec post",href:"https://www.qu.ai/blog/quai-network-partners-with-zebec-for-irl-payments"}},{code:"2026 / 01",status:"LIVE",date:"2026-01",tone:"live",title:"StratumX",description:"Distributed, non-custodial, zero-fee solo mining.",source:{label:"StratumX",href:"https://www.qu.ai/blog/quai-network-introduces-stratumx-solo-mining"}},{code:"2026 / 02",status:"LIVE",date:"2026-02",tone:"live",title:"Symbiosis Bridge Live",description:"USDT and cross-chain routing into Quai.",source:{label:"Integration",href:"https://www.qu.ai/blog/quai-network-integrates-with-symbiosis-for-cross-chain-liquidity"}},{code:"2026 / 03",status:"OPEN SOURCE",date:"2026-03",tone:"live",title:"Entropic",description:"Local-first, sandboxed de
1sktop AI agent workspace.",source:{label:"Entropic",href:"https://www.qu.ai/blog/entropic-is-now-open-source"}},{code:"2026 / 04",status:"LIVE",date:"2026-04",tone:"live",title:"Kraken listing",description:"Regulated exchange access and QUAI liquidity.",source:{label:"Kraken launch",href:"https://www.qu.ai/blog/quai-is-now-live-on-kraken"}},{code:"2026 / 05",status:"LIVE / EXPANDING",date:"2026-05",tone:"current",title:"Blip rebuilt",description:"Native mobile self-custody, assets, requests, and pay flows.",source:{label:"Blip launch",href:"https://www.qu.ai/blog/blip-is-now-live-on-ios"}},{code:"2026 / 05.20",status:"PUBLISHED",date:"2026-05-20",tone:"live",title:"State of Quai Q2 2026",description:"Institutional report: SOAP revenue, supply after Singularity, security, ecosystem.",source:{label:"Report",href:"https://www.qu.ai/blog/state-of-quai-q2-2026"}},{code:"2026 / 07",status:"LIVE / EXPANDING",date:"2026-07",tone:"current",title:"Quainance",description:"USDT bridge, QUAI/WQI swaps, and liquidity positions.",source:{label:"Quainance",href:"https://www.qu.ai/blog/quainance-is-now-live"}},{code:"2026 / 07.09",status:"LIVE",date:"2026-07-09",tone:"live",title:"Bazarr NFT marketplace",description:"List, buy, auction, and trade NFTs on mainnet.",source:{label:"Announcement",href:"https://x.com/QuaiNetwork/status/2075215897233379674"}},{code:"2026 / 08",status:"LIVE",date:"2026-08",tone:"live",title:"Quai Explorer",description:"Balances, locks, tokens, TVL, conversions, and mining.",source:{label:"Explorer",href:"https://explorer.qu.ai/"}}]},{id:"active",index:"06",label:"Active program",signal:"NO DELIVERY DATES",items:[{code:"BTC → SOAP",status:"ACTIVE DEV",tone:"current",after:"releases",title:"Native Bitcoin proofs",description:"Connect Bitcoin work without changing Bitcoin. BTC and BCH share one SHA256d lane.",highlights:["Team dev update: BTC and BCH will share a single SHA256d lane with minimal miner changes.","v0.53.0 shipped the BIP-302 reward groundwork. Bitcoin SOAP revenue is not yet verified live."],links:[{label:"Dev update",href:"https://t.me/s/QuaiNetwork_Announcements"}],source:{label:"BIP-302 path",href:"https://www.qu.ai/blog/quai-soap-bip302-and-the-end-of-the-hashrate-moat"}},{code:"WQI + USDT",status:"GROWING",tone:"current",after:"ecosystem",title:"Deeper liquidity",description:"Grow contract-level liquidity and network DeFi TVL.",source:{label:"Quainance",href:"https://www.qu.ai/blog/quainance-is-now-live"}},{code:"LMR → LMT",status:"MARKET BUILD",tone:"current",after:"ecosystem",title:"Mining finance",description:"Turn locked rewards into composable claims and markets.",source:{label:"LMT design",href:"https://docs.qu.ai/learn/advanced-introduction/liquid-mining-tokens"}},{code:"RWA / MMF",status:"PHASED EXPLORATION",tone:"open",after:"ecosystem",title:"Real-world capital",description:"Tokenized cash and a Quai-yielding money-market path.",source:{label:"RWA direction",href:"https://www.qu.ai/blog/bringing-rwas-to-quai"}},{code:"qBTC",status:"PROPOSED",tone:"open",after:"releases",title:"BTC on-chain",description:"Federation → BitVM → covenant-secured peg.",source:{label:"qBTC path",href:"https://www.qu.ai/blog/quai-soap-bip302-and-the-end-of-the-hashrate-moat"}},{code:"ZONE SCALE",status:"DEMAND-TRIGGERED",tone:"open",after:"releases",title:"Add execution capacity",description:"Expand zones only when sustained congestion requires it.",source:{label:"Dynamic sharding",href:"https://docs.qu.ai/learn/advanced-introduction/poem/sharding/dynamic-sharding"}},{code:"NIPOPOW",status:"IN PROGRESS",tone:"current",after:"releases",title:"Light proofs",description:"Read-only Prime NiPoPoW proof engine. Groundwork for light clients.",source:{label:"PR #2724",href:"https://github.com/dominant-strategies/go-quai/pull/2724"}},{code:"SNAPSHOTS",status:"IN PROGRESS",tone:"current",after:"releases",links:[{label:"PR #2735",href:"https://github.com/dominant-strategies/go-quai/pull/2735"},{label:"PR #2741",href:"https://github.com/dominant-strategies/go-quai/pull/2741"}],title:"Snapshot sync",description:"Resumable startup sync and live coordinated Pebble snapshots.",source:{label:"PR #2737",href:"https://github.com/dominant-strategies/go-quai/pull/2737"}},{code:"INFERENCE",status:"EXPLORING",tone:"open",after:"research",title:"Inference is Work",description:"AI inference as a mineable form of work. Exploratory.",source:{label:"Coming soon"}},{code:"XMR / ZEC",status:"EXPLORING",tone:"open",after:"research",title:"Monero and Zcash as SOAP chains",description:"Evaluate RandomX and Equihash work as future SOAP sources. No commitment.",source:{label:"SOAP launch",href:"https://www.qu.ai/blog/project-soap-launches-on-quai-mainnet"}},{code:"POST-QUANTUM",status:"ACTIVE RESEARCH",tone:"open",after:"research",title:"Post-quantum security",description:"Evaluate schemes, migration, and wallets. No scheme selected.",source:{label:"Risk primer",href:"https://www.youtube.com/watch?v=1ISqNAhbOOc"}},{code:"PRIVATE CASH",status:"RESEARCH",tone:"open",after:"research",title:"Stronger payment privacy",description:"Explore private constructions beyond current Qi design.",source:{label:"Research talk",href:"https://www.youtube.com/watch?v=BgvCrcRHkVA"}},{code:"QI PRIVACY",status:"IN PROGRESS",tone:"current",after:"research",title:"Qi privacy usability",description:"Open go-quai work on Qi privacy UX.",source:{label:"PR #2736",href:"https://github.com/dominant-strategies/go-quai/pull/2736"}}
1,{code:"X402",status:"IN REVIEW",tone:"current",after:"ecosystem",title:"x402 on Quai",description:"HTTP-native payments settled on Quai. Two PRs open in the x402 fork.",highlights:["PR #2: exact scheme for Quai. Adds the @x402/quai mechanism, a Permit2 proxy, a native QUAI escrow contract, and the scheme spec.","PR #3: work scheme. Adds a profile-based payment mechanism with a Quai profile spec.","Both open since 2026-07-29. Not merged upstream."],links:[{label:"PR #3",href:"https://github.com/dominant-strategies/x402/pull/3"}],source:{label:"PR #2",href:"https://github.com/dominant-strategies/x402/pull/2"}},{code:"AI PAYMENTS",status:"PROTOTYPING",tone:"current",after:"ecosystem",title:"Machine-native money",description:"Let software earn and spend neutral energy money.",source:{label:"AI thesis",href:"https://www.youtube.com/watch?v=-1GV_vfvIbQ"}},{code:"PELAGUS + BLIP",status:"EXPANDING",tone:"current",after:"ecosystem",title:"Wallet and payment reach",description:"Broaden merchant, swap, connectivity, and recovery flows.",source:{label:"Wallets",href:"https://www.qu.ai/wallets"}}]}];var d=a(9963),u=a.n(d);let p=["research","testnets","mainnet","releases","ecosystem"],h=new Set(["testnets"]),m=[{from:"research",to:"testnets",date:"2021-11"},{from:"testnets",to:"mainnet",date:"2025-02-04"},{from:"mainnet",to:"releases",date:"2025-05-06"}],g="roadmap-pop",f=e=>1+(e-1)*.5,b={year:"var(--y-w)",half:"var(--h-w)",quarter:"var(--q-w)",next:"var(--next-w)"},v=e=>b[e];function w(e){var t,a;let{today:d,tones:b}=e,{cols:w,g:E,nowCol:x,nextCol:_,nowFrac:y,nowWidth:k,lanes:A,elbows:R,nodes:P}=(0,i.useMemo)(()=>{var e,t;let a=function(e){let t=[];for(let e=2018;e<2024;e++)t.push({key:String(e),label:String(e),kind:"year",start:"".concat(e,"-01-01"),end:"".concat(e+1,"-01-01")});let[a,n]=e.split("-").map(Number),i=Math.floor((n-1)/3)+1;for(let e=2024;e<2025;e++)t.push({key:"".concat(e,"-H1"),label:"".concat(e),kind:"half",start:"".concat(e,"-01-01"),end:"".concat(e,"-07-01")}),t.push({key:"".concat(e,"-H2"),label:"H2",kind:"half",start:"".concat(e,"-07-01"),end:"".concat(e+1,"-01-01")});for(let e=2025;e<=a;e++)for(let n=1;n<=4&&(e!==a||!(n>i));n++){let a=(n-1)*3+1;t.push({key:"".concat(e,"-Q").concat(n),label:1===n?"".concat(e):"Q".concat(n),kind:"quarter",start:"".concat(e,"-").concat(r(a),"-01"),end:4===n?"".concat(e+1,"-01-01"):"".concat(e,"-").concat(r(a+3),"-01")})}return t.push({key:"next",label:"NEXT",kind:"next",start:e,end:"9999-12-31"}),t}(d),n=e=>e+2,i=a.length-2,l=n(i),u=n(a.length-1),h=function(e,t){let a=Date.parse(e),n=Date.parse(t.start);return Math.min(1,Math.max(0,(a-n)/(Date.parse(t.end)-n)))}(d,a[i]),g=v(a[i].kind),f=new Map,b=null!=(t=null==(e=c.find(e=>"active"===e.id))?void 0:e.items)?t:[],w=p.map((e,t)=>{let i=c.find(t=>t.id===e),r=new Map;for(let e of i.items){var l;if(!e.date)continue;let t=n(s(a,e.date));r.set(t,[...null!=(l=r.get(t))?l:[],e]),f.set(o(i.id,e.code),{id:o(i.id,e.code),item:e,laneLabel:i.label})}let d=[...r.keys()].sort((e,t)=>e-t),p=b.filter(t=>t.after===e);for(let e of p)f.set(o("active",e.code),{id:o("active",e.code),item:e,laneLabel:i.label});return{phase:i,row:t+2,cells:d.map((e,t)=>{var a;return{col:e,span:Math.min(3,(null!=(a=d[t+1])?a:u)-e),items:r.get(e)}}),tips:p,first:d[0],last:d[d.length-1]}}),E=m.map(e=>({col:n(s(a,e.date)),fromRow:p.indexOf(e.from)+2,toRow:p.indexOf(e.to)+2}));return{cols:a,g:n,nowCol:l,nextCol:u,nowFrac:h,nowWidth:g,lanes:w,elbows:E,nodes:f}},[d]),[S,I]=(0,i.useState)(null),L=(0,i.useRef)(null),N=(0,i.useRef)(null),q=(0,i.useRef)(null),T=(0,i.useRef)(null),[C,j]=(0,i.useState)(1),[D,M]=(0,i.useState)(!1),[O,V]=(0,i.useState)(.5),H=(0,i.useRef)(C),Q=(0,i.useRef)(C),B=(0,i.useRef)(O);B.current=O;let U=(0,i.useRef)(null),W=(0,i.useRef)(null),G=(e,t)=>{let a=e.firstElementChild,n=e.querySelector("[data-lane-label]"),i=e.querySelector("[data-next]");if(!a||!n||!i)return null;let r=n.getBoundingClientRect().width/t,s=i.getBoundingClientRect().width/t;
1return{laneW:r,nextW:s,timeW:(a.getBoundingClientRect().width/t-r-s)/f(t)}},F=(e,t,a)=>{var n,i,r,s;let o=q.current;if(!o)return;let l=Math.round(100*Math.min(3,Math.max(B.current,e)))/100;if(l===H.current)return;let c=o.getBoundingClientRect();W.current={offsetX:(null!=t?t:c.left+c.width/2)-c.left,offsetY:(null!=a?a:c.top+c.height/2)-c.top,scrollLeft:null!=(r=null==(n=W.current)?void 0:n.scrollLeft)?r:o.scrollLeft,scrollTop:null!=(s=null==(i=W.current)?void 0:i.scrollTop)?s:o.scrollTop},H.current=l,j(l)},X=(0,i.useRef)(F);X.current=F,(0,i.useEffect)(()=>{let e=q.current;if(!e)return;let t=()=>{let t=G(e,Q.current);if(!t)return;let a=window.matchMedia("(max-width: 680px)").matches,n=a?.65:.5,i=e=>(t.laneW+t.nextW+t.timeW*f(e))*e,r=n,s=1;if(i(r)>e.clientWidth)s=r;else if(i(s)>e.clientWidth)for(let t=0;t<24;t++){let t=(r+s)/2;i(t)<=e.clientWidth?s=t:r=t}let o=Math.max(n,Math.floor(100*s)/100);V(o),B.current=o,U.current!==a?(U.current=a,X.current(a?.65:1)):H.current<o&&X.current(o)};t();let a=new ResizeObserver(t);return a.observe(e),()=>a.disconnect()},[]),(0,i.useLayoutEffect)(()=>{let e=q.current,t=W.current,a=Q.current;if(Q.current=C,W.current=null,!e||!t||a===C)return;let n=G(e,C);if(!n)return;let i=C/a,r=t.scrollLeft+t.offsetX-n.laneW*a,s=r>=0?n.laneW*C+r*i*(f(C)/f(a)):(t.scrollLeft+t.offsetX)*i,o=(t.scrollTop+t.offsetY)*i;e.scrollLeft=Math.max(0,s-t.offsetX),e.scrollTop=Math.max(0,o-t.offsetY)},[C]),(0,i.useEffect)(()=>{let e=q.current;if(!e)return;let t=e=>{(e.ctrlKey||e.metaKey)&&(e.preventDefault(),X.current(H.current*Math.exp(-(.01*e.deltaY)),e.clientX,e.clientY))};return e.addEventListener("wheel",t,{passive:!1}),()=>e.removeEventListener("wheel",t)},[]),(0,i.useEffect)(()=>{let e=q.current;if(!e)return;let t=!1,a=!1,n=0,i=0,r=0,s=0,o=o=>{"mouse"===o.pointerType&&0===o.button&&(t=!0,a=!1,n=o.clientX,i=o.clientY,r=e.scrollLeft,s=e.scrollTop)},l=o=>{if(!t)return;let l=o.clientX-n,c=o.clientY-i;!a&&4>Math.hypot(l,c)||(a||(a=!0,e.setPointerCapture(o.pointerId),e.dataset.dragging=""),e.scrollLeft=r-l,e.scrollTop=s-c)},c=n=>{t&&(t=!1,a&&(e.releasePointerCapture(n.pointerId),delete e.dataset.dragging))},d=e=>{a&&(a=!1,e.stopPropagation(),e.preventDefault())};return e.addEventListener("pointerdown",o),e.addEventListener("pointermove",l),e.addEventListener("pointerup",c),e.addEventListener("pointercancel",c),e.addEventListener("click",d,!0),()=>{e.removeEventListener("pointerdown",o),e.removeEventListener("pointermove",l),e.removeEventListener("pointerup",c),e.removeEventListener("pointercancel",c),e.removeEventListener("click",d,!0)}},[]),(0,i.useEffect)(()=>{let e=()=>M(document.fullscreenElement===T.current);return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[]);let K=()=>{var e;I(null),null==(e=N.current)||e.focus()};(0,i.useEffect)(()=>{var e;if(!S)return;null==(e=L.current)||e.focus({preventScroll:!0});let t=e=>{if("Escape"===e.key){var t;I(null),null==(t=N.current)||t.focus()}},a=e=>{var t,a;let n=e.target;(null==(t=L.current)?void 0:t.contains(n))||(null==(a=N.current)?void 0:a.contains(n))||I(null)},n=()=>I(null),i=q.current;return document.addEventListener("keydown",t),document.addEventListener("pointerdown",a),window.addEventListener("resize",n),window.addEventListener("scroll",n,{passive:!0}),null==i||i.addEventListener("scroll",n,{passive:!0}),()=>{document.removeEventListener("keydown",t),document.removeEventListener("pointerdown",a),window.removeEventListener("resize",n),window.removeEventListener("scroll",n),null==i||i.removeEventListener("scroll",n)}},[S]);let z=S?P.get(S.id):void 0,Y={gridTemplateColumns:"var(--lane-w) ".concat(w.map(e=>v(e.kind)).join(" ")),gridTemplateRows:"auto repeat(".concat(p.length,", auto)"),"--now-frac":y,"--zoom":C,"--stretch":f(C)},Z=(e,t)=>{let a=o(e,t.code),i=(null==S?void 0:S.id)===a;return(0,n.jsxs)("button",{type:"button",className:u().node,style:l(t.tone),"data-undated":t.date?void 0:"","data-dim":b.has(t.tone)?void 0:"","aria-expanded":i,"aria-controls":i?g:void 0,onClick:e=>((e,t)=>{if((null==S?void 0:S.id)===t)return void I(null);let a=e.currentTarget.getBoundingClientRect(),n=window.innerWidth,i=window.innerHeight,r=a.top>.62*i,s=Math.min(320,n-16);N.current=e.currentTarget,I({id:t,x:Math.min(Math.max(8,a.left),Math.max(8,n-s-8)),y:r?i-a.top+6:a.bottom+6,above:r})})(e,a),children:[(0,n.jsx)("i",{"aria-hidden":"true"}),(0,n.jsx)("span",{className:u().nodeCode,children:t.code}),(0,n.jsx)("span",{className:u().nodeTitle,children:t.title}),(0,n.jsx)("span",{className:u().nodeDesc,children:t.description})]},a)};return(0,n.jsxs)("figure",{className:u().chart,ref:T,children:[(0,n.jsx)("figcaption",{className:u().srOnly,children:"Timeline from 2018 to now. Years until 2023, half-years in 2024, quarters after. Hollow markers have no date."}),(0,n.jsx)("div",{className:u().canvas,ref:q,children:(0,n.jsxs)("div",{className:u().board,style:Y,"data-detail":C>=2.2?2:+(C>=1.4),children:[w.map((e,t)=>(0,n.jsx)("span",{className:u().rule,"data-strong":/^\d{4}$/.test(e.label)||"next"===e.kind?"":void 0,style:{gridColumn:E(t)}},"rule-".concat(e.key))),(0,n.jsx)("span",{className:u().axisCorner,"aria-hidden":"true"}),w.map((e,t)=>(0,n.jsx)("span",{className:u().axis,"data-kind":e.kind,"data-next":"next"===e.kind?"":void 0,style:{gridColumn:E(t)},children:e.label},"axis-".concat(e.key))),A.map(e=>{let t=h.has(e.phase.id)?e.last:x,a=w[e.last-2].kind;return(0,n.jsxs)(i.Fragment,{children:[(0,n.jsx)("span",{className:u().laneBg,style:{gridRow:e.row}}),(0,n.jsxs)("div",{className:u().laneLabel,"data-lane-label":"",style:{gridRow:e.row},children:[(0,n.jsx)("span",{children:e.phase.index}),(0,n.jsx)("h3",{children:e.phase.label}),(0,n.jsx)("small",{children:e.phase.signal})]}),(0,n.jsx)("span",{className:u().spine,style:{gridRow:e.row,gridColumn:"".concat(e.first," / ").concat(t+1),marginLeft:"var(--node-x)",marginRight:t===x?"calc((1 - var(--now-frac)) * ".concat(k,")"):"calc(".concat(v(a)," - var(--node-x))")}}),t!==x&&(0,n.jsx)("span",{className:u().spine,"data-dashed":"",style:{gridRow:e.row,gridColumn:"".concat(e.last," / ").concat(x+1),marginLeft:"var(--node-x)",marginRight:"calc((1 - var(--now-frac)) * ".concat(k,")")}}),e.tips.length>0&&(0,n.jsx)("span",{className:u().spine,"data-dashed":"",style:{gridRow:e.row,gridColumn:"".concat(x," / ").concat(_+1),marginLeft:"calc(var(--now-frac) * ".concat(k,")"),marginRight:"calc(var(--next-w) - var(--node-x))"}}),e.cells.map(t=>(0,n.jsx)("div",{className:u().cell,style:{gridRow:e.row,gridColumn:"".concat(t.col," / ").concat(t.col+t.span)},children:t.items.map(t=>Z(e.phase.id,t))},"".concat(e.phase.id,"-").concat(t.col))),e.tips.length>0&&(0,n.jsx)("div",{className:u().cell,style:{gridRow:e.row,gridColumn:_},children:e.tips.map(e=>Z("active",e))})]},e.phase.id)}),R.map((e,t)=>(0,n.jsxs)(i.Fragment,{children:[(0,n.jsx)("span",{className:u().drop,style:{gridColumn:e.col,gridRow:e.fromRow}}),(0,n.jsx)("span",{className:u().rise,style:{gridColumn:e.col,gridRow:e.toRow}})]},"elbow-".concat(t))),(0,n.jsx)("span",{className:u().now,style:{gridColumn:x,gridRow:"1 / -1"},"aria-hidden":"true"}),(0,n.jsx)("span",{className:u().nowLabel,style:{gridColumn:x,gridRow:1},"aria-hidden":"true",children:"NOW"})]})}),(0,n.jsxs)("div",{className:u().tools,role:"group","aria-label":"Map controls",children:[(0,n.jsx)("button",{type:"button",onClick:()=>F(C-.25),disabled:C<=O,"aria-label":"Zoom out",children:"−"}),(0,n.jsxs)("button",{type:"button",onClick:()=>F(1),"aria-label":"Reset zoom",children:[Math.round(100*C),"%"]}),(0,n.jsx)("button",{type:"button",onClick:()=>F(C+.25),disabled:C>=3,"aria-label":"Zoom in",children:"+"}),(0,n.jsx)("button",{type:"button",onClick:()=>
1{if(document.fullscreenElement)document.exitFullscreen();else{var e,t;null==(t=T.current)||null==(e=t.requestFullscreen)||e.call(t)}},"aria-pressed":D,children:D?"Close ✕":"Expand ⤢"})]}),S&&z&&(0,n.jsxs)("div",{id:g,ref:L,className:u().pop,role:"dialog","aria-label":z.item.title,tabIndex:-1,style:{...l(z.item.tone),left:S.x,[S.above?"bottom":"top"]:S.y},children:[(0,n.jsxs)("div",{className:u().popHead,children:[(0,n.jsx)("span",{children:z.item.code}),(0,n.jsx)("strong",{children:z.item.status})]}),(0,n.jsx)("h4",{children:z.item.title}),(0,n.jsx)("p",{children:z.item.description}),(0,n.jsxs)("dl",{className:u().popMeta,children:[(0,n.jsx)("dt",{children:"Date"}),(0,n.jsx)("dd",{children:null!=(a=z.item.date)?a:"None"}),(0,n.jsx)("dt",{children:"Lane"}),(0,n.jsx)("dd",{children:z.laneLabel})]}),z.item.highlights&&(0,n.jsx)("ul",{className:u().popNotes,children:z.item.highlights.map(e=>(0,n.jsx)("li",{children:e},e))}),(0,n.jsxs)("div",{className:u().popActions,children:[z.item.source.href?(0,n.jsxs)("a",{href:z.item.source.href,rel:"noreferrer",target:"_blank",children:[z.item.source.label," ↗"]}):(0,n.jsx)("span",{children:z.item.source.label}),null==(t=z.item.links)?void 0:t.map(e=>(0,n.jsxs)("a",{href:e.href,rel:"noreferrer",target:"_blank",children:[e.label," ↗"]},e.href)),(0,n.jsx)("a",{href:"#".concat(z.id),onClick:K,children:"Row ↓"})]}),(0,n.jsx)("button",{type:"button",className:u().popClose,"aria-label":"Close",onClick:K,children:"\xd7"})]})]})}let E=[{tone:"live",label:"Live"},{tone:"current",label:"Current"},{tone:"open",label:"Exploratory"},{tone:"archive",label:"Archive"}],x=[{id:"map",label:"Map"},{id:"list",label:"List"}];function _(e){let{today:t,list:a}=e,[r,s]=(0,i.useState)("map"),[o,c]=(0,i.useState)(null),[d,p]=(0,i.useState)(()=>new Set(E.map(e=>e.tone)));return(0,i.useEffect)(()=>{!window.location.hash&&window.matchMedia("(max-width: 680px)").matches&&s("list")},[]),(0,i.useEffect)(()=>{let e=()=>{let e=decodeURIComponent(window.location.hash.slice(1));if(!e)return;let t=document.getElementById(e);(null==t?void 0:t.closest('[data-view="list"]'))&&(s("list"),c(e))};return e(),window.addEventListener("hashchange",e),()=>window.removeEventListener("hashchange",e)},[]),(0,i.useEffect)(()=>{var e;"list"===r&&o&&(null==(e=document.getElementById(o))||e.scrollIntoView({block:"start"}),c(null))},[r,o]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:u().bar,children:[(0,n.jsx)("div",{className:u().tabs,role:"tablist","aria-label":"Roadmap views",onKeyDown:e=>{var t;if("ArrowLeft"!==e.key&&"ArrowRight"!==e.key)return;e.preventDefault();let a=x.findIndex(e=>e.id===r),n=x[(a+("ArrowRight"===e.key?1:x.length-1))%x.length];s(n.id),null==(t=document.getElementById("tab-".concat(n.id)))||t.focus()},children:x.map(e=>(0,n.jsx)("button",{type:"button",role:"tab",id:"tab-".concat(e.id),"aria-selected":r===e.id,"aria-controls":"panel-".concat(e.id),tabIndex:r===e.id?0:-1,onClick:()=>s(e.id),children:e.label},e.id))}),(0,n.jsx)("div",{className:u().legend,role:"group","aria-label":"Filter by status",hidden:"map"!==r,children:E.map(e=>{let{tone:t,label:a}=e;return(0,n.jsxs)("button",{type:"button",style:l(t),"data-tone":t,"aria-pressed":d.has(t),onClick:()=>p(e=>{let a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a}),children:[(0,n.jsx)("i",{"aria-hidden":"true"}),a]},t)})})]}),(0,n.jsx)("div",{id:"panel-map",role:"tabpanel","aria-labelledby":"tab-map","data-view":"map",hidden:"map"!==r,children:(0,n.jsx)(w,{today:t,tones:d})}),(0,n.jsx)("div",{id:"panel-list",role:"tabpanel","aria-labelledby":"tab-list","data-view":"list",hidden:"list"!==r,children:a})]})}},3911:(e,t,a)=>{Promise.resolve().then(a.bind(a,7452)),Promise.resolve().then(a.t.bind(a,9963,23)),Promise.resolve().then(a.bind(a,3633))},7452:(e,t,a)=>{"use strict";a.d(t,{HighlightsToggle:()=>c,StageSection:()=>l});var n=a(5155),i=a(2115),r=a(9963),s=a.n(r);function o(){return(0,n.jsx)("svg",{"aria-hidden":"true",viewBox:"0 0 12 12",children:(0,n.jsx)("path",{d:"M2.5 4.5 6 8l3.5-3.5"})})}function l(e){let{id:t,index:a,label:r,signal:l,count:c,children:d}=e,[u,p]=(0,i.useState)(!0),h=(0,i.useId)();return(0,n.jsxs)("section",{className:s().stage,id:t,children:[(0,n.jsxs)("header",{className:s().stageHeader,children:[(0,n.jsx)("span",{className:s().stageIndex,children:a}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:r}),(0,n.jsx)("p",{children:l})]}),(0,n.jsxs)("button",{type:"button",className:s().stageToggle,"aria-expanded":u,"aria-controls":h,onClick:()=>p(e=>!e),children:[(0,n.jsx)("span",{children:String(c).padStart(2,"0")}),(0,n.jsx)(o,{})]})]}),(0,n.jsx)("div",{className:s().events,id:h,hidden:!u,children:d})]})}function c(e){let{items:t,links:a}=e,[r,l]=(0,i.useState)(!1),c=(0,i.useId)();return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{type:"button",className:s().notesToggle,"aria-expanded":r,"aria-controls":c,onClick:()=>l(e=>!e),children:["Notes",(0,n.jsx)(o,{})]}),(0,n.jsxs)("ul",{className:s().notes,id:c,hidden:!r,children:[t.map(e=>(0,n.jsx)("li",{children:e},e)),null==a?void 0:a.map(e=>(0,n.jsx)("li",{children:(0,n.jsxs)("a",{href:e.href,rel:"noreferrer",target:"_blank",children:[e.label," ↗"]})},e.href))]})]})}},9963:e=>{e.exports={page:"roadmap_page__KXifq",grid:"roadmap_grid___Zg5u",shell:"roadmap_shell__ao2wg",controlHeader:"roadmap_controlHeader__i1cLE",srOnly:"roadmap_srOnly__YTgX2",stageNav:"roadmap_stageNav__VUOf_",source:"roadmap_source__EGeD4",footer:"roadmap_footer__Y8rqE",flow:"roadmap_flow__hVJuC",stage:"roadmap_stage__vKtVj",stageHeader:"roadmap_stageHeader__w2tX_",stageIndex:"roadmap_stageIndex__RstMH",events:"roadmap_events__yLgPL",event:"roadmap_event__PQcdc",eventNode:"roadmap_eventNode__wZmx9",eventMeta:"roadmap_eventMeta__VeAR_",eventAction:"roadmap_eventAction__cvGH7",stats:"roadmap_stats__wfOIz",stat:"roadmap_stat__H23eW",chart:"roadmap_chart__8QuDU",canvas:"roadmap_canvas__J_pGX",tools:"roadmap_tools__5Ul2h",legend:"roadmap_legend__5I87f",node:"roadmap_node__FTwbA",stageToggle:"roadmap_stageToggle__bkxej",notesToggle:"roadmap_notesToggle__0am1K",popClose
1:"roadmap_popClose__4mcUz",popActions:"roadmap_popActions__BulLt",board:"roadmap_board__SlSZv",nodeTitle:"roadmap_nodeTitle__2WTZg",nodeDesc:"roadmap_nodeDesc__SV983",rule:"roadmap_rule__Td43F",axisCorner:"roadmap_axisCorner__g1VbS",axis:"roadmap_axis__U2KYF",laneBg:"roadmap_laneBg__bhJ_J",laneLabel:"roadmap_laneLabel__WnkZD",spine:"roadmap_spine__iAbjF",drop:"roadmap_drop__ms8AL",rise:"roadmap_rise__Tlzlh",cell:"roadmap_cell__Q3gxH",nodeCode:"roadmap_nodeCode__jFsZ3",stars:"roadmap_stars__fnv9P",starsHead:"roadmap_starsHead__ISq0C",starList:"roadmap_starList__FFl1Z",bar:"roadmap_bar__thFq7",tabs:"roadmap_tabs__RAcAx",live:"roadmap_live__J8OpO",pulse:"roadmap_pulse__V9DMT",now:"roadmap_now__Vu6zl",nowLabel:"roadmap_nowLabel__LkUg_",pop:"roadmap_pop__mL7tq",popHead:"roadmap_popHead__ITGsx",popMeta:"roadmap_popMeta__tcMRp",popNotes:"roadmap_popNotes__MNo_5",notes:"roadmap_notes__RGKvf"}}},e=>{e.O(0,[9904,8441,1255,7358],()=>e(e.s=3911)),_N_E=e.O()}]);

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.