[{"data":1,"prerenderedAt":1977},["ShallowReactive",2],{"docs-nav":3,"doc-\u002Fdocs\u002Farchitecture":79,"content-query-3GhynR0rCz":1122},[4,10,15,19,23,28,34,38,43,47,52,57,61,66,70,74],{"_path":5,"title":6,"description":7,"order":8,"category":9},"\u002Fdocs\u002Fapi-reference","API Reference","Overview of the Vaultaris REST API — endpoints, authentication, response conventions, and rate limiting.",1,"Reference",{"_path":11,"title":12,"description":13,"order":14,"category":9},"\u002Fdocs\u002Farchitecture","Architecture","System design overview — components, request lifecycle, background workers, and data flow in Vaultaris.",4,{"_path":16,"title":17,"description":18,"order":8,"category":17},"\u002Fdocs\u002Fconcepts","Core Concepts","Understand the building blocks of Vaultaris — tenants, users, roles, groups, applications, sessions, and the security primitives that connect them.",{"_path":20,"title":21,"description":22,"order":8,"category":21},"\u002Fdocs\u002Fconfiguration","Configuration","Complete reference for all Vaultaris environment variables.",{"_path":24,"title":25,"description":26,"order":8,"category":27},"\u002Fdocs\u002Fdeployment","Deployment Guide","Deploy Vaultaris to production using Docker Compose, bare metal, or a managed container platform.","Deployment",{"_path":29,"title":30,"description":31,"order":32,"category":33},"\u002Fdocs\u002Finstallation","Installation","Install Vaultaris using Docker, a pre-built binary, or by compiling from source.",3,"Getting Started",{"_path":35,"title":36,"description":37,"order":8,"category":33},"\u002Fdocs\u002Fintroduction","Introduction","Vaultaris is an open-source, enterprise-grade Identity and Access Management platform written in Rust — a self-hostable alternative to Keycloak and Auth0.",{"_path":39,"title":40,"description":41,"order":42,"category":27},"\u002Fdocs\u002Fkubernetes","Kubernetes","Deploy Vaultaris on Kubernetes using the official Helm chart or plain manifests.",2,{"_path":44,"title":45,"description":46,"order":42,"category":17},"\u002Fdocs\u002Fmulti-tenancy","Multi-Tenancy","How Vaultaris isolates organizations, supports SaaS use cases, and manages license-driven resource freezing.",{"_path":48,"title":49,"description":50,"order":8,"category":51},"\u002Fdocs\u002Foauth-oidc","OAuth 2.0 & OpenID Connect","How to integrate Vaultaris as an authorization server — authorization code, client credentials, password flows, DPoP sender-constrained tokens, and hosted login.","Authentication & Authorization",{"_path":53,"title":54,"description":55,"order":8,"category":56},"\u002Fdocs\u002Fplugins","Plugin Development","Extend Vaultaris with type-safe native Rust plugins.","Plugins",{"_path":58,"title":59,"description":60,"order":42,"category":33},"\u002Fdocs\u002Fquickstart","Quickstart","Run Vaultaris locally in under five minutes using Docker Compose.",{"_path":62,"title":63,"description":64,"order":42,"category":65},"\u002Fdocs\u002Fsdk-nodejs","Node.js SDK","Use the vaultaris-sdk package to integrate Vaultaris into your Node.js or TypeScript applications. Includes transparent DPoP support.","SDKs",{"_path":67,"title":68,"description":69,"order":8,"category":65},"\u002Fdocs\u002Fsdk-rust","Rust SDK","Use the vaultaris-sdk crate to interact with Vaultaris from your Rust applications. Includes transparent DPoP support.",{"_path":71,"title":72,"description":73,"order":32,"category":9},"\u002Fdocs\u002Fsecurity","Security","Security architecture, cryptographic choices, and hardening recommendations for Vaultaris.",{"_path":75,"title":76,"description":77,"order":78,"category":51},"\u002Fdocs\u002Fwebauthn","WebAuthn \u002F Passkeys \u002F FIDO2","Complete guide to integrating WebAuthn passwordless authentication and passkeys with Vaultaris.",5,{"_path":11,"_dir":80,"_draft":81,"_partial":81,"_locale":82,"title":12,"description":13,"order":14,"category":9,"body":83,"_type":1116,"_id":1117,"_source":1118,"_file":1119,"_stem":1120,"_extension":1121},"docs",false,"",{"type":84,"children":85,"toc":1107},"root",[86,95,349,355,364,370,743,749,755,760,912,918,939,944,950,1000,1005,1042,1086],{"type":87,"tag":88,"props":89,"children":91},"element","h2",{"id":90},"technology-stack",[92],{"type":93,"value":94},"text","Technology stack",{"type":87,"tag":96,"props":97,"children":98},"table",{},[99,118],{"type":87,"tag":100,"props":101,"children":102},"thead",{},[103],{"type":87,"tag":104,"props":105,"children":106},"tr",{},[107,113],{"type":87,"tag":108,"props":109,"children":110},"th",{},[111],{"type":93,"value":112},"Layer",{"type":87,"tag":108,"props":114,"children":115},{},[116],{"type":93,"value":117},"Technology",{"type":87,"tag":119,"props":120,"children":121},"tbody",{},[122,136,149,162,175,188,201,214,227,257,270,291,336],{"type":87,"tag":104,"props":123,"children":124},{},[125,131],{"type":87,"tag":126,"props":127,"children":128},"td",{},[129],{"type":93,"value":130},"Language",{"type":87,"tag":126,"props":132,"children":133},{},[134],{"type":93,"value":135},"Rust (edition 2024)",{"type":87,"tag":104,"props":137,"children":138},{},[139,144],{"type":87,"tag":126,"props":140,"children":141},{},[142],{"type":93,"value":143},"HTTP framework",{"type":87,"tag":126,"props":145,"children":146},{},[147],{"type":93,"value":148},"Axum 0.8 + Tower middleware",{"type":87,"tag":104,"props":150,"children":151},{},[152,157],{"type":87,"tag":126,"props":153,"children":154},{},[155],{"type":93,"value":156},"OpenAPI",{"type":87,"tag":126,"props":158,"children":159},{},[160],{"type":93,"value":161},"aide 0.16 — spec auto-generated from handler signatures",{"type":87,"tag":104,"props":163,"children":164},{},[165,170],{"type":87,"tag":126,"props":166,"children":167},{},[168],{"type":93,"value":169},"Database",{"type":87,"tag":126,"props":171,"children":172},{},[173],{"type":93,"value":174},"PostgreSQL 14+ via SQLx 0.8 (typed queries, async, migrations)",{"type":87,"tag":104,"props":176,"children":177},{},[178,183],{"type":87,"tag":126,"props":179,"children":180},{},[181],{"type":93,"value":182},"Cache \u002F rate limit",{"type":87,"tag":126,"props":184,"children":185},{},[186],{"type":93,"value":187},"Redis via redis-rs (optional, graceful fallback)",{"type":87,"tag":104,"props":189,"children":190},{},[191,196],{"type":87,"tag":126,"props":192,"children":193},{},[194],{"type":93,"value":195},"JWT signing (OAuth)",{"type":87,"tag":126,"props":197,"children":198},{},[199],{"type":93,"value":200},"Rotating ed25519 \u002F ECDSA P-256 keys from JWK set",{"type":87,"tag":104,"props":202,"children":203},{},[204,209],{"type":87,"tag":126,"props":205,"children":206},{},[207],{"type":93,"value":208},"JWT signing (internal)",{"type":87,"tag":126,"props":210,"children":211},{},[212],{"type":93,"value":213},"HMAC-SHA256 (MFA tokens, setup tokens)",{"type":87,"tag":104,"props":215,"children":216},{},[217,222],{"type":87,"tag":126,"props":218,"children":219},{},[220],{"type":93,"value":221},"Passwords",{"type":87,"tag":126,"props":223,"children":224},{},[225],{"type":93,"value":226},"Argon2id — OWASP-recommended parameters",{"type":87,"tag":104,"props":228,"children":229},{},[230,235],{"type":87,"tag":126,"props":231,"children":232},{},[233],{"type":93,"value":234},"Encryption at rest",{"type":87,"tag":126,"props":236,"children":237},{},[238,240,247,249,255],{"type":93,"value":239},"AES-256-GCM via ",{"type":87,"tag":241,"props":242,"children":244},"code",{"className":243},[],[245],{"type":93,"value":246},"vaultaris-crypto",{"type":93,"value":248}," crate (",{"type":87,"tag":241,"props":250,"children":252},{"className":251},[],[253],{"type":93,"value":254},"EncryptedField\u003CT>",{"type":93,"value":256},")",{"type":87,"tag":104,"props":258,"children":259},{},[260,265],{"type":87,"tag":126,"props":261,"children":262},{},[263],{"type":93,"value":264},"Email",{"type":87,"tag":126,"props":266,"children":267},{},[268],{"type":93,"value":269},"5 native providers: SMTP, SendGrid, Mailgun, AWS SES (SigV4), Brevo",{"type":87,"tag":104,"props":271,"children":272},{},[273,278],{"type":87,"tag":126,"props":274,"children":275},{},[276],{"type":93,"value":277},"GeoIP",{"type":87,"tag":126,"props":279,"children":280},{},[281,283,289],{"type":93,"value":282},"MaxMind GeoLite2 ",{"type":87,"tag":241,"props":284,"children":286},{"className":285},[],[287],{"type":93,"value":288},".mmdb",{"type":93,"value":290}," (offline) + ip-api.com fallback",{"type":87,"tag":104,"props":292,"children":293},{},[294,299],{"type":87,"tag":126,"props":295,"children":296},{},[297],{"type":93,"value":298},"Plugin runtime",{"type":87,"tag":126,"props":300,"children":301},{},[302,304,310,312,318,320,326,328,334],{"type":93,"value":303},"Native Rust ",{"type":87,"tag":241,"props":305,"children":307},{"className":306},[],[308],{"type":93,"value":309},".so",{"type":93,"value":311}," \u002F ",{"type":87,"tag":241,"props":313,"children":315},{"className":314},[],[316],{"type":93,"value":317},".dylib",{"type":93,"value":319}," via ",{"type":87,"tag":241,"props":321,"children":323},{"className":322},[],[324],{"type":93,"value":325},"libloading",{"type":93,"value":327}," + ",{"type":87,"tag":241,"props":329,"children":331},{"className":330},[],[332],{"type":93,"value":333},"stabby",{"type":93,"value":335}," ABI stability",{"type":87,"tag":104,"props":337,"children":338},{},[339,344],{"type":87,"tag":126,"props":340,"children":341},{},[342],{"type":93,"value":343},"Async runtime",{"type":87,"tag":126,"props":345,"children":346},{},[347],{"type":93,"value":348},"Tokio",{"type":87,"tag":88,"props":350,"children":352},{"id":351},"request-lifecycle",[353],{"type":93,"value":354},"Request lifecycle",{"type":87,"tag":356,"props":357,"children":359},"pre",{"code":358},"Incoming HTTP\n  │\n  ├─ Rate limit middleware (Redis sliding-window \u002F in-memory fallback)\n  ├─ CORS middleware\n  ├─ HTTP tracing (request ID, structured spans)\n  ├─ Request timeout (30 s hard limit)\n  │\n  ├─ Router\n  │   ├─ Public routes   (health, OAuth, OIDC discovery, hosted login, setup)\n  │   ├─ Auth routes     (Bearer token → AuthenticatedUser extractor)\n  │   │   └─ Tenant isolation middleware (tenant_id from header or JWT claim)\n  │   └─ Service-token routes (billing-shadow admin, constant-time comparison)\n  │\n  ├─ Handler\n  │   ├─ DTO deserialization + validation\n  │   ├─ License feature\u002Flimit check\n  │   ├─ Domain service call\n  │   │   ├─ PostgreSQL queries (SQLx, parameterized only)\n  │   │   └─ Audit log write\n  │   ├─ Email dispatch (async, fire-and-forget)\n  │   └─ Plugin hook fire (async)\n  │\n  └─ Response (JSON)\n",[360],{"type":87,"tag":241,"props":361,"children":362},{"__ignoreMap":82},[363],{"type":93,"value":358},{"type":87,"tag":88,"props":365,"children":367},{"id":366},"database-schema-key-tables",[368],{"type":93,"value":369},"Database schema (key tables)",{"type":87,"tag":96,"props":371,"children":372},{},[373,389],{"type":87,"tag":100,"props":374,"children":375},{},[376],{"type":87,"tag":104,"props":377,"children":378},{},[379,384],{"type":87,"tag":108,"props":380,"children":381},{},[382],{"type":93,"value":383},"Table",{"type":87,"tag":108,"props":385,"children":386},{},[387],{"type":93,"value":388},"Purpose",{"type":87,"tag":119,"props":390,"children":391},{},[392,409,426,450,481,498,515,532,549,566,583,600,617,634,651,675,692,709,726],{"type":87,"tag":104,"props":393,"children":394},{},[395,404],{"type":87,"tag":126,"props":396,"children":397},{},[398],{"type":87,"tag":241,"props":399,"children":401},{"className":400},[],[402],{"type":93,"value":403},"tenants",{"type":87,"tag":126,"props":405,"children":406},{},[407],{"type":93,"value":408},"Top-level isolation unit, branding, settings, license ref",{"type":87,"tag":104,"props":410,"children":411},{},[412,421],{"type":87,"tag":126,"props":413,"children":414},{},[415],{"type":87,"tag":241,"props":416,"children":418},{"className":417},[],[419],{"type":93,"value":420},"users",{"type":87,"tag":126,"props":422,"children":423},{},[424],{"type":93,"value":425},"Auth credentials, profile, lockout, freeze state",{"type":87,"tag":104,"props":427,"children":428},{},[429,445],{"type":87,"tag":126,"props":430,"children":431},{},[432,438,439],{"type":87,"tag":241,"props":433,"children":435},{"className":434},[],[436],{"type":93,"value":437},"roles",{"type":93,"value":311},{"type":87,"tag":241,"props":440,"children":442},{"className":441},[],[443],{"type":93,"value":444},"permissions",{"type":87,"tag":126,"props":446,"children":447},{},[448],{"type":93,"value":449},"RBAC graph, composite roles, ABAC conditions",{"type":87,"tag":104,"props":451,"children":452},{},[453,476],{"type":87,"tag":126,"props":454,"children":455},{},[456,462,463,469,470],{"type":87,"tag":241,"props":457,"children":459},{"className":458},[],[460],{"type":93,"value":461},"groups",{"type":93,"value":311},{"type":87,"tag":241,"props":464,"children":466},{"className":465},[],[467],{"type":93,"value":468},"group_members",{"type":93,"value":311},{"type":87,"tag":241,"props":471,"children":473},{"className":472},[],[474],{"type":93,"value":475},"group_roles",{"type":87,"tag":126,"props":477,"children":478},{},[479],{"type":93,"value":480},"Group hierarchy, membership",{"type":87,"tag":104,"props":482,"children":483},{},[484,493],{"type":87,"tag":126,"props":485,"children":486},{},[487],{"type":87,"tag":241,"props":488,"children":490},{"className":489},[],[491],{"type":93,"value":492},"applications",{"type":87,"tag":126,"props":494,"children":495},{},[496],{"type":93,"value":497},"App-scoped resource containers",{"type":87,"tag":104,"props":499,"children":500},{},[501,510],{"type":87,"tag":126,"props":502,"children":503},{},[504],{"type":87,"tag":241,"props":505,"children":507},{"className":506},[],[508],{"type":93,"value":509},"oauth_clients",{"type":87,"tag":126,"props":511,"children":512},{},[513],{"type":93,"value":514},"OAuth 2.0 client registrations",{"type":87,"tag":104,"props":516,"children":517},{},[518,527],{"type":87,"tag":126,"props":519,"children":520},{},[521],{"type":87,"tag":241,"props":522,"children":524},{"className":523},[],[525],{"type":93,"value":526},"oauth_authorization_codes",{"type":87,"tag":126,"props":528,"children":529},{},[530],{"type":93,"value":531},"Short-lived auth codes (PKCE)",{"type":87,"tag":104,"props":533,"children":534},{},[535,544],{"type":87,"tag":126,"props":536,"children":537},{},[538],{"type":87,"tag":241,"props":539,"children":541},{"className":540},[],[542],{"type":93,"value":543},"refresh_tokens",{"type":87,"tag":126,"props":545,"children":546},{},[547],{"type":93,"value":548},"Stored refresh tokens (hashed)",{"type":87,"tag":104,"props":550,"children":551},{},[552,561],{"type":87,"tag":126,"props":553,"children":554},{},[555],{"type":87,"tag":241,"props":556,"children":558},{"className":557},[],[559],{"type":93,"value":560},"sessions",{"type":87,"tag":126,"props":562,"children":563},{},[564],{"type":93,"value":565},"Active user sessions (device, IP, user-agent)",{"type":87,"tag":104,"props":567,"children":568},{},[569,578],{"type":87,"tag":126,"props":570,"children":571},{},[572],{"type":87,"tag":241,"props":573,"children":575},{"className":574},[],[576],{"type":93,"value":577},"global_sessions",{"type":87,"tag":126,"props":579,"children":580},{},[581],{"type":93,"value":582},"Cross-domain SSO tokens",{"type":87,"tag":104,"props":584,"children":585},{},[586,595],{"type":87,"tag":126,"props":587,"children":588},{},[589],{"type":87,"tag":241,"props":590,"children":592},{"className":591},[],[593],{"type":93,"value":594},"device_sessions",{"type":87,"tag":126,"props":596,"children":597},{},[598],{"type":93,"value":599},"Per-device login history",{"type":87,"tag":104,"props":601,"children":602},{},[603,612],{"type":87,"tag":126,"props":604,"children":605},{},[606],{"type":87,"tag":241,"props":607,"children":609},{"className":608},[],[610],{"type":93,"value":611},"webauthn_credentials",{"type":87,"tag":126,"props":613,"children":614},{},[615],{"type":93,"value":616},"FIDO2 public keys + sign counters",{"type":87,"tag":104,"props":618,"children":619},{},[620,629],{"type":87,"tag":126,"props":621,"children":622},{},[623],{"type":87,"tag":241,"props":624,"children":626},{"className":625},[],[627],{"type":93,"value":628},"mfa_totp_secrets",{"type":87,"tag":126,"props":630,"children":631},{},[632],{"type":93,"value":633},"AES-GCM encrypted TOTP secrets",{"type":87,"tag":104,"props":635,"children":636},{},[637,646],{"type":87,"tag":126,"props":638,"children":639},{},[640],{"type":87,"tag":241,"props":641,"children":643},{"className":642},[],[644],{"type":93,"value":645},"audit_logs",{"type":87,"tag":126,"props":647,"children":648},{},[649],{"type":93,"value":650},"Append-only, immutable audit records",{"type":87,"tag":104,"props":652,"children":653},{},[654,670],{"type":87,"tag":126,"props":655,"children":656},{},[657,663,664],{"type":87,"tag":241,"props":658,"children":660},{"className":659},[],[661],{"type":93,"value":662},"plugins",{"type":93,"value":311},{"type":87,"tag":241,"props":665,"children":667},{"className":666},[],[668],{"type":93,"value":669},"plugin_instances",{"type":87,"tag":126,"props":671,"children":672},{},[673],{"type":93,"value":674},"Plugin registry and per-tenant activation",{"type":87,"tag":104,"props":676,"children":677},{},[678,687],{"type":87,"tag":126,"props":679,"children":680},{},[681],{"type":87,"tag":241,"props":682,"children":684},{"className":683},[],[685],{"type":93,"value":686},"abac_policies",{"type":87,"tag":126,"props":688,"children":689},{},[690],{"type":93,"value":691},"Attribute-based access control rules",{"type":87,"tag":104,"props":693,"children":694},{},[695,704],{"type":87,"tag":126,"props":696,"children":697},{},[698],{"type":87,"tag":241,"props":699,"children":701},{"className":700},[],[702],{"type":93,"value":703},"identity_providers",{"type":87,"tag":126,"props":705,"children":706},{},[707],{"type":93,"value":708},"Federated IdP configurations",{"type":87,"tag":104,"props":710,"children":711},{},[712,721],{"type":87,"tag":126,"props":713,"children":714},{},[715],{"type":87,"tag":241,"props":716,"children":718},{"className":717},[],[719],{"type":93,"value":720},"licenses",{"type":87,"tag":126,"props":722,"children":723},{},[724],{"type":93,"value":725},"License tier, limits, valid dates",{"type":87,"tag":104,"props":727,"children":728},{},[729,738],{"type":87,"tag":126,"props":730,"children":731},{},[732],{"type":87,"tag":241,"props":733,"children":735},{"className":734},[],[736],{"type":93,"value":737},"system_settings",{"type":87,"tag":126,"props":739,"children":740},{},[741],{"type":93,"value":742},"Bootstrap state, CP credentials",{"type":87,"tag":744,"props":745,"children":746},"p",{},[747],{"type":93,"value":748},"19 versioned migrations embedded in the binary, applied automatically on startup.",{"type":87,"tag":88,"props":750,"children":752},{"id":751},"background-workers",[753],{"type":93,"value":754},"Background workers",{"type":87,"tag":744,"props":756,"children":757},{},[758],{"type":93,"value":759},"Workers start at boot. Leader election via PostgreSQL advisory locks prevents duplicate execution on multi-node deployments.",{"type":87,"tag":96,"props":761,"children":762},{},[763,783],{"type":87,"tag":100,"props":764,"children":765},{},[766],{"type":87,"tag":104,"props":767,"children":768},{},[769,774,779],{"type":87,"tag":108,"props":770,"children":771},{},[772],{"type":93,"value":773},"Worker",{"type":87,"tag":108,"props":775,"children":776},{},[777],{"type":93,"value":778},"Interval",{"type":87,"tag":108,"props":780,"children":781},{},[782],{"type":93,"value":388},{"type":87,"tag":119,"props":784,"children":785},{},[786,804,822,846,870,888],{"type":87,"tag":104,"props":787,"children":788},{},[789,794,799],{"type":87,"tag":126,"props":790,"children":791},{},[792],{"type":93,"value":793},"Expired token cleanup",{"type":87,"tag":126,"props":795,"children":796},{},[797],{"type":93,"value":798},"Every 5 min",{"type":87,"tag":126,"props":800,"children":801},{},[802],{"type":93,"value":803},"Delete expired refresh tokens and authorization codes",{"type":87,"tag":104,"props":805,"children":806},{},[807,812,817],{"type":87,"tag":126,"props":808,"children":809},{},[810],{"type":93,"value":811},"Failed webhook retry",{"type":87,"tag":126,"props":813,"children":814},{},[815],{"type":93,"value":816},"Every 1 min",{"type":87,"tag":126,"props":818,"children":819},{},[820],{"type":93,"value":821},"Retry outbound webhooks up to configured max attempts",{"type":87,"tag":104,"props":823,"children":824},{},[825,830,841],{"type":87,"tag":126,"props":826,"children":827},{},[828],{"type":93,"value":829},"Control-plane heartbeat",{"type":87,"tag":126,"props":831,"children":832},{},[833,839],{"type":87,"tag":241,"props":834,"children":836},{"className":835},[],[837],{"type":93,"value":838},"HEARTBEAT_INTERVAL_SECS",{"type":93,"value":840}," (60 s default)",{"type":87,"tag":126,"props":842,"children":843},{},[844],{"type":93,"value":845},"Report status to CP; receive updated license limits; trigger freeze\u002Funfreeze",{"type":87,"tag":104,"props":847,"children":848},{},[849,854,865],{"type":87,"tag":126,"props":850,"children":851},{},[852],{"type":93,"value":853},"Control-plane telemetry",{"type":87,"tag":126,"props":855,"children":856},{},[857,863],{"type":87,"tag":241,"props":858,"children":860},{"className":859},[],[861],{"type":93,"value":862},"TELEMETRY_INTERVAL_SECS",{"type":93,"value":864}," (900 s default)",{"type":87,"tag":126,"props":866,"children":867},{},[868],{"type":93,"value":869},"Send usage counters to CP (leader node only, fire-and-forget)",{"type":87,"tag":104,"props":871,"children":872},{},[873,878,883],{"type":87,"tag":126,"props":874,"children":875},{},[876],{"type":93,"value":877},"Demo tenant purge",{"type":87,"tag":126,"props":879,"children":880},{},[881],{"type":93,"value":882},"Periodic",{"type":87,"tag":126,"props":884,"children":885},{},[886],{"type":93,"value":887},"Remove expired demo sandbox tenants",{"type":87,"tag":104,"props":889,"children":890},{},[891,896,901],{"type":87,"tag":126,"props":892,"children":893},{},[894],{"type":93,"value":895},"Graceful shutdown",{"type":87,"tag":126,"props":897,"children":898},{},[899],{"type":93,"value":900},"Signal (SIGTERM\u002FSIGINT)",{"type":87,"tag":126,"props":902,"children":903},{},[904,906],{"type":93,"value":905},"Drain in-flight requests via ",{"type":87,"tag":241,"props":907,"children":909},{"className":908},[],[910],{"type":93,"value":911},"tokio::sync::watch",{"type":87,"tag":88,"props":913,"children":915},{"id":914},"multi-node-consistency",[916],{"type":93,"value":917},"Multi-node consistency",{"type":87,"tag":744,"props":919,"children":920},{},[921,923,929,931,937],{"type":93,"value":922},"Nodes are stateless. All durable state lives in PostgreSQL and Redis. Per-node ephemeral state: ",{"type":87,"tag":241,"props":924,"children":926},{"className":925},[],[927],{"type":93,"value":928},"node_id",{"type":93,"value":930}," (UUID, random at boot), ",{"type":87,"tag":241,"props":932,"children":934},{"className":933},[],[935],{"type":93,"value":936},"api_latency_ms",{"type":93,"value":938}," (rolling average), in-memory GeoIP cache, in-memory rate-limit counters (Redis path is primary).",{"type":87,"tag":744,"props":940,"children":941},{},[942],{"type":93,"value":943},"Leader election: the node holding the PostgreSQL advisory lock runs leader-only background jobs (telemetry, some cleanup). Lock is released on graceful shutdown.",{"type":87,"tag":88,"props":945,"children":947},{"id":946},"openapi-generation",[948],{"type":93,"value":949},"OpenAPI generation",{"type":87,"tag":744,"props":951,"children":952},{},[953,959,960,966,968,974,976,982,984,990,992,998],{"type":87,"tag":241,"props":954,"children":956},{"className":955},[],[957],{"type":93,"value":958},"aide",{"type":93,"value":327},{"type":87,"tag":241,"props":961,"children":963},{"className":962},[],[964],{"type":93,"value":965},"schemars",{"type":93,"value":967}," auto-generate the OpenAPI 3.1 spec from handler signatures. Routes registered on ",{"type":87,"tag":241,"props":969,"children":971},{"className":970},[],[972],{"type":93,"value":973},"ApiRouter",{"type":93,"value":975}," appear in the spec; plain ",{"type":87,"tag":241,"props":977,"children":979},{"className":978},[],[980],{"type":93,"value":981},"Router",{"type":93,"value":983}," routes (billing-shadow admin, internal) are excluded. Spec served at ",{"type":87,"tag":241,"props":985,"children":987},{"className":986},[],[988],{"type":93,"value":989},"\u002Fapi\u002Fv1\u002Fdocs\u002Fopenapi.json",{"type":93,"value":991},"; Scalar UI at ",{"type":87,"tag":241,"props":993,"children":995},{"className":994},[],[996],{"type":93,"value":997},"\u002Fapi\u002Fv1\u002Fdocs",{"type":93,"value":999},".",{"type":87,"tag":88,"props":1001,"children":1003},{"id":1002},"plugin-runtime",[1004],{"type":93,"value":298},{"type":87,"tag":744,"props":1006,"children":1007},{},[1008,1010,1016,1018,1024,1026,1032,1034,1040],{"type":93,"value":1009},"Plugins are native Rust dynamic libraries. The ",{"type":87,"tag":241,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":93,"value":1015},"PluginLibraryCache",{"type":93,"value":1017}," calls ",{"type":87,"tag":241,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":93,"value":1023},"dlopen",{"type":93,"value":1025}," once per library path (process-wide); ",{"type":87,"tag":241,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":93,"value":1031},"Arc\u003CLibrary>",{"type":93,"value":1033}," is shared across tenants. ",{"type":87,"tag":241,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":93,"value":1039},"dlclose",{"type":93,"value":1041}," happens when the last tenant uninstalls the plugin.",{"type":87,"tag":744,"props":1043,"children":1044},{},[1045,1047,1052,1054,1060,1062,1068,1070,1076,1078,1084],{"type":93,"value":1046},"ABI stability is enforced by ",{"type":87,"tag":241,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":93,"value":333},{"type":93,"value":1053}," + the ",{"type":87,"tag":241,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":93,"value":1059},"#[plugin_trait]",{"type":93,"value":1061}," proc-macro, which desugars async trait methods to ",{"type":87,"tag":241,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":93,"value":1067},"extern \"C\"",{"type":93,"value":1069}," functions returning ",{"type":87,"tag":241,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":93,"value":1075},"DynFuture",{"type":93,"value":1077},". Plugins compiled against one Vaultaris release can be loaded by subsequent releases without recompilation as long as the ",{"type":87,"tag":241,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":93,"value":1083},"abi_version",{"type":93,"value":1085}," in the manifest matches.",{"type":87,"tag":744,"props":1087,"children":1088},{},[1089,1091,1097,1099,1105],{"type":93,"value":1090},"Per-tenant config is stored under ",{"type":87,"tag":241,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":93,"value":1096},"plugins.\u003Cplugin_id>",{"type":93,"value":1098}," in the tenant's advanced settings JSON. The active schemas endpoint (",{"type":87,"tag":241,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":93,"value":1104},"GET \u002Fapi\u002Fv1\u002Ftenants\u002F{id}\u002Fplugins\u002Factive-schemas",{"type":93,"value":1106},") returns merged field metadata for dashboard UI rendering.",{"title":82,"searchDepth":32,"depth":32,"links":1108},[1109,1110,1111,1112,1113,1114,1115],{"id":90,"depth":42,"text":94},{"id":351,"depth":42,"text":354},{"id":366,"depth":42,"text":369},{"id":751,"depth":42,"text":754},{"id":914,"depth":42,"text":917},{"id":946,"depth":42,"text":949},{"id":1002,"depth":42,"text":298},"markdown","content:docs:architecture.md","content","docs\u002Farchitecture.md","docs\u002Farchitecture","md",{"_path":11,"_dir":80,"_draft":81,"_partial":81,"_locale":82,"title":12,"description":13,"order":14,"category":9,"body":1123,"_type":1116,"_id":1117,"_source":1118,"_file":1119,"_stem":1120,"_extension":1121},{"type":84,"children":1124,"toc":1968},[1125,1129,1334,1338,1345,1349,1678,1682,1686,1690,1819,1823,1839,1843,1847,1886,1890,1918,1952],{"type":87,"tag":88,"props":1126,"children":1127},{"id":90},[1128],{"type":93,"value":94},{"type":87,"tag":96,"props":1130,"children":1131},{},[1132,1146],{"type":87,"tag":100,"props":1133,"children":1134},{},[1135],{"type":87,"tag":104,"props":1136,"children":1137},{},[1138,1142],{"type":87,"tag":108,"props":1139,"children":1140},{},[1141],{"type":93,"value":112},{"type":87,"tag":108,"props":1143,"children":1144},{},[1145],{"type":93,"value":117},{"type":87,"tag":119,"props":1147,"children":1148},{},[1149,1160,1171,1182,1193,1204,1215,1226,1237,1260,1271,1288,1323],{"type":87,"tag":104,"props":1150,"children":1151},{},[1152,1156],{"type":87,"tag":126,"props":1153,"children":1154},{},[1155],{"type":93,"value":130},{"type":87,"tag":126,"props":1157,"children":1158},{},[1159],{"type":93,"value":135},{"type":87,"tag":104,"props":1161,"children":1162},{},[1163,1167],{"type":87,"tag":126,"props":1164,"children":1165},{},[1166],{"type":93,"value":143},{"type":87,"tag":126,"props":1168,"children":1169},{},[1170],{"type":93,"value":148},{"type":87,"tag":104,"props":1172,"children":1173},{},[1174,1178],{"type":87,"tag":126,"props":1175,"children":1176},{},[1177],{"type":93,"value":156},{"type":87,"tag":126,"props":1179,"children":1180},{},[1181],{"type":93,"value":161},{"type":87,"tag":104,"props":1183,"children":1184},{},[1185,1189],{"type":87,"tag":126,"props":1186,"children":1187},{},[1188],{"type":93,"value":169},{"type":87,"tag":126,"props":1190,"children":1191},{},[1192],{"type":93,"value":174},{"type":87,"tag":104,"props":1194,"children":1195},{},[1196,1200],{"type":87,"tag":126,"props":1197,"children":1198},{},[1199],{"type":93,"value":182},{"type":87,"tag":126,"props":1201,"children":1202},{},[1203],{"type":93,"value":187},{"type":87,"tag":104,"props":1205,"children":1206},{},[1207,1211],{"type":87,"tag":126,"props":1208,"children":1209},{},[1210],{"type":93,"value":195},{"type":87,"tag":126,"props":1212,"children":1213},{},[1214],{"type":93,"value":200},{"type":87,"tag":104,"props":1216,"children":1217},{},[1218,1222],{"type":87,"tag":126,"props":1219,"children":1220},{},[1221],{"type":93,"value":208},{"type":87,"tag":126,"props":1223,"children":1224},{},[1225],{"type":93,"value":213},{"type":87,"tag":104,"props":1227,"children":1228},{},[1229,1233],{"type":87,"tag":126,"props":1230,"children":1231},{},[1232],{"type":93,"value":221},{"type":87,"tag":126,"props":1234,"children":1235},{},[1236],{"type":93,"value":226},{"type":87,"tag":104,"props":1238,"children":1239},{},[1240,1244],{"type":87,"tag":126,"props":1241,"children":1242},{},[1243],{"type":93,"value":234},{"type":87,"tag":126,"props":1245,"children":1246},{},[1247,1248,1253,1254,1259],{"type":93,"value":239},{"type":87,"tag":241,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":93,"value":246},{"type":93,"value":248},{"type":87,"tag":241,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":93,"value":254},{"type":93,"value":256},{"type":87,"tag":104,"props":1261,"children":1262},{},[1263,1267],{"type":87,"tag":126,"props":1264,"children":1265},{},[1266],{"type":93,"value":264},{"type":87,"tag":126,"props":1268,"children":1269},{},[1270],{"type":93,"value":269},{"type":87,"tag":104,"props":1272,"children":1273},{},[1274,1278],{"type":87,"tag":126,"props":1275,"children":1276},{},[1277],{"type":93,"value":277},{"type":87,"tag":126,"props":1279,"children":1280},{},[1281,1282,1287],{"type":93,"value":282},{"type":87,"tag":241,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":93,"value":288},{"type":93,"value":290},{"type":87,"tag":104,"props":1289,"children":1290},{},[1291,1295],{"type":87,"tag":126,"props":1292,"children":1293},{},[1294],{"type":93,"value":298},{"type":87,"tag":126,"props":1296,"children":1297},{},[1298,1299,1304,1305,1310,1311,1316,1317,1322],{"type":93,"value":303},{"type":87,"tag":241,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":93,"value":309},{"type":93,"value":311},{"type":87,"tag":241,"props":1306,"children":1308},{"className":1307},[],[1309],{"type":93,"value":317},{"type":93,"value":319},{"type":87,"tag":241,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":93,"value":325},{"type":93,"value":327},{"type":87,"tag":241,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":93,"value":333},{"type":93,"value":335},{"type":87,"tag":104,"props":1324,"children":1325},{},[1326,1330],{"type":87,"tag":126,"props":1327,"children":1328},{},[1329],{"type":93,"value":343},{"type":87,"tag":126,"props":1331,"children":1332},{},[1333],{"type":93,"value":348},{"type":87,"tag":88,"props":1335,"children":1336},{"id":351},[1337],{"type":93,"value":354},{"type":87,"tag":356,"props":1339,"children":1340},{"code":358},[1341],{"type":87,"tag":241,"props":1342,"children":1343},{"__ignoreMap":82},[1344],{"type":93,"value":358},{"type":87,"tag":88,"props":1346,"children":1347},{"id":366},[1348],{"type":93,"value":369},{"type":87,"tag":96,"props":1350,"children":1351},{},[1352,1366],{"type":87,"tag":100,"props":1353,"children":1354},{},[1355],{"type":87,"tag":104,"props":1356,"children":1357},{},[1358,1362],{"type":87,"tag":108,"props":1359,"children":1360},{},[1361],{"type":93,"value":383},{"type":87,"tag":108,"props":1363,"children":1364},{},[1365],{"type":93,"value":388},{"type":87,"tag":119,"props":1367,"children":1368},{},[1369,1384,1399,1420,1447,1462,1477,1492,1507,1522,1537,1552,1567,1582,1597,1618,1633,1648,1663],{"type":87,"tag":104,"props":1370,"children":1371},{},[1372,1380],{"type":87,"tag":126,"props":1373,"children":1374},{},[1375],{"type":87,"tag":241,"props":1376,"children":1378},{"className":1377},[],[1379],{"type":93,"value":403},{"type":87,"tag":126,"props":1381,"children":1382},{},[1383],{"type":93,"value":408},{"type":87,"tag":104,"props":1385,"children":1386},{},[1387,1395],{"type":87,"tag":126,"props":1388,"children":1389},{},[1390],{"type":87,"tag":241,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":93,"value":420},{"type":87,"tag":126,"props":1396,"children":1397},{},[1398],{"type":93,"value":425},{"type":87,"tag":104,"props":1400,"children":1401},{},[1402,1416],{"type":87,"tag":126,"props":1403,"children":1404},{},[1405,1410,1411],{"type":87,"tag":241,"props":1406,"children":1408},{"className":1407},[],[1409],{"type":93,"value":437},{"type":93,"value":311},{"type":87,"tag":241,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":93,"value":444},{"type":87,"tag":126,"props":1417,"children":1418},{},[1419],{"type":93,"value":449},{"type":87,"tag":104,"props":1421,"children":1422},{},[1423,1443],{"type":87,"tag":126,"props":1424,"children":1425},{},[1426,1431,1432,1437,1438],{"type":87,"tag":241,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":93,"value":461},{"type":93,"value":311},{"type":87,"tag":241,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":93,"value":468},{"type":93,"value":311},{"type":87,"tag":241,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":93,"value":475},{"type":87,"tag":126,"props":1444,"children":1445},{},[1446],{"type":93,"value":480},{"type":87,"tag":104,"props":1448,"children":1449},{},[1450,1458],{"type":87,"tag":126,"props":1451,"children":1452},{},[1453],{"type":87,"tag":241,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":93,"value":492},{"type":87,"tag":126,"props":1459,"children":1460},{},[1461],{"type":93,"value":497},{"type":87,"tag":104,"props":1463,"children":1464},{},[1465,1473],{"type":87,"tag":126,"props":1466,"children":1467},{},[1468],{"type":87,"tag":241,"props":1469,"children":1471},{"className":1470},[],[1472],{"type":93,"value":509},{"type":87,"tag":126,"props":1474,"children":1475},{},[1476],{"type":93,"value":514},{"type":87,"tag":104,"props":1478,"children":1479},{},[1480,1488],{"type":87,"tag":126,"props":1481,"children":1482},{},[1483],{"type":87,"tag":241,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":93,"value":526},{"type":87,"tag":126,"props":1489,"children":1490},{},[1491],{"type":93,"value":531},{"type":87,"tag":104,"props":1493,"children":1494},{},[1495,1503],{"type":87,"tag":126,"props":1496,"children":1497},{},[1498],{"type":87,"tag":241,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":93,"value":543},{"type":87,"tag":126,"props":1504,"children":1505},{},[1506],{"type":93,"value":548},{"type":87,"tag":104,"props":1508,"children":1509},{},[1510,1518],{"type":87,"tag":126,"props":1511,"children":1512},{},[1513],{"type":87,"tag":241,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":93,"value":560},{"type":87,"tag":126,"props":1519,"children":1520},{},[1521],{"type":93,"value":565},{"type":87,"tag":104,"props":1523,"children":1524},{},[1525,1533],{"type":87,"tag":126,"props":1526,"children":1527},{},[1528],{"type":87,"tag":241,"props":1529,"children":1531},{"className":1530},[],[1532],{"type":93,"value":577},{"type":87,"tag":126,"props":1534,"children":1535},{},[1536],{"type":93,"value":582},{"type":87,"tag":104,"props":1538,"children":1539},{},[1540,1548],{"type":87,"tag":126,"props":1541,"children":1542},{},[1543],{"type":87,"tag":241,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":93,"value":594},{"type":87,"tag":126,"props":1549,"children":1550},{},[1551],{"type":93,"value":599},{"type":87,"tag":104,"props":1553,"children":1554},{},[1555,1563],{"type":87,"tag":126,"props":1556,"children":1557},{},[1558],{"type":87,"tag":241,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":93,"value":611},{"type":87,"tag":126,"props":1564,"children":1565},{},[1566],{"type":93,"value":616},{"type":87,"tag":104,"props":1568,"children":1569},{},[1570,1578],{"type":87,"tag":126,"props":1571,"children":1572},{},[1573],{"type":87,"tag":241,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":93,"value":628},{"type":87,"tag":126,"props":1579,"children":1580},{},[1581],{"type":93,"value":633},{"type":87,"tag":104,"props":1583,"children":1584},{},[1585,1593],{"type":87,"tag":126,"props":1586,"children":1587},{},[1588],{"type":87,"tag":241,"props":1589,"children":1591},{"className":1590},[],[1592],{"type":93,"value":645},{"type":87,"tag":126,"props":1594,"children":1595},{},[1596],{"type":93,"value":650},{"type":87,"tag":104,"props":1598,"children":1599},{},[1600,1614],{"type":87,"tag":126,"props":1601,"children":1602},{},[1603,1608,1609],{"type":87,"tag":241,"props":1604,"children":1606},{"className":1605},[],[1607],{"type":93,"value":662},{"type":93,"value":311},{"type":87,"tag":241,"props":1610,"children":1612},{"className":1611},[],[1613],{"type":93,"value":669},{"type":87,"tag":126,"props":1615,"children":1616},{},[1617],{"type":93,"value":674},{"type":87,"tag":104,"props":1619,"children":1620},{},[1621,1629],{"type":87,"tag":126,"props":1622,"children":1623},{},[1624],{"type":87,"tag":241,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":93,"value":686},{"type":87,"tag":126,"props":1630,"children":1631},{},[1632],{"type":93,"value":691},{"type":87,"tag":104,"props":1634,"children":1635},{},[1636,1644],{"type":87,"tag":126,"props":1637,"children":1638},{},[1639],{"type":87,"tag":241,"props":1640,"children":1642},{"className":1641},[],[1643],{"type":93,"value":703},{"type":87,"tag":126,"props":1645,"children":1646},{},[1647],{"type":93,"value":708},{"type":87,"tag":104,"props":1649,"children":1650},{},[1651,1659],{"type":87,"tag":126,"props":1652,"children":1653},{},[1654],{"type":87,"tag":241,"props":1655,"children":1657},{"className":1656},[],[1658],{"type":93,"value":720},{"type":87,"tag":126,"props":1660,"children":1661},{},[1662],{"type":93,"value":725},{"type":87,"tag":104,"props":1664,"children":1665},{},[1666,1674],{"type":87,"tag":126,"props":1667,"children":1668},{},[1669],{"type":87,"tag":241,"props":1670,"children":1672},{"className":1671},[],[1673],{"type":93,"value":737},{"type":87,"tag":126,"props":1675,"children":1676},{},[1677],{"type":93,"value":742},{"type":87,"tag":744,"props":1679,"children":1680},{},[1681],{"type":93,"value":748},{"type":87,"tag":88,"props":1683,"children":1684},{"id":751},[1685],{"type":93,"value":754},{"type":87,"tag":744,"props":1687,"children":1688},{},[1689],{"type":93,"value":759},{"type":87,"tag":96,"props":1691,"children":1692},{},[1693,1711],{"type":87,"tag":100,"props":1694,"children":1695},{},[1696],{"type":87,"tag":104,"props":1697,"children":1698},{},[1699,1703,1707],{"type":87,"tag":108,"props":1700,"children":1701},{},[1702],{"type":93,"value":773},{"type":87,"tag":108,"props":1704,"children":1705},{},[1706],{"type":93,"value":778},{"type":87,"tag":108,"props":1708,"children":1709},{},[1710],{"type":93,"value":388},{"type":87,"tag":119,"props":1712,"children":1713},{},[1714,1729,1744,1764,1784,1799],{"type":87,"tag":104,"props":1715,"children":1716},{},[1717,1721,1725],{"type":87,"tag":126,"props":1718,"children":1719},{},[1720],{"type":93,"value":793},{"type":87,"tag":126,"props":1722,"children":1723},{},[1724],{"type":93,"value":798},{"type":87,"tag":126,"props":1726,"children":1727},{},[1728],{"type":93,"value":803},{"type":87,"tag":104,"props":1730,"children":1731},{},[1732,1736,1740],{"type":87,"tag":126,"props":1733,"children":1734},{},[1735],{"type":93,"value":811},{"type":87,"tag":126,"props":1737,"children":1738},{},[1739],{"type":93,"value":816},{"type":87,"tag":126,"props":1741,"children":1742},{},[1743],{"type":93,"value":821},{"type":87,"tag":104,"props":1745,"children":1746},{},[1747,1751,1760],{"type":87,"tag":126,"props":1748,"children":1749},{},[1750],{"type":93,"value":829},{"type":87,"tag":126,"props":1752,"children":1753},{},[1754,1759],{"type":87,"tag":241,"props":1755,"children":1757},{"className":1756},[],[1758],{"type":93,"value":838},{"type":93,"value":840},{"type":87,"tag":126,"props":1761,"children":1762},{},[1763],{"type":93,"value":845},{"type":87,"tag":104,"props":1765,"children":1766},{},[1767,1771,1780],{"type":87,"tag":126,"props":1768,"children":1769},{},[1770],{"type":93,"value":853},{"type":87,"tag":126,"props":1772,"children":1773},{},[1774,1779],{"type":87,"tag":241,"props":1775,"children":1777},{"className":1776},[],[1778],{"type":93,"value":862},{"type":93,"value":864},{"type":87,"tag":126,"props":1781,"children":1782},{},[1783],{"type":93,"value":869},{"type":87,"tag":104,"props":1785,"children":1786},{},[1787,1791,1795],{"type":87,"tag":126,"props":1788,"children":1789},{},[1790],{"type":93,"value":877},{"type":87,"tag":126,"props":1792,"children":1793},{},[1794],{"type":93,"value":882},{"type":87,"tag":126,"props":1796,"children":1797},{},[1798],{"type":93,"value":887},{"type":87,"tag":104,"props":1800,"children":1801},{},[1802,1806,1810],{"type":87,"tag":126,"props":1803,"children":1804},{},[1805],{"type":93,"value":895},{"type":87,"tag":126,"props":1807,"children":1808},{},[1809],{"type":93,"value":900},{"type":87,"tag":126,"props":1811,"children":1812},{},[1813,1814],{"type":93,"value":905},{"type":87,"tag":241,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":93,"value":911},{"type":87,"tag":88,"props":1820,"children":1821},{"id":914},[1822],{"type":93,"value":917},{"type":87,"tag":744,"props":1824,"children":1825},{},[1826,1827,1832,1833,1838],{"type":93,"value":922},{"type":87,"tag":241,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":93,"value":928},{"type":93,"value":930},{"type":87,"tag":241,"props":1834,"children":1836},{"className":1835},[],[1837],{"type":93,"value":936},{"type":93,"value":938},{"type":87,"tag":744,"props":1840,"children":1841},{},[1842],{"type":93,"value":943},{"type":87,"tag":88,"props":1844,"children":1845},{"id":946},[1846],{"type":93,"value":949},{"type":87,"tag":744,"props":1848,"children":1849},{},[1850,1855,1856,1861,1862,1867,1868,1873,1874,1879,1880,1885],{"type":87,"tag":241,"props":1851,"children":1853},{"className":1852},[],[1854],{"type":93,"value":958},{"type":93,"value":327},{"type":87,"tag":241,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":93,"value":965},{"type":93,"value":967},{"type":87,"tag":241,"props":1863,"children":1865},{"className":1864},[],[1866],{"type":93,"value":973},{"type":93,"value":975},{"type":87,"tag":241,"props":1869,"children":1871},{"className":1870},[],[1872],{"type":93,"value":981},{"type":93,"value":983},{"type":87,"tag":241,"props":1875,"children":1877},{"className":1876},[],[1878],{"type":93,"value":989},{"type":93,"value":991},{"type":87,"tag":241,"props":1881,"children":1883},{"className":1882},[],[1884],{"type":93,"value":997},{"type":93,"value":999},{"type":87,"tag":88,"props":1887,"children":1888},{"id":1002},[1889],{"type":93,"value":298},{"type":87,"tag":744,"props":1891,"children":1892},{},[1893,1894,1899,1900,1905,1906,1911,1912,1917],{"type":93,"value":1009},{"type":87,"tag":241,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":93,"value":1015},{"type":93,"value":1017},{"type":87,"tag":241,"props":1901,"children":1903},{"className":1902},[],[1904],{"type":93,"value":1023},{"type":93,"value":1025},{"type":87,"tag":241,"props":1907,"children":1909},{"className":1908},[],[1910],{"type":93,"value":1031},{"type":93,"value":1033},{"type":87,"tag":241,"props":1913,"children":1915},{"className":1914},[],[1916],{"type":93,"value":1039},{"type":93,"value":1041},{"type":87,"tag":744,"props":1919,"children":1920},{},[1921,1922,1927,1928,1933,1934,1939,1940,1945,1946,1951],{"type":93,"value":1046},{"type":87,"tag":241,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":93,"value":333},{"type":93,"value":1053},{"type":87,"tag":241,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":93,"value":1059},{"type":93,"value":1061},{"type":87,"tag":241,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":93,"value":1067},{"type":93,"value":1069},{"type":87,"tag":241,"props":1941,"children":1943},{"className":1942},[],[1944],{"type":93,"value":1075},{"type":93,"value":1077},{"type":87,"tag":241,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":93,"value":1083},{"type":93,"value":1085},{"type":87,"tag":744,"props":1953,"children":1954},{},[1955,1956,1961,1962,1967],{"type":93,"value":1090},{"type":87,"tag":241,"props":1957,"children":1959},{"className":1958},[],[1960],{"type":93,"value":1096},{"type":93,"value":1098},{"type":87,"tag":241,"props":1963,"children":1965},{"className":1964},[],[1966],{"type":93,"value":1104},{"type":93,"value":1106},{"title":82,"searchDepth":32,"depth":32,"links":1969},[1970,1971,1972,1973,1974,1975,1976],{"id":90,"depth":42,"text":94},{"id":351,"depth":42,"text":354},{"id":366,"depth":42,"text":369},{"id":751,"depth":42,"text":754},{"id":914,"depth":42,"text":917},{"id":946,"depth":42,"text":949},{"id":1002,"depth":42,"text":298},1780603561416]