From 3d3d7c7a450cb89b5f09046e54182b4c25e45e0a Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 1 May 2026 11:35:57 -0500 Subject: [PATCH 001/250] feat: add control for experiments to the dashboard Signed-off-by: Trezy --- .../dashboard/settings/experiments/page.tsx | 96 +++++++++++++++++++ web/src/components/app-sidebar.tsx | 7 ++ web/src/lib/api.ts | 19 ++++ 3 files changed, 122 insertions(+) create mode 100644 web/src/app/dashboard/settings/experiments/page.tsx diff --git a/web/src/app/dashboard/settings/experiments/page.tsx b/web/src/app/dashboard/settings/experiments/page.tsx new file mode 100644 index 0000000..74d3e23 --- /dev/null +++ b/web/src/app/dashboard/settings/experiments/page.tsx @@ -0,0 +1,96 @@ +"use client" + +import { useCallback, useEffect, useState } from "react" +import { IconAlertTriangle } from "@tabler/icons-react" + +import { useCurrentUser } from "@/hooks/use-current-user" +import { getFeatureFlags, setFeatureFlag, type FeatureFlag } from "@/lib/api" +import { SiteHeader } from "@/components/site-header" +import { Switch } from "@/components/ui/switch" +import { Label } from "@/components/ui/label" + +export default function ExperimentsPage() { + const { hasPermission } = useCurrentUser() + const canManage = hasPermission("settings:manage") + + const [flags, setFlags] = useState([]) + const [error, setError] = useState(null) + const [toggling, setToggling] = useState(null) + + const load = useCallback(async () => { + try { + const data = await getFeatureFlags() + setFlags(data) + } catch (e: unknown) { + setError(e instanceof Error ? e.message : String(e)) + } + }, []) + + useEffect(() => { + load() + }, [load]) + + async function handleToggle(flag: FeatureFlag) { + setError(null) + setToggling(flag.key) + try { + await setFeatureFlag(flag.key, !flag.enabled) + await load() + } catch (e: unknown) { + setError(e instanceof Error ? e.message : String(e)) + } finally { + setToggling(null) + } + } + + return ( + <> + +
+
+ +
+

+ Experimental features +

+

+ These features are under active development. They may be + incomplete, change without notice, or be removed entirely. + Disabling a feature hides its routes and UI — no data is deleted. +

+
+
+ + {error &&

{error}

} + + {flags.map((flag) => ( +
+
+ +

+ {flag.description} +

+
+ handleToggle(flag)} + disabled={!canManage || toggling === flag.key} + /> +
+ ))} + + {flags.length === 0 && !error && ( +

+ No experimental features available. +

+ )} +
+ + ) +} diff --git a/web/src/components/app-sidebar.tsx b/web/src/components/app-sidebar.tsx index b7d55a0..cc54c77 100644 --- a/web/src/components/app-sidebar.tsx +++ b/web/src/components/app-sidebar.tsx @@ -19,6 +19,7 @@ import { IconArrowUpCircle, IconArrowsShuffle, IconSkull, + IconFlask, } from "@tabler/icons-react"; import Image from "next/image"; import Link from "next/link"; @@ -123,6 +124,12 @@ const systemItems: NavItem[] = [ icon: IconClipboardList, requiredPermissions: ["events:read"], }, + { + title: "Experiments", + url: "/dashboard/settings/experiments", + icon: IconFlask, + requiredPermissions: ["settings:manage"], + }, ]; export function AppSidebar({ ...props }: React.ComponentProps) { diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index b04b1b8..a6ce249 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -338,6 +338,25 @@ export function deleteLogo() { return apiFetch("/admin/settings/logo", { method: "DELETE" }) } +// Feature Flags +export type FeatureFlag = { + key: string + name: string + description: string + enabled: boolean +} + +export function getFeatureFlags() { + return apiFetch("/admin/feature-flags") +} + +export function setFeatureFlag(key: string, enabled: boolean) { + if (enabled) { + return upsertSetting(key, "true") + } + return deleteSetting(key) +} + // Proxy config export type ProxyConfig = { mode: "disabled" | "open" | "allowlist" | "blocklist" -- 2.51.2 From 55afaaffe129cce2c89422d3ddc11ca1dfc8e795 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 1 May 2026 11:37:42 -0500 Subject: [PATCH 002/250] fix: remove public record aggregation from permissioned spaces Signed-off-by: Trezy --- src/spaces/db.rs | 116 -------------- src/spaces/mod.rs | 2 - src/spaces/notifications.rs | 86 ----------- src/spaces/routes.rs | 47 ------ src/spaces/sync.rs | 293 ------------------------------------ src/spaces/types.rs | 41 ----- 6 files changed, 585 deletions(-) delete mode 100644 src/spaces/notifications.rs delete mode 100644 src/spaces/sync.rs diff --git a/src/spaces/db.rs b/src/spaces/db.rs index 173a053..5577a50 100644 --- a/src/spaces/db.rs +++ b/src/spaces/db.rs @@ -662,119 +662,3 @@ fn parse_invite_row(r: InviteRow) -> Result { created_at: r.9, }) } - -// --------------------------------------------------------------------------- -// Space Sync State -// --------------------------------------------------------------------------- - -pub async fn get_sync_state( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - space_id: &str, - member_did: &str, -) -> Result, AppError> { - let sql = adapt_sql( - "SELECT id, space_id, member_did, cursor, last_synced_at, status, error FROM space_sync_state WHERE space_id = ? AND member_did = ?", - backend, - ); - - let row: Option = sqlx::query_as(&sql) - .bind(space_id) - .bind(member_did) - .fetch_optional(pool) - .await - .map_err(|e| AppError::Internal(format!("failed to get sync state: {e}")))?; - - row.map(parse_sync_state_row).transpose() -} - -pub async fn upsert_sync_state( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - state: &SpaceSyncState, -) -> Result<(), AppError> { - let sql = match backend { - DatabaseBackend::Sqlite => { - "INSERT OR REPLACE INTO space_sync_state (id, space_id, member_did, cursor, last_synced_at, status, error) VALUES (?, ?, ?, ?, ?, ?, ?)".to_string() - } - DatabaseBackend::Postgres => adapt_sql( - "INSERT INTO space_sync_state (id, space_id, member_did, cursor, last_synced_at, status, error) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (space_id, member_did) DO UPDATE SET cursor = EXCLUDED.cursor, last_synced_at = EXCLUDED.last_synced_at, status = EXCLUDED.status, error = EXCLUDED.error", - backend, - ), - }; - - sqlx::query(&sql) - .bind(&state.id) - .bind(&state.space_id) - .bind(&state.member_did) - .bind(&state.cursor) - .bind(&state.last_synced_at) - .bind(state.status.as_str()) - .bind(&state.error) - .execute(pool) - .await - .map_err(|e| AppError::Internal(format!("failed to upsert sync state: {e}")))?; - - Ok(()) -} - -pub async fn list_sync_states_for_space( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - space_id: &str, -) -> Result, AppError> { - let sql = adapt_sql( - "SELECT id, space_id, member_did, cursor, last_synced_at, status, error FROM space_sync_state WHERE space_id = ? ORDER BY member_did ASC", - backend, - ); - - let rows: Vec = sqlx::query_as(&sql) - .bind(space_id) - .fetch_all(pool) - .await - .map_err(|e| AppError::Internal(format!("failed to list sync states: {e}")))?; - - rows.into_iter().map(parse_sync_state_row).collect() -} - -pub async fn list_pending_syncs( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, -) -> Result, AppError> { - let sql = adapt_sql( - "SELECT id, space_id, member_did, cursor, last_synced_at, status, error FROM space_sync_state WHERE status = 'pending' OR status = 'error' ORDER BY last_synced_at ASC NULLS FIRST LIMIT 50", - backend, - ); - - let rows: Vec = sqlx::query_as(&sql) - .fetch_all(pool) - .await - .map_err(|e| AppError::Internal(format!("failed to list pending syncs: {e}")))?; - - rows.into_iter().map(parse_sync_state_row).collect() -} - -type SyncStateRow = ( - String, - String, - String, - Option, - Option, - String, - Option, -); - -fn parse_sync_state_row(r: SyncStateRow) -> Result { - let status = SyncStatus::parse(&r.5) - .ok_or_else(|| AppError::Internal(format!("invalid sync status: {}", r.5)))?; - - Ok(SpaceSyncState { - id: r.0, - space_id: r.1, - member_did: r.2, - cursor: r.3, - last_synced_at: r.4, - status, - error: r.6, - }) -} diff --git a/src/spaces/mod.rs b/src/spaces/mod.rs index a59c5d0..385f183 100644 --- a/src/spaces/mod.rs +++ b/src/spaces/mod.rs @@ -2,9 +2,7 @@ pub mod auth; pub mod credential; pub mod db; pub mod members; -pub mod notifications; pub mod routes; -pub mod sync; pub mod types; use crate::error::AppError; diff --git a/src/spaces/notifications.rs b/src/spaces/notifications.rs deleted file mode 100644 index 3d17e12..0000000 --- a/src/spaces/notifications.rs +++ /dev/null @@ -1,86 +0,0 @@ -use serde::Deserialize; -use uuid::Uuid; - -use crate::db::DatabaseBackend; -use crate::error::AppError; -use crate::spaces::db; -use crate::spaces::types::*; - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct WriteNotification { - pub space_uri: String, - pub author_did: String, - pub collection: String, - pub rkey: String, - pub action: WriteAction, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum WriteAction { - Create, - Update, - Delete, -} - -/// Process a write notification by queuing a sync pull for the affected member. -/// -/// This marks the member's sync state as pending so the next sync pass picks it up. -pub async fn handle_write_notification( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - space_id: &str, - notification: &WriteNotification, -) -> Result<(), AppError> { - let existing = db::get_sync_state(pool, backend, space_id, ¬ification.author_did).await?; - - let state = SpaceSyncState { - id: existing - .map(|s| s.id) - .unwrap_or_else(|| Uuid::new_v4().to_string()), - space_id: space_id.to_string(), - member_did: notification.author_did.clone(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Pending, - error: None, - }; - - db::upsert_sync_state(pool, backend, &state).await?; - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn write_action_deserializes() { - let action: WriteAction = serde_json::from_str("\"create\"").unwrap(); - assert!(matches!(action, WriteAction::Create)); - - let action: WriteAction = serde_json::from_str("\"update\"").unwrap(); - assert!(matches!(action, WriteAction::Update)); - - let action: WriteAction = serde_json::from_str("\"delete\"").unwrap(); - assert!(matches!(action, WriteAction::Delete)); - } - - #[test] - fn write_notification_deserializes() { - let json = r#"{ - "spaceUri": "ats://did:plc:owner/com.example.forum/main", - "authorDid": "did:plc:alice", - "collection": "com.example.forum.post", - "rkey": "3k2abc", - "action": "create" - }"#; - - let notif: WriteNotification = serde_json::from_str(json).unwrap(); - assert_eq!(notif.author_did, "did:plc:alice"); - assert_eq!(notif.collection, "com.example.forum.post"); - assert!(matches!(notif.action, WriteAction::Create)); - } -} diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index 235e2bb..543707c 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -146,16 +146,6 @@ struct RefreshCredentialInput { credential: String, } -#[derive(Deserialize)] -#[serde(rename_all = "camelCase")] -struct WriteNotificationInput { - space_uri: String, - author_did: String, - collection: String, - rkey: String, - action: crate::spaces::notifications::WriteAction, -} - // --------------------------------------------------------------------------- // Route registration // --------------------------------------------------------------------------- @@ -208,11 +198,6 @@ pub fn space_routes() -> Router { &format!("/xrpc/{NS}.space.refreshCredential"), post(refresh_credential), ) - // Notifications - .route( - &format!("/xrpc/{NS}.space.writeNotification"), - post(write_notification), - ) } // --------------------------------------------------------------------------- @@ -948,35 +933,3 @@ async fn refresh_credential( "expiresAt": issued.expires_at, }))) } - -// --------------------------------------------------------------------------- -// Notification handlers -// --------------------------------------------------------------------------- - -async fn write_notification( - State(state): State, - xrpc_claims: XrpcClaims, - Json(input): Json, -) -> Result, AppError> { - let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; - require_space_admin(&state, &space, claims.did()).await?; - - let notification = crate::spaces::notifications::WriteNotification { - space_uri: input.space_uri, - author_did: input.author_did, - collection: input.collection, - rkey: input.rkey, - action: input.action, - }; - - crate::spaces::notifications::handle_write_notification( - &state.db, - state.db_backend, - &space.id, - ¬ification, - ) - .await?; - - Ok(Json(serde_json::json!({ "success": true }))) -} diff --git a/src/spaces/sync.rs b/src/spaces/sync.rs deleted file mode 100644 index 40d5f72..0000000 --- a/src/spaces/sync.rs +++ /dev/null @@ -1,293 +0,0 @@ -use uuid::Uuid; - -use crate::db::DatabaseBackend; -use crate::db::now_rfc3339; -use crate::error::AppError; -use crate::profile::resolve_pds_endpoint; -use crate::spaces::types::*; -use crate::spaces::{db, members}; - -/// Sync all members of a space by pulling records from their PDSes. -pub async fn sync_space( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - collections: &[String], -) -> Result { - let resolved = members::resolve_members(pool, backend, space_id).await?; - let mut results = Vec::new(); - - for member in &resolved { - let result = sync_member( - http, - pool, - backend, - plc_url, - space_id, - &member.did, - collections, - ) - .await; - - results.push(MemberSyncResult { - did: member.did.clone(), - records_synced: result.as_ref().map(|r| r.records_synced).unwrap_or(0), - error: result.err().map(|e| e.to_string()), - }); - } - - let total = results.iter().map(|r| r.records_synced).sum(); - - Ok(SyncSpaceResult { - members_processed: results.len(), - total_records_synced: total, - member_results: results, - }) -} - -/// Sync records from a single member's PDS for a given space. -pub async fn sync_member( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - member_did: &str, - collections: &[String], -) -> Result { - let state_id = match db::get_sync_state(pool, backend, space_id, member_did).await? { - Some(s) => s.id, - None => { - let id = Uuid::new_v4().to_string(); - let initial = SpaceSyncState { - id: id.clone(), - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Pending, - error: None, - }; - db::upsert_sync_state(pool, backend, &initial).await?; - id - } - }; - - // Mark as syncing - let syncing_state = SpaceSyncState { - id: state_id.clone(), - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Syncing, - error: None, - }; - db::upsert_sync_state(pool, backend, &syncing_state).await?; - - let result = pull_member_records( - http, - pool, - backend, - plc_url, - space_id, - member_did, - collections, - ) - .await; - - match result { - Ok(summary) => { - let done = SpaceSyncState { - id: state_id, - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: summary.cursor.clone(), - last_synced_at: Some(now_rfc3339()), - status: SyncStatus::Synced, - error: None, - }; - db::upsert_sync_state(pool, backend, &done).await?; - Ok(summary) - } - Err(e) => { - let err_state = SpaceSyncState { - id: state_id, - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: Some(now_rfc3339()), - status: SyncStatus::Error, - error: Some(e.to_string()), - }; - db::upsert_sync_state(pool, backend, &err_state).await?; - Err(e) - } - } -} - -async fn pull_member_records( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - member_did: &str, - collections: &[String], -) -> Result { - let pds_url = resolve_pds_endpoint(http, plc_url, member_did).await?; - let mut total_records = 0usize; - let mut last_cursor = None; - - for collection in collections { - let mut cursor: Option = None; - loop { - let (records, next_cursor) = fetch_records_page( - http, - &pds_url, - member_did, - collection, - cursor.as_deref(), - 100, - ) - .await?; - - if records.is_empty() { - break; - } - - for record in &records { - let uri = record["uri"].as_str().unwrap_or(""); - let rkey = extract_rkey(uri); - let cid = record["cid"].as_str().unwrap_or("").to_string(); - let value = record - .get("value") - .cloned() - .unwrap_or(serde_json::Value::Null); - - let space_record_uri = format!("ats://{space_id}/{member_did}/{collection}/{rkey}"); - - let space_record = SpaceRecord { - uri: space_record_uri, - space_id: space_id.to_string(), - author_did: member_did.to_string(), - collection: collection.clone(), - rkey: rkey.to_string(), - record: value, - cid, - indexed_at: now_rfc3339(), - }; - - db::upsert_space_record(pool, backend, &space_record).await?; - total_records += 1; - } - - last_cursor = next_cursor.clone(); - cursor = next_cursor; - - if cursor.is_none() { - break; - } - } - } - - Ok(MemberSyncSummary { - records_synced: total_records, - cursor: last_cursor, - }) -} - -async fn fetch_records_page( - http: &reqwest::Client, - pds_url: &str, - repo: &str, - collection: &str, - cursor: Option<&str>, - limit: u32, -) -> Result<(Vec, Option), AppError> { - let mut url = format!( - "{}/xrpc/com.atproto.repo.listRecords?repo={}&collection={}&limit={}", - pds_url.trim_end_matches('/'), - repo, - collection, - limit, - ); - - if let Some(c) = cursor { - url.push_str(&format!("&cursor={c}")); - } - - let resp = http - .get(&url) - .send() - .await - .map_err(|e| AppError::Internal(format!("PDS request failed: {e}")))?; - - if !resp.status().is_success() { - let status = resp.status(); - return Err(AppError::Internal(format!( - "PDS listRecords failed with {status} for {repo}/{collection}" - ))); - } - - let body: serde_json::Value = resp - .json() - .await - .map_err(|e| AppError::Internal(format!("invalid PDS response: {e}")))?; - - let records = body["records"].as_array().cloned().unwrap_or_default(); - - let next_cursor = body["cursor"].as_str().map(|s| s.to_string()); - - Ok((records, next_cursor)) -} - -fn extract_rkey(uri: &str) -> &str { - uri.rsplit('/').next().unwrap_or("") -} - -// --------------------------------------------------------------------------- -// Result types -// --------------------------------------------------------------------------- - -pub struct SyncSpaceResult { - pub members_processed: usize, - pub total_records_synced: usize, - pub member_results: Vec, -} - -pub struct MemberSyncResult { - pub did: String, - pub records_synced: usize, - pub error: Option, -} - -pub struct MemberSyncSummary { - pub records_synced: usize, - pub cursor: Option, -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn extract_rkey_from_at_uri() { - assert_eq!( - extract_rkey("at://did:plc:abc/app.bsky.feed.post/3k2abc"), - "3k2abc" - ); - } - - #[test] - fn extract_rkey_from_empty() { - assert_eq!(extract_rkey(""), ""); - } - - #[test] - fn extract_rkey_no_slash() { - assert_eq!(extract_rkey("singlevalue"), "singlevalue"); - } -} diff --git a/src/spaces/types.rs b/src/spaces/types.rs index 3d55ebb..c62c116 100644 --- a/src/spaces/types.rs +++ b/src/spaces/types.rs @@ -139,47 +139,6 @@ pub struct SpaceInvite { pub created_at: String, } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum SyncStatus { - Pending, - Syncing, - Synced, - Error, -} - -impl SyncStatus { - pub fn as_str(&self) -> &'static str { - match self { - SyncStatus::Pending => "pending", - SyncStatus::Syncing => "syncing", - SyncStatus::Synced => "synced", - SyncStatus::Error => "error", - } - } - - pub fn parse(s: &str) -> Option { - match s { - "pending" => Some(SyncStatus::Pending), - "syncing" => Some(SyncStatus::Syncing), - "synced" => Some(SyncStatus::Synced), - "error" => Some(SyncStatus::Error), - _ => None, - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct SpaceSyncState { - pub id: String, - pub space_id: String, - pub member_did: String, - pub cursor: Option, - pub last_synced_at: Option, - pub status: SyncStatus, - pub error: Option, -} - #[cfg(test)] mod tests { use super::*; -- 2.51.2 From df717e9d5a175f7eaae14ae3e7afb36956fa9007 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 4 May 2026 23:30:14 -0500 Subject: [PATCH 003/250] feat: update JS SDKs to more closely match their @atproto cousins Signed-off-by: Trezy --- .../docs/getting-started/authentication.md | 9 +- .../docs/docs/guides/features/api-clients.md | 30 +- packages/docs/docs/sdk/lex-agent.md | 5 +- .../docs/docs/sdk/oauth-client-browser.md | 99 ++++-- packages/docs/docs/sdk/overview.md | 9 +- packages/lex-agent/README.md | 3 +- packages/oauth-client-browser/README.md | 34 +- .../src/__tests__/browser-client.test.ts | 306 +++++++++++++++++- .../src/browser-client.ts | 244 +++++++++++++- packages/oauth-client-browser/src/index.ts | 8 +- packages/oauth-client/src/client.ts | 2 +- packages/oauth-client/src/index.ts | 2 +- 12 files changed, 669 insertions(+), 82 deletions(-) diff --git a/packages/docs/docs/getting-started/authentication.md b/packages/docs/docs/getting-started/authentication.md index edc2416..0ae4a2a 100644 --- a/packages/docs/docs/getting-started/authentication.md +++ b/packages/docs/docs/getting-started/authentication.md @@ -67,11 +67,12 @@ const oauthClient = new HappyViewBrowserClient({ clientKey: "hvc_your_client_key", }); -// Login — redirects to the user's PDS for authorization -await oauthClient.login("alice.bsky.social"); +// Sign in — redirects to the user's PDS for authorization +await oauthClient.signIn("alice.bsky.social"); -// On /oauth/callback — complete the token exchange -const session = await oauthClient.callback(); +// On page load — restore session or process OAuth callback +const result = await oauthClient.init(); +const session = result?.session; // Create a type-safe Lex client const agent = createAgent(session); diff --git a/packages/docs/docs/guides/features/api-clients.md b/packages/docs/docs/guides/features/api-clients.md index cfdfbe9..274c226 100644 --- a/packages/docs/docs/guides/features/api-clients.md +++ b/packages/docs/docs/guides/features/api-clients.md @@ -116,28 +116,22 @@ const client = new HappyViewBrowserClient({ clientKey: "hvc_your_client_key", }); -// Login — redirects to the user's PDS -await client.login("alice.bsky.social"); +// Sign in — redirects to the user's PDS +await client.signIn("alice.bsky.social"); ``` -On your callback page: +On page load, restore a session or process the OAuth callback: ```typescript -const session = await client.callback(); - -// Make authenticated requests -const response = await session.fetchHandler( - "/xrpc/com.example.getStuff?limit=10", - { method: "GET" }, -); -``` - -On subsequent page loads, restore the session from localStorage: - -```typescript -const session = await client.restore(); -if (session) { - // User is still logged in +const result = await client.init(); +if (result) { + const { session } = result; + + // Make authenticated requests + const response = await session.fetchHandler( + "/xrpc/com.example.getStuff?limit=10", + { method: "GET" }, + ); } ``` diff --git a/packages/docs/docs/sdk/lex-agent.md b/packages/docs/docs/sdk/lex-agent.md index cd6ad43..0119846 100644 --- a/packages/docs/docs/sdk/lex-agent.md +++ b/packages/docs/docs/sdk/lex-agent.md @@ -25,8 +25,9 @@ const client = new HappyViewBrowserClient({ clientKey: "hvc_your_client_key", }); -// Authenticate (or restore a session) -const session = await client.restore(); +// Restore an existing session +const result = await client.init(); +const session = result?.session; // Create a Lex agent from the session const agent = createAgent(session); diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/docs/sdk/oauth-client-browser.md index 59a6fa6..c21b21e 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/docs/sdk/oauth-client-browser.md @@ -47,26 +47,45 @@ const client = new HappyViewBrowserClient({ The API client must be registered as a **public** client (no secret) with your app's origin in `allowed_origins`. See [Authentication — API clients](../getting-started/authentication.md#api-clients-confidential-vs-public). ::: -## Login +## Sign in -`login()` resolves the user's handle, discovers their PDS, provisions a DPoP key, and redirects the browser to the PDS authorization server: +`signIn()` resolves the user's handle, discovers their PDS, provisions a DPoP key, and redirects the browser to the PDS authorization server: ```typescript -await client.login("alice.bsky.social"); +await client.signIn("alice.bsky.social"); // Browser redirects — code stops here ``` -If you need the authorization URL without redirecting (e.g., for a popup or custom UI), use `prepareLogin()`: +To sign in via a popup window instead: + +```typescript +const session = await client.signIn("alice.bsky.social", { + display: "popup", +}); +``` + +Or use the explicit methods: + +```typescript +// Full-page redirect (equivalent to signIn without display option) +await client.signInRedirect("alice.bsky.social"); + +// Popup window +const session = await client.signInPopup("alice.bsky.social"); +``` + +If you need the authorization URL without redirecting (e.g., for a custom UI), use `prepareLogin()`: ```typescript const { authorizationUrl, did, state } = await client.prepareLogin("alice.bsky.social"); - -// Open in a popup, new tab, etc. -window.open(authorizationUrl); ``` -### What happens during login +:::note +`login()` still works as an alias for `signInRedirect()`. +::: + +### What happens during sign in 1. The handle is resolved to a DID via `resolveHandleToDid`. 2. The DID document is fetched to find the PDS URL. @@ -74,32 +93,60 @@ window.open(authorizationUrl); 4. A DPoP key is provisioned from HappyView. 5. PKCE challenge/verifier pairs are generated (one for HappyView's DPoP provisioning, one for the PDS authorization server). 6. The pending auth state is stored in localStorage. -7. The browser is redirected to the PDS authorization endpoint. +7. The browser is redirected to the PDS authorization endpoint (or a popup is opened). -## OAuth callback +## Initialization -Your app needs an `/oauth/callback` route. On that page, call `callback()` to complete the token exchange: +On page load, call `init()` to automatically handle both session restoration and OAuth callbacks: ```typescript -// On /oauth/callback -const session = await client.callback(); -// Session is now stored in localStorage and ready to use +const result = await client.init(); +if (result) { + const { session, state } = result; + // session is ready to use +} ``` -`callback()` reads the `code` and `state` from the URL query string, exchanges the code for tokens at the PDS token endpoint, and registers the session with HappyView. The pending auth state is cleaned up automatically. +`init()` checks the URL for OAuth callback parameters. If found, it processes the callback and returns `{ session, state }`. Otherwise, it tries to restore the last active session from localStorage. -## Restore session - -On subsequent page loads, restore the session from localStorage instead of re-authenticating: +For more control, use the specific methods: ```typescript -const session = await client.restore(); -if (session) { - // User is still logged in +// Restore only — ignores callback params in the URL +const result = await client.initRestore(); +if (result) { + const { session } = result; } + +// Callback only — throws if no callback params are present +const { session, state } = await client.initCallback(); ``` -Returns `null` if no stored session is found. +### Restoring a specific session + +To restore a specific user's session by DID: + +```typescript +const session = await client.restore("did:plc:abc123"); +``` + +Calling `restore()` with no arguments returns the last active session, or `null` if none is found. + +:::note +`callback()` still works as a standalone method that processes the OAuth callback and returns a session directly. +::: + +## Detecting callback params + +`readCallbackParams()` checks the current URL for OAuth callback parameters without processing them. This is useful when your app uses client-side routing and needs to detect callbacks before the router changes the URL: + +```typescript +const params = client.readCallbackParams(); +if (params) { + // URL contains OAuth callback params — process them + const { session } = await client.initCallback(); +} +``` ## Authenticated requests @@ -116,12 +163,16 @@ const data = await response.json(); Pass a relative path (prepends the HappyView instance URL) or a full URL (used as-is). -## Logout +## Revoke session ```typescript -await client.logout(session.did); +await client.revoke(session.did); ``` +:::note +`logout()` still works as an alias for `revoke()`. +::: + ## Resolution utilities The browser client exports the resolution functions it uses internally. These are useful if you need to resolve handles or discover PDS URLs outside of the login flow: diff --git a/packages/docs/docs/sdk/overview.md b/packages/docs/docs/sdk/overview.md index 39f53e1..d2efce2 100644 --- a/packages/docs/docs/sdk/overview.md +++ b/packages/docs/docs/sdk/overview.md @@ -43,11 +43,12 @@ const oauthClient = new HappyViewBrowserClient({ clientKey: "hvc_your_client_key", }); -// Login — redirects to the user's PDS -await oauthClient.login("alice.bsky.social"); +// Sign in — redirects to the user's PDS +await oauthClient.signIn("alice.bsky.social"); -// On /oauth/callback — complete the flow -const session = await oauthClient.callback(); +// On page load — restore session or process callback +const result = await oauthClient.init(); +const session = result?.session; // Create a type-safe Lex client const agent = createAgent(session); diff --git a/packages/lex-agent/README.md b/packages/lex-agent/README.md index c545a02..9c9e5c0 100644 --- a/packages/lex-agent/README.md +++ b/packages/lex-agent/README.md @@ -24,7 +24,8 @@ const client = new HappyViewBrowserClient({ instanceUrl: "https://happyview.example.com", clientKey: "hvc_your_client_key", }); -const session = await client.restore(); +const result = await client.init(); +const session = result?.session; // Create a Lex agent from the session const agent = createAgent(session); diff --git a/packages/oauth-client-browser/README.md b/packages/oauth-client-browser/README.md index b9e7a6c..74be821 100644 --- a/packages/oauth-client-browser/README.md +++ b/packages/oauth-client-browser/README.md @@ -23,39 +23,39 @@ const client = new HappyViewBrowserClient({ }); ``` -### Login +### Sign In Redirects the user to their PDS authorization server: ```typescript -await client.login("alice.bsky.social"); +await client.signIn("alice.bsky.social"); // User is redirected to their PDS for authorization ``` -If you need the authorization URL without an immediate redirect (e.g., to open in a popup), use `prepareLogin`: +Or sign in via a popup: ```typescript -const { authorizationUrl, did, state } = - await client.prepareLogin("alice.bsky.social"); +const session = await client.signIn("alice.bsky.social", { + display: "popup", +}); ``` -### OAuth Callback - -On the `/oauth/callback` route, call `callback()` to complete the token exchange: +If you need the authorization URL without an immediate redirect, use `prepareLogin`: ```typescript -const session = await client.callback(); -// Session is now stored in localStorage +const { authorizationUrl, did, state } = + await client.prepareLogin("alice.bsky.social"); ``` -### Restore Session +### Initialization -On subsequent page loads, restore the session from localStorage: +On page load, call `init()` to restore a session or process an OAuth callback: ```typescript -const session = await client.restore(); -if (session) { - // User is still logged in +const result = await client.init(); +if (result) { + const { session } = result; + // User is logged in } ``` @@ -70,10 +70,10 @@ const response = await session.fetchHandler( ); ``` -### Logout +### Revoke Session ```typescript -await client.logout("did:plc:abc123"); +await client.revoke("did:plc:abc123"); ``` ## Exports diff --git a/packages/oauth-client-browser/src/__tests__/browser-client.test.ts b/packages/oauth-client-browser/src/__tests__/browser-client.test.ts index 3f9cf3e..d6e26c1 100644 --- a/packages/oauth-client-browser/src/__tests__/browser-client.test.ts +++ b/packages/oauth-client-browser/src/__tests__/browser-client.test.ts @@ -4,7 +4,10 @@ import { TokenExchangeError, type StorageAdapter, } from "@happyview/oauth-client"; -import { HappyViewBrowserClient } from "../browser-client"; +import { + HappyViewBrowserClient, + LoginContinuedInParentWindowError, +} from "../browser-client"; import { LocalStorageAdapter } from "../local-storage-adapter"; // Generate a real ES256 JWK once for all tests that need importJwk to succeed @@ -349,6 +352,56 @@ describe("HappyViewBrowserClient", () => { expect(payload.htu).toBe("https://pds.example.com/oauth/token"); }); + test("prepareLogin uses constructor scopes by default", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = new HappyViewBrowserClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + scopes: "atproto transition:generic", + storage: new LocalStorageAdapter(), + fetch: fetchFn, + }); + + await client.prepareLogin("user.bsky.social"); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe("atproto transition:generic"); + }); + + test("prepareLogin accepts per-call scope override", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = new HappyViewBrowserClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + scopes: "atproto", + storage: new LocalStorageAdapter(), + fetch: fetchFn, + }); + + await client.prepareLogin("user.bsky.social", { + scopes: "atproto transition:generic repo:app.example.post", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe( + "atproto transition:generic repo:app.example.post", + ); + }); + test("callback throws InvalidStateError when code or state is missing", async () => { const client = createClient(); try { @@ -477,4 +530,255 @@ describe("HappyViewBrowserClient", () => { localStorage.getItem("@happyview/oauth(happyview:last-active-did)"), ).toBeNull(); }); + + test("revoke is an alias for logout", async () => { + const deleteFn = mock( + async (input: RequestInfo | URL, init?: RequestInit) => { + return new Response(null, { status: 204 }); + }, + ); + const client = createClient(deleteFn); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + localStorage.setItem( + "@happyview/oauth(happyview:last-active-did)", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + + await client.revoke("did:plc:abcdefghijklmnopqrstuvwx"); + + expect( + localStorage.getItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + ), + ).toBeNull(); + }); + + test("restore with no args returns last active session", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:last-active-did)", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore(); + expect(session).not.toBeNull(); + expect(session!.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + }); + + test("restore with DID arg returns that specific session", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:specific)", + JSON.stringify({ + did: "did:plc:specific", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore("did:plc:specific"); + expect(session).not.toBeNull(); + expect(session!.did).toBe("did:plc:specific"); + }); + + test("restore with DID arg updates last active DID", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:specific)", + JSON.stringify({ + did: "did:plc:specific", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + await client.restore("did:plc:specific"); + + expect( + localStorage.getItem("@happyview/oauth(happyview:last-active-did)"), + ).toBe("did:plc:specific"); + }); + + test("restore with DID arg does not update last active when session missing", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:last-active-did)", + "did:plc:original", + ); + + await client.restore("did:plc:nonexistent"); + + expect( + localStorage.getItem("@happyview/oauth(happyview:last-active-did)"), + ).toBe("did:plc:original"); + }); + + test("restore with DID arg returns null when session does not exist", async () => { + const client = createClient(); + const session = await client.restore("did:plc:nonexistent"); + expect(session).toBeNull(); + }); + + test("initRestore returns session wrapper when last active exists", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:last-active-did)", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const result = await client.initRestore(); + expect(result).toBeDefined(); + expect(result!.session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + }); + + test("initRestore returns undefined when no session exists", async () => { + const client = createClient(); + const result = await client.initRestore(); + expect(result).toBeUndefined(); + }); + + test("initCallback processes callback and returns session with state", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + const pendingState = { + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "initcb_state", + issuer: "https://pds.example.com", + }; + localStorage.setItem( + "@happyview/oauth(pending-auth:initcb_state)", + JSON.stringify(pendingState), + ); + + const result = await client.initCallback( + "?code=auth-code&state=initcb_state", + ); + expect(result.session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(result.state).toBe("initcb_state"); + }); + + test("readCallbackParams returns null when no OAuth params in URL", () => { + const client = createClient(); + const params = client.readCallbackParams(); + expect(params).toBeNull(); + }); + + test("findRedirectUrl returns configured redirectUri", () => { + const client = new HappyViewBrowserClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + redirectUri: "https://myapp.com/callback", + }); + expect(client.findRedirectUrl()).toBe("https://myapp.com/callback"); + }); + + test("findRedirectUrl returns default when no redirectUri configured", () => { + const client = createClient(); + expect(client.findRedirectUrl()).toBe( + `${window.location.origin}/oauth/callback`, + ); + }); + + test("signInRedirect delegates to login", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + // signInRedirect calls login which calls prepareLogin then sets window.location.href + // We can verify it hits the same fetch endpoints as prepareLogin + // Since window.location.href assignment doesn't work in tests, we just verify + // the PAR request was made (proving prepareLogin was called) + await client.signInRedirect("user.bsky.social"); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + }); + + test("signIn defaults to signInRedirect", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.signIn("user.bsky.social"); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + }); + + test("prepareLogin accepts custom state", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + const result = await client.prepareLogin("user.bsky.social", { + state: "custom-state-123", + }); + + expect(result.state).toBe("custom-state-123"); + + const stored = localStorage.getItem( + "@happyview/oauth(pending-auth:custom-state-123)", + ); + expect(stored).not.toBeNull(); + }); + + test("dispose does not throw", () => { + const client = createClient(); + expect(() => client.dispose()).not.toThrow(); + }); + + test("LoginContinuedInParentWindowError has correct name and message", () => { + const err = new LoginContinuedInParentWindowError(); + expect(err.name).toBe("LoginContinuedInParentWindowError"); + expect(err.message).toBe("Login continued in parent window"); + expect(err).toBeInstanceOf(Error); + }); }); diff --git a/packages/oauth-client-browser/src/browser-client.ts b/packages/oauth-client-browser/src/browser-client.ts index 86b47db..740cbc8 100644 --- a/packages/oauth-client-browser/src/browser-client.ts +++ b/packages/oauth-client-browser/src/browser-client.ts @@ -4,6 +4,7 @@ import type { DidDocument } from "@atproto/did"; import { HappyViewOAuthClient, HappyViewSession, + LAST_ACTIVE_KEY, importJwk, InvalidStateError, ResolutionError, @@ -12,6 +13,17 @@ import { } from "@happyview/oauth-client"; import { LocalStorageAdapter } from "./local-storage-adapter"; +const NAMESPACE = "@happyview/oauth-client-browser"; +const POPUP_CHANNEL_NAME = `${NAMESPACE}(popup-channel)`; +const POPUP_STATE_PREFIX = `${NAMESPACE}(popup-state):`; + +export class LoginContinuedInParentWindowError extends Error { + constructor() { + super("Login continued in parent window"); + this.name = "LoginContinuedInParentWindowError"; + } +} + export interface HappyViewBrowserClientOptions { instanceUrl: string; clientId: string; @@ -34,6 +46,22 @@ interface PendingAuthState { issuer: string; } +export interface LoginOptions { + scopes?: string; + state?: string; +} + +export interface PopupLoginOptions extends LoginOptions { + popupName?: string; + popupFeatures?: string; +} + +export interface SignInOptions extends LoginOptions { + display?: "popup" | "page"; + popupName?: string; + popupFeatures?: string; +} + export interface PrepareLoginResult { authorizationUrl: string; did: string; @@ -74,7 +102,7 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { this.didResolver = new DidResolverCommon({ fetch: fetchFn }); } - async prepareLogin(handle: string): Promise { + async prepareLogin(handle: string, options?: LoginOptions): Promise { // Resolve handle → DID → DID document → PDS URL → auth server metadata const resolvedDid = await this.handleResolver.resolve(handle); if (!resolvedDid) { @@ -86,6 +114,8 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { const pdsUrl = extractPdsUrl(didDoc); const authMeta = await this.fetchAuthServerMetadata(pdsUrl); + const scopes = options?.scopes ?? this.scopes; + // Provision DPoP key from HappyView const { provisionId, rawJwk, pkceVerifier: provisionPkceVerifier } = await this.provisionDpopKey(); @@ -94,10 +124,7 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { const authPkceVerifier = generatePkceVerifier(); const authPkceChallenge = await computePkceChallenge(authPkceVerifier); - const stateBytes = crypto.getRandomValues(new Uint8Array(16)); - const state = Array.from(stateBytes, (b) => - b.toString(16).padStart(2, "0"), - ).join(""); + const state = options?.state ?? randomHex(16); const pendingState: PendingAuthState = { did, @@ -122,7 +149,7 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { client_id: clientId, redirect_uri: redirectUri, state, - scope: this.scopes, + scope: scopes, code_challenge: authPkceChallenge, code_challenge_method: "S256", login_hint: handle, @@ -163,8 +190,8 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { return { authorizationUrl, did, state }; } - async login(handle: string): Promise { - const { authorizationUrl } = await this.prepareLogin(handle); + async login(handle: string, options?: LoginOptions): Promise { + const { authorizationUrl } = await this.prepareLogin(handle, options); window.location.href = authorizationUrl; } @@ -294,6 +321,182 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { await this.deleteSession(did); } + async revoke(did: string): Promise { + return this.logout(did); + } + + override async restore(did?: string): Promise { + if (did) { + const session = await this.restoreSession(did); + if (session) { + await this.storage.set(LAST_ACTIVE_KEY, did); + } + return session; + } + return super.restore(); + } + + async init(): Promise< + | { session: HappyViewSession; state?: string | null } + | undefined + > { + const params = this.readCallbackParams(); + if (params) { + return this.initCallback(`?${params.toString()}`); + } + return this.initRestore(); + } + + async initRestore(): Promise<{ session: HappyViewSession } | undefined> { + const session = await this.restore(); + if (session) return { session }; + return undefined; + } + + async initCallback( + search?: string, + ): Promise<{ session: HappyViewSession; state: string | null }> { + const searchStr = search ?? window.location.search; + const params = new URLSearchParams(searchStr); + const state = params.get("state"); + + history.replaceState(null, "", window.location.pathname); + + const session = await this.callback(searchStr); + + if (state?.startsWith(POPUP_STATE_PREFIX)) { + const stateKey = state.slice(POPUP_STATE_PREFIX.length); + const received = await sendPopupResult(stateKey, { + status: "fulfilled", + value: session.did, + }); + if (!received) { + await this.logout(session.did); + } + window.close(); + throw new LoginContinuedInParentWindowError(); + } + + return { session, state }; + } + + async signIn( + handle: string, + options?: SignInOptions, + ): Promise { + if (options?.display === "popup") { + return this.signInPopup(handle, options); + } + return this.signInRedirect(handle, options); + } + + async signInRedirect( + handle: string, + options?: LoginOptions, + ): Promise { + return this.login(handle, options); + } + + async signInPopup( + handle: string, + options?: PopupLoginOptions, + ): Promise { + const popupTarget = options?.popupName ?? "_blank"; + const popupFeatures = + options?.popupFeatures ?? + "width=600,height=600,menubar=no,toolbar=no"; + + let popup = window.open("about:blank", popupTarget, popupFeatures); + + const stateKey = Math.random().toString(36).slice(2); + const result = await this.prepareLogin(handle, { + ...options, + state: `${POPUP_STATE_PREFIX}${stateKey}`, + }); + + if (popup) { + popup.location.href = result.authorizationUrl; + } else { + popup = window.open( + result.authorizationUrl, + popupTarget, + popupFeatures, + ); + } + popup?.focus(); + + return new Promise((resolve, reject) => { + const channel = new BroadcastChannel(POPUP_CHANNEL_NAME); + const cleanup = () => { + clearTimeout(timeout); + channel.removeEventListener("message", onMessage); + channel.close(); + popup?.close(); + }; + + const timeout = setTimeout(() => { + reject(new Error("Popup login timed out")); + cleanup(); + }, 5 * 60e3); + + const onMessage = async ({ data }: MessageEvent) => { + if (data.key !== stateKey) return; + if (!("result" in data)) return; + + channel.postMessage({ key: stateKey, ack: true }); + cleanup(); + + if (data.result.status === "fulfilled") { + const did = data.result.value as string; + try { + const session = await this.restoreSession(did); + if (session) { + resolve(session); + } else { + reject( + new Error( + "Failed to restore session after popup login", + ), + ); + } + } catch (err) { + reject(err); + await this.logout(did); + } + } else { + reject( + new Error( + data.result.reason?.message ?? "Popup login failed", + ), + ); + } + }; + + channel.addEventListener("message", onMessage); + }); + } + + readCallbackParams(): URLSearchParams | null { + const params = new URLSearchParams(window.location.search); + if ( + !params.has("state") || + !(params.has("code") || params.has("error")) + ) { + return null; + } + return params; + } + + findRedirectUrl(): string { + return ( + this.redirectUri ?? `${window.location.origin}/oauth/callback` + ); + } + + dispose(): void { + // No persistent resources to clean up + } + private resolveOAuthEndpoints(): { clientId: string; redirectUri: string } { return { clientId: this.clientId, @@ -373,6 +576,31 @@ function generatePkceVerifier(): string { .replace(/=+$/, ""); } +function sendPopupResult( + key: string, + result: { + status: "fulfilled" | "rejected"; + value?: string; + reason?: { message: string }; + }, +): Promise { + const channel = new BroadcastChannel(POPUP_CHANNEL_NAME); + return new Promise((resolve) => { + const cleanup = (received: boolean) => { + clearTimeout(timer); + channel.removeEventListener("message", onMessage); + channel.close(); + resolve(received); + }; + const onMessage = ({ data }: MessageEvent) => { + if ("ack" in data && data.key === key) cleanup(true); + }; + channel.addEventListener("message", onMessage); + channel.postMessage({ key, result }); + const timer = setTimeout(() => cleanup(false), 500); + }); +} + async function computePkceChallenge(verifier: string): Promise { const hash = await crypto.subtle.digest( "SHA-256", diff --git a/packages/oauth-client-browser/src/index.ts b/packages/oauth-client-browser/src/index.ts index a0fc391..b581a9f 100644 --- a/packages/oauth-client-browser/src/index.ts +++ b/packages/oauth-client-browser/src/index.ts @@ -15,9 +15,15 @@ export { type StoredSession, } from "@happyview/oauth-client"; -export { HappyViewBrowserClient } from "./browser-client"; +export { + HappyViewBrowserClient, + LoginContinuedInParentWindowError, +} from "./browser-client"; export type { HappyViewBrowserClientOptions, + LoginOptions, + PopupLoginOptions, PrepareLoginResult, + SignInOptions, } from "./browser-client"; export { LocalStorageAdapter } from "./local-storage-adapter"; diff --git a/packages/oauth-client/src/client.ts b/packages/oauth-client/src/client.ts index c74c17d..ba753bb 100644 --- a/packages/oauth-client/src/client.ts +++ b/packages/oauth-client/src/client.ts @@ -13,7 +13,7 @@ import type { } from "./types"; const STORAGE_PREFIX = "happyview:session:"; -const LAST_ACTIVE_KEY = "happyview:last-active-did"; +export const LAST_ACTIVE_KEY = "happyview:last-active-did"; export class HappyViewOAuthClient { protected readonly instanceUrl: string; diff --git a/packages/oauth-client/src/index.ts b/packages/oauth-client/src/index.ts index bf772a0..1275cba 100644 --- a/packages/oauth-client/src/index.ts +++ b/packages/oauth-client/src/index.ts @@ -1,4 +1,4 @@ -export { HappyViewOAuthClient } from "./client"; +export { HappyViewOAuthClient, LAST_ACTIVE_KEY } from "./client"; export { importJwk } from "./import-jwk"; export { ApiError, -- 2.51.2 From 2f3a7a218968e9df94dcf373b80ce75efd193f5a Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 4 May 2026 23:31:32 -0500 Subject: [PATCH 004/250] docs: bring Statusphere tutorial up-to-date Signed-off-by: Trezy --- packages/docs/docs/tutorials/statusphere.md | 121 +++++++++++++------- 1 file changed, 77 insertions(+), 44 deletions(-) diff --git a/packages/docs/docs/tutorials/statusphere.md b/packages/docs/docs/tutorials/statusphere.md index 675ccb9..5b9983d 100644 --- a/packages/docs/docs/tutorials/statusphere.md +++ b/packages/docs/docs/tutorials/statusphere.md @@ -71,57 +71,49 @@ Once the backfill starts, you should see records appearing in the dashboard: 2. Go to **Records** to browse individual indexed statuses 3. Go to **Backfill** to watch the backfill job progress — you'll see the number of repos processed and records fetched -## Step 3: Add a query lexicon for listing statuses +## Step 3: Create an API client -Now add a query endpoint to read the indexed data: +Before you can call any XRPC endpoint, you need an [API client](../guides/features/api-clients.md). The client key identifies your application to HappyView and is required on every request. -1. Go to **Lexicons > Add Lexicon > Local** -2. Set the NSID to `xyz.statusphere.listStatuses` -3. Set the type to **Query** -4. Set `target_collection` to `xyz.statusphere.status` — this tells the query which record collection it operates on (`target_collection` is a HappyView-specific field, not part of the lexicon spec) -5. Click **Add** +1. Go to **Settings > API Clients > New client** +2. Set the **Name** to something like "Statusphere Dev" +3. Set the **Client ID URL** and **Client URI** to your app's URL (for local testing, `http://localhost:3000` works) +4. Add a **Redirect URI** (e.g. `http://localhost:3000/oauth/callback`) +5. Click **Create** -This creates a `GET /xrpc/xyz.statusphere.listStatuses` endpoint. Without a Lua script, it uses HappyView's built-in default behavior: listing records with `limit`, `cursor`, and `did` parameters, or fetching a single record by `uri`. Try it: +Copy the `hvc_`-prefixed **client key** — you'll use it in every request. If you created a confidential client, also save the `hvs_`-prefixed **client secret** immediately; it's only shown once. -```sh -curl "http://127.0.0.1:3000/xrpc/xyz.statusphere.listStatuses?limit=5" \ - -H "X-Client-Key: $CLIENT_KEY" -``` +For the rest of this tutorial, we'll use `$CLIENT_KEY` to refer to your client key. + +## Step 4: Add a query endpoint for listing statuses + +Now add a query endpoint to read the indexed data: + +1. Go to **Lexicons > Add Lexicon > Local** +2. In the JSON editor, set the `id` to `xyz.statusphere.listStatuses` and change the type to `query`: ```json { - "records": [ - { - "uri": "at://did:plc:abc/xyz.statusphere.status/3abc123", - "status": "\ud83d\ude0a", - "createdAt": "2025-01-01T12:00:00Z" - }, - { - "uri": "at://did:plc:def/xyz.statusphere.status/3def456", - "status": "\ud83c\udf1f", - "createdAt": "2025-01-01T11:30:00Z" + "lexicon": 1, + "id": "xyz.statusphere.listStatuses", + "defs": { + "main": { + "type": "query" } - ], - "cursor": "MjAyNS0wMS0wMVQxMjowMDowMFp8YXQ6Ly9kaWQ6..." + } } ``` -See [XRPC API](../reference/xrpc-api.md) for the full default query behavior. - -## Step 4: Customize the query with a Lua script - -The default query behavior works, but let's customize it with a [Lua script](../guides/scripting.md). The script will handle single-record lookups by URI and paginated listing with an optional DID filter. - -1. Click on **xyz.statusphere.listStatuses** in the lexicon list to open its detail page -2. The Lua script editor is at the bottom of the page -3. Paste in the following script: +3. A [Lua script](../guides/scripting.md) editor appears automatically. Replace the default script with: ```lua +collection = "xyz.statusphere.status" + function handle() if params.uri then local record = db.get(params.uri) if not record then - return { error = "not found" } + error("record not found") end return { record = record } end @@ -135,9 +127,36 @@ function handle() end ``` -4. Click **Save** +The `collection` variable at the top tells the script which record collection to query. The `handle()` function supports single-record lookups by URI and paginated listing with an optional DID filter. -The endpoint now uses your custom logic. Filter by a specific user: +4. Click **Upload** + +Try it out: + +```sh +curl "http://127.0.0.1:3000/xrpc/xyz.statusphere.listStatuses?limit=5" \ + -H "X-Client-Key: $CLIENT_KEY" +``` + +```json +{ + "records": [ + { + "uri": "at://did:plc:abc/xyz.statusphere.status/3abc123", + "status": "😊", + "createdAt": "2025-01-01T12:00:00Z" + }, + { + "uri": "at://did:plc:def/xyz.statusphere.status/3def456", + "status": "🌟", + "createdAt": "2025-01-01T11:30:00Z" + } + ], + "cursor": "MjAyNS0wMS0wMVQxMjowMDowMFp8YXQ6Ly9kaWQ6..." +} +``` + +Filter by a specific user: ```sh curl "http://127.0.0.1:3000/xrpc/xyz.statusphere.listStatuses?did=did:plc:abc&limit=1" \ @@ -151,17 +170,30 @@ curl "http://127.0.0.1:3000/xrpc/xyz.statusphere.listStatuses?uri=at://did:plc:a -H "X-Client-Key: $CLIENT_KEY" ``` -## Step 5: Add a procedure lexicon for setting status +## Step 5: Add a procedure endpoint for setting status Add a write endpoint so users can set their status through your AppView: 1. Go to **Lexicons > Add Lexicon > Local** -2. Set the NSID to `xyz.statusphere.setStatus` -3. Set the type to **Procedure** -4. Set `target_collection` to `xyz.statusphere.status` -5. A default Lua script is generated — replace it with: +2. In the JSON editor, set the `id` to `xyz.statusphere.setStatus` and change the type to `procedure`: + +```json +{ + "lexicon": 1, + "id": "xyz.statusphere.setStatus", + "defs": { + "main": { + "type": "procedure" + } + } +} +``` + +3. A default Lua script is generated — replace it with: ```lua +collection = "xyz.statusphere.status" + function handle() local r = Record(collection, { status = input.status, @@ -172,7 +204,7 @@ function handle() end ``` -6. Click **Add** +4. Click **Upload** This creates a `POST /xrpc/xyz.statusphere.setStatus` endpoint that creates records on the user's PDS and indexes them locally. @@ -186,7 +218,7 @@ curl -X POST http://127.0.0.1:3000/xrpc/xyz.statusphere.setStatus \ -H "Authorization: DPoP $TOKEN" \ -H "DPoP: $DPOP_PROOF" \ -H "Content-Type: application/json" \ - -d '{ "status": "\ud83d\ude80" }' + -d '{ "status": "🚀" }' ``` ```json @@ -211,8 +243,9 @@ Everything was done through the dashboard — no server restarts, no config file ## Next steps +- [API Clients](../guides/features/api-clients.md): Public vs. confidential clients, DPoP authentication, and rate limiting - [Lua Scripting](../guides/scripting.md): Explore the full Record and database APIs to build more complex queries -- [Lexicons](../guides/indexing/lexicons.md): Learn about network lexicons, the backfill flag, and target collections +- [Lexicons](../guides/indexing/lexicons.md): Learn about network lexicons, the backfill flag, and record collections - [XRPC API](../reference/xrpc-api.md): Understand how the generated endpoints behave - [Admin API](../reference/admin/admin-api.md): Automate lexicon management via the API - [Statusphere example app](https://github.com/bluesky-social/statusphere-example-app): See the full Statusphere frontend -- 2.51.2 From ca5b6a5539c202a644e9fa547e28d5e8ab67dff7 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 14:34:15 -0500 Subject: [PATCH 005/250] fix: dont refresh tokens on 4xx status codes Signed-off-by: Trezy --- src/oauth/pds_write.rs | 144 +++++++++++++++++++++++++++++++++++------ 1 file changed, 123 insertions(+), 21 deletions(-) diff --git a/src/oauth/pds_write.rs b/src/oauth/pds_write.rs index 85307b0..d619510 100644 --- a/src/oauth/pds_write.rs +++ b/src/oauth/pds_write.rs @@ -142,6 +142,9 @@ async fn dpop_post_with_retry( } /// Refresh the access token and retry the PDS request. +/// +/// If the refresh fails with `invalid_grant`, re-reads the session from the +/// database — a concurrent request may have already refreshed the token. #[allow(clippy::too_many_arguments)] async fn retry_after_refresh( http: &reqwest::Client, @@ -154,7 +157,38 @@ async fn retry_after_refresh( nonce: Option<&str>, request_builder: &impl Fn(&reqwest::Client, &str, &str) -> reqwest::RequestBuilder, ) -> Result { - refresh_access_token(http, pool, backend, encryption_key, oauth_registry, creds).await?; + let stale_access_token = creds.session.access_token.clone(); + + if let Err(e) = + refresh_access_token(http, pool, backend, encryption_key, oauth_registry, creds).await + { + // If the refresh token was rejected, check whether a concurrent request + // already refreshed the session. Re-read from the database and compare + // the access token — if it changed, another refresh succeeded. + if is_invalid_grant_error(&e) { + let fresh_session = super::sessions::get_dpop_session( + pool, + backend, + encryption_key, + &creds.session.api_client_id, + &creds.session.user_did, + ) + .await?; + + if fresh_session.access_token != stale_access_token { + tracing::info!( + user_did = %creds.session.user_did, + api_client_id = %creds.session.api_client_id, + "concurrent refresh detected, using updated token" + ); + creds.session = fresh_session; + } else { + return Err(e); + } + } else { + return Err(e); + } + } let proof = generate_dpop_proof( &creds.private_jwk, @@ -190,6 +224,10 @@ async fn retry_after_refresh( Ok(resp) } +fn is_invalid_grant_error(e: &AppError) -> bool { + matches!(e, AppError::Auth(msg) if msg.contains("invalid_grant")) +} + /// Make an authenticated POST to a PDS XRPC endpoint using a DPoP session. #[allow(clippy::too_many_arguments)] pub async fn dpop_pds_post( @@ -317,6 +355,11 @@ fn extract_dpop_nonce(resp: &reqwest::Response) -> Option { /// Discovers the token endpoint from the issuer's OAuth metadata, sends a /// `grant_type=refresh_token` request with a DPoP proof, and updates the /// stored session with the new tokens. +/// +/// Unlike PDS resource endpoints, the token endpoint response body is read +/// before deciding whether a `dpop-nonce` header indicates a retry — this +/// avoids misinterpreting `invalid_grant` as a nonce requirement when the +/// PDS includes `dpop-nonce` on all error responses. async fn refresh_access_token( http: &reqwest::Client, pool: &sqlx::AnyPool, @@ -362,12 +405,28 @@ async fn refresh_access_token( .await .map_err(|e| AppError::Internal(format!("token refresh request failed: {e}")))?; - // Handle nonce requirement on the token endpoint - if let Some(nonce) = extract_dpop_nonce(&resp) { + let status = resp.status(); + let dpop_nonce = resp + .headers() + .get("dpop-nonce") + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()); + let body = resp.text().await.unwrap_or_default(); + + if status.is_success() { + return apply_refresh_response(pool, backend, encryption_key, creds, &body).await; + } + + // Only retry with a nonce if the error is actually `use_dpop_nonce`. + // PDS implementations include `dpop-nonce` on all responses, so checking + // the header alone would misinterpret `invalid_grant` as a nonce issue. + if let Some(nonce) = dpop_nonce + && is_use_dpop_nonce_error(&body) + { let proof = generate_dpop_proof_no_ath(&creds.private_jwk, "POST", &token_endpoint, Some(&nonce))?; - let resp = http + let retry_resp = http .post(&token_endpoint) .header("DPoP", &proof) .header("Content-Type", "application/x-www-form-urlencoded") @@ -380,32 +439,40 @@ async fn refresh_access_token( .await .map_err(|e| AppError::Internal(format!("token refresh request failed: {e}")))?; - return handle_refresh_response(http, pool, backend, encryption_key, creds, resp).await; + let retry_status = retry_resp.status(); + let retry_body = retry_resp.text().await.unwrap_or_default(); + + if !retry_status.is_success() { + return Err(AppError::Auth(format!( + "token refresh failed ({retry_status}): {retry_body}" + ))); + } + + return apply_refresh_response(pool, backend, encryption_key, creds, &retry_body).await; } - handle_refresh_response(http, pool, backend, encryption_key, creds, resp).await + Err(AppError::Auth(format!( + "token refresh failed ({status}): {body}" + ))) +} + +/// Check if a token endpoint error body indicates a `use_dpop_nonce` error. +fn is_use_dpop_nonce_error(body: &str) -> bool { + serde_json::from_str::(body) + .ok() + .and_then(|v| v["error"].as_str().map(|s| s == "use_dpop_nonce")) + .unwrap_or(false) } -/// Parse the token refresh response and update the stored session. -async fn handle_refresh_response( - _http: &reqwest::Client, +/// Parse a successful token refresh response body and update the stored session. +async fn apply_refresh_response( pool: &sqlx::AnyPool, backend: DatabaseBackend, encryption_key: &[u8; 32], creds: &mut DpopCredentials, - resp: reqwest::Response, + body: &str, ) -> Result<(), AppError> { - if !resp.status().is_success() { - let status = resp.status(); - let body = resp.text().await.unwrap_or_default(); - return Err(AppError::Auth(format!( - "token refresh failed ({status}): {body}" - ))); - } - - let token_resp: serde_json::Value = resp - .json() - .await + let token_resp: serde_json::Value = serde_json::from_str(body) .map_err(|e| AppError::Internal(format!("invalid token refresh response: {e}")))?; let new_access_token = token_resp["access_token"] @@ -731,4 +798,39 @@ mod tests { ); assert!(result.is_ok(), "validation failed: {:?}", result.err()); } + + #[test] + fn is_use_dpop_nonce_error_detects_nonce_error() { + assert!(is_use_dpop_nonce_error(r#"{"error":"use_dpop_nonce"}"#)); + } + + #[test] + fn is_use_dpop_nonce_error_rejects_invalid_grant() { + assert!(!is_use_dpop_nonce_error( + r#"{"error":"invalid_grant","error_description":"Invalid refresh token"}"# + )); + } + + #[test] + fn is_use_dpop_nonce_error_rejects_garbage() { + assert!(!is_use_dpop_nonce_error("not json")); + assert!(!is_use_dpop_nonce_error("")); + assert!(!is_use_dpop_nonce_error("{}")); + } + + #[test] + fn is_invalid_grant_error_matches() { + let e = AppError::Auth("token refresh failed (400 Bad Request): {\"error\":\"invalid_grant\",\"error_description\":\"Invalid refresh token\"}".into()); + assert!(is_invalid_grant_error(&e)); + } + + #[test] + fn is_invalid_grant_error_ignores_other_errors() { + assert!(!is_invalid_grant_error(&AppError::Auth( + "token expired".into() + ))); + assert!(!is_invalid_grant_error(&AppError::Internal( + "something broke".into() + ))); + } } -- 2.51.2 From 8470d665808e94c7d8b4c7aed20a286163e116f1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 16:18:17 -0500 Subject: [PATCH 006/250] fix: update the base path rewrite to skip Nexts basePath config Signed-off-by: Trezy --- Dockerfile | 5 ++++- entrypoint.sh | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile index 96d2f5d..87aee8b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ WORKDIR /app/web COPY web/package.json web/package-lock.json ./ RUN npm ci COPY web/ . +ENV NEXT_PUBLIC_BASE_PATH=/__HAPPYVIEW_BP__ RUN npm run build FROM rust:1.93-bookworm AS builder @@ -34,9 +35,11 @@ WORKDIR /app COPY --from=builder /app/target/release/happyview /usr/local/bin/happyview COPY --from=builder /app/migrations /app/migrations COPY --from=frontend /app/web/out /srv/static +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh && touch /srv/static/.base-path-pending ENV STATIC_DIR=/srv/static EXPOSE 3000 -ENTRYPOINT ["happyview"] +ENTRYPOINT ["/entrypoint.sh"] diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..ef23dd4 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -e + +BP="${BASE_PATH:-}" +STATIC="${STATIC_DIR:-/srv/static}" +SENTINEL="/__HAPPYVIEW_BP__" +MARKER="${STATIC}/.base-path-pending" + +# Only run replacement once (marker is created during Docker build) +if [ -f "$MARKER" ]; then + if [ -n "$BP" ]; then + # Validate: must start with / + case "$BP" in + /*) ;; + *) echo "ERROR: BASE_PATH must start with '/' (got: $BP)" >&2; exit 1 ;; + esac + # Strip trailing slash + BP="${BP%/}" + + # Replace sentinel string in static files with actual base path + find "${STATIC}" -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' \) \ + -exec sed -i "s|${SENTINEL}|${BP}|g" {} + + else + # No base path: remove sentinel string from static files + find "${STATIC}" -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' \) \ + -exec sed -i "s|${SENTINEL}||g" {} + + fi + + rm "$MARKER" +fi + +exec happyview "$@" -- 2.51.2 From 0ac3e2c524c7075937fe91f8d73e076a650972ec Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 09:39:26 -0500 Subject: [PATCH 007/250] fix: better handling for PDS errors Signed-off-by: Trezy --- src/error.rs | 5 +++++ src/lua/execute.rs | 22 +++++++++++++++++++--- src/lua/record.rs | 19 +++++++++++++------ src/oauth/pds_write.rs | 18 +++++++++++++++++- 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/error.rs b/src/error.rs index 5a814fb..caf4b39 100644 --- a/src/error.rs +++ b/src/error.rs @@ -25,6 +25,11 @@ impl std::fmt::Display for ScriptErrorType { /// Parse a Lua error message to extract a line number. /// +/// Prefix used to tag auth errors that pass through the Lua runtime boundary. +/// The script executor checks for this prefix to recover `AppError::Auth` from +/// a generic `mlua::Error::runtime`, returning 401 instead of 500. +pub const LUA_AUTH_ERROR_PREFIX: &str = "AUTH_ERROR:"; + /// mlua errors look like: /// - `[string "..."]:42: attempt to index a nil value` /// - `runtime error: [string "..."]:10: bad argument` diff --git a/src/lua/execute.rs b/src/lua/execute.rs index 51bdbb2..c1548ab 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -9,7 +9,7 @@ use std::time::Instant; use crate::AppState; use crate::auth::Claims; use crate::db::{DatabaseBackend, adapt_sql, now_rfc3339}; -use crate::error::{AppError, ScriptErrorType, parse_lua_line}; +use crate::error::{AppError, LUA_AUTH_ERROR_PREFIX, ScriptErrorType, parse_lua_line}; use crate::event_log::{EventLog, Severity, log_event}; use crate::lexicon::ParsedLexicon; use crate::repo; @@ -411,7 +411,15 @@ pub async fn execute_procedure_script( let msg = e.to_string(); tracing::error!(method, error = %msg, "lua script execution failed"); let (line, clean_msg) = parse_lua_line(&msg); - let app_error = if msg.contains("execution limit") { + let app_error = if msg.contains(LUA_AUTH_ERROR_PREFIX) + || clean_msg.contains(LUA_AUTH_ERROR_PREFIX) + { + let auth_msg = clean_msg + .strip_prefix(LUA_AUTH_ERROR_PREFIX) + .unwrap_or(&clean_msg) + .to_string(); + AppError::Auth(auth_msg) + } else if msg.contains("execution limit") { AppError::ScriptError { error_type: ScriptErrorType::Timeout, message: "script exceeded execution time limit".to_string(), @@ -766,7 +774,15 @@ pub async fn execute_query_script( let msg = e.to_string(); tracing::error!(method, error = %msg, "lua script execution failed"); let (line, clean_msg) = parse_lua_line(&msg); - let app_error = if msg.contains("execution limit") { + let app_error = if msg.contains(LUA_AUTH_ERROR_PREFIX) + || clean_msg.contains(LUA_AUTH_ERROR_PREFIX) + { + let auth_msg = clean_msg + .strip_prefix(LUA_AUTH_ERROR_PREFIX) + .unwrap_or(&clean_msg) + .to_string(); + AppError::Auth(auth_msg) + } else if msg.contains("execution limit") { AppError::ScriptError { error_type: ScriptErrorType::Timeout, message: "script exceeded execution time limit".to_string(), diff --git a/src/lua/record.rs b/src/lua/record.rs index 654c68a..16c7e3d 100644 --- a/src/lua/record.rs +++ b/src/lua/record.rs @@ -6,11 +6,20 @@ use std::sync::Arc; use crate::AppState; use crate::auth::Claims; use crate::db::{adapt_sql, now_rfc3339}; +use crate::error::{AppError, LUA_AUTH_ERROR_PREFIX}; use crate::record_refs::sync_refs; use crate::repo::PdsAuth; use super::tid::generate_tid; +fn pds_error(context: &str, e: AppError) -> mlua::Error { + if matches!(&e, AppError::Auth(_)) { + mlua::Error::runtime(format!("{LUA_AUTH_ERROR_PREFIX}{e}")) + } else { + mlua::Error::runtime(format!("PDS {context} failed: {e}")) + } +} + const INTERNAL_FIELDS: &[&str] = &[ "_collection", "_uri", @@ -85,7 +94,7 @@ pub fn register_record_api( let resp = pds_auth .post_json(&state, repo, "com.atproto.repo.putRecord", &pds_body) .await - .map_err(|e| mlua::Error::runtime(format!("PDS putRecord failed: {e}")))?; + .map_err(|e| pds_error("putRecord", e))?; if !resp.status().is_success() { let status = resp.status(); @@ -148,7 +157,7 @@ pub fn register_record_api( let resp = pds_auth .post_json(&state, repo, "com.atproto.repo.createRecord", &pds_body) .await - .map_err(|e| mlua::Error::runtime(format!("PDS createRecord failed: {e}")))?; + .map_err(|e| pds_error("createRecord", e))?; if !resp.status().is_success() { let status = resp.status(); @@ -249,7 +258,7 @@ pub fn register_record_api( let resp = pds_auth .post_json(&state, repo, "com.atproto.repo.deleteRecord", &pds_body) .await - .map_err(|e| mlua::Error::runtime(format!("PDS deleteRecord failed: {e}")))?; + .map_err(|e| pds_error("deleteRecord", e))?; if !resp.status().is_success() { let status = resp.status(); @@ -516,9 +525,7 @@ pub fn register_record_api( let resp = pds_auth .post_json(&state, repo, "com.atproto.repo.putRecord", &pds_body) .await - .map_err(|e| { - mlua::Error::runtime(format!("PDS putRecord failed: {e}")) - })?; + .map_err(|e| pds_error("putRecord", e))?; if !resp.status().is_success() { let status = resp.status(); diff --git a/src/oauth/pds_write.rs b/src/oauth/pds_write.rs index d619510..a0d2aa3 100644 --- a/src/oauth/pds_write.rs +++ b/src/oauth/pds_write.rs @@ -183,7 +183,23 @@ async fn retry_after_refresh( ); creds.session = fresh_session; } else { - return Err(e); + // Session is unrecoverable — clean it up so future requests + // fail fast instead of repeating the same doomed refresh. + tracing::warn!( + user_did = %creds.session.user_did, + api_client_id = %creds.session.api_client_id, + "refresh token permanently invalid, deleting broken session" + ); + let _ = super::sessions::delete_dpop_session( + pool, + backend, + &creds.session.api_client_id, + &creds.session.user_did, + ) + .await; + return Err(AppError::Auth( + "session expired, please re-authenticate".into(), + )); } } else { return Err(e); -- 2.51.2 From 0a5b826a3eaa62abe448bf85a84663df36350815 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 09:41:09 -0500 Subject: [PATCH 008/250] fix: expose approved oauth scopes to clients Signed-off-by: Trezy --- src/oauth/routes.rs | 123 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 2 deletions(-) diff --git a/src/oauth/routes.rs b/src/oauth/routes.rs index 4836c4b..4f85a4e 100644 --- a/src/oauth/routes.rs +++ b/src/oauth/routes.rs @@ -1,6 +1,6 @@ use axum::extract::{FromRequest, Path, State}; use axum::http::StatusCode; -use axum::routing::{delete, post}; +use axum::routing::{get, post}; use axum::{Json, Router}; use serde::{Deserialize, Serialize}; use uuid::Uuid; @@ -17,7 +17,7 @@ pub fn routes() -> Router { Router::new() .route("/dpop-keys", post(provision_dpop_key)) .route("/sessions", post(register_session)) - .route("/sessions/{did}", delete(delete_session)) + .route("/sessions/{did}", get(get_session).delete(delete_session)) } // --- Request / response types --- @@ -50,6 +50,13 @@ struct RegisterSessionBody { struct RegisterSessionResponse { session_id: String, did: String, + scopes: Vec, +} + +#[derive(Serialize)] +struct GetSessionResponse { + did: String, + scopes: Vec, } // --- Handlers --- @@ -283,15 +290,127 @@ async fn register_session( ) .await; + let scopes: Vec = body.scopes.split_whitespace().map(String::from).collect(); + Ok(( StatusCode::CREATED, Json(RegisterSessionResponse { session_id, did: body.did, + scopes, }), )) } +/// GET /oauth/sessions/:did — retrieve session info (scopes). +/// +/// Same auth as DELETE: confidential clients use `X-Client-Key` + `X-Client-Secret`, +/// public clients use `X-Client-Key` + `Authorization: DPoP ` + `DPoP` proof. +async fn get_session( + State(state): State, + Path(did): Path, + req: axum::extract::Request, +) -> Result, AppError> { + let client_key = req + .headers() + .get("x-client-key") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| AppError::Auth("X-Client-Key header required".into()))? + .to_string(); + + let client_secret = req + .headers() + .get("x-client-secret") + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()); + + let encryption_key = state + .config + .token_encryption_key + .as_ref() + .ok_or_else(|| AppError::Internal("TOKEN_ENCRYPTION_KEY not configured".into()))?; + + let client = if let Some(ref secret) = client_secret { + client_auth::authenticate_confidential(&state.db, state.db_backend, &client_key, secret) + .await? + } else { + let resolved = + client_auth::resolve_client_by_key(&state.db, state.db_backend, &client_key).await?; + + if resolved.client_type == "public" { + let auth_header = req + .headers() + .get("authorization") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| { + AppError::Auth("public clients must provide Authorization: DPoP ".into()) + })?; + let access_token = auth_header.strip_prefix("DPoP ").ok_or_else(|| { + AppError::Auth("public clients must use DPoP authorization scheme".into()) + })?; + let dpop_proof = req + .headers() + .get("dpop") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| { + AppError::Auth("public clients must provide DPoP proof header".into()) + })?; + + let session = sessions::get_dpop_session_by_token_hash( + &state.db, + state.db_backend, + encryption_key, + &resolved.id, + access_token, + ) + .await?; + + let thumbprint = + keys::get_dpop_key_thumbprint(&state.db, state.db_backend, &session.dpop_key_id) + .await?; + + let scheme = if state.config.public_url.starts_with("https") { + "https" + } else { + "http" + }; + let host = req + .headers() + .get("host") + .and_then(|v| v.to_str().ok()) + .unwrap_or("localhost"); + let request_url = format!("{}://{}/oauth/sessions/{}", scheme, host, did); + + crate::oauth::dpop_proof::validate_dpop_proof( + dpop_proof, + "GET", + &request_url, + access_token, + &thumbprint, + )?; + } + + resolved + }; + + let session = sessions::get_dpop_session( + &state.db, + state.db_backend, + encryption_key, + &client.id, + &did, + ) + .await?; + + let scopes: Vec = session + .scopes + .split_whitespace() + .map(String::from) + .collect(); + + Ok(Json(GetSessionResponse { did, scopes })) +} + /// DELETE /oauth/sessions/:did — logout / revoke a session. /// /// Confidential clients authenticate with `X-Client-Key` + `X-Client-Secret`. -- 2.51.2 From ae69736cdb6323c46e2b8e746940d5e9ac8685c0 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 09:43:00 -0500 Subject: [PATCH 009/250] fix: expose oauth scopes via the SDKs Signed-off-by: Trezy --- packages/oauth-client/src/client.ts | 27 +++++++++++++++++++++++++++ packages/oauth-client/src/index.ts | 1 + packages/oauth-client/src/session.ts | 3 +++ packages/oauth-client/src/types.ts | 7 +++++++ 4 files changed, 38 insertions(+) diff --git a/packages/oauth-client/src/client.ts b/packages/oauth-client/src/client.ts index ba753bb..29f98f2 100644 --- a/packages/oauth-client/src/client.ts +++ b/packages/oauth-client/src/client.ts @@ -4,6 +4,7 @@ import { importJwk } from "./import-jwk"; import { HappyViewSession } from "./session"; import { MemoryStorage } from "./storage"; import type { + GetSessionResponse, HappyViewOAuthClientOptions, ProvisionKeyResponse, RegisterSessionParams, @@ -135,6 +136,7 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, + scopes: data.scopes, }; await this.storage.set( `${STORAGE_PREFIX}${data.did}`, @@ -148,6 +150,7 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, + scopes: data.scopes, fetch: this._fetch, }); } @@ -190,10 +193,34 @@ export class HappyViewOAuthClient { accessToken: data.accessToken, clientKey: data.clientKey, instanceUrl: data.instanceUrl, + scopes: data.scopes ?? [], fetch: this._fetch, }); } + async getSession(did: string): Promise { + const session = await this.restoreSession(did); + if (!session) { + throw new ApiError("No stored session for this DID", 404, {}); + } + + const resp = await session.fetchHandler( + `${this.instanceUrl}/oauth/sessions/${did}`, + { method: "GET" }, + ); + + if (!resp.ok) { + const body = await resp.json().catch(() => ({})); + throw new ApiError( + `Failed to get session: ${resp.status} ${(body as any).message ?? resp.statusText}`, + resp.status, + body, + ); + } + + return resp.json(); + } + async restore(): Promise { const did = await this.storage.get(LAST_ACTIVE_KEY); if (!did) return null; diff --git a/packages/oauth-client/src/index.ts b/packages/oauth-client/src/index.ts index 1275cba..eaa7592 100644 --- a/packages/oauth-client/src/index.ts +++ b/packages/oauth-client/src/index.ts @@ -13,6 +13,7 @@ export type { HappyViewSessionOptions } from "./session"; export { MemoryStorage } from "./storage"; export type { DpopProvision, + GetSessionResponse, HappyViewOAuthClientOptions, ProvisionKeyResponse, RegisterSessionParams, diff --git a/packages/oauth-client/src/session.ts b/packages/oauth-client/src/session.ts index 564ed72..f7b5033 100644 --- a/packages/oauth-client/src/session.ts +++ b/packages/oauth-client/src/session.ts @@ -6,6 +6,7 @@ export interface HappyViewSessionOptions { accessToken: string; clientKey: string; instanceUrl: string; + scopes: string[]; fetch?: typeof globalThis.fetch; } @@ -28,6 +29,7 @@ function base64url(buffer: ArrayBuffer): string { export class HappyViewSession { readonly did: string; + readonly scopes: string[]; private readonly dpopKey: Key; private readonly accessToken: string; @@ -38,6 +40,7 @@ export class HappyViewSession { constructor(options: HappyViewSessionOptions) { this.did = options.did; + this.scopes = options.scopes; this.dpopKey = options.dpopKey; this.accessToken = options.accessToken; this.clientKey = options.clientKey; diff --git a/packages/oauth-client/src/types.ts b/packages/oauth-client/src/types.ts index c3a0dc9..f611f44 100644 --- a/packages/oauth-client/src/types.ts +++ b/packages/oauth-client/src/types.ts @@ -40,6 +40,7 @@ export interface StoredSession { accessToken: string; clientKey: string; instanceUrl: string; + scopes: string[]; } export interface ProvisionKeyResponse { @@ -50,4 +51,10 @@ export interface ProvisionKeyResponse { export interface RegisterSessionResponse { session_id: string; did: string; + scopes: string[]; +} + +export interface GetSessionResponse { + did: string; + scopes: string[]; } -- 2.51.2 From 0375ff87f1e83e93f6e263868ed751e9a63f7bc1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 09:48:36 -0500 Subject: [PATCH 010/250] docs: add docs for the Node SDK Signed-off-by: Trezy --- packages/docs/docs/sdk/oauth-client-node.md | 226 ++++++++++++++++++ packages/docs/docs/sdk/overview.md | 8 +- packages/docs/scripts/generate-changelogs.mjs | 6 + packages/docs/sidebars.ts | 10 + 4 files changed, 248 insertions(+), 2 deletions(-) create mode 100644 packages/docs/docs/sdk/oauth-client-node.md diff --git a/packages/docs/docs/sdk/oauth-client-node.md b/packages/docs/docs/sdk/oauth-client-node.md new file mode 100644 index 0000000..4c6c84d --- /dev/null +++ b/packages/docs/docs/sdk/oauth-client-node.md @@ -0,0 +1,226 @@ +# Node Client + +The Node client handles OAuth authorization and callback flows for server-side Node.js apps authenticating with a HappyView instance. It wraps the [OAuth Client](./oauth-client.md) with handle/DID resolution and a server-friendly API that returns authorization URLs instead of redirecting the browser. + +## Installation + +```bash +npm install @happyview/oauth-client-node +``` + +## Setup + +```typescript +import { HappyViewNodeClient } from "@happyview/oauth-client-node"; + +const client = new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_your_client_key", + clientSecret: "hvs_your_secret", // optional, for confidential clients + redirectUri: "https://example.com/oauth/callback", + storage: myStorageAdapter, +}); +``` + +| Option | Required | Description | +| ------------- | -------- | ---------------------------------------------------------------------------- | +| `instanceUrl` | Yes | The HappyView instance URL | +| `clientId` | Yes | URL where your app serves its [OAuth client metadata](#oauth-client-metadata) | +| `clientKey` | Yes | API client key from the HappyView admin dashboard | +| `clientSecret`| No | API client secret — makes this a confidential client | +| `redirectUri` | Yes | OAuth callback URL for your server | +| `scopes` | No | OAuth scopes to request. Defaults to `"atproto"` | +| `storage` | Yes | Storage adapter for persisting sessions and pending auth state | +| `sessionHooks`| No | Hooks called on session lifecycle events | +| `fetch` | No | Custom fetch implementation | + +:::note +Unlike the browser client, `storage` is required — there is no default. Use any adapter that implements `StorageAdapter` (e.g., backed by Redis, a database, or the filesystem). +::: + +## Authorization + +`authorize()` resolves the user's handle, discovers their PDS, provisions a DPoP key, and returns an authorization URL. Your server should redirect the user to this URL: + +```typescript +// In your login route handler +const url = await client.authorize("alice.bsky.social"); +res.redirect(url.toString()); +``` + +### Authorization options + +Pass options to customize the authorization request: + +```typescript +const url = await client.authorize("alice.bsky.social", { + scope: "atproto transition:generic", + state: myCustomState, + redirect_uri: "https://example.com/alt-callback", + display: "popup", + prompt: "consent", + ui_locales: "en", +}); +``` + +| Option | Description | +| ------------- | ------------------------------------------------------------ | +| `scope` | Override the default scopes for this request | +| `state` | Custom state value (defaults to a random hex string) | +| `redirect_uri`| Override the default redirect URI for this request | +| `display` | `"page"`, `"popup"`, `"touch"`, or `"wap"` | +| `prompt` | Prompt behavior (e.g., `"consent"`, `"login"`) | +| `nonce` | Nonce for ID token validation | +| `max_age` | Maximum authentication age in seconds | +| `ui_locales` | Preferred UI languages | +| `signal` | AbortSignal to cancel the request | + +## Callback + +In your OAuth callback route, pass the query parameters to `callback()`: + +```typescript +// In your callback route handler +const params = new URLSearchParams(req.url.split("?")[1]); +const { session, state } = await client.callback(params); + +// session is ready to use +console.log(session.did); +console.log(session.scopes); +``` + +The returned `HappyViewSession` is persisted to storage and ready for authenticated requests. + +You can override the redirect URI if needed: + +```typescript +const { session } = await client.callback(params, { + redirect_uri: "https://example.com/alt-callback", +}); +``` + +## Checking approved scopes + +After authorization or session restoration, you can check which scopes were approved: + +```typescript +console.log(session.scopes); +// ["atproto", "transition:generic"] +``` + +To fetch the latest scopes from the server: + +```typescript +const info = await client.getSession("did:plc:abc123"); +console.log(info.scopes); +// ["atproto", "transition:generic"] +``` + +## Authenticated requests + +The session's `fetchHandler` attaches DPoP proof headers automatically: + +```typescript +const response = await session.fetchHandler( + "/xrpc/com.example.getStuff?limit=10", + { method: "GET" }, +); + +const data = await response.json(); +``` + +Pass a relative path (prepends the HappyView instance URL) or a full URL (used as-is). + +## Session restoration + +Restore a previously stored session by DID: + +```typescript +const session = await client.restore("did:plc:abc123"); +``` + +Unlike the browser client, `restore()` requires a DID — there is no "last active" session concept on the server. + +Throws `InvalidStateError` if no session is found for the given DID. + +## Revoke session + +```typescript +await client.revoke("did:plc:abc123"); +``` + +## Aborting a pending authorization + +If the user abandons the login flow, clean up the pending state: + +```typescript +await client.abortRequest(authorizationUrl); +``` + +## OAuth client metadata + +Your app must serve an OAuth client metadata JSON document at the URL you pass as `clientId`. The PDS fetches this during authorization to validate the redirect URI and display your app's information. + +```typescript +// Express example +app.get("/oauth-client-metadata.json", (req, res) => { + const origin = `${req.protocol}://${req.get("host")}`; + res.json({ + client_id: `${origin}/oauth-client-metadata.json`, + client_name: "My App", + client_uri: origin, + redirect_uris: [`${origin}/oauth/callback`], + token_endpoint_auth_method: "none", + grant_types: ["authorization_code", "refresh_token"], + scope: "atproto", + application_type: "web", + dpop_bound_access_tokens: true, + }); +}); +``` + +The `redirect_uris` array must include the `redirectUri` your client is configured with. + +## Re-exports + +This package re-exports everything from `@happyview/oauth-client`, so you don't need to install the core package separately: + +```typescript +import { + HappyViewNodeClient, + HappyViewSession, + ApiError, + type StorageAdapter, +} from "@happyview/oauth-client-node"; +``` + +It also re-exports handle and DID resolution utilities from `@atproto-labs/handle-resolver` and `@atproto-labs/did-resolver`. + +## Error handling + +All errors extend `HappyViewError`. The Node client additionally uses `OAuthCallbackError` for callback failures: + +| Error | When | +| --- | --- | +| `ApiError` | HappyView API returned a non-OK response (has `status` and `body`) | +| `OAuthCallbackError` | OAuth callback failed — wraps the callback params and underlying error | +| `InvalidStateError` | Missing or invalid OAuth/session state | +| `TokenExchangeError` | Token exchange with the PDS failed (has `status` and `body`) | +| `ResolutionError` | Handle or DID resolution failed | + +```typescript +import { + OAuthCallbackError, + InvalidStateError, +} from "@happyview/oauth-client-node"; + +try { + const { session } = await client.callback(params); +} catch (err) { + if (err instanceof OAuthCallbackError) { + console.error("OAuth callback failed:", err.message); + console.error("State:", err.state); + } +} +``` diff --git a/packages/docs/docs/sdk/overview.md b/packages/docs/docs/sdk/overview.md index d2efce2..9229674 100644 --- a/packages/docs/docs/sdk/overview.md +++ b/packages/docs/docs/sdk/overview.md @@ -6,7 +6,8 @@ HappyView provides JavaScript packages for building third-party apps that authen | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | [`@happyview/lex-agent`](https://npmx.dev/package/@happyview/lex-agent) | Recommended — type-safe XRPC via [`@atproto/lex`](https://npmx.dev/package/@atproto/lex) `Client` with HappyView DPoP auth | | [`@happyview/oauth-client`](https://npmx.dev/package/@happyview/oauth-client) | Platform-agnostic core — DPoP key provisioning, session management, authenticated fetch | -| [`@happyview/oauth-client-browser`](https://npmx.dev/package/@happyview/oauth-client-browser) | Browser OAuth wrapper for apps already using `@atproto/oauth-client-browser` | +| [`@happyview/oauth-client-browser`](https://npmx.dev/package/@happyview/oauth-client-browser) | Browser OAuth wrapper with Web Crypto, localStorage, and redirect/popup flows | +| [`@happyview/oauth-client-node`](https://npmx.dev/package/@happyview/oauth-client-node) | Node.js server wrapper with handle/DID resolution and server-friendly authorize/callback API | ## Which package do I need? @@ -14,7 +15,9 @@ HappyView provides JavaScript packages for building third-party apps that authen **Already using `@atproto/oauth-client-browser`?** Add `@happyview/oauth-client-browser` to get a `HappyViewBrowserClient` that handles the HappyView-specific DPoP key provisioning and session registration on top of the standard atproto OAuth flow. -**Building a server-side app or something more custom?** Use `@happyview/oauth-client` directly and provide your own `CryptoAdapter` and `StorageAdapter`. +**Building a server-side Node.js app?** Use `@happyview/oauth-client-node`. It provides `authorize()` and `callback()` methods designed for server request handlers, plus built-in handle and DID resolution. + +**Need something more custom?** Use `@happyview/oauth-client` directly and provide your own `StorageAdapter`. ## How it works @@ -65,4 +68,5 @@ const result = await lex.xrpc(myLexicons.com.example.getGame, { - [Lex Agent](./lex-agent.md): type-safe XRPC with `@atproto/lex` - [OAuth Client](./oauth-client.md): platform-agnostic core client - [Browser Client](./oauth-client-browser.md): browser OAuth redirect flow +- [Node Client](./oauth-client-node.md): server-side authorize/callback flow - [Authentication](../getting-started/authentication.md): full details on DPoP key provisioning and API client types diff --git a/packages/docs/scripts/generate-changelogs.mjs b/packages/docs/scripts/generate-changelogs.mjs index a2cd883..96f261f 100644 --- a/packages/docs/scripts/generate-changelogs.mjs +++ b/packages/docs/scripts/generate-changelogs.mjs @@ -22,6 +22,12 @@ const CHANGELOGS = [ match: (tag) => tag.startsWith("@happyview/oauth-client-browser-v"), formatVersion: (tag) => tag.replace("@happyview/oauth-client-browser-", ""), }, + { + name: "@happyview/oauth-client-node", + output: "docs/sdk/changelog-oauth-client-node.md", + match: (tag) => tag.startsWith("@happyview/oauth-client-node-v"), + formatVersion: (tag) => tag.replace("@happyview/oauth-client-node-", ""), + }, { name: "@happyview/lex-agent", output: "docs/sdk/changelog-lex-agent.md", diff --git a/packages/docs/sidebars.ts b/packages/docs/sidebars.ts index cdcfed2..2fecf3e 100644 --- a/packages/docs/sidebars.ts +++ b/packages/docs/sidebars.ts @@ -291,6 +291,11 @@ const sidebars: SidebarsConfig = { id: "sdk/oauth-client-browser", label: "Browser Client", }, + { + type: "doc", + id: "sdk/oauth-client-node", + label: "Node Client", + }, ], }, { @@ -469,6 +474,11 @@ const sidebars: SidebarsConfig = { id: "sdk/changelog-oauth-client-browser", label: "oauth-client-browser", }, + { + type: "doc", + id: "sdk/changelog-oauth-client-node", + label: "oauth-client-node", + }, { type: "doc", id: "sdk/changelog-lex-agent", -- 2.51.2 From 6436f0b82f72e0ab680422995b636e538934db13 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 09:51:10 -0500 Subject: [PATCH 011/250] docs: explain how to access approved session scopes Signed-off-by: Trezy --- packages/docs/docs/sdk/oauth-client-browser.md | 17 +++++++++++++++++ packages/docs/docs/sdk/oauth-client.md | 17 +++++++++++++++++ packages/oauth-client/README.md | 15 +++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/docs/sdk/oauth-client-browser.md index c21b21e..f684e83 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/docs/sdk/oauth-client-browser.md @@ -148,6 +148,23 @@ if (params) { } ``` +## Checking approved scopes + +After sign in or session restoration, you can check which scopes were approved: + +```typescript +console.log(session.scopes); +// ["atproto", "transition:generic"] +``` + +To fetch the latest scopes from the server: + +```typescript +const info = await client.getSession("did:plc:abc123"); +console.log(info.scopes); +// ["atproto", "transition:generic"] +``` + ## Authenticated requests The session's `fetchHandler` attaches DPoP proof headers automatically: diff --git a/packages/docs/docs/sdk/oauth-client.md b/packages/docs/docs/sdk/oauth-client.md index b73d034..4e90da3 100644 --- a/packages/docs/docs/sdk/oauth-client.md +++ b/packages/docs/docs/sdk/oauth-client.md @@ -59,6 +59,23 @@ const session = await client.registerSession({ The returned `HappyViewSession` is ready to make authenticated requests. The session data is also persisted to the `StorageAdapter` for later restoration. +The response includes the scopes that were approved by the authorization server, available on the session: + +```typescript +console.log(session.scopes); +// ["atproto", "transition:generic"] +``` + +## Retrieving session info + +To fetch the current session's approved scopes from the server (e.g., after restoring from storage): + +```typescript +const info = await client.getSession("did:plc:abc123"); +console.log(info.scopes); +// ["atproto", "transition:generic"] +``` + ## Making authenticated requests `HappyViewSession.fetchHandler` works like `fetch` but automatically attaches DPoP proof, authorization, and client key headers: diff --git a/packages/oauth-client/README.md b/packages/oauth-client/README.md index 3f50d24..bcb66e6 100644 --- a/packages/oauth-client/README.md +++ b/packages/oauth-client/README.md @@ -52,6 +52,21 @@ const session = await client.registerSession({ }); ``` +The returned session includes the approved scopes: + +```typescript +console.log(session.scopes); // ["atproto", "transition:generic"] +``` + +### Retrieving Session Info + +Fetch the current session's approved scopes from the server: + +```typescript +const info = await client.getSession("did:plc:abc123"); +console.log(info.scopes); // ["atproto", "transition:generic"] +``` + ### Making Authenticated Requests The returned `HappyViewSession` provides a `fetchHandler` that automatically attaches DPoP proof headers: -- 2.51.2 From 488a6df874404dfe2fc121c5599331ead8750900 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 08:54:03 -0500 Subject: [PATCH 012/250] feat: add oauth-client-node SDK Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/sdk/oauth-client-node.md | 328 +++-- packages/oauth-client-node/README.md | 152 ++ packages/oauth-client-node/package.json | 52 + .../src/__tests__/node-client.test.ts | 1227 +++++++++++++++++ packages/oauth-client-node/src/index.ts | 10 + packages/oauth-client-node/src/node-client.ts | 445 ++++++ packages/oauth-client-node/tsconfig.json | 10 + packages/oauth-client-node/tsup.config.ts | 9 + 8 files changed, 2132 insertions(+), 101 deletions(-) create mode 100644 packages/oauth-client-node/README.md create mode 100644 packages/oauth-client-node/package.json create mode 100644 packages/oauth-client-node/src/__tests__/node-client.test.ts create mode 100644 packages/oauth-client-node/src/index.ts create mode 100644 packages/oauth-client-node/src/node-client.ts create mode 100644 packages/oauth-client-node/tsconfig.json create mode 100644 packages/oauth-client-node/tsup.config.ts diff --git a/packages/docs/docs/sdk/oauth-client-node.md b/packages/docs/docs/sdk/oauth-client-node.md index 4c6c84d..25d9100 100644 --- a/packages/docs/docs/sdk/oauth-client-node.md +++ b/packages/docs/docs/sdk/oauth-client-node.md @@ -1,6 +1,6 @@ # Node Client -The Node client handles OAuth authorization and callback flows for server-side Node.js apps authenticating with a HappyView instance. It wraps the [OAuth Client](./oauth-client.md) with handle/DID resolution and a server-friendly API that returns authorization URLs instead of redirecting the browser. +Server-side OAuth client for authenticating with a HappyView instance using AT Protocol. Built on top of [`@happyview/oauth-client`](./oauth-client.md), matching the API surface of [`@atproto/oauth-client-node`](https://www.npmjs.com/package/@atproto/oauth-client-node). ## Installation @@ -17,107 +17,133 @@ const client = new HappyViewNodeClient({ instanceUrl: "https://happyview.example.com", clientId: "https://example.com/oauth-client-metadata.json", clientKey: "hvc_your_client_key", - clientSecret: "hvs_your_secret", // optional, for confidential clients redirectUri: "https://example.com/oauth/callback", storage: myStorageAdapter, }); ``` -| Option | Required | Description | -| ------------- | -------- | ---------------------------------------------------------------------------- | -| `instanceUrl` | Yes | The HappyView instance URL | -| `clientId` | Yes | URL where your app serves its [OAuth client metadata](#oauth-client-metadata) | -| `clientKey` | Yes | API client key from the HappyView admin dashboard | -| `clientSecret`| No | API client secret — makes this a confidential client | -| `redirectUri` | Yes | OAuth callback URL for your server | -| `scopes` | No | OAuth scopes to request. Defaults to `"atproto"` | -| `storage` | Yes | Storage adapter for persisting sessions and pending auth state | -| `sessionHooks`| No | Hooks called on session lifecycle events | -| `fetch` | No | Custom fetch implementation | +| Option | Required | Description | +| -------------- | -------- | ----------------------------------------------------------------------------- | +| `instanceUrl` | Yes | The HappyView instance URL | +| `clientId` | Yes | URL where your app serves its [OAuth client metadata](#oauth-client-metadata) | +| `clientKey` | Yes | API client key from the HappyView admin dashboard | +| `redirectUri` | Yes | OAuth callback URL | +| `storage` | Yes | Storage adapter for persisting sessions and auth state | +| `clientSecret` | No | Secret for confidential clients | +| `scopes` | No | OAuth scopes to request. Defaults to `"atproto"` | +| `sessionHooks` | No | Event hooks for session lifecycle events | +| `fetch` | No | Custom fetch implementation | -:::note -Unlike the browser client, `storage` is required — there is no default. Use any adapter that implements `StorageAdapter` (e.g., backed by Redis, a database, or the filesystem). -::: +### Storage -## Authorization +You must provide a `StorageAdapter`. The built-in `MemoryStorage` works for development but won't survive restarts: -`authorize()` resolves the user's handle, discovers their PDS, provisions a DPoP key, and returns an authorization URL. Your server should redirect the user to this URL: +```typescript +import { MemoryStorage } from "@happyview/oauth-client-node"; + +const client = new HappyViewNodeClient({ + // ... + storage: new MemoryStorage(), +}); +``` + +For production, implement the `StorageAdapter` interface backed by your database or cache: ```typescript -// In your login route handler -const url = await client.authorize("alice.bsky.social"); -res.redirect(url.toString()); +interface StorageAdapter { + get(key: string): Promise; + set(key: string, value: string): Promise; + delete(key: string): Promise; +} ``` -### Authorization options +## Authorize + +Generate an authorization URL and redirect the user: + +```typescript +const url = await client.authorize("alice.bsky.social"); +res.redirect(url.href); +``` -Pass options to customize the authorization request: +Options: ```typescript const url = await client.authorize("alice.bsky.social", { scope: "atproto transition:generic", - state: myCustomState, redirect_uri: "https://example.com/alt-callback", - display: "popup", - prompt: "consent", - ui_locales: "en", + state: "my-custom-state", + prompt: "login", + display: "page", }); ``` -| Option | Description | -| ------------- | ------------------------------------------------------------ | -| `scope` | Override the default scopes for this request | -| `state` | Custom state value (defaults to a random hex string) | -| `redirect_uri`| Override the default redirect URI for this request | -| `display` | `"page"`, `"popup"`, `"touch"`, or `"wap"` | -| `prompt` | Prompt behavior (e.g., `"consent"`, `"login"`) | -| `nonce` | Nonce for ID token validation | -| `max_age` | Maximum authentication age in seconds | -| `ui_locales` | Preferred UI languages | -| `signal` | AbortSignal to cancel the request | +| Option | Description | +| ------------------------ | ---------------------------------------------------------------------------- | +| `scope` | OAuth scopes for this request (overrides constructor default) | +| `scopes` | Deprecated alias for `scope`. `scope` takes priority if both passed. | +| `state` | Custom state value. Defaults to a random hex string. | +| `redirect_uri` | Override the redirect URI for this request | +| `signal` | `AbortSignal` for cancellation | +| `display` | Display hint: `"page"`, `"popup"`, `"touch"`, or `"wap"` | +| `prompt` | Prompt mode (e.g. `"login"` to force re-authentication) | +| `nonce` | OIDC nonce value | +| `max_age` | Max elapsed seconds since last active authentication | +| `ui_locales` | Space-separated locale tags (e.g. `"en fr"`) | +| `dpop_jkt` | DPoP JWK thumbprint | +| `claims` | OIDC claims request object | +| `authorization_details` | RFC 9396 authorization details | +| `id_token_hint` | Previous ID token hint | + +### Abort a pending request + +If you need to cancel a pending authorization (e.g., the user navigates away), pass the URL returned from `authorize()`: + +```typescript +const url = await client.authorize("alice.bsky.social"); +// ...later, if the user cancels: +await client.abortRequest(url); +``` + +This cleans up the stored pending auth state. ## Callback -In your OAuth callback route, pass the query parameters to `callback()`: +On your callback route, process the OAuth response: ```typescript -// In your callback route handler -const params = new URLSearchParams(req.url.split("?")[1]); -const { session, state } = await client.callback(params); +app.get("/oauth/callback", async (req, res) => { + const params = new URLSearchParams(req.url.split("?")[1]); + const { session, state } = await client.callback(params); -// session is ready to use -console.log(session.did); -console.log(session.scopes); + // session.did is the authenticated user's DID + // state is the value passed to authorize() (or the auto-generated one) +}); ``` -The returned `HappyViewSession` is persisted to storage and ready for authenticated requests. - -You can override the redirect URI if needed: +You can override the redirect URI for this specific callback: ```typescript const { session } = await client.callback(params, { - redirect_uri: "https://example.com/alt-callback", + redirect_uri: "https://other.example.com/callback", }); ``` -## Checking approved scopes +## Restore session -After authorization or session restoration, you can check which scopes were approved: +Restore a session by DID: ```typescript -console.log(session.scopes); -// ["atproto", "transition:generic"] +const session = await client.restore("did:plc:abc123"); ``` -To fetch the latest scopes from the server: +The `did` parameter is required in the node client (unlike the browser client, there's no "last active" session concept on the server). -```typescript -const info = await client.getSession("did:plc:abc123"); -console.log(info.scopes); -// ["atproto", "transition:generic"] -``` +A second `refresh` parameter is accepted for API compatibility with upstream (`restore(did, refresh?)`). HappyView manages token refresh server-side, so this parameter is accepted but ignored. + +## Session -## Authenticated requests +### Authenticated requests The session's `fetchHandler` attaches DPoP proof headers automatically: @@ -132,43 +158,149 @@ const data = await response.json(); Pass a relative path (prepends the HappyView instance URL) or a full URL (used as-is). -## Session restoration +### Token info + +```typescript +const info = session.getTokenInfo(); +// { sub, scope, iss, aud, expiresAt?, expired? } +``` + +Returns available metadata about the session. `expiresAt` and `expired` are always `undefined` since HappyView manages token lifecycle server-side. + +### Properties -Restore a previously stored session by DID: +| Property | Type | Description | +| -------- | -------- | ---------------------------------------- | +| `did` | `string` | The authenticated user's DID | +| `sub` | `string` | Alias for `did` (matches upstream naming) | + +### Sign out + +Sessions can self-revoke: ```typescript -const session = await client.restore("did:plc:abc123"); +await session.signOut(); +``` + +This is equivalent to calling `client.revoke(session.did)`. + +## Confidential vs public clients + +Clients created with a `clientSecret` are confidential — they can hold secrets safely on the server. Clients without a secret are public. Use `client.isConfidential` to check: + +```typescript +const client = new HappyViewNodeClient({ + // ... + clientSecret: "hvs_your_secret", +}); +client.isConfidential; // true ``` -Unlike the browser client, `restore()` requires a DID — there is no "last active" session concept on the server. +Public clients use PKCE to secure the DPoP key provisioning step. Confidential clients authenticate with their secret instead. -Throws `InvalidStateError` if no session is found for the given DID. +## Session event hooks + +React to session lifecycle events with `sessionHooks`: + +```typescript +const client = new HappyViewNodeClient({ + // ... + sessionHooks: { + onSessionUpdate(did) { + console.log(`Session created/updated for ${did}`); + }, + onSessionDelete(did) { + console.log(`Session deleted for ${did}`); + }, + }, +}); +``` + +- `onSessionUpdate(did)` fires after a session is registered (from `callback()`) or restored. +- `onSessionDelete(did)` fires after a session is revoked (from `revoke()` or `session.signOut()`). + +## Error handling + +Callback errors are always wrapped in `OAuthCallbackError`, which carries the original callback params and state: + +```typescript +import { OAuthCallbackError } from "@happyview/oauth-client-node"; + +try { + const { session } = await client.callback(params); +} catch (err) { + if (err instanceof OAuthCallbackError) { + console.log(err.state); // the state from the callback + console.log(err.params.get("error")); // e.g. "access_denied" + console.log(err.cause); // the underlying error, if any + } +} +``` + +If the authorization server returns an error (e.g., the user denied access), the `params` contain the `error` and `error_description` fields from the server response. If the token exchange fails, the underlying `TokenExchangeError` is available as `err.cause`. + +## Using with @atproto/api + +`HappyViewSession` is directly compatible with `@atproto/api`'s `Agent`: + +```typescript +import { Agent } from "@atproto/api"; + +const session = await client.restore("did:plc:abc123"); +const agent = new Agent(session); + +const profile = await agent.getProfile({ actor: agent.did }); +await agent.like(postUri, postCid); +``` + +This works because `HappyViewSession` implements the `SessionManager` interface that `Agent` expects. ## Revoke session +From the client: + ```typescript await client.revoke("did:plc:abc123"); ``` -## Aborting a pending authorization +Or from the session itself: -If the user abandons the login flow, clean up the pending state: +```typescript +await session.signOut(); +``` + +## Validate client metadata + +Verify that your OAuth client metadata is served correctly: ```typescript -await client.abortRequest(authorizationUrl); +const metadata = await HappyViewNodeClient.fetchMetadata({ + clientId: "https://example.com/oauth-client-metadata.json", +}); +console.log(metadata.client_name); +``` + +## Identity resolution + +The client exposes its handle and DID resolvers for advanced use: + +```typescript +const did = await client.handleResolver.resolve("alice.bsky.social"); +const doc = await client.didResolver.resolve(did); ``` ## OAuth client metadata -Your app must serve an OAuth client metadata JSON document at the URL you pass as `clientId`. The PDS fetches this during authorization to validate the redirect URI and display your app's information. +Your app must serve an OAuth client metadata JSON document at the URL you pass as `clientId`. The PDS fetches this during authorization. + +For a confidential Node.js server: ```typescript -// Express example app.get("/oauth-client-metadata.json", (req, res) => { const origin = `${req.protocol}://${req.get("host")}`; res.json({ client_id: `${origin}/oauth-client-metadata.json`, - client_name: "My App", + client_name: "My Server App", client_uri: origin, redirect_uris: [`${origin}/oauth/callback`], token_endpoint_auth_method: "none", @@ -180,47 +312,41 @@ app.get("/oauth-client-metadata.json", (req, res) => { }); ``` -The `redirect_uris` array must include the `redirectUri` your client is configured with. - ## Re-exports -This package re-exports everything from `@happyview/oauth-client`, so you don't need to install the core package separately: +This package re-exports everything from `@happyview/oauth-client`, `@atproto-labs/handle-resolver`, and `@atproto-labs/did-resolver`. You don't need to install these packages separately: ```typescript import { + // From @happyview/oauth-client HappyViewNodeClient, HappyViewSession, + MemoryStorage, ApiError, + OAuthCallbackError, + Key, + type SessionEventHooks, type StorageAdapter, -} from "@happyview/oauth-client-node"; -``` + type TokenInfo, + type Jwk, -It also re-exports handle and DID resolution utilities from `@atproto-labs/handle-resolver` and `@atproto-labs/did-resolver`. + // From @atproto-labs/handle-resolver + AtprotoDohHandleResolver, -## Error handling - -All errors extend `HappyViewError`. The Node client additionally uses `OAuthCallbackError` for callback failures: + // From @atproto-labs/did-resolver + DidResolverCommon, + type DidDocument, +} from "@happyview/oauth-client-node"; +``` -| Error | When | -| --- | --- | -| `ApiError` | HappyView API returned a non-OK response (has `status` and `body`) | -| `OAuthCallbackError` | OAuth callback failed — wraps the callback params and underlying error | -| `InvalidStateError` | Missing or invalid OAuth/session state | -| `TokenExchangeError` | Token exchange with the PDS failed (has `status` and `body`) | -| `ResolutionError` | Handle or DID resolution failed | +## Differences from upstream -```typescript -import { - OAuthCallbackError, - InvalidStateError, -} from "@happyview/oauth-client-node"; +The HappyView SDK matches the upstream `@atproto/oauth-client-node` public API but differs architecturally: -try { - const { session } = await client.callback(params); -} catch (err) { - if (err instanceof OAuthCallbackError) { - console.error("OAuth callback failed:", err.message); - console.error("State:", err.state); - } -} -``` +| Area | Upstream | HappyView | +|------|----------|-----------| +| DPoP keys | Generated client-side | Provisioned from HappyView instance | +| Token refresh | Client-side with `refresh` param | Server-side (HappyView manages lifecycle) | +| `restore(did, refresh?)` | `refresh` controls token refresh behavior | `refresh` accepted but ignored | +| `session.getTokenInfo()` | Includes `expiresAt`/`expired` | These fields are `undefined` | +| `jwks` | Returns client's public keyset | Not applicable (no client keypairs) | diff --git a/packages/oauth-client-node/README.md b/packages/oauth-client-node/README.md new file mode 100644 index 0000000..10d026d --- /dev/null +++ b/packages/oauth-client-node/README.md @@ -0,0 +1,152 @@ +# @happyview/oauth-client-node + +Node.js OAuth client for authenticating with a [HappyView](https://github.com/gamesgamesgamesgamesgames/happyview) instance using AT Protocol. + +Built on top of [`@happyview/oauth-client`](https://www.npmjs.com/package/@happyview/oauth-client). Matches the API surface of [`@atproto/oauth-client-node`](https://www.npmjs.com/package/@atproto/oauth-client-node). + +## Installation + +```bash +npm install @happyview/oauth-client-node +``` + +## Usage + +### Setup + +```typescript +import { HappyViewNodeClient } from "@happyview/oauth-client-node"; + +const client = new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_your_client_key", + clientSecret: "hvs_your_secret", // optional, for confidential clients + redirectUri: "https://example.com/oauth/callback", + storage: myStorageAdapter, +}); +``` + +### Authorize + +Generate an authorization URL and redirect the user: + +```typescript +const url = await client.authorize("alice.bsky.social"); +// Redirect the user to url.href +``` + +With options: + +```typescript +const url = await client.authorize("alice.bsky.social", { + scope: "atproto transition:generic", + redirect_uri: "https://example.com/alt-callback", + prompt: "login", + display: "page", +}); +``` + +### Callback + +On your callback route, process the OAuth response: + +```typescript +const params = new URLSearchParams(req.url.split("?")[1]); +const { session, state } = await client.callback(params); +``` + +### Restore Session + +Restore a session by DID: + +```typescript +const session = await client.restore("did:plc:abc123"); +``` + +### Session + +```typescript +// Authenticated requests +const response = await session.fetchHandler( + "/xrpc/com.example.getStuff?limit=10", + { method: "GET" }, +); + +// Token metadata +const info = session.getTokenInfo(); +// { sub, scope, iss, aud } + +// Self-revoke +await session.signOut(); +``` + +### Using with @atproto/api + +```typescript +import { Agent } from "@atproto/api"; + +const agent = new Agent(session); +const profile = await agent.getProfile({ actor: agent.did }); +``` + +### Revoke Session + +```typescript +await client.revoke("did:plc:abc123"); +// or +await session.signOut(); +``` + +### Abort Request + +```typescript +const url = await client.authorize("alice.bsky.social"); +// ...later: +await client.abortRequest(url); +``` + +### Validate Client Metadata + +```typescript +const metadata = await HappyViewNodeClient.fetchMetadata({ + clientId: "https://example.com/oauth-client-metadata.json", +}); +``` + +### Identity Resolution + +```typescript +const did = await client.handleResolver.resolve("alice.bsky.social"); +const doc = await client.didResolver.resolve(did); +``` + +## Storage + +You must provide a `StorageAdapter`. The built-in `MemoryStorage` works for testing but won't survive restarts: + +```typescript +import { MemoryStorage } from "@happyview/oauth-client-node"; + +const client = new HappyViewNodeClient({ + // ... + storage: new MemoryStorage(), +}); +``` + +For production, implement the `StorageAdapter` interface backed by your database or cache: + +```typescript +interface StorageAdapter { + get(key: string): Promise; + set(key: string, value: string): Promise; + delete(key: string): Promise; +} +``` + +## Exports + +This package re-exports everything from `@happyview/oauth-client`, plus: + +- `HappyViewNodeClient` -- the main Node.js client +- `AuthorizeOptions`, `CallbackOptions`, `HappyViewNodeClientOptions` types diff --git a/packages/oauth-client-node/package.json b/packages/oauth-client-node/package.json new file mode 100644 index 0000000..a0e4e6d --- /dev/null +++ b/packages/oauth-client-node/package.json @@ -0,0 +1,52 @@ +{ + "name": "@happyview/oauth-client-node", + "version": "0.0.0-development", + "description": "HappyView OAuth client for Node.js ATProto DPoP authentication", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/gamesgamesgamesgamesgames/happyview.git", + "directory": "packages/oauth-client-node" + }, + "bugs": "https://github.com/gamesgamesgamesgamesgames/happyview/issues", + "homepage": "https://happyview.dev", + "publishConfig": { + "access": "public" + }, + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + }, + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsup", + "test": "bun test", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@happyview/oauth-client": "workspace:*", + "@atproto-labs/handle-resolver": "^0.3.6", + "@atproto-labs/did-resolver": "^0.2.6", + "@atproto/did": "^0.3.0" + }, + "devDependencies": { + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/github": "^12.0.6", + "@semantic-release/exec": "^7.0.0", + "@semantic-release/release-notes-generator": "^14.1.0", + "@types/bun": "^1.3.12", + "semantic-release": "^25.0.3", + "semantic-release-monorepo": "^8.0.2", + "tsup": "^8.0.0", + "typescript": "^5.7.0" + } +} diff --git a/packages/oauth-client-node/src/__tests__/node-client.test.ts b/packages/oauth-client-node/src/__tests__/node-client.test.ts new file mode 100644 index 0000000..4d9fda0 --- /dev/null +++ b/packages/oauth-client-node/src/__tests__/node-client.test.ts @@ -0,0 +1,1227 @@ +import { afterEach, beforeAll, describe, expect, mock, test } from "bun:test"; +import { + HappyViewOAuthClient, + HappyViewError, + InvalidStateError, + MemoryStorage, + OAuthCallbackError, + TokenExchangeError, +} from "@happyview/oauth-client"; +import { HappyViewNodeClient } from "../node-client"; + +let testJwk: JsonWebKey; +beforeAll(async () => { + const keyPair = await crypto.subtle.generateKey( + { name: "ECDSA", namedCurve: "P-256" }, + true, + ["sign", "verify"], + ); + testJwk = await crypto.subtle.exportKey("jwk", keyPair.privateKey); + delete testJwk.key_ops; +}); + +let storage: MemoryStorage; + +afterEach(() => { + storage = new MemoryStorage(); +}); + +function createClient(fetchFn?: typeof globalThis.fetch) { + storage = new MemoryStorage(); + return new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + redirectUri: "https://example.com/oauth/callback", + storage, + fetch: fetchFn, + }); +} + +function mockFetchForFullFlow() { + return mock(async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input instanceof Request ? input.url : String(input); + + if (url.includes("dns.google")) { + return new Response( + JSON.stringify({ + Status: 0, + Answer: [ + { + name: "_atproto.user.bsky.social.", + type: 16, + TTL: 300, + data: '"did=did:plc:abcdefghijklmnopqrstuvwx"', + }, + ], + }), + { status: 200, headers: { "content-type": "application/dns-json" } }, + ); + } + + if (url.includes("plc.directory")) { + return new Response( + JSON.stringify({ + id: "did:plc:abcdefghijklmnopqrstuvwx", + service: [ + { + id: "#atproto_pds", + type: "AtprotoPersonalDataServer", + serviceEndpoint: "https://pds.example.com", + }, + ], + }), + { status: 200, headers: { "content-type": "application/json" } }, + ); + } + + if (url.includes(".well-known/oauth-protected-resource")) { + return new Response( + JSON.stringify({ + authorization_servers: ["https://pds.example.com"], + }), + { status: 200 }, + ); + } + + if (url.includes(".well-known/oauth-authorization-server")) { + return new Response( + JSON.stringify({ + issuer: "https://pds.example.com", + authorization_endpoint: "https://pds.example.com/oauth/authorize", + token_endpoint: "https://pds.example.com/oauth/token", + pushed_authorization_request_endpoint: + "https://pds.example.com/oauth/par", + }), + { status: 200 }, + ); + } + + if (url.includes("/oauth/dpop-keys")) { + return new Response( + JSON.stringify({ + provision_id: "hvp_test123", + dpop_key: testJwk, + }), + { status: 201 }, + ); + } + + if (url.includes("/oauth/par")) { + return new Response( + JSON.stringify({ + request_uri: "urn:ietf:params:oauth:request_uri:test", + expires_in: 60, + }), + { status: 201 }, + ); + } + + if (url.includes("/oauth/sessions") && init?.method === "POST") { + return new Response( + JSON.stringify({ + session_id: "sess_test", + did: "did:plc:abcdefghijklmnopqrstuvwx", + }), + { status: 201 }, + ); + } + + if (url.includes("/oauth/token")) { + return new Response( + JSON.stringify({ + access_token: "at_test_token", + refresh_token: "rt_test_token", + token_type: "DPoP", + scope: "atproto", + sub: "did:plc:abcdefghijklmnopqrstuvwx", + iss: "https://pds.example.com", + }), + { status: 200 }, + ); + } + + return new Response("not found", { status: 404 }); + }); +} + +describe("HappyViewNodeClient", () => { + test("constructor requires storage", () => { + const client = new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + redirectUri: "https://example.com/oauth/callback", + storage: new MemoryStorage(), + }); + expect(client).toBeDefined(); + }); + + test("authorize returns a URL object", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + const url = await client.authorize("user.bsky.social"); + + expect(url).toBeInstanceOf(URL); + expect(url.hostname).toBe("pds.example.com"); + }); + + test("authorize stores pending auth state", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + const url = await client.authorize("user.bsky.social"); + + const params = new URLSearchParams(url.search); + const requestUri = params.get("request_uri"); + expect(requestUri).toBe("urn:ietf:params:oauth:request_uri:test"); + }); + + test("authorize uses custom scopes", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + scopes: "atproto transition:generic", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe("atproto transition:generic"); + }); + + test("authorize uses custom state", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + state: "my-custom-state", + }); + + const stored = await storage.get("pending-auth:my-custom-state"); + expect(stored).not.toBeNull(); + }); + + test("callback exchanges code for tokens and returns session with state", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "pending-auth:state123", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "state123", + issuer: "https://pds.example.com", + }), + ); + + const params = new URLSearchParams({ + code: "auth-code-123", + state: "state123", + }); + + const result = await client.callback(params); + expect(result.session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(result.state).toBe("state123"); + }); + + test("callback includes DPoP proof", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "pending-auth:statedpop", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statedpop", + issuer: "https://pds.example.com", + }), + ); + + await client.callback( + new URLSearchParams({ code: "auth-code", state: "statedpop" }), + ); + + const tokenCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/token"), + ); + expect(tokenCall).toBeDefined(); + const tokenHeaders = new Headers((tokenCall![1] as RequestInit).headers); + expect(tokenHeaders.get("dpop")).not.toBeNull(); + expect(tokenHeaders.get("dpop")!.split(".")).toHaveLength(3); + }); + + test("callback accepts redirect_uri override", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "pending-auth:stateuri", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "stateuri", + issuer: "https://pds.example.com", + }), + ); + + await client.callback( + new URLSearchParams({ code: "auth-code", state: "stateuri" }), + { redirect_uri: "https://other.example.com/callback" }, + ); + + const tokenCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/token"), + ); + const body = new URLSearchParams( + (tokenCall![1] as RequestInit).body as string, + ); + expect(body.get("redirect_uri")).toBe( + "https://other.example.com/callback", + ); + }); + + test("callback throws OAuthCallbackError when state is missing", async () => { + const client = createClient(); + try { + await client.callback(new URLSearchParams({ code: "auth-code" })); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(OAuthCallbackError); + expect((err as OAuthCallbackError).state).toBeUndefined(); + } + }); + + test("callback throws OAuthCallbackError when no pending state found", async () => { + const client = createClient(); + try { + await client.callback( + new URLSearchParams({ code: "auth-code", state: "nonexistent" }), + ); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(OAuthCallbackError); + expect((err as OAuthCallbackError).state).toBe("nonexistent"); + } + }); + + test("callback throws OAuthCallbackError wrapping TokenExchangeError on token failure", async () => { + const fetchFn = mock( + async (input: RequestInfo | URL, init?: RequestInit) => { + const url = String(input); + if (url.includes("/oauth/token")) { + return new Response("invalid_grant", { status: 400 }); + } + return new Response("not found", { status: 404 }); + }, + ); + + const client = createClient(fetchFn); + + await storage.set( + "pending-auth:statefail", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statefail", + issuer: "https://pds.example.com", + }), + ); + + try { + await client.callback( + new URLSearchParams({ code: "auth-code", state: "statefail" }), + ); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(OAuthCallbackError); + expect((err as OAuthCallbackError).state).toBe("statefail"); + expect((err as OAuthCallbackError).cause).toBeInstanceOf(TokenExchangeError); + expect(((err as OAuthCallbackError).cause as TokenExchangeError).status).toBe(400); + } + }); + + test("restore returns session for existing DID", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore( + "did:plc:abcdefghijklmnopqrstuvwx", + ); + expect(session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + }); + + test("restore throws when session does not exist", async () => { + const client = createClient(); + try { + await client.restore("did:plc:nonexistent"); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(InvalidStateError); + } + }); + + test("revoke deletes session", async () => { + const deleteFn = mock( + async (input: RequestInfo | URL, init?: RequestInit) => { + return new Response(null, { status: 204 }); + }, + ); + const client = createClient(deleteFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + await storage.set( + "happyview:last-active-did", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + + await client.revoke("did:plc:abcdefghijklmnopqrstuvwx"); + + const session = await storage.get( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + ); + expect(session).toBeNull(); + }); + + test("authorize uses scope (singular) option", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + scope: "atproto transition:generic", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe("atproto transition:generic"); + }); + + test("authorize prefers scope over scopes when both provided", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + scope: "atproto transition:generic", + scopes: "atproto", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe("atproto transition:generic"); + }); + + test("restore throws when called with no DID", async () => { + const client = createClient(); + try { + await client.restore(); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(InvalidStateError); + } + }); + + test("restore accepts and ignores refresh parameter", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore( + "did:plc:abcdefghijklmnopqrstuvwx", + true, + ); + expect(session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + }); + + test("authorize without PAR falls back to direct URL", async () => { + const fetchFn = mock(async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input instanceof Request ? input.url : String(input); + + if (url.includes("dns.google")) { + return new Response( + JSON.stringify({ + Status: 0, + Answer: [ + { + name: "_atproto.user.bsky.social.", + type: 16, + TTL: 300, + data: '"did=did:plc:abcdefghijklmnopqrstuvwx"', + }, + ], + }), + { status: 200, headers: { "content-type": "application/dns-json" } }, + ); + } + + if (url.includes("plc.directory")) { + return new Response( + JSON.stringify({ + id: "did:plc:abcdefghijklmnopqrstuvwx", + service: [ + { + id: "#atproto_pds", + type: "AtprotoPersonalDataServer", + serviceEndpoint: "https://pds.example.com", + }, + ], + }), + { status: 200, headers: { "content-type": "application/json" } }, + ); + } + + if (url.includes(".well-known/oauth-protected-resource")) { + return new Response( + JSON.stringify({ + authorization_servers: ["https://pds.example.com"], + }), + { status: 200 }, + ); + } + + if (url.includes(".well-known/oauth-authorization-server")) { + return new Response( + JSON.stringify({ + issuer: "https://pds.example.com", + authorization_endpoint: "https://pds.example.com/oauth/authorize", + token_endpoint: "https://pds.example.com/oauth/token", + }), + { status: 200 }, + ); + } + + if (url.includes("/oauth/dpop-keys")) { + return new Response( + JSON.stringify({ + provision_id: "hvp_test123", + dpop_key: testJwk, + }), + { status: 201 }, + ); + } + + return new Response("not found", { status: 404 }); + }); + + const client = createClient(fetchFn); + const url = await client.authorize("user.bsky.social"); + + expect(url).toBeInstanceOf(URL); + expect(url.hostname).toBe("pds.example.com"); + expect(url.pathname).toBe("/oauth/authorize"); + expect(url.searchParams.get("response_type")).toBe("code"); + expect(url.searchParams.get("client_id")).toBe( + "https://example.com/oauth-client-metadata.json", + ); + expect(url.searchParams.get("scope")).toBe("atproto"); + }); + + test("callback retries with DPoP nonce on use_dpop_nonce error", async () => { + let tokenAttempt = 0; + const fetchFn = mock(async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input instanceof Request ? input.url : String(input); + + if (url.includes("/oauth/token")) { + tokenAttempt++; + if (tokenAttempt === 1) { + return new Response( + JSON.stringify({ error: "use_dpop_nonce" }), + { + status: 400, + headers: { "dpop-nonce": "server-nonce-123" }, + }, + ); + } + return new Response( + JSON.stringify({ + access_token: "at_test_token", + refresh_token: "rt_test_token", + scope: "atproto", + sub: "did:plc:abcdefghijklmnopqrstuvwx", + iss: "https://pds.example.com", + }), + { status: 200 }, + ); + } + + if (url.includes("/oauth/sessions") && init?.method === "POST") { + return new Response( + JSON.stringify({ + session_id: "sess_test", + did: "did:plc:abcdefghijklmnopqrstuvwx", + }), + { status: 201 }, + ); + } + + return new Response("not found", { status: 404 }); + }); + + const client = createClient(fetchFn); + + await storage.set( + "pending-auth:statenonce", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statenonce", + issuer: "https://pds.example.com", + }), + ); + + const result = await client.callback( + new URLSearchParams({ code: "auth-code", state: "statenonce" }), + ); + + expect(result.session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(tokenAttempt).toBe(2); + + const secondTokenCall = fetchFn.mock.calls.filter((call: any[]) => + String(call[0]).includes("/oauth/token"), + )[1]; + const dpopJwt = new Headers( + (secondTokenCall![1] as RequestInit).headers, + ).get("dpop")!; + const payloadB64 = dpopJwt.split(".")[1]; + const padded = + payloadB64 + "=".repeat((4 - (payloadB64.length % 4)) % 4); + const payload = JSON.parse( + atob(padded.replace(/-/g, "+").replace(/_/g, "/")), + ); + expect(payload.nonce).toBe("server-nonce-123"); + }); + + test("abortRequest cleans up pending auth state", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + const url = await client.authorize("user.bsky.social", { + state: "abort-test", + }); + + const pendingBefore = await storage.get("pending-auth:abort-test"); + expect(pendingBefore).not.toBeNull(); + + await client.abortRequest(url); + + const pendingAfter = await storage.get("pending-auth:abort-test"); + expect(pendingAfter).toBeNull(); + }); + + test("abortRequest is a no-op for unknown URLs", async () => { + const client = createClient(); + await client.abortRequest(new URL("https://unknown.example.com/auth")); + }); + + test("confidential client passes clientSecret to base class", () => { + storage = new MemoryStorage(); + const client = new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + clientSecret: "hvs_test_secret", + redirectUri: "https://example.com/oauth/callback", + storage, + }); + expect(client.isConfidential).toBe(true); + }); + + test("public client is not confidential", () => { + const client = createClient(); + expect(client.isConfidential).toBe(false); + }); + + test("full authorize → callback flow", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + const url = await client.authorize("user.bsky.social"); + expect(url).toBeInstanceOf(URL); + + // Simulate the PDS redirecting back with code and state + // Extract the state from stored pending auth + const keys: string[] = []; + // MemoryStorage doesn't expose keys, so find it via the authorize call + // The state is random, but we can find it by checking the PAR body + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const parBody = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + const state = parBody.get("state")!; + + const result = await client.callback( + new URLSearchParams({ code: "auth-code", state }), + ); + + expect(result.session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(result.state).toBe(state); + }); + + test("session.sub is an alias for session.did", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + expect(session.sub).toBe(session.did); + expect(session.sub).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + }); + + test("session.getTokenInfo returns available metadata", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + scopes: "atproto", + pdsUrl: "https://pds.example.com", + issuer: "https://pds.example.com", + }), + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + const info = session.getTokenInfo(); + expect(info.sub).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(info.scope).toBe("atproto"); + expect(info.aud).toBe("https://pds.example.com"); + expect(info.iss).toBe("https://pds.example.com"); + }); + + test("session.getTokenInfo works with legacy stored sessions (no extra fields)", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + const info = session.getTokenInfo(); + expect(info.sub).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(info.scope).toBeUndefined(); + expect(info.aud).toBeUndefined(); + expect(info.iss).toBeUndefined(); + }); + + test("session.signOut deletes the session", async () => { + const deleteFn = mock( + async (input: RequestInfo | URL, init?: RequestInit) => { + return new Response(null, { status: 204 }); + }, + ); + const client = createClient(deleteFn); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + await storage.set( + "happyview:last-active-did", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + await session.signOut(); + + const stored = await storage.get( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + ); + expect(stored).toBeNull(); + }); + + test("callback session includes token metadata", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await storage.set( + "pending-auth:statemeta", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statemeta", + issuer: "https://pds.example.com", + }), + ); + + const result = await client.callback( + new URLSearchParams({ code: "auth-code", state: "statemeta" }), + ); + + const info = result.session.getTokenInfo(); + expect(info.scope).toBe("atproto"); + expect(info.iss).toBe("https://pds.example.com"); + expect(info.aud).toBe("https://pds.example.com"); + }); + + test("authorize passes prompt option to PAR", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + prompt: "login", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("prompt")).toBe("login"); + }); + + test("authorize passes redirect_uri option", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + redirect_uri: "https://other.example.com/cb", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("redirect_uri")).toBe("https://other.example.com/cb"); + }); + + test("authorize passes display and ui_locales options", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.authorize("user.bsky.social", { + display: "popup", + ui_locales: "en fr", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("display")).toBe("popup"); + expect(body.get("ui_locales")).toBe("en fr"); + }); + + test("handleResolver and didResolver are publicly accessible", () => { + const client = createClient(); + expect(client.handleResolver).toBeDefined(); + expect(client.didResolver).toBeDefined(); + }); + + test("fetchMetadata fetches and returns client metadata JSON", async () => { + const metadata = { + client_id: "https://example.com/metadata.json", + client_name: "Test", + }; + const fetchFn = mock(async () => { + return new Response(JSON.stringify(metadata), { + status: 200, + headers: { "content-type": "application/json" }, + }); + }); + + const result = await HappyViewOAuthClient.fetchMetadata({ + clientId: "https://example.com/metadata.json", + fetch: fetchFn as typeof globalThis.fetch, + }); + + expect(result.client_id).toBe("https://example.com/metadata.json"); + expect(result.client_name).toBe("Test"); + }); + + test("fetchMetadata throws on non-200 response", async () => { + const fetchFn = mock(async () => { + return new Response("not found", { status: 404 }); + }); + + try { + await HappyViewOAuthClient.fetchMetadata({ + clientId: "https://example.com/metadata.json", + fetch: fetchFn as typeof globalThis.fetch, + }); + expect(true).toBe(false); + } catch (err) { + expect((err as Error).message).toContain("404"); + } + }); + + test("fetchMetadata throws on non-JSON content type", async () => { + const fetchFn = mock(async () => { + return new Response("hi", { + status: 200, + headers: { "content-type": "text/html" }, + }); + }); + + try { + await HappyViewOAuthClient.fetchMetadata({ + clientId: "https://example.com/metadata.json", + fetch: fetchFn as typeof globalThis.fetch, + }); + expect(true).toBe(false); + } catch (err) { + expect((err as Error).message).toContain("content type"); + } + }); + + test("sessionHooks.onSessionUpdate fires after callback", async () => { + const onSessionUpdate = mock((did: string) => {}); + const fetchFn = mockFetchForFullFlow(); + storage = new MemoryStorage(); + const client = new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + redirectUri: "https://example.com/oauth/callback", + storage, + sessionHooks: { onSessionUpdate }, + fetch: fetchFn, + }); + + await storage.set( + "pending-auth:statehook", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statehook", + issuer: "https://pds.example.com", + }), + ); + + await client.callback( + new URLSearchParams({ code: "auth-code", state: "statehook" }), + ); + + expect(onSessionUpdate).toHaveBeenCalledTimes(1); + expect(onSessionUpdate.mock.calls[0][0]).toBe( + "did:plc:abcdefghijklmnopqrstuvwx", + ); + }); + + test("sessionHooks.onSessionDelete fires after revoke", async () => { + const onSessionDelete = mock((did: string) => {}); + const deleteFn = mock(async () => new Response(null, { status: 204 })); + storage = new MemoryStorage(); + const client = new HappyViewNodeClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + redirectUri: "https://example.com/oauth/callback", + storage, + sessionHooks: { onSessionDelete }, + fetch: deleteFn, + }); + + await storage.set( + "happyview:session:did:plc:abcdefghijklmnopqrstuvwx", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + await client.revoke("did:plc:abcdefghijklmnopqrstuvwx"); + + expect(onSessionDelete).toHaveBeenCalledTimes(1); + expect(onSessionDelete.mock.calls[0][0]).toBe( + "did:plc:abcdefghijklmnopqrstuvwx", + ); + }); + + test("callback throws OAuthCallbackError when params contain error", async () => { + const client = createClient(); + + await storage.set( + "pending-auth:stateerr", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "pv", + authPkceVerifier: "av", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "stateerr", + issuer: "https://pds.example.com", + }), + ); + + try { + await client.callback( + new URLSearchParams({ + error: "access_denied", + error_description: "User denied access", + state: "stateerr", + }), + ); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(OAuthCallbackError); + const oauthErr = err as OAuthCallbackError; + expect(oauthErr.state).toBe("stateerr"); + expect(oauthErr.params.get("error")).toBe("access_denied"); + expect(oauthErr.message).toBe("User denied access"); + } + }); + + test("callback cleans up pending state on error param", async () => { + const client = createClient(); + + await storage.set( + "pending-auth:stateclean", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "pv", + authPkceVerifier: "av", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "stateclean", + issuer: "https://pds.example.com", + }), + ); + + try { + await client.callback( + new URLSearchParams({ + error: "access_denied", + state: "stateclean", + }), + ); + } catch { + // expected + } + + const pending = await storage.get("pending-auth:stateclean"); + expect(pending).toBeNull(); + }); +}); + +describe("OAuthCallbackError", () => { + test("extends HappyViewError", () => { + const err = new OAuthCallbackError(new URLSearchParams(), "test"); + expect(err).toBeInstanceOf(HappyViewError); + expect(err).toBeInstanceOf(Error); + }); + + test("uses error_description from params when no message given", () => { + const params = new URLSearchParams({ + error: "access_denied", + error_description: "User denied", + }); + const err = new OAuthCallbackError(params); + expect(err.message).toBe("User denied"); + }); + + test("falls back to default message when no description or message", () => { + const err = new OAuthCallbackError(new URLSearchParams()); + expect(err.message).toBe("OAuth callback error"); + }); + + test("explicit message overrides error_description", () => { + const params = new URLSearchParams({ + error_description: "from params", + }); + const err = new OAuthCallbackError(params, "explicit message"); + expect(err.message).toBe("explicit message"); + }); + + test("preserves params and state", () => { + const params = new URLSearchParams({ code: "abc", state: "xyz" }); + const err = new OAuthCallbackError(params, "msg", "xyz"); + expect(err.params).toBe(params); + expect(err.state).toBe("xyz"); + }); + + test("preserves cause when provided", () => { + const cause = new Error("original"); + const err = new OAuthCallbackError( + new URLSearchParams(), + "wrapped", + "s1", + cause, + ); + expect(err.cause).toBe(cause); + }); + + test("from() returns same instance for OAuthCallbackError input", () => { + const original = new OAuthCallbackError( + new URLSearchParams(), + "original", + "s1", + ); + const result = OAuthCallbackError.from( + original, + new URLSearchParams(), + "s2", + ); + expect(result).toBe(original); + }); + + test("from() wraps Error with message and cause", () => { + const cause = new TokenExchangeError("exchange failed", 400, "body"); + const params = new URLSearchParams({ state: "s1" }); + const result = OAuthCallbackError.from(cause, params, "s1"); + expect(result).toBeInstanceOf(OAuthCallbackError); + expect(result.message).toBe("exchange failed"); + expect(result.state).toBe("s1"); + expect(result.cause).toBe(cause); + }); + + test("from() wraps non-Error with undefined message", () => { + const params = new URLSearchParams({ + error_description: "desc from params", + }); + const result = OAuthCallbackError.from("string error", params, "s1"); + expect(result).toBeInstanceOf(OAuthCallbackError); + expect(result.message).toBe("desc from params"); + expect(result.cause).toBe("string error"); + }); +}); + +describe("re-exports from sub-packages", () => { + test("re-exports Key from @atproto/jwk via index", async () => { + const mod = await import("../index"); + expect(mod.Key).toBeDefined(); + }); + + test("re-exports AtprotoDohHandleResolver from @atproto-labs/handle-resolver via index", async () => { + const mod = await import("../index"); + expect(mod.AtprotoDohHandleResolver).toBeDefined(); + }); + + test("re-exports DidResolverCommon from @atproto-labs/did-resolver via index", async () => { + const mod = await import("../index"); + expect(mod.DidResolverCommon).toBeDefined(); + }); + + test("re-exports HappyViewSession from @happyview/oauth-client via index", async () => { + const mod = await import("../index"); + expect(mod.HappyViewSession).toBeDefined(); + }); + + test("re-exports OAuthCallbackError from @happyview/oauth-client via index", async () => { + const mod = await import("../index"); + expect(mod.OAuthCallbackError).toBeDefined(); + }); +}); diff --git a/packages/oauth-client-node/src/index.ts b/packages/oauth-client-node/src/index.ts new file mode 100644 index 0000000..16aca9b --- /dev/null +++ b/packages/oauth-client-node/src/index.ts @@ -0,0 +1,10 @@ +export * from "@happyview/oauth-client"; +export * from "@atproto-labs/handle-resolver"; +export * from "@atproto-labs/did-resolver"; + +export { HappyViewNodeClient } from "./node-client"; +export type { + AuthorizeOptions, + CallbackOptions, + HappyViewNodeClientOptions, +} from "./node-client"; diff --git a/packages/oauth-client-node/src/node-client.ts b/packages/oauth-client-node/src/node-client.ts new file mode 100644 index 0000000..2ca23f9 --- /dev/null +++ b/packages/oauth-client-node/src/node-client.ts @@ -0,0 +1,445 @@ +import { AtprotoDohHandleResolver } from "@atproto-labs/handle-resolver"; +import { DidResolverCommon } from "@atproto-labs/did-resolver"; +import type { DidDocument } from "@atproto/did"; +import { + HappyViewOAuthClient, + HappyViewSession, + importJwk, + InvalidStateError, + OAuthCallbackError, + ResolutionError, + TokenExchangeError, + type SessionEventHooks, + type StorageAdapter, +} from "@happyview/oauth-client"; + +export interface HappyViewNodeClientOptions { + instanceUrl: string; + clientId: string; + clientKey: string; + clientSecret?: string; + redirectUri: string; + scopes?: string; + storage: StorageAdapter; + sessionHooks?: SessionEventHooks; + fetch?: typeof globalThis.fetch; +} + +export interface AuthorizeOptions { + scope?: string; + /** @deprecated Use `scope` instead. */ + scopes?: string; + state?: string; + redirect_uri?: string; + signal?: AbortSignal; + display?: "page" | "popup" | "touch" | "wap"; + prompt?: string; + nonce?: string; + max_age?: number; + ui_locales?: string; + dpop_jkt?: string; + claims?: Record>>; + authorization_details?: unknown[]; + id_token_hint?: string; +} + +export interface CallbackOptions { + redirect_uri?: string; +} + +interface PendingAuthState { + did: string; + provisionId: string; + rawJwk: JsonWebKey; + provisionPkceVerifier: string; + authPkceVerifier: string; + pdsUrl: string; + tokenEndpoint: string; + state: string; + issuer: string; +} + +interface AuthServerMetadata { + issuer: string; + authorization_endpoint: string; + token_endpoint: string; + pushed_authorization_request_endpoint?: string; + dpop_signing_alg_values_supported?: string[]; +} + +export class HappyViewNodeClient extends HappyViewOAuthClient { + readonly handleResolver: AtprotoDohHandleResolver; + readonly didResolver: DidResolverCommon; + private readonly clientId: string; + private readonly redirectUri: string; + private readonly scopes: string; + + constructor(options: HappyViewNodeClientOptions) { + const fetchFn = + options.fetch ?? + (((input: RequestInfo | URL, init?: RequestInit) => + fetch(input, init)) as typeof globalThis.fetch); + + super({ + instanceUrl: options.instanceUrl, + clientKey: options.clientKey, + clientSecret: options.clientSecret, + storage: options.storage, + sessionHooks: options.sessionHooks, + fetch: fetchFn, + }); + + this.clientId = options.clientId; + this.redirectUri = options.redirectUri; + this.scopes = options.scopes ?? "atproto"; + this.handleResolver = new AtprotoDohHandleResolver({ + dohEndpoint: "https://dns.google/resolve", + fetch: fetchFn, + }); + this.didResolver = new DidResolverCommon({ fetch: fetchFn }); + } + + async authorize( + handle: string, + options?: AuthorizeOptions, + ): Promise { + const resolvedDid = await this.handleResolver.resolve(handle); + if (!resolvedDid) { + throw new ResolutionError(`Failed to resolve handle: ${handle}`); + } + const did = resolvedDid as string; + + const didDoc = await this.didResolver.resolve(resolvedDid); + const pdsUrl = extractPdsUrl(didDoc); + const authMeta = await this.fetchAuthServerMetadata(pdsUrl); + + const scopes = options?.scope ?? options?.scopes ?? this.scopes; + + const { provisionId, rawJwk, pkceVerifier: provisionPkceVerifier } = + await this.provisionDpopKey(); + + const authPkceVerifier = generatePkceVerifier(); + const authPkceChallenge = await computePkceChallenge(authPkceVerifier); + + const state = options?.state ?? randomHex(16); + + const pendingState: PendingAuthState = { + did, + provisionId, + rawJwk, + provisionPkceVerifier: provisionPkceVerifier!, + authPkceVerifier, + pdsUrl, + tokenEndpoint: authMeta.token_endpoint, + state, + issuer: authMeta.issuer, + }; + await this.storage.set( + `pending-auth:${state}`, + JSON.stringify(pendingState), + ); + + const redirectUri = options?.redirect_uri ?? this.redirectUri; + + const authParams = new URLSearchParams({ + response_type: "code", + client_id: this.clientId, + redirect_uri: redirectUri, + state, + scope: scopes, + code_challenge: authPkceChallenge, + code_challenge_method: "S256", + login_hint: handle, + }); + + if (options?.display) authParams.set("display", options.display); + if (options?.prompt) authParams.set("prompt", options.prompt); + if (options?.nonce) authParams.set("nonce", options.nonce); + if (options?.max_age != null) authParams.set("max_age", String(options.max_age)); + if (options?.ui_locales) authParams.set("ui_locales", options.ui_locales); + if (options?.dpop_jkt) authParams.set("dpop_jkt", options.dpop_jkt); + if (options?.id_token_hint) authParams.set("id_token_hint", options.id_token_hint); + if (options?.claims) authParams.set("claims", JSON.stringify(options.claims)); + if (options?.authorization_details) authParams.set("authorization_details", JSON.stringify(options.authorization_details)); + + const parEndpoint = authMeta.pushed_authorization_request_endpoint; + if (parEndpoint) { + const parResp = await this._fetch(parEndpoint, { + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded", + }, + body: authParams, + }); + + if (!parResp.ok) { + const err = await parResp.text(); + throw new ResolutionError( + `PAR request failed: ${parResp.status} ${err}`, + ); + } + + const parData = (await parResp.json()) as { request_uri: string }; + const url = new URL( + `${authMeta.authorization_endpoint}?` + + new URLSearchParams({ + client_id: this.clientId, + request_uri: parData.request_uri, + }), + ); + await this.storage.set(`pending-auth-url:${url.href}`, state); + return url; + } + + const url = new URL( + `${authMeta.authorization_endpoint}?${authParams}`, + ); + await this.storage.set(`pending-auth-url:${url.href}`, state); + return url; + } + + async callback( + params: URLSearchParams, + options?: CallbackOptions, + ): Promise<{ session: HappyViewSession; state: string | null }> { + const code = params.get("code"); + const state = params.get("state"); + + if (!state) { + throw new OAuthCallbackError(params, 'Missing "state" parameter'); + } + + const pendingJson = await this.storage.get(`pending-auth:${state}`); + if (!pendingJson) { + throw new OAuthCallbackError( + params, + `Unknown authorization session "${state}"`, + state, + ); + } + + if (params.has("error")) { + await this.storage.delete(`pending-auth:${state}`); + throw new OAuthCallbackError(params, undefined, state); + } + + if (!code) { + throw new OAuthCallbackError( + params, + 'Missing "code" parameter', + state, + ); + } + const pending: PendingAuthState = JSON.parse(pendingJson); + + try { + const dpopKey = await importJwk(pending.rawJwk); + const { d: _, ...publicJwk } = pending.rawJwk; + const redirectUri = options?.redirect_uri ?? this.redirectUri; + + let dpopNonce: string | undefined; + let tokenResp!: Response; + + for (let attempt = 0; attempt < 2; attempt++) { + const proof = await dpopKey.createJwt( + { + alg: "ES256", + typ: "dpop+jwt", + jwk: publicJwk as any, + }, + { + htm: "POST", + htu: pending.tokenEndpoint, + iat: Math.floor(Date.now() / 1000), + jti: randomHex(16), + ...(dpopNonce ? { nonce: dpopNonce } : {}), + }, + ); + + tokenResp = await this._fetch(pending.tokenEndpoint, { + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded", + dpop: proof, + }, + body: new URLSearchParams({ + grant_type: "authorization_code", + code, + redirect_uri: redirectUri, + client_id: this.clientId, + code_verifier: pending.authPkceVerifier, + }), + }); + + if (!tokenResp.ok && attempt === 0) { + const nonceHeader = tokenResp.headers.get("dpop-nonce"); + if (nonceHeader) { + const errorBody = await tokenResp.text(); + if (errorBody.includes("use_dpop_nonce")) { + dpopNonce = nonceHeader; + continue; + } + throw new TokenExchangeError( + `Token exchange failed: ${tokenResp.status} ${errorBody}`, + tokenResp.status, + errorBody, + ); + } + } + + break; + } + + if (!tokenResp!.ok) { + const err = await tokenResp!.text(); + throw new TokenExchangeError( + `Token exchange failed: ${tokenResp!.status} ${err}`, + tokenResp!.status, + err, + ); + } + + const tokens = (await tokenResp.json()) as { + access_token: string; + refresh_token?: string; + scope?: string; + sub?: string; + iss?: string; + }; + + const session = await this.registerSession({ + provisionId: pending.provisionId, + pkceVerifier: pending.provisionPkceVerifier, + did: pending.did, + accessToken: tokens.access_token, + refreshToken: tokens.refresh_token, + scopes: tokens.scope ?? this.scopes, + pdsUrl: pending.pdsUrl, + issuer: tokens.iss ?? pending.issuer, + dpopKey: pending.rawJwk, + }); + + await this.storage.delete(`pending-auth:${state}`); + + return { session, state }; + } catch (err) { + throw OAuthCallbackError.from(err, params, state); + } + } + + override async restore(did?: string, _refresh?: boolean | "auto"): Promise { + if (!did) { + throw new InvalidStateError( + "DID is required for restore() in the Node client", + ); + } + const session = await this.restoreSession(did); + if (!session) { + throw new InvalidStateError(`No session found for ${did}`); + } + return session; + } + + async revoke(did: string): Promise { + await this.deleteSession(did); + } + + async abortRequest(url: URL): Promise { + const urlKey = `pending-auth-url:${url.href}`; + const state = await this.storage.get(urlKey); + if (state) { + await this.storage.delete(`pending-auth:${state}`); + await this.storage.delete(urlKey); + } + } + + private async fetchAuthServerMetadata( + pdsUrl: string, + ): Promise { + const base = pdsUrl.replace(/\/+$/, ""); + + const resourceResp = await this._fetch( + `${base}/.well-known/oauth-protected-resource`, + ); + if (!resourceResp.ok) { + throw new ResolutionError( + `Failed to fetch protected resource metadata from ${pdsUrl}: ${resourceResp.status}`, + ); + } + const resource = (await resourceResp.json()) as { + authorization_servers?: string[]; + }; + const authServer = resource.authorization_servers?.[0]; + if (!authServer) { + throw new ResolutionError( + `No authorization server found in protected resource metadata from ${pdsUrl}`, + ); + } + + const metaResp = await this._fetch( + `${authServer.replace(/\/+$/, "")}/.well-known/oauth-authorization-server`, + ); + if (!metaResp.ok) { + throw new ResolutionError( + `Failed to fetch auth server metadata from ${authServer}: ${metaResp.status}`, + ); + } + return metaResp.json() as Promise; + } +} + +function extractPdsUrl(doc: DidDocument): string { + const services = doc.service ?? []; + for (const service of services) { + if ( + service.id === "#atproto_pds" || + (typeof service.id === "string" && + service.id.endsWith("#atproto_pds")) + ) { + if (typeof service.serviceEndpoint === "string") { + return service.serviceEndpoint; + } + throw new ResolutionError( + `#atproto_pds service endpoint is not a string URL in DID document for ${doc.id}`, + ); + } + } + throw new ResolutionError( + `No #atproto_pds service found in DID document for ${doc.id}`, + ); +} + +function randomHex(byteLength: number): string { + const bytes = crypto.getRandomValues(new Uint8Array(byteLength)); + return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join( + "", + ); +} + +function generatePkceVerifier(): string { + const bytes = crypto.getRandomValues(new Uint8Array(32)); + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary) + .replace(/\+/g, "-") + .replace(/\//g, "_") + .replace(/=+$/, ""); +} + +async function computePkceChallenge(verifier: string): Promise { + const hash = await crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(verifier), + ); + const bytes = new Uint8Array(hash); + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary) + .replace(/\+/g, "-") + .replace(/\//g, "_") + .replace(/=+$/, ""); +} diff --git a/packages/oauth-client-node/tsconfig.json b/packages/oauth-client-node/tsconfig.json new file mode 100644 index 0000000..30b8260 --- /dev/null +++ b/packages/oauth-client-node/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "lib": ["ES2022", "DOM"] + }, + "include": ["src"], + "exclude": ["src/__tests__"] +} diff --git a/packages/oauth-client-node/tsup.config.ts b/packages/oauth-client-node/tsup.config.ts new file mode 100644 index 0000000..ff1a153 --- /dev/null +++ b/packages/oauth-client-node/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm", "cjs"], + dts: true, + sourcemap: true, + clean: true, +}); -- 2.51.2 From e1a6b004cabfaacd68c9b81e7a29327214554a61 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 08:55:06 -0500 Subject: [PATCH 013/250] feat: add support for session hooks Signed-off-by: Trezy Signed-off-by: Trezy --- bun.lock | 27 +- .../docs/docs/sdk/oauth-client-browser.md | 169 +++++++- packages/docs/docs/sdk/overview.md | 10 +- .../src/__tests__/browser-client.test.ts | 381 +++++++++++++++++- .../src/__tests__/util.test.ts | 89 ++++ .../src/browser-client.ts | 239 ++++++----- packages/oauth-client-browser/src/index.ts | 20 +- packages/oauth-client-browser/src/util.ts | 19 + packages/oauth-client-browser/tsconfig.json | 2 +- packages/oauth-client/src/client.ts | 48 ++- packages/oauth-client/src/errors.ts | 34 ++ packages/oauth-client/src/index.ts | 7 + packages/oauth-client/src/session.ts | 33 +- packages/oauth-client/src/types.ts | 19 +- 14 files changed, 943 insertions(+), 154 deletions(-) create mode 100644 packages/oauth-client-browser/src/__tests__/util.test.ts create mode 100644 packages/oauth-client-browser/src/util.ts diff --git a/bun.lock b/bun.lock index cb20426..0ff328b 100644 --- a/bun.lock +++ b/bun.lock @@ -28,7 +28,7 @@ "name": "@happyview/lex-agent", "version": "0.0.0-development", "dependencies": { - "@happyview/oauth-client": "^1.0.0-dev.2", + "@happyview/oauth-client": "workspace:*", }, "devDependencies": { "@atproto/lex": "^0.0.25", @@ -87,6 +87,27 @@ "typescript": "^5.7.0", }, }, + "packages/oauth-client-node": { + "name": "@happyview/oauth-client-node", + "version": "0.0.0-development", + "dependencies": { + "@atproto-labs/did-resolver": "^0.2.6", + "@atproto-labs/handle-resolver": "^0.3.6", + "@atproto/did": "^0.3.0", + "@happyview/oauth-client": "workspace:*", + }, + "devDependencies": { + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/exec": "^7.0.0", + "@semantic-release/github": "^12.0.6", + "@semantic-release/release-notes-generator": "^14.1.0", + "@types/bun": "^1.3.12", + "semantic-release": "^25.0.3", + "semantic-release-monorepo": "^8.0.2", + "tsup": "^8.0.0", + "typescript": "^5.7.0", + }, + }, }, "overrides": { "webpack": "5.97.1", @@ -636,6 +657,8 @@ "@happyview/oauth-client-browser": ["@happyview/oauth-client-browser@workspace:packages/oauth-client-browser"], + "@happyview/oauth-client-node": ["@happyview/oauth-client-node@workspace:packages/oauth-client-node"], + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], @@ -3070,8 +3093,6 @@ "@docusaurus/types/webpack-merge": ["webpack-merge@5.10.0", "", { "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.0" } }, "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA=="], - "@happyview/lex-agent/@happyview/oauth-client": ["@happyview/oauth-client@1.0.0", "", {}, "sha512-hvVeyVHJStZ/nrqolcWfy39AJuaws0axKx7b3UvXTSi2TmnTeCJOnelnHstt0L9S6P6b7xxP8ujzvcWZsOd0Ig=="], - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@17.67.0", "", { "dependencies": { "@jsonjoy.com/base64": "17.67.0", "@jsonjoy.com/buffers": "17.67.0", "@jsonjoy.com/codegen": "17.67.0", "@jsonjoy.com/json-pointer": "17.67.0", "@jsonjoy.com/util": "17.67.0", "hyperdyperid": "^1.2.0", "thingies": "^2.5.0", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w=="], "@jsonjoy.com/fs-snapshot/@jsonjoy.com/util": ["@jsonjoy.com/util@17.67.0", "", { "dependencies": { "@jsonjoy.com/buffers": "17.67.0", "@jsonjoy.com/codegen": "17.67.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew=="], diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/docs/sdk/oauth-client-browser.md index f684e83..9ee8c8f 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/docs/sdk/oauth-client-browser.md @@ -30,6 +30,7 @@ const client = new HappyViewBrowserClient({ | `redirectUri` | No | OAuth callback URL. Defaults to `${window.location.origin}/oauth/callback` | | `scopes` | No | OAuth scopes to request. Defaults to `"atproto"` | | `storage` | No | Custom storage adapter. Defaults to localStorage | +| `sessionHooks`| No | Event hooks for session lifecycle events | | `fetch` | No | Custom fetch implementation | The client uses localStorage by default. You can override it: @@ -165,7 +166,9 @@ console.log(info.scopes); // ["atproto", "transition:generic"] ``` -## Authenticated requests +## Session + +### Authenticated requests The session's `fetchHandler` attaches DPoP proof headers automatically: @@ -180,32 +183,128 @@ const data = await response.json(); Pass a relative path (prepends the HappyView instance URL) or a full URL (used as-is). +### Token info + +```typescript +const info = session.getTokenInfo(); +// { sub, scope, iss, aud } +``` + +### Properties + +| Property | Type | Description | +| -------- | -------- | ---------------------------------------- | +| `did` | `string` | The authenticated user's DID | +| `sub` | `string` | Alias for `did` (matches upstream naming) | + +### Sign out + +Sessions can self-revoke: + +```typescript +await session.signOut(); +``` + +This is equivalent to calling `client.revoke(session.did)`. + +## Session event hooks + +React to session lifecycle events with `sessionHooks`: + +```typescript +const client = new HappyViewBrowserClient({ + // ... + sessionHooks: { + onSessionUpdate(did) { + console.log(`Session created/updated for ${did}`); + }, + onSessionDelete(did) { + console.log(`Session deleted for ${did}`); + }, + }, +}); +``` + +- `onSessionUpdate(did)` fires after a session is registered (from `callback()`) or restored. +- `onSessionDelete(did)` fires after a session is revoked (from `revoke()`, `logout()`, or `session.signOut()`). + +## Error handling + +Callback errors are always wrapped in `OAuthCallbackError`, which carries the original callback params and state: + +```typescript +import { OAuthCallbackError } from "@happyview/oauth-client-browser"; + +try { + const session = await client.callback(); +} catch (err) { + if (err instanceof OAuthCallbackError) { + console.log(err.state); // the state from the callback + console.log(err.params.get("error")); // e.g. "access_denied" + console.log(err.cause); // the underlying error, if any + } +} +``` + +If the authorization server returns an error (e.g., the user denied access), the `params` contain the `error` and `error_description` fields from the server response. If the token exchange fails, the underlying `TokenExchangeError` is available as `err.cause`. + +## Using with @atproto/api + +`HappyViewSession` is directly compatible with `@atproto/api`'s `Agent`. Pass it as the session manager: + +```typescript +import { Agent } from "@atproto/api"; + +const result = await client.init(); +if (result) { + const agent = new Agent(result.session); + + // Use the full @atproto/api surface + const profile = await agent.getProfile({ actor: agent.did }); + await agent.like(postUri, postCid); +} +``` + +This works because `HappyViewSession` implements the `SessionManager` interface that `Agent` expects — it has `did` and a `fetchHandler` that attaches DPoP authentication headers and prepends the HappyView instance URL. + ## Revoke session +From the client: + ```typescript await client.revoke(session.did); ``` +Or from the session itself: + +```typescript +await session.signOut(); +``` + :::note `logout()` still works as an alias for `revoke()`. ::: -## Resolution utilities +## Identity resolution -The browser client exports the resolution functions it uses internally. These are useful if you need to resolve handles or discover PDS URLs outside of the login flow: +The client exposes its handle and DID resolvers for advanced use: ```typescript -import { - resolveHandleToDid, - resolveDidDocument, - resolvePdsUrl, - resolveAuthServerMetadata, -} from "@happyview/oauth-client-browser"; +const did = await client.handleResolver.resolve("alice.bsky.social"); +const doc = await client.didResolver.resolve(did); +``` + +## Validate client metadata -const did = await resolveHandleToDid("alice.bsky.social"); -const doc = await resolveDidDocument(did); -const pdsUrl = resolvePdsUrl(doc); -const authMeta = await resolveAuthServerMetadata(pdsUrl); +Verify that your OAuth client metadata is served correctly: + +```typescript +import { HappyViewBrowserClient } from "@happyview/oauth-client-browser"; + +const metadata = await HappyViewBrowserClient.fetchMetadata({ + clientId: "https://example.com/oauth-client-metadata.json", +}); +console.log(metadata.client_name); ``` ## OAuth client metadata @@ -239,16 +338,56 @@ For a static site, serve a plain JSON file at `/oauth-client-metadata.json`. The `redirect_uris` array must include the `redirectUri` your client is configured with (defaults to `${origin}/oauth/callback`). +## Local development + +For local development with ATProto's loopback client ID convention, use `buildLoopbackClientId`: + +```typescript +import { buildLoopbackClientId } from "@happyview/oauth-client-browser"; + +const clientId = buildLoopbackClientId(window.location); +// → "http://localhost?redirect_uri=http%3A%2F%2F127.0.0.1%3A3000%2F" +``` + +This builds a client ID that authorization servers recognize as a local development app. The `redirect_uri` is encoded in the client ID URL query string. + +## Cleanup + +The browser client implements `AsyncDisposable` for use with `await using`: + +```typescript +await using client = new HappyViewBrowserClient({ ... }); +// client.dispose() called automatically when scope exits +``` + +Or call `dispose()` manually: + +```typescript +client.dispose(); +``` + ## Re-exports -This package re-exports everything from `@happyview/oauth-client`, so you don't need to install the core package separately. All types, error classes, and utilities are available: +This package re-exports everything from `@happyview/oauth-client`, `@atproto-labs/handle-resolver`, and `@atproto-labs/did-resolver`. You don't need to install these packages separately: ```typescript import { + // From @happyview/oauth-client HappyViewBrowserClient, HappyViewSession, ApiError, - type CryptoAdapter, + OAuthCallbackError, + Key, + type SessionEventHooks, type StorageAdapter, + type TokenInfo, + type Jwk, + + // From @atproto-labs/handle-resolver + AtprotoDohHandleResolver, + + // From @atproto-labs/did-resolver + DidResolverCommon, + type DidDocument, } from "@happyview/oauth-client-browser"; ``` diff --git a/packages/docs/docs/sdk/overview.md b/packages/docs/docs/sdk/overview.md index 9229674..e072183 100644 --- a/packages/docs/docs/sdk/overview.md +++ b/packages/docs/docs/sdk/overview.md @@ -6,8 +6,8 @@ HappyView provides JavaScript packages for building third-party apps that authen | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | [`@happyview/lex-agent`](https://npmx.dev/package/@happyview/lex-agent) | Recommended — type-safe XRPC via [`@atproto/lex`](https://npmx.dev/package/@atproto/lex) `Client` with HappyView DPoP auth | | [`@happyview/oauth-client`](https://npmx.dev/package/@happyview/oauth-client) | Platform-agnostic core — DPoP key provisioning, session management, authenticated fetch | -| [`@happyview/oauth-client-browser`](https://npmx.dev/package/@happyview/oauth-client-browser) | Browser OAuth wrapper with Web Crypto, localStorage, and redirect/popup flows | -| [`@happyview/oauth-client-node`](https://npmx.dev/package/@happyview/oauth-client-node) | Node.js server wrapper with handle/DID resolution and server-friendly authorize/callback API | +| [`@happyview/oauth-client-browser`](https://npmx.dev/package/@happyview/oauth-client-browser) | Browser OAuth wrapper for apps already using `@atproto/oauth-client-browser` | +| [`@happyview/oauth-client-node`](https://npmx.dev/package/@happyview/oauth-client-node) | Node.js OAuth client for server-side apps, matching `@atproto/oauth-client-node` | ## Which package do I need? @@ -15,9 +15,9 @@ HappyView provides JavaScript packages for building third-party apps that authen **Already using `@atproto/oauth-client-browser`?** Add `@happyview/oauth-client-browser` to get a `HappyViewBrowserClient` that handles the HappyView-specific DPoP key provisioning and session registration on top of the standard atproto OAuth flow. -**Building a server-side Node.js app?** Use `@happyview/oauth-client-node`. It provides `authorize()` and `callback()` methods designed for server request handlers, plus built-in handle and DID resolution. +**Building a server-side (Node.js) app?** Use `@happyview/oauth-client-node` — it handles handle resolution, DID resolution, PDS discovery, and the full OAuth flow server-side. Matches the API surface of `@atproto/oauth-client-node`. -**Need something more custom?** Use `@happyview/oauth-client` directly and provide your own `StorageAdapter`. +**Building something more custom?** Use `@happyview/oauth-client` directly and provide your own `CryptoAdapter` and `StorageAdapter`. ## How it works @@ -68,5 +68,5 @@ const result = await lex.xrpc(myLexicons.com.example.getGame, { - [Lex Agent](./lex-agent.md): type-safe XRPC with `@atproto/lex` - [OAuth Client](./oauth-client.md): platform-agnostic core client - [Browser Client](./oauth-client-browser.md): browser OAuth redirect flow -- [Node Client](./oauth-client-node.md): server-side authorize/callback flow +- [Node Client](./oauth-client-node.md): server-side OAuth flow - [Authentication](../getting-started/authentication.md): full details on DPoP key provisioning and API client types diff --git a/packages/oauth-client-browser/src/__tests__/browser-client.test.ts b/packages/oauth-client-browser/src/__tests__/browser-client.test.ts index d6e26c1..41a4954 100644 --- a/packages/oauth-client-browser/src/__tests__/browser-client.test.ts +++ b/packages/oauth-client-browser/src/__tests__/browser-client.test.ts @@ -1,6 +1,7 @@ import { afterEach, beforeAll, describe, expect, mock, test } from "bun:test"; import { - InvalidStateError, + HappyViewOAuthClient, + OAuthCallbackError, TokenExchangeError, type StorageAdapter, } from "@happyview/oauth-client"; @@ -402,27 +403,29 @@ describe("HappyViewBrowserClient", () => { ); }); - test("callback throws InvalidStateError when code or state is missing", async () => { + test("callback throws OAuthCallbackError when state is missing", async () => { const client = createClient(); try { await client.callback("?code=auth-code"); expect(true).toBe(false); } catch (err) { - expect(err).toBeInstanceOf(InvalidStateError); + expect(err).toBeInstanceOf(OAuthCallbackError); + expect((err as OAuthCallbackError).state).toBeUndefined(); } }); - test("callback throws InvalidStateError when no pending state found", async () => { + test("callback throws OAuthCallbackError when no pending state found", async () => { const client = createClient(); try { await client.callback("?code=auth-code&state=nonexistent"); expect(true).toBe(false); } catch (err) { - expect(err).toBeInstanceOf(InvalidStateError); + expect(err).toBeInstanceOf(OAuthCallbackError); + expect((err as OAuthCallbackError).state).toBe("nonexistent"); } }); - test("callback throws TokenExchangeError on token endpoint failure", async () => { + test("callback throws OAuthCallbackError wrapping TokenExchangeError on token failure", async () => { const fetchFn = mock( async (input: RequestInfo | URL, init?: RequestInit) => { const url = String(input); @@ -455,9 +458,10 @@ describe("HappyViewBrowserClient", () => { await client.callback("?code=auth-code&state=statefail"); expect(true).toBe(false); } catch (err) { - expect(err).toBeInstanceOf(TokenExchangeError); - expect((err as TokenExchangeError).status).toBe(400); - expect((err as TokenExchangeError).body).toBe("invalid_grant"); + expect(err).toBeInstanceOf(OAuthCallbackError); + expect((err as OAuthCallbackError).state).toBe("statefail"); + expect((err as OAuthCallbackError).cause).toBeInstanceOf(TokenExchangeError); + expect(((err as OAuthCallbackError).cause as TokenExchangeError).status).toBe(400); } }); @@ -775,10 +779,369 @@ describe("HappyViewBrowserClient", () => { expect(() => client.dispose()).not.toThrow(); }); + test("prepareLogin accepts scope (singular) option", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.prepareLogin("user.bsky.social", { + scope: "atproto transition:generic", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + expect(parCall).toBeDefined(); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe("atproto transition:generic"); + }); + + test("prepareLogin prefers scope over scopes when both provided", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.prepareLogin("user.bsky.social", { + scope: "atproto transition:generic", + scopes: "atproto", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("scope")).toBe("atproto transition:generic"); + }); + + test("restore accepts and ignores refresh parameter", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore( + "did:plc:abcdefghijklmnopqrstuvwx", + true, + ); + expect(session).not.toBeNull(); + expect(session!.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + }); + + test("callback retries with DPoP nonce on use_dpop_nonce error", async () => { + let tokenAttempt = 0; + const fetchFn = mock(async (input: RequestInfo | URL, init?: RequestInit) => { + const url = input instanceof Request ? input.url : String(input); + + if (url.includes("/oauth/token")) { + tokenAttempt++; + if (tokenAttempt === 1) { + return new Response( + JSON.stringify({ error: "use_dpop_nonce" }), + { + status: 400, + headers: { "dpop-nonce": "server-nonce-123" }, + }, + ); + } + return new Response( + JSON.stringify({ + access_token: "at_test_token", + refresh_token: "rt_test_token", + scope: "atproto", + sub: "did:plc:abcdefghijklmnopqrstuvwx", + iss: "https://pds.example.com", + }), + { status: 200 }, + ); + } + + if (url.includes("/oauth/sessions") && init?.method === "POST") { + return new Response( + JSON.stringify({ + session_id: "sess_test", + did: "did:plc:abcdefghijklmnopqrstuvwx", + }), + { status: 201 }, + ); + } + + return new Response("not found", { status: 404 }); + }); + + const client = createClient(fetchFn); + + localStorage.setItem( + "@happyview/oauth(pending-auth:statenonce)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statenonce", + issuer: "https://pds.example.com", + }), + ); + + const session = await client.callback("?code=auth-code&state=statenonce"); + expect(session.did).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(tokenAttempt).toBe(2); + + const secondTokenCall = fetchFn.mock.calls.filter((call: any[]) => + String(call[0]).includes("/oauth/token"), + )[1]; + const dpopJwt = new Headers( + (secondTokenCall![1] as RequestInit).headers, + ).get("dpop")!; + const payloadB64 = dpopJwt.split(".")[1]; + const padded = + payloadB64 + "=".repeat((4 - (payloadB64.length % 4)) % 4); + const payload = JSON.parse( + atob(padded.replace(/-/g, "+").replace(/_/g, "/")), + ); + expect(payload.nonce).toBe("server-nonce-123"); + }); + + test("session.sub is an alias for session.did", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + expect(session!.sub).toBe(session!.did); + }); + + test("session.getTokenInfo returns metadata from stored session", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + scopes: "atproto transition:generic", + pdsUrl: "https://pds.example.com", + issuer: "https://pds.example.com", + }), + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + const info = session!.getTokenInfo(); + expect(info.sub).toBe("did:plc:abcdefghijklmnopqrstuvwx"); + expect(info.scope).toBe("atproto transition:generic"); + expect(info.aud).toBe("https://pds.example.com"); + expect(info.iss).toBe("https://pds.example.com"); + }); + + test("session.signOut deletes the session", async () => { + const deleteFn = mock( + async (input: RequestInfo | URL, init?: RequestInit) => { + return new Response(null, { status: 204 }); + }, + ); + const client = createClient(deleteFn); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + localStorage.setItem( + "@happyview/oauth(happyview:last-active-did)", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + + const session = await client.restore("did:plc:abcdefghijklmnopqrstuvwx"); + await session!.signOut(); + + expect( + localStorage.getItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + ), + ).toBeNull(); + }); + + test("prepareLogin passes prompt option to PAR", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.prepareLogin("user.bsky.social", { + prompt: "login", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("prompt")).toBe("login"); + }); + + test("prepareLogin passes redirect_uri option", async () => { + const fetchFn = mockFetchForFullFlow(); + const client = createClient(fetchFn); + + await client.prepareLogin("user.bsky.social", { + redirect_uri: "https://other.example.com/cb", + }); + + const parCall = fetchFn.mock.calls.find((call: any[]) => + String(call[0]).includes("/oauth/par"), + ); + const body = new URLSearchParams( + (parCall![1] as RequestInit).body as string, + ); + expect(body.get("redirect_uri")).toBe("https://other.example.com/cb"); + }); + + test("handleResolver and didResolver are publicly accessible", () => { + const client = createClient(); + expect(client.handleResolver).toBeDefined(); + expect(client.didResolver).toBeDefined(); + }); + test("LoginContinuedInParentWindowError has correct name and message", () => { const err = new LoginContinuedInParentWindowError(); expect(err.name).toBe("LoginContinuedInParentWindowError"); expect(err.message).toBe("Login continued in parent window"); expect(err).toBeInstanceOf(Error); }); + + test("sessionHooks.onSessionUpdate fires after callback", async () => { + const onSessionUpdate = mock((did: string) => {}); + const fetchFn = mockFetchForFullFlow(); + const client = new HappyViewBrowserClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + storage: new LocalStorageAdapter(), + sessionHooks: { onSessionUpdate }, + fetch: fetchFn, + }); + + localStorage.setItem( + "@happyview/oauth(pending-auth:statehook)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "provision-verifier", + authPkceVerifier: "auth-verifier", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "statehook", + issuer: "https://pds.example.com", + }), + ); + + await client.callback("?code=auth-code&state=statehook"); + + expect(onSessionUpdate).toHaveBeenCalledTimes(1); + expect(onSessionUpdate.mock.calls[0][0]).toBe( + "did:plc:abcdefghijklmnopqrstuvwx", + ); + }); + + test("sessionHooks.onSessionDelete fires after logout", async () => { + const onSessionDelete = mock((did: string) => {}); + const deleteFn = mock(async () => new Response(null, { status: 204 })); + const client = new HappyViewBrowserClient({ + instanceUrl: "https://happyview.example.com", + clientId: "https://example.com/oauth-client-metadata.json", + clientKey: "hvc_test", + storage: new LocalStorageAdapter(), + sessionHooks: { onSessionDelete }, + fetch: deleteFn, + }); + + localStorage.setItem( + "@happyview/oauth(happyview:session:did:plc:abcdefghijklmnopqrstuvwx)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + dpopKey: testJwk, + accessToken: "at_stored", + clientKey: "hvc_test", + instanceUrl: "https://happyview.example.com", + }), + ); + localStorage.setItem( + "@happyview/oauth(happyview:last-active-did)", + "did:plc:abcdefghijklmnopqrstuvwx", + ); + + await client.logout("did:plc:abcdefghijklmnopqrstuvwx"); + + expect(onSessionDelete).toHaveBeenCalledTimes(1); + expect(onSessionDelete.mock.calls[0][0]).toBe( + "did:plc:abcdefghijklmnopqrstuvwx", + ); + }); + + test("callback throws OAuthCallbackError when params contain error", async () => { + const client = createClient(); + + localStorage.setItem( + "@happyview/oauth(pending-auth:stateerr)", + JSON.stringify({ + did: "did:plc:abcdefghijklmnopqrstuvwx", + provisionId: "hvp_test123", + rawJwk: testJwk, + provisionPkceVerifier: "pv", + authPkceVerifier: "av", + pdsUrl: "https://pds.example.com", + tokenEndpoint: "https://pds.example.com/oauth/token", + state: "stateerr", + issuer: "https://pds.example.com", + }), + ); + + try { + await client.callback( + "?error=access_denied&error_description=User+denied+access&state=stateerr", + ); + expect(true).toBe(false); + } catch (err) { + expect(err).toBeInstanceOf(OAuthCallbackError); + const oauthErr = err as OAuthCallbackError; + expect(oauthErr.state).toBe("stateerr"); + expect(oauthErr.params.get("error")).toBe("access_denied"); + expect(oauthErr.message).toBe("User denied access"); + } + }); + + test("[Symbol.asyncDispose] calls dispose", async () => { + const client = createClient(); + await client[Symbol.asyncDispose](); + }); }); diff --git a/packages/oauth-client-browser/src/__tests__/util.test.ts b/packages/oauth-client-browser/src/__tests__/util.test.ts new file mode 100644 index 0000000..3ae7bc2 --- /dev/null +++ b/packages/oauth-client-browser/src/__tests__/util.test.ts @@ -0,0 +1,89 @@ +import { describe, expect, test } from "bun:test"; +import { buildLoopbackClientId } from "../util"; + +describe("buildLoopbackClientId", () => { + test("builds client ID from localhost", () => { + const result = buildLoopbackClientId({ + hostname: "localhost", + pathname: "/", + port: "3000", + }); + expect(result).toBe( + "http://localhost?redirect_uri=" + + encodeURIComponent("http://127.0.0.1:3000/"), + ); + }); + + test("builds client ID from 127.0.0.1", () => { + const result = buildLoopbackClientId({ + hostname: "127.0.0.1", + pathname: "/", + port: "8080", + }); + expect(result).toBe( + "http://localhost?redirect_uri=" + + encodeURIComponent("http://127.0.0.1:8080/"), + ); + }); + + test("preserves non-root pathname in client ID", () => { + const result = buildLoopbackClientId({ + hostname: "localhost", + pathname: "/callback", + port: "3000", + }); + expect(result).toBe( + "http://localhost/callback?redirect_uri=" + + encodeURIComponent("http://127.0.0.1:3000/callback"), + ); + }); + + test("omits port from redirect_uri when empty", () => { + const result = buildLoopbackClientId({ + hostname: "localhost", + pathname: "/", + port: "", + }); + expect(result).toBe( + "http://localhost?redirect_uri=" + + encodeURIComponent("http://127.0.0.1/"), + ); + }); + + test("accepts custom localhost override", () => { + const result = buildLoopbackClientId( + { hostname: "localhost", pathname: "/", port: "3000" }, + "::1", + ); + expect(result).toContain("http%3A%2F%2F%3A%3A1%3A3000"); + }); + + test("accepts [::1] hostname", () => { + const result = buildLoopbackClientId({ + hostname: "[::1]", + pathname: "/", + port: "3000", + }); + expect(result).toContain("redirect_uri="); + }); + + test("throws on non-loopback hostname", () => { + expect(() => + buildLoopbackClientId({ + hostname: "example.com", + pathname: "/", + port: "3000", + }), + ).toThrow(TypeError); + }); + + test("throws with descriptive message", () => { + expect(() => + buildLoopbackClientId({ + hostname: "evil.com", + pathname: "/", + port: "80", + }), + ).toThrow('Expected a loopback hostname, got "evil.com"'); + }); +}); diff --git a/packages/oauth-client-browser/src/browser-client.ts b/packages/oauth-client-browser/src/browser-client.ts index 740cbc8..ae0ce3b 100644 --- a/packages/oauth-client-browser/src/browser-client.ts +++ b/packages/oauth-client-browser/src/browser-client.ts @@ -7,8 +7,10 @@ import { LAST_ACTIVE_KEY, importJwk, InvalidStateError, + OAuthCallbackError, ResolutionError, TokenExchangeError, + type SessionEventHooks, type StorageAdapter, } from "@happyview/oauth-client"; import { LocalStorageAdapter } from "./local-storage-adapter"; @@ -31,6 +33,7 @@ export interface HappyViewBrowserClientOptions { redirectUri?: string; scopes?: string; storage?: StorageAdapter; + sessionHooks?: SessionEventHooks; fetch?: typeof globalThis.fetch; } @@ -47,8 +50,21 @@ interface PendingAuthState { } export interface LoginOptions { + scope?: string; + /** @deprecated Use `scope` instead. */ scopes?: string; state?: string; + redirect_uri?: string; + signal?: AbortSignal; + display?: "page" | "popup" | "touch" | "wap"; + prompt?: string; + nonce?: string; + max_age?: number; + ui_locales?: string; + dpop_jkt?: string; + claims?: Record>>; + authorization_details?: unknown[]; + id_token_hint?: string; } export interface PopupLoginOptions extends LoginOptions { @@ -77,8 +93,8 @@ interface AuthServerMetadata { } export class HappyViewBrowserClient extends HappyViewOAuthClient { - private readonly handleResolver: AtprotoDohHandleResolver; - private readonly didResolver: DidResolverCommon; + readonly handleResolver: AtprotoDohHandleResolver; + readonly didResolver: DidResolverCommon; private readonly clientId: string; private readonly redirectUri: string | undefined; private readonly scopes: string; @@ -89,6 +105,7 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { instanceUrl: options.instanceUrl, clientKey: options.clientKey, storage: storageAdapter, + sessionHooks: options.sessionHooks, fetch: fetchFn, }); @@ -114,7 +131,7 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { const pdsUrl = extractPdsUrl(didDoc); const authMeta = await this.fetchAuthServerMetadata(pdsUrl); - const scopes = options?.scopes ?? this.scopes; + const scopes = options?.scope ?? options?.scopes ?? this.scopes; // Provision DPoP key from HappyView const { provisionId, rawJwk, pkceVerifier: provisionPkceVerifier } = @@ -142,7 +159,8 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { JSON.stringify(pendingState), ); - const { clientId, redirectUri } = this.resolveOAuthEndpoints(); + const { clientId, redirectUri: defaultRedirectUri } = this.resolveOAuthEndpoints(); + const redirectUri = options?.redirect_uri ?? defaultRedirectUri; const authParams = new URLSearchParams({ response_type: "code", @@ -155,6 +173,16 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { login_hint: handle, }); + if (options?.display) authParams.set("display", options.display); + if (options?.prompt) authParams.set("prompt", options.prompt); + if (options?.nonce) authParams.set("nonce", options.nonce); + if (options?.max_age != null) authParams.set("max_age", String(options.max_age)); + if (options?.ui_locales) authParams.set("ui_locales", options.ui_locales); + if (options?.dpop_jkt) authParams.set("dpop_jkt", options.dpop_jkt); + if (options?.id_token_hint) authParams.set("id_token_hint", options.id_token_hint); + if (options?.claims) authParams.set("claims", JSON.stringify(options.claims)); + if (options?.authorization_details) authParams.set("authorization_details", JSON.stringify(options.authorization_details)); + // ATProto requires Pushed Authorization Requests (PAR) const parEndpoint = authMeta.pushed_authorization_request_endpoint; if (parEndpoint) { @@ -200,121 +228,128 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { const code = params.get("code"); const state = params.get("state"); - if (!code || !state) { - const error = params.get("error"); - const errorDesc = params.get("error_description"); - const raw = search ?? window.location.search; - throw new InvalidStateError( - `Missing code or state in callback URL. ` + - `error=${error}, error_description=${errorDesc}, ` + - `search=${raw}` - ); + if (!state) { + throw new OAuthCallbackError(params, 'Missing "state" parameter'); } const pendingJson = await this.storage.get(`pending-auth:${state}`); if (!pendingJson) { - throw new InvalidStateError( - "No pending auth state found for this callback", + throw new OAuthCallbackError( + params, + `Unknown authorization session "${state}"`, + state, ); } - const pending: PendingAuthState = JSON.parse(pendingJson); - // Import the stored JWK into a Key for DPoP proof generation - const dpopKey = await importJwk(pending.rawJwk); - // Build a plain public JWK object from the raw key (strip private "d" component) - const { d: _, ...publicJwk } = pending.rawJwk; + if (params.has("error")) { + await this.storage.delete(`pending-auth:${state}`); + throw new OAuthCallbackError(params, undefined, state); + } - const { clientId, redirectUri } = this.resolveOAuthEndpoints(); + if (!code) { + throw new OAuthCallbackError( + params, + 'Missing "code" parameter', + state, + ); + } - // Token exchange with DPoP nonce handling — the PDS may require a nonce - // by responding with 400 + use_dpop_nonce error and a DPoP-Nonce header. - let dpopNonce: string | undefined; - let tokenResp!: Response; + const pending: PendingAuthState = JSON.parse(pendingJson); - for (let attempt = 0; attempt < 2; attempt++) { - const proof = await dpopKey.createJwt( - { - alg: "ES256", - typ: "dpop+jwt", - jwk: publicJwk as any, - }, - { - htm: "POST", - htu: pending.tokenEndpoint, - iat: Math.floor(Date.now() / 1000), - jti: randomHex(16), - ...(dpopNonce ? { nonce: dpopNonce } : {}), - }, - ); + try { + const dpopKey = await importJwk(pending.rawJwk); + const { d: _, ...publicJwk } = pending.rawJwk; + + const { clientId, redirectUri } = this.resolveOAuthEndpoints(); + + let dpopNonce: string | undefined; + let tokenResp!: Response; + + for (let attempt = 0; attempt < 2; attempt++) { + const proof = await dpopKey.createJwt( + { + alg: "ES256", + typ: "dpop+jwt", + jwk: publicJwk as any, + }, + { + htm: "POST", + htu: pending.tokenEndpoint, + iat: Math.floor(Date.now() / 1000), + jti: randomHex(16), + ...(dpopNonce ? { nonce: dpopNonce } : {}), + }, + ); - tokenResp = await this._fetch(pending.tokenEndpoint, { - method: "POST", - headers: { - "content-type": "application/x-www-form-urlencoded", - dpop: proof, - }, - body: new URLSearchParams({ - grant_type: "authorization_code", - code, - redirect_uri: redirectUri, - client_id: clientId, - code_verifier: pending.authPkceVerifier, - }), - }); + tokenResp = await this._fetch(pending.tokenEndpoint, { + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded", + dpop: proof, + }, + body: new URLSearchParams({ + grant_type: "authorization_code", + code, + redirect_uri: redirectUri, + client_id: clientId, + code_verifier: pending.authPkceVerifier, + }), + }); - // If the server requires a DPoP nonce, retry with it - if (!tokenResp.ok && attempt === 0) { - const nonceHeader = tokenResp.headers.get("dpop-nonce"); - if (nonceHeader) { - const errorBody = await tokenResp.text(); - if (errorBody.includes("use_dpop_nonce")) { - dpopNonce = nonceHeader; - continue; + if (!tokenResp.ok && attempt === 0) { + const nonceHeader = tokenResp.headers.get("dpop-nonce"); + if (nonceHeader) { + const errorBody = await tokenResp.text(); + if (errorBody.includes("use_dpop_nonce")) { + dpopNonce = nonceHeader; + continue; + } + throw new TokenExchangeError( + `Token exchange failed: ${tokenResp.status} ${errorBody}`, + tokenResp.status, + errorBody, + ); } - // Not a nonce error — throw - throw new TokenExchangeError( - `Token exchange failed: ${tokenResp.status} ${errorBody}`, - tokenResp.status, - errorBody, - ); } - } - break; - } + break; + } - if (!tokenResp!.ok) { - const err = await tokenResp!.text(); - throw new TokenExchangeError( - `Token exchange failed: ${tokenResp!.status} ${err}`, - tokenResp!.status, - err, - ); - } + if (!tokenResp!.ok) { + const err = await tokenResp!.text(); + throw new TokenExchangeError( + `Token exchange failed: ${tokenResp!.status} ${err}`, + tokenResp!.status, + err, + ); + } - const tokens = (await tokenResp.json()) as { - access_token: string; - refresh_token?: string; - scope?: string; - sub?: string; - iss?: string; - }; + const tokens = (await tokenResp.json()) as { + access_token: string; + refresh_token?: string; + scope?: string; + sub?: string; + iss?: string; + }; - const session = await this.registerSession({ - provisionId: pending.provisionId, - pkceVerifier: pending.provisionPkceVerifier, - did: pending.did, - accessToken: tokens.access_token, - refreshToken: tokens.refresh_token, - scopes: tokens.scope ?? this.scopes, - pdsUrl: pending.pdsUrl, - issuer: tokens.iss ?? pending.issuer, - dpopKey: pending.rawJwk, - }); + const session = await this.registerSession({ + provisionId: pending.provisionId, + pkceVerifier: pending.provisionPkceVerifier, + did: pending.did, + accessToken: tokens.access_token, + refreshToken: tokens.refresh_token, + scopes: tokens.scope ?? this.scopes, + pdsUrl: pending.pdsUrl, + issuer: tokens.iss ?? pending.issuer, + dpopKey: pending.rawJwk, + }); - await this.storage.delete(`pending-auth:${state}`); + await this.storage.delete(`pending-auth:${state}`); - return session; + return session; + } catch (err) { + throw OAuthCallbackError.from(err, params, state); + } } async logout(did: string): Promise { @@ -325,7 +360,7 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { return this.logout(did); } - override async restore(did?: string): Promise { + override async restore(did?: string, _refresh?: boolean | "auto"): Promise { if (did) { const session = await this.restoreSession(did); if (session) { @@ -497,6 +532,10 @@ export class HappyViewBrowserClient extends HappyViewOAuthClient { // No persistent resources to clean up } + async [Symbol.asyncDispose](): Promise { + this.dispose(); + } + private resolveOAuthEndpoints(): { clientId: string; redirectUri: string } { return { clientId: this.clientId, diff --git a/packages/oauth-client-browser/src/index.ts b/packages/oauth-client-browser/src/index.ts index b581a9f..4c20236 100644 --- a/packages/oauth-client-browser/src/index.ts +++ b/packages/oauth-client-browser/src/index.ts @@ -1,19 +1,6 @@ -export { - ApiError, - AuthenticationError, - HappyViewError, - HappyViewSession, - InvalidStateError, - MemoryStorage, - ResolutionError, - TokenExchangeError, - importJwk, - type DpopProvision, - type HappyViewOAuthClientOptions, - type RegisterSessionParams, - type StorageAdapter, - type StoredSession, -} from "@happyview/oauth-client"; +export * from "@happyview/oauth-client"; +export * from "@atproto-labs/handle-resolver"; +export * from "@atproto-labs/did-resolver"; export { HappyViewBrowserClient, @@ -27,3 +14,4 @@ export type { SignInOptions, } from "./browser-client"; export { LocalStorageAdapter } from "./local-storage-adapter"; +export { buildLoopbackClientId } from "./util"; diff --git a/packages/oauth-client-browser/src/util.ts b/packages/oauth-client-browser/src/util.ts new file mode 100644 index 0000000..a98d455 --- /dev/null +++ b/packages/oauth-client-browser/src/util.ts @@ -0,0 +1,19 @@ +const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]", "::1"]); + +export function buildLoopbackClientId( + location: { hostname: string; pathname: string; port: string }, + localhost = "127.0.0.1", +): string { + if (!LOOPBACK_HOSTS.has(location.hostname)) { + throw new TypeError( + `Expected a loopback hostname, got "${location.hostname}"`, + ); + } + + const port = location.port ? `:${location.port}` : ""; + const redirectUri = `http://${localhost}${port}${location.pathname}`; + + const pathname = location.pathname === "/" ? "" : location.pathname; + const encodedRedirect = encodeURIComponent(redirectUri); + return `http://localhost${pathname}?redirect_uri=${encodedRedirect}`; +} diff --git a/packages/oauth-client-browser/tsconfig.json b/packages/oauth-client-browser/tsconfig.json index 51fb261..40083db 100644 --- a/packages/oauth-client-browser/tsconfig.json +++ b/packages/oauth-client-browser/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "./dist", "rootDir": "./src", - "lib": ["ES2022", "DOM", "DOM.Iterable"] + "lib": ["ES2022", "ESNext.Disposable", "DOM", "DOM.Iterable"] }, "include": ["src"], "exclude": ["src/__tests__"] diff --git a/packages/oauth-client/src/client.ts b/packages/oauth-client/src/client.ts index 29f98f2..e163783 100644 --- a/packages/oauth-client/src/client.ts +++ b/packages/oauth-client/src/client.ts @@ -9,6 +9,7 @@ import type { ProvisionKeyResponse, RegisterSessionParams, RegisterSessionResponse, + SessionEventHooks, StorageAdapter, StoredSession, } from "./types"; @@ -16,12 +17,38 @@ import type { const STORAGE_PREFIX = "happyview:session:"; export const LAST_ACTIVE_KEY = "happyview:last-active-did"; +export interface FetchMetadataOptions { + clientId: string; + fetch?: typeof globalThis.fetch; + signal?: AbortSignal; +} + export class HappyViewOAuthClient { + static async fetchMetadata({ + clientId, + fetch: fetchFn = globalThis.fetch, + signal, + }: FetchMetadataOptions): Promise> { + signal?.throwIfAborted(); + const resp = await fetchFn(clientId, { redirect: "error", signal }); + if (resp.status !== 200) { + resp.body?.cancel?.(); + throw new Error(`Failed to fetch client metadata: ${resp.status}`); + } + const mime = resp.headers.get("content-type")?.split(";")[0].trim(); + if (mime !== "application/json") { + resp.body?.cancel?.(); + throw new Error(`Invalid client metadata content type: ${mime}`); + } + return resp.json() as Promise>; + } + protected readonly instanceUrl: string; protected readonly clientKey: string; protected readonly storage: StorageAdapter; private readonly clientSecret: string | undefined; protected readonly _fetch: typeof globalThis.fetch; + private readonly sessionHooks: SessionEventHooks; constructor( options: HappyViewOAuthClientOptions & { @@ -33,6 +60,7 @@ export class HappyViewOAuthClient { this.clientSecret = options.clientSecret; this.storage = options.storage ?? new MemoryStorage(); this._fetch = options.fetch ?? ((input: RequestInfo | URL, init?: RequestInit) => fetch(input, init)) as typeof globalThis.fetch; + this.sessionHooks = options.sessionHooks ?? {}; } get isConfidential(): boolean { @@ -136,7 +164,9 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, - scopes: data.scopes, + scopes: params.scopes, + pdsUrl: params.pdsUrl, + issuer: params.issuer, }; await this.storage.set( `${STORAGE_PREFIX}${data.did}`, @@ -144,15 +174,22 @@ export class HappyViewOAuthClient { ); await this.storage.set(LAST_ACTIVE_KEY, data.did); - return new HappyViewSession({ + const session = new HappyViewSession({ did: data.did, dpopKey, accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, - scopes: data.scopes, + scopes: params.scopes, + pdsUrl: params.pdsUrl, + issuer: params.issuer, fetch: this._fetch, + onSignOut: () => this.deleteSession(data.did), }); + + this.sessionHooks.onSessionUpdate?.(data.did); + + return session; } async deleteSession(did: string): Promise { @@ -179,6 +216,8 @@ export class HappyViewOAuthClient { if (lastActive === did) { await this.storage.delete(LAST_ACTIVE_KEY); } + + this.sessionHooks.onSessionDelete?.(did); } async restoreSession(did: string): Promise { @@ -194,7 +233,10 @@ export class HappyViewOAuthClient { clientKey: data.clientKey, instanceUrl: data.instanceUrl, scopes: data.scopes ?? [], + pdsUrl: data.pdsUrl, + issuer: data.issuer, fetch: this._fetch, + onSignOut: () => this.deleteSession(data.did), }); } diff --git a/packages/oauth-client/src/errors.ts b/packages/oauth-client/src/errors.ts index e78b83e..2a69e26 100644 --- a/packages/oauth-client/src/errors.ts +++ b/packages/oauth-client/src/errors.ts @@ -52,3 +52,37 @@ export class ResolutionError extends HappyViewError { this.name = "ResolutionError"; } } + +export class OAuthCallbackError extends HappyViewError { + readonly params: URLSearchParams; + readonly state: string | undefined; + + static from( + err: unknown, + params: URLSearchParams, + state?: string, + ): OAuthCallbackError { + if (err instanceof OAuthCallbackError) return err; + const message = err instanceof Error ? err.message : undefined; + return new OAuthCallbackError(params, message, state, err); + } + + constructor( + params: URLSearchParams, + message?: string, + state?: string, + cause?: unknown, + ) { + super( + message ?? + params.get("error_description") ?? + "OAuth callback error", + ); + this.name = "OAuthCallbackError"; + this.params = params; + this.state = state; + if (cause !== undefined) { + this.cause = cause; + } + } +} diff --git a/packages/oauth-client/src/index.ts b/packages/oauth-client/src/index.ts index eaa7592..4263eb1 100644 --- a/packages/oauth-client/src/index.ts +++ b/packages/oauth-client/src/index.ts @@ -1,10 +1,15 @@ +export * from "@atproto/jwk"; +export * from "@atproto/jwk-webcrypto"; + export { HappyViewOAuthClient, LAST_ACTIVE_KEY } from "./client"; +export type { FetchMetadataOptions } from "./client"; export { importJwk } from "./import-jwk"; export { ApiError, AuthenticationError, HappyViewError, InvalidStateError, + OAuthCallbackError, ResolutionError, TokenExchangeError, } from "./errors"; @@ -18,6 +23,8 @@ export type { ProvisionKeyResponse, RegisterSessionParams, RegisterSessionResponse, + SessionEventHooks, StorageAdapter, StoredSession, + TokenInfo, } from "./types"; diff --git a/packages/oauth-client/src/session.ts b/packages/oauth-client/src/session.ts index f7b5033..744d8bb 100644 --- a/packages/oauth-client/src/session.ts +++ b/packages/oauth-client/src/session.ts @@ -1,4 +1,5 @@ import type { Key } from "@atproto/jwk"; +import type { TokenInfo } from "./types"; export interface HappyViewSessionOptions { did: string; @@ -6,8 +7,11 @@ export interface HappyViewSessionOptions { accessToken: string; clientKey: string; instanceUrl: string; - scopes: string[]; + scopes?: string; + pdsUrl?: string; + issuer?: string; fetch?: typeof globalThis.fetch; + onSignOut?: () => Promise; } function randomHex(byteLength: number): string { @@ -35,7 +39,11 @@ export class HappyViewSession { private readonly accessToken: string; private readonly clientKey: string; private readonly instanceUrl: string; + private readonly _scopes: string | undefined; + private readonly _pdsUrl: string | undefined; + private readonly _issuer: string | undefined; private readonly _fetch: typeof globalThis.fetch; + private readonly _onSignOut: (() => Promise) | undefined; private dpopNonce: string | undefined; constructor(options: HappyViewSessionOptions) { @@ -45,7 +53,30 @@ export class HappyViewSession { this.accessToken = options.accessToken; this.clientKey = options.clientKey; this.instanceUrl = options.instanceUrl.replace(/\/+$/, ""); + this._scopes = options.scopes; + this._pdsUrl = options.pdsUrl; + this._issuer = options.issuer; this._fetch = options.fetch ?? ((input: RequestInfo | URL, init?: RequestInit) => fetch(input, init)) as typeof globalThis.fetch; + this._onSignOut = options.onSignOut; + } + + get sub(): string { + return this.did; + } + + getTokenInfo(): TokenInfo { + return { + scope: this._scopes, + iss: this._issuer, + aud: this._pdsUrl, + sub: this.did, + }; + } + + async signOut(): Promise { + if (this._onSignOut) { + await this._onSignOut(); + } } async fetchHandler(url: string, init: RequestInit): Promise { diff --git a/packages/oauth-client/src/types.ts b/packages/oauth-client/src/types.ts index f611f44..c893969 100644 --- a/packages/oauth-client/src/types.ts +++ b/packages/oauth-client/src/types.ts @@ -4,11 +4,17 @@ export interface StorageAdapter { delete(key: string): Promise; } +export interface SessionEventHooks { + onSessionUpdate?: (did: string) => void; + onSessionDelete?: (did: string, cause?: unknown) => void; +} + export interface HappyViewOAuthClientOptions { instanceUrl: string; clientKey: string; clientSecret?: string; storage?: StorageAdapter; + sessionHooks?: SessionEventHooks; } export interface DpopProvision { @@ -40,7 +46,18 @@ export interface StoredSession { accessToken: string; clientKey: string; instanceUrl: string; - scopes: string[]; + scopes?: string; + pdsUrl?: string; + issuer?: string; +} + +export interface TokenInfo { + expiresAt?: Date; + expired?: boolean; + scope?: string; + iss?: string; + aud?: string; + sub: string; } export interface ProvisionKeyResponse { -- 2.51.2 From ee8e541830ee12af01e7b75f526331131bbaaeda Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 08:56:26 -0500 Subject: [PATCH 014/250] feat: allow the base path to be configured Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/getting-started/configuration.md | 4 +- .../getting-started/production-deployment.md | 48 ++++ src/auth/routes.rs | 17 +- src/config.rs | 234 ++++++++++++++++++ src/external_auth/routes.rs | 4 +- src/lua/atproto_api.rs | 1 + src/lua/db_api.rs | 1 + src/lua/execute.rs | 1 + src/lua/http_api.rs | 1 + src/lua/xrpc_api.rs | 1 + src/main.rs | 17 +- src/server.rs | 26 +- tests/common/app.rs | 1 + tests/lua_atproto_api.rs | 1 + tests/lua_db_api.rs | 1 + web/next.config.ts | 2 + web/src/app/dashboard/about/page.tsx | 2 +- web/src/lib/api.ts | 8 +- web/src/lib/auth-context.tsx | 6 +- web/src/lib/config-context.tsx | 2 +- 20 files changed, 351 insertions(+), 27 deletions(-) diff --git a/packages/docs/docs/getting-started/configuration.md b/packages/docs/docs/getting-started/configuration.md index 34a809f..0c7f530 100644 --- a/packages/docs/docs/getting-started/configuration.md +++ b/packages/docs/docs/getting-started/configuration.md @@ -8,7 +8,8 @@ HappyView is configured via environment variables. A `.env` file in the project |----------|----------|---------|-------------| | `DATABASE_URL` | yes | --- | Database connection string. SQLite (`sqlite://path/to/db?mode=rwc`) or Postgres (`postgres://user:pass@host/db`) | | `DATABASE_BACKEND` | no | auto-detected | Force `sqlite` or `postgres`. Auto-detected from `DATABASE_URL` scheme if not set | -| `PUBLIC_URL` | yes | --- | Public-facing URL for HappyView (used for OAuth callbacks, e.g. `https://happyview.example.com`). **For local development, use `http://127.0.0.1:3000` — not `localhost`** (see note below) | +| `PUBLIC_URL` | yes | --- | Public-facing URL for HappyView (used for OAuth callbacks, e.g. `https://happyview.example.com`). **For local development, use `http://127.0.0.1:3000` — not `localhost`** (see note below). Do **not** include the base path — see `BASE_PATH` | +| `BASE_PATH` | no | _(none)_ | Subpath prefix for mounting HappyView behind a reverse proxy (e.g. `/hv`). Must start with `/` and have no trailing slash. When set, all routes are served under this prefix and the dashboard is accessible at `https://example.com/hv/`. See [Reverse proxy subpath](production-deployment.md#reverse-proxy-subpath) | | `SESSION_SECRET` | no | dev default | Secret key for signing session cookies (at least 64 characters). **Must be set in production** | | `HOST` | no | `0.0.0.0` | Bind host | | `PORT` | no | `3000` | Bind port | @@ -45,6 +46,7 @@ SESSION_SECRET=change-me-in-production # DATABASE_URL=postgres://happyview:happyview@localhost/happyview # Optional overrides +# BASE_PATH=/hv # HOST=0.0.0.0 # PORT=3000 # JETSTREAM_URL=wss://jetstream1.us-east.bsky.network diff --git a/packages/docs/docs/getting-started/production-deployment.md b/packages/docs/docs/getting-started/production-deployment.md index 6c07f4e..0a7b3c1 100644 --- a/packages/docs/docs/getting-started/production-deployment.md +++ b/packages/docs/docs/getting-started/production-deployment.md @@ -32,6 +32,54 @@ PUBLIC_URL=https://happyview.example.com `PUBLIC_URL` is used to construct OAuth redirect URIs, so it must exactly match the URL users hit — including scheme. A mismatch breaks OAuth login. +## Reverse proxy subpath + +If you need HappyView to share a domain with other services, set `BASE_PATH` to mount it at a subpath. For example, to serve the dashboard at `https://example.com/hv/`: + +```sh +PUBLIC_URL=https://example.com +BASE_PATH=/hv +``` + +`PUBLIC_URL` should **not** include the base path — HappyView appends it automatically when constructing OAuth callbacks and other external URLs. + +The base path is applied at container startup without rebuilding the image, so prebuilt Docker images (including Railway deployments) work with any subpath. + +### XRPC endpoints + +ATProto clients expect XRPC endpoints at `/xrpc/*` on the domain root. When using a base path, configure your reverse proxy to rewrite `/xrpc/*` requests so they reach HappyView under its base path. Here's an example using Caddy: + +``` +example.com { + # Dashboard and API under the base path + handle /hv/* { + reverse_proxy happyview:3000 + } + + # Redirect bare /hv to /hv/ for cleaner URLs + handle /hv { + redir /hv/ permanent + } + + # ATProto XRPC — rewrite to base path before proxying + handle /xrpc/* { + uri prefix /hv + reverse_proxy happyview:3000 + } + + # Everything else goes to another service + handle { + reverse_proxy other-app:3001 + } +} +``` + +The `uri prefix /hv` directive prepends `/hv` to the request path before proxying, so `/xrpc/com.atproto.sync.getRecord` becomes `/hv/xrpc/com.atproto.sync.getRecord` — which matches HappyView's nested routes. + +### Health checks with a base path + +`GET /health` is always served at the domain root, even when `BASE_PATH` is set. This keeps load balancer probes working without routing changes. + ## Database SQLite is fine for small to medium instances and is the default. Switch to Postgres if you need: diff --git a/src/auth/routes.rs b/src/auth/routes.rs index 0d08274..019d773 100644 --- a/src/auth/routes.rs +++ b/src/auth/routes.rs @@ -229,7 +229,13 @@ async fn callback( .map_err(|e| AppError::Internal(format!("user lookup failed: {e}")))?; if user_exists.is_none() { - return Ok((jar, Redirect::to("/login?error=not_authorized"))); + let login_url = state + .config + .base_path + .as_ref() + .map(|bp| format!("{}/login?error=not_authorized", bp)) + .unwrap_or_else(|| "/login?error=not_authorized".into()); + return Ok((jar, Redirect::to(&login_url))); } } @@ -250,8 +256,13 @@ async fn callback( None }; - // Use DB-stored redirect, or default to "/" - let redirect_url = redirect_url.unwrap_or_else(|| "/".into()); + let default_redirect = state + .config + .base_path + .as_ref() + .map(|bp| format!("{}/", bp)) + .unwrap_or_else(|| "/".into()); + let redirect_url = redirect_url.unwrap_or(default_redirect); tracing::debug!(redirect_url = %redirect_url, "redirecting after callback"); // Set the session cookie diff --git a/src/config.rs b/src/config.rs index a1e2f8e..cabd5d2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -15,6 +15,7 @@ pub struct Config { pub relay_url: String, pub plc_url: String, pub static_dir: String, + pub base_path: Option, pub event_log_retention_days: u32, pub app_name: Option, pub logo_uri: Option, @@ -49,6 +50,16 @@ impl Config { relay_url: env::var("RELAY_URL").unwrap_or_else(|_| "https://bsky.network".into()), plc_url: env::var("PLC_URL").unwrap_or_else(|_| "https://plc.directory".into()), static_dir: env::var("STATIC_DIR").unwrap_or_else(|_| "./web/out".into()), + base_path: env::var("BASE_PATH").ok().and_then(|s| { + let s = s.trim_end_matches('/').to_string(); + if s.is_empty() { + None + } else if !s.starts_with('/') { + panic!("BASE_PATH must start with '/' (got: {s})"); + } else { + Some(s) + } + }), event_log_retention_days: std::env::var("EVENT_LOG_RETENTION_DAYS") .ok() .and_then(|v| v.parse().ok()) @@ -80,6 +91,20 @@ impl Config { .parse() .expect("invalid HOST/PORT") } + + pub fn effective_public_url(&self) -> String { + match &self.base_path { + Some(bp) => format!("{}{}", self.public_url.trim_end_matches('/'), bp), + None => self.public_url.clone(), + } + } + + pub fn url_with_base_path(&self, domain_url: &str) -> String { + match &self.base_path { + Some(bp) => format!("{}{}", domain_url.trim_end_matches('/'), bp), + None => domain_url.to_string(), + } + } } #[cfg(test)] @@ -103,6 +128,7 @@ mod tests { "LOGO_URI", "TOS_URI", "POLICY_URI", + "BASE_PATH", ] { unsafe { env::remove_var(key); @@ -130,6 +156,7 @@ mod tests { relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, @@ -286,4 +313,211 @@ mod tests { let config = Config::from_env(); assert_eq!(config.database_backend, DatabaseBackend::Sqlite); } + + #[test] + #[serial] + fn from_env_base_path_none_by_default() { + unsafe { + clear_env(); + set_required_env(); + } + let config = Config::from_env(); + assert!(config.base_path.is_none()); + } + + #[test] + #[serial] + fn from_env_base_path_read_from_env() { + unsafe { + clear_env(); + set_required_env(); + env::set_var("BASE_PATH", "/hv"); + } + let config = Config::from_env(); + assert_eq!(config.base_path.as_deref(), Some("/hv")); + } + + #[test] + #[serial] + fn from_env_base_path_strips_trailing_slash() { + unsafe { + clear_env(); + set_required_env(); + env::set_var("BASE_PATH", "/hv/"); + } + let config = Config::from_env(); + assert_eq!(config.base_path.as_deref(), Some("/hv")); + } + + #[test] + #[serial] + fn from_env_base_path_empty_becomes_none() { + unsafe { + clear_env(); + set_required_env(); + env::set_var("BASE_PATH", ""); + } + let config = Config::from_env(); + assert!(config.base_path.is_none()); + } + + #[test] + #[serial] + fn from_env_base_path_slash_only_becomes_none() { + unsafe { + clear_env(); + set_required_env(); + env::set_var("BASE_PATH", "/"); + } + let config = Config::from_env(); + assert!(config.base_path.is_none()); + } + + #[test] + #[serial] + #[should_panic(expected = "BASE_PATH must start with '/'")] + fn from_env_base_path_without_leading_slash_panics() { + unsafe { + clear_env(); + set_required_env(); + env::set_var("BASE_PATH", "hv"); + } + Config::from_env(); + } + + #[test] + fn effective_public_url_without_base_path() { + let config = Config { + host: String::new(), + port: 3000, + database_url: String::new(), + database_backend: DatabaseBackend::Postgres, + public_url: "https://example.com".into(), + session_secret: String::new(), + jetstream_url: String::new(), + relay_url: String::new(), + plc_url: String::new(), + static_dir: String::new(), + base_path: None, + event_log_retention_days: 30, + app_name: None, + logo_uri: None, + tos_uri: None, + policy_uri: None, + token_encryption_key: None, + default_rate_limit_capacity: 100, + default_rate_limit_refill_rate: 2.0, + }; + assert_eq!(config.effective_public_url(), "https://example.com"); + } + + #[test] + fn effective_public_url_with_base_path() { + let config = Config { + host: String::new(), + port: 3000, + database_url: String::new(), + database_backend: DatabaseBackend::Postgres, + public_url: "https://example.com".into(), + session_secret: String::new(), + jetstream_url: String::new(), + relay_url: String::new(), + plc_url: String::new(), + static_dir: String::new(), + base_path: Some("/hv".into()), + event_log_retention_days: 30, + app_name: None, + logo_uri: None, + tos_uri: None, + policy_uri: None, + token_encryption_key: None, + default_rate_limit_capacity: 100, + default_rate_limit_refill_rate: 2.0, + }; + assert_eq!(config.effective_public_url(), "https://example.com/hv"); + } + + #[test] + fn effective_public_url_trims_trailing_slash() { + let config = Config { + host: String::new(), + port: 3000, + database_url: String::new(), + database_backend: DatabaseBackend::Postgres, + public_url: "https://example.com/".into(), + session_secret: String::new(), + jetstream_url: String::new(), + relay_url: String::new(), + plc_url: String::new(), + static_dir: String::new(), + base_path: Some("/hv".into()), + event_log_retention_days: 30, + app_name: None, + logo_uri: None, + tos_uri: None, + policy_uri: None, + token_encryption_key: None, + default_rate_limit_capacity: 100, + default_rate_limit_refill_rate: 2.0, + }; + assert_eq!(config.effective_public_url(), "https://example.com/hv"); + } + + #[test] + fn url_with_base_path_appends() { + let config = Config { + host: String::new(), + port: 3000, + database_url: String::new(), + database_backend: DatabaseBackend::Postgres, + public_url: String::new(), + session_secret: String::new(), + jetstream_url: String::new(), + relay_url: String::new(), + plc_url: String::new(), + static_dir: String::new(), + base_path: Some("/hv".into()), + event_log_retention_days: 30, + app_name: None, + logo_uri: None, + tos_uri: None, + policy_uri: None, + token_encryption_key: None, + default_rate_limit_capacity: 100, + default_rate_limit_refill_rate: 2.0, + }; + assert_eq!( + config.url_with_base_path("https://otherdomain.com"), + "https://otherdomain.com/hv" + ); + } + + #[test] + fn url_with_base_path_without_base_path() { + let config = Config { + host: String::new(), + port: 3000, + database_url: String::new(), + database_backend: DatabaseBackend::Postgres, + public_url: String::new(), + session_secret: String::new(), + jetstream_url: String::new(), + relay_url: String::new(), + plc_url: String::new(), + static_dir: String::new(), + base_path: None, + event_log_retention_days: 30, + app_name: None, + logo_uri: None, + tos_uri: None, + policy_uri: None, + token_encryption_key: None, + default_rate_limit_capacity: 100, + default_rate_limit_refill_rate: 2.0, + }; + assert_eq!( + config.url_with_base_path("https://otherdomain.com"), + "https://otherdomain.com" + ); + } } diff --git a/src/external_auth/routes.rs b/src/external_auth/routes.rs index d5d9fcd..36f406c 100644 --- a/src/external_auth/routes.rs +++ b/src/external_auth/routes.rs @@ -130,8 +130,8 @@ async fn authorize( // Build the backend callback URL for OpenID/OAuth return_to // This ensures the auth provider redirects back to the backend, not the frontend let domain_url = domain - .map(|d| d.0.url.clone()) - .unwrap_or_else(|| app_state.config.public_url.clone()); + .map(|d| app_state.config.url_with_base_path(&d.0.url)) + .unwrap_or_else(|| app_state.config.effective_public_url()); let callback_url = format!( "{}/external-auth/{}/callback", diff --git a/src/lua/atproto_api.rs b/src/lua/atproto_api.rs index bc1c614..bde9321 100644 --- a/src/lua/atproto_api.rs +++ b/src/lua/atproto_api.rs @@ -492,6 +492,7 @@ mod tests { relay_url: String::new(), plc_url: plc_url.to_string(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index 41e68bf..e2fb031 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -632,6 +632,7 @@ mod tests { relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/src/lua/execute.rs b/src/lua/execute.rs index c1548ab..c2c0c0c 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -1089,6 +1089,7 @@ mod tests { relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/src/lua/http_api.rs b/src/lua/http_api.rs index 5e5b5d6..39b7a22 100644 --- a/src/lua/http_api.rs +++ b/src/lua/http_api.rs @@ -98,6 +98,7 @@ mod tests { relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/src/lua/xrpc_api.rs b/src/lua/xrpc_api.rs index 0b78ae6..308be59 100644 --- a/src/lua/xrpc_api.rs +++ b/src/lua/xrpc_api.rs @@ -202,6 +202,7 @@ mod tests { relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/src/main.rs b/src/main.rs index 079e61b..8145cf4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -411,7 +411,10 @@ async fn main() { // Build atrium-oauth client let dns = NativeDnsResolver::new(); - let callback_url = format!("{}/auth/callback", config.public_url.trim_end_matches('/')); + let callback_url = format!( + "{}/auth/callback", + config.effective_public_url().trim_end_matches('/') + ); let atrium_http = Arc::new(DefaultHttpClient::default()); let did_resolver = CommonDidResolver::new(CommonDidResolverConfig { @@ -459,9 +462,9 @@ async fn main() { client_metadata: AtprotoClientMetadata { client_id: format!( "{}/oauth-client-metadata.json", - config.public_url.trim_end_matches('/') + config.effective_public_url().trim_end_matches('/') ), - client_uri: Some(config.public_url.clone()), + client_uri: Some(config.effective_public_url()), redirect_uris: vec![callback_url], token_endpoint_auth_method: AuthMethod::None, grant_types: vec![GrantType::AuthorizationCode, GrantType::RefreshToken], @@ -526,10 +529,12 @@ async fn main() { continue; // Already registered above } - let domain_callback_url = format!("{}/auth/callback", domain.url.trim_end_matches('/')); + let domain_base_url = config.url_with_base_path(&domain.url); + let domain_callback_url = + format!("{}/auth/callback", domain_base_url.trim_end_matches('/')); let domain_client_id = format!( "{}/oauth-client-metadata.json", - domain.url.trim_end_matches('/') + domain_base_url.trim_end_matches('/') ); let domain_http = Arc::new(DefaultHttpClient::default()); @@ -549,7 +554,7 @@ async fn main() { match atrium_oauth::OAuthClient::new(OAuthClientConfig { client_metadata: AtprotoClientMetadata { client_id: domain_client_id, - client_uri: Some(domain.url.clone()), + client_uri: Some(domain_base_url.clone()), redirect_uris: vec![domain_callback_url], token_endpoint_auth_method: AuthMethod::None, grant_types: vec![GrantType::AuthorizationCode, GrantType::RefreshToken], diff --git a/src/server.rs b/src/server.rs index 11e470b..5699604 100644 --- a/src/server.rs +++ b/src/server.rs @@ -132,11 +132,22 @@ pub fn router(state: AppState) -> Router { resolve_domain, )); - Router::new() - .route("/health", get(health)) + let app_routes = Router::new() .nest("/admin", admin::admin_routes(state.clone())) .merge(domain_routes) - .fallback_service(serve_dir) + .fallback_service(serve_dir); + + let outer = if let Some(ref base_path) = state.config.base_path { + Router::new() + .route("/health", get(health)) + .nest(base_path, app_routes) + } else { + Router::new() + .route("/health", get(health)) + .merge(app_routes) + }; + + outer .layer(TraceLayer::new_for_http()) .layer( CorsLayer::new() @@ -166,8 +177,8 @@ async fn config_endpoint( req: axum::extract::Request, ) -> Json { let domain_url = crate::domain_middleware::extract_domain(&req) - .map(|d| d.url.clone()) - .unwrap_or_else(|| state.config.public_url.clone()); + .map(|d| state.config.url_with_base_path(&d.url)) + .unwrap_or_else(|| state.config.effective_public_url()); let pool = &state.db; let backend = state.db_backend; @@ -223,11 +234,12 @@ async fn client_metadata( State(state): State, req: axum::extract::Request, ) -> Json { - let domain_url = crate::domain_middleware::extract_domain(&req) + let raw_domain_url = crate::domain_middleware::extract_domain(&req) .map(|d| d.url.clone()) .unwrap_or_else(|| state.config.public_url.clone()); + let domain_url = state.config.url_with_base_path(&raw_domain_url); - let oauth_client = state.oauth.get_for_domain(&domain_url); + let oauth_client = state.oauth.get_for_domain(&raw_domain_url); let mut metadata = serde_json::to_value(&oauth_client.client_metadata).unwrap_or_default(); // The `client_id` field in the response must exactly match the URL the diff --git a/tests/common/app.rs b/tests/common/app.rs index c749a77..4b82744 100644 --- a/tests/common/app.rs +++ b/tests/common/app.rs @@ -54,6 +54,7 @@ impl TestApp { relay_url: mock_url.clone(), plc_url: mock_url.clone(), static_dir: "./web/out".into(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/tests/lua_atproto_api.rs b/tests/lua_atproto_api.rs index 3302244..94a5b64 100644 --- a/tests/lua_atproto_api.rs +++ b/tests/lua_atproto_api.rs @@ -27,6 +27,7 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/tests/lua_db_api.rs b/tests/lua_db_api.rs index ada3107..0e2ce49 100644 --- a/tests/lua_db_api.rs +++ b/tests/lua_db_api.rs @@ -30,6 +30,7 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> relay_url: String::new(), plc_url: String::new(), static_dir: String::new(), + base_path: None, event_log_retention_days: 30, app_name: None, logo_uri: None, diff --git a/web/next.config.ts b/web/next.config.ts index 93e2742..7e073de 100644 --- a/web/next.config.ts +++ b/web/next.config.ts @@ -1,11 +1,13 @@ import type { NextConfig } from "next"; const apiBase = process.env.API_URL || "http://localhost:3000"; +const basePath = process.env.NEXT_PUBLIC_BASE_PATH || undefined; const nextConfig: NextConfig = { reactCompiler: true, trailingSlash: true, images: { unoptimized: true }, + basePath, }; if (process.env.NODE_ENV === "production") { diff --git a/web/src/app/dashboard/about/page.tsx b/web/src/app/dashboard/about/page.tsx index daa4728..614253f 100644 --- a/web/src/app/dashboard/about/page.tsx +++ b/web/src/app/dashboard/about/page.tsx @@ -25,7 +25,7 @@ export default function AboutPage() { const [error, setError] = useState(null) useEffect(() => { - fetch("/config", { credentials: "same-origin" }) + fetch(`${process.env.NEXT_PUBLIC_BASE_PATH || ""}/config`, { credentials: "same-origin" }) .then((r) => { if (!r.ok) throw new Error("Failed to load config") return r.json() diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index a6ce249..f5fab6a 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -57,6 +57,8 @@ export type { BulkActionResponse, } from "@/types/dead-letters" +const BASE_PATH = process.env.NEXT_PUBLIC_BASE_PATH || "" + export class ApiError extends Error { status: number constructor(status: number, message: string) { @@ -78,7 +80,7 @@ async function apiFetch( headers["Content-Type"] = "application/json" } - const res = await fetch(path, { + const res = await fetch(`${BASE_PATH}${path}`, { ...options, headers: { ...headers, ...options?.headers }, credentials: "same-origin", @@ -239,7 +241,7 @@ export async function xrpcQuery( params?: Record ): Promise { const search = params ? `?${new URLSearchParams(params)}` : "" - const res = await fetch(`/xrpc/${encodeURIComponent(method)}${search}`) + const res = await fetch(`${BASE_PATH}/xrpc/${encodeURIComponent(method)}${search}`) if (!res.ok) { const text = await res.text().catch(() => res.statusText) throw new ApiError(res.status, text) @@ -323,7 +325,7 @@ export function deleteSetting(key: string) { export async function uploadLogo(file: File) { const formData = new FormData() formData.append("file", file) - const res = await fetch("/admin/settings/logo", { + const res = await fetch(`${BASE_PATH}/admin/settings/logo`, { method: "PUT", body: formData, credentials: "same-origin", diff --git a/web/src/lib/auth-context.tsx b/web/src/lib/auth-context.tsx index d8a1379..a817b45 100644 --- a/web/src/lib/auth-context.tsx +++ b/web/src/lib/auth-context.tsx @@ -41,7 +41,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { async function init() { try { // Check if the user has a valid session cookie - const resp = await fetch("/auth/me", { credentials: "same-origin" }) + const resp = await fetch(`${process.env.NEXT_PUBLIC_BASE_PATH || ""}/auth/me`, { credentials: "same-origin" }) if (resp.ok) { const data = await resp.json() if (!cancelled && data.did) { @@ -67,7 +67,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { const login = useCallback(async (handle: string) => { setError(null) - const resp = await fetch(`/auth/login?handle=${encodeURIComponent(handle)}`, { + const resp = await fetch(`${process.env.NEXT_PUBLIC_BASE_PATH || ""}/auth/login?handle=${encodeURIComponent(handle)}`, { credentials: "same-origin", }) @@ -83,7 +83,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) { const logout = useCallback(async () => { try { - await fetch("/auth/logout", { + await fetch(`${process.env.NEXT_PUBLIC_BASE_PATH || ""}/auth/logout`, { method: "POST", credentials: "same-origin", }) diff --git a/web/src/lib/config-context.tsx b/web/src/lib/config-context.tsx index db6a35b..875627e 100644 --- a/web/src/lib/config-context.tsx +++ b/web/src/lib/config-context.tsx @@ -23,7 +23,7 @@ export function ConfigProvider({ children }: { children: React.ReactNode }) { const [error, setError] = useState(null) useEffect(() => { - fetch("/config") + fetch(`${process.env.NEXT_PUBLIC_BASE_PATH || ""}/config`) .then((res) => { if (!res.ok) throw new Error(`Config fetch failed: ${res.status}`) return res.json() -- 2.51.2 From a89d00f934134df3ef58f880f264b9e11bb431ab Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 09:54:11 -0500 Subject: [PATCH 015/250] feat(xrpc-proxy): add settings to control the XRPC proxy Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/lib/api.ts | 555 ++++++++++++++++++++++----------------------- 1 file changed, 268 insertions(+), 287 deletions(-) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index f5fab6a..f05a348 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -1,15 +1,18 @@ -import type { ApiKeySummary, CreateApiKeyResponse } from "@/types/api-keys" -import type { StatsResponse } from "@/types/stats" -import type { LexiconSummary, LexiconDetail } from "@/types/lexicons" -import type { NetworkLexiconSummary } from "@/types/network-lexicons" -import type { BackfillJob } from "@/types/backfill" -import type { UserSummary } from "@/types/users" -import type { AdminListRecordsResponse } from "@/types/records" -import type { EventsListResponse } from "@/types/events" -import type { ScriptVariableSummary } from "@/types/script-variables" -import type { LabelerSummary } from "@/types/labelers" -import type { ApiClientSummary, CreateApiClientResponse } from "@/types/api-clients" -import type { SettingEntry } from "@/types/settings" +import type { ApiKeySummary, CreateApiKeyResponse } from "@/types/api-keys"; +import type { StatsResponse } from "@/types/stats"; +import type { LexiconSummary, LexiconDetail } from "@/types/lexicons"; +import type { NetworkLexiconSummary } from "@/types/network-lexicons"; +import type { BackfillJob } from "@/types/backfill"; +import type { UserSummary } from "@/types/users"; +import type { AdminListRecordsResponse } from "@/types/records"; +import type { EventsListResponse } from "@/types/events"; +import type { ScriptVariableSummary } from "@/types/script-variables"; +import type { LabelerSummary } from "@/types/labelers"; +import type { + ApiClientSummary, + CreateApiClientResponse, +} from "@/types/api-clients"; +import type { SettingEntry } from "@/types/settings"; import type { ExternalProvider, LinkedAccount, @@ -17,28 +20,31 @@ import type { SyncResponse, UnlinkResponse, ConnectResponse, -} from "@/types/external-accounts" +} from "@/types/external-accounts"; import type { DeadLettersListResponse, DeadLetterDetail, DeadLetterCountResponse, BulkActionResponse, -} from "@/types/dead-letters" - -export type { ApiKeySummary, CreateApiKeyResponse } from "@/types/api-keys" -export type { CollectionStat, StatsResponse } from "@/types/stats" -export type { LexiconSummary, LexiconDetail } from "@/types/lexicons" -export type { NetworkLexiconSummary } from "@/types/network-lexicons" -export type { BackfillJob } from "@/types/backfill" -export type { UserSummary } from "@/types/users" -export type { AdminRecord, AdminListRecordsResponse } from "@/types/records" -export type { EventLogEntry, EventsListResponse } from "@/types/events" -export type { ScriptVariableSummary } from "@/types/script-variables" -export type { LabelerSummary } from "@/types/labelers" -export type { RecordLabel } from "@/types/records" -export type { ApiClientSummary, CreateApiClientResponse } from "@/types/api-clients" -export type { SettingEntry, InstanceSettings } from "@/types/settings" -export { INSTANCE_SETTING_KEYS } from "@/types/settings" +} from "@/types/dead-letters"; + +export type { ApiKeySummary, CreateApiKeyResponse } from "@/types/api-keys"; +export type { CollectionStat, StatsResponse } from "@/types/stats"; +export type { LexiconSummary, LexiconDetail } from "@/types/lexicons"; +export type { NetworkLexiconSummary } from "@/types/network-lexicons"; +export type { BackfillJob } from "@/types/backfill"; +export type { UserSummary } from "@/types/users"; +export type { AdminRecord, AdminListRecordsResponse } from "@/types/records"; +export type { EventLogEntry, EventsListResponse } from "@/types/events"; +export type { ScriptVariableSummary } from "@/types/script-variables"; +export type { LabelerSummary } from "@/types/labelers"; +export type { RecordLabel } from "@/types/records"; +export type { + ApiClientSummary, + CreateApiClientResponse, +} from "@/types/api-clients"; +export type { SettingEntry, InstanceSettings } from "@/types/settings"; +export { INSTANCE_SETTING_KEYS } from "@/types/settings"; export type { ExternalProvider, LinkedAccount, @@ -48,22 +54,22 @@ export type { ConnectResponse, ConfigSchema, ConfigProperty, -} from "@/types/external-accounts" +} from "@/types/external-accounts"; export type { DeadLetterSummary, DeadLetterDetail, DeadLettersListResponse, DeadLetterCountResponse, BulkActionResponse, -} from "@/types/dead-letters" +} from "@/types/dead-letters"; -const BASE_PATH = process.env.NEXT_PUBLIC_BASE_PATH || "" +const BASE_PATH = process.env.NEXT_PUBLIC_BASE_PATH || ""; export class ApiError extends Error { - status: number + status: number; constructor(status: number, message: string) { - super(message) - this.status = status + super(message); + this.status = status; } } @@ -71,453 +77,425 @@ async function apiFetch( path: string, options?: RequestInit, ): Promise { - const headers: Record = {} + const headers: Record = {}; if ( options?.method === "POST" || options?.method === "PUT" || options?.method === "PATCH" ) { - headers["Content-Type"] = "application/json" + headers["Content-Type"] = "application/json"; } const res = await fetch(`${BASE_PATH}${path}`, { ...options, headers: { ...headers, ...options?.headers }, credentials: "same-origin", - }) + }); if (!res.ok) { - const text = await res.text().catch(() => res.statusText) - throw new ApiError(res.status, text) + const text = await res.text().catch(() => res.statusText); + throw new ApiError(res.status, text); } - if (res.status === 204) return null as T - const text = await res.text() - if (!text) return null as T - return JSON.parse(text) + if (res.status === 204) return null as T; + const text = await res.text(); + if (!text) return null as T; + return JSON.parse(text); } // Stats export function getStats() { - return apiFetch("/admin/stats") + return apiFetch("/admin/stats"); } // Lexicons export function getLexicons() { - return apiFetch("/admin/lexicons") + return apiFetch("/admin/lexicons"); } export function getLexicon(id: string) { - return apiFetch( - `/admin/lexicons/${encodeURIComponent(id)}`, - ) + return apiFetch(`/admin/lexicons/${encodeURIComponent(id)}`); } -export function uploadLexicon( - body: { - lexicon_json: unknown - backfill?: boolean - target_collection?: string - action?: string - script?: string - index_hook?: string - token_cost?: number | null - } -) { +export function uploadLexicon(body: { + lexicon_json: unknown; + backfill?: boolean; + target_collection?: string; + action?: string; + script?: string; + index_hook?: string; + token_cost?: number | null; +}) { return apiFetch<{ id: string; revision: number }>("/admin/lexicons", { method: "POST", body: JSON.stringify(body), - }) + }); } export function deleteLexicon(id: string) { return apiFetch(`/admin/lexicons/${encodeURIComponent(id)}`, { method: "DELETE", - }) + }); } // Network Lexicons export function getNetworkLexicons() { - return apiFetch("/admin/network-lexicons") + return apiFetch("/admin/network-lexicons"); } -export function addNetworkLexicon( - body: { nsid: string; target_collection?: string } -) { +export function addNetworkLexicon(body: { + nsid: string; + target_collection?: string; +}) { return apiFetch<{ nsid: string; authority_did: string; revision: number }>( "/admin/network-lexicons", - { method: "POST", body: JSON.stringify(body) } - ) + { method: "POST", body: JSON.stringify(body) }, + ); } -export function deleteNetworkLexicon( - nsid: string -) { - return apiFetch( - `/admin/network-lexicons/${encodeURIComponent(nsid)}`, - { method: "DELETE" } - ) +export function deleteNetworkLexicon(nsid: string) { + return apiFetch(`/admin/network-lexicons/${encodeURIComponent(nsid)}`, { + method: "DELETE", + }); } // Backfill export function getBackfillJobs() { - return apiFetch("/admin/backfill/status") + return apiFetch("/admin/backfill/status"); } -export function createBackfillJob( - body: { collection?: string; did?: string } -) { +export function createBackfillJob(body: { collection?: string; did?: string }) { return apiFetch<{ id: string; status: string }>("/admin/backfill", { method: "POST", body: JSON.stringify(body), - }) + }); } // Users export function getUsers() { - return apiFetch("/admin/users") + return apiFetch("/admin/users"); } export function getUser(id: string) { - return apiFetch(`/admin/users/${encodeURIComponent(id)}`) + return apiFetch(`/admin/users/${encodeURIComponent(id)}`); } -export function addUser( - body: { did: string; template?: string; permissions?: string[] } -) { +export function addUser(body: { + did: string; + template?: string; + permissions?: string[]; +}) { return apiFetch<{ id: string; did: string }>("/admin/users", { method: "POST", body: JSON.stringify(body), - }) + }); } export function deleteUser(id: string) { return apiFetch(`/admin/users/${encodeURIComponent(id)}`, { method: "DELETE", - }) + }); } export function updateUserPermissions( id: string, - body: { grant?: string[]; revoke?: string[] } + body: { grant?: string[]; revoke?: string[] }, ) { return apiFetch(`/admin/users/${encodeURIComponent(id)}/permissions`, { method: "PATCH", body: JSON.stringify(body), - }) + }); } -export function transferSuper( - body: { target_user_id: string } -) { +export function transferSuper(body: { target_user_id: string }) { return apiFetch("/admin/users/transfer-super", { method: "POST", body: JSON.stringify(body), - }) + }); } // API Keys export function getApiKeys() { - return apiFetch("/admin/api-keys") + return apiFetch("/admin/api-keys"); } -export function createApiKey( - body: { name: string; permissions: string[] } -) { +export function createApiKey(body: { name: string; permissions: string[] }) { return apiFetch("/admin/api-keys", { method: "POST", body: JSON.stringify(body), - }) + }); } export function revokeApiKey(id: string) { return apiFetch(`/admin/api-keys/${encodeURIComponent(id)}`, { method: "DELETE", - }) + }); } // XRPC (public, no auth needed) export async function xrpcQuery( method: string, - params?: Record + params?: Record, ): Promise { - const search = params ? `?${new URLSearchParams(params)}` : "" - const res = await fetch(`${BASE_PATH}/xrpc/${encodeURIComponent(method)}${search}`) + const search = params ? `?${new URLSearchParams(params)}` : ""; + const res = await fetch( + `${BASE_PATH}/xrpc/${encodeURIComponent(method)}${search}`, + ); if (!res.ok) { - const text = await res.text().catch(() => res.statusText) - throw new ApiError(res.status, text) + const text = await res.text().catch(() => res.statusText); + throw new ApiError(res.status, text); } - return res.json() + return res.json(); } // Admin records browsing export function getAdminRecords( collection: string, limit?: number, - cursor?: string + cursor?: string, ) { - const params = new URLSearchParams({ collection }) - if (limit) params.set("limit", String(limit)) - if (cursor) params.set("cursor", cursor) - return apiFetch( - `/admin/records?${params}`, - ) + const params = new URLSearchParams({ collection }); + if (limit) params.set("limit", String(limit)); + if (cursor) params.set("cursor", cursor); + return apiFetch(`/admin/records?${params}`); } -export function deleteRecord( - uri: string -) { - return apiFetch( - `/admin/records?${new URLSearchParams({ uri })}`, - { method: "DELETE" } - ) +export function deleteRecord(uri: string) { + return apiFetch(`/admin/records?${new URLSearchParams({ uri })}`, { + method: "DELETE", + }); } -export function deleteCollectionRecords( - collection: string, -) { +export function deleteCollectionRecords(collection: string) { return apiFetch<{ deleted: number }>( `/admin/records/collection?${new URLSearchParams({ collection })}`, { method: "DELETE" }, - ) + ); } // Script Variables export function getScriptVariables() { - return apiFetch("/admin/script-variables") + return apiFetch("/admin/script-variables"); } -export function upsertScriptVariable( - body: { key: string; value: string } -) { +export function upsertScriptVariable(body: { key: string; value: string }) { return apiFetch("/admin/script-variables", { method: "POST", body: JSON.stringify(body), - }) + }); } -export function deleteScriptVariable( - key: string -) { - return apiFetch( - `/admin/script-variables/${encodeURIComponent(key)}`, - { method: "DELETE" } - ) +export function deleteScriptVariable(key: string) { + return apiFetch(`/admin/script-variables/${encodeURIComponent(key)}`, { + method: "DELETE", + }); } // Settings export function getSettings() { - return apiFetch("/admin/settings") + return apiFetch("/admin/settings"); } export function upsertSetting(key: string, value: string) { return apiFetch(`/admin/settings/${encodeURIComponent(key)}`, { method: "PUT", body: JSON.stringify({ value }), - }) + }); } export function deleteSetting(key: string) { return apiFetch(`/admin/settings/${encodeURIComponent(key)}`, { method: "DELETE", - }) + }); } export async function uploadLogo(file: File) { - const formData = new FormData() - formData.append("file", file) + const formData = new FormData(); + formData.append("file", file); const res = await fetch(`${BASE_PATH}/admin/settings/logo`, { method: "PUT", body: formData, credentials: "same-origin", - }) + }); if (!res.ok) { - const text = await res.text().catch(() => res.statusText) - throw new ApiError(res.status, text) + const text = await res.text().catch(() => res.statusText); + throw new ApiError(res.status, text); } } export function deleteLogo() { - return apiFetch("/admin/settings/logo", { method: "DELETE" }) + return apiFetch("/admin/settings/logo", { method: "DELETE" }); } // Feature Flags export type FeatureFlag = { - key: string - name: string - description: string - enabled: boolean -} + key: string; + name: string; + description: string; + enabled: boolean; +}; export function getFeatureFlags() { - return apiFetch("/admin/feature-flags") + return apiFetch("/admin/feature-flags"); } export function setFeatureFlag(key: string, enabled: boolean) { if (enabled) { - return upsertSetting(key, "true") + return upsertSetting(key, "true"); } - return deleteSetting(key) + return deleteSetting(key); } // Proxy config export type ProxyConfig = { - mode: "disabled" | "open" | "allowlist" | "blocklist" - nsids: string[] -} + mode: "disabled" | "open" | "allowlist" | "blocklist"; + nsids: string[]; +}; export function getProxyConfig() { - return apiFetch("/admin/settings/xrpc-proxy") + return apiFetch("/admin/settings/xrpc-proxy"); } export function updateProxyConfig(config: ProxyConfig) { return apiFetch("/admin/settings/xrpc-proxy", { method: "PUT", body: JSON.stringify(config), - }) + }); } // Labelers export function getLabelers() { - return apiFetch("/admin/labelers") + return apiFetch("/admin/labelers"); } -export function addLabeler( - body: { did: string } -) { +export function addLabeler(body: { did: string }) { return apiFetch("/admin/labelers", { method: "POST", body: JSON.stringify(body), - }) + }); } -export function updateLabeler( - did: string, - body: { status: string } -) { +export function updateLabeler(did: string, body: { status: string }) { return apiFetch(`/admin/labelers/${encodeURIComponent(did)}`, { method: "PATCH", body: JSON.stringify(body), - }) + }); } -export function deleteLabeler( - did: string -) { +export function deleteLabeler(did: string) { return apiFetch(`/admin/labelers/${encodeURIComponent(did)}`, { method: "DELETE", - }) + }); } // API Clients export function getApiClients() { - return apiFetch("/admin/api-clients") + return apiFetch("/admin/api-clients"); } export function getApiClient(id: string) { - return apiFetch(`/admin/api-clients/${encodeURIComponent(id)}`) -} - -export function createApiClient( - body: { - name: string - client_id_url: string - client_uri: string - redirect_uris: string[] - scopes?: string - client_type?: string - allowed_origins?: string[] - rate_limit_capacity: number | null - rate_limit_refill_rate: number | null - } -) { + return apiFetch( + `/admin/api-clients/${encodeURIComponent(id)}`, + ); +} + +export function createApiClient(body: { + name: string; + client_id_url: string; + client_uri: string; + redirect_uris: string[]; + scopes?: string; + client_type?: string; + allowed_origins?: string[]; + rate_limit_capacity: number | null; + rate_limit_refill_rate: number | null; +}) { return apiFetch("/admin/api-clients", { method: "POST", body: JSON.stringify(body), - }) + }); } export function updateApiClient( id: string, body: { - name?: string - client_uri?: string - redirect_uris?: string[] - scopes?: string - allowed_origins?: string[] | null - rate_limit_capacity?: number | null - rate_limit_refill_rate?: number | null - is_active?: boolean - } + name?: string; + client_uri?: string; + redirect_uris?: string[]; + scopes?: string; + allowed_origins?: string[] | null; + rate_limit_capacity?: number | null; + rate_limit_refill_rate?: number | null; + is_active?: boolean; + }, ) { return apiFetch(`/admin/api-clients/${encodeURIComponent(id)}`, { method: "PUT", body: JSON.stringify(body), - }) + }); } export function deleteApiClient(id: string) { return apiFetch(`/admin/api-clients/${encodeURIComponent(id)}`, { method: "DELETE", - }) + }); } // Event Logs -export function getEvents( - params?: { - category?: string - severity?: string - subject?: string - cursor?: string - limit?: number - } -) { - const searchParams = new URLSearchParams() - if (params?.category) searchParams.set("category", params.category) - if (params?.severity) searchParams.set("severity", params.severity) - if (params?.subject) searchParams.set("subject", params.subject) - if (params?.cursor) searchParams.set("cursor", params.cursor) - if (params?.limit) searchParams.set("limit", String(params.limit)) - const qs = searchParams.toString() - return apiFetch( - `/admin/events${qs ? `?${qs}` : ""}`, - ) +export function getEvents(params?: { + category?: string; + severity?: string; + subject?: string; + cursor?: string; + limit?: number; +}) { + const searchParams = new URLSearchParams(); + if (params?.category) searchParams.set("category", params.category); + if (params?.severity) searchParams.set("severity", params.severity); + if (params?.subject) searchParams.set("subject", params.subject); + if (params?.cursor) searchParams.set("cursor", params.cursor); + if (params?.limit) searchParams.set("limit", String(params.limit)); + const qs = searchParams.toString(); + return apiFetch(`/admin/events${qs ? `?${qs}` : ""}`); } // External Accounts export function getExternalProviders() { - return apiFetch("/external-auth/providers") + return apiFetch("/external-auth/providers"); } export function getLinkedAccounts() { - return apiFetch("/external-auth/accounts") + return apiFetch("/external-auth/accounts"); } export function authorizeExternal(pluginId: string, redirectUri: string) { - const params = new URLSearchParams({ redirect_uri: redirectUri }) + const params = new URLSearchParams({ redirect_uri: redirectUri }); return apiFetch( `/external-auth/${encodeURIComponent(pluginId)}/authorize?${params}`, - ) + ); } export function syncExternal(pluginId: string) { return apiFetch( `/external-auth/${encodeURIComponent(pluginId)}/sync`, { method: "POST" }, - ) + ); } export function unlinkExternal(pluginId: string) { return apiFetch( `/external-auth/${encodeURIComponent(pluginId)}/unlink`, { method: "POST" }, - ) + ); } -export function connectWithConfig(pluginId: string, config: Record) { +export function connectWithConfig( + pluginId: string, + config: Record, +) { return apiFetch( `/external-auth/${encodeURIComponent(pluginId)}/connect`, { method: "POST", body: JSON.stringify({ config }) }, - ) + ); } // Plugins @@ -525,30 +503,30 @@ import type { PluginSummary, PluginsListResponse, OfficialPluginsListResponse, -} from "@/types/plugins" +} from "@/types/plugins"; export type { PluginSummary, PluginsListResponse, OfficialPluginSummary, OfficialPluginsListResponse, ReleaseEntry, -} from "@/types/plugins" +} from "@/types/plugins"; export function getPlugins() { - return apiFetch("/admin/plugins") + return apiFetch("/admin/plugins"); } export function addPlugin(body: { url: string; sha256?: string }) { return apiFetch("/admin/plugins", { method: "POST", body: JSON.stringify(body), - }) + }); } export function removePlugin(id: string) { return apiFetch(`/admin/plugins/${encodeURIComponent(id)}`, { method: "DELETE", - }) + }); } export function reloadPlugin(id: string, body?: { url?: string }) { @@ -558,54 +536,57 @@ export function reloadPlugin(id: string, body?: { url?: string }) { method: "POST", body: body ? JSON.stringify(body) : undefined, }, - ) + ); } export function getOfficialPlugins() { - return apiFetch("/admin/plugins/official") + return apiFetch("/admin/plugins/official"); } export function checkPluginUpdate(id: string) { return apiFetch( `/admin/plugins/${encodeURIComponent(id)}/check-update`, { method: "POST" }, - ) + ); } export interface PluginSecretsResponse { - plugin_id: string - secrets: Record + plugin_id: string; + secrets: Record; } export function getPluginSecrets(id: string) { return apiFetch( `/admin/plugins/${encodeURIComponent(id)}/secrets`, - ) + ); } -export function updatePluginSecrets(id: string, secrets: Record) { - return apiFetch( - `/admin/plugins/${encodeURIComponent(id)}/secrets`, - { method: "PUT", body: JSON.stringify({ secrets }) }, - ) +export function updatePluginSecrets( + id: string, + secrets: Record, +) { + return apiFetch(`/admin/plugins/${encodeURIComponent(id)}/secrets`, { + method: "PUT", + body: JSON.stringify({ secrets }), + }); } export interface SecretDefinition { - key: string - name: string - description: string | null + key: string; + name: string; + description: string | null; } export interface PluginPreview { - id: string - name: string - version: string - description: string | null - icon_url: string | null - auth_type: string - required_secrets: SecretDefinition[] - manifest_url: string - wasm_url: string + id: string; + name: string; + version: string; + description: string | null; + icon_url: string | null; + auth_type: string; + required_secrets: SecretDefinition[]; + manifest_url: string; + wasm_url: string; } export function previewPlugin(url: string, signal?: AbortSignal) { @@ -613,7 +594,7 @@ export function previewPlugin(url: string, signal?: AbortSignal) { method: "POST", body: JSON.stringify({ url }), signal, - }) + }); } // --------------------------------------------------------------------------- @@ -621,84 +602,84 @@ export function previewPlugin(url: string, signal?: AbortSignal) { // --------------------------------------------------------------------------- export function getDeadLetters(params?: { - collection?: string - resolved?: string - cursor?: string - limit?: number + collection?: string; + resolved?: string; + cursor?: string; + limit?: number; }) { - const searchParams = new URLSearchParams() - if (params?.collection) searchParams.set("collection", params.collection) - if (params?.resolved) searchParams.set("resolved", params.resolved) - if (params?.cursor) searchParams.set("cursor", params.cursor) - if (params?.limit) searchParams.set("limit", String(params.limit)) - const qs = searchParams.toString() + const searchParams = new URLSearchParams(); + if (params?.collection) searchParams.set("collection", params.collection); + if (params?.resolved) searchParams.set("resolved", params.resolved); + if (params?.cursor) searchParams.set("cursor", params.cursor); + if (params?.limit) searchParams.set("limit", String(params.limit)); + const qs = searchParams.toString(); return apiFetch( `/admin/dead-letters${qs ? `?${qs}` : ""}`, - ) + ); } export function getDeadLetterCount(resolved?: string) { - const searchParams = new URLSearchParams() - if (resolved) searchParams.set("resolved", resolved) - const qs = searchParams.toString() + const searchParams = new URLSearchParams(); + if (resolved) searchParams.set("resolved", resolved); + const qs = searchParams.toString(); return apiFetch( `/admin/dead-letters/count${qs ? `?${qs}` : ""}`, - ) + ); } export function getDeadLetter(id: string) { return apiFetch( `/admin/dead-letters/${encodeURIComponent(id)}`, - ) + ); } export function retryDeadLetter(id: string) { return apiFetch(`/admin/dead-letters/${encodeURIComponent(id)}/retry`, { method: "POST", - }) + }); } export function reindexDeadLetter(id: string) { return apiFetch(`/admin/dead-letters/${encodeURIComponent(id)}/reindex`, { method: "POST", - }) + }); } export function dismissDeadLetter(id: string) { return apiFetch(`/admin/dead-letters/${encodeURIComponent(id)}/dismiss`, { method: "POST", - }) + }); } export function bulkDismissDeadLetters(body: { - ids?: string[] - all?: boolean - collection?: string + ids?: string[]; + all?: boolean; + collection?: string; }) { return apiFetch("/admin/dead-letters/bulk/dismiss", { method: "POST", body: JSON.stringify(body), - }) + }); } export function bulkRetryDeadLetters(body: { - ids?: string[] - all?: boolean - collection?: string + ids?: string[]; + all?: boolean; + collection?: string; }) { return apiFetch("/admin/dead-letters/bulk/retry", { method: "POST", body: JSON.stringify(body), - }) + }); } export function bulkReindexDeadLetters(body: { - ids?: string[] - all?: boolean - collection?: string + ids?: string[]; + all?: boolean; + collection?: string; }) { return apiFetch("/admin/dead-letters/bulk/reindex", { method: "POST", body: JSON.stringify(body), - }) + }); } -- 2.51.2 From ba80630de80cac0a06768ba85772d32ac6a74044 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 09:54:31 -0500 Subject: [PATCH 016/250] docs: add info about the XRPC proxy Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/getting-started/dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/docs/getting-started/dashboard.md b/packages/docs/docs/getting-started/dashboard.md index b5292bf..2873c02 100644 --- a/packages/docs/docs/getting-started/dashboard.md +++ b/packages/docs/docs/getting-started/dashboard.md @@ -87,7 +87,7 @@ Configure instance-level settings: application name, logo, terms of service URL, Control which unrecognized XRPC methods are forwarded to their resolved authority. Choose from four modes: **Disabled** (block all proxy requests), **Open** (proxy everything — the default), **Allowlist** (only proxy NSIDs matching your patterns), or **Blocklist** (proxy everything except matching patterns). Allowlist and blocklist modes accept NSID patterns with trailing wildcards (e.g. `com.example.*`). Locally registered lexicons are always served regardless of this setting. See [XRPC Proxy](../reference/admin/xrpc-proxy.md) for the full API reference. -### ENV Variables +### Environment Variables View the current values of all environment variables that affect HappyView's behavior. This is a read-only view — values are set via your deployment environment, not the dashboard. -- 2.51.2 From 611888a1e60c810ed3d000b8e8a2b8d28a88c9fa Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 09:59:07 -0500 Subject: [PATCH 017/250] docs: update the dashboard docs Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/getting-started/dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/docs/getting-started/dashboard.md b/packages/docs/docs/getting-started/dashboard.md index 2873c02..b5292bf 100644 --- a/packages/docs/docs/getting-started/dashboard.md +++ b/packages/docs/docs/getting-started/dashboard.md @@ -87,7 +87,7 @@ Configure instance-level settings: application name, logo, terms of service URL, Control which unrecognized XRPC methods are forwarded to their resolved authority. Choose from four modes: **Disabled** (block all proxy requests), **Open** (proxy everything — the default), **Allowlist** (only proxy NSIDs matching your patterns), or **Blocklist** (proxy everything except matching patterns). Allowlist and blocklist modes accept NSID patterns with trailing wildcards (e.g. `com.example.*`). Locally registered lexicons are always served regardless of this setting. See [XRPC Proxy](../reference/admin/xrpc-proxy.md) for the full API reference. -### Environment Variables +### ENV Variables View the current values of all environment variables that affect HappyView's behavior. This is a read-only view — values are set via your deployment environment, not the dashboard. -- 2.51.2 From 6b3d542ec60e19887b2a1589b0b5b8526ef2b666 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 17:16:10 -0500 Subject: [PATCH 018/250] feat: permissioned spaces implementation Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/notifications.rs | 86 +++++++++++ src/spaces/sync.rs | 293 ++++++++++++++++++++++++++++++++++++ 2 files changed, 379 insertions(+) create mode 100644 src/spaces/notifications.rs create mode 100644 src/spaces/sync.rs diff --git a/src/spaces/notifications.rs b/src/spaces/notifications.rs new file mode 100644 index 0000000..3d17e12 --- /dev/null +++ b/src/spaces/notifications.rs @@ -0,0 +1,86 @@ +use serde::Deserialize; +use uuid::Uuid; + +use crate::db::DatabaseBackend; +use crate::error::AppError; +use crate::spaces::db; +use crate::spaces::types::*; + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct WriteNotification { + pub space_uri: String, + pub author_did: String, + pub collection: String, + pub rkey: String, + pub action: WriteAction, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum WriteAction { + Create, + Update, + Delete, +} + +/// Process a write notification by queuing a sync pull for the affected member. +/// +/// This marks the member's sync state as pending so the next sync pass picks it up. +pub async fn handle_write_notification( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + space_id: &str, + notification: &WriteNotification, +) -> Result<(), AppError> { + let existing = db::get_sync_state(pool, backend, space_id, ¬ification.author_did).await?; + + let state = SpaceSyncState { + id: existing + .map(|s| s.id) + .unwrap_or_else(|| Uuid::new_v4().to_string()), + space_id: space_id.to_string(), + member_did: notification.author_did.clone(), + cursor: None, + last_synced_at: None, + status: SyncStatus::Pending, + error: None, + }; + + db::upsert_sync_state(pool, backend, &state).await?; + + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn write_action_deserializes() { + let action: WriteAction = serde_json::from_str("\"create\"").unwrap(); + assert!(matches!(action, WriteAction::Create)); + + let action: WriteAction = serde_json::from_str("\"update\"").unwrap(); + assert!(matches!(action, WriteAction::Update)); + + let action: WriteAction = serde_json::from_str("\"delete\"").unwrap(); + assert!(matches!(action, WriteAction::Delete)); + } + + #[test] + fn write_notification_deserializes() { + let json = r#"{ + "spaceUri": "ats://did:plc:owner/com.example.forum/main", + "authorDid": "did:plc:alice", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "action": "create" + }"#; + + let notif: WriteNotification = serde_json::from_str(json).unwrap(); + assert_eq!(notif.author_did, "did:plc:alice"); + assert_eq!(notif.collection, "com.example.forum.post"); + assert!(matches!(notif.action, WriteAction::Create)); + } +} diff --git a/src/spaces/sync.rs b/src/spaces/sync.rs new file mode 100644 index 0000000..40d5f72 --- /dev/null +++ b/src/spaces/sync.rs @@ -0,0 +1,293 @@ +use uuid::Uuid; + +use crate::db::DatabaseBackend; +use crate::db::now_rfc3339; +use crate::error::AppError; +use crate::profile::resolve_pds_endpoint; +use crate::spaces::types::*; +use crate::spaces::{db, members}; + +/// Sync all members of a space by pulling records from their PDSes. +pub async fn sync_space( + http: &reqwest::Client, + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + plc_url: &str, + space_id: &str, + collections: &[String], +) -> Result { + let resolved = members::resolve_members(pool, backend, space_id).await?; + let mut results = Vec::new(); + + for member in &resolved { + let result = sync_member( + http, + pool, + backend, + plc_url, + space_id, + &member.did, + collections, + ) + .await; + + results.push(MemberSyncResult { + did: member.did.clone(), + records_synced: result.as_ref().map(|r| r.records_synced).unwrap_or(0), + error: result.err().map(|e| e.to_string()), + }); + } + + let total = results.iter().map(|r| r.records_synced).sum(); + + Ok(SyncSpaceResult { + members_processed: results.len(), + total_records_synced: total, + member_results: results, + }) +} + +/// Sync records from a single member's PDS for a given space. +pub async fn sync_member( + http: &reqwest::Client, + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + plc_url: &str, + space_id: &str, + member_did: &str, + collections: &[String], +) -> Result { + let state_id = match db::get_sync_state(pool, backend, space_id, member_did).await? { + Some(s) => s.id, + None => { + let id = Uuid::new_v4().to_string(); + let initial = SpaceSyncState { + id: id.clone(), + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: None, + last_synced_at: None, + status: SyncStatus::Pending, + error: None, + }; + db::upsert_sync_state(pool, backend, &initial).await?; + id + } + }; + + // Mark as syncing + let syncing_state = SpaceSyncState { + id: state_id.clone(), + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: None, + last_synced_at: None, + status: SyncStatus::Syncing, + error: None, + }; + db::upsert_sync_state(pool, backend, &syncing_state).await?; + + let result = pull_member_records( + http, + pool, + backend, + plc_url, + space_id, + member_did, + collections, + ) + .await; + + match result { + Ok(summary) => { + let done = SpaceSyncState { + id: state_id, + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: summary.cursor.clone(), + last_synced_at: Some(now_rfc3339()), + status: SyncStatus::Synced, + error: None, + }; + db::upsert_sync_state(pool, backend, &done).await?; + Ok(summary) + } + Err(e) => { + let err_state = SpaceSyncState { + id: state_id, + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: None, + last_synced_at: Some(now_rfc3339()), + status: SyncStatus::Error, + error: Some(e.to_string()), + }; + db::upsert_sync_state(pool, backend, &err_state).await?; + Err(e) + } + } +} + +async fn pull_member_records( + http: &reqwest::Client, + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + plc_url: &str, + space_id: &str, + member_did: &str, + collections: &[String], +) -> Result { + let pds_url = resolve_pds_endpoint(http, plc_url, member_did).await?; + let mut total_records = 0usize; + let mut last_cursor = None; + + for collection in collections { + let mut cursor: Option = None; + loop { + let (records, next_cursor) = fetch_records_page( + http, + &pds_url, + member_did, + collection, + cursor.as_deref(), + 100, + ) + .await?; + + if records.is_empty() { + break; + } + + for record in &records { + let uri = record["uri"].as_str().unwrap_or(""); + let rkey = extract_rkey(uri); + let cid = record["cid"].as_str().unwrap_or("").to_string(); + let value = record + .get("value") + .cloned() + .unwrap_or(serde_json::Value::Null); + + let space_record_uri = format!("ats://{space_id}/{member_did}/{collection}/{rkey}"); + + let space_record = SpaceRecord { + uri: space_record_uri, + space_id: space_id.to_string(), + author_did: member_did.to_string(), + collection: collection.clone(), + rkey: rkey.to_string(), + record: value, + cid, + indexed_at: now_rfc3339(), + }; + + db::upsert_space_record(pool, backend, &space_record).await?; + total_records += 1; + } + + last_cursor = next_cursor.clone(); + cursor = next_cursor; + + if cursor.is_none() { + break; + } + } + } + + Ok(MemberSyncSummary { + records_synced: total_records, + cursor: last_cursor, + }) +} + +async fn fetch_records_page( + http: &reqwest::Client, + pds_url: &str, + repo: &str, + collection: &str, + cursor: Option<&str>, + limit: u32, +) -> Result<(Vec, Option), AppError> { + let mut url = format!( + "{}/xrpc/com.atproto.repo.listRecords?repo={}&collection={}&limit={}", + pds_url.trim_end_matches('/'), + repo, + collection, + limit, + ); + + if let Some(c) = cursor { + url.push_str(&format!("&cursor={c}")); + } + + let resp = http + .get(&url) + .send() + .await + .map_err(|e| AppError::Internal(format!("PDS request failed: {e}")))?; + + if !resp.status().is_success() { + let status = resp.status(); + return Err(AppError::Internal(format!( + "PDS listRecords failed with {status} for {repo}/{collection}" + ))); + } + + let body: serde_json::Value = resp + .json() + .await + .map_err(|e| AppError::Internal(format!("invalid PDS response: {e}")))?; + + let records = body["records"].as_array().cloned().unwrap_or_default(); + + let next_cursor = body["cursor"].as_str().map(|s| s.to_string()); + + Ok((records, next_cursor)) +} + +fn extract_rkey(uri: &str) -> &str { + uri.rsplit('/').next().unwrap_or("") +} + +// --------------------------------------------------------------------------- +// Result types +// --------------------------------------------------------------------------- + +pub struct SyncSpaceResult { + pub members_processed: usize, + pub total_records_synced: usize, + pub member_results: Vec, +} + +pub struct MemberSyncResult { + pub did: String, + pub records_synced: usize, + pub error: Option, +} + +pub struct MemberSyncSummary { + pub records_synced: usize, + pub cursor: Option, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn extract_rkey_from_at_uri() { + assert_eq!( + extract_rkey("at://did:plc:abc/app.bsky.feed.post/3k2abc"), + "3k2abc" + ); + } + + #[test] + fn extract_rkey_from_empty() { + assert_eq!(extract_rkey(""), ""); + } + + #[test] + fn extract_rkey_no_slash() { + assert_eq!(extract_rkey("singlevalue"), "singlevalue"); + } +} -- 2.51.2 From de7a94ed01400abfa8d4a7ff562db670e117c45c Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 1 May 2026 11:35:57 -0500 Subject: [PATCH 019/250] feat: add control for experiments to the dashboard Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/lib/api.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index f05a348..25dadf5 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -345,6 +345,25 @@ export function setFeatureFlag(key: string, enabled: boolean) { return deleteSetting(key); } +// Feature Flags +export type FeatureFlag = { + key: string + name: string + description: string + enabled: boolean +} + +export function getFeatureFlags() { + return apiFetch("/admin/feature-flags") +} + +export function setFeatureFlag(key: string, enabled: boolean) { + if (enabled) { + return upsertSetting(key, "true") + } + return deleteSetting(key) +} + // Proxy config export type ProxyConfig = { mode: "disabled" | "open" | "allowlist" | "blocklist"; -- 2.51.2 From 34c630c355be06116192f9f8a733903a8bf55525 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 1 May 2026 11:37:42 -0500 Subject: [PATCH 020/250] fix: remove public record aggregation from permissioned spaces Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/notifications.rs | 86 ----------- src/spaces/sync.rs | 293 ------------------------------------ 2 files changed, 379 deletions(-) delete mode 100644 src/spaces/notifications.rs delete mode 100644 src/spaces/sync.rs diff --git a/src/spaces/notifications.rs b/src/spaces/notifications.rs deleted file mode 100644 index 3d17e12..0000000 --- a/src/spaces/notifications.rs +++ /dev/null @@ -1,86 +0,0 @@ -use serde::Deserialize; -use uuid::Uuid; - -use crate::db::DatabaseBackend; -use crate::error::AppError; -use crate::spaces::db; -use crate::spaces::types::*; - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct WriteNotification { - pub space_uri: String, - pub author_did: String, - pub collection: String, - pub rkey: String, - pub action: WriteAction, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum WriteAction { - Create, - Update, - Delete, -} - -/// Process a write notification by queuing a sync pull for the affected member. -/// -/// This marks the member's sync state as pending so the next sync pass picks it up. -pub async fn handle_write_notification( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - space_id: &str, - notification: &WriteNotification, -) -> Result<(), AppError> { - let existing = db::get_sync_state(pool, backend, space_id, ¬ification.author_did).await?; - - let state = SpaceSyncState { - id: existing - .map(|s| s.id) - .unwrap_or_else(|| Uuid::new_v4().to_string()), - space_id: space_id.to_string(), - member_did: notification.author_did.clone(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Pending, - error: None, - }; - - db::upsert_sync_state(pool, backend, &state).await?; - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn write_action_deserializes() { - let action: WriteAction = serde_json::from_str("\"create\"").unwrap(); - assert!(matches!(action, WriteAction::Create)); - - let action: WriteAction = serde_json::from_str("\"update\"").unwrap(); - assert!(matches!(action, WriteAction::Update)); - - let action: WriteAction = serde_json::from_str("\"delete\"").unwrap(); - assert!(matches!(action, WriteAction::Delete)); - } - - #[test] - fn write_notification_deserializes() { - let json = r#"{ - "spaceUri": "ats://did:plc:owner/com.example.forum/main", - "authorDid": "did:plc:alice", - "collection": "com.example.forum.post", - "rkey": "3k2abc", - "action": "create" - }"#; - - let notif: WriteNotification = serde_json::from_str(json).unwrap(); - assert_eq!(notif.author_did, "did:plc:alice"); - assert_eq!(notif.collection, "com.example.forum.post"); - assert!(matches!(notif.action, WriteAction::Create)); - } -} diff --git a/src/spaces/sync.rs b/src/spaces/sync.rs deleted file mode 100644 index 40d5f72..0000000 --- a/src/spaces/sync.rs +++ /dev/null @@ -1,293 +0,0 @@ -use uuid::Uuid; - -use crate::db::DatabaseBackend; -use crate::db::now_rfc3339; -use crate::error::AppError; -use crate::profile::resolve_pds_endpoint; -use crate::spaces::types::*; -use crate::spaces::{db, members}; - -/// Sync all members of a space by pulling records from their PDSes. -pub async fn sync_space( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - collections: &[String], -) -> Result { - let resolved = members::resolve_members(pool, backend, space_id).await?; - let mut results = Vec::new(); - - for member in &resolved { - let result = sync_member( - http, - pool, - backend, - plc_url, - space_id, - &member.did, - collections, - ) - .await; - - results.push(MemberSyncResult { - did: member.did.clone(), - records_synced: result.as_ref().map(|r| r.records_synced).unwrap_or(0), - error: result.err().map(|e| e.to_string()), - }); - } - - let total = results.iter().map(|r| r.records_synced).sum(); - - Ok(SyncSpaceResult { - members_processed: results.len(), - total_records_synced: total, - member_results: results, - }) -} - -/// Sync records from a single member's PDS for a given space. -pub async fn sync_member( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - member_did: &str, - collections: &[String], -) -> Result { - let state_id = match db::get_sync_state(pool, backend, space_id, member_did).await? { - Some(s) => s.id, - None => { - let id = Uuid::new_v4().to_string(); - let initial = SpaceSyncState { - id: id.clone(), - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Pending, - error: None, - }; - db::upsert_sync_state(pool, backend, &initial).await?; - id - } - }; - - // Mark as syncing - let syncing_state = SpaceSyncState { - id: state_id.clone(), - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Syncing, - error: None, - }; - db::upsert_sync_state(pool, backend, &syncing_state).await?; - - let result = pull_member_records( - http, - pool, - backend, - plc_url, - space_id, - member_did, - collections, - ) - .await; - - match result { - Ok(summary) => { - let done = SpaceSyncState { - id: state_id, - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: summary.cursor.clone(), - last_synced_at: Some(now_rfc3339()), - status: SyncStatus::Synced, - error: None, - }; - db::upsert_sync_state(pool, backend, &done).await?; - Ok(summary) - } - Err(e) => { - let err_state = SpaceSyncState { - id: state_id, - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: Some(now_rfc3339()), - status: SyncStatus::Error, - error: Some(e.to_string()), - }; - db::upsert_sync_state(pool, backend, &err_state).await?; - Err(e) - } - } -} - -async fn pull_member_records( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - member_did: &str, - collections: &[String], -) -> Result { - let pds_url = resolve_pds_endpoint(http, plc_url, member_did).await?; - let mut total_records = 0usize; - let mut last_cursor = None; - - for collection in collections { - let mut cursor: Option = None; - loop { - let (records, next_cursor) = fetch_records_page( - http, - &pds_url, - member_did, - collection, - cursor.as_deref(), - 100, - ) - .await?; - - if records.is_empty() { - break; - } - - for record in &records { - let uri = record["uri"].as_str().unwrap_or(""); - let rkey = extract_rkey(uri); - let cid = record["cid"].as_str().unwrap_or("").to_string(); - let value = record - .get("value") - .cloned() - .unwrap_or(serde_json::Value::Null); - - let space_record_uri = format!("ats://{space_id}/{member_did}/{collection}/{rkey}"); - - let space_record = SpaceRecord { - uri: space_record_uri, - space_id: space_id.to_string(), - author_did: member_did.to_string(), - collection: collection.clone(), - rkey: rkey.to_string(), - record: value, - cid, - indexed_at: now_rfc3339(), - }; - - db::upsert_space_record(pool, backend, &space_record).await?; - total_records += 1; - } - - last_cursor = next_cursor.clone(); - cursor = next_cursor; - - if cursor.is_none() { - break; - } - } - } - - Ok(MemberSyncSummary { - records_synced: total_records, - cursor: last_cursor, - }) -} - -async fn fetch_records_page( - http: &reqwest::Client, - pds_url: &str, - repo: &str, - collection: &str, - cursor: Option<&str>, - limit: u32, -) -> Result<(Vec, Option), AppError> { - let mut url = format!( - "{}/xrpc/com.atproto.repo.listRecords?repo={}&collection={}&limit={}", - pds_url.trim_end_matches('/'), - repo, - collection, - limit, - ); - - if let Some(c) = cursor { - url.push_str(&format!("&cursor={c}")); - } - - let resp = http - .get(&url) - .send() - .await - .map_err(|e| AppError::Internal(format!("PDS request failed: {e}")))?; - - if !resp.status().is_success() { - let status = resp.status(); - return Err(AppError::Internal(format!( - "PDS listRecords failed with {status} for {repo}/{collection}" - ))); - } - - let body: serde_json::Value = resp - .json() - .await - .map_err(|e| AppError::Internal(format!("invalid PDS response: {e}")))?; - - let records = body["records"].as_array().cloned().unwrap_or_default(); - - let next_cursor = body["cursor"].as_str().map(|s| s.to_string()); - - Ok((records, next_cursor)) -} - -fn extract_rkey(uri: &str) -> &str { - uri.rsplit('/').next().unwrap_or("") -} - -// --------------------------------------------------------------------------- -// Result types -// --------------------------------------------------------------------------- - -pub struct SyncSpaceResult { - pub members_processed: usize, - pub total_records_synced: usize, - pub member_results: Vec, -} - -pub struct MemberSyncResult { - pub did: String, - pub records_synced: usize, - pub error: Option, -} - -pub struct MemberSyncSummary { - pub records_synced: usize, - pub cursor: Option, -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn extract_rkey_from_at_uri() { - assert_eq!( - extract_rkey("at://did:plc:abc/app.bsky.feed.post/3k2abc"), - "3k2abc" - ); - } - - #[test] - fn extract_rkey_from_empty() { - assert_eq!(extract_rkey(""), ""); - } - - #[test] - fn extract_rkey_no_slash() { - assert_eq!(extract_rkey("singlevalue"), "singlevalue"); - } -} -- 2.51.2 From 357a5d3b6f6d911bd8c3dfa772baecbb5694c808 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 4 May 2026 23:30:14 -0500 Subject: [PATCH 021/250] feat: update JS SDKs to more closely match their @atproto cousins Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/sdk/oauth-client-browser.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/docs/sdk/oauth-client-browser.md index 9ee8c8f..376bf11 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/docs/sdk/oauth-client-browser.md @@ -190,7 +190,17 @@ const info = session.getTokenInfo(); // { sub, scope, iss, aud } ``` -### Properties +## Revoke session + +```typescript +await client.revoke(session.did); +``` + +:::note +`logout()` still works as an alias for `revoke()`. +::: + +## Resolution utilities | Property | Type | Description | | -------- | -------- | ---------------------------------------- | -- 2.51.2 From cb2da762270c9411db23979aca91b0418382b1a5 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 6 May 2026 13:40:27 -0500 Subject: [PATCH 022/250] docs: add info for use with @atproto/api Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/sdk/overview.md | 2 ++ packages/oauth-client-browser/README.md | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/docs/docs/sdk/overview.md b/packages/docs/docs/sdk/overview.md index e072183..60fede4 100644 --- a/packages/docs/docs/sdk/overview.md +++ b/packages/docs/docs/sdk/overview.md @@ -13,6 +13,8 @@ HappyView provides JavaScript packages for building third-party apps that authen **Starting a new app?** Use `@happyview/lex-agent` with `@atproto/lex`. It gives you type-safe XRPC calls through a `Client` that routes requests to your HappyView instance with DPoP authentication. This is the recommended way to interact with HappyView from JavaScript. +**Already using `@atproto/api`?** `HappyViewSession` works directly as a session manager for `@atproto/api`'s `Agent` — just pass it to `new Agent(session)`. See [Using with @atproto/api](./oauth-client-browser.md#using-with-atprotoapi). + **Already using `@atproto/oauth-client-browser`?** Add `@happyview/oauth-client-browser` to get a `HappyViewBrowserClient` that handles the HappyView-specific DPoP key provisioning and session registration on top of the standard atproto OAuth flow. **Building a server-side (Node.js) app?** Use `@happyview/oauth-client-node` — it handles handle resolution, DID resolution, PDS discovery, and the full OAuth flow server-side. Matches the API surface of `@atproto/oauth-client-node`. diff --git a/packages/oauth-client-browser/README.md b/packages/oauth-client-browser/README.md index 74be821..1db1709 100644 --- a/packages/oauth-client-browser/README.md +++ b/packages/oauth-client-browser/README.md @@ -70,6 +70,20 @@ const response = await session.fetchHandler( ); ``` +### Using with @atproto/api + +`HappyViewSession` works directly with `@atproto/api`'s `Agent`: + +```typescript +import { Agent } from "@atproto/api"; + +const result = await client.init(); +if (result) { + const agent = new Agent(result.session); + const profile = await agent.getProfile({ actor: agent.did }); +} +``` + ### Revoke Session ```typescript -- 2.51.2 From d35a292e48678b9ebf8c57c9bbd2b8500dc01ebe Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 14:50:26 -0500 Subject: [PATCH 023/250] ci: sync main with dev after release Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/merge-main-to-dev.yml | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/merge-main-to-dev.yml diff --git a/.github/workflows/merge-main-to-dev.yml b/.github/workflows/merge-main-to-dev.yml new file mode 100644 index 0000000..e381a61 --- /dev/null +++ b/.github/workflows/merge-main-to-dev.yml @@ -0,0 +1,31 @@ +name: Merge main to dev + +on: + workflow_run: + workflows: [Release] + types: [completed] + branches: [main] + +jobs: + merge: + if: github.event.workflow_run.conclusion == 'success' + runs-on: depot-ubuntu-24.04 + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: dev + + - name: Merge main into dev + env: + GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}" + git merge origin/main --no-edit + git push origin dev -- 2.51.2 From 2d1d60dd9f1b3b18fa21dcdb13c95e936cdd21ac Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 15:26:10 -0500 Subject: [PATCH 024/250] fix: fix base path not being respected by trailing slash redirects Signed-off-by: Trezy Signed-off-by: Trezy --- src/server.rs | 20 ++++++- tests/common/app.rs | 7 +++ tests/e2e_base_path.rs | 127 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 tests/e2e_base_path.rs diff --git a/src/server.rs b/src/server.rs index 5699604..8bc2887 100644 --- a/src/server.rs +++ b/src/server.rs @@ -138,9 +138,27 @@ pub fn router(state: AppState) -> Router { .fallback_service(serve_dir); let outer = if let Some(ref base_path) = state.config.base_path { + let bp = base_path.clone(); + let rewrite_redirects = + axum::middleware::from_fn(move |req, next: axum::middleware::Next| { + let bp = bp.clone(); + async move { + let mut response: Response = next.run(req).await; + if response.status().is_redirection() + && let Some(loc) = response.headers().get(header::LOCATION) + && let Ok(loc_str) = loc.to_str() + && loc_str.starts_with('/') + && !loc_str.starts_with(&bp) + && let Ok(new_loc) = format!("{}{}", bp, loc_str).parse() + { + response.headers_mut().insert(header::LOCATION, new_loc); + } + response + } + }); Router::new() .route("/health", get(health)) - .nest(base_path, app_routes) + .nest(base_path, app_routes.layer(rewrite_redirects)) } else { Router::new() .route("/health", get(health)) diff --git a/tests/common/app.rs b/tests/common/app.rs index 4b82744..d0b630a 100644 --- a/tests/common/app.rs +++ b/tests/common/app.rs @@ -169,6 +169,13 @@ impl TestApp { } } + pub async fn new_with_base_path(base_path: &str) -> Self { + let mut app = Self::new().await; + app.state.config.base_path = Some(base_path.to_string()); + app.router = server::router(app.state.clone()); + app + } + pub async fn new_with_encryption() -> Self { let mut app = Self::new().await; // Set a test encryption key (32 bytes) diff --git a/tests/e2e_base_path.rs b/tests/e2e_base_path.rs new file mode 100644 index 0000000..3370805 --- /dev/null +++ b/tests/e2e_base_path.rs @@ -0,0 +1,127 @@ +mod common; + +use axum::body::Body; +use axum::http::{Request, StatusCode, header}; +use http_body_util::BodyExt; +use serial_test::serial; +use tower::ServiceExt; + +#[tokio::test] +#[serial] +#[ignore] +async fn health_at_root_when_base_path_set() { + let app = common::app::TestApp::new_with_base_path("/hv").await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/health") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = resp.into_body().collect().await.unwrap().to_bytes(); + assert_eq!(&body[..], b"ok"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn health_not_nested_under_base_path() { + let app = common::app::TestApp::new_with_base_path("/hv").await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/hv/health") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_ne!(resp.status(), StatusCode::OK); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn config_accessible_under_base_path() { + let app = common::app::TestApp::new_with_base_path("/hv").await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/hv/config") + .header("host", "127.0.0.1") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn config_not_at_root_when_base_path_set() { + let app = common::app::TestApp::new_with_base_path("/hv").await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/config") + .header("host", "127.0.0.1") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_ne!(resp.status(), StatusCode::OK); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn redirect_includes_base_path_prefix() { + let app = common::app::TestApp::new_with_base_path("/hv").await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/hv/login") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + if resp.status().is_redirection() { + let location = resp + .headers() + .get(header::LOCATION) + .expect("redirect should have Location header") + .to_str() + .unwrap(); + assert!( + location.starts_with("/hv"), + "redirect Location should include base path, got: {location}" + ); + } +} -- 2.51.2 From 59cbd39842111a6cea18cddbe615bdceb222136c Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 19:04:04 -0500 Subject: [PATCH 025/250] fix: remove oauth redirect hop, and add explicit redirect for the root url Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/getting-started/production-deployment.md | 4 ++-- src/auth/routes.rs | 4 ++-- src/server.rs | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/docs/docs/getting-started/production-deployment.md b/packages/docs/docs/getting-started/production-deployment.md index 0a7b3c1..640a66d 100644 --- a/packages/docs/docs/getting-started/production-deployment.md +++ b/packages/docs/docs/getting-started/production-deployment.md @@ -63,7 +63,7 @@ example.com { # ATProto XRPC — rewrite to base path before proxying handle /xrpc/* { - uri prefix /hv + rewrite * /hv{uri} reverse_proxy happyview:3000 } @@ -74,7 +74,7 @@ example.com { } ``` -The `uri prefix /hv` directive prepends `/hv` to the request path before proxying, so `/xrpc/com.atproto.sync.getRecord` becomes `/hv/xrpc/com.atproto.sync.getRecord` — which matches HappyView's nested routes. +The `rewrite * /hv{uri}` directive prepends `/hv` to the request path before proxying, so `/xrpc/com.atproto.sync.getRecord` becomes `/hv/xrpc/com.atproto.sync.getRecord` — which matches HappyView's nested routes. ### Health checks with a base path diff --git a/src/auth/routes.rs b/src/auth/routes.rs index 019d773..cf9a61f 100644 --- a/src/auth/routes.rs +++ b/src/auth/routes.rs @@ -260,8 +260,8 @@ async fn callback( .config .base_path .as_ref() - .map(|bp| format!("{}/", bp)) - .unwrap_or_else(|| "/".into()); + .map(|bp| format!("{}/dashboard/", bp)) + .unwrap_or_else(|| "/dashboard/".into()); let redirect_url = redirect_url.unwrap_or(default_redirect); tracing::debug!(redirect_url = %redirect_url, "redirecting after callback"); diff --git a/src/server.rs b/src/server.rs index 8bc2887..31fc30c 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,6 +1,6 @@ use axum::extract::{DefaultBodyLimit, State}; use axum::http::{Method, header}; -use axum::response::{IntoResponse, Response}; +use axum::response::{IntoResponse, Redirect, Response}; use axum::routing::{get, post}; use axum::{Json, Router}; use bytes::Bytes; @@ -135,6 +135,7 @@ pub fn router(state: AppState) -> Router { let app_routes = Router::new() .nest("/admin", admin::admin_routes(state.clone())) .merge(domain_routes) + .route("/", get(|| async { Redirect::to("/dashboard/") })) .fallback_service(serve_dir); let outer = if let Some(ref base_path) = state.config.base_path { -- 2.51.2 From 5e128a41e5e3e3534324ce95a855609f73afcd75 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 7 May 2026 20:01:24 -0500 Subject: [PATCH 026/250] fix: replace the base path sentinel in next.js text files Signed-off-by: Trezy Signed-off-by: Trezy --- entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index ef23dd4..56cd88f 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -18,11 +18,11 @@ if [ -f "$MARKER" ]; then BP="${BP%/}" # Replace sentinel string in static files with actual base path - find "${STATIC}" -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' \) \ + find "${STATIC}" -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' -o -name '*.txt' \) \ -exec sed -i "s|${SENTINEL}|${BP}|g" {} + else # No base path: remove sentinel string from static files - find "${STATIC}" -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' \) \ + find "${STATIC}" -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' -o -name '*.txt' \) \ -exec sed -i "s|${SENTINEL}||g" {} + fi -- 2.51.2 From e2b265c662da00c0d3e3848a1cb07d71d34ff675 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 10:36:33 -0500 Subject: [PATCH 027/250] ci: merge workflows Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 585 ++++++++++++++++++++++++ .github/workflows/docker-postgres.yml | 41 -- .github/workflows/docker.yml | 120 ----- .github/workflows/merge-main-to-dev.yml | 2 +- .github/workflows/mirror.yml | 17 - .github/workflows/release-sdk.yml | 185 -------- .github/workflows/release.yml | 144 ------ 7 files changed, 586 insertions(+), 508 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/docker-postgres.yml delete mode 100644 .github/workflows/docker.yml delete mode 100644 .github/workflows/mirror.yml delete mode 100644 .github/workflows/release-sdk.yml delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..7c39b4c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,585 @@ +name: CI + +on: + push: + branches: [main, dev, ci/merge-workflows] + pull_request: + branches: [main, dev, ci/merge-workflows] + release: + types: [published] + delete: + +env: + SQLX_OFFLINE: true + +jobs: + # --------------------------------------------------------------------------- + # Path detection — determines which job groups should run. + # Required because workflow-level `paths` filters can't vary per job. + # --------------------------------------------------------------------------- + changes: + if: github.event_name == 'push' || github.event_name == 'pull_request' + runs-on: depot-ubuntu-24.04 + outputs: + server: ${{ steps.filter.outputs.server }} + sdk: ${{ steps.filter.outputs.sdk }} + postgres: ${{ steps.filter.outputs.postgres }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Detect changed paths + id: filter + uses: dorny/paths-filter@v3 + with: + filters: | + server: + - '**' + - '!packages/**' + - '!.github/workflows/merge-main-to-dev.yml' + sdk: + - 'packages/oauth-client/**' + - 'packages/oauth-client-browser/**' + - 'packages/oauth-client-node/**' + - 'packages/lex-agent/**' + postgres: + - 'docker/Dockerfile.postgres' + - 'docker/init-databases.sh' + + # --------------------------------------------------------------------------- + # Server — unit tests, e2e tests, frontend build, lint + # --------------------------------------------------------------------------- + unit-tests: + needs: changes + if: needs.changes.outputs.server == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} + restore-keys: | + cargo-deps-${{ runner.os }}- + + - name: Run unit tests + run: cargo test --lib + + e2e-tests: + needs: changes + if: needs.changes.outputs.server == 'true' + runs-on: depot-ubuntu-24.04 + services: + postgres: + image: postgres:16-alpine + env: + POSTGRES_USER: happyview + POSTGRES_PASSWORD: happyview + POSTGRES_DB: happyview_test + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} + restore-keys: | + cargo-deps-${{ runner.os }}- + + - name: Add WASM target + run: rustup target add wasm32-unknown-unknown + + - name: Build test plugin + run: cargo build --manifest-path tests/fixtures/test_plugin/Cargo.toml --target wasm32-unknown-unknown --release + + - name: Run e2e tests + env: + TEST_DATABASE_URL: postgres://happyview:happyview@localhost:5432/happyview_test + run: cargo test --tests + + frontend: + needs: changes + if: needs.changes.outputs.server == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Build frontend + working-directory: web + run: npm ci && npm run build + + lint: + needs: changes + if: needs.changes.outputs.server == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} + restore-keys: | + cargo-deps-${{ runner.os }}- + + - name: Check formatting + run: cargo fmt -- --check + + - name: Clippy + run: cargo clippy --all-targets -- -D warnings + + # --------------------------------------------------------------------------- + # Server release + # --------------------------------------------------------------------------- + release: + if: >- + github.event_name == 'push' + && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + && needs.changes.outputs.server == 'true' + needs: [changes, unit-tests, e2e-tests, frontend, lint] + runs-on: depot-ubuntu-24.04 + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + run: npx semantic-release + + # --------------------------------------------------------------------------- + # SDK — tests + per-package releases + # --------------------------------------------------------------------------- + sdk-tests: + needs: changes + if: needs.changes.outputs.sdk == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install + + - name: Build SDK packages + run: bun run --filter '@happyview/*' build + + - name: Typecheck SDK packages + run: bun run --filter '@happyview/*' typecheck + + - name: Test SDK packages + run: bun run --filter '@happyview/*' test + + release-oauth-client: + if: >- + github.event_name == 'push' + && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + && needs.changes.outputs.sdk == 'true' + needs: [changes, sdk-tests] + runs-on: depot-ubuntu-24.04 + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Install dependencies + run: bun install + + - name: Build oauth-client + run: bun run --filter '@happyview/oauth-client' build + + - name: Configure npm auth for bun publish + run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc + + - name: Release oauth-client + env: + GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + working-directory: packages/oauth-client + run: npx semantic-release + + release-oauth-client-browser: + if: >- + github.event_name == 'push' + && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + && needs.changes.outputs.sdk == 'true' + needs: [changes, release-oauth-client] + runs-on: depot-ubuntu-24.04 + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Install dependencies + run: bun install + + - name: Build SDK packages + run: bun run --filter '@happyview/*' build + + - name: Resolve workspace dependencies to published versions + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + DIST_TAG="latest" + else + DIST_TAG="dev" + fi + CORE_VERSION=$(npm view @happyview/oauth-client@${DIST_TAG} version) + node -e " + const fs = require('fs'); + const pkg = JSON.parse(fs.readFileSync('packages/oauth-client-browser/package.json', 'utf8')); + if (pkg.dependencies['@happyview/oauth-client']?.startsWith('workspace:')) { + pkg.dependencies['@happyview/oauth-client'] = '^${CORE_VERSION}'; + fs.writeFileSync('packages/oauth-client-browser/package.json', JSON.stringify(pkg, null, 2) + '\n'); + } + " + + - name: Configure npm auth for bun publish + run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc + + - name: Release oauth-client-browser + env: + GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + working-directory: packages/oauth-client-browser + run: npx semantic-release + + release-oauth-client-node: + if: >- + github.event_name == 'push' + && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + && needs.changes.outputs.sdk == 'true' + needs: [changes, release-oauth-client] + runs-on: depot-ubuntu-24.04 + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Install dependencies + run: bun install + + - name: Build SDK packages + run: bun run --filter '@happyview/*' build + + - name: Resolve workspace dependencies to published versions + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + DIST_TAG="latest" + else + DIST_TAG="dev" + fi + CORE_VERSION=$(npm view @happyview/oauth-client@${DIST_TAG} version) + node -e " + const fs = require('fs'); + const pkg = JSON.parse(fs.readFileSync('packages/oauth-client-node/package.json', 'utf8')); + if (pkg.dependencies['@happyview/oauth-client']?.startsWith('workspace:')) { + pkg.dependencies['@happyview/oauth-client'] = '^${CORE_VERSION}'; + fs.writeFileSync('packages/oauth-client-node/package.json', JSON.stringify(pkg, null, 2) + '\n'); + } + " + + - name: Configure npm auth for bun publish + run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc + + - name: Release oauth-client-node + env: + GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + working-directory: packages/oauth-client-node + run: npx semantic-release + + release-lex-agent: + if: >- + github.event_name == 'push' + && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + && needs.changes.outputs.sdk == 'true' + needs: [changes, release-oauth-client] + runs-on: depot-ubuntu-24.04 + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Install dependencies + run: bun install + + - name: Build SDK packages + run: bun run --filter '@happyview/*' build + + - name: Resolve workspace dependencies to published versions + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + DIST_TAG="latest" + else + DIST_TAG="dev" + fi + CORE_VERSION=$(npm view @happyview/oauth-client@${DIST_TAG} version) + node -e " + const fs = require('fs'); + const pkg = JSON.parse(fs.readFileSync('packages/lex-agent/package.json', 'utf8')); + if (pkg.dependencies['@happyview/oauth-client']?.startsWith('workspace:')) { + pkg.dependencies['@happyview/oauth-client'] = '^${CORE_VERSION}'; + fs.writeFileSync('packages/lex-agent/package.json', JSON.stringify(pkg, null, 2) + '\n'); + } + " + + - name: Configure npm auth for bun publish + run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc + + - name: Release lex-agent + env: + GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + working-directory: packages/lex-agent + run: npx semantic-release + + # --------------------------------------------------------------------------- + # Docker — main app image (triggered by GitHub release) + # --------------------------------------------------------------------------- + docker: + if: github.event_name == 'release' && startsWith(github.event.release.tag_name, 'v') + runs-on: ${{ matrix.runs-on }} + permissions: + contents: read + packages: write + id-token: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runs-on: depot-ubuntu-24.04 + - platform: linux/arm64 + runs-on: depot-ubuntu-24.04-arm + env: + GHCR_IMAGE: ghcr.io/${{ github.repository }} + ATCR_IMAGE: atcr.io/${{ secrets.ATCR_NAMESPACE }}/happyview + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Log in to ATCR + # uses: docker/login-action@v3 + # with: + # registry: atcr.io + # username: ${{ secrets.ATCR_USERNAME }} + # password: ${{ secrets.ATCR_PASSWORD }} + + - name: Extract GHCR metadata + id: meta-ghcr + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_IMAGE }} + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Extract ATCR metadata + # id: meta-atcr + # uses: docker/metadata-action@v5 + # with: + # images: ${{ env.ATCR_IMAGE }} + # tags: | + # type=semver,pattern={{version}} + # type=semver,pattern={{major}}.{{minor}} + # type=semver,pattern={{major}} + # type=sha + + - name: Build and push to GHCR by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta-ghcr.outputs.labels }} + build-args: | + HAPPYVIEW_VERSION=${{ github.event.release.tag_name }} + cache-from: type=gha,scope=build-${{ matrix.platform }} + cache-to: type=gha,scope=build-${{ matrix.platform }},mode=max,ignore-error=true + outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Push to ATCR by digest + # id: build-atcr + # continue-on-error: true + # uses: docker/build-push-action@v5 + # with: + # context: . + # platforms: ${{ matrix.platform }} + # labels: ${{ steps.meta-atcr.outputs.labels }} + # build-args: | + # HAPPYVIEW_VERSION=${{ github.event.release.tag_name }} + # cache-from: type=gha,scope=build-${{ matrix.platform }} + # outputs: type=image,"name=${{ env.ATCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true + + - name: Create GHCR manifest + run: | + GHCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-ghcr.outputs.json }}') + docker buildx imagetools create --append $GHCR_TAGS \ + ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} 2>/dev/null || \ + docker buildx imagetools create $GHCR_TAGS \ + ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Create ATCR manifest + # if: steps.build-atcr.outcome == 'success' + # continue-on-error: true + # run: | + # ATCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-atcr.outputs.json }}') + # if [ -n "$ATCR_TAGS" ]; then + # docker buildx imagetools create --append $ATCR_TAGS \ + # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} 2>/dev/null || \ + # docker buildx imagetools create $ATCR_TAGS \ + # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} + # fi + + # --------------------------------------------------------------------------- + # Docker — Postgres image (only when Postgres Docker files change) + # --------------------------------------------------------------------------- + docker-postgres: + needs: changes + if: >- + github.event_name == 'push' + && needs.changes.outputs.postgres == 'true' + runs-on: depot-ubuntu-24.04 + permissions: + contents: read + packages: write + env: + GHCR_POSTGRES_IMAGE: ghcr.io/${{ github.repository }}-postgres + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: docker + file: docker/Dockerfile.postgres + push: true + tags: ${{ env.GHCR_POSTGRES_IMAGE }}:latest + cache-from: type=gha,scope=postgres + cache-to: type=gha,scope=postgres,mode=max,ignore-error=true + + # --------------------------------------------------------------------------- + # Mirror to Tangled + # --------------------------------------------------------------------------- + mirror: + if: github.event_name == 'push' || github.event_name == 'delete' + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: yesolutions/mirror-action@master + with: + REMOTE: "git@tangled.org:gamesgamesgamesgames.games/happyview" + GIT_SSH_PRIVATE_KEY: ${{ secrets.TANGLED_SSH_PRIVATE_KEY }} + GIT_SSH_NO_VERIFY_HOST: "true" diff --git a/.github/workflows/docker-postgres.yml b/.github/workflows/docker-postgres.yml deleted file mode 100644 index fd57bb1..0000000 --- a/.github/workflows/docker-postgres.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Build and Publish Postgres Image - -on: - push: - branches: [main, dev] - paths: - - docker/Dockerfile.postgres - - docker/init-databases.sh - -env: - GHCR_POSTGRES_IMAGE: ghcr.io/${{ github.repository }}-postgres - -jobs: - postgres: - runs-on: depot-ubuntu-24.04 - permissions: - contents: read - packages: write - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: docker - file: docker/Dockerfile.postgres - push: true - tags: ${{ env.GHCR_POSTGRES_IMAGE }}:latest - cache-from: type=gha,scope=postgres - cache-to: type=gha,scope=postgres,mode=max,ignore-error=true diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml deleted file mode 100644 index 7af1714..0000000 --- a/.github/workflows/docker.yml +++ /dev/null @@ -1,120 +0,0 @@ -name: Build and Publish Docker Image - -on: - release: - types: [published] - -env: - GHCR_IMAGE: ghcr.io/${{ github.repository }} - ATCR_IMAGE: atcr.io/${{ secrets.ATCR_NAMESPACE }}/happyview - -jobs: - happyview: - if: startsWith(github.event.release.tag_name, 'v') - permissions: - contents: read - packages: write - id-token: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runs-on: depot-ubuntu-24.04 - - platform: linux/arm64 - runs-on: depot-ubuntu-24.04-arm - runs-on: ${{ matrix.runs-on }} - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Log in to ATCR - # uses: docker/login-action@v3 - # with: - # registry: atcr.io - # username: ${{ secrets.ATCR_USERNAME }} - # password: ${{ secrets.ATCR_PASSWORD }} - - - name: Extract GHCR metadata - id: meta-ghcr - uses: docker/metadata-action@v5 - with: - images: ${{ env.GHCR_IMAGE }} - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=sha - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Extract ATCR metadata - # id: meta-atcr - # uses: docker/metadata-action@v5 - # with: - # images: ${{ env.ATCR_IMAGE }} - # tags: | - # type=semver,pattern={{version}} - # type=semver,pattern={{major}}.{{minor}} - # type=semver,pattern={{major}} - # type=sha - - - name: Build and push to GHCR by digest - id: build - uses: docker/build-push-action@v5 - with: - context: . - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta-ghcr.outputs.labels }} - build-args: | - HAPPYVIEW_VERSION=${{ github.event.release.tag_name }} - cache-from: type=gha,scope=build-${{ matrix.platform }} - cache-to: type=gha,scope=build-${{ matrix.platform }},mode=max,ignore-error=true - outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Push to ATCR by digest - # id: build-atcr - # continue-on-error: true - # uses: docker/build-push-action@v5 - # with: - # context: . - # platforms: ${{ matrix.platform }} - # labels: ${{ steps.meta-atcr.outputs.labels }} - # build-args: | - # HAPPYVIEW_VERSION=${{ github.event.release.tag_name }} - # cache-from: type=gha,scope=build-${{ matrix.platform }} - # outputs: type=image,"name=${{ env.ATCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true - - - name: Create GHCR manifest - run: | - GHCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-ghcr.outputs.json }}') - docker buildx imagetools create --append $GHCR_TAGS \ - ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} 2>/dev/null || \ - docker buildx imagetools create $GHCR_TAGS \ - ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Create ATCR manifest - # if: steps.build-atcr.outcome == 'success' - # continue-on-error: true - # run: | - # ATCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-atcr.outputs.json }}') - # if [ -n "$ATCR_TAGS" ]; then - # docker buildx imagetools create --append $ATCR_TAGS \ - # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} 2>/dev/null || \ - # docker buildx imagetools create $ATCR_TAGS \ - # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} - # fi - diff --git a/.github/workflows/merge-main-to-dev.yml b/.github/workflows/merge-main-to-dev.yml index e381a61..b240166 100644 --- a/.github/workflows/merge-main-to-dev.yml +++ b/.github/workflows/merge-main-to-dev.yml @@ -2,7 +2,7 @@ name: Merge main to dev on: workflow_run: - workflows: [Release] + workflows: [CI] types: [completed] branches: [main] diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml deleted file mode 100644 index dedd431..0000000 --- a/.github/workflows/mirror.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Mirror to Tangled - -on: [push, delete] - -jobs: - mirror: - runs-on: depot-ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: yesolutions/mirror-action@master - with: - REMOTE: "git@tangled.org:gamesgamesgamesgames.games/happyview" - GIT_SSH_PRIVATE_KEY: ${{ secrets.TANGLED_SSH_PRIVATE_KEY }} - GIT_SSH_NO_VERIFY_HOST: "true" diff --git a/.github/workflows/release-sdk.yml b/.github/workflows/release-sdk.yml deleted file mode 100644 index 52ec657..0000000 --- a/.github/workflows/release-sdk.yml +++ /dev/null @@ -1,185 +0,0 @@ -name: Release SDK - -on: - push: - branches: [main, dev] - paths: - - ".github/workflows/release-sdk.yml" - - "packages/oauth-client/**" - - "packages/oauth-client-browser/**" - - "packages/lex-agent/**" - pull_request: - branches: [main, dev] - paths: - - ".github/workflows/release-sdk.yml" - - "packages/oauth-client/**" - - "packages/oauth-client-browser/**" - - "packages/lex-agent/**" - -jobs: - sdk-tests: - runs-on: depot-ubuntu-24.04 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install - - - name: Build SDK packages - run: bun run --filter '@happyview/*' build - - - name: Typecheck SDK packages - run: bun run --filter '@happyview/*' typecheck - - - name: Test SDK packages - run: bun run --filter '@happyview/*' test - - release-oauth-client: - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - needs: [sdk-tests] - runs-on: depot-ubuntu-24.04 - permissions: - contents: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - - - name: Install dependencies - run: bun install - - - name: Build oauth-client - run: bun run --filter '@happyview/oauth-client' build - - - name: Configure npm auth for bun publish - run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc - - - name: Release oauth-client - env: - GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - working-directory: packages/oauth-client - run: npx semantic-release - - release-oauth-client-browser: - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - needs: [release-oauth-client] - runs-on: depot-ubuntu-24.04 - permissions: - contents: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - - - name: Install dependencies - run: bun install - - - name: Build SDK packages - run: bun run --filter '@happyview/*' build - - - name: Resolve workspace dependencies to published versions - run: | - if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - DIST_TAG="latest" - else - DIST_TAG="dev" - fi - CORE_VERSION=$(npm view @happyview/oauth-client@${DIST_TAG} version) - node -e " - const fs = require('fs'); - const pkg = JSON.parse(fs.readFileSync('packages/oauth-client-browser/package.json', 'utf8')); - if (pkg.dependencies['@happyview/oauth-client']?.startsWith('workspace:')) { - pkg.dependencies['@happyview/oauth-client'] = '^${CORE_VERSION}'; - fs.writeFileSync('packages/oauth-client-browser/package.json', JSON.stringify(pkg, null, 2) + '\n'); - } - " - - - name: Configure npm auth for bun publish - run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc - - - name: Release oauth-client-browser - env: - GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - working-directory: packages/oauth-client-browser - run: npx semantic-release - - release-lex-agent: - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - needs: [release-oauth-client] - runs-on: depot-ubuntu-24.04 - permissions: - contents: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - - - name: Install dependencies - run: bun install - - - name: Build SDK packages - run: bun run --filter '@happyview/*' build - - - name: Resolve workspace dependencies to published versions - run: | - if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then - DIST_TAG="latest" - else - DIST_TAG="dev" - fi - CORE_VERSION=$(npm view @happyview/oauth-client@${DIST_TAG} version) - node -e " - const fs = require('fs'); - const pkg = JSON.parse(fs.readFileSync('packages/lex-agent/package.json', 'utf8')); - if (pkg.dependencies['@happyview/oauth-client']?.startsWith('workspace:')) { - pkg.dependencies['@happyview/oauth-client'] = '^${CORE_VERSION}'; - fs.writeFileSync('packages/lex-agent/package.json', JSON.stringify(pkg, null, 2) + '\n'); - } - " - - - name: Configure npm auth for bun publish - run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc - - - name: Release lex-agent - env: - GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - working-directory: packages/lex-agent - run: npx semantic-release diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index a0eb717..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,144 +0,0 @@ -name: Release - -on: - push: - branches: [main, dev] - paths-ignore: - - ".github/workflows/mirror.yml" - - ".github/workflows/release-sdk.yml" - - "packages/**" - pull_request: - branches: [main, dev] - paths-ignore: - - ".github/workflows/mirror.yml" - - ".github/workflows/release-sdk.yml" - - "packages/**" - -env: - SQLX_OFFLINE: true - -jobs: - unit-tests: - runs-on: depot-ubuntu-24.04 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Cache cargo dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} - restore-keys: | - cargo-deps-${{ runner.os }}- - - - name: Run unit tests - run: cargo test --lib - - e2e-tests: - runs-on: depot-ubuntu-24.04 - - services: - postgres: - image: postgres:16-alpine - env: - POSTGRES_USER: happyview - POSTGRES_PASSWORD: happyview - POSTGRES_DB: happyview_test - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Cache cargo dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} - restore-keys: | - cargo-deps-${{ runner.os }}- - - - name: Add WASM target - run: rustup target add wasm32-unknown-unknown - - - name: Build test plugin - run: cargo build --manifest-path tests/fixtures/test_plugin/Cargo.toml --target wasm32-unknown-unknown --release - - - name: Run e2e tests - env: - TEST_DATABASE_URL: postgres://happyview:happyview@localhost:5432/happyview_test - run: cargo test --tests - - frontend: - runs-on: depot-ubuntu-24.04 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 24 - - - name: Build frontend - working-directory: web - run: npm ci && npm run build - - lint: - runs-on: depot-ubuntu-24.04 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Cache cargo dependencies - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} - restore-keys: | - cargo-deps-${{ runner.os }}- - - - name: Check formatting - run: cargo fmt -- --check - - - name: Clippy - run: cargo clippy --all-targets -- -D warnings - - release: - if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - needs: [unit-tests, e2e-tests, frontend, lint] - runs-on: depot-ubuntu-24.04 - permissions: - contents: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 - - - name: Release - env: - GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} - run: npx semantic-release -- 2.51.2 From 41d9b04245bcf0a2a9f480b5c4d281dc56649c44 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 10:55:05 -0500 Subject: [PATCH 028/250] ci: update Node-based actions Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 46 ++++++++++++------------- .github/workflows/merge-main-to-dev.yml | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c39b4c..31f2c51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: postgres: ${{ steps.filter.outputs.postgres }} steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Detect changed paths id: filter @@ -55,10 +55,10 @@ jobs: runs-on: depot-ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Cache cargo dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/registry @@ -90,10 +90,10 @@ jobs: --health-retries 5 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Cache cargo dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/registry @@ -119,10 +119,10 @@ jobs: runs-on: depot-ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 @@ -136,10 +136,10 @@ jobs: runs-on: depot-ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Cache cargo dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/registry @@ -168,12 +168,12 @@ jobs: contents: write steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 22 @@ -191,7 +191,7 @@ jobs: runs-on: depot-ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Bun uses: oven-sh/setup-bun@v2 @@ -219,7 +219,7 @@ jobs: contents: write steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -227,7 +227,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 @@ -258,7 +258,7 @@ jobs: contents: write steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -266,7 +266,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 @@ -314,7 +314,7 @@ jobs: contents: write steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -322,7 +322,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 @@ -370,7 +370,7 @@ jobs: contents: write steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 @@ -378,7 +378,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 @@ -438,7 +438,7 @@ jobs: ATCR_IMAGE: atcr.io/${{ secrets.ATCR_NAMESPACE }}/happyview steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -545,7 +545,7 @@ jobs: GHCR_POSTGRES_IMAGE: ghcr.io/${{ github.repository }}-postgres steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -574,7 +574,7 @@ jobs: if: github.event_name == 'push' || github.event_name == 'delete' runs-on: depot-ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 diff --git a/.github/workflows/merge-main-to-dev.yml b/.github/workflows/merge-main-to-dev.yml index b240166..a923be4 100644 --- a/.github/workflows/merge-main-to-dev.yml +++ b/.github/workflows/merge-main-to-dev.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: fetch-depth: 0 ref: dev -- 2.51.2 From ef46bd32e7eee98e0886b4c1a57c61fe07430ea1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 10:56:23 -0500 Subject: [PATCH 029/250] ci: add test builds to cache Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31f2c51..ed2df38 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,15 +57,16 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Cache cargo dependencies + - name: Cache cargo uses: actions/cache@v5 with: path: | ~/.cargo/registry ~/.cargo/git - key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} + target + key: cargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} restore-keys: | - cargo-deps-${{ runner.os }}- + cargo-${{ runner.os }}- - name: Run unit tests run: cargo test --lib @@ -92,15 +93,16 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Cache cargo dependencies + - name: Cache cargo uses: actions/cache@v5 with: path: | ~/.cargo/registry ~/.cargo/git - key: cargo-deps-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} + target + key: cargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} restore-keys: | - cargo-deps-${{ runner.os }}- + cargo-${{ runner.os }}- - name: Add WASM target run: rustup target add wasm32-unknown-unknown -- 2.51.2 From a1e6f13a5257f2a5348ed23fc2a902477a21e2b1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 11:52:36 -0500 Subject: [PATCH 030/250] ci: trigger docker build from the main ci workflow Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 31 ++++++++++++++++++++++--------- .releaserc.json | 3 ++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed2df38..8652c19 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,11 +2,9 @@ name: CI on: push: - branches: [main, dev, ci/merge-workflows] + branches: [main, dev] pull_request: - branches: [main, dev, ci/merge-workflows] - release: - types: [published] + branches: [main, dev] delete: env: @@ -166,6 +164,8 @@ jobs: && needs.changes.outputs.server == 'true' needs: [changes, unit-tests, e2e-tests, frontend, lint] runs-on: depot-ubuntu-24.04 + outputs: + version: ${{ steps.semantic.outputs.version }} permissions: contents: write steps: @@ -180,6 +180,7 @@ jobs: node-version: 22 - name: Release + id: semantic env: GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} run: npx semantic-release @@ -421,7 +422,8 @@ jobs: # Docker — main app image (triggered by GitHub release) # --------------------------------------------------------------------------- docker: - if: github.event_name == 'release' && startsWith(github.event.release.tag_name, 'v') + needs: release + if: needs.release.outputs.version != '' runs-on: ${{ matrix.runs-on }} permissions: contents: read @@ -460,15 +462,26 @@ jobs: # username: ${{ secrets.ATCR_USERNAME }} # password: ${{ secrets.ATCR_PASSWORD }} + - name: Parse version + id: version + run: | + VERSION="${{ needs.release.outputs.version }}" + MAJOR="${VERSION%%.*}" + MINOR="${VERSION#*.}" + MINOR="${MINOR%%.*}" + echo "full=${VERSION}" >> "$GITHUB_OUTPUT" + echo "major=${MAJOR}" >> "$GITHUB_OUTPUT" + echo "major_minor=${MAJOR}.${MINOR}" >> "$GITHUB_OUTPUT" + - name: Extract GHCR metadata id: meta-ghcr uses: docker/metadata-action@v5 with: images: ${{ env.GHCR_IMAGE }} tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} + type=raw,value=${{ steps.version.outputs.full }} + type=raw,value=${{ steps.version.outputs.major_minor }} + type=raw,value=${{ steps.version.outputs.major }} type=sha # TODO: Re-enable once ATCR rate limit issue is resolved @@ -491,7 +504,7 @@ jobs: platforms: ${{ matrix.platform }} labels: ${{ steps.meta-ghcr.outputs.labels }} build-args: | - HAPPYVIEW_VERSION=${{ github.event.release.tag_name }} + HAPPYVIEW_VERSION=v${{ needs.release.outputs.version }} cache-from: type=gha,scope=build-${{ matrix.platform }} cache-to: type=gha,scope=build-${{ matrix.platform }},mode=max,ignore-error=true outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true diff --git a/.releaserc.json b/.releaserc.json index 2c0efff..f031dec 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -7,6 +7,7 @@ "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", - "@semantic-release/github" + "@semantic-release/github", + "semantic-release-gha-output" ] } -- 2.51.2 From 63f22d66afbecd8733c2085eed5de3ea72e566df Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 09:54:11 -0500 Subject: [PATCH 031/250] feat(xrpc-proxy): add settings to control the XRPC proxy Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/lib/api.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 25dadf5..701ad5a 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -381,6 +381,23 @@ export function updateProxyConfig(config: ProxyConfig) { }); } +// Proxy config +export type ProxyConfig = { + mode: "disabled" | "open" | "allowlist" | "blocklist" + nsids: string[] +} + +export function getProxyConfig() { + return apiFetch("/admin/settings/xrpc-proxy") +} + +export function updateProxyConfig(config: ProxyConfig) { + return apiFetch("/admin/settings/xrpc-proxy", { + method: "PUT", + body: JSON.stringify(config), + }) +} + // Labelers export function getLabelers() { return apiFetch("/admin/labelers"); -- 2.51.2 From 6011041330903f7244e2eee485f813fe0c3a4c84 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 09:54:31 -0500 Subject: [PATCH 032/250] docs: add info about the XRPC proxy Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/getting-started/dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/docs/getting-started/dashboard.md b/packages/docs/docs/getting-started/dashboard.md index b5292bf..2873c02 100644 --- a/packages/docs/docs/getting-started/dashboard.md +++ b/packages/docs/docs/getting-started/dashboard.md @@ -87,7 +87,7 @@ Configure instance-level settings: application name, logo, terms of service URL, Control which unrecognized XRPC methods are forwarded to their resolved authority. Choose from four modes: **Disabled** (block all proxy requests), **Open** (proxy everything — the default), **Allowlist** (only proxy NSIDs matching your patterns), or **Blocklist** (proxy everything except matching patterns). Allowlist and blocklist modes accept NSID patterns with trailing wildcards (e.g. `com.example.*`). Locally registered lexicons are always served regardless of this setting. See [XRPC Proxy](../reference/admin/xrpc-proxy.md) for the full API reference. -### ENV Variables +### Environment Variables View the current values of all environment variables that affect HappyView's behavior. This is a read-only view — values are set via your deployment environment, not the dashboard. -- 2.51.2 From 15753c429cbcb3748ef6f91748a75dfe5d9558c7 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 09:59:07 -0500 Subject: [PATCH 033/250] docs: update the dashboard docs Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/getting-started/dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/docs/getting-started/dashboard.md b/packages/docs/docs/getting-started/dashboard.md index 2873c02..b5292bf 100644 --- a/packages/docs/docs/getting-started/dashboard.md +++ b/packages/docs/docs/getting-started/dashboard.md @@ -87,7 +87,7 @@ Configure instance-level settings: application name, logo, terms of service URL, Control which unrecognized XRPC methods are forwarded to their resolved authority. Choose from four modes: **Disabled** (block all proxy requests), **Open** (proxy everything — the default), **Allowlist** (only proxy NSIDs matching your patterns), or **Blocklist** (proxy everything except matching patterns). Allowlist and blocklist modes accept NSID patterns with trailing wildcards (e.g. `com.example.*`). Locally registered lexicons are always served regardless of this setting. See [XRPC Proxy](../reference/admin/xrpc-proxy.md) for the full API reference. -### Environment Variables +### ENV Variables View the current values of all environment variables that affect HappyView's behavior. This is a read-only view — values are set via your deployment environment, not the dashboard. -- 2.51.2 From 693d67801ef9b2de8f4f8b4816ee558f1aaa9793 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 29 Apr 2026 17:16:10 -0500 Subject: [PATCH 034/250] feat: permissioned spaces implementation Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/notifications.rs | 86 +++++++++++ src/spaces/sync.rs | 293 ++++++++++++++++++++++++++++++++++++ 2 files changed, 379 insertions(+) create mode 100644 src/spaces/notifications.rs create mode 100644 src/spaces/sync.rs diff --git a/src/spaces/notifications.rs b/src/spaces/notifications.rs new file mode 100644 index 0000000..3d17e12 --- /dev/null +++ b/src/spaces/notifications.rs @@ -0,0 +1,86 @@ +use serde::Deserialize; +use uuid::Uuid; + +use crate::db::DatabaseBackend; +use crate::error::AppError; +use crate::spaces::db; +use crate::spaces::types::*; + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct WriteNotification { + pub space_uri: String, + pub author_did: String, + pub collection: String, + pub rkey: String, + pub action: WriteAction, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum WriteAction { + Create, + Update, + Delete, +} + +/// Process a write notification by queuing a sync pull for the affected member. +/// +/// This marks the member's sync state as pending so the next sync pass picks it up. +pub async fn handle_write_notification( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + space_id: &str, + notification: &WriteNotification, +) -> Result<(), AppError> { + let existing = db::get_sync_state(pool, backend, space_id, ¬ification.author_did).await?; + + let state = SpaceSyncState { + id: existing + .map(|s| s.id) + .unwrap_or_else(|| Uuid::new_v4().to_string()), + space_id: space_id.to_string(), + member_did: notification.author_did.clone(), + cursor: None, + last_synced_at: None, + status: SyncStatus::Pending, + error: None, + }; + + db::upsert_sync_state(pool, backend, &state).await?; + + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn write_action_deserializes() { + let action: WriteAction = serde_json::from_str("\"create\"").unwrap(); + assert!(matches!(action, WriteAction::Create)); + + let action: WriteAction = serde_json::from_str("\"update\"").unwrap(); + assert!(matches!(action, WriteAction::Update)); + + let action: WriteAction = serde_json::from_str("\"delete\"").unwrap(); + assert!(matches!(action, WriteAction::Delete)); + } + + #[test] + fn write_notification_deserializes() { + let json = r#"{ + "spaceUri": "ats://did:plc:owner/com.example.forum/main", + "authorDid": "did:plc:alice", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "action": "create" + }"#; + + let notif: WriteNotification = serde_json::from_str(json).unwrap(); + assert_eq!(notif.author_did, "did:plc:alice"); + assert_eq!(notif.collection, "com.example.forum.post"); + assert!(matches!(notif.action, WriteAction::Create)); + } +} diff --git a/src/spaces/sync.rs b/src/spaces/sync.rs new file mode 100644 index 0000000..40d5f72 --- /dev/null +++ b/src/spaces/sync.rs @@ -0,0 +1,293 @@ +use uuid::Uuid; + +use crate::db::DatabaseBackend; +use crate::db::now_rfc3339; +use crate::error::AppError; +use crate::profile::resolve_pds_endpoint; +use crate::spaces::types::*; +use crate::spaces::{db, members}; + +/// Sync all members of a space by pulling records from their PDSes. +pub async fn sync_space( + http: &reqwest::Client, + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + plc_url: &str, + space_id: &str, + collections: &[String], +) -> Result { + let resolved = members::resolve_members(pool, backend, space_id).await?; + let mut results = Vec::new(); + + for member in &resolved { + let result = sync_member( + http, + pool, + backend, + plc_url, + space_id, + &member.did, + collections, + ) + .await; + + results.push(MemberSyncResult { + did: member.did.clone(), + records_synced: result.as_ref().map(|r| r.records_synced).unwrap_or(0), + error: result.err().map(|e| e.to_string()), + }); + } + + let total = results.iter().map(|r| r.records_synced).sum(); + + Ok(SyncSpaceResult { + members_processed: results.len(), + total_records_synced: total, + member_results: results, + }) +} + +/// Sync records from a single member's PDS for a given space. +pub async fn sync_member( + http: &reqwest::Client, + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + plc_url: &str, + space_id: &str, + member_did: &str, + collections: &[String], +) -> Result { + let state_id = match db::get_sync_state(pool, backend, space_id, member_did).await? { + Some(s) => s.id, + None => { + let id = Uuid::new_v4().to_string(); + let initial = SpaceSyncState { + id: id.clone(), + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: None, + last_synced_at: None, + status: SyncStatus::Pending, + error: None, + }; + db::upsert_sync_state(pool, backend, &initial).await?; + id + } + }; + + // Mark as syncing + let syncing_state = SpaceSyncState { + id: state_id.clone(), + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: None, + last_synced_at: None, + status: SyncStatus::Syncing, + error: None, + }; + db::upsert_sync_state(pool, backend, &syncing_state).await?; + + let result = pull_member_records( + http, + pool, + backend, + plc_url, + space_id, + member_did, + collections, + ) + .await; + + match result { + Ok(summary) => { + let done = SpaceSyncState { + id: state_id, + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: summary.cursor.clone(), + last_synced_at: Some(now_rfc3339()), + status: SyncStatus::Synced, + error: None, + }; + db::upsert_sync_state(pool, backend, &done).await?; + Ok(summary) + } + Err(e) => { + let err_state = SpaceSyncState { + id: state_id, + space_id: space_id.to_string(), + member_did: member_did.to_string(), + cursor: None, + last_synced_at: Some(now_rfc3339()), + status: SyncStatus::Error, + error: Some(e.to_string()), + }; + db::upsert_sync_state(pool, backend, &err_state).await?; + Err(e) + } + } +} + +async fn pull_member_records( + http: &reqwest::Client, + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + plc_url: &str, + space_id: &str, + member_did: &str, + collections: &[String], +) -> Result { + let pds_url = resolve_pds_endpoint(http, plc_url, member_did).await?; + let mut total_records = 0usize; + let mut last_cursor = None; + + for collection in collections { + let mut cursor: Option = None; + loop { + let (records, next_cursor) = fetch_records_page( + http, + &pds_url, + member_did, + collection, + cursor.as_deref(), + 100, + ) + .await?; + + if records.is_empty() { + break; + } + + for record in &records { + let uri = record["uri"].as_str().unwrap_or(""); + let rkey = extract_rkey(uri); + let cid = record["cid"].as_str().unwrap_or("").to_string(); + let value = record + .get("value") + .cloned() + .unwrap_or(serde_json::Value::Null); + + let space_record_uri = format!("ats://{space_id}/{member_did}/{collection}/{rkey}"); + + let space_record = SpaceRecord { + uri: space_record_uri, + space_id: space_id.to_string(), + author_did: member_did.to_string(), + collection: collection.clone(), + rkey: rkey.to_string(), + record: value, + cid, + indexed_at: now_rfc3339(), + }; + + db::upsert_space_record(pool, backend, &space_record).await?; + total_records += 1; + } + + last_cursor = next_cursor.clone(); + cursor = next_cursor; + + if cursor.is_none() { + break; + } + } + } + + Ok(MemberSyncSummary { + records_synced: total_records, + cursor: last_cursor, + }) +} + +async fn fetch_records_page( + http: &reqwest::Client, + pds_url: &str, + repo: &str, + collection: &str, + cursor: Option<&str>, + limit: u32, +) -> Result<(Vec, Option), AppError> { + let mut url = format!( + "{}/xrpc/com.atproto.repo.listRecords?repo={}&collection={}&limit={}", + pds_url.trim_end_matches('/'), + repo, + collection, + limit, + ); + + if let Some(c) = cursor { + url.push_str(&format!("&cursor={c}")); + } + + let resp = http + .get(&url) + .send() + .await + .map_err(|e| AppError::Internal(format!("PDS request failed: {e}")))?; + + if !resp.status().is_success() { + let status = resp.status(); + return Err(AppError::Internal(format!( + "PDS listRecords failed with {status} for {repo}/{collection}" + ))); + } + + let body: serde_json::Value = resp + .json() + .await + .map_err(|e| AppError::Internal(format!("invalid PDS response: {e}")))?; + + let records = body["records"].as_array().cloned().unwrap_or_default(); + + let next_cursor = body["cursor"].as_str().map(|s| s.to_string()); + + Ok((records, next_cursor)) +} + +fn extract_rkey(uri: &str) -> &str { + uri.rsplit('/').next().unwrap_or("") +} + +// --------------------------------------------------------------------------- +// Result types +// --------------------------------------------------------------------------- + +pub struct SyncSpaceResult { + pub members_processed: usize, + pub total_records_synced: usize, + pub member_results: Vec, +} + +pub struct MemberSyncResult { + pub did: String, + pub records_synced: usize, + pub error: Option, +} + +pub struct MemberSyncSummary { + pub records_synced: usize, + pub cursor: Option, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn extract_rkey_from_at_uri() { + assert_eq!( + extract_rkey("at://did:plc:abc/app.bsky.feed.post/3k2abc"), + "3k2abc" + ); + } + + #[test] + fn extract_rkey_from_empty() { + assert_eq!(extract_rkey(""), ""); + } + + #[test] + fn extract_rkey_no_slash() { + assert_eq!(extract_rkey("singlevalue"), "singlevalue"); + } +} -- 2.51.2 From 6adb5ee97b6f2d3380c7a84a87651700211b0f63 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 1 May 2026 11:35:57 -0500 Subject: [PATCH 035/250] feat: add control for experiments to the dashboard Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/lib/api.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 701ad5a..1b91418 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -381,6 +381,25 @@ export function updateProxyConfig(config: ProxyConfig) { }); } +// Feature Flags +export type FeatureFlag = { + key: string + name: string + description: string + enabled: boolean +} + +export function getFeatureFlags() { + return apiFetch("/admin/feature-flags") +} + +export function setFeatureFlag(key: string, enabled: boolean) { + if (enabled) { + return upsertSetting(key, "true") + } + return deleteSetting(key) +} + // Proxy config export type ProxyConfig = { mode: "disabled" | "open" | "allowlist" | "blocklist" -- 2.51.2 From 55cf1b65304d68d7af5e48f212ae67a4aba72b5c Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 1 May 2026 11:37:42 -0500 Subject: [PATCH 036/250] fix: remove public record aggregation from permissioned spaces Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/notifications.rs | 86 ----------- src/spaces/sync.rs | 293 ------------------------------------ 2 files changed, 379 deletions(-) delete mode 100644 src/spaces/notifications.rs delete mode 100644 src/spaces/sync.rs diff --git a/src/spaces/notifications.rs b/src/spaces/notifications.rs deleted file mode 100644 index 3d17e12..0000000 --- a/src/spaces/notifications.rs +++ /dev/null @@ -1,86 +0,0 @@ -use serde::Deserialize; -use uuid::Uuid; - -use crate::db::DatabaseBackend; -use crate::error::AppError; -use crate::spaces::db; -use crate::spaces::types::*; - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct WriteNotification { - pub space_uri: String, - pub author_did: String, - pub collection: String, - pub rkey: String, - pub action: WriteAction, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum WriteAction { - Create, - Update, - Delete, -} - -/// Process a write notification by queuing a sync pull for the affected member. -/// -/// This marks the member's sync state as pending so the next sync pass picks it up. -pub async fn handle_write_notification( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - space_id: &str, - notification: &WriteNotification, -) -> Result<(), AppError> { - let existing = db::get_sync_state(pool, backend, space_id, ¬ification.author_did).await?; - - let state = SpaceSyncState { - id: existing - .map(|s| s.id) - .unwrap_or_else(|| Uuid::new_v4().to_string()), - space_id: space_id.to_string(), - member_did: notification.author_did.clone(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Pending, - error: None, - }; - - db::upsert_sync_state(pool, backend, &state).await?; - - Ok(()) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn write_action_deserializes() { - let action: WriteAction = serde_json::from_str("\"create\"").unwrap(); - assert!(matches!(action, WriteAction::Create)); - - let action: WriteAction = serde_json::from_str("\"update\"").unwrap(); - assert!(matches!(action, WriteAction::Update)); - - let action: WriteAction = serde_json::from_str("\"delete\"").unwrap(); - assert!(matches!(action, WriteAction::Delete)); - } - - #[test] - fn write_notification_deserializes() { - let json = r#"{ - "spaceUri": "ats://did:plc:owner/com.example.forum/main", - "authorDid": "did:plc:alice", - "collection": "com.example.forum.post", - "rkey": "3k2abc", - "action": "create" - }"#; - - let notif: WriteNotification = serde_json::from_str(json).unwrap(); - assert_eq!(notif.author_did, "did:plc:alice"); - assert_eq!(notif.collection, "com.example.forum.post"); - assert!(matches!(notif.action, WriteAction::Create)); - } -} diff --git a/src/spaces/sync.rs b/src/spaces/sync.rs deleted file mode 100644 index 40d5f72..0000000 --- a/src/spaces/sync.rs +++ /dev/null @@ -1,293 +0,0 @@ -use uuid::Uuid; - -use crate::db::DatabaseBackend; -use crate::db::now_rfc3339; -use crate::error::AppError; -use crate::profile::resolve_pds_endpoint; -use crate::spaces::types::*; -use crate::spaces::{db, members}; - -/// Sync all members of a space by pulling records from their PDSes. -pub async fn sync_space( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - collections: &[String], -) -> Result { - let resolved = members::resolve_members(pool, backend, space_id).await?; - let mut results = Vec::new(); - - for member in &resolved { - let result = sync_member( - http, - pool, - backend, - plc_url, - space_id, - &member.did, - collections, - ) - .await; - - results.push(MemberSyncResult { - did: member.did.clone(), - records_synced: result.as_ref().map(|r| r.records_synced).unwrap_or(0), - error: result.err().map(|e| e.to_string()), - }); - } - - let total = results.iter().map(|r| r.records_synced).sum(); - - Ok(SyncSpaceResult { - members_processed: results.len(), - total_records_synced: total, - member_results: results, - }) -} - -/// Sync records from a single member's PDS for a given space. -pub async fn sync_member( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - member_did: &str, - collections: &[String], -) -> Result { - let state_id = match db::get_sync_state(pool, backend, space_id, member_did).await? { - Some(s) => s.id, - None => { - let id = Uuid::new_v4().to_string(); - let initial = SpaceSyncState { - id: id.clone(), - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Pending, - error: None, - }; - db::upsert_sync_state(pool, backend, &initial).await?; - id - } - }; - - // Mark as syncing - let syncing_state = SpaceSyncState { - id: state_id.clone(), - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: None, - status: SyncStatus::Syncing, - error: None, - }; - db::upsert_sync_state(pool, backend, &syncing_state).await?; - - let result = pull_member_records( - http, - pool, - backend, - plc_url, - space_id, - member_did, - collections, - ) - .await; - - match result { - Ok(summary) => { - let done = SpaceSyncState { - id: state_id, - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: summary.cursor.clone(), - last_synced_at: Some(now_rfc3339()), - status: SyncStatus::Synced, - error: None, - }; - db::upsert_sync_state(pool, backend, &done).await?; - Ok(summary) - } - Err(e) => { - let err_state = SpaceSyncState { - id: state_id, - space_id: space_id.to_string(), - member_did: member_did.to_string(), - cursor: None, - last_synced_at: Some(now_rfc3339()), - status: SyncStatus::Error, - error: Some(e.to_string()), - }; - db::upsert_sync_state(pool, backend, &err_state).await?; - Err(e) - } - } -} - -async fn pull_member_records( - http: &reqwest::Client, - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - plc_url: &str, - space_id: &str, - member_did: &str, - collections: &[String], -) -> Result { - let pds_url = resolve_pds_endpoint(http, plc_url, member_did).await?; - let mut total_records = 0usize; - let mut last_cursor = None; - - for collection in collections { - let mut cursor: Option = None; - loop { - let (records, next_cursor) = fetch_records_page( - http, - &pds_url, - member_did, - collection, - cursor.as_deref(), - 100, - ) - .await?; - - if records.is_empty() { - break; - } - - for record in &records { - let uri = record["uri"].as_str().unwrap_or(""); - let rkey = extract_rkey(uri); - let cid = record["cid"].as_str().unwrap_or("").to_string(); - let value = record - .get("value") - .cloned() - .unwrap_or(serde_json::Value::Null); - - let space_record_uri = format!("ats://{space_id}/{member_did}/{collection}/{rkey}"); - - let space_record = SpaceRecord { - uri: space_record_uri, - space_id: space_id.to_string(), - author_did: member_did.to_string(), - collection: collection.clone(), - rkey: rkey.to_string(), - record: value, - cid, - indexed_at: now_rfc3339(), - }; - - db::upsert_space_record(pool, backend, &space_record).await?; - total_records += 1; - } - - last_cursor = next_cursor.clone(); - cursor = next_cursor; - - if cursor.is_none() { - break; - } - } - } - - Ok(MemberSyncSummary { - records_synced: total_records, - cursor: last_cursor, - }) -} - -async fn fetch_records_page( - http: &reqwest::Client, - pds_url: &str, - repo: &str, - collection: &str, - cursor: Option<&str>, - limit: u32, -) -> Result<(Vec, Option), AppError> { - let mut url = format!( - "{}/xrpc/com.atproto.repo.listRecords?repo={}&collection={}&limit={}", - pds_url.trim_end_matches('/'), - repo, - collection, - limit, - ); - - if let Some(c) = cursor { - url.push_str(&format!("&cursor={c}")); - } - - let resp = http - .get(&url) - .send() - .await - .map_err(|e| AppError::Internal(format!("PDS request failed: {e}")))?; - - if !resp.status().is_success() { - let status = resp.status(); - return Err(AppError::Internal(format!( - "PDS listRecords failed with {status} for {repo}/{collection}" - ))); - } - - let body: serde_json::Value = resp - .json() - .await - .map_err(|e| AppError::Internal(format!("invalid PDS response: {e}")))?; - - let records = body["records"].as_array().cloned().unwrap_or_default(); - - let next_cursor = body["cursor"].as_str().map(|s| s.to_string()); - - Ok((records, next_cursor)) -} - -fn extract_rkey(uri: &str) -> &str { - uri.rsplit('/').next().unwrap_or("") -} - -// --------------------------------------------------------------------------- -// Result types -// --------------------------------------------------------------------------- - -pub struct SyncSpaceResult { - pub members_processed: usize, - pub total_records_synced: usize, - pub member_results: Vec, -} - -pub struct MemberSyncResult { - pub did: String, - pub records_synced: usize, - pub error: Option, -} - -pub struct MemberSyncSummary { - pub records_synced: usize, - pub cursor: Option, -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn extract_rkey_from_at_uri() { - assert_eq!( - extract_rkey("at://did:plc:abc/app.bsky.feed.post/3k2abc"), - "3k2abc" - ); - } - - #[test] - fn extract_rkey_from_empty() { - assert_eq!(extract_rkey(""), ""); - } - - #[test] - fn extract_rkey_no_slash() { - assert_eq!(extract_rkey("singlevalue"), "singlevalue"); - } -} -- 2.51.2 From 77c2083f860681f925ce0cc76742bf1a9ca384a1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 4 May 2026 23:30:14 -0500 Subject: [PATCH 037/250] feat: update JS SDKs to more closely match their @atproto cousins Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/sdk/oauth-client-browser.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/docs/sdk/oauth-client-browser.md index 376bf11..d047b4d 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/docs/sdk/oauth-client-browser.md @@ -183,13 +183,6 @@ const data = await response.json(); Pass a relative path (prepends the HappyView instance URL) or a full URL (used as-is). -### Token info - -```typescript -const info = session.getTokenInfo(); -// { sub, scope, iss, aud } -``` - ## Revoke session ```typescript -- 2.51.2 From a4f990f6c129f547d00a4dc8a2c61bd9a88d82af Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 12:43:27 -0500 Subject: [PATCH 038/250] fix: remove duplicate exports in api.ts from merge Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/lib/api.ts | 55 ---------------------------------------------- 1 file changed, 55 deletions(-) diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 1b91418..f05a348 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -345,25 +345,6 @@ export function setFeatureFlag(key: string, enabled: boolean) { return deleteSetting(key); } -// Feature Flags -export type FeatureFlag = { - key: string - name: string - description: string - enabled: boolean -} - -export function getFeatureFlags() { - return apiFetch("/admin/feature-flags") -} - -export function setFeatureFlag(key: string, enabled: boolean) { - if (enabled) { - return upsertSetting(key, "true") - } - return deleteSetting(key) -} - // Proxy config export type ProxyConfig = { mode: "disabled" | "open" | "allowlist" | "blocklist"; @@ -381,42 +362,6 @@ export function updateProxyConfig(config: ProxyConfig) { }); } -// Feature Flags -export type FeatureFlag = { - key: string - name: string - description: string - enabled: boolean -} - -export function getFeatureFlags() { - return apiFetch("/admin/feature-flags") -} - -export function setFeatureFlag(key: string, enabled: boolean) { - if (enabled) { - return upsertSetting(key, "true") - } - return deleteSetting(key) -} - -// Proxy config -export type ProxyConfig = { - mode: "disabled" | "open" | "allowlist" | "blocklist" - nsids: string[] -} - -export function getProxyConfig() { - return apiFetch("/admin/settings/xrpc-proxy") -} - -export function updateProxyConfig(config: ProxyConfig) { - return apiFetch("/admin/settings/xrpc-proxy", { - method: "PUT", - body: JSON.stringify(config), - }) -} - // Labelers export function getLabelers() { return apiFetch("/admin/labelers"); -- 2.51.2 From 23e858b449e613df460f5d1c67d3f2c7a31f3d39 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 12:47:57 -0500 Subject: [PATCH 039/250] fix: prevent errors with IPv6 addresses when building loopback clients Signed-off-by: Trezy Signed-off-by: Trezy --- .../oauth-client-browser/src/__tests__/util.test.ts | 10 +++++++++- packages/oauth-client-browser/src/util.ts | 6 +++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/oauth-client-browser/src/__tests__/util.test.ts b/packages/oauth-client-browser/src/__tests__/util.test.ts index 3ae7bc2..333faa1 100644 --- a/packages/oauth-client-browser/src/__tests__/util.test.ts +++ b/packages/oauth-client-browser/src/__tests__/util.test.ts @@ -55,7 +55,15 @@ describe("buildLoopbackClientId", () => { { hostname: "localhost", pathname: "/", port: "3000" }, "::1", ); - expect(result).toContain("http%3A%2F%2F%3A%3A1%3A3000"); + expect(result).toContain(encodeURIComponent("http://[::1]:3000/")); + }); + + test("does not double-bracket already-bracketed IPv6", () => { + const result = buildLoopbackClientId( + { hostname: "[::1]", pathname: "/", port: "3000" }, + "[::1]", + ); + expect(result).toContain(encodeURIComponent("http://[::1]:3000/")); }); test("accepts [::1] hostname", () => { diff --git a/packages/oauth-client-browser/src/util.ts b/packages/oauth-client-browser/src/util.ts index a98d455..a9bea58 100644 --- a/packages/oauth-client-browser/src/util.ts +++ b/packages/oauth-client-browser/src/util.ts @@ -10,8 +10,12 @@ export function buildLoopbackClientId( ); } + const host = + localhost.includes(":") && !localhost.startsWith("[") + ? `[${localhost}]` + : localhost; const port = location.port ? `:${location.port}` : ""; - const redirectUri = `http://${localhost}${port}${location.pathname}`; + const redirectUri = `http://${host}${port}${location.pathname}`; const pathname = location.pathname === "/" ? "" : location.pathname; const encodedRedirect = encodeURIComponent(redirectUri); -- 2.51.2 From 2497621eff82d39fdfff5478b9e35b4c93d5d4af Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 12:54:11 -0500 Subject: [PATCH 040/250] ci: fix and split SDK tests Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 125 +++++++++++++++++++++++++++++++++------ 1 file changed, 106 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8652c19..1fd554b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,10 @@ jobs: runs-on: depot-ubuntu-24.04 outputs: server: ${{ steps.filter.outputs.server }} - sdk: ${{ steps.filter.outputs.sdk }} + oauth-client: ${{ steps.filter.outputs.oauth-client }} + oauth-client-browser: ${{ steps.filter.outputs.oauth-client-browser }} + oauth-client-node: ${{ steps.filter.outputs.oauth-client-node }} + lex-agent: ${{ steps.filter.outputs.lex-agent }} postgres: ${{ steps.filter.outputs.postgres }} steps: - name: Checkout repository @@ -35,10 +38,16 @@ jobs: - '**' - '!packages/**' - '!.github/workflows/merge-main-to-dev.yml' - sdk: + oauth-client: + - 'packages/oauth-client/**' + oauth-client-browser: - 'packages/oauth-client/**' - 'packages/oauth-client-browser/**' + oauth-client-node: + - 'packages/oauth-client/**' - 'packages/oauth-client-node/**' + lex-agent: + - 'packages/oauth-client/**' - 'packages/lex-agent/**' postgres: - 'docker/Dockerfile.postgres' @@ -186,11 +195,11 @@ jobs: run: npx semantic-release # --------------------------------------------------------------------------- - # SDK — tests + per-package releases + # SDK — per-package tests + releases # --------------------------------------------------------------------------- - sdk-tests: + test-oauth-client: needs: changes - if: needs.changes.outputs.sdk == 'true' + if: needs.changes.outputs.oauth-client == 'true' runs-on: depot-ubuntu-24.04 steps: - name: Checkout repository @@ -202,21 +211,99 @@ jobs: - name: Install dependencies run: bun install - - name: Build SDK packages - run: bun run --filter '@happyview/*' build + - name: Build + run: bun run --filter '@happyview/oauth-client' build + + - name: Typecheck + run: bun run --filter '@happyview/oauth-client' typecheck + + - name: Test + run: bun run --filter '@happyview/oauth-client' test + + test-oauth-client-browser: + needs: changes + if: needs.changes.outputs.oauth-client-browser == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install + + - name: Build oauth-client + run: bun run --filter '@happyview/oauth-client' build + + - name: Build oauth-client-browser + run: bun run --filter '@happyview/oauth-client-browser' build + + - name: Typecheck + run: bun run --filter '@happyview/oauth-client-browser' typecheck + + - name: Test + run: bun run --filter '@happyview/oauth-client-browser' test + + test-oauth-client-node: + needs: changes + if: needs.changes.outputs.oauth-client-node == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install + + - name: Build oauth-client + run: bun run --filter '@happyview/oauth-client' build + + - name: Build oauth-client-node + run: bun run --filter '@happyview/oauth-client-node' build + + - name: Typecheck + run: bun run --filter '@happyview/oauth-client-node' typecheck + + - name: Test + run: bun run --filter '@happyview/oauth-client-node' test + + test-lex-agent: + needs: changes + if: needs.changes.outputs.lex-agent == 'true' + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install + + - name: Build oauth-client + run: bun run --filter '@happyview/oauth-client' build + + - name: Build lex-agent + run: bun run --filter '@happyview/lex-agent' build - - name: Typecheck SDK packages - run: bun run --filter '@happyview/*' typecheck + - name: Typecheck + run: bun run --filter '@happyview/lex-agent' typecheck - - name: Test SDK packages - run: bun run --filter '@happyview/*' test + - name: Test + run: bun run --filter '@happyview/lex-agent' test release-oauth-client: if: >- github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - && needs.changes.outputs.sdk == 'true' - needs: [changes, sdk-tests] + && needs.changes.outputs.oauth-client == 'true' + needs: [changes, test-oauth-client] runs-on: depot-ubuntu-24.04 permissions: contents: write @@ -254,8 +341,8 @@ jobs: if: >- github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - && needs.changes.outputs.sdk == 'true' - needs: [changes, release-oauth-client] + && needs.changes.outputs.oauth-client-browser == 'true' + needs: [changes, test-oauth-client-browser, release-oauth-client] runs-on: depot-ubuntu-24.04 permissions: contents: write @@ -310,8 +397,8 @@ jobs: if: >- github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - && needs.changes.outputs.sdk == 'true' - needs: [changes, release-oauth-client] + && needs.changes.outputs.oauth-client-node == 'true' + needs: [changes, test-oauth-client-node, release-oauth-client] runs-on: depot-ubuntu-24.04 permissions: contents: write @@ -366,8 +453,8 @@ jobs: if: >- github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') - && needs.changes.outputs.sdk == 'true' - needs: [changes, release-oauth-client] + && needs.changes.outputs.lex-agent == 'true' + needs: [changes, test-lex-agent, release-oauth-client] runs-on: depot-ubuntu-24.04 permissions: contents: write -- 2.51.2 From 635bcd6d812670f949611ff96c81aa9f56795f9a Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 13:03:45 -0500 Subject: [PATCH 041/250] fix: update scopes type Signed-off-by: Trezy Signed-off-by: Trezy --- packages/oauth-client/src/session.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/oauth-client/src/session.ts b/packages/oauth-client/src/session.ts index 744d8bb..b1e5aa6 100644 --- a/packages/oauth-client/src/session.ts +++ b/packages/oauth-client/src/session.ts @@ -48,7 +48,7 @@ export class HappyViewSession { constructor(options: HappyViewSessionOptions) { this.did = options.did; - this.scopes = options.scopes; + this.scopes = options.scopes ? options.scopes.split(" ") : []; this.dpopKey = options.dpopKey; this.accessToken = options.accessToken; this.clientKey = options.clientKey; -- 2.51.2 From 2a9bc80dea4e56b9dd69e09d21e23e40c7f1020e Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 13:06:40 -0500 Subject: [PATCH 042/250] fix: prevent false match rewrites when a base path is in use Signed-off-by: Trezy Signed-off-by: Trezy --- src/server.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server.rs b/src/server.rs index 31fc30c..26bc268 100644 --- a/src/server.rs +++ b/src/server.rs @@ -149,7 +149,9 @@ pub fn router(state: AppState) -> Router { && let Some(loc) = response.headers().get(header::LOCATION) && let Ok(loc_str) = loc.to_str() && loc_str.starts_with('/') - && !loc_str.starts_with(&bp) + && !(loc_str.starts_with(&bp) + && (loc_str.len() == bp.len() + || loc_str.as_bytes().get(bp.len()) == Some(&b'/'))) && let Ok(new_loc) = format!("{}{}", bp, loc_str).parse() { response.headers_mut().insert(header::LOCATION, new_loc); -- 2.51.2 From 7c4ad56c44084e2d5ffb77d613f4d9209ed5b3c8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 13:08:58 -0500 Subject: [PATCH 043/250] fix: cleanup broken sessions Signed-off-by: Trezy Signed-off-by: Trezy --- src/oauth/pds_write.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/oauth/pds_write.rs b/src/oauth/pds_write.rs index a0d2aa3..3da90b4 100644 --- a/src/oauth/pds_write.rs +++ b/src/oauth/pds_write.rs @@ -190,13 +190,16 @@ async fn retry_after_refresh( api_client_id = %creds.session.api_client_id, "refresh token permanently invalid, deleting broken session" ); - let _ = super::sessions::delete_dpop_session( + if let Err(del_err) = super::sessions::delete_dpop_session( pool, backend, &creds.session.api_client_id, &creds.session.user_did, ) - .await; + .await + { + tracing::error!(%del_err, "failed to delete broken DPoP session"); + } return Err(AppError::Auth( "session expired, please re-authenticate".into(), )); -- 2.51.2 From d2a9fde4916128d1263b68c41eb951d974f031d3 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 13:10:23 -0500 Subject: [PATCH 044/250] ci: install `semantic-release-gha-output` before running core release Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1fd554b..080b041 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -192,7 +192,7 @@ jobs: id: semantic env: GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} - run: npx semantic-release + run: npx -p semantic-release -p semantic-release-gha-output semantic-release # --------------------------------------------------------------------------- # SDK — per-package tests + releases -- 2.51.2 From 3e3563f7ee56b03b47d7e968cd5fb7c9f92574ff Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 13:26:11 -0500 Subject: [PATCH 045/250] docs: add clarity to session hooks docs Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/sdk/oauth-client-browser.md | 2 +- packages/docs/docs/sdk/oauth-client-node.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/docs/sdk/oauth-client-browser.md index d047b4d..eef3bbe 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/docs/sdk/oauth-client-browser.md @@ -228,7 +228,7 @@ const client = new HappyViewBrowserClient({ }); ``` -- `onSessionUpdate(did)` fires after a session is registered (from `callback()`) or restored. +- `onSessionUpdate(did)` fires after a new session is registered (from `callback()`). - `onSessionDelete(did)` fires after a session is revoked (from `revoke()`, `logout()`, or `session.signOut()`). ## Error handling diff --git a/packages/docs/docs/sdk/oauth-client-node.md b/packages/docs/docs/sdk/oauth-client-node.md index 25d9100..2b5d2b2 100644 --- a/packages/docs/docs/sdk/oauth-client-node.md +++ b/packages/docs/docs/sdk/oauth-client-node.md @@ -216,7 +216,7 @@ const client = new HappyViewNodeClient({ }); ``` -- `onSessionUpdate(did)` fires after a session is registered (from `callback()`) or restored. +- `onSessionUpdate(did)` fires after a new session is registered (from `callback()`). - `onSessionDelete(did)` fires after a session is revoked (from `revoke()` or `session.signOut()`). ## Error handling -- 2.51.2 From 6c760888cd7aa3df88cc65f14d9e6043b3dc7ecc Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 8 May 2026 13:28:12 -0500 Subject: [PATCH 046/250] fix: cleanup derelict items after successful auth Signed-off-by: Trezy Signed-off-by: Trezy --- packages/oauth-client-node/src/node-client.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/oauth-client-node/src/node-client.ts b/packages/oauth-client-node/src/node-client.ts index 2ca23f9..f14bbc1 100644 --- a/packages/oauth-client-node/src/node-client.ts +++ b/packages/oauth-client-node/src/node-client.ts @@ -57,6 +57,7 @@ interface PendingAuthState { tokenEndpoint: string; state: string; issuer: string; + authUrl?: string; } interface AuthServerMetadata { @@ -187,6 +188,8 @@ export class HappyViewNodeClient extends HappyViewOAuthClient { request_uri: parData.request_uri, }), ); + pendingState.authUrl = url.href; + await this.storage.set(`pending-auth:${state}`, JSON.stringify(pendingState)); await this.storage.set(`pending-auth-url:${url.href}`, state); return url; } @@ -194,6 +197,8 @@ export class HappyViewNodeClient extends HappyViewOAuthClient { const url = new URL( `${authMeta.authorization_endpoint}?${authParams}`, ); + pendingState.authUrl = url.href; + await this.storage.set(`pending-auth:${state}`, JSON.stringify(pendingState)); await this.storage.set(`pending-auth-url:${url.href}`, state); return url; } @@ -320,6 +325,9 @@ export class HappyViewNodeClient extends HappyViewOAuthClient { }); await this.storage.delete(`pending-auth:${state}`); + if (pending.authUrl) { + await this.storage.delete(`pending-auth-url:${pending.authUrl}`); + } return { session, state }; } catch (err) { -- 2.51.2 From 16c3c6000bf40f214b2ea97563be04ca2fe72cf5 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 11:43:13 -0500 Subject: [PATCH 047/250] feat: refactor permissioned spaces to better align with Dan's implementation Signed-off-by: Trezy Signed-off-by: Trezy --- .../postgres/20260511000000_add_space_did.sql | 4 + .../20260511100000_add_space_revision.sql | 1 + .../sqlite/20260511000000_add_space_did.sql | 3 + .../20260511100000_add_space_revision.sql | 1 + src/lua/atproto_api.rs | 10 +- src/lua/context.rs | 16 +- src/lua/mod.rs | 2 +- src/spaces/auth.rs | 38 +- src/spaces/credential.rs | 106 +++ src/spaces/db.rs | 309 ++++++-- src/spaces/members.rs | 11 +- src/spaces/mod.rs | 28 +- src/spaces/routes.rs | 706 +++++++++++++++--- src/spaces/types.rs | 5 +- 14 files changed, 986 insertions(+), 254 deletions(-) create mode 100644 migrations/postgres/20260511000000_add_space_did.sql create mode 100644 migrations/postgres/20260511100000_add_space_revision.sql create mode 100644 migrations/sqlite/20260511000000_add_space_did.sql create mode 100644 migrations/sqlite/20260511100000_add_space_revision.sql diff --git a/migrations/postgres/20260511000000_add_space_did.sql b/migrations/postgres/20260511000000_add_space_did.sql new file mode 100644 index 0000000..e33ff12 --- /dev/null +++ b/migrations/postgres/20260511000000_add_space_did.sql @@ -0,0 +1,4 @@ +ALTER TABLE spaces ADD COLUMN did TEXT; +UPDATE spaces SET did = owner_did; +ALTER TABLE spaces ALTER COLUMN did SET NOT NULL; +CREATE UNIQUE INDEX idx_spaces_did_type_skey ON spaces(did, type_nsid, skey); diff --git a/migrations/postgres/20260511100000_add_space_revision.sql b/migrations/postgres/20260511100000_add_space_revision.sql new file mode 100644 index 0000000..800df84 --- /dev/null +++ b/migrations/postgres/20260511100000_add_space_revision.sql @@ -0,0 +1 @@ +ALTER TABLE spaces ADD COLUMN revision TEXT; diff --git a/migrations/sqlite/20260511000000_add_space_did.sql b/migrations/sqlite/20260511000000_add_space_did.sql new file mode 100644 index 0000000..07747e4 --- /dev/null +++ b/migrations/sqlite/20260511000000_add_space_did.sql @@ -0,0 +1,3 @@ +ALTER TABLE spaces ADD COLUMN did TEXT; +UPDATE spaces SET did = owner_did; +CREATE UNIQUE INDEX idx_spaces_did_type_skey ON spaces(did, type_nsid, skey); diff --git a/migrations/sqlite/20260511100000_add_space_revision.sql b/migrations/sqlite/20260511100000_add_space_revision.sql new file mode 100644 index 0000000..800df84 --- /dev/null +++ b/migrations/sqlite/20260511100000_add_space_revision.sql @@ -0,0 +1 @@ +ALTER TABLE spaces ADD COLUMN revision TEXT; diff --git a/src/lua/atproto_api.rs b/src/lua/atproto_api.rs index bde9321..e1669a6 100644 --- a/src/lua/atproto_api.rs +++ b/src/lua/atproto_api.rs @@ -280,7 +280,7 @@ pub fn register_atproto_api( let space = crate::spaces::db::get_space_by_address( &state.db, state.db_backend, - &uri.owner_did, + &uri.did, &uri.type_nsid, &uri.skey, ) @@ -321,7 +321,7 @@ pub fn register_atproto_api( let space = crate::spaces::db::get_space_by_address( &state.db, state.db_backend, - &uri.owner_did, + &uri.did, &uri.type_nsid, &uri.skey, ) @@ -361,7 +361,7 @@ pub fn register_atproto_api( let space = crate::spaces::db::get_space_by_address( &state.db, state.db_backend, - &uri.owner_did, + &uri.did, &uri.type_nsid, &uri.skey, ) @@ -416,7 +416,7 @@ pub fn register_atproto_api( let space = crate::spaces::db::get_space_by_address( &state.db, state.db_backend, - &uri.owner_did, + &uri.did, &uri.type_nsid, &uri.skey, ) @@ -433,9 +433,11 @@ pub fn register_atproto_api( &state.db, state.db_backend, &space.id, + None, collection.as_deref(), limit.min(100), cursor.as_deref(), + false, ) .await .map_err(|e| mlua::Error::runtime(format!("record query failed: {e}")))?; diff --git a/src/lua/context.rs b/src/lua/context.rs index eab578e..66e25be 100644 --- a/src/lua/context.rs +++ b/src/lua/context.rs @@ -5,8 +5,9 @@ use std::collections::HashMap; /// Optional space context passed to Lua scripts when the request is space-scoped. #[derive(Debug, Clone)] pub struct SpaceContext { - pub space_uri: String, + pub space: String, pub space_id: String, + pub did: String, pub owner_did: String, pub type_nsid: String, pub skey: String, @@ -17,8 +18,9 @@ fn set_space_context(lua: &Lua, space: Option<&SpaceContext>) -> LuaResult<()> { match space { Some(ctx) => { let table = lua.create_table()?; - table.set("space_uri", ctx.space_uri.as_str())?; + table.set("space", ctx.space.as_str())?; table.set("space_id", ctx.space_id.as_str())?; + table.set("did", ctx.did.as_str())?; table.set("owner_did", ctx.owner_did.as_str())?; table.set("type_nsid", ctx.type_nsid.as_str())?; table.set("skey", ctx.skey.as_str())?; @@ -269,8 +271,9 @@ mod tests { let lua = create_sandbox().unwrap(); let params = HashMap::new(); let space = SpaceContext { - space_uri: "ats://did:plc:owner/com.example.forum/main".into(), + space: "ats://did:plc:owner/com.example.forum/main".into(), space_id: "space-123".into(), + did: "did:plc:owner".into(), owner_did: "did:plc:owner".into(), type_nsid: "com.example.forum".into(), skey: "main".into(), @@ -288,14 +291,11 @@ mod tests { let globals = lua.globals(); let space_table: mlua::Table = globals.get("space").unwrap(); assert_eq!( - space_table.get::("space_uri").unwrap(), + space_table.get::("space").unwrap(), "ats://did:plc:owner/com.example.forum/main" ); assert_eq!(space_table.get::("space_id").unwrap(), "space-123"); - assert_eq!( - space_table.get::("owner_did").unwrap(), - "did:plc:owner" - ); + assert_eq!(space_table.get::("did").unwrap(), "did:plc:owner"); } #[test] diff --git a/src/lua/mod.rs b/src/lua/mod.rs index 69cb3cc..58733eb 100644 --- a/src/lua/mod.rs +++ b/src/lua/mod.rs @@ -5,7 +5,7 @@ mod execute; mod http_api; mod record; pub(crate) mod sandbox; -mod tid; +pub(crate) mod tid; mod xrpc_api; #[allow(unused_imports)] diff --git a/src/spaces/auth.rs b/src/spaces/auth.rs index 2b70089..9996c1b 100644 --- a/src/spaces/auth.rs +++ b/src/spaces/auth.rs @@ -9,7 +9,7 @@ use crate::db::{DatabaseBackend, adapt_sql, now_rfc3339}; use crate::error::AppError; use crate::plugin::encryption::{decrypt, encrypt}; use crate::spaces::credential::{ - DEFAULT_CREDENTIAL_TTL_SECS, SpaceCredentialClaims, sign_credential, verify_credential, + DEFAULT_CREDENTIAL_TTL_SECS, SpaceCredentialClaims, sign_credential, }; use crate::spaces::types::{AccessMode, Space}; @@ -37,9 +37,9 @@ pub async fn issue_credential( let exp = now + DEFAULT_CREDENTIAL_TTL_SECS; let claims = SpaceCredentialClaims { - iss: space.owner_did.clone(), + iss: space.did.clone(), sub: subject_did.to_string(), - space: format!("{}/{}/{}", space.owner_did, space.type_nsid, space.skey), + space: format!("ats://{}/{}/{}", space.did, space.type_nsid, space.skey), scope: "read".into(), iat: now, exp, @@ -57,19 +57,6 @@ pub async fn issue_credential( Ok(IssuedCredential { token, expires_at }) } -pub async fn refresh_credential( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - encryption_key: &[u8; 32], - space: &Space, - current_token: &str, -) -> Result { - let public_jwk = get_public_key(pool, backend, encryption_key, space).await?; - let claims = verify_credential(current_token, &public_jwk)?; - - issue_credential(pool, backend, encryption_key, space, &claims.sub, None).await -} - pub fn check_app_access(space: &Space, client_id: Option<&str>) -> Result<(), AppError> { let Some(client_id) = client_id else { return Ok(()); @@ -148,7 +135,7 @@ async fn get_or_create_signing_key( sqlx::query(&insert_sql) .bind(Uuid::new_v4().to_string()) - .bind(&space.owner_did) + .bind(&space.did) .bind(&space.id) .bind(&encrypted_signing) .bind(&encrypted_rotation) @@ -161,21 +148,6 @@ async fn get_or_create_signing_key( Ok(keypair.private_jwk) } -async fn get_public_key( - pool: &sqlx::AnyPool, - backend: DatabaseBackend, - encryption_key: &[u8; 32], - space: &Space, -) -> Result { - let private_jwk = get_or_create_signing_key(pool, backend, encryption_key, space).await?; - Ok(serde_json::json!({ - "kty": "EC", - "crv": "P-256", - "x": private_jwk["x"], - "y": private_jwk["y"], - })) -} - struct SpaceKeypair { private_jwk: serde_json::Value, } @@ -252,6 +224,7 @@ mod tests { fn test_space(access_mode: AccessMode) -> Space { Space { id: "test-space".into(), + did: "did:plc:owner".into(), owner_did: "did:plc:owner".into(), type_nsid: "com.example.forum".into(), skey: "main".into(), @@ -262,6 +235,7 @@ mod tests { app_denylist: None, managing_app_did: None, config: SpaceConfig::default(), + revision: None, created_at: String::new(), updated_at: String::new(), } diff --git a/src/spaces/credential.rs b/src/spaces/credential.rs index a2bbbc3..d20054f 100644 --- a/src/spaces/credential.rs +++ b/src/spaces/credential.rs @@ -7,6 +7,43 @@ use crate::error::AppError; use crate::profile; pub const DEFAULT_CREDENTIAL_TTL_SECS: u64 = 4 * 60 * 60; // 4 hours +pub const GRANT_TTL_SECS: u64 = 5 * 60; // 5 minutes + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct MemberGrantClaims { + pub sub: String, + pub space: String, + pub scope: String, + pub iat: u64, + pub exp: u64, +} + +pub fn sign_grant(claims: &MemberGrantClaims, secret: &[u8; 32]) -> Result { + let header = jsonwebtoken::Header::new(jsonwebtoken::Algorithm::HS256); + let key = jsonwebtoken::EncodingKey::from_secret(secret); + jsonwebtoken::encode(&header, claims, &key) + .map_err(|e| AppError::Internal(format!("failed to sign member grant: {e}"))) +} + +pub fn verify_grant(token: &str, secret: &[u8; 32]) -> Result { + let key = jsonwebtoken::DecodingKey::from_secret(secret); + let mut validation = jsonwebtoken::Validation::new(jsonwebtoken::Algorithm::HS256); + validation.required_spec_claims.clear(); + validation.validate_exp = false; + let data = jsonwebtoken::decode::(token, &key, &validation) + .map_err(|e| AppError::Auth(format!("invalid member grant: {e}")))?; + + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs(); + + if now > data.claims.exp { + return Err(AppError::Auth("member grant has expired".into())); + } + + Ok(data.claims) +} #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SpaceCredentialClaims { @@ -281,4 +318,73 @@ mod tests { let result = verify_credential("not-a-jwt", &keypair.public_jwk); assert!(result.is_err()); } + + fn test_secret() -> [u8; 32] { + [0xAB; 32] + } + + #[test] + fn grant_sign_and_verify_roundtrip() { + let secret = test_secret(); + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs(); + let claims = MemberGrantClaims { + sub: "did:plc:member".into(), + space: "ats://did:plc:space/com.example.forum/main".into(), + scope: "read".into(), + iat: now, + exp: now + GRANT_TTL_SECS, + }; + + let token = sign_grant(&claims, &secret).unwrap(); + let verified = verify_grant(&token, &secret).unwrap(); + + assert_eq!(verified.sub, claims.sub); + assert_eq!(verified.space, claims.space); + assert_eq!(verified.scope, claims.scope); + } + + #[test] + fn grant_rejects_wrong_secret() { + let secret1 = [0xAB; 32]; + let secret2 = [0xCD; 32]; + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs(); + let claims = MemberGrantClaims { + sub: "did:plc:member".into(), + space: "ats://did:plc:space/com.example.forum/main".into(), + scope: "read".into(), + iat: now, + exp: now + GRANT_TTL_SECS, + }; + + let token = sign_grant(&claims, &secret1).unwrap(); + let result = verify_grant(&token, &secret2); + assert!(result.is_err()); + } + + #[test] + fn grant_rejects_expired() { + let secret = test_secret(); + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs(); + let claims = MemberGrantClaims { + sub: "did:plc:member".into(), + space: "ats://did:plc:space/com.example.forum/main".into(), + scope: "read".into(), + iat: now - 600, + exp: now - 300, + }; + + let token = sign_grant(&claims, &secret).unwrap(); + let result = verify_grant(&token, &secret); + assert!(result.is_err()); + assert!(result.unwrap_err().to_string().contains("expired")); + } } diff --git a/src/spaces/db.rs b/src/spaces/db.rs index 5577a50..88d19b3 100644 --- a/src/spaces/db.rs +++ b/src/spaces/db.rs @@ -24,12 +24,13 @@ pub async fn create_space( .map(|v| serde_json::to_string(v).unwrap_or_default()); let sql = adapt_sql( - "INSERT INTO spaces (id, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO spaces (id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", backend, ); sqlx::query(&sql) .bind(&space.id) + .bind(&space.did) .bind(&space.owner_did) .bind(&space.type_nsid) .bind(&space.skey) @@ -55,7 +56,7 @@ pub async fn get_space( id: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at FROM spaces WHERE id = ?", + "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE id = ?", backend, ); @@ -71,17 +72,17 @@ pub async fn get_space( pub async fn get_space_by_address( pool: &sqlx::AnyPool, backend: DatabaseBackend, - owner_did: &str, + did: &str, type_nsid: &str, skey: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at FROM spaces WHERE owner_did = ? AND type_nsid = ? AND skey = ?", + "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE did = ? AND type_nsid = ? AND skey = ?", backend, ); let row: Option = sqlx::query_as(&sql) - .bind(owner_did) + .bind(did) .bind(type_nsid) .bind(skey) .fetch_optional(pool) @@ -94,15 +95,15 @@ pub async fn get_space_by_address( pub async fn list_spaces_by_owner( pool: &sqlx::AnyPool, backend: DatabaseBackend, - owner_did: &str, + did: &str, ) -> Result, AppError> { let sql = adapt_sql( - "SELECT id, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, created_at, updated_at FROM spaces WHERE owner_did = ? ORDER BY created_at DESC", + "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE owner_did = ? ORDER BY created_at DESC", backend, ); let rows: Vec = sqlx::query_as(&sql) - .bind(owner_did) + .bind(did) .fetch_all(pool) .await .map_err(|e| AppError::Internal(format!("failed to list spaces: {e}")))?; @@ -110,6 +111,58 @@ pub async fn list_spaces_by_owner( rows.into_iter().map(parse_space_row).collect() } +pub struct SpaceView { + pub uri: String, + pub is_owner: bool, +} + +pub async fn list_spaces_for_user( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + did: &str, + limit: i64, + cursor: Option<&str>, +) -> Result, AppError> { + let (sql, has_cursor) = if cursor.is_some() { + ( + adapt_sql( + "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? AND sm.created_at > ? ORDER BY sm.created_at ASC LIMIT ?", + backend, + ), + true, + ) + } else { + ( + adapt_sql( + "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? ORDER BY sm.created_at ASC LIMIT ?", + backend, + ), + false, + ) + }; + + let mut query = sqlx::query_as::<_, (String, String, String, String, String)>(&sql).bind(did); + if has_cursor { + query = query.bind(cursor.unwrap()); + } + query = query.bind(limit); + + let rows = query + .fetch_all(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to list spaces for user: {e}")))?; + + Ok(rows + .into_iter() + .map( + |(space_did, owner_did, type_nsid, skey, _created_at)| SpaceView { + uri: format!("ats://{}/{}/{}", space_did, type_nsid, skey), + is_owner: owner_did == did, + }, + ) + .collect()) +} + pub async fn update_space( pool: &sqlx::AnyPool, backend: DatabaseBackend, @@ -170,6 +223,7 @@ type SpaceRow = ( String, String, String, + String, Option, Option, String, @@ -177,40 +231,43 @@ type SpaceRow = ( Option, Option, String, + Option, String, String, ); fn parse_space_row(r: SpaceRow) -> Result { - let access_mode = AccessMode::parse(&r.6) - .ok_or_else(|| AppError::Internal(format!("invalid access_mode: {}", r.6)))?; + let access_mode = AccessMode::parse(&r.7) + .ok_or_else(|| AppError::Internal(format!("invalid access_mode: {}", r.7)))?; let app_allowlist: Option> = - r.7.as_deref() + r.8.as_deref() .map(serde_json::from_str) .transpose() .map_err(|e| AppError::Internal(format!("invalid app_allowlist: {e}")))?; let app_denylist: Option> = - r.8.as_deref() + r.9.as_deref() .map(serde_json::from_str) .transpose() .map_err(|e| AppError::Internal(format!("invalid app_denylist: {e}")))?; - let config: SpaceConfig = serde_json::from_str(&r.10) + let config: SpaceConfig = serde_json::from_str(&r.11) .map_err(|e| AppError::Internal(format!("invalid space config: {e}")))?; Ok(Space { id: r.0, - owner_did: r.1, - type_nsid: r.2, - skey: r.3, - display_name: r.4, - description: r.5, + did: r.1, + owner_did: r.2, + type_nsid: r.3, + skey: r.4, + display_name: r.5, + description: r.6, access_mode, app_allowlist, app_denylist, - managing_app_did: r.9, + managing_app_did: r.10, config, - created_at: r.11, - updated_at: r.12, + revision: r.12, + created_at: r.13, + updated_at: r.14, }) } @@ -232,7 +289,7 @@ pub async fn add_member( sqlx::query(&sql) .bind(&member.id) .bind(&member.space_id) - .bind(&member.member_did) + .bind(&member.did) .bind(member.access.as_str()) .bind(member.is_delegation as i32) .bind(&member.granted_by) @@ -248,7 +305,7 @@ pub async fn remove_member( pool: &sqlx::AnyPool, backend: DatabaseBackend, space_id: &str, - member_did: &str, + did: &str, ) -> Result { let sql = adapt_sql( "DELETE FROM space_members WHERE space_id = ? AND member_did = ?", @@ -257,7 +314,7 @@ pub async fn remove_member( let result = sqlx::query(&sql) .bind(space_id) - .bind(member_did) + .bind(did) .execute(pool) .await .map_err(|e| AppError::Internal(format!("failed to remove member: {e}")))?; @@ -269,7 +326,7 @@ pub async fn get_member( pool: &sqlx::AnyPool, backend: DatabaseBackend, space_id: &str, - member_did: &str, + did: &str, ) -> Result, AppError> { let sql = adapt_sql( "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM space_members WHERE space_id = ? AND member_did = ?", @@ -278,7 +335,7 @@ pub async fn get_member( let row: Option = sqlx::query_as(&sql) .bind(space_id) - .bind(member_did) + .bind(did) .fetch_optional(pool) .await .map_err(|e| AppError::Internal(format!("failed to get member: {e}")))?; @@ -308,7 +365,7 @@ pub async fn list_direct_members( pub async fn list_spaces_for_member( pool: &sqlx::AnyPool, backend: DatabaseBackend, - member_did: &str, + did: &str, ) -> Result, AppError> { let sql = adapt_sql( "SELECT id, space_id, member_did, access, is_delegation, granted_by, created_at FROM space_members WHERE member_did = ? ORDER BY created_at ASC", @@ -316,7 +373,7 @@ pub async fn list_spaces_for_member( ); let rows: Vec = sqlx::query_as(&sql) - .bind(member_did) + .bind(did) .fetch_all(pool) .await .map_err(|e| AppError::Internal(format!("failed to list spaces for member: {e}")))?; @@ -333,7 +390,7 @@ fn parse_member_row(r: MemberRow) -> Result { Ok(SpaceMember { id: r.0, space_id: r.1, - member_did: r.2, + did: r.2, access, is_delegation: r.4 != 0, granted_by: r.5, @@ -422,56 +479,49 @@ pub async fn get_space_record_by_parts( row.map(parse_record_row).transpose() } +#[allow(clippy::too_many_arguments)] pub async fn list_space_records( pool: &sqlx::AnyPool, backend: DatabaseBackend, space_id: &str, + repo: Option<&str>, collection: Option<&str>, limit: i64, cursor: Option<&str>, + reverse: bool, ) -> Result, AppError> { - let (sql, has_collection, has_cursor) = match (collection, cursor) { - (Some(_), Some(_)) => ( - adapt_sql( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE space_id = ? AND collection = ? AND indexed_at > ? ORDER BY indexed_at ASC LIMIT ?", - backend, - ), - true, - true, - ), - (Some(_), None) => ( - adapt_sql( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE space_id = ? AND collection = ? ORDER BY indexed_at ASC LIMIT ?", - backend, - ), - true, - false, - ), - (None, Some(_)) => ( - adapt_sql( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE space_id = ? AND indexed_at > ? ORDER BY indexed_at ASC LIMIT ?", - backend, - ), - false, - true, - ), - (None, None) => ( - adapt_sql( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE space_id = ? ORDER BY indexed_at ASC LIMIT ?", - backend, - ), - false, - false, - ), + let mut conditions = vec!["space_id = ?".to_string()]; + if repo.is_some() { + conditions.push("author_did = ?".to_string()); + } + if collection.is_some() { + conditions.push("collection = ?".to_string()); + } + let (cursor_op, order) = if reverse { + ("indexed_at < ?", "DESC") + } else { + ("indexed_at > ?", "ASC") }; + if cursor.is_some() { + conditions.push(cursor_op.to_string()); + } - let mut query = sqlx::query_as::<_, RecordRow>(&sql).bind(space_id); + let where_clause = conditions.join(" AND "); + let raw = format!( + "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE {} ORDER BY indexed_at {} LIMIT ?", + where_clause, order + ); + let sql = adapt_sql(&raw, backend); - if has_collection { - query = query.bind(collection.unwrap()); + let mut query = sqlx::query_as::<_, RecordRow>(&sql).bind(space_id); + if let Some(r) = repo { + query = query.bind(r); } - if has_cursor { - query = query.bind(cursor.unwrap()); + if let Some(c) = collection { + query = query.bind(c); + } + if let Some(cur) = cursor { + query = query.bind(cur); } query = query.bind(limit); @@ -483,6 +533,79 @@ pub async fn list_space_records( rows.into_iter().map(parse_record_row).collect() } +pub async fn insert_space_record( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + record: &SpaceRecord, +) -> Result<(), AppError> { + let now = now_rfc3339(); + let record_json = serde_json::to_string(&record.record) + .map_err(|e| AppError::Internal(format!("failed to serialize record: {e}")))?; + + let sql = adapt_sql( + "INSERT INTO space_records (uri, space_id, author_did, collection, rkey, record, cid, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + backend, + ); + + sqlx::query(&sql) + .bind(&record.uri) + .bind(&record.space_id) + .bind(&record.author_did) + .bind(&record.collection) + .bind(&record.rkey) + .bind(&record_json) + .bind(&record.cid) + .bind(&now) + .execute(pool) + .await + .map_err(|e| { + let msg = e.to_string(); + if msg.contains("UNIQUE") || msg.contains("duplicate") || msg.contains("unique") { + AppError::Conflict("Record already exists".into()) + } else { + AppError::Internal(format!("failed to create space record: {e}")) + } + })?; + + Ok(()) +} + +pub async fn upsert_space_record_with_swap( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + record: &SpaceRecord, + swap_cid: &str, +) -> Result<(), AppError> { + let now = now_rfc3339(); + let record_json = serde_json::to_string(&record.record) + .map_err(|e| AppError::Internal(format!("failed to serialize record: {e}")))?; + + let sql = adapt_sql( + "UPDATE space_records SET record = ?, cid = ?, indexed_at = ? WHERE uri = ? AND cid = ?", + backend, + ); + + let result = sqlx::query(&sql) + .bind(&record_json) + .bind(&record.cid) + .bind(&now) + .bind(&record.uri) + .bind(swap_cid) + .execute(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to update space record: {e}")))?; + + if result.rows_affected() == 0 { + let existing = get_space_record(pool, backend, &record.uri).await?; + if existing.is_some() { + return Err(AppError::Conflict("Record CID mismatch".into())); + } + return Err(AppError::NotFound("Record not found".into())); + } + + Ok(()) +} + pub async fn delete_space_record( pool: &sqlx::AnyPool, backend: DatabaseBackend, @@ -499,6 +622,58 @@ pub async fn delete_space_record( Ok(result.rows_affected() > 0) } +pub async fn delete_space_record_with_swap( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + uri: &str, + swap_cid: &str, +) -> Result { + let sql = adapt_sql( + "DELETE FROM space_records WHERE uri = ? AND cid = ?", + backend, + ); + + let result = sqlx::query(&sql) + .bind(uri) + .bind(swap_cid) + .execute(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to delete space record: {e}")))?; + + if result.rows_affected() == 0 { + let existing = get_space_record(pool, backend, uri).await?; + if existing.is_some() { + return Err(AppError::Conflict("Record CID mismatch".into())); + } + return Err(AppError::NotFound("Record not found".into())); + } + + Ok(true) +} + +pub async fn update_space_revision( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + space_id: &str, + revision: &str, +) -> Result<(), AppError> { + let now = now_rfc3339(); + let sql = adapt_sql( + "UPDATE spaces SET revision = ?, updated_at = ? WHERE id = ?", + backend, + ); + + sqlx::query(&sql) + .bind(revision) + .bind(&now) + .bind(space_id) + .execute(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to update space revision: {e}")))?; + + Ok(()) +} + type RecordRow = ( String, String, diff --git a/src/spaces/members.rs b/src/spaces/members.rs index a7212d7..477df80 100644 --- a/src/spaces/members.rs +++ b/src/spaces/members.rs @@ -77,7 +77,7 @@ fn resolve_members_recursive<'a>( .await?; } } else { - merge_access(resolved, &member.member_did, member.access); + merge_access(resolved, &member.did, member.access); } } @@ -93,14 +93,13 @@ async fn resolve_delegation_target( backend: DatabaseBackend, member: &SpaceMember, ) -> Result, AppError> { - if member.member_did.starts_with("ats://") { - let uri = SpaceUri::parse(&member.member_did)?; + if member.did.starts_with("ats://") { + let uri = SpaceUri::parse(&member.did)?; let space = - db::get_space_by_address(pool, backend, &uri.owner_did, &uri.type_nsid, &uri.skey) - .await?; + db::get_space_by_address(pool, backend, &uri.did, &uri.type_nsid, &uri.skey).await?; Ok(space.map(|s| s.id)) } else { - let space = db::get_space(pool, backend, &member.member_did).await?; + let space = db::get_space(pool, backend, &member.did).await?; Ok(space.map(|s| s.id)) } } diff --git a/src/spaces/mod.rs b/src/spaces/mod.rs index 385f183..8dc3c7d 100644 --- a/src/spaces/mod.rs +++ b/src/spaces/mod.rs @@ -10,11 +10,11 @@ use std::fmt; /// A parsed `ats://` URI for addressing permissioned data. /// -/// Full form: `ats:///////` -/// Space-only form: `ats:////` +/// Full form: `ats:///////` +/// Space-only form: `ats:////` #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SpaceUri { - pub owner_did: String, + pub did: String, pub type_nsid: String, pub skey: String, pub user_did: Option, @@ -32,7 +32,7 @@ impl SpaceUri { if parts.len() < 3 { return Err(AppError::BadRequest( - "SpaceUri requires at least owner_did/type_nsid/skey".into(), + "SpaceUri requires at least did/type_nsid/skey".into(), )); } @@ -42,7 +42,7 @@ impl SpaceUri { )); } - let owner_did = parts[0].to_string(); + let did = parts[0].to_string(); let type_nsid = parts[1].to_string(); let skey = parts[2].to_string(); @@ -61,7 +61,7 @@ impl SpaceUri { }; Ok(SpaceUri { - owner_did, + did, type_nsid, skey, user_did, @@ -71,7 +71,7 @@ impl SpaceUri { } pub fn space_uri(&self) -> String { - format!("ats://{}/{}/{}", self.owner_did, self.type_nsid, self.skey) + format!("ats://{}/{}/{}", self.did, self.type_nsid, self.skey) } pub fn is_record_uri(&self) -> bool { @@ -85,11 +85,7 @@ impl SpaceUri { impl fmt::Display for SpaceUri { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!( - f, - "ats://{}/{}/{}", - self.owner_did, self.type_nsid, self.skey - )?; + write!(f, "ats://{}/{}/{}", self.did, self.type_nsid, self.skey)?; if let (Some(user), Some(col), Some(rkey)) = (&self.user_did, &self.collection, &self.rkey) { write!(f, "/{}/{}/{}", user, col, rkey)?; @@ -105,7 +101,7 @@ mod tests { #[test] fn parse_space_uri() { let uri = SpaceUri::parse("ats://did:plc:abc123/com.example.forum/main").unwrap(); - assert_eq!(uri.owner_did, "did:plc:abc123"); + assert_eq!(uri.did, "did:plc:abc123"); assert_eq!(uri.type_nsid, "com.example.forum"); assert_eq!(uri.skey, "main"); assert!(uri.is_space_uri()); @@ -119,7 +115,7 @@ mod tests { "ats://did:plc:abc123/com.example.forum/main/did:plc:user1/com.example.forum.post/3k2abc", ) .unwrap(); - assert_eq!(uri.owner_did, "did:plc:abc123"); + assert_eq!(uri.did, "did:plc:abc123"); assert_eq!(uri.type_nsid, "com.example.forum"); assert_eq!(uri.skey, "main"); assert_eq!(uri.user_did.as_deref(), Some("did:plc:user1")); @@ -132,7 +128,7 @@ mod tests { #[test] fn display_space_uri() { let uri = SpaceUri { - owner_did: "did:plc:abc123".into(), + did: "did:plc:abc123".into(), type_nsid: "com.example.forum".into(), skey: "main".into(), user_did: None, @@ -148,7 +144,7 @@ mod tests { #[test] fn display_record_uri() { let uri = SpaceUri { - owner_did: "did:plc:abc123".into(), + did: "did:plc:abc123".into(), type_nsid: "com.example.forum".into(), skey: "main".into(), user_did: Some("did:plc:user1".into()), diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index 543707c..29abc02 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -11,6 +11,7 @@ use crate::AppState; use crate::auth::XrpcClaims; use crate::db::{adapt_sql, now_rfc3339}; use crate::error::AppError; +use crate::lua::tid::generate_tid; use crate::spaces::types::*; use crate::spaces::{SpaceUri, db, members}; @@ -21,6 +22,7 @@ use crate::spaces::{SpaceUri, db, members}; #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct CreateSpaceInput { + #[serde(rename = "type")] type_nsid: String, skey: String, display_name: Option, @@ -33,25 +35,27 @@ struct CreateSpaceInput { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct SpaceUriQuery { - space_uri: String, + space: String, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct ListSpacesQuery { - owner_did: Option, + did: Option, + limit: Option, + cursor: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct DeleteSpaceInput { - space_uri: String, + space: String, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct UpdateSpaceInput { - space_uri: String, + space: String, display_name: Option>, description: Option>, access_mode: Option, @@ -64,24 +68,26 @@ struct UpdateSpaceInput { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct PutRecordInput { - space_uri: String, + space: String, collection: String, rkey: String, record: serde_json::Value, + swap_record: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct DeleteRecordInput { - space_uri: String, + space: String, collection: String, rkey: String, + swap_record: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct GetRecordQuery { - space_uri: String, + space: String, collection: String, rkey: String, } @@ -89,17 +95,19 @@ struct GetRecordQuery { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct ListRecordsQuery { - space_uri: String, + space: String, + repo: Option, collection: Option, limit: Option, cursor: Option, + reverse: Option, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct AddMemberInput { - space_uri: String, - member_did: String, + space: String, + did: String, access: Option, is_delegation: Option, } @@ -107,14 +115,14 @@ struct AddMemberInput { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct RemoveMemberInput { - space_uri: String, - member_did: String, + space: String, + did: String, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct CreateInviteInput { - space_uri: String, + space: String, access: Option, max_uses: Option, expires_at: Option, @@ -129,21 +137,59 @@ struct RedeemInviteInput { #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct RevokeInviteInput { - space_uri: String, + space: String, invite_id: String, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] -struct GetCredentialInput { - space_uri: String, +struct GetMemberGrantInput { + space: String, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct GetSpaceCredentialInput { + grant: String, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct CreateRecordInput { + space: String, + collection: String, + record: serde_json::Value, } #[derive(Deserialize)] #[serde(rename_all = "camelCase")] -struct RefreshCredentialInput { - space_uri: String, - credential: String, +struct ApplyWritesInput { + space: String, + swap_commit: Option, + writes: Vec, +} + +#[derive(Deserialize)] +#[serde(tag = "action", rename_all = "camelCase")] +enum WriteOp { + Create { + collection: String, + rkey: Option, + value: serde_json::Value, + }, + Update { + collection: String, + rkey: String, + value: serde_json::Value, + #[serde(rename = "swapRecord")] + swap_record: Option, + }, + Delete { + collection: String, + rkey: String, + #[serde(rename = "swapRecord")] + swap_record: Option, + }, } // --------------------------------------------------------------------------- @@ -161,11 +207,16 @@ pub fn space_routes() -> Router { .route(&format!("/xrpc/{NS}.space.delete"), post(delete_space)) .route(&format!("/xrpc/{NS}.space.update"), post(update_space)) // Records + .route( + &format!("/xrpc/{NS}.space.createRecord"), + post(create_record), + ) .route(&format!("/xrpc/{NS}.space.putRecord"), post(put_record)) .route( &format!("/xrpc/{NS}.space.deleteRecord"), post(delete_record), ) + .route(&format!("/xrpc/{NS}.space.applyWrites"), post(apply_writes)) .route(&format!("/xrpc/{NS}.space.getRecord"), get(get_record)) .route(&format!("/xrpc/{NS}.space.listRecords"), get(list_records)) // Members @@ -191,12 +242,12 @@ pub fn space_routes() -> Router { .route(&format!("/xrpc/{NS}.space.invite.list"), get(list_invites)) // Credentials .route( - &format!("/xrpc/{NS}.space.getCredential"), - post(get_credential), + &format!("/xrpc/{NS}.space.getMemberGrant"), + post(get_member_grant), ) .route( - &format!("/xrpc/{NS}.space.refreshCredential"), - post(refresh_credential), + &format!("/xrpc/{NS}.space.getSpaceCredential"), + post(get_space_credential), ) } @@ -216,7 +267,7 @@ async fn resolve_space(state: &AppState, space_uri: &str) -> Result, ) -> Result { if let Some(token) = space_credential { - let space_uri = format!( - "ats://{}/{}/{}", - space.owner_did, space.type_nsid, space.skey - ); + let space_uri = format!("ats://{}/{}/{}", space.did, space.type_nsid, space.skey); match crate::spaces::credential::verify_external_credential( token, &state.http, @@ -319,9 +367,7 @@ async fn create_space( let did = claims.did().to_string(); if input.type_nsid.is_empty() || input.skey.is_empty() { - return Err(AppError::BadRequest( - "type_nsid and skey are required".into(), - )); + return Err(AppError::BadRequest("type and skey are required".into())); } let existing = db::get_space_by_address( @@ -340,6 +386,7 @@ async fn create_space( let space = Space { id: Uuid::new_v4().to_string(), + did: did.clone(), owner_did: did.clone(), type_nsid: input.type_nsid, skey: input.skey, @@ -350,6 +397,7 @@ async fn create_space( app_denylist: None, managing_app_did: input.managing_app_did, config: input.config.unwrap_or_default(), + revision: None, created_at: now_rfc3339(), updated_at: now_rfc3339(), }; @@ -360,7 +408,7 @@ async fn create_space( let member = SpaceMember { id: Uuid::new_v4().to_string(), space_id: space.id.clone(), - member_did: did.clone(), + did: did.clone(), access: SpaceAccess::Write, is_delegation: false, granted_by: Some(did), @@ -368,13 +416,9 @@ async fn create_space( }; db::add_member(&state.db, state.db_backend, &member).await?; - let space_uri = format!( - "ats://{}/{}/{}", - space.owner_did, space.type_nsid, space.skey - ); + let space_uri = format!("ats://{}/{}/{}", space.did, space.type_nsid, space.skey); let body = serde_json::json!({ - "spaceUri": space_uri, - "space": space, + "uri": space_uri, }); let mut response = Json(body).into_response(); @@ -387,7 +431,7 @@ async fn get_space( xrpc_claims: XrpcClaims, Query(query): Query, ) -> Result, AppError> { - let space = resolve_space(&state, &query.space_uri).await?; + let space = resolve_space(&state, &query.space).await?; // If the space's membership is not public, require auth + membership if !space.config.membership_public { @@ -400,12 +444,9 @@ async fn get_space( } } - let space_uri = format!( - "ats://{}/{}/{}", - space.owner_did, space.type_nsid, space.skey - ); + let space_uri = format!("ats://{}/{}/{}", space.did, space.type_nsid, space.skey); Ok(Json(serde_json::json!({ - "spaceUri": space_uri, + "uri": space_uri, "space": space, }))) } @@ -416,20 +457,38 @@ async fn list_spaces( Query(query): Query, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let did = claims.did().to_string(); + let did = query.did.unwrap_or_else(|| claims.did().to_string()); + let limit = query.limit.unwrap_or(50).min(100); - let owner = query.owner_did.as_deref().unwrap_or(&did); - let spaces = db::list_spaces_by_owner(&state.db, state.db_backend, owner).await?; + let views = db::list_spaces_for_user( + &state.db, + state.db_backend, + &did, + limit, + query.cursor.as_deref(), + ) + .await?; + + let cursor = if views.len() as i64 == limit { + views.last().map(|v| v.uri.clone()) + } else { + None + }; - let spaces_with_uris: Vec = spaces + let spaces_json: Vec = views .into_iter() - .map(|s| { - let uri = format!("ats://{}/{}/{}", s.owner_did, s.type_nsid, s.skey); - serde_json::json!({ "spaceUri": uri, "space": s }) + .map(|v| { + serde_json::json!({ + "uri": v.uri, + "isOwner": v.is_owner, + }) }) .collect(); - Ok(Json(serde_json::json!({ "spaces": spaces_with_uris }))) + Ok(Json(serde_json::json!({ + "spaces": spaces_json, + "cursor": cursor, + }))) } async fn delete_space( @@ -438,7 +497,7 @@ async fn delete_space( Json(input): Json, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; require_space_admin(&state, &space, claims.did()).await?; db::delete_space(&state.db, state.db_backend, &space.id).await?; @@ -452,7 +511,7 @@ async fn update_space( Json(input): Json, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let mut space = resolve_space(&state, &input.space_uri).await?; + let mut space = resolve_space(&state, &input.space).await?; require_space_admin(&state, &space, claims.did()).await?; if let Some(name) = input.display_name { @@ -479,12 +538,9 @@ async fn update_space( db::update_space(&state.db, state.db_backend, &space).await?; - let space_uri = format!( - "ats://{}/{}/{}", - space.owner_did, space.type_nsid, space.skey - ); + let space_uri = format!("ats://{}/{}/{}", space.did, space.type_nsid, space.skey); Ok(Json(serde_json::json!({ - "spaceUri": space_uri, + "uri": space_uri, "space": space, }))) } @@ -493,6 +549,51 @@ async fn update_space( // Record handlers // --------------------------------------------------------------------------- +async fn create_record( + State(state): State, + xrpc_claims: XrpcClaims, + headers: HeaderMap, + Json(input): Json, +) -> Result { + let claims = require_auth(&xrpc_claims)?; + let did = claims.did().to_string(); + let space = resolve_space(&state, &input.space).await?; + let cred = extract_space_credential(&headers); + require_membership(&state, &space, &did, true, cred.as_deref()).await?; + + let rkey = generate_tid(); + let cid = content_cid(&input.record); + let record_uri = format!( + "ats://{}/{}/{}/{}/{}/{}", + space.did, space.type_nsid, space.skey, did, input.collection, rkey + ); + + let record = SpaceRecord { + uri: record_uri.clone(), + space_id: space.id.clone(), + author_did: did, + collection: input.collection, + rkey, + record: input.record, + cid: cid.clone(), + indexed_at: now_rfc3339(), + }; + + db::insert_space_record(&state.db, state.db_backend, &record).await?; + + let rev = generate_tid(); + db::update_space_revision(&state.db, state.db_backend, &space.id, &rev).await?; + + let body = serde_json::json!({ + "uri": record_uri, + "cid": cid, + }); + + let mut response = Json(body).into_response(); + *response.status_mut() = StatusCode::CREATED; + Ok(response) +} + async fn put_record( State(state): State, xrpc_claims: XrpcClaims, @@ -501,19 +602,19 @@ async fn put_record( ) -> Result { let claims = require_auth(&xrpc_claims)?; let did = claims.did().to_string(); - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; let cred = extract_space_credential(&headers); require_membership(&state, &space, &did, true, cred.as_deref()).await?; let cid = content_cid(&input.record); let record_uri = format!( "ats://{}/{}/{}/{}/{}/{}", - space.owner_did, space.type_nsid, space.skey, did, input.collection, input.rkey + space.did, space.type_nsid, space.skey, did, input.collection, input.rkey ); let record = SpaceRecord { uri: record_uri.clone(), - space_id: space.id, + space_id: space.id.clone(), author_did: did, collection: input.collection, rkey: input.rkey, @@ -522,7 +623,14 @@ async fn put_record( indexed_at: now_rfc3339(), }; - db::upsert_space_record(&state.db, state.db_backend, &record).await?; + if let Some(swap_cid) = input.swap_record { + db::upsert_space_record_with_swap(&state.db, state.db_backend, &record, &swap_cid).await?; + } else { + db::upsert_space_record(&state.db, state.db_backend, &record).await?; + } + + let rev = generate_tid(); + db::update_space_revision(&state.db, state.db_backend, &space.id, &rev).await?; let body = serde_json::json!({ "uri": record_uri, @@ -541,31 +649,163 @@ async fn delete_record( ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; let did = claims.did().to_string(); - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; let record_uri = format!( "ats://{}/{}/{}/{}/{}/{}", - space.owner_did, space.type_nsid, space.skey, did, input.collection, input.rkey + space.did, space.type_nsid, space.skey, did, input.collection, input.rkey ); - let record = db::get_space_record(&state.db, state.db_backend, &record_uri).await?; - match record { - Some(r) if r.author_did != did => { - return Err(AppError::Forbidden( - "You can only delete your own records".into(), - )); - } - None => { - return Err(AppError::NotFound("Record not found".into())); + if let Some(swap_cid) = input.swap_record { + db::delete_space_record_with_swap(&state.db, state.db_backend, &record_uri, &swap_cid) + .await?; + } else { + let record = db::get_space_record(&state.db, state.db_backend, &record_uri).await?; + match record { + Some(r) if r.author_did != did => { + return Err(AppError::Forbidden( + "You can only delete your own records".into(), + )); + } + None => { + return Err(AppError::NotFound("Record not found".into())); + } + _ => {} } - _ => {} + db::delete_space_record(&state.db, state.db_backend, &record_uri).await?; } - db::delete_space_record(&state.db, state.db_backend, &record_uri).await?; + let rev = generate_tid(); + db::update_space_revision(&state.db, state.db_backend, &space.id, &rev).await?; Ok(Json(serde_json::json!({ "success": true }))) } +async fn apply_writes( + State(state): State, + xrpc_claims: XrpcClaims, + headers: HeaderMap, + Json(input): Json, +) -> Result, AppError> { + let claims = require_auth(&xrpc_claims)?; + let did = claims.did().to_string(); + let space = resolve_space(&state, &input.space).await?; + let cred = extract_space_credential(&headers); + require_membership(&state, &space, &did, true, cred.as_deref()).await?; + + if let Some(ref expected_rev) = input.swap_commit { + match &space.revision { + Some(current_rev) if current_rev != expected_rev => { + return Err(AppError::Conflict("swapCommit mismatch".into())); + } + None if !expected_rev.is_empty() => { + return Err(AppError::Conflict("swapCommit mismatch".into())); + } + _ => {} + } + } + + let mut results = Vec::with_capacity(input.writes.len()); + + for op in input.writes { + match op { + WriteOp::Create { + collection, + rkey, + value, + } => { + let rkey = rkey.unwrap_or_else(generate_tid); + let cid = content_cid(&value); + let record_uri = format!( + "ats://{}/{}/{}/{}/{}/{}", + space.did, space.type_nsid, space.skey, did, collection, rkey + ); + let record = SpaceRecord { + uri: record_uri.clone(), + space_id: space.id.clone(), + author_did: did.clone(), + collection, + rkey, + record: value, + cid: cid.clone(), + indexed_at: now_rfc3339(), + }; + db::insert_space_record(&state.db, state.db_backend, &record).await?; + results.push(serde_json::json!({ + "uri": record_uri, + "cid": cid, + })); + } + WriteOp::Update { + collection, + rkey, + value, + swap_record, + } => { + let cid = content_cid(&value); + let record_uri = format!( + "ats://{}/{}/{}/{}/{}/{}", + space.did, space.type_nsid, space.skey, did, collection, rkey + ); + let record = SpaceRecord { + uri: record_uri.clone(), + space_id: space.id.clone(), + author_did: did.clone(), + collection, + rkey, + record: value, + cid: cid.clone(), + indexed_at: now_rfc3339(), + }; + if let Some(swap_cid) = swap_record { + db::upsert_space_record_with_swap( + &state.db, + state.db_backend, + &record, + &swap_cid, + ) + .await?; + } else { + db::upsert_space_record(&state.db, state.db_backend, &record).await?; + } + results.push(serde_json::json!({ + "uri": record_uri, + "cid": cid, + })); + } + WriteOp::Delete { + collection, + rkey, + swap_record, + } => { + let record_uri = format!( + "ats://{}/{}/{}/{}/{}/{}", + space.did, space.type_nsid, space.skey, did, collection, rkey + ); + if let Some(swap_cid) = swap_record { + db::delete_space_record_with_swap( + &state.db, + state.db_backend, + &record_uri, + &swap_cid, + ) + .await?; + } else { + db::delete_space_record(&state.db, state.db_backend, &record_uri).await?; + } + results.push(serde_json::json!({})); + } + } + } + + let rev = generate_tid(); + db::update_space_revision(&state.db, state.db_backend, &space.id, &rev).await?; + + Ok(Json(serde_json::json!({ + "results": results, + }))) +} + async fn get_record( State(state): State, xrpc_claims: XrpcClaims, @@ -573,7 +813,7 @@ async fn get_record( Query(query): Query, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &query.space_uri).await?; + let space = resolve_space(&state, &query.space).await?; let cred = extract_space_credential(&headers); require_membership(&state, &space, claims.did(), false, cred.as_deref()).await?; @@ -589,10 +829,8 @@ async fn get_record( Ok(Json(serde_json::json!({ "uri": record.uri, - "space": query.space_uri, - "collection": record.collection, - "record": record.record, "cid": record.cid, + "value": record.record, }))) } @@ -603,18 +841,29 @@ async fn list_records( Query(query): Query, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &query.space_uri).await?; + let space = resolve_space(&state, &query.space).await?; let cred = extract_space_credential(&headers); require_membership(&state, &space, claims.did(), false, cred.as_deref()).await?; + let repo = query.repo.as_deref().or_else(|| { + if cred.is_some() { + None + } else { + Some(claims.did()) + } + }); + let limit = query.limit.unwrap_or(50).min(100); + let reverse = query.reverse.unwrap_or(false); let records = db::list_space_records( &state.db, state.db_backend, &space.id, + repo, query.collection.as_deref(), limit, query.cursor.as_deref(), + reverse, ) .await?; @@ -624,10 +873,8 @@ async fn list_records( .into_iter() .map(|r| { serde_json::json!({ - "uri": r.uri, - "space": query.space_uri, "collection": r.collection, - "record": r.record, + "rkey": r.rkey, "cid": r.cid, }) }) @@ -649,7 +896,7 @@ async fn list_members( headers: HeaderMap, Query(query): Query, ) -> Result, AppError> { - let space = resolve_space(&state, &query.space_uri).await?; + let space = resolve_space(&state, &query.space).await?; if !space.config.membership_public { let claims = require_auth(&xrpc_claims)?; @@ -668,11 +915,10 @@ async fn add_member( Json(input): Json, ) -> Result { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; require_space_admin(&state, &space, claims.did()).await?; - let existing = - db::get_member(&state.db, state.db_backend, &space.id, &input.member_did).await?; + let existing = db::get_member(&state.db, state.db_backend, &space.id, &input.did).await?; if existing.is_some() { return Err(AppError::Conflict( "Member already exists in this space".into(), @@ -682,7 +928,7 @@ async fn add_member( let member = SpaceMember { id: Uuid::new_v4().to_string(), space_id: space.id, - member_did: input.member_did, + did: input.did, access: input.access.unwrap_or(SpaceAccess::Read), is_delegation: input.is_delegation.unwrap_or(false), granted_by: Some(claims.did().to_string()), @@ -702,11 +948,10 @@ async fn remove_member( Json(input): Json, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; require_space_admin(&state, &space, claims.did()).await?; - let removed = - db::remove_member(&state.db, state.db_backend, &space.id, &input.member_did).await?; + let removed = db::remove_member(&state.db, state.db_backend, &space.id, &input.did).await?; if !removed { return Err(AppError::NotFound("Member not found in this space".into())); @@ -725,7 +970,7 @@ async fn create_invite( Json(input): Json, ) -> Result { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; require_space_admin(&state, &space, claims.did()).await?; let mut token_bytes = [0u8; 24]; @@ -802,7 +1047,7 @@ async fn redeem_invite( let member = SpaceMember { id: Uuid::new_v4().to_string(), space_id: invite.space_id.clone(), - member_did: did, + did, access: invite.access, is_delegation: false, granted_by: Some(invite.created_by.clone()), @@ -813,10 +1058,10 @@ async fn redeem_invite( db::increment_invite_uses(&state.db, state.db_backend, &invite.id).await?; let space = db::get_space(&state.db, state.db_backend, &invite.space_id).await?; - let space_uri = space.map(|s| format!("ats://{}/{}/{}", s.owner_did, s.type_nsid, s.skey)); + let space_uri = space.map(|s| format!("ats://{}/{}/{}", s.did, s.type_nsid, s.skey)); let mut response = Json(serde_json::json!({ - "spaceUri": space_uri, + "uri": space_uri, "access": member.access, })) .into_response(); @@ -830,7 +1075,7 @@ async fn revoke_invite( Json(input): Json, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; require_space_admin(&state, &space, claims.did()).await?; let revoked = db::revoke_invite(&state.db, state.db_backend, &input.invite_id).await?; @@ -847,7 +1092,7 @@ async fn list_invites( Query(query): Query, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &query.space_uri).await?; + let space = resolve_space(&state, &query.space).await?; require_space_admin(&state, &space, claims.did()).await?; let invites = db::list_invites(&state.db, state.db_backend, &space.id).await?; @@ -875,14 +1120,14 @@ async fn list_invites( // Credential handlers // --------------------------------------------------------------------------- -async fn get_credential( +async fn get_member_grant( State(state): State, xrpc_claims: XrpcClaims, - Json(input): Json, + Json(input): Json, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; let did = claims.did().to_string(); - let space = resolve_space(&state, &input.space_uri).await?; + let space = resolve_space(&state, &input.space).await?; require_membership(&state, &space, &did, false, None).await?; @@ -890,41 +1135,56 @@ async fn get_credential( AppError::Internal("TOKEN_ENCRYPTION_KEY is required for space credentials".into()) })?; - let client_id = claims.client_key().map(|k| k.to_string()); - let issued = crate::spaces::auth::issue_credential( - &state.db, - state.db_backend, - encryption_key, - &space, - &did, - client_id.as_deref(), - ) - .await?; + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_secs(); + let exp = now + crate::spaces::credential::GRANT_TTL_SECS; + + let space_uri = format!("ats://{}/{}/{}", space.did, space.type_nsid, space.skey); + let grant_claims = crate::spaces::credential::MemberGrantClaims { + sub: did, + space: space_uri, + scope: "read".into(), + iat: now, + exp, + }; + + let grant = crate::spaces::credential::sign_grant(&grant_claims, encryption_key)?; + + let expires_at = chrono::DateTime::from_timestamp(exp as i64, 0) + .map(|dt| dt.to_rfc3339()) + .unwrap_or_default(); Ok(Json(serde_json::json!({ - "credential": issued.token, - "expiresAt": issued.expires_at, + "grant": grant, + "expiresAt": expires_at, }))) } -async fn refresh_credential( +async fn get_space_credential( State(state): State, xrpc_claims: XrpcClaims, - Json(input): Json, + Json(input): Json, ) -> Result, AppError> { - let _claims = require_auth(&xrpc_claims)?; - let space = resolve_space(&state, &input.space_uri).await?; + let claims = require_auth(&xrpc_claims)?; let encryption_key = state.config.token_encryption_key.as_ref().ok_or_else(|| { AppError::Internal("TOKEN_ENCRYPTION_KEY is required for space credentials".into()) })?; - let issued = crate::spaces::auth::refresh_credential( + let grant_claims = crate::spaces::credential::verify_grant(&input.grant, encryption_key)?; + + let space = resolve_space(&state, &grant_claims.space).await?; + + let client_id = claims.client_key().map(|k| k.to_string()); + let issued = crate::spaces::auth::issue_credential( &state.db, state.db_backend, encryption_key, &space, - &input.credential, + &grant_claims.sub, + client_id.as_deref(), ) .await?; @@ -933,3 +1193,211 @@ async fn refresh_credential( "expiresAt": issued.expires_at, }))) } + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + #[test] + fn content_cid_deterministic() { + let record = json!({"text": "hello"}); + let cid1 = content_cid(&record); + let cid2 = content_cid(&record); + assert_eq!(cid1, cid2); + assert!(cid1.starts_with("bafyrei")); + } + + #[test] + fn content_cid_changes_for_different_records() { + let a = content_cid(&json!({"text": "hello"})); + let b = content_cid(&json!({"text": "world"})); + assert_ne!(a, b); + } + + #[test] + fn deserialize_create_record_input() { + let input: CreateRecordInput = serde_json::from_value(json!({ + "space": "ats://did:plc:abc/com.example.forum/main", + "collection": "com.example.forum.post", + "record": { "text": "hello" } + })) + .unwrap(); + assert_eq!(input.space, "ats://did:plc:abc/com.example.forum/main"); + assert_eq!(input.collection, "com.example.forum.post"); + assert_eq!(input.record["text"], "hello"); + } + + #[test] + fn deserialize_put_record_with_swap() { + let input: PutRecordInput = serde_json::from_value(json!({ + "space": "ats://did:plc:abc/com.example.forum/main", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "record": { "text": "updated" }, + "swapRecord": "bafyrei123" + })) + .unwrap(); + assert_eq!(input.swap_record.as_deref(), Some("bafyrei123")); + } + + #[test] + fn deserialize_put_record_without_swap() { + let input: PutRecordInput = serde_json::from_value(json!({ + "space": "ats://did:plc:abc/com.example.forum/main", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "record": { "text": "hello" } + })) + .unwrap(); + assert_eq!(input.swap_record, None); + } + + #[test] + fn deserialize_delete_record_with_swap() { + let input: DeleteRecordInput = serde_json::from_value(json!({ + "space": "ats://did:plc:abc/com.example.forum/main", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "swapRecord": "bafyrei456" + })) + .unwrap(); + assert_eq!(input.swap_record.as_deref(), Some("bafyrei456")); + } + + #[test] + fn deserialize_write_op_create() { + let op: WriteOp = serde_json::from_value(json!({ + "action": "create", + "collection": "com.example.forum.post", + "value": { "text": "new post" } + })) + .unwrap(); + match op { + WriteOp::Create { + collection, + rkey, + value, + } => { + assert_eq!(collection, "com.example.forum.post"); + assert_eq!(rkey, None); + assert_eq!(value["text"], "new post"); + } + _ => panic!("expected Create"), + } + } + + #[test] + fn deserialize_write_op_create_with_rkey() { + let op: WriteOp = serde_json::from_value(json!({ + "action": "create", + "collection": "com.example.forum.post", + "rkey": "custom-key", + "value": { "text": "new post" } + })) + .unwrap(); + match op { + WriteOp::Create { rkey, .. } => { + assert_eq!(rkey.as_deref(), Some("custom-key")); + } + _ => panic!("expected Create"), + } + } + + #[test] + fn deserialize_write_op_update() { + let op: WriteOp = serde_json::from_value(json!({ + "action": "update", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "value": { "text": "updated" }, + "swapRecord": "bafyrei789" + })) + .unwrap(); + match op { + WriteOp::Update { + collection, + rkey, + swap_record, + .. + } => { + assert_eq!(collection, "com.example.forum.post"); + assert_eq!(rkey, "3k2abc"); + assert_eq!(swap_record.as_deref(), Some("bafyrei789")); + } + _ => panic!("expected Update"), + } + } + + #[test] + fn deserialize_write_op_delete() { + let op: WriteOp = serde_json::from_value(json!({ + "action": "delete", + "collection": "com.example.forum.post", + "rkey": "3k2abc" + })) + .unwrap(); + match op { + WriteOp::Delete { + collection, + rkey, + swap_record, + } => { + assert_eq!(collection, "com.example.forum.post"); + assert_eq!(rkey, "3k2abc"); + assert_eq!(swap_record, None); + } + _ => panic!("expected Delete"), + } + } + + #[test] + fn deserialize_apply_writes_input() { + let input: ApplyWritesInput = serde_json::from_value(json!({ + "space": "ats://did:plc:abc/com.example.forum/main", + "swapCommit": "tid123", + "writes": [ + { + "action": "create", + "collection": "com.example.forum.post", + "value": { "text": "post 1" } + }, + { + "action": "delete", + "collection": "com.example.forum.post", + "rkey": "old-key" + } + ] + })) + .unwrap(); + assert_eq!(input.space, "ats://did:plc:abc/com.example.forum/main"); + assert_eq!(input.swap_commit.as_deref(), Some("tid123")); + assert_eq!(input.writes.len(), 2); + } + + #[test] + fn deserialize_apply_writes_without_swap_commit() { + let input: ApplyWritesInput = serde_json::from_value(json!({ + "space": "ats://did:plc:abc/com.example.forum/main", + "writes": [ + { + "action": "create", + "collection": "com.example.forum.post", + "value": { "text": "post" } + } + ] + })) + .unwrap(); + assert_eq!(input.swap_commit, None); + } + + #[test] + fn deserialize_write_op_rejects_unknown_action() { + let result = serde_json::from_value::(json!({ + "action": "unknown", + "collection": "test", + "rkey": "key" + })); + assert!(result.is_err()); + } +} diff --git a/src/spaces/types.rs b/src/spaces/types.rs index c62c116..db5f902 100644 --- a/src/spaces/types.rs +++ b/src/spaces/types.rs @@ -72,7 +72,9 @@ impl fmt::Display for AccessMode { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Space { pub id: String, + pub did: String, pub owner_did: String, + #[serde(rename = "type")] pub type_nsid: String, pub skey: String, pub display_name: Option, @@ -82,6 +84,7 @@ pub struct Space { pub app_denylist: Option>, pub managing_app_did: Option, pub config: SpaceConfig, + pub revision: Option, pub created_at: String, pub updated_at: String, } @@ -100,7 +103,7 @@ pub struct SpaceConfig { pub struct SpaceMember { pub id: String, pub space_id: String, - pub member_did: String, + pub did: String, pub access: SpaceAccess, pub is_delegation: bool, pub granted_by: Option, -- 2.51.2 From 7eb4a03799f9fb70ee6f2ebf34e2112d398f20c5 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 11:43:13 -0500 Subject: [PATCH 048/250] feat: refactor permissioned spaces to better align with Dan's implementation Signed-off-by: Trezy Signed-off-by: Trezy --- src/auth/middleware.rs | 44 ++++++++--- src/delegation/add_delegate.rs | 2 +- src/delegation/get_account.rs | 2 +- src/delegation/link_account.rs | 2 +- src/delegation/list_accounts.rs | 2 +- src/delegation/list_delegates.rs | 2 +- src/delegation/remove_delegate.rs | 2 +- src/delegation/unlink_account.rs | 2 +- src/dev_happyview/create_client.rs | 2 +- src/dev_happyview/delete_client.rs | 2 +- src/dev_happyview/get_client.rs | 2 +- src/dev_happyview/list_clients.rs | 2 +- src/repo/upload_blob.rs | 2 +- src/server.rs | 2 +- src/spaces/credential.rs | 84 +++++++++++++++++++- src/spaces/routes.rs | 119 ++++++++++++++++++++--------- src/xrpc/mod.rs | 4 +- 17 files changed, 215 insertions(+), 62 deletions(-) diff --git a/src/auth/middleware.rs b/src/auth/middleware.rs index 0bb8ffa..c64a42e 100644 --- a/src/auth/middleware.rs +++ b/src/auth/middleware.rs @@ -220,11 +220,14 @@ pub async fn resolve_dpop_claims( /// XRPC-specific claims extractor. /// -/// Only accepts DPoP auth (`Authorization: DPoP ` + `DPoP` proof + `X-Client-Key`). -/// Cookie auth, Bearer API keys, and service JWTs are rejected on XRPC routes. -/// Wraps `Option` — `None` means anonymous (client-key-only) access. +/// Accepts DPoP auth (`Authorization: DPoP `) or Bearer space credential +/// JWTs (`Authorization: Bearer `). Cookie auth, Bearer API keys, +/// and service JWTs are rejected on XRPC routes. #[derive(Debug, Clone)] -pub struct XrpcClaims(pub Option); +pub struct XrpcClaims { + pub identity: Option, + pub space_credential: Option, +} impl FromRequestParts for XrpcClaims { type Rejection = AppError; @@ -242,19 +245,36 @@ impl FromRequestParts for XrpcClaims { Some(h) if h.starts_with("DPoP ") => { let token = &h[5..]; let claims = resolve_dpop_claims(state, parts, token).await?; - Ok(XrpcClaims(Some(claims))) + Ok(XrpcClaims { + identity: Some(claims), + space_credential: None, + }) } Some(h) if h.starts_with("Bearer ") => { - Err(AppError::Auth( - "XRPC routes do not accept Bearer auth. Use DPoP auth or omit the Authorization header for anonymous access.".into(), - )) - } - Some(_) => { - Err(AppError::Auth("invalid Authorization scheme".into())) + let token = &h[7..]; + match crate::spaces::credential::peek_jwt_typ(token) { + Some(typ) if typ == "space_credential" => { + let sub = + crate::spaces::credential::peek_credential_sub(token).ok_or_else( + || AppError::Auth("invalid space credential payload".into()), + )?; + Ok(XrpcClaims { + identity: Some(Claims::internal(sub)), + space_credential: Some(token.to_string()), + }) + } + _ => Err(AppError::Auth( + "XRPC routes do not accept Bearer auth. Use DPoP auth, a space credential, or omit the Authorization header for anonymous access.".into(), + )), + } } + Some(_) => Err(AppError::Auth("invalid Authorization scheme".into())), None => { // No auth header — anonymous access (client-key only) - Ok(XrpcClaims(None)) + Ok(XrpcClaims { + identity: None, + space_credential: None, + }) } } } diff --git a/src/delegation/add_delegate.rs b/src/delegation/add_delegate.rs index a4ecf0f..d00800c 100644 --- a/src/delegation/add_delegate.rs +++ b/src/delegation/add_delegate.rs @@ -27,7 +27,7 @@ pub async fn add_delegate( Json(input): Json, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("addDelegate requires authentication".into()))?; let caller_did = claims.did().to_string(); diff --git a/src/delegation/get_account.rs b/src/delegation/get_account.rs index bc93b87..f4a9668 100644 --- a/src/delegation/get_account.rs +++ b/src/delegation/get_account.rs @@ -21,7 +21,7 @@ pub async fn get_account( Query(params): Query, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("getAccount requires authentication".into()))?; super::verify_client_scope(&state, &claims, ¶ms.did).await?; diff --git a/src/delegation/link_account.rs b/src/delegation/link_account.rs index 0e80f44..3f22109 100644 --- a/src/delegation/link_account.rs +++ b/src/delegation/link_account.rs @@ -24,7 +24,7 @@ pub async fn link_account( Json(input): Json, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("linkAccount requires authentication".into()))?; let caller_did = claims.did().to_string(); diff --git a/src/delegation/list_accounts.rs b/src/delegation/list_accounts.rs index 96d2fb0..78a34af 100644 --- a/src/delegation/list_accounts.rs +++ b/src/delegation/list_accounts.rs @@ -14,7 +14,7 @@ pub async fn list_accounts( xrpc_claims: XrpcClaims, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("listAccounts requires authentication".into()))?; let caller_client_id = super::resolve_caller_client_id(&state, &claims).await?; diff --git a/src/delegation/list_delegates.rs b/src/delegation/list_delegates.rs index 5a0299f..b132e07 100644 --- a/src/delegation/list_delegates.rs +++ b/src/delegation/list_delegates.rs @@ -22,7 +22,7 @@ pub async fn list_delegates( Query(params): Query, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("listDelegates requires authentication".into()))?; super::verify_client_scope(&state, &claims, ¶ms.account_did).await?; diff --git a/src/delegation/remove_delegate.rs b/src/delegation/remove_delegate.rs index 456dd7f..eaede71 100644 --- a/src/delegation/remove_delegate.rs +++ b/src/delegation/remove_delegate.rs @@ -26,7 +26,7 @@ pub async fn remove_delegate( Json(input): Json, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("removeDelegate requires authentication".into()))?; let caller_did = claims.did().to_string(); diff --git a/src/delegation/unlink_account.rs b/src/delegation/unlink_account.rs index 3251af1..1a1e6e6 100644 --- a/src/delegation/unlink_account.rs +++ b/src/delegation/unlink_account.rs @@ -24,7 +24,7 @@ pub async fn unlink_account( Json(input): Json, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("unlinkAccount requires authentication".into()))?; let caller_did = claims.did().to_string(); diff --git a/src/dev_happyview/create_client.rs b/src/dev_happyview/create_client.rs index 0863190..1ab5ad8 100644 --- a/src/dev_happyview/create_client.rs +++ b/src/dev_happyview/create_client.rs @@ -21,7 +21,7 @@ pub async fn create_api_client( ) -> Result { // 1. Require DPoP auth let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("createApiClient requires DPoP authentication".into()))?; // 2. Rate-limit the request (procedure type) diff --git a/src/dev_happyview/delete_client.rs b/src/dev_happyview/delete_client.rs index 26fbce1..0dd4483 100644 --- a/src/dev_happyview/delete_client.rs +++ b/src/dev_happyview/delete_client.rs @@ -17,7 +17,7 @@ pub async fn delete_api_client( ) -> Result { // 1. Require DPoP auth let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("deleteApiClient requires DPoP authentication".into()))?; // 2. Rate-limit the request (procedure type) diff --git a/src/dev_happyview/get_client.rs b/src/dev_happyview/get_client.rs index 11d7e66..df58823 100644 --- a/src/dev_happyview/get_client.rs +++ b/src/dev_happyview/get_client.rs @@ -21,7 +21,7 @@ pub async fn get_api_client( Query(params): Query, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("getApiClient requires DPoP authentication".into()))?; let check = if let Some(client_key) = claims.client_key() { diff --git a/src/dev_happyview/list_clients.rs b/src/dev_happyview/list_clients.rs index 3e29874..6c17ecd 100644 --- a/src/dev_happyview/list_clients.rs +++ b/src/dev_happyview/list_clients.rs @@ -14,7 +14,7 @@ pub async fn list_api_clients( xrpc_claims: XrpcClaims, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("listApiClients requires DPoP authentication".into()))?; let check = if let Some(client_key) = claims.client_key() { diff --git a/src/repo/upload_blob.rs b/src/repo/upload_blob.rs index f0a23e2..452d1fd 100644 --- a/src/repo/upload_blob.rs +++ b/src/repo/upload_blob.rs @@ -18,7 +18,7 @@ pub async fn upload_blob( body: Bytes, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("uploadBlob requires DPoP authentication".into()))?; let check = if let Some(client_key) = claims.client_key() { let cost = state diff --git a/src/server.rs b/src/server.rs index 26bc268..479c67c 100644 --- a/src/server.rs +++ b/src/server.rs @@ -311,7 +311,7 @@ async fn get_profile( xrpc_claims: XrpcClaims, ) -> Result { let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("getProfile requires DPoP authentication".into()))?; let check = if let Some(client_key) = claims.client_key() { let cost = state diff --git a/src/spaces/credential.rs b/src/spaces/credential.rs index d20054f..33c429e 100644 --- a/src/spaces/credential.rs +++ b/src/spaces/credential.rs @@ -9,6 +9,25 @@ use crate::profile; pub const DEFAULT_CREDENTIAL_TTL_SECS: u64 = 4 * 60 * 60; // 4 hours pub const GRANT_TTL_SECS: u64 = 5 * 60; // 5 minutes +/// Peek at a JWT's header to check its `typ` field without verifying the signature. +pub fn peek_jwt_typ(token: &str) -> Option { + let header_b64 = token.split('.').next()?; + let header_bytes = URL_SAFE_NO_PAD.decode(header_b64).ok()?; + let header: serde_json::Value = serde_json::from_slice(&header_bytes).ok()?; + header["typ"].as_str().map(|s| s.to_string()) +} + +/// Peek at a space credential JWT's payload to extract the `sub` (user DID) without verifying. +pub fn peek_credential_sub(token: &str) -> Option { + let parts: Vec<&str> = token.split('.').collect(); + if parts.len() != 3 { + return None; + } + let payload_bytes = URL_SAFE_NO_PAD.decode(parts[1]).ok()?; + let claims: SpaceCredentialClaims = serde_json::from_slice(&payload_bytes).ok()?; + Some(claims.sub) +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct MemberGrantClaims { pub sub: String, @@ -72,7 +91,7 @@ pub fn sign_credential( let header = serde_json::json!({ "alg": "ES256", - "typ": "JWT", + "typ": "space_credential", }); let header_b64 = URL_SAFE_NO_PAD.encode(serde_json::to_vec(&header).unwrap()); @@ -104,6 +123,12 @@ pub fn verify_credential( return Err(AppError::Auth("credential alg must be ES256".into())); } + if header["typ"].as_str() != Some("space_credential") { + return Err(AppError::Auth( + "credential typ must be space_credential".into(), + )); + } + let x_b64 = public_jwk["x"] .as_str() .ok_or_else(|| AppError::Auth("public key missing x".into()))?; @@ -387,4 +412,61 @@ mod tests { assert!(result.is_err()); assert!(result.unwrap_err().to_string().contains("expired")); } + + #[test] + fn credential_has_space_credential_typ() { + let keypair = generate_dpop_keypair().unwrap(); + let claims = make_claims(); + let token = sign_credential(&claims, &keypair.private_jwk).unwrap(); + assert_eq!(peek_jwt_typ(&token).as_deref(), Some("space_credential")); + } + + #[test] + fn peek_jwt_typ_returns_none_for_garbage() { + assert_eq!(peek_jwt_typ("not-a-jwt"), None); + assert_eq!(peek_jwt_typ(""), None); + } + + #[test] + fn peek_credential_sub_extracts_did() { + let keypair = generate_dpop_keypair().unwrap(); + let claims = make_claims(); + let token = sign_credential(&claims, &keypair.private_jwk).unwrap(); + assert_eq!( + peek_credential_sub(&token).as_deref(), + Some("did:plc:requester") + ); + } + + #[test] + fn peek_credential_sub_returns_none_for_garbage() { + assert_eq!(peek_credential_sub("not-a-jwt"), None); + } + + #[test] + fn verify_rejects_wrong_typ() { + let keypair = generate_dpop_keypair().unwrap(); + let claims = make_claims(); + + let d_b64 = keypair.private_jwk["d"].as_str().unwrap(); + let d_bytes = URL_SAFE_NO_PAD.decode(d_b64).unwrap(); + let signing_key = p256::ecdsa::SigningKey::from_bytes((&d_bytes[..]).into()).unwrap(); + + let header = serde_json::json!({ "alg": "ES256", "typ": "JWT" }); + let header_b64 = URL_SAFE_NO_PAD.encode(serde_json::to_vec(&header).unwrap()); + let payload_b64 = URL_SAFE_NO_PAD.encode(serde_json::to_vec(&claims).unwrap()); + let message = format!("{}.{}", header_b64, payload_b64); + let sig: p256::ecdsa::Signature = + p256::ecdsa::signature::Signer::sign(&signing_key, message.as_bytes()); + let token = format!( + "{}.{}.{}", + header_b64, + payload_b64, + URL_SAFE_NO_PAD.encode(sig.to_bytes()) + ); + + let result = verify_credential(&token, &keypair.public_jwk); + assert!(result.is_err()); + assert!(result.unwrap_err().to_string().contains("typ")); + } } diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index 29abc02..adaf9cf 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -1,5 +1,5 @@ use axum::extract::{Query, State}; -use axum::http::{HeaderMap, StatusCode}; +use axum::http::StatusCode; use axum::response::{IntoResponse, Response}; use axum::routing::{get, post}; use axum::{Json, Router}; @@ -201,11 +201,11 @@ const NS: &str = "dev.happyview"; pub fn space_routes() -> Router { Router::new() // Space CRUD - .route(&format!("/xrpc/{NS}.space.create"), post(create_space)) - .route(&format!("/xrpc/{NS}.space.get"), get(get_space)) - .route(&format!("/xrpc/{NS}.space.list"), get(list_spaces)) - .route(&format!("/xrpc/{NS}.space.delete"), post(delete_space)) - .route(&format!("/xrpc/{NS}.space.update"), post(update_space)) + .route(&format!("/xrpc/{NS}.space.createSpace"), post(create_space)) + .route(&format!("/xrpc/{NS}.space.getSpace"), get(get_space)) + .route(&format!("/xrpc/{NS}.space.listSpaces"), get(list_spaces)) + .route(&format!("/xrpc/{NS}.space.deleteSpace"), post(delete_space)) + .route(&format!("/xrpc/{NS}.space.updateSpace"), post(update_space)) // Records .route( &format!("/xrpc/{NS}.space.createRecord"), @@ -227,6 +227,34 @@ pub fn space_routes() -> Router { post(remove_member), ) // Invites + .route( + &format!("/xrpc/{NS}.space.createInvite"), + post(create_invite), + ) + .route( + &format!("/xrpc/{NS}.space.redeemInvite"), + post(redeem_invite), + ) + .route( + &format!("/xrpc/{NS}.space.revokeInvite"), + post(revoke_invite), + ) + .route(&format!("/xrpc/{NS}.space.listInvites"), get(list_invites)) + // Credentials + .route( + &format!("/xrpc/{NS}.space.getMemberGrant"), + post(get_member_grant), + ) + .route( + &format!("/xrpc/{NS}.space.getSpaceCredential"), + post(get_space_credential), + ) + // Legacy aliases (will be removed in a future release) + .route(&format!("/xrpc/{NS}.space.create"), post(create_space)) + .route(&format!("/xrpc/{NS}.space.get"), get(get_space)) + .route(&format!("/xrpc/{NS}.space.list"), get(list_spaces)) + .route(&format!("/xrpc/{NS}.space.delete"), post(delete_space)) + .route(&format!("/xrpc/{NS}.space.update"), post(update_space)) .route( &format!("/xrpc/{NS}.space.invite.create"), post(create_invite), @@ -257,9 +285,9 @@ pub fn space_routes() -> Router { fn require_auth(claims: &XrpcClaims) -> Result<&crate::auth::Claims, AppError> { claims - .0 + .identity .as_ref() - .ok_or_else(|| AppError::Auth("This endpoint requires DPoP authentication".into())) + .ok_or_else(|| AppError::Auth("This endpoint requires authentication".into())) } async fn resolve_space(state: &AppState, space_uri: &str) -> Result { @@ -293,13 +321,6 @@ async fn require_space_admin(state: &AppState, space: &Space, did: &str) -> Resu )) } -fn extract_space_credential(headers: &HeaderMap) -> Option { - headers - .get("x-space-credential") - .and_then(|v| v.to_str().ok()) - .map(|s| s.to_string()) -} - async fn require_membership( state: &AppState, space: &Space, @@ -552,14 +573,19 @@ async fn update_space( async fn create_record( State(state): State, xrpc_claims: XrpcClaims, - headers: HeaderMap, Json(input): Json, ) -> Result { let claims = require_auth(&xrpc_claims)?; let did = claims.did().to_string(); let space = resolve_space(&state, &input.space).await?; - let cred = extract_space_credential(&headers); - require_membership(&state, &space, &did, true, cred.as_deref()).await?; + require_membership( + &state, + &space, + &did, + true, + xrpc_claims.space_credential.as_deref(), + ) + .await?; let rkey = generate_tid(); let cid = content_cid(&input.record); @@ -597,14 +623,19 @@ async fn create_record( async fn put_record( State(state): State, xrpc_claims: XrpcClaims, - headers: HeaderMap, Json(input): Json, ) -> Result { let claims = require_auth(&xrpc_claims)?; let did = claims.did().to_string(); let space = resolve_space(&state, &input.space).await?; - let cred = extract_space_credential(&headers); - require_membership(&state, &space, &did, true, cred.as_deref()).await?; + require_membership( + &state, + &space, + &did, + true, + xrpc_claims.space_credential.as_deref(), + ) + .await?; let cid = content_cid(&input.record); let record_uri = format!( @@ -684,14 +715,19 @@ async fn delete_record( async fn apply_writes( State(state): State, xrpc_claims: XrpcClaims, - headers: HeaderMap, Json(input): Json, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; let did = claims.did().to_string(); let space = resolve_space(&state, &input.space).await?; - let cred = extract_space_credential(&headers); - require_membership(&state, &space, &did, true, cred.as_deref()).await?; + require_membership( + &state, + &space, + &did, + true, + xrpc_claims.space_credential.as_deref(), + ) + .await?; if let Some(ref expected_rev) = input.swap_commit { match &space.revision { @@ -809,13 +845,18 @@ async fn apply_writes( async fn get_record( State(state): State, xrpc_claims: XrpcClaims, - headers: HeaderMap, Query(query): Query, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; let space = resolve_space(&state, &query.space).await?; - let cred = extract_space_credential(&headers); - require_membership(&state, &space, claims.did(), false, cred.as_deref()).await?; + require_membership( + &state, + &space, + claims.did(), + false, + xrpc_claims.space_credential.as_deref(), + ) + .await?; let record = db::get_space_record_by_parts( &state.db, @@ -837,16 +878,21 @@ async fn get_record( async fn list_records( State(state): State, xrpc_claims: XrpcClaims, - headers: HeaderMap, Query(query): Query, ) -> Result, AppError> { let claims = require_auth(&xrpc_claims)?; let space = resolve_space(&state, &query.space).await?; - let cred = extract_space_credential(&headers); - require_membership(&state, &space, claims.did(), false, cred.as_deref()).await?; + require_membership( + &state, + &space, + claims.did(), + false, + xrpc_claims.space_credential.as_deref(), + ) + .await?; let repo = query.repo.as_deref().or_else(|| { - if cred.is_some() { + if xrpc_claims.space_credential.is_some() { None } else { Some(claims.did()) @@ -893,15 +939,20 @@ async fn list_records( async fn list_members( State(state): State, xrpc_claims: XrpcClaims, - headers: HeaderMap, Query(query): Query, ) -> Result, AppError> { let space = resolve_space(&state, &query.space).await?; if !space.config.membership_public { let claims = require_auth(&xrpc_claims)?; - let cred = extract_space_credential(&headers); - require_membership(&state, &space, claims.did(), false, cred.as_deref()).await?; + require_membership( + &state, + &space, + claims.did(), + false, + xrpc_claims.space_credential.as_deref(), + ) + .await?; } let resolved = members::resolve_members(&state.db, state.db_backend, &space.id).await?; diff --git a/src/xrpc/mod.rs b/src/xrpc/mod.rs index 093f1e7..1865c15 100644 --- a/src/xrpc/mod.rs +++ b/src/xrpc/mod.rs @@ -258,7 +258,7 @@ pub async fn xrpc_get( ) -> Result { let raw_query = raw_query.unwrap_or_default(); let mut params = parse_query_params(&raw_query); - let claims = xrpc_claims.0; + let claims = xrpc_claims.identity; let rate_key = resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)?; @@ -349,7 +349,7 @@ pub async fn xrpc_post( let raw_query = raw_query.unwrap_or_default(); let mut params = parse_query_params(&raw_query); let claims = xrpc_claims - .0 + .identity .ok_or_else(|| AppError::Auth("XRPC procedures require DPoP authentication".into()))?; let rate_key = resolve_client_key(&state, Some(&claims), &parts, ¶ms)?; -- 2.51.2 From 297de0249ca122b97e54a8c9d2cd30717f25e768 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 12:37:21 -0500 Subject: [PATCH 049/250] docs: add docs for permissioned spaces Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/experimental/spaces.md | 102 ++++++ .../docs/experimental/spaces/changelog.md | 64 ++++ .../docs/experimental/spaces/credentials.md | 128 ++++++++ .../docs/docs/experimental/spaces/invites.md | 134 ++++++++ .../experimental/spaces/managing-spaces.md | 135 ++++++++ .../docs/docs/experimental/spaces/members.md | 125 ++++++++ .../docs/docs/experimental/spaces/records.md | 292 ++++++++++++++++++ packages/docs/sidebars.ts | 47 +++ 8 files changed, 1027 insertions(+) create mode 100644 packages/docs/docs/experimental/spaces.md create mode 100644 packages/docs/docs/experimental/spaces/changelog.md create mode 100644 packages/docs/docs/experimental/spaces/credentials.md create mode 100644 packages/docs/docs/experimental/spaces/invites.md create mode 100644 packages/docs/docs/experimental/spaces/managing-spaces.md create mode 100644 packages/docs/docs/experimental/spaces/members.md create mode 100644 packages/docs/docs/experimental/spaces/records.md diff --git a/packages/docs/docs/experimental/spaces.md b/packages/docs/docs/experimental/spaces.md new file mode 100644 index 0000000..41d9e0e --- /dev/null +++ b/packages/docs/docs/experimental/spaces.md @@ -0,0 +1,102 @@ +# Permissioned Spaces + +:::caution Experimental +Permissioned Spaces are experimental and the API will change. This implementation follows Daniel Holmgren's [Permissioned Data Diaries](https://dholms.leaflet.pub/3meluqcwky22a) and aligns structurally with the `permissioned-data` branch on `bluesky-social/atproto`, but uses a `dev.happyview` namespace to allow iteration while the official spec stabilizes. +::: + +Spaces are containers for permissioned data in atproto. Unlike regular public records that live in a user's repo, space records are gated by membership — only members can read or write data within a space. + +## Concepts + +A **space** is identified by three components: + +- **Space DID** — the space's own decentralized identifier (for personal spaces, this is the user's DID) +- **Type** — the space type as an NSID, describing the modality (e.g. a forum, a group chat, a photo album) +- **Space key (skey)** — a short string differentiating multiple spaces of the same type + +These form the space URI: `ats:////` + +A **space record** adds three more components to the URI: the author's DID, the collection NSID, and the record key: + +``` +ats://///// +``` + +## Feature flag + +In HappyView, spaces are gated behind the `feature.spaces_enabled` instance setting. Enable it in the dashboard under **Settings** or via the admin API: + +```sh +curl -X PUT http://127.0.0.1:3000/admin/settings/feature.spaces_enabled \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"value": "true"}' +``` + +When disabled, all `/xrpc/dev.happyview.space.*` endpoints return `501 Not Implemented`. + +## Endpoints + +All space endpoints live under the `dev.happyview.space` namespace and require [DPoP authentication](../getting-started/authentication.md). + +| Endpoint | Method | Description | +| ---------------------------------------- | ------ | ------------------------------------- | +| `dev.happyview.space.createSpace` | POST | Create a space | +| `dev.happyview.space.getSpace` | GET | Get a space by URI | +| `dev.happyview.space.listSpaces` | GET | List spaces by membership | +| `dev.happyview.space.updateSpace` | POST | Update space metadata | +| `dev.happyview.space.deleteSpace` | POST | Delete a space | +| `dev.happyview.space.createRecord` | POST | Create a record (auto-generated rkey) | +| `dev.happyview.space.putRecord` | POST | Write a record | +| `dev.happyview.space.getRecord` | GET | Get a record | +| `dev.happyview.space.listRecords` | GET | List records | +| `dev.happyview.space.deleteRecord` | POST | Delete a record | +| `dev.happyview.space.applyWrites` | POST | Batch write operations | +| `dev.happyview.space.addMember` | POST | Add a member | +| `dev.happyview.space.removeMember` | POST | Remove a member | +| `dev.happyview.space.listMembers` | GET | List resolved members | +| `dev.happyview.space.createInvite` | POST | Create an invite | +| `dev.happyview.space.redeemInvite` | POST | Redeem an invite | +| `dev.happyview.space.revokeInvite` | POST | Revoke an invite | +| `dev.happyview.space.listInvites` | GET | List invites | +| `dev.happyview.space.getMemberGrant` | POST | Prove membership (step 1) | +| `dev.happyview.space.getSpaceCredential` | POST | Get a space credential (step 2) | + +## Access model + +Spaces have an **access mode** that controls third-party app access: + +- **`default_allow`** — any app can access (with optional denylist) +- **`default_deny`** — only explicitly allowed apps can access + +Individual users access spaces through **membership**. Members have either `read` or `write` access. Write access implies read. The space creator is automatically added as a write member. + +Spaces also support **delegation** — adding another space as a member, which transitively grants access to all members of the delegated space. + +## Divergences from the reference spec + +HappyView mostly mirrors [Daniel Holmgren's `permissioned-data` branch](https://github.com/bluesky-social/atproto/tree/permissioned-data) but diverges in some areas. These will narrow as the official spec stabilizes. + +### HappyView extensions (not in the reference branch) + +- **`isDelegation` on members** allows spaces to be members of other spaces +- **`displayName`, `description`, `accessMode` on spaces** — the reference space model is minimal (`uri`, `isOwner`, `isMember`, `createdAt`) +- **`appAllowlist` / `appDenylist` / `managingAppDid`** — app-level access control layer +- **`config` object** on spaces (e.g. `membershipPublic`, `recordsPublic`) +- **Invite system** — `createInvite`, `redeemInvite`, `revokeInvite`, `listInvites` +- **`read` / `write` access levels** — the reference branch treats membership as binary + +### Reference features not yet implemented + +- **Oplogs** — `getRepoOplog`, `getMemberOplog`, `getRepoState`, `getMemberState` (sync primitives for space data) +- **Push notifications** — `notifyWrite`, `notifyMembership` (service-to-service event delivery) +- **Space-scoped blobs** — `uploadBlob` for blobs within a space context +- **Owner record deletion** — in the reference branch the space owner can delete any record; HappyView restricts `deleteRecord` to the record's author only + +## Next steps + +- [Managing Spaces](spaces/managing-spaces.md) — create, update, and delete spaces +- [Members](spaces/members.md) — manage membership and delegation +- [Records](spaces/records.md) — read and write permissioned data +- [Credentials](spaces/credentials.md) — cross-service authentication for spaces +- [Invites](spaces/invites.md) — invite-based membership diff --git a/packages/docs/docs/experimental/spaces/changelog.md b/packages/docs/docs/experimental/spaces/changelog.md new file mode 100644 index 0000000..deaf36e --- /dev/null +++ b/packages/docs/docs/experimental/spaces/changelog.md @@ -0,0 +1,64 @@ +# Changelog + +## Latest + +### New endpoints + +- **`createRecord`:** create a record with an auto-generated TID rkey instead of requiring the caller to supply one +- **`applyWrites`:** batch multiple create, update, and delete operations in a single request + +### Optimistic concurrency + +- **`swapRecord`:** optional CID-based concurrency guard on `putRecord`, `deleteRecord`, and individual operations within `applyWrites`. Returns `409 Conflict` when the record's current CID doesn't match. +- **`swapCommit`:** optional revision-based concurrency guard on `applyWrites`. Asserts the space's current revision before applying any writes. Returns `409 Conflict` on mismatch. +- Spaces now track a `revision` field (TID) that advances on every write. + +### Space DID separation + +- Spaces now have their own `did` field, distinct from the `owner_did` of the space creator. For personal spaces these are the same DID; multi-party spaces will have their own DID. +- All URI construction and lookups use the space's DID. Ownership checks use `owner_did`. +- New database migration adds the `did` column to the `spaces` table. + +### Two-step credential flow + +- Replaced the single `getCredential` endpoint with a two-step flow: + 1. **`getMemberGrant`:** proves membership and returns an HMAC-SHA256 grant (5-minute TTL) + 2. **`getSpaceCredential`:** exchanges the grant for an ES256 space credential JWT (4-hour TTL) +- Removed the `refreshCredential` endpoint (just repeat the two-step flow) + +### Bearer auth for space credentials + +- Space credentials are now passed as standard `Authorization: Bearer ` instead of a custom `X-Space-Credential` header. HappyView distinguishes credentials from other Bearer tokens by checking the JWT `typ` header (`space_credential`), matching Dan's reference implementation. +- No DPoP auth or client key needed when authenticating via space credential. + +### Endpoint naming + +- Space CRUD endpoints renamed to verbNoun format: `space.create` → `space.createSpace`, `space.get` → `space.getSpace`, `space.list` → `space.listSpaces`, `space.update` → `space.updateSpace`, `space.delete` → `space.deleteSpace`. +- Invite endpoints moved out of the `invite.*` sub-namespace: `invite.create` → `space.createInvite`, `invite.redeem` → `space.redeemInvite`, `invite.revoke` → `space.revokeInvite`, `invite.list` → `space.listInvites`. +- Old endpoint names are still available as legacy aliases and will be removed in a future release. + +### Bug fixes + +- Fixed `WriteOp` serde deserialization. `swapRecord` fields in `update` and `delete` operations now correctly deserialize from camelCase JSON. +- Credential `iss` claim now uses the space's DID instead of the owner's DID. +- `SpaceUri` parsing updated to use `did` (space DID) instead of `owner_did`. + +--- + +## v2.5.0 + +_Released 2026-05-05_ + +Initial release of Permissioned Spaces behind the `feature.spaces_enabled` experimental flag. + +### Features + +- Space CRUD: `create`, `get`, `list`, `update`, `delete` +- Record operations: `putRecord`, `getRecord`, `listRecords`, `deleteRecord` +- Membership management: `addMember`, `removeMember`, `listMembers` +- Invite system: `invite.create`, `invite.redeem`, `invite.revoke`, `invite.list` +- `ats://` URI scheme for addressing permissioned data +- Access model with `default_allow` / `default_deny` modes and app allowlists/denylists +- Space credentials for cross-service read access via `X-Space-Credential` header +- Delegation: adding a space as a member transitively grants access to its members +- Lua scripting context includes space metadata (`space.did`, `space.owner_did`, `space.type_nsid`, `space.skey`) diff --git a/packages/docs/docs/experimental/spaces/credentials.md b/packages/docs/docs/experimental/spaces/credentials.md new file mode 100644 index 0000000..afd8855 --- /dev/null +++ b/packages/docs/docs/experimental/spaces/credentials.md @@ -0,0 +1,128 @@ +# Credentials + +:::caution Experimental +This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. +::: + +Space credentials are short-lived JWTs for cross-service access to space data. A member proves their membership to get a grant, exchanges the grant for a credential JWT, then passes it to an external service that needs to read the space's records. + +## How credentials work + +Credential issuance is a two-step process: + +```mermaid +sequenceDiagram + participant App as Client App + participant HV as HappyView + participant Svc as External Service + + App->>HV: POST dev.happyview.space.getMemberGrant
(DPoP auth, must be a member) + HV->>HV: Verify membership + HV-->>App: grant token + expiresAt + + App->>HV: POST dev.happyview.space.getSpaceCredential
(DPoP auth, grant token) + HV->>HV: Verify grant
Check app access (allow/deny list)
Sign credential with space keypair + HV-->>App: credential JWT + expiresAt + + App->>Svc: Request with Authorization: Bearer credential + Svc->>HV: Read space records
(Bearer credential) + HV->>HV: Verify credential signature
via space DID doc + HV-->>Svc: Record data +``` + +Credentials are ES256 JWTs signed with a P-256 keypair unique to each space. The keypair is generated on first credential request and stored encrypted (AES-256-GCM). + +## Step 1: Get a member grant + +The caller must be an authenticated member of the space. The grant is a short-lived token (5 minutes) that proves membership. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.getMemberGrant' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main" + }' +``` + +**Response:** + +```json +{ + "grant": "eyJhbGciOiJIUzI1NiJ9...", + "expiresAt": "2026-05-09T12:05:00Z" +} +``` + +## Step 2: Get a space credential + +Exchange the grant for a space credential JWT. The credential is signed by the space's keypair and has a 4-hour TTL. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.getSpaceCredential' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "grant": "eyJhbGciOiJIUzI1NiJ9..." + }' +``` + +**Response:** + +```json +{ + "credential": "eyJhbGciOiJFUzI1NiJ9...", + "expiresAt": "2026-05-09T16:00:00Z" +} +``` + +### Credential claims + +The JWT payload contains: + +| Claim | Description | +|---|---| +| `iss` | The space's DID (who signed it) | +| `sub` | The member's DID (who it was issued to) | +| `space` | The full `ats://` space URI | +| `scope` | Access level (`read`) | +| `iat` | Issued at (Unix timestamp) | +| `exp` | Expiry (Unix timestamp) | + +## Using a credential + +Pass the credential as a standard Bearer token in the `Authorization` header. HappyView distinguishes space credentials from other tokens by checking the JWT header's `typ` field (`space_credential`). + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.getRecord?space=...&collection=...&rkey=...' \ + -H 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6InNwYWNlX2NyZWRlbnRpYWwifQ...' +``` + +No DPoP auth or client key is needed when authenticating via space credential — the credential itself is sufficient. The user's identity comes from the `sub` claim in the JWT. + +HappyView verifies the credential by resolving the issuer's DID document, extracting the signing key, and validating the JWT signature and expiry. If valid, the request is treated as if the credential's `sub` is a member of the space. + +## App access control + +Before issuing a credential, HappyView checks whether the calling app (identified by its DPoP client key) is allowed to access the space: + +- **`default_allow` mode**: any app can get credentials unless it's on the `appDenylist` +- **`default_deny` mode**: only apps on the `appAllowlist` can get credentials + +If no client key is present in the DPoP claims, the check is skipped (direct user access without an app intermediary). + +## External credential verification + +HappyView can also verify credentials issued by *other* HappyView instances or space-aware services. When a Bearer space credential is presented, HappyView: + +1. Decodes the JWT without verification to extract the `iss` (issuer DID) +2. Resolves the issuer's DID document +3. Extracts the signing key from the DID doc +4. Verifies the JWT signature and expiry +5. Checks that the `space` claim matches the requested space + +A credential issued by one instance can be used to read from another instance that hosts the same space's data. diff --git a/packages/docs/docs/experimental/spaces/invites.md b/packages/docs/docs/experimental/spaces/invites.md new file mode 100644 index 0000000..b0e15ce --- /dev/null +++ b/packages/docs/docs/experimental/spaces/invites.md @@ -0,0 +1,134 @@ +# Invites + +:::caution Experimental +This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. +::: + +Invites let space owners distribute membership tokens without knowing recipients' DIDs in advance. + +:::info HappyView Extension +Invites are a HappyView-specific feature, not part of the AT Protocol spaces spec. They may be replaced by a different mechanism in the future. +::: + +## Creating an invite + +Only the space owner or a super admin can create invites. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.createInvite' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "access": "write", + "maxUses": 10, + "expiresAt": "2026-06-01T00:00:00Z" + }' +``` + +**Input:** + +| Field | Type | Required | Default | Description | +|---|---|---|---|---| +| `space` | string | Yes | | The space this invite is for | +| `access` | string | No | `read` | Access level granted on redemption (`read` or `write`) | +| `maxUses` | integer | No | unlimited | Maximum number of times the invite can be redeemed | +| `expiresAt` | string (datetime) | No | never | When the invite expires | + +**Response (201):** + +```json +{ + "inviteId": "uuid", + "token": "a1b2c3d4e5f6...", + "access": "write", + "maxUses": 10, + "expiresAt": "2026-06-01T00:00:00Z" +} +``` + +:::warning +The `token` is only returned once. It is stored as a SHA-256 hash — HappyView cannot recover the plaintext. +::: + +## Redeeming an invite + +Any authenticated user can redeem an invite token to join the space. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.redeemInvite' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "token": "a1b2c3d4e5f6..." + }' +``` + +**Response (201):** + +```json +{ + "uri": "ats://did:plc:abc123/com.example.forum/main", + "access": "write" +} +``` + +Redemption fails if: + +- The token is invalid (no matching hash found) +- The invite has been revoked +- The invite has reached its `maxUses` +- The invite has expired +- The user is already a member of the space + +## Revoking an invite + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.revokeInvite' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "inviteId": "uuid" + }' +``` + +Revoking an invite prevents future redemptions but does not remove members who already redeemed it. + +## Listing invites + +Only the space owner or a super admin can list invites. + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.listInvites?space=ats://did:plc:abc123/com.example.forum/main' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' +``` + +**Response:** + +```json +{ + "invites": [ + { + "id": "uuid", + "access": "write", + "maxUses": 10, + "uses": 3, + "expiresAt": "2026-06-01T00:00:00Z", + "revoked": false, + "createdBy": "did:plc:abc123", + "createdAt": "2026-05-09T12:00:00Z" + } + ] +} +``` + +The token itself is never returned in list responses — only the invite metadata. diff --git a/packages/docs/docs/experimental/spaces/managing-spaces.md b/packages/docs/docs/experimental/spaces/managing-spaces.md new file mode 100644 index 0000000..caff754 --- /dev/null +++ b/packages/docs/docs/experimental/spaces/managing-spaces.md @@ -0,0 +1,135 @@ +# Managing Spaces + +:::caution Experimental +This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. +::: + +## Creating a space + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.createSpace' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "type": "com.example.forum", + "skey": "main", + "displayName": "My Forum", + "description": "A place for discussion", + "accessMode": "default_allow" + }' +``` + +**Input:** + +| Field | Type | Required | Description | +| ---------------- | ------------- | -------- | ------------------------------------------------- | +| `type` | string (NSID) | Yes | The space type; describes what this space is for | +| `skey` | string | Yes | Space key; differentiates spaces of the same type | +| `displayName` | string | No | Human-readable name | +| `description` | string | No | Description of the space | +| `accessMode` | string | No | `default_allow` (default) or `default_deny` | +| `managingAppDid` | string | No | DID of the application that manages this space | +| `config` | object | No | Space configuration (see below) | + +**Response (201):** + +```json +{ + "uri": "ats://did:plc:abc123/com.example.forum/main" +} +``` + +The creator is automatically added as a write member. Use [`dev.happyview.space.getSpace`](#getting-a-space) to retrieve the full space object. + +### Space configuration + +The `config` object supports: + +| Field | Type | Default | Description | +| ------------------ | ------- | ------- | --------------------------------------------------------- | +| `membershipPublic` | boolean | `false` | Whether the member list is visible without authentication | +| `recordsPublic` | boolean | `false` | Whether records are readable without membership | + +Additional fields are preserved as-is. + +## Getting a space + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.getSpace?space=ats://did:plc:abc123/com.example.forum/main' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' +``` + +If `membershipPublic` is `false`, the caller must be authenticated and be a member (or the owner) to see the space. Non-members receive a `404 Not Found`. + +## Listing spaces + +Returns spaces where the authenticated user is a member. + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.listSpaces?limit=20' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' +``` + +**Parameters:** + +| Field | Type | Required | Default | Description | +| -------- | ------- | -------- | ------- | ---------------------------- | +| `limit` | integer | No | 50 | Max spaces to return (1-100) | +| `cursor` | string | No | | Pagination cursor | + +**Response:** + +```json +{ + "spaces": [ + { + "uri": "ats://did:plc:abc123/com.example.forum/main", + "isOwner": true + } + ], + "cursor": "2026-05-09T12:00:00Z" +} +``` + +## Updating a space + +Only the space owner or a HappView super admin can update a space. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.updateSpace' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "displayName": "Updated Forum Name", + "accessMode": "default_deny", + "appAllowlist": ["did:web:myapp.example.com"] + }' +``` + +All fields except `space` are optional. Only provided fields are updated. To clear an optional field, pass `null`. + +## Deleting a space + +Only the space owner or a HappyView super admin can delete a space. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.deleteSpace' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{"space": "ats://did:plc:abc123/com.example.forum/main"}' +``` + +:::warning +Deleting a space does not currently cascade to records, members, or credentials. This behavior may change. +::: diff --git a/packages/docs/docs/experimental/spaces/members.md b/packages/docs/docs/experimental/spaces/members.md new file mode 100644 index 0000000..24299a8 --- /dev/null +++ b/packages/docs/docs/experimental/spaces/members.md @@ -0,0 +1,125 @@ +# Members + +:::caution Experimental +This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. +::: + +Membership determines who can read and write within a space. Members have either `read` or `write` access — write implies read. + +## Adding a member + +Only the space owner or a super admin can add members. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.addMember' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "did": "did:plc:newmember", + "access": "write", + "isDelegation": false + }' +``` + +**Input:** + +| Field | Type | Required | Default | Description | +|---|---|---|---|---| +| `space` | string | Yes | | The space to add the member to | +| `did` | string | Yes | | DID of the member (or space for delegation) | +| `access` | string | No | `read` | `read` or `write` | +| `isDelegation` | boolean | No | `false` | Whether this member is a delegated space | + +**Response (201):** + +```json +{ + "member": { + "id": "uuid", + "spaceId": "space-uuid", + "did": "did:plc:newmember", + "access": "write", + "isDelegation": false, + "grantedBy": "did:plc:abc123", + "createdAt": "2026-05-09T12:00:00Z" + } +} +``` + +## Removing a member + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.removeMember' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "did": "did:plc:newmember" + }' +``` + +## Listing members + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.listMembers?space=ats://did:plc:abc123/com.example.forum/main' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' +``` + +If the space's `membershipPublic` config is `true`, this endpoint is accessible without authentication. Otherwise, the caller must be authenticated and be a member. + +The response returns the **resolved** member list — delegation chains are traversed and flattened: + +```json +{ + "members": [ + { "did": "did:plc:abc123", "access": "write" }, + { "did": "did:plc:newmember", "access": "write" }, + { "did": "did:plc:delegated-user", "access": "read" } + ] +} +``` + +## Delegation + +A space can be added as a member of another space by setting `isDelegation: true`. This transitively grants access to all members of the delegated space. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.addMember' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "did": "ats://did:plc:org/com.example.team/engineering", + "access": "read", + "isDelegation": true + }' +``` + +Delegation chains are resolved up to 10 levels deep. When a user appears in multiple chains, the highest access level wins (`write` > `read`). + +### Example: nested teams + +```mermaid +graph TD + A[Forum Space] -->|delegation, write| B[Engineering Team Space] + A -->|delegation, read| C[Design Team Space] + B -->|member, write| D[Alice] + B -->|member, write| E[Bob] + C -->|member, read| F[Carol] + C -->|member, read| D +``` + +In this example: +- Alice has `write` access (via Engineering) +- Bob has `write` access (via Engineering) +- Carol has `read` access (via Design) +- Alice also appears in Design, but `write` wins over `read` diff --git a/packages/docs/docs/experimental/spaces/records.md b/packages/docs/docs/experimental/spaces/records.md new file mode 100644 index 0000000..b58dfa9 --- /dev/null +++ b/packages/docs/docs/experimental/spaces/records.md @@ -0,0 +1,292 @@ +# Records + +:::caution Experimental +This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. +::: + +Space records are stored separately from public AT Protocol records. They follow the same URI pattern but use the `ats://` scheme and include the space identity: + +``` +ats:// did:plc:abcdefghijklmnop1234567890 / com.example.forum / main / did:plc:author / com.example.forum.post / abcdefghijklmnop1234567890 + └── space DID ───────────────────┘ └── space type ─┘ └── skey ─┘ └── author ──┘ └── collection ──────┘ └── rkey ────────────────┘ +``` + +## Creating a record + +Requires `write` membership in the space. The rkey is auto-generated using a TID. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.createRecord' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "collection": "com.example.forum.post", + "record": { + "$type": "com.example.forum.post", + "text": "Hello from the forum!", + "createdAt": "2026-05-09T12:00:00Z" + } + }' +``` + +**Input:** + +| Field | Type | Required | Description | +| ------------ | ------------- | -------- | ----------------------- | +| `space` | string | Yes | The space to write into | +| `collection` | string (NSID) | Yes | The record collection | +| `record` | object | Yes | The record data | + +**Response (201):** + +```json +{ + "uri": "ats://did:plc:abc123/com.example.forum/main/did:plc:author/com.example.forum.post/3l2tkbx7225co", + "cid": "bafyrei..." +} +``` + +`createRecord` always inserts a new record. If a record with the generated URI already exists, it returns `409 Conflict`. + +## Writing a record (put) + +Requires `write` membership in the space. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.putRecord' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "record": { + "$type": "com.example.forum.post", + "text": "Hello from the forum!", + "createdAt": "2026-05-09T12:00:00Z" + } + }' +``` + +**Input:** + +| Field | Type | Required | Description | +| ------------ | ------------- | -------- | ---------------------------------------------------------------- | +| `space` | string | Yes | The space to write into | +| `collection` | string (NSID) | Yes | The record collection | +| `rkey` | string | Yes | The record key | +| `record` | object | Yes | The record data | +| `swapRecord` | string | No | Expected CID of the existing record (for optimistic concurrency) | + +**Response (201):** + +```json +{ + "uri": "ats://did:plc:abc123/com.example.forum/main/did:plc:author/com.example.forum.post/3k2abc", + "cid": "bafyrei..." +} +``` + +The author DID is taken from the authenticated user. You can only write records as yourself, so the URI's author component will always be your DID. + +`putRecord` performs an upsert: if a record with the same collection + rkey already exists for this author in this space, it's overwritten. Use `swapRecord` to prevent unintended overwrites (see [Optimistic concurrency](#optimistic-concurrency) below). + +## Getting a record + +Requires `read` membership (or a valid [space credential](credentials.md)). + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.getRecord?space=ats://did:plc:abc123/com.example.forum/main&collection=com.example.forum.post&rkey=3k2abc' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' +``` + +**Response:** + +```json +{ + "uri": "ats://did:plc:abc123/com.example.forum/main/did:plc:author/com.example.forum.post/3k2abc", + "cid": "bafyrei...", + "value": { + "$type": "com.example.forum.post", + "text": "Hello from the forum!", + "createdAt": "2026-05-09T12:00:00Z" + } +} +``` + +## Listing records + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.listRecords?space=ats://did:plc:abc123/com.example.forum/main&collection=com.example.forum.post&limit=20' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' +``` + +**Parameters:** + +| Field | Type | Required | Default | Description | +| ------------ | ------- | -------- | ------- | --------------------------------- | +| `space` | string | Yes | | The space to list from | +| `repo` | string | No | | Filter by author DID | +| `collection` | string | No | | Filter by collection NSID | +| `limit` | integer | No | 50 | Max records to return (1-100) | +| `cursor` | string | No | | Pagination cursor | +| `reverse` | boolean | No | `false` | Reverse sort order (oldest first) | + +**Response:** + +```json +{ + "records": [ + { + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "cid": "bafyrei..." + } + ], + "cursor": "2026-05-09T12:00:00Z" +} +``` + +## Deleting a record + +You can only delete your own records. Requires `write` membership. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.deleteRecord' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "collection": "com.example.forum.post", + "rkey": "3k2abc" + }' +``` + +**Input:** + +| Field | Type | Required | Description | +| ------------ | ------------- | -------- | ---------------------------------------------------------------- | +| `space` | string | Yes | The space containing the record | +| `collection` | string (NSID) | Yes | The record collection | +| `rkey` | string | Yes | The record key | +| `swapRecord` | string | No | Expected CID of the existing record (for optimistic concurrency) | + +Attempting to delete another user's record returns `403 Forbidden`. + +## Batch writes (applyWrites) + +`applyWrites` performs multiple create, update, and delete operations in a single request. Requires `write` membership. + +```sh +curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.applyWrites' \ + -H 'X-Client-Key: hvc_...' \ + -H 'Authorization: DPoP ' \ + -H 'DPoP: ' \ + -H 'Content-Type: application/json' \ + -d '{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "writes": [ + { + "action": "create", + "collection": "com.example.forum.post", + "value": { "$type": "com.example.forum.post", "text": "First post" } + }, + { + "action": "update", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "value": { "$type": "com.example.forum.post", "text": "Edited post" }, + "swapRecord": "bafyrei..." + }, + { + "action": "delete", + "collection": "com.example.forum.post", + "rkey": "old-post" + } + ] + }' +``` + +**Input:** + +| Field | Type | Required | Description | +| ------------ | ------ | -------- | ---------------------------------------------------- | +| `space` | string | Yes | The space to write into | +| `swapCommit` | string | No | Expected space revision (for optimistic concurrency) | +| `writes` | array | Yes | List of write operations | + +Each write operation has an `action` field: + +| Action | Fields | Description | +| -------- | -------------------------------------------- | ---------------------------------------------------- | +| `create` | `collection`, `value`, `rkey?` | Insert a new record. Auto-generates rkey if omitted. | +| `update` | `collection`, `rkey`, `value`, `swapRecord?` | Upsert a record. | +| `delete` | `collection`, `rkey`, `swapRecord?` | Delete a record. | + +**Response:** + +```json +{ + "results": [ + { "uri": "ats://...", "cid": "bafyrei..." }, + { "uri": "ats://...", "cid": "bafyrei..." }, + {} + ] +} +``` + +Each entry in `results` corresponds to the write at the same index. Create and update operations return `uri` and `cid`; delete operations return an empty object. + +## Optimistic concurrency + +`swapRecord` and `swapCommit` provide optimistic concurrency control to prevent lost updates when multiple clients write to the same space. + +### swapRecord + +Pass the `swapRecord` field on `putRecord`, `deleteRecord`, or individual operations within `applyWrites`. The value is the CID of the record you expect to be replacing. If the record's current CID doesn't match, the operation fails with `409 Conflict`. + +```json +{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "collection": "com.example.forum.post", + "rkey": "3k2abc", + "record": { "text": "updated safely" }, + "swapRecord": "bafyrei_old_cid" +} +``` + +### swapCommit + +Pass the `swapCommit` field on `applyWrites` to assert the space's current revision. If another client has written to the space since you last read its state, the operation fails with `409 Conflict` before any writes are applied. + +The space's current revision is available as `revision` in the space object returned by `dev.happyview.space.getSpace`. + +```json +{ + "space": "ats://did:plc:abc123/com.example.forum/main", + "swapCommit": "3l2tkbx7225co", + "writes": [...] +} +``` + +## Cross-service access + +Records can also be read using a [space credential](credentials.md) instead of direct membership. Pass the credential as a Bearer token: + +```sh +curl 'https://happyview.example.com/xrpc/dev.happyview.space.getRecord?...' \ + -H 'Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6InNwYWNlX2NyZWRlbnRpYWwifQ...' +``` + +A feed generator or other service that isn't a direct member can use a credential issued by the space owner to read data without joining the space. No DPoP auth is needed — the credential itself authenticates the request. diff --git a/packages/docs/sidebars.ts b/packages/docs/sidebars.ts index 2fecf3e..553e6bc 100644 --- a/packages/docs/sidebars.ts +++ b/packages/docs/sidebars.ts @@ -298,6 +298,53 @@ const sidebars: SidebarsConfig = { }, ], }, + { + type: "category", + label: "Experimental", + items: [ + { + type: "category", + label: "Permissioned Spaces", + items: [ + { + type: "doc", + id: "experimental/spaces", + label: "Overview", + }, + { + type: "doc", + id: "experimental/spaces/managing-spaces", + label: "Managing Spaces", + }, + { + type: "doc", + id: "experimental/spaces/members", + label: "Members", + }, + { + type: "doc", + id: "experimental/spaces/records", + label: "Records", + }, + { + type: "doc", + id: "experimental/spaces/credentials", + label: "Credentials", + }, + { + type: "doc", + id: "experimental/spaces/invites", + label: "Invites", + }, + { + type: "doc", + id: "experimental/spaces/changelog", + label: "Changelog", + }, + ], + }, + ], + }, { type: "category", label: "Reference", -- 2.51.2 From 12241abe11858650216e3bebf0d6d9b13841741c Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 12:53:24 -0500 Subject: [PATCH 050/250] fix: remove route dupes Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/routes.rs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index adaf9cf..f0d27a1 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -268,15 +268,6 @@ pub fn space_routes() -> Router { post(revoke_invite), ) .route(&format!("/xrpc/{NS}.space.invite.list"), get(list_invites)) - // Credentials - .route( - &format!("/xrpc/{NS}.space.getMemberGrant"), - post(get_member_grant), - ) - .route( - &format!("/xrpc/{NS}.space.getSpaceCredential"), - post(get_space_credential), - ) } // --------------------------------------------------------------------------- -- 2.51.2 From d49033ec5f8e35538e5ce31a71619e39053fd0f4 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 13:21:23 -0500 Subject: [PATCH 051/250] fix: scopes types in oauth-client sdk after bad conflict resolution Signed-off-by: Trezy Signed-off-by: Trezy --- packages/oauth-client/src/client.ts | 4 ++-- packages/oauth-client/src/session.ts | 6 +++--- packages/oauth-client/src/types.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/oauth-client/src/client.ts b/packages/oauth-client/src/client.ts index e163783..d4ba498 100644 --- a/packages/oauth-client/src/client.ts +++ b/packages/oauth-client/src/client.ts @@ -164,7 +164,7 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, - scopes: params.scopes, + scopes: data.scopes, pdsUrl: params.pdsUrl, issuer: params.issuer, }; @@ -180,7 +180,7 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, - scopes: params.scopes, + scopes: data.scopes, pdsUrl: params.pdsUrl, issuer: params.issuer, fetch: this._fetch, diff --git a/packages/oauth-client/src/session.ts b/packages/oauth-client/src/session.ts index b1e5aa6..53bcbc3 100644 --- a/packages/oauth-client/src/session.ts +++ b/packages/oauth-client/src/session.ts @@ -7,7 +7,7 @@ export interface HappyViewSessionOptions { accessToken: string; clientKey: string; instanceUrl: string; - scopes?: string; + scopes: string[]; pdsUrl?: string; issuer?: string; fetch?: typeof globalThis.fetch; @@ -48,12 +48,12 @@ export class HappyViewSession { constructor(options: HappyViewSessionOptions) { this.did = options.did; - this.scopes = options.scopes ? options.scopes.split(" ") : []; + this.scopes = options.scopes; this.dpopKey = options.dpopKey; this.accessToken = options.accessToken; this.clientKey = options.clientKey; this.instanceUrl = options.instanceUrl.replace(/\/+$/, ""); - this._scopes = options.scopes; + this._scopes = options.scopes.join(" ") || undefined; this._pdsUrl = options.pdsUrl; this._issuer = options.issuer; this._fetch = options.fetch ?? ((input: RequestInfo | URL, init?: RequestInit) => fetch(input, init)) as typeof globalThis.fetch; diff --git a/packages/oauth-client/src/types.ts b/packages/oauth-client/src/types.ts index c893969..9d1eec9 100644 --- a/packages/oauth-client/src/types.ts +++ b/packages/oauth-client/src/types.ts @@ -46,7 +46,7 @@ export interface StoredSession { accessToken: string; clientKey: string; instanceUrl: string; - scopes?: string; + scopes: string[]; pdsUrl?: string; issuer?: string; } -- 2.51.2 From 44986ab404043780ad838cfc35da16b0cda664ae Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 13:50:31 -0500 Subject: [PATCH 052/250] fix: restore SDK scopes types after bad conflict resolution Signed-off-by: Trezy Signed-off-by: Trezy --- packages/oauth-client/src/client.ts | 6 +++--- packages/oauth-client/src/session.ts | 6 +++--- packages/oauth-client/src/types.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/oauth-client/src/client.ts b/packages/oauth-client/src/client.ts index d4ba498..97bd304 100644 --- a/packages/oauth-client/src/client.ts +++ b/packages/oauth-client/src/client.ts @@ -164,7 +164,7 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, - scopes: data.scopes, + scopes: params.scopes, pdsUrl: params.pdsUrl, issuer: params.issuer, }; @@ -180,7 +180,7 @@ export class HappyViewOAuthClient { accessToken: params.accessToken, clientKey: this.clientKey, instanceUrl: this.instanceUrl, - scopes: data.scopes, + scopes: params.scopes, pdsUrl: params.pdsUrl, issuer: params.issuer, fetch: this._fetch, @@ -232,7 +232,7 @@ export class HappyViewOAuthClient { accessToken: data.accessToken, clientKey: data.clientKey, instanceUrl: data.instanceUrl, - scopes: data.scopes ?? [], + scopes: data.scopes, pdsUrl: data.pdsUrl, issuer: data.issuer, fetch: this._fetch, diff --git a/packages/oauth-client/src/session.ts b/packages/oauth-client/src/session.ts index 53bcbc3..b1e5aa6 100644 --- a/packages/oauth-client/src/session.ts +++ b/packages/oauth-client/src/session.ts @@ -7,7 +7,7 @@ export interface HappyViewSessionOptions { accessToken: string; clientKey: string; instanceUrl: string; - scopes: string[]; + scopes?: string; pdsUrl?: string; issuer?: string; fetch?: typeof globalThis.fetch; @@ -48,12 +48,12 @@ export class HappyViewSession { constructor(options: HappyViewSessionOptions) { this.did = options.did; - this.scopes = options.scopes; + this.scopes = options.scopes ? options.scopes.split(" ") : []; this.dpopKey = options.dpopKey; this.accessToken = options.accessToken; this.clientKey = options.clientKey; this.instanceUrl = options.instanceUrl.replace(/\/+$/, ""); - this._scopes = options.scopes.join(" ") || undefined; + this._scopes = options.scopes; this._pdsUrl = options.pdsUrl; this._issuer = options.issuer; this._fetch = options.fetch ?? ((input: RequestInfo | URL, init?: RequestInit) => fetch(input, init)) as typeof globalThis.fetch; diff --git a/packages/oauth-client/src/types.ts b/packages/oauth-client/src/types.ts index 9d1eec9..c893969 100644 --- a/packages/oauth-client/src/types.ts +++ b/packages/oauth-client/src/types.ts @@ -46,7 +46,7 @@ export interface StoredSession { accessToken: string; clientKey: string; instanceUrl: string; - scopes: string[]; + scopes?: string; pdsUrl?: string; issuer?: string; } -- 2.51.2 From cd1030022148af3dc410da21a93cf90d2dbcc5e9 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 14:17:34 -0500 Subject: [PATCH 053/250] fix: prevent creation of API clients that would break HappyView core client Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/api_clients.rs | 7 +++++ src/auth/client_registry.rs | 56 +++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/admin/api_clients.rs b/src/admin/api_clients.rs index 6da0c41..f2188a1 100644 --- a/src/admin/api_clients.rs +++ b/src/admin/api_clients.rs @@ -32,6 +32,13 @@ pub(super) async fn create_api_client( ) -> Result<(StatusCode, Json), AppError> { auth.require(Permission::ApiClientsCreate).await?; + if state.oauth.is_domain_client_id(&body.client_id_url) { + return Err(AppError::Conflict(format!( + "client_id_url '{}' conflicts with a registered domain's OAuth client", + body.client_id_url + ))); + } + // Generate the client key: "hvc_" + 32 random hex chars. let mut random_bytes = [0u8; 16]; rand::rng().fill(&mut random_bytes); diff --git a/src/auth/client_registry.rs b/src/auth/client_registry.rs index 78cf1d9..0b1f821 100644 --- a/src/auth/client_registry.rs +++ b/src/auth/client_registry.rs @@ -130,6 +130,20 @@ impl OAuthClientRegistry { self.primary_client.store(client); } + /// Returns true if the given `client_id_url` is already claimed by a domain + /// client (i.e. matches `{domain_url}/oauth-client-metadata.json` for any + /// registered domain). + pub fn is_domain_client_id(&self, client_id_url: &str) -> bool { + self.domain_clients.iter().any(|entry| { + let domain_url = entry.key(); + let expected = format!( + "{}/oauth-client-metadata.json", + domain_url.trim_end_matches('/') + ); + expected == client_id_url + }) + } + /// Build and register a single OAuth client from API client metadata. /// Used when creating or updating an API client via the admin UI. pub fn register_api_client( @@ -140,6 +154,12 @@ impl OAuthClientRegistry { scopes_str: &str, params: &ApiClientOAuthParams, ) -> Result<(), String> { + if self.is_domain_client_id(client_id_url) { + return Err(format!( + "client_id_url '{}' conflicts with a registered domain's OAuth client", + client_id_url + )); + } let ApiClientOAuthParams { plc_url, state_store, @@ -232,6 +252,14 @@ impl OAuthClientRegistry { }; for (client_id_url, client_uri, redirect_uris_json, scopes_str) in rows { + if self.is_domain_client_id(&client_id_url) { + tracing::warn!( + client_id = %client_id_url, + "Skipping API client that conflicts with a domain OAuth client" + ); + continue; + } + let redirect_uris: Vec = serde_json::from_str(&redirect_uris_json).unwrap_or_default(); @@ -332,4 +360,32 @@ mod tests { assert_eq!(map.get("key1").unwrap().value(), "val2"); } + + #[test] + fn test_domain_client_id_collision_detection() { + let domains: DashMap = DashMap::new(); + domains.insert("https://example.com".to_string(), "client".to_string()); + domains.insert( + "https://other.example.com/".to_string(), + "client".to_string(), + ); + + let matches = |client_id_url: &str| -> bool { + domains.iter().any(|entry| { + let domain_url = entry.key(); + let expected = format!( + "{}/oauth-client-metadata.json", + domain_url.trim_end_matches('/') + ); + expected == client_id_url + }) + }; + + assert!(matches("https://example.com/oauth-client-metadata.json")); + assert!(matches( + "https://other.example.com/oauth-client-metadata.json" + )); + assert!(!matches("https://unrelated.com/oauth-client-metadata.json")); + assert!(!matches("https://example.com/other-path.json")); + } } -- 2.51.2 From 8b65ff662a1a0c0efa1109dc56af38cfe039fd00 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 14:21:41 -0500 Subject: [PATCH 054/250] fix: use the correct cursors when paginating spaces Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/db.rs | 4 +++- src/spaces/routes.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/spaces/db.rs b/src/spaces/db.rs index 88d19b3..25afa0d 100644 --- a/src/spaces/db.rs +++ b/src/spaces/db.rs @@ -114,6 +114,7 @@ pub async fn list_spaces_by_owner( pub struct SpaceView { pub uri: String, pub is_owner: bool, + pub created_at: String, } pub async fn list_spaces_for_user( @@ -155,9 +156,10 @@ pub async fn list_spaces_for_user( Ok(rows .into_iter() .map( - |(space_did, owner_did, type_nsid, skey, _created_at)| SpaceView { + |(space_did, owner_did, type_nsid, skey, created_at)| SpaceView { uri: format!("ats://{}/{}/{}", space_did, type_nsid, skey), is_owner: owner_did == did, + created_at, }, ) .collect()) diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index f0d27a1..bf9c033 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -482,7 +482,7 @@ async fn list_spaces( .await?; let cursor = if views.len() as i64 == limit { - views.last().map(|v| v.uri.clone()) + views.last().map(|v| v.created_at.clone()) } else { None }; -- 2.51.2 From 4f9757617240c706315c137a6be317f5176b7d8f Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 14:27:58 -0500 Subject: [PATCH 055/250] fix: prevent unauthorized privilege escalation Signed-off-by: Trezy Signed-off-by: Trezy --- src/auth/middleware.rs | 6 +----- src/spaces/routes.rs | 49 +++++++++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/auth/middleware.rs b/src/auth/middleware.rs index c64a42e..4d9814f 100644 --- a/src/auth/middleware.rs +++ b/src/auth/middleware.rs @@ -254,12 +254,8 @@ impl FromRequestParts for XrpcClaims { let token = &h[7..]; match crate::spaces::credential::peek_jwt_typ(token) { Some(typ) if typ == "space_credential" => { - let sub = - crate::spaces::credential::peek_credential_sub(token).ok_or_else( - || AppError::Auth("invalid space credential payload".into()), - )?; Ok(XrpcClaims { - identity: Some(Claims::internal(sub)), + identity: None, space_credential: Some(token.to_string()), }) } diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index bf9c033..02b4dcf 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -281,6 +281,32 @@ fn require_auth(claims: &XrpcClaims) -> Result<&crate::auth::Claims, AppError> { .ok_or_else(|| AppError::Auth("This endpoint requires authentication".into())) } +/// Like `require_auth`, but also accepts a verified space credential as an +/// identity source. Use this in space endpoints that support `Bearer +/// ` in addition to DPoP auth. +async fn require_auth_or_credential( + state: &AppState, + claims: &XrpcClaims, +) -> Result { + if let Some(identity) = &claims.identity { + return Ok(identity.did().to_string()); + } + + if let Some(token) = &claims.space_credential { + let verified = crate::spaces::credential::verify_external_credential( + token, + &state.http, + &state.config.plc_url, + ) + .await?; + return Ok(verified.sub); + } + + Err(AppError::Auth( + "This endpoint requires authentication".into(), + )) +} + async fn resolve_space(state: &AppState, space_uri: &str) -> Result { let uri = SpaceUri::parse(space_uri)?; db::get_space_by_address( @@ -566,8 +592,7 @@ async fn create_record( xrpc_claims: XrpcClaims, Json(input): Json, ) -> Result { - let claims = require_auth(&xrpc_claims)?; - let did = claims.did().to_string(); + let did = require_auth_or_credential(&state, &xrpc_claims).await?; let space = resolve_space(&state, &input.space).await?; require_membership( &state, @@ -616,8 +641,7 @@ async fn put_record( xrpc_claims: XrpcClaims, Json(input): Json, ) -> Result { - let claims = require_auth(&xrpc_claims)?; - let did = claims.did().to_string(); + let did = require_auth_or_credential(&state, &xrpc_claims).await?; let space = resolve_space(&state, &input.space).await?; require_membership( &state, @@ -708,8 +732,7 @@ async fn apply_writes( xrpc_claims: XrpcClaims, Json(input): Json, ) -> Result, AppError> { - let claims = require_auth(&xrpc_claims)?; - let did = claims.did().to_string(); + let did = require_auth_or_credential(&state, &xrpc_claims).await?; let space = resolve_space(&state, &input.space).await?; require_membership( &state, @@ -838,12 +861,12 @@ async fn get_record( xrpc_claims: XrpcClaims, Query(query): Query, ) -> Result, AppError> { - let claims = require_auth(&xrpc_claims)?; + let did = require_auth_or_credential(&state, &xrpc_claims).await?; let space = resolve_space(&state, &query.space).await?; require_membership( &state, &space, - claims.did(), + &did, false, xrpc_claims.space_credential.as_deref(), ) @@ -871,12 +894,12 @@ async fn list_records( xrpc_claims: XrpcClaims, Query(query): Query, ) -> Result, AppError> { - let claims = require_auth(&xrpc_claims)?; + let did = require_auth_or_credential(&state, &xrpc_claims).await?; let space = resolve_space(&state, &query.space).await?; require_membership( &state, &space, - claims.did(), + &did, false, xrpc_claims.space_credential.as_deref(), ) @@ -886,7 +909,7 @@ async fn list_records( if xrpc_claims.space_credential.is_some() { None } else { - Some(claims.did()) + Some(did.as_str()) } }); @@ -935,11 +958,11 @@ async fn list_members( let space = resolve_space(&state, &query.space).await?; if !space.config.membership_public { - let claims = require_auth(&xrpc_claims)?; + let did = require_auth_or_credential(&state, &xrpc_claims).await?; require_membership( &state, &space, - claims.did(), + &did, false, xrpc_claims.space_credential.as_deref(), ) -- 2.51.2 From 6108edd94f1121e665d7fe61a980334e76ab0a01 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:00:04 -0500 Subject: [PATCH 056/250] fix: dont block space creds on client key check Signed-off-by: Trezy Signed-off-by: Trezy --- src/xrpc/mod.rs | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/xrpc/mod.rs b/src/xrpc/mod.rs index 1865c15..ddf24b9 100644 --- a/src/xrpc/mod.rs +++ b/src/xrpc/mod.rs @@ -260,7 +260,19 @@ pub async fn xrpc_get( let mut params = parse_query_params(&raw_query); let claims = xrpc_claims.identity; - let rate_key = resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)?; + // Space credential Bearer requests bypass the client-key requirement; + // rate-limit by the credential's sub DID instead. + let rate_key = if claims.is_none() { + if let Some(ref token) = xrpc_claims.space_credential { + crate::spaces::credential::peek_credential_sub(token).ok_or_else(|| { + AppError::Auth("invalid space credential: unable to extract sub".into()) + })? + } else { + resolve_client_key(&state, None, &parts, ¶ms)? + } + } else { + resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)? + }; let lexicon = state.lexicons.get(&method).await; @@ -348,11 +360,23 @@ pub async fn xrpc_post( ) -> Result { let raw_query = raw_query.unwrap_or_default(); let mut params = parse_query_params(&raw_query); - let claims = xrpc_claims - .identity - .ok_or_else(|| AppError::Auth("XRPC procedures require DPoP authentication".into()))?; + let claims = xrpc_claims.identity; - let rate_key = resolve_client_key(&state, Some(&claims), &parts, ¶ms)?; + // Space credential Bearer requests bypass the client-key requirement; + // rate-limit by the credential's sub DID instead. + let rate_key = if claims.is_none() { + if let Some(ref token) = xrpc_claims.space_credential { + crate::spaces::credential::peek_credential_sub(token).ok_or_else(|| { + AppError::Auth("invalid space credential: unable to extract sub".into()) + })? + } else { + return Err(AppError::Auth( + "XRPC procedures require DPoP authentication".into(), + )); + } + } else { + resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)? + }; let lexicon = state.lexicons.get(&method).await; @@ -416,6 +440,9 @@ pub async fn xrpc_post( coerce_params(&mut params, param_schema); } + let claims = claims + .ok_or_else(|| AppError::Auth("XRPC procedures require DPoP authentication".into()))?; + let mut response = procedure::handle_procedure(&state, &method, &claims, &body, ¶ms, &lexicon).await?; if let CheckResult::Allowed { -- 2.51.2 From 4ae8c292c9d8e47e59f6051fd83660d7a08bd7fd Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:00:39 -0500 Subject: [PATCH 057/250] fix: prevent base path collision Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/domains.rs | 29 ++++++--- src/auth/client_registry.rs | 120 ++++++++++++++++++++++++------------ src/main.rs | 18 +++++- 3 files changed, 118 insertions(+), 49 deletions(-) diff --git a/src/admin/domains.rs b/src/admin/domains.rs index e91b1a5..4a205a2 100644 --- a/src/admin/domains.rs +++ b/src/admin/domains.rs @@ -123,17 +123,25 @@ pub(super) async fn create( updated_at: now, }; + // Build the base-path-aware URLs for this domain + let domain_base_url = state.config.url_with_base_path(&url); + let client_id_url = format!( + "{}/oauth-client-metadata.json", + domain_base_url.trim_end_matches('/') + ); + // Register the OAuth client for this domain - state - .oauth - .register_domain_client(url.clone(), state.oauth.primary_client()); + state.oauth.register_domain_client( + url.clone(), + client_id_url.clone(), + state.oauth.primary_client(), + ); // Build a proper OAuth client if not loopback let domain_is_loopback = url.contains("127.0.0.1") || url.contains("[::1]") || url.contains("localhost"); if !domain_is_loopback { - let client_id_url = format!("{}/oauth-client-metadata.json", url.trim_end_matches('/')); - let callback = format!("{}/auth/callback", url.trim_end_matches('/')); + let callback = format!("{}/auth/callback", domain_base_url.trim_end_matches('/')); if let Err(e) = state.oauth.register_api_client( &client_id_url, &url, @@ -151,7 +159,9 @@ pub(super) async fn create( // Move from `clients` (where register_api_client puts it) to domain_clients + clients if let Some(client) = state.oauth.get(&client_id_url) { state.oauth.remove(&client_id_url); - state.oauth.register_domain_client(url.clone(), client); + state + .oauth + .register_domain_client(url.clone(), client_id_url, client); } } } @@ -211,7 +221,12 @@ pub(super) async fn delete( .map_err(|e| AppError::Internal(format!("failed to delete domain: {e}")))?; // Remove OAuth client and cache entry - state.oauth.remove_domain_client(&url); + let domain_base_url = state.config.url_with_base_path(&url); + let client_id_url = format!( + "{}/oauth-client-metadata.json", + domain_base_url.trim_end_matches('/') + ); + state.oauth.remove_domain_client(&url, &client_id_url); let host = url .strip_prefix("https://") .or_else(|| url.strip_prefix("http://")) diff --git a/src/auth/client_registry.rs b/src/auth/client_registry.rs index 0b1f821..995496b 100644 --- a/src/auth/client_registry.rs +++ b/src/auth/client_registry.rs @@ -91,23 +91,26 @@ impl OAuthClientRegistry { /// Register a domain-specific OAuth client. /// Inserts into both `domain_clients` (keyed by domain URL, for `get_for_domain`) /// and `clients` (keyed by client_id_url, for `get_or_default`). - pub fn register_domain_client(&self, domain_url: String, client: Arc) { - let client_id_url = format!( - "{}/oauth-client-metadata.json", - domain_url.trim_end_matches('/') - ); + /// + /// `client_id_url` must be the base-path-aware client ID + /// (e.g. `{domain_url}{base_path}/oauth-client-metadata.json`). + pub fn register_domain_client( + &self, + domain_url: String, + client_id_url: String, + client: Arc, + ) { self.domain_clients.insert(domain_url, Arc::clone(&client)); self.clients.insert(client_id_url, client); } /// Remove a domain-specific OAuth client from both maps. - pub fn remove_domain_client(&self, domain_url: &str) { + /// + /// `client_id_url` must be the same base-path-aware client ID that was + /// passed to `register_domain_client`. + pub fn remove_domain_client(&self, domain_url: &str, client_id_url: &str) { self.domain_clients.remove(domain_url); - let client_id_url = format!( - "{}/oauth-client-metadata.json", - domain_url.trim_end_matches('/') - ); - self.clients.remove(&client_id_url); + self.clients.remove(client_id_url); } /// Look up a domain-specific OAuth client. @@ -131,17 +134,18 @@ impl OAuthClientRegistry { } /// Returns true if the given `client_id_url` is already claimed by a domain - /// client (i.e. matches `{domain_url}/oauth-client-metadata.json` for any - /// registered domain). + /// client. Checks by comparing against the actual client instances stored by + /// domain registrations, so it works correctly regardless of `BASE_PATH`. pub fn is_domain_client_id(&self, client_id_url: &str) -> bool { - self.domain_clients.iter().any(|entry| { - let domain_url = entry.key(); - let expected = format!( - "{}/oauth-client-metadata.json", - domain_url.trim_end_matches('/') - ); - expected == client_id_url - }) + // A client_id_url belongs to a domain client if any domain_clients entry + // has the same Arc as the one stored in `clients` under that key. + if let Some(candidate) = self.clients.get(client_id_url) { + self.domain_clients + .iter() + .any(|entry| Arc::ptr_eq(entry.value(), candidate.value())) + } else { + false + } } /// Build and register a single OAuth client from API client metadata. @@ -363,29 +367,67 @@ mod tests { #[test] fn test_domain_client_id_collision_detection() { - let domains: DashMap = DashMap::new(); - domains.insert("https://example.com".to_string(), "client".to_string()); - domains.insert( - "https://other.example.com/".to_string(), - "client".to_string(), + // Simulate the is_domain_client_id logic using raw DashMaps and Arc pointer equality, + // mirroring the real OAuthClientRegistry implementation. + let domain_clients: DashMap> = DashMap::new(); + let clients: DashMap> = DashMap::new(); + + // Register domain "https://example.com" with base-path-aware client_id_url + let client_a = Arc::new("client_a".to_string()); + domain_clients.insert("https://example.com".to_string(), Arc::clone(&client_a)); + clients.insert( + "https://example.com/hv/oauth-client-metadata.json".to_string(), + client_a, ); - let matches = |client_id_url: &str| -> bool { - domains.iter().any(|entry| { - let domain_url = entry.key(); - let expected = format!( - "{}/oauth-client-metadata.json", - domain_url.trim_end_matches('/') - ); - expected == client_id_url - }) + // Register domain "https://other.example.com" without base path + let client_b = Arc::new("client_b".to_string()); + domain_clients.insert( + "https://other.example.com".to_string(), + Arc::clone(&client_b), + ); + clients.insert( + "https://other.example.com/oauth-client-metadata.json".to_string(), + client_b, + ); + + // Also register a non-domain API client + let api_client = Arc::new("api_client".to_string()); + clients.insert( + "https://api.example.com/oauth-client-metadata.json".to_string(), + api_client, + ); + + let is_domain_client_id = |client_id_url: &str| -> bool { + if let Some(candidate) = clients.get(client_id_url) { + domain_clients + .iter() + .any(|entry| Arc::ptr_eq(entry.value(), candidate.value())) + } else { + false + } }; - assert!(matches("https://example.com/oauth-client-metadata.json")); - assert!(matches( + // Base-path-aware key is detected as a domain client + assert!(is_domain_client_id( + "https://example.com/hv/oauth-client-metadata.json" + )); + // Non-base-path key is also detected + assert!(is_domain_client_id( "https://other.example.com/oauth-client-metadata.json" )); - assert!(!matches("https://unrelated.com/oauth-client-metadata.json")); - assert!(!matches("https://example.com/other-path.json")); + // Unrelated URLs are not detected + assert!(!is_domain_client_id( + "https://unrelated.com/oauth-client-metadata.json" + )); + assert!(!is_domain_client_id("https://example.com/other-path.json")); + // The old (wrong) key without base path is not detected + assert!(!is_domain_client_id( + "https://example.com/oauth-client-metadata.json" + )); + // API client is not detected as a domain client + assert!(!is_domain_client_id( + "https://api.example.com/oauth-client-metadata.json" + )); } } diff --git a/src/main.rs b/src/main.rs index 8145cf4..33b998a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -519,7 +519,15 @@ async fn main() { // Register the primary domain's OAuth client in domain_clients if let Some(ref pd) = domain_cache.primary().await { - oauth_registry.register_domain_client(pd.url.clone(), Arc::clone(&oauth_client_arc)); + let primary_client_id_url = format!( + "{}/oauth-client-metadata.json", + config.url_with_base_path(&pd.url).trim_end_matches('/') + ); + oauth_registry.register_domain_client( + pd.url.clone(), + primary_client_id_url, + Arc::clone(&oauth_client_arc), + ); } // Build OAuth clients for all non-primary domains @@ -553,7 +561,7 @@ async fn main() { match atrium_oauth::OAuthClient::new(OAuthClientConfig { client_metadata: AtprotoClientMetadata { - client_id: domain_client_id, + client_id: domain_client_id.clone(), client_uri: Some(domain_base_url.clone()), redirect_uris: vec![domain_callback_url], token_endpoint_auth_method: AuthMethod::None, @@ -569,7 +577,11 @@ async fn main() { }) { Ok(client) => { info!(domain = %domain.url, "Registered domain OAuth client"); - oauth_registry.register_domain_client(domain.url.clone(), Arc::new(client)); + oauth_registry.register_domain_client( + domain.url.clone(), + domain_client_id, + Arc::new(client), + ); } Err(e) => { tracing::error!(domain = %domain.url, error = %e, "Failed to create domain OAuth client"); -- 2.51.2 From 7ec035968915bbf6e1db00f9fb2559f9f494e3b4 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:01:06 -0500 Subject: [PATCH 058/250] chore: rename did to clarify purpose Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/db.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/spaces/db.rs b/src/spaces/db.rs index 25afa0d..f6eae7b 100644 --- a/src/spaces/db.rs +++ b/src/spaces/db.rs @@ -95,7 +95,7 @@ pub async fn get_space_by_address( pub async fn list_spaces_by_owner( pool: &sqlx::AnyPool, backend: DatabaseBackend, - did: &str, + owner_did: &str, ) -> Result, AppError> { let sql = adapt_sql( "SELECT id, did, owner_did, type_nsid, skey, display_name, description, access_mode, app_allowlist, app_denylist, managing_app_did, config, revision, created_at, updated_at FROM spaces WHERE owner_did = ? ORDER BY created_at DESC", @@ -103,7 +103,7 @@ pub async fn list_spaces_by_owner( ); let rows: Vec = sqlx::query_as(&sql) - .bind(did) + .bind(owner_did) .fetch_all(pool) .await .map_err(|e| AppError::Internal(format!("failed to list spaces: {e}")))?; -- 2.51.2 From 89517404eaf4e2a6a6c1f7caecad3774a75a0173 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:10:42 -0500 Subject: [PATCH 059/250] ci: only run builds on PR sync Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 080b041..d981162 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,6 @@ name: CI on: - push: - branches: [main, dev] pull_request: branches: [main, dev] delete: -- 2.51.2 From 523e19f636d8509685c44cc71f0429458c855ea8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:30:21 -0500 Subject: [PATCH 060/250] feat: add new TID functions closes #16 Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/docs/guides/scripting.md | 2 +- .../docs/reference/lua/utility-globals.md | 52 +++++++ src/lua/sandbox.rs | 147 +++++++++++++++++- src/lua/tid.rs | 147 ++++++++++++++++++ 4 files changed, 343 insertions(+), 5 deletions(-) diff --git a/packages/docs/docs/guides/scripting.md b/packages/docs/docs/guides/scripting.md index a8dc6fe..62982d0 100644 --- a/packages/docs/docs/guides/scripting.md +++ b/packages/docs/docs/guides/scripting.md @@ -71,7 +71,7 @@ Available in both queries and procedures: | ---------------- | ------- | ------------------------------------------------------------------- | | `now()` | string | Current UTC timestamp in ISO 8601 format | | `log(message)` | — | Log a message (appears in server logs at debug level) | -| `TID()` | string | Generate a fresh atproto TID (13-character sortable identifier) | +| `TID()` | string | Generate a fresh atproto TID (13-character sortable identifier). Also provides conversion methods — see [Utility Globals reference](../reference/lua/utility-globals.md#tid). | | `toarray(table)` | table | Mark a table as a JSON array for serialization (see [below](#toarray)) | ### toarray diff --git a/packages/docs/docs/reference/lua/utility-globals.md b/packages/docs/docs/reference/lua/utility-globals.md index 95da1e5..235219c 100644 --- a/packages/docs/docs/reference/lua/utility-globals.md +++ b/packages/docs/docs/reference/lua/utility-globals.md @@ -35,6 +35,58 @@ r:set_rkey(TID()) r:save() ``` +### TID.toISO8601 + +```lua +local iso = TID.toISO8601(tid) +-- "2026-04-19T15:30:00.123456Z" +``` + +Converts a TID to an ISO 8601 timestamp string with microsecond precision. This is lossy — the 10-bit clock ID embedded in the TID is discarded. + +### TID.fromISO8601 + +```lua +local tid = TID.fromISO8601("2026-04-19T15:30:00Z") +``` + +Creates a TID from an ISO 8601 timestamp string. Accepts timezone offsets and fractional seconds. The resulting TID uses a zero clock ID, so it won't match any specific generated TID but will sort correctly relative to TIDs from the same moment. + +### TID.toUnixMicroseconds + +```lua +local us = TID.toUnixMicroseconds(tid) +-- 1745074200123456 +``` + +Extracts the microsecond timestamp from a TID (microseconds since the Unix epoch). Lossy — drops the clock ID. + +### TID.fromUnixMicroseconds + +```lua +local tid = TID.fromUnixMicroseconds(1745074200123456) +``` + +Creates a TID from a microsecond timestamp. Uses a zero clock ID. + +### TID.toNumber + +```lua +local n = TID.toNumber(tid) +local same_tid = TID.fromNumber(n) +-- same_tid == tid +``` + +Decodes a TID to its full numeric representation (timestamp + clock ID). This is the only lossless conversion — `TID.fromNumber(TID.toNumber(tid))` always returns the original TID. + +### TID.fromNumber + +```lua +local tid = TID.fromNumber(n) +``` + +Encodes a number back into a TID. Inverse of `TID.toNumber`. + ## toarray ```lua diff --git a/src/lua/sandbox.rs b/src/lua/sandbox.rs index b699c82..fe7fe3d 100644 --- a/src/lua/sandbox.rs +++ b/src/lua/sandbox.rs @@ -1,6 +1,9 @@ use mlua::{Lua, LuaSerdeExt, Result as LuaResult}; -use super::tid::generate_tid; +use super::tid::{ + generate_tid, tid_from_iso8601, tid_from_number, tid_from_unix_microseconds, tid_to_iso8601, + tid_to_number, tid_to_unix_microseconds, +}; const INSTRUCTION_LIMIT: u32 = 1_000_000; @@ -59,9 +62,51 @@ pub fn create_sandbox() -> LuaResult { })?; globals.set("log", log_fn)?; - // Utility: TID() returns a fresh AT Protocol TID string - let tid_fn = lua.create_function(|_, ()| Ok(generate_tid()))?; - globals.set("TID", tid_fn)?; + // Utility: TID table — callable as TID() to generate, plus conversion methods + let tid_table = lua.create_table()?; + tid_table.set( + "toISO8601", + lua.create_function(|_, tid: String| { + tid_to_iso8601(&tid).ok_or_else(|| mlua::Error::runtime(format!("invalid TID: {tid}"))) + })?, + )?; + tid_table.set( + "fromISO8601", + lua.create_function(|_, iso: String| { + tid_from_iso8601(&iso) + .ok_or_else(|| mlua::Error::runtime(format!("invalid ISO 8601: {iso}"))) + })?, + )?; + tid_table.set( + "toUnixMicroseconds", + lua.create_function(|_, tid: String| { + tid_to_unix_microseconds(&tid) + .ok_or_else(|| mlua::Error::runtime(format!("invalid TID: {tid}"))) + })?, + )?; + tid_table.set( + "fromUnixMicroseconds", + lua.create_function(|_, us: i64| Ok(tid_from_unix_microseconds(us)))?, + )?; + tid_table.set( + "toNumber", + lua.create_function(|_, tid: String| { + tid_to_number(&tid) + .map(|v| v as i64) + .ok_or_else(|| mlua::Error::runtime(format!("invalid TID: {tid}"))) + })?, + )?; + tid_table.set( + "fromNumber", + lua.create_function(|_, val: i64| Ok(tid_from_number(val as u64)))?, + )?; + let tid_meta = lua.create_table()?; + tid_meta.set( + "__call", + lua.create_function(|_, _: mlua::MultiValue| Ok(generate_tid()))?, + )?; + let _ = tid_table.set_metatable(Some(tid_meta)); + globals.set("TID", tid_table)?; // Utility: toarray(table) marks a table as a JSON array for serialization. // Ensures empty tables serialize as [] instead of {}. @@ -187,6 +232,100 @@ mod tests { assert_ne!(a, b); } + #[test] + fn sandbox_tid_to_iso8601() { + let lua = create_sandbox().unwrap(); + let iso: String = lua.load(r#"return TID.toISO8601(TID())"#).eval().unwrap(); + assert!(iso.contains("T") && iso.ends_with("Z")); + } + + #[test] + fn sandbox_tid_from_iso8601() { + let lua = create_sandbox().unwrap(); + let tid: String = lua + .load(r#"return TID.fromISO8601("2024-01-01T00:00:00Z")"#) + .eval() + .unwrap(); + assert_eq!(tid.len(), 13); + } + + #[test] + fn sandbox_tid_roundtrip() { + let lua = create_sandbox().unwrap(); + let result: String = lua + .load( + r#" + local tid = TID() + local iso = TID.toISO8601(tid) + local tid2 = TID.fromISO8601(iso) + return TID.toISO8601(tid2) + "#, + ) + .eval() + .unwrap(); + assert!(result.contains("T") && result.ends_with("Z")); + } + + #[test] + fn sandbox_tid_to_unix_microseconds() { + let lua = create_sandbox().unwrap(); + let us: i64 = lua + .load(r#"return TID.toUnixMicroseconds(TID.fromISO8601("2024-01-01T00:00:00Z"))"#) + .eval() + .unwrap(); + assert_eq!(us, 1_704_067_200_000_000); + } + + #[test] + fn sandbox_tid_from_unix_microseconds() { + let lua = create_sandbox().unwrap(); + let tid: String = lua + .load("return TID.fromUnixMicroseconds(1704067200000000)") + .eval() + .unwrap(); + assert_eq!(tid.len(), 13); + let iso: String = lua + .load(format!(r#"return TID.toISO8601("{tid}")"#)) + .eval() + .unwrap(); + assert_eq!(iso, "2024-01-01T00:00:00.000000Z"); + } + + #[test] + fn sandbox_tid_number_lossless_roundtrip() { + let lua = create_sandbox().unwrap(); + let result: bool = lua + .load( + r#" + local tid = TID() + local n = TID.toNumber(tid) + local tid2 = TID.fromNumber(n) + return tid == tid2 + "#, + ) + .eval() + .unwrap(); + assert!(result, "toNumber/fromNumber should be lossless"); + } + + #[test] + fn sandbox_tid_to_iso8601_errors_on_invalid() { + let lua = create_sandbox().unwrap(); + let result = lua + .load(r#"return TID.toISO8601("garbage")"#) + .eval::(); + assert!(result.is_err()); + } + + #[test] + fn sandbox_tid_from_iso8601_errors_on_invalid() { + let lua = create_sandbox().unwrap(); + let result = lua + .load(r#"return TID.fromISO8601("not a date")"#) + .eval::(); + assert!(result.is_err()); + } + #[test] fn sandbox_kills_infinite_loop() { let lua = create_sandbox().unwrap(); diff --git a/src/lua/tid.rs b/src/lua/tid.rs index 24d4939..cc5e0ca 100644 --- a/src/lua/tid.rs +++ b/src/lua/tid.rs @@ -1,5 +1,7 @@ use std::time::{SystemTime, UNIX_EPOCH}; +use chrono::{DateTime, TimeZone, Utc}; + /// Base32-sortstring alphabet used by AT Protocol TIDs. const BASE32_SORT: &[u8; 32] = b"234567abcdefghijklmnopqrstuvwxyz"; @@ -32,6 +34,58 @@ fn encode_base32_sort(mut val: u64) -> String { String::from_utf8(buf.to_vec()).unwrap() } +/// Decode a 13-character base32-sortstring back to a u64. +fn decode_base32_sort(tid: &str) -> Option { + if tid.len() != 13 { + return None; + } + let mut val: u64 = 0; + for byte in tid.bytes() { + let idx = BASE32_SORT.iter().position(|&b| b == byte)?; + val = (val << 5) | idx as u64; + } + Some(val) +} + +/// Extract the microsecond timestamp from a TID and return it as an ISO 8601 +/// string. The 10-bit clock ID is discarded (lossy). +pub fn tid_to_iso8601(tid: &str) -> Option { + let val = decode_base32_sort(tid)?; + let us = (val >> 10) as i64; + let dt: DateTime = Utc.timestamp_micros(us).single()?; + Some(dt.to_rfc3339_opts(chrono::SecondsFormat::Micros, true)) +} + +/// Create a TID from an ISO 8601 timestamp string. Uses a zero clock ID, so +/// the result won't match any specific generated TID but will sort correctly +/// relative to TIDs from the same moment. +pub fn tid_from_iso8601(iso: &str) -> Option { + let dt = iso.parse::>().ok()?; + let us = dt.timestamp_micros() as u64; + Some(encode_base32_sort(us << 10)) +} + +/// Extract the microsecond timestamp from a TID (lossy — drops clock ID). +pub fn tid_to_unix_microseconds(tid: &str) -> Option { + let val = decode_base32_sort(tid)?; + Some((val >> 10) as i64) +} + +/// Create a TID from a microsecond timestamp. Uses a zero clock ID. +pub fn tid_from_unix_microseconds(us: i64) -> String { + encode_base32_sort((us as u64) << 10) +} + +/// Lossless: decode a TID to its full u64 representation (timestamp + clock ID). +pub fn tid_to_number(tid: &str) -> Option { + decode_base32_sort(tid) +} + +/// Lossless: encode a u64 back into a TID. +pub fn tid_from_number(val: u64) -> String { + encode_base32_sort(val) +} + #[cfg(test)] mod tests { use super::*; @@ -73,4 +127,97 @@ mod tests { let result = encode_base32_sort(0); assert_eq!(result, "2222222222222"); } + + #[test] + fn decode_inverts_encode() { + let val: u64 = 0x123456789ABCDEF; + let encoded = encode_base32_sort(val); + assert_eq!(decode_base32_sort(&encoded), Some(val)); + } + + #[test] + fn decode_rejects_invalid() { + assert_eq!(decode_base32_sort("short"), None); + assert_eq!(decode_base32_sort("AAAAAAAAAAAAA"), None); + } + + #[test] + fn tid_to_iso8601_roundtrip() { + let tid = generate_tid(); + let iso = tid_to_iso8601(&tid).expect("valid TID"); + assert!(iso.ends_with('Z'), "should be UTC: {iso}"); + // fromISO8601 won't match exactly (clock ID is lost) but the + // timestamp portion should produce a TID that converts back to + // the same ISO string. + let tid2 = tid_from_iso8601(&iso).expect("valid ISO"); + let iso2 = tid_to_iso8601(&tid2).expect("valid TID"); + assert_eq!(iso, iso2); + } + + #[test] + fn tid_from_iso8601_known_value() { + let tid = tid_from_iso8601("2024-01-01T00:00:00Z").expect("valid ISO"); + assert_eq!(tid.len(), 13); + let iso = tid_to_iso8601(&tid).expect("valid TID"); + assert_eq!(iso, "2024-01-01T00:00:00.000000Z"); + } + + #[test] + fn tid_from_iso8601_rejects_garbage() { + assert!(tid_from_iso8601("not a date").is_none()); + } + + #[test] + fn tid_from_iso8601_with_offset() { + let tid = tid_from_iso8601("2024-01-01T05:00:00+05:00").expect("valid ISO with offset"); + let iso = tid_to_iso8601(&tid).expect("valid TID"); + assert_eq!(iso, "2024-01-01T00:00:00.000000Z"); + } + + #[test] + fn tid_from_iso8601_with_fractional_seconds() { + let tid = tid_from_iso8601("2024-06-15T12:30:45.123456Z").expect("valid ISO"); + let iso = tid_to_iso8601(&tid).expect("valid TID"); + assert_eq!(iso, "2024-06-15T12:30:45.123456Z"); + } + + #[test] + fn tid_to_unix_microseconds_known_value() { + let tid = tid_from_iso8601("2024-01-01T00:00:00Z").expect("valid ISO"); + let us = tid_to_unix_microseconds(&tid).expect("valid TID"); + assert_eq!(us, 1_704_067_200_000_000); + } + + #[test] + fn tid_microseconds_roundtrip() { + let tid = generate_tid(); + let us = tid_to_unix_microseconds(&tid).expect("valid TID"); + let tid2 = tid_from_unix_microseconds(us); + let us2 = tid_to_unix_microseconds(&tid2).expect("valid TID"); + assert_eq!(us, us2); + } + + #[test] + fn tid_to_unix_microseconds_rejects_invalid() { + assert!(tid_to_unix_microseconds("garbage").is_none()); + } + + #[test] + fn tid_number_lossless_roundtrip() { + let tid = generate_tid(); + let val = tid_to_number(&tid).expect("valid TID"); + let tid2 = tid_from_number(val); + assert_eq!(tid, tid2); + } + + #[test] + fn tid_to_number_rejects_invalid() { + assert!(tid_to_number("garbage").is_none()); + } + + #[test] + fn tid_to_iso8601_rejects_invalid() { + assert!(tid_to_iso8601("garbage").is_none()); + assert!(tid_to_iso8601("AAAAAAAAAAAAA").is_none()); + } } -- 2.51.2 From ca93fca50f54eb744105244cfd3e02f7a9fdbf94 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:39:53 -0500 Subject: [PATCH 061/250] ci: remove `push` gates Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d981162..3553144 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: # Required because workflow-level `paths` filters can't vary per job. # --------------------------------------------------------------------------- changes: - if: github.event_name == 'push' || github.event_name == 'pull_request' + if: github.event_name == 'pull_request' runs-on: depot-ubuntu-24.04 outputs: server: ${{ steps.filter.outputs.server }} @@ -166,8 +166,7 @@ jobs: # --------------------------------------------------------------------------- release: if: >- - github.event_name == 'push' - && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && needs.changes.outputs.server == 'true' needs: [changes, unit-tests, e2e-tests, frontend, lint] runs-on: depot-ubuntu-24.04 @@ -298,8 +297,7 @@ jobs: release-oauth-client: if: >- - github.event_name == 'push' - && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && needs.changes.outputs.oauth-client == 'true' needs: [changes, test-oauth-client] runs-on: depot-ubuntu-24.04 @@ -337,8 +335,7 @@ jobs: release-oauth-client-browser: if: >- - github.event_name == 'push' - && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && needs.changes.outputs.oauth-client-browser == 'true' needs: [changes, test-oauth-client-browser, release-oauth-client] runs-on: depot-ubuntu-24.04 @@ -393,8 +390,7 @@ jobs: release-oauth-client-node: if: >- - github.event_name == 'push' - && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && needs.changes.outputs.oauth-client-node == 'true' needs: [changes, test-oauth-client-node, release-oauth-client] runs-on: depot-ubuntu-24.04 @@ -449,8 +445,7 @@ jobs: release-lex-agent: if: >- - github.event_name == 'push' - && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && needs.changes.outputs.lex-agent == 'true' needs: [changes, test-lex-agent, release-oauth-client] runs-on: depot-ubuntu-24.04 @@ -635,8 +630,7 @@ jobs: docker-postgres: needs: changes if: >- - github.event_name == 'push' - && needs.changes.outputs.postgres == 'true' + needs.changes.outputs.postgres == 'true' runs-on: depot-ubuntu-24.04 permissions: contents: read @@ -671,7 +665,6 @@ jobs: # Mirror to Tangled # --------------------------------------------------------------------------- mirror: - if: github.event_name == 'push' || github.event_name == 'delete' runs-on: depot-ubuntu-24.04 steps: - uses: actions/checkout@v6 -- 2.51.2 From 2598b58138612a11ac06942ad347f4889eb308d4 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:42:57 -0500 Subject: [PATCH 062/250] fix: restrict Bearer space credentials to space XRPC routes Signed-off-by: Trezy Signed-off-by: Trezy --- src/auth/middleware.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/auth/middleware.rs b/src/auth/middleware.rs index 4d9814f..f4cc387 100644 --- a/src/auth/middleware.rs +++ b/src/auth/middleware.rs @@ -252,13 +252,18 @@ impl FromRequestParts for XrpcClaims { } Some(h) if h.starts_with("Bearer ") => { let token = &h[7..]; + let path = parts.uri.path(); + let is_space_route = path.contains("/dev.happyview.space."); match crate::spaces::credential::peek_jwt_typ(token) { - Some(typ) if typ == "space_credential" => { + Some(typ) if typ == "space_credential" && is_space_route => { Ok(XrpcClaims { identity: None, space_credential: Some(token.to_string()), }) } + Some(typ) if typ == "space_credential" => Err(AppError::Auth( + "space credentials are only accepted on space routes".into(), + )), _ => Err(AppError::Auth( "XRPC routes do not accept Bearer auth. Use DPoP auth, a space credential, or omit the Authorization header for anonymous access.".into(), )), -- 2.51.2 From 8c578deb6d9c5222320aa83a54ffa25fc76ba0b2 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:44:25 -0500 Subject: [PATCH 063/250] fix: require client key for rate limiting on all XRPC routes Signed-off-by: Trezy Signed-off-by: Trezy --- src/xrpc/mod.rs | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/src/xrpc/mod.rs b/src/xrpc/mod.rs index ddf24b9..0cdbeb9 100644 --- a/src/xrpc/mod.rs +++ b/src/xrpc/mod.rs @@ -260,19 +260,7 @@ pub async fn xrpc_get( let mut params = parse_query_params(&raw_query); let claims = xrpc_claims.identity; - // Space credential Bearer requests bypass the client-key requirement; - // rate-limit by the credential's sub DID instead. - let rate_key = if claims.is_none() { - if let Some(ref token) = xrpc_claims.space_credential { - crate::spaces::credential::peek_credential_sub(token).ok_or_else(|| { - AppError::Auth("invalid space credential: unable to extract sub".into()) - })? - } else { - resolve_client_key(&state, None, &parts, ¶ms)? - } - } else { - resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)? - }; + let rate_key = resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)?; let lexicon = state.lexicons.get(&method).await; @@ -364,19 +352,7 @@ pub async fn xrpc_post( // Space credential Bearer requests bypass the client-key requirement; // rate-limit by the credential's sub DID instead. - let rate_key = if claims.is_none() { - if let Some(ref token) = xrpc_claims.space_credential { - crate::spaces::credential::peek_credential_sub(token).ok_or_else(|| { - AppError::Auth("invalid space credential: unable to extract sub".into()) - })? - } else { - return Err(AppError::Auth( - "XRPC procedures require DPoP authentication".into(), - )); - } - } else { - resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)? - }; + let rate_key = resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)?; let lexicon = state.lexicons.get(&method).await; -- 2.51.2 From aadf092a9ede51ef2660e0e8b58fffb08dd4a5b1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:45:24 -0500 Subject: [PATCH 064/250] fix: reject JWT at exact expiry second Signed-off-by: Trezy Signed-off-by: Trezy --- src/spaces/credential.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/spaces/credential.rs b/src/spaces/credential.rs index 33c429e..5237291 100644 --- a/src/spaces/credential.rs +++ b/src/spaces/credential.rs @@ -57,7 +57,7 @@ pub fn verify_grant(token: &str, secret: &[u8; 32]) -> Result data.claims.exp { + if now >= data.claims.exp { return Err(AppError::Auth("member grant has expired".into())); } @@ -173,7 +173,7 @@ pub fn verify_credential( .unwrap() .as_secs(); - if now > claims.exp { + if now >= claims.exp { return Err(AppError::Auth("credential has expired".into())); } -- 2.51.2 From 79ea8ef059bb096fe4da4f78972176cdba122961 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 15:51:50 -0500 Subject: [PATCH 065/250] fix: rate-limit unauthenticated procedure requests before rejecting Signed-off-by: Trezy Signed-off-by: Trezy --- src/xrpc/mod.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/xrpc/mod.rs b/src/xrpc/mod.rs index 0cdbeb9..200a21c 100644 --- a/src/xrpc/mod.rs +++ b/src/xrpc/mod.rs @@ -350,10 +350,14 @@ pub async fn xrpc_post( let mut params = parse_query_params(&raw_query); let claims = xrpc_claims.identity; - // Space credential Bearer requests bypass the client-key requirement; - // rate-limit by the credential's sub DID instead. let rate_key = resolve_client_key(&state, claims.as_ref(), &parts, ¶ms)?; + if claims.is_none() && xrpc_claims.space_credential.is_none() { + return Err(AppError::Auth( + "XRPC procedures require DPoP authentication".into(), + )); + } + let lexicon = state.lexicons.get(&method).await; // Determine token cost: per-NSID override → type default → 1 -- 2.51.2 From 659f9a2e7dd9ce0add6f9cb1d76ba4877bc019de Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 19:09:03 -0500 Subject: [PATCH 066/250] test: fix and re-enable derelict tests Signed-off-by: Trezy Signed-off-by: Trezy --- tests/admin_plugins_official.rs | 6 +- tests/common/app.rs | 36 ++- tests/common/mod.rs | 11 + tests/dev_happyview.rs | 8 + tests/dpop_auth.rs | 10 + tests/e2e_admin.rs | 48 +-- tests/e2e_api_clients.rs | 523 ++------------------------------ tests/e2e_base_path.rs | 10 +- tests/e2e_delegation.rs | 30 ++ tests/e2e_domains.rs | 16 +- tests/e2e_feature_flags.rs | 14 +- tests/e2e_health.rs | 2 +- tests/e2e_labelers.rs | 20 +- tests/e2e_network_lexicons.rs | 10 +- tests/e2e_proxy_config.rs | 12 +- tests/e2e_settings.rs | 50 +-- tests/e2e_xrpc.rs | 100 ++---- tests/lua_atproto_api.rs | 20 +- tests/lua_db_api.rs | 20 +- tests/plugin_logging.rs | 3 + 20 files changed, 223 insertions(+), 726 deletions(-) diff --git a/tests/admin_plugins_official.rs b/tests/admin_plugins_official.rs index 55cee98..c4f6d8b 100644 --- a/tests/admin_plugins_official.rs +++ b/tests/admin_plugins_official.rs @@ -41,8 +41,8 @@ fn admin_post( #[tokio::test] #[serial] -#[ignore] async fn official_plugins_endpoint_returns_cached_list() { + common::require_db!(); let app = TestApp::new().await; let gh = MockServer::start().await; @@ -111,8 +111,8 @@ async fn official_plugins_endpoint_returns_cached_list() { #[tokio::test] #[serial] -#[ignore] async fn plugins_list_populates_update_available_when_behind() { + common::require_db!(); let app = TestApp::new().await; let gh = MockServer::start().await; @@ -187,8 +187,8 @@ async fn plugins_list_populates_update_available_when_behind() { #[tokio::test] #[serial] -#[ignore] async fn check_update_endpoint_refreshes_cache_on_demand() { + common::require_db!(); // Start the mock server BEFORE building the app so we can wire its URL // into the registry config. let gh = MockServer::start().await; diff --git a/tests/common/app.rs b/tests/common/app.rs index d0b630a..f39914b 100644 --- a/tests/common/app.rs +++ b/tests/common/app.rs @@ -118,12 +118,23 @@ impl TestApp { }) .expect("Failed to create test OAuth client"); + let domain_cache = happyview::domain::DomainCache::new(); + domain_cache + .insert(happyview::domain::Domain { + id: uuid::Uuid::new_v4().to_string(), + url: "http://127.0.0.1:0".to_string(), + is_primary: true, + created_at: now_rfc3339(), + updated_at: now_rfc3339(), + }) + .await; + let state = AppState { config, http: reqwest::Client::new(), db: pool.clone(), db_backend: backend, - domain_cache: happyview::domain::DomainCache::new(), + domain_cache, lexicons, collections_tx, labeler_subscriptions_tx, @@ -158,7 +169,15 @@ impl TestApp { ))), }; - let router = server::router(state.clone()); + let router = server::router(state.clone()).layer(axum::middleware::from_fn( + |mut req: axum::extract::Request, next: axum::middleware::Next| async move { + if !req.headers().contains_key("host") { + req.headers_mut() + .insert("host", axum::http::HeaderValue::from_static("127.0.0.1")); + } + next.run(req).await + }, + )); Self { router, @@ -178,20 +197,7 @@ impl TestApp { pub async fn new_with_encryption() -> Self { let mut app = Self::new().await; - // Set a test encryption key (32 bytes) app.state.config.token_encryption_key = Some([0x42u8; 32]); - // Seed a domain so the domain middleware doesn't reject requests with 421 - app.state - .domain_cache - .insert(happyview::domain::Domain { - id: uuid::Uuid::new_v4().to_string(), - url: "http://127.0.0.1:0".to_string(), - is_primary: true, - created_at: now_rfc3339(), - updated_at: now_rfc3339(), - }) - .await; - // Rebuild the router with the updated state app.router = server::router(app.state.clone()); app } diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 2e4abad..6c27470 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -6,3 +6,14 @@ pub mod auth; pub mod db; #[allow(dead_code, unused_imports)] pub mod fixtures; + +macro_rules! require_db { + () => { + if std::env::var("TEST_DATABASE_URL").is_err() { + eprintln!("skipped (TEST_DATABASE_URL not set)"); + return; + } + }; +} + +pub(crate) use require_db; diff --git a/tests/dev_happyview.rs b/tests/dev_happyview.rs index b055551..8b2a852 100644 --- a/tests/dev_happyview.rs +++ b/tests/dev_happyview.rs @@ -88,6 +88,7 @@ async fn setup_dpop_session(app: &common::app::TestApp, user_did: &str) -> (Stri #[tokio::test] #[serial] async fn list_api_clients_unauthenticated_returns_non_200() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let req = Request::builder() @@ -111,6 +112,7 @@ async fn list_api_clients_unauthenticated_returns_non_200() { #[tokio::test] #[serial] async fn list_api_clients_authenticated_returns_200_with_clients_array() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testowner"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; @@ -147,6 +149,7 @@ async fn list_api_clients_authenticated_returns_200_with_clients_array() { #[tokio::test] #[serial] async fn get_api_client_not_found() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testowner404"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; @@ -178,6 +181,7 @@ async fn get_api_client_not_found() { #[tokio::test] #[serial] async fn create_api_client_via_xrpc() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testcreator"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; @@ -230,6 +234,7 @@ async fn create_api_client_via_xrpc() { #[tokio::test] #[serial] async fn create_api_client_public_no_secret() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testcreatorpublic"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; @@ -286,6 +291,7 @@ async fn create_api_client_public_no_secret() { #[tokio::test] #[serial] async fn delete_api_client_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testownerdelete"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; @@ -367,6 +373,7 @@ async fn delete_api_client_success() { #[tokio::test] #[serial] async fn delete_api_client_not_found() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testownerdel404"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; @@ -397,6 +404,7 @@ async fn delete_api_client_not_found() { #[tokio::test] #[serial] async fn get_api_client_returns_client() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:testownerget"; let (client_key, dpop_key, access_token) = setup_dpop_session(&app, user_did).await; diff --git a/tests/dpop_auth.rs b/tests/dpop_auth.rs index a9d0615..3eda9a6 100644 --- a/tests/dpop_auth.rs +++ b/tests/dpop_auth.rs @@ -47,6 +47,7 @@ async fn response_json(resp: axum::http::Response) -> serde_json::Value { #[tokio::test] #[serial] async fn test_provision_dpop_key_confidential_client() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; @@ -72,6 +73,7 @@ async fn test_provision_dpop_key_confidential_client() { #[tokio::test] #[serial] async fn test_provision_dpop_key_public_client_requires_pkce() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, _secret, _id) = app .create_api_client("public", Some(vec!["http://localhost:3000".to_string()])) @@ -94,6 +96,7 @@ async fn test_provision_dpop_key_public_client_requires_pkce() { #[tokio::test] #[serial] async fn test_provision_dpop_key_public_client_with_pkce() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, _secret, _id) = app .create_api_client("public", Some(vec!["http://localhost:3000".to_string()])) @@ -127,6 +130,7 @@ async fn test_provision_dpop_key_public_client_with_pkce() { #[tokio::test] #[serial] async fn test_register_session_validates_scopes() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; @@ -165,6 +169,7 @@ async fn test_register_session_validates_scopes() { #[tokio::test] #[serial] async fn test_register_session_requires_atproto_scope() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; @@ -201,6 +206,7 @@ async fn test_register_session_requires_atproto_scope() { #[tokio::test] #[serial] async fn test_full_flow_provision_register_delete() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; @@ -265,6 +271,7 @@ async fn test_full_flow_provision_register_delete() { #[tokio::test] #[serial] async fn test_xrpc_rejects_bearer_auth() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; // Bearer auth should be explicitly rejected on XRPC routes @@ -290,6 +297,7 @@ async fn test_xrpc_rejects_bearer_auth() { #[tokio::test] #[serial] async fn test_xrpc_allows_anonymous_queries() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; // Anonymous access (no auth header) should pass through to lexicon lookup. @@ -314,6 +322,7 @@ async fn test_xrpc_allows_anonymous_queries() { #[tokio::test] #[serial] async fn test_xrpc_procedure_requires_dpop_auth() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; // POST to an XRPC procedure without DPoP auth should be rejected @@ -339,6 +348,7 @@ async fn test_xrpc_procedure_requires_dpop_auth() { #[tokio::test] #[serial] async fn test_xrpc_dpop_auth_accepted() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; diff --git a/tests/e2e_admin.rs b/tests/e2e_admin.rs index 3cbdb0c..0911bc8 100644 --- a/tests/e2e_admin.rs +++ b/tests/e2e_admin.rs @@ -63,8 +63,8 @@ fn admin_delete( #[tokio::test] #[serial] -#[ignore] async fn admin_no_auth_returns_401() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -84,8 +84,8 @@ async fn admin_no_auth_returns_401() { #[tokio::test] #[serial] -#[ignore] async fn admin_wrong_token_returns_401() { + common::require_db!(); let app = TestApp::new().await; // No valid session cookie — the request will be rejected. @@ -107,8 +107,8 @@ async fn admin_wrong_token_returns_401() { #[tokio::test] #[serial] -#[ignore] async fn admin_valid_token_returns_200() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -123,8 +123,8 @@ async fn admin_valid_token_returns_200() { #[tokio::test] #[serial] -#[ignore] async fn admin_non_admin_did_returns_403() { + common::require_db!(); let app = TestApp::new().await; // Use a DID that is NOT in the admins table. @@ -143,8 +143,8 @@ async fn admin_non_admin_did_returns_403() { #[tokio::test] #[serial] -#[ignore] async fn admin_auto_bootstrap_first_user() { + common::require_db!(); let app = TestApp::new().await; let backend = app.state.db_backend; @@ -186,8 +186,8 @@ async fn admin_auto_bootstrap_first_user() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_create_returns_201() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "lexicon_json": fixtures::game_record_lexicon(), @@ -209,8 +209,8 @@ async fn lexicon_create_returns_201() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_upsert_returns_200_with_incremented_revision() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "lexicon_json": fixtures::game_record_lexicon(), @@ -241,8 +241,8 @@ async fn lexicon_upsert_returns_200_with_incremented_revision() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_invalid_version_returns_400() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "lexicon_json": { "lexicon": 99, "id": "test.bad" }, @@ -260,8 +260,8 @@ async fn lexicon_invalid_version_returns_400() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_missing_id_returns_400() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "lexicon_json": { "lexicon": 1 }, @@ -279,8 +279,8 @@ async fn lexicon_missing_id_returns_400() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_list_all() { + common::require_db!(); let app = TestApp::new().await; // Seed a lexicon @@ -311,8 +311,8 @@ async fn lexicon_list_all() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_get_by_id() { + common::require_db!(); let app = TestApp::new().await; app.router @@ -343,8 +343,8 @@ async fn lexicon_get_by_id() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_get_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -362,8 +362,8 @@ async fn lexicon_get_not_found() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_delete() { + common::require_db!(); let app = TestApp::new().await; app.router @@ -392,8 +392,8 @@ async fn lexicon_delete() { #[tokio::test] #[serial] -#[ignore] async fn lexicon_delete_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -415,8 +415,8 @@ async fn lexicon_delete_not_found() { #[tokio::test] #[serial] -#[ignore] async fn stats_empty_db() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -434,8 +434,8 @@ async fn stats_empty_db() { #[tokio::test] #[serial] -#[ignore] async fn stats_with_seeded_records() { + common::require_db!(); let app = TestApp::new().await; let backend = app.state.db_backend; @@ -496,8 +496,8 @@ async fn stats_with_seeded_records() { #[tokio::test] #[serial] -#[ignore] async fn backfill_create_job() { + common::require_db!(); let app = TestApp::new().await; // Register a record-type lexicon first (required by backfill validation). @@ -527,14 +527,14 @@ async fn backfill_create_job() { assert_eq!(resp.status(), StatusCode::CREATED); let json = json_body(resp).await; - assert_eq!(json["status"], "completed"); + assert_eq!(json["status"], "running"); assert!(json.get("id").is_some()); } #[tokio::test] #[serial] -#[ignore] async fn backfill_list_jobs() { + common::require_db!(); let app = TestApp::new().await; // Create a job first @@ -567,8 +567,8 @@ async fn backfill_list_jobs() { #[tokio::test] #[serial] -#[ignore] async fn admin_create_returns_did() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "did": "did:plc:newadmin" }); @@ -587,8 +587,8 @@ async fn admin_create_returns_did() { #[tokio::test] #[serial] -#[ignore] async fn admin_created_did_authenticates() { + common::require_db!(); let app = TestApp::new().await; let new_did = "did:plc:newadmin2"; @@ -618,8 +618,8 @@ async fn admin_created_did_authenticates() { #[tokio::test] #[serial] -#[ignore] async fn admin_list_returns_dids() { + common::require_db!(); let app = TestApp::new().await; let cookie = app.admin_cookie(); @@ -643,8 +643,8 @@ async fn admin_list_returns_dids() { #[tokio::test] #[serial] -#[ignore] async fn admin_delete_returns_204() { + common::require_db!(); let app = TestApp::new().await; // Create an admin to delete @@ -675,8 +675,8 @@ async fn admin_delete_returns_204() { #[tokio::test] #[serial] -#[ignore] async fn admin_delete_not_found() { + common::require_db!(); let app = TestApp::new().await; let cookie = app.admin_cookie(); diff --git a/tests/e2e_api_clients.rs b/tests/e2e_api_clients.rs index 5e3e5b8..6d65f66 100644 --- a/tests/e2e_api_clients.rs +++ b/tests/e2e_api_clients.rs @@ -3,7 +3,6 @@ mod common; use axum::body::Body; use axum::http::{Request, StatusCode}; use happyview::db::{adapt_sql, now_rfc3339}; -use happyview::oauth::pds_write::generate_dpop_proof; use http_body_util::BodyExt; use serde_json::{Value, json}; use serial_test::serial; @@ -88,8 +87,8 @@ fn sample_api_client_body() -> Value { #[tokio::test] #[serial] -#[ignore] async fn create_api_client_returns_201() { + common::require_db!(); let app = TestApp::new().await; let body = sample_api_client_body(); @@ -115,8 +114,8 @@ async fn create_api_client_returns_201() { #[tokio::test] #[serial] -#[ignore] async fn create_api_client_duplicate_client_id_url_fails() { + common::require_db!(); let app = TestApp::new().await; let body = sample_api_client_body(); @@ -141,8 +140,8 @@ async fn create_api_client_duplicate_client_id_url_fails() { #[tokio::test] #[serial] -#[ignore] async fn create_api_client_registers_in_oauth_registry() { + common::require_db!(); let app = TestApp::new().await; let body = sample_api_client_body(); @@ -168,8 +167,8 @@ async fn create_api_client_registers_in_oauth_registry() { #[tokio::test] #[serial] -#[ignore] async fn list_api_clients_empty() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -186,8 +185,8 @@ async fn list_api_clients_empty() { #[tokio::test] #[serial] -#[ignore] async fn list_api_clients_returns_created_clients() { + common::require_db!(); let app = TestApp::new().await; // Create two clients @@ -246,8 +245,8 @@ async fn list_api_clients_returns_created_clients() { #[tokio::test] #[serial] -#[ignore] async fn get_api_client_returns_details() { + common::require_db!(); let app = TestApp::new().await; let body = sample_api_client_body(); @@ -286,8 +285,8 @@ async fn get_api_client_returns_details() { #[tokio::test] #[serial] -#[ignore] async fn get_api_client_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -309,8 +308,8 @@ async fn get_api_client_not_found() { #[tokio::test] #[serial] -#[ignore] async fn update_api_client_changes_fields() { + common::require_db!(); let app = TestApp::new().await; // Create @@ -363,8 +362,8 @@ async fn update_api_client_changes_fields() { #[tokio::test] #[serial] -#[ignore] async fn update_api_client_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -383,8 +382,8 @@ async fn update_api_client_not_found() { #[tokio::test] #[serial] -#[ignore] async fn update_api_client_deactivate_removes_from_registry() { + common::require_db!(); let app = TestApp::new().await; let create_resp = app @@ -429,8 +428,8 @@ async fn update_api_client_deactivate_removes_from_registry() { #[tokio::test] #[serial] -#[ignore] async fn delete_api_client_returns_204() { + common::require_db!(); let app = TestApp::new().await; let create_resp = app @@ -471,8 +470,8 @@ async fn delete_api_client_returns_204() { #[tokio::test] #[serial] -#[ignore] async fn delete_api_client_removes_from_oauth_registry() { + common::require_db!(); let app = TestApp::new().await; let create_resp = app @@ -508,8 +507,8 @@ async fn delete_api_client_removes_from_oauth_registry() { #[tokio::test] #[serial] -#[ignore] async fn delete_api_client_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -531,8 +530,8 @@ async fn delete_api_client_not_found() { #[tokio::test] #[serial] -#[ignore] async fn api_clients_no_auth_returns_401() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -552,8 +551,8 @@ async fn api_clients_no_auth_returns_401() { #[tokio::test] #[serial] -#[ignore] async fn api_clients_non_admin_returns_403() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -575,8 +574,8 @@ async fn api_clients_non_admin_returns_403() { #[tokio::test] #[serial] -#[ignore] async fn oauth_registry_get_or_default_returns_default_for_unknown() { + common::require_db!(); let app = TestApp::new().await; let client = app @@ -591,8 +590,8 @@ async fn oauth_registry_get_or_default_returns_default_for_unknown() { #[tokio::test] #[serial] -#[ignore] async fn oauth_registry_get_or_default_returns_default_for_none() { + common::require_db!(); let app = TestApp::new().await; let client = app.state.oauth.get_or_default(None); @@ -607,8 +606,8 @@ async fn oauth_registry_get_or_default_returns_default_for_none() { #[tokio::test] #[serial] -#[ignore] async fn create_api_client_with_rate_limit_overrides() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "name": "Rate Limited App", @@ -645,492 +644,22 @@ async fn create_api_client_with_rate_limit_overrides() { assert_eq!(json["rate_limit_refill_rate"], 1.5); } -// --------------------------------------------------------------------------- -// Self-service API client creation (POST /oauth/api-clients) -// --------------------------------------------------------------------------- - -/// Helper to make a POST request with JSON body and extra headers. -fn post_json_with_headers( - uri: &str, - body: &serde_json::Value, - headers: Vec<(&str, &str)>, -) -> Request { - let mut builder = Request::builder() - .method("POST") - .uri(uri) - .header("content-type", "application/json") - .header("host", "127.0.0.1:0"); - for (name, value) in headers { - builder = builder.header(name, value); - } - builder - .body(Body::from(serde_json::to_vec(body).unwrap())) - .unwrap() -} - -/// Parse a response body as JSON, returning `null` on empty/invalid bodies. -async fn response_json(resp: axum::response::Response) -> Value { - let body = resp.into_body().collect().await.unwrap().to_bytes(); - serde_json::from_slice(&body).unwrap_or(json!(null)) -} - -/// Runs the full DPoP provisioning flow and returns the values needed to call -/// the self-service endpoint: -/// `(client_key, dpop_key_json, access_token)` -/// -/// `user_did` is the DID that will be associated with the DPoP session. -async fn setup_dpop_session(app: &TestApp, user_did: &str) -> (String, Value, String) { - let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; - - // 1. Provision DPoP key - let key_req = post_json_with_headers( - "/oauth/dpop-keys", - &json!({}), - vec![ - ("x-client-key", &client_key), - ("x-client-secret", &client_secret), - ], - ); - let key_resp = app.router.clone().oneshot(key_req).await.unwrap(); - assert_eq!( - key_resp.status(), - StatusCode::CREATED, - "dpop key provisioning failed" - ); - let key_body = response_json(key_resp).await; - let provision_id = key_body["provision_id"].as_str().unwrap().to_string(); - let dpop_key = key_body["dpop_key"].clone(); - - // 2. Register session - let access_token = format!("test-access-{}", uuid::Uuid::new_v4()); - let session_req = post_json_with_headers( - "/oauth/sessions", - &json!({ - "provision_id": provision_id, - "did": user_did, - "access_token": &access_token, - "scopes": "atproto", - "pds_url": "https://pds.example.com", - }), - vec![ - ("x-client-key", &client_key), - ("x-client-secret", &client_secret), - ], - ); - let session_resp = app.router.clone().oneshot(session_req).await.unwrap(); - assert_eq!( - session_resp.status(), - StatusCode::CREATED, - "session registration failed" - ); - - (client_key, dpop_key, access_token) -} - -/// Build a self-service POST /oauth/api-clients request with full DPoP auth. -fn self_service_request( - client_key: &str, - access_token: &str, - dpop_proof: &str, - body: &Value, -) -> Request { - Request::builder() - .method("POST") - .uri("/oauth/api-clients") - .header("host", "127.0.0.1:0") - .header("content-type", "application/json") - .header("x-client-key", client_key) - .header("authorization", format!("DPoP {}", access_token)) - .header("dpop", dpop_proof) - .body(Body::from(serde_json::to_vec(body).unwrap())) - .unwrap() -} - -// --------------------------------------------------------------------------- -// Happy path -// --------------------------------------------------------------------------- - -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_create_confidential_child_client() { - let app = TestApp::new_with_encryption().await; - let (client_key, dpop_key, access_token) = setup_dpop_session(&app, "did:plc:testadmin").await; - - let request_url = "http://127.0.0.1:0/oauth/api-clients"; - let proof = generate_dpop_proof(&dpop_key, "POST", request_url, &access_token, None) - .expect("failed to generate DPoP proof"); - - let body = json!({ - "name": "My Confidential Child", - "client_id_url": "https://child-confidential.example.com/oauth-client-metadata.json", - "client_uri": "https://child-confidential.example.com", - "redirect_uris": ["https://child-confidential.example.com/callback"], - "scopes": "atproto", - "client_type": "confidential" - }); - - let req = self_service_request(&client_key, &access_token, &proof, &body); - let resp = app.router.clone().oneshot(req).await.unwrap(); - - assert_eq!(resp.status(), StatusCode::CREATED); - let json = response_json(resp).await; - - // Verify all expected fields - assert!(json["id"].as_str().is_some(), "response should have id"); - let key = json["client_key"].as_str().unwrap(); - assert!(key.starts_with("hvc_"), "client_key should start with hvc_"); - let secret = json["client_secret"].as_str().unwrap(); - assert!( - secret.starts_with("hvs_"), - "client_secret should start with hvs_" - ); - assert_eq!(json["name"], "My Confidential Child"); - assert_eq!( - json["client_id_url"], - "https://child-confidential.example.com/oauth-client-metadata.json" - ); - assert_eq!(json["client_type"], "confidential"); -} - -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_create_public_child_client() { - let app = TestApp::new_with_encryption().await; - let (client_key, dpop_key, access_token) = setup_dpop_session(&app, "did:plc:testadmin").await; - - let request_url = "http://127.0.0.1:0/oauth/api-clients"; - let proof = generate_dpop_proof(&dpop_key, "POST", request_url, &access_token, None) - .expect("failed to generate DPoP proof"); - - let body = json!({ - "name": "My Public Child", - "client_id_url": "https://child-public.example.com/oauth-client-metadata.json", - "client_uri": "https://child-public.example.com", - "redirect_uris": ["https://child-public.example.com/callback"], - "scopes": "atproto", - "client_type": "public" - }); - - let req = self_service_request(&client_key, &access_token, &proof, &body); - let resp = app.router.clone().oneshot(req).await.unwrap(); - - assert_eq!(resp.status(), StatusCode::CREATED); - let json = response_json(resp).await; - - assert!(json["id"].as_str().is_some(), "response should have id"); - let key = json["client_key"].as_str().unwrap(); - assert!(key.starts_with("hvc_"), "client_key should start with hvc_"); - assert_eq!(json["name"], "My Public Child"); - assert_eq!( - json["client_id_url"], - "https://child-public.example.com/oauth-client-metadata.json" - ); - assert_eq!(json["client_type"], "public"); - // Public clients should NOT have a client_secret - assert!( - json["client_secret"].is_null(), - "public client should not have a client_secret" - ); -} +// Self-service client creation tests removed — the /oauth/api-clients route +// no longer exists. The XRPC equivalent (dev.happyview.createApiClient) is +// tested in tests/dev_happyview.rs. // --------------------------------------------------------------------------- -// Error cases +// Cascade: deactivate / delete parent cascades to children // --------------------------------------------------------------------------- -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_child_cannot_create_children() { - let app = TestApp::new_with_encryption().await; - - // Create a parent client via the helper (top-level, no parent_client_id). - let (_parent_key, _parent_secret, parent_id) = - app.create_api_client("confidential", None).await; - - // Insert a child client directly in the DB with parent_client_id set. - let child_key = format!("hvc_{}", hex::encode([0xAAu8; 16])); - let child_secret = format!("hvs_{}", hex::encode([0xBBu8; 32])); - let child_secret_hash = hex::encode(sha2::Sha256::digest(child_secret.as_bytes())); - let child_id = uuid::Uuid::new_v4().to_string(); - let now = now_rfc3339(); - - let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, is_active, created_by, created_at, updated_at, parent_client_id, owner_did) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)", - app.state.db_backend, - ); - sqlx::query(&sql) - .bind(&child_id) - .bind(&child_key) - .bind(&child_secret_hash) - .bind("child-client") - .bind("https://child-no-nest.example.com/oauth-client-metadata.json") - .bind("https://child-no-nest.example.com") - .bind("[]") - .bind("atproto") - .bind("confidential") - .bind("did:plc:testadmin") - .bind(&now) - .bind(&now) - .bind(&parent_id) - .bind("did:plc:testadmin") - .execute(&app.state.db) - .await - .expect("failed to insert child client"); - - // The endpoint checks parent_client_id IS NULL at step 6, BEFORE DPoP - // validation. So we just need the DPoP headers to exist — they do not - // need to be cryptographically valid. - let body = json!({ - "name": "Grandchild", - "client_id_url": "https://grandchild.example.com/oauth-client-metadata.json", - "client_uri": "https://grandchild.example.com", - "redirect_uris": ["https://grandchild.example.com/callback"], - "scopes": "atproto", - "client_type": "confidential" - }); - - let req = Request::builder() - .method("POST") - .uri("/oauth/api-clients") - .header("host", "127.0.0.1:0") - .header("content-type", "application/json") - .header("x-client-key", &child_key) - .header("authorization", "DPoP fake-token") - .header("dpop", "fake-proof") - .body(Body::from(serde_json::to_vec(&body).unwrap())) - .unwrap(); - - let resp = app.router.clone().oneshot(req).await.unwrap(); - assert_eq!(resp.status(), StatusCode::FORBIDDEN); -} - -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_duplicate_client_id_url() { - let app = TestApp::new_with_encryption().await; - let (client_key, dpop_key, access_token) = setup_dpop_session(&app, "did:plc:testadmin").await; - - let shared_url = "https://dup-test.example.com/oauth-client-metadata.json"; - - // First creation should succeed. - let request_url = "http://127.0.0.1:0/oauth/api-clients"; - let proof1 = - generate_dpop_proof(&dpop_key, "POST", request_url, &access_token, None).expect("proof 1"); - - let body = json!({ - "name": "First Child", - "client_id_url": shared_url, - "client_uri": "https://dup-test.example.com", - "redirect_uris": ["https://dup-test.example.com/callback"], - "scopes": "atproto", - "client_type": "confidential" - }); - - let req1 = self_service_request(&client_key, &access_token, &proof1, &body); - let resp1 = app.router.clone().oneshot(req1).await.unwrap(); - assert_eq!(resp1.status(), StatusCode::CREATED); - - // Second creation with the same client_id_url should fail with 409. - let proof2 = - generate_dpop_proof(&dpop_key, "POST", request_url, &access_token, None).expect("proof 2"); - - let body2 = json!({ - "name": "Second Child", - "client_id_url": shared_url, - "client_uri": "https://dup-test2.example.com", - "redirect_uris": ["https://dup-test2.example.com/callback"], - "scopes": "atproto", - "client_type": "confidential" - }); - - let req2 = self_service_request(&client_key, &access_token, &proof2, &body2); - let resp2 = app.router.clone().oneshot(req2).await.unwrap(); - assert_eq!(resp2.status(), StatusCode::CONFLICT); -} - -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_missing_client_key() { - let app = TestApp::new_with_encryption().await; - - let body = json!({ - "name": "No Key Client", - "client_id_url": "https://nokey.example.com/oauth-client-metadata.json", - "client_uri": "https://nokey.example.com", - "redirect_uris": ["https://nokey.example.com/callback"], - "scopes": "atproto", - "client_type": "confidential" - }); - - // No x-client-key header at all. - let req = Request::builder() - .method("POST") - .uri("/oauth/api-clients") - .header("host", "127.0.0.1:0") - .header("content-type", "application/json") - .header("authorization", "DPoP fake-token") - .header("dpop", "fake-proof") - .body(Body::from(serde_json::to_vec(&body).unwrap())) - .unwrap(); - - let resp = app.router.clone().oneshot(req).await.unwrap(); - assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); -} - -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_invalid_client_type() { - let app = TestApp::new_with_encryption().await; - - // Step 3 (client_type validation) happens before step 5 (client resolution). - // The request just needs the required headers to exist. - let body = json!({ - "name": "Invalid Type Client", - "client_id_url": "https://badtype.example.com/oauth-client-metadata.json", - "client_uri": "https://badtype.example.com", - "redirect_uris": ["https://badtype.example.com/callback"], - "scopes": "atproto", - "client_type": "invalid" - }); - - let req = Request::builder() - .method("POST") - .uri("/oauth/api-clients") - .header("host", "127.0.0.1:0") - .header("content-type", "application/json") - .header("x-client-key", "hvc_doesnotmatter") - .header("authorization", "DPoP fake-token") - .header("dpop", "fake-proof") - .body(Body::from(serde_json::to_vec(&body).unwrap())) - .unwrap(); - - let resp = app.router.clone().oneshot(req).await.unwrap(); - assert_eq!(resp.status(), StatusCode::BAD_REQUEST); -} - -#[tokio::test] -#[serial] -#[ignore] -async fn test_self_service_parent_owner_not_in_users() { - let app = TestApp::new_with_encryption().await; - - // Create a parent API client whose created_by DID is NOT in the users table. - let orphan_did = "did:plc:orphan"; - let (client_key, client_secret, _id) = { - use happyview::db::{adapt_sql, now_rfc3339}; - use rand::RngCore; - use sha2::{Digest, Sha256}; - - let mut key_bytes = [0u8; 16]; - rand::rng().fill_bytes(&mut key_bytes); - let client_key = format!("hvc_{}", hex::encode(key_bytes)); - - let mut secret_bytes = [0u8; 32]; - rand::rng().fill_bytes(&mut secret_bytes); - let client_secret = format!("hvs_{}", hex::encode(secret_bytes)); - let secret_hash = hex::encode(Sha256::digest(client_secret.as_bytes())); - - let id = uuid::Uuid::new_v4().to_string(); - let now = now_rfc3339(); - - let sql = adapt_sql( - "INSERT INTO api_clients (id, client_key, client_secret_hash, name, client_id_url, client_uri, redirect_uris, scopes, client_type, allowed_origins, is_active, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?)", - app.state.db_backend, - ); - - sqlx::query(&sql) - .bind(&id) - .bind(&client_key) - .bind(&secret_hash) - .bind("orphan-client") - .bind(format!("https://orphan.example.com/oauth/{}", &id[..8])) - .bind("https://orphan.example.com") - .bind("[]") - .bind("atproto") - .bind("confidential") - .bind(None::) - .bind(orphan_did) - .bind(&now) - .bind(&now) - .execute(&app.state.db) - .await - .expect("failed to create orphan API client"); - - app.state.rate_limiter.register_client_identity( - client_key.clone(), - happyview::rate_limit::ClientIdentity { - secret_hash, - client_uri: "https://orphan.example.com".to_string(), - }, - ); - - (client_key, client_secret, id) - }; - - // Provision a DPoP key and session using this orphan parent client. - let key_req = post_json_with_headers( - "/oauth/dpop-keys", - &json!({}), - vec![ - ("x-client-key", &client_key), - ("x-client-secret", &client_secret), - ], - ); - let key_resp = app.router.clone().oneshot(key_req).await.unwrap(); - assert_eq!(key_resp.status(), StatusCode::CREATED); - let key_body = response_json(key_resp).await; - let provision_id = key_body["provision_id"].as_str().unwrap().to_string(); - let dpop_key = key_body["dpop_key"].clone(); - - let access_token = format!("test-access-{}", uuid::Uuid::new_v4()); - let session_req = post_json_with_headers( - "/oauth/sessions", - &json!({ - "provision_id": provision_id, - "did": "did:plc:sessionuser", - "access_token": &access_token, - "scopes": "atproto", - "pds_url": "https://pds.example.com", - }), - vec![ - ("x-client-key", &client_key), - ("x-client-secret", &client_secret), - ], - ); - let session_resp = app.router.clone().oneshot(session_req).await.unwrap(); - assert_eq!(session_resp.status(), StatusCode::CREATED); - - let request_url = "http://127.0.0.1:0/oauth/api-clients"; - let proof = generate_dpop_proof(&dpop_key, "POST", request_url, &access_token, None) - .expect("failed to generate DPoP proof"); - - let body = json!({ - "name": "Orphan Owner Child", - "client_id_url": "https://orphan-child.example.com/oauth-client-metadata.json", - "client_uri": "https://orphan-child.example.com", - "redirect_uris": ["https://orphan-child.example.com/callback"], - "scopes": "atproto", - "client_type": "confidential" - }); - - let req = self_service_request(&client_key, &access_token, &proof, &body); - let resp = app.router.clone().oneshot(req).await.unwrap(); - assert_eq!(resp.status(), StatusCode::FORBIDDEN); -} - // --------------------------------------------------------------------------- // Cascade: deactivate / delete parent cascades to children // --------------------------------------------------------------------------- #[tokio::test] #[serial] -#[ignore] async fn test_deactivate_parent_cascades_to_children() { + common::require_db!(); let app = TestApp::new().await; // Create parent via admin API @@ -1234,8 +763,8 @@ async fn test_deactivate_parent_cascades_to_children() { #[tokio::test] #[serial] -#[ignore] async fn test_delete_parent_cascades_to_children() { + common::require_db!(); let app = TestApp::new().await; // Create parent via admin API @@ -1332,8 +861,8 @@ async fn test_delete_parent_cascades_to_children() { #[tokio::test] #[serial] -#[ignore] async fn test_list_api_clients_filter_by_parent() { + common::require_db!(); let app = TestApp::new().await; // Create two parents via admin API @@ -1482,8 +1011,8 @@ async fn test_list_api_clients_filter_by_parent() { #[tokio::test] #[serial] -#[ignore] async fn test_list_api_clients_includes_parent_and_owner_fields() { + common::require_db!(); let app = TestApp::new().await; // Create a top-level parent via admin API diff --git a/tests/e2e_base_path.rs b/tests/e2e_base_path.rs index 3370805..68712b9 100644 --- a/tests/e2e_base_path.rs +++ b/tests/e2e_base_path.rs @@ -8,8 +8,8 @@ use tower::ServiceExt; #[tokio::test] #[serial] -#[ignore] async fn health_at_root_when_base_path_set() { + common::require_db!(); let app = common::app::TestApp::new_with_base_path("/hv").await; let resp = app @@ -31,8 +31,8 @@ async fn health_at_root_when_base_path_set() { #[tokio::test] #[serial] -#[ignore] async fn health_not_nested_under_base_path() { + common::require_db!(); let app = common::app::TestApp::new_with_base_path("/hv").await; let resp = app @@ -52,8 +52,8 @@ async fn health_not_nested_under_base_path() { #[tokio::test] #[serial] -#[ignore] async fn config_accessible_under_base_path() { + common::require_db!(); let app = common::app::TestApp::new_with_base_path("/hv").await; let resp = app @@ -74,8 +74,8 @@ async fn config_accessible_under_base_path() { #[tokio::test] #[serial] -#[ignore] async fn config_not_at_root_when_base_path_set() { + common::require_db!(); let app = common::app::TestApp::new_with_base_path("/hv").await; let resp = app @@ -96,8 +96,8 @@ async fn config_not_at_root_when_base_path_set() { #[tokio::test] #[serial] -#[ignore] async fn redirect_includes_base_path_prefix() { + common::require_db!(); let app = common::app::TestApp::new_with_base_path("/hv").await; let resp = app diff --git a/tests/e2e_delegation.rs b/tests/e2e_delegation.rs index f1316eb..c101d9b 100644 --- a/tests/e2e_delegation.rs +++ b/tests/e2e_delegation.rs @@ -296,6 +296,7 @@ async fn setup_session_for_client( #[tokio::test] #[serial] async fn link_account_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:owner1"; let target_did = "did:plc:studio1"; @@ -325,6 +326,7 @@ async fn link_account_success() { #[tokio::test] #[serial] async fn link_account_already_linked() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:owner2"; let target_did = "did:plc:studio2"; @@ -348,6 +350,7 @@ async fn link_account_already_linked() { #[tokio::test] #[serial] async fn link_account_self_link_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:selflinker"; @@ -368,6 +371,7 @@ async fn link_account_self_link_rejected() { #[tokio::test] #[serial] async fn link_account_no_session_for_target() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:owner3"; let target_did = "did:plc:nosession"; @@ -394,6 +398,7 @@ async fn link_account_no_session_for_target() { #[tokio::test] #[serial] async fn unlink_account_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:unlink_owner"; let target_did = "did:plc:unlink_studio"; @@ -430,6 +435,7 @@ async fn unlink_account_success() { #[tokio::test] #[serial] async fn unlink_account_non_owner_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:unlink_owner2"; let admin_did = "did:plc:unlink_admin2"; @@ -472,6 +478,7 @@ async fn unlink_account_non_owner_rejected() { #[tokio::test] #[serial] async fn add_delegate_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:add_owner"; let member_did = "did:plc:add_member"; @@ -518,6 +525,7 @@ async fn add_delegate_success() { #[tokio::test] #[serial] async fn add_delegate_owner_role_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:add_owner2"; let target_did = "did:plc:add_studio2"; @@ -540,6 +548,7 @@ async fn add_delegate_owner_role_rejected() { #[tokio::test] #[serial] async fn add_delegate_already_exists() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:add_owner3"; let member_did = "did:plc:add_member3"; @@ -576,6 +585,7 @@ async fn add_delegate_already_exists() { #[tokio::test] #[serial] async fn add_delegate_member_cannot_add() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:add_owner4"; let member_did = "did:plc:add_member4"; @@ -618,6 +628,7 @@ async fn add_delegate_member_cannot_add() { #[tokio::test] #[serial] async fn remove_delegate_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:rm_owner"; let member_did = "did:plc:rm_member"; @@ -669,6 +680,7 @@ async fn remove_delegate_success() { #[tokio::test] #[serial] async fn remove_delegate_cannot_remove_owner() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:rm_owner2"; let target_did = "did:plc:rm_studio2"; @@ -691,6 +703,7 @@ async fn remove_delegate_cannot_remove_owner() { #[tokio::test] #[serial] async fn remove_delegate_admin_cannot_remove_admin() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:rm_owner3"; let admin1_did = "did:plc:rm_admin3a"; @@ -742,6 +755,7 @@ async fn remove_delegate_admin_cannot_remove_admin() { #[tokio::test] #[serial] async fn list_accounts_returns_linked_accounts() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:list_owner"; let studio1 = "did:plc:list_studio1"; @@ -781,6 +795,7 @@ async fn list_accounts_returns_linked_accounts() { #[tokio::test] #[serial] async fn list_accounts_empty() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let user_did = "did:plc:no_accounts"; @@ -807,6 +822,7 @@ async fn list_accounts_empty() { #[tokio::test] #[serial] async fn get_account_not_a_delegate() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:ga_owner"; let target_did = "did:plc:ga_studio"; @@ -839,6 +855,7 @@ async fn get_account_not_a_delegate() { #[tokio::test] #[serial] async fn list_delegates_member_cannot_list() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:ld_owner"; let member_did = "did:plc:ld_member"; @@ -969,6 +986,7 @@ async fn update_session_pds_url(app: &common::app::TestApp, user_did: &str, pds_ #[tokio::test] #[serial] async fn delegated_write_non_delegate_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; seed_procedure_lexicon(&app).await; @@ -995,6 +1013,7 @@ async fn delegated_write_non_delegate_rejected() { #[tokio::test] #[serial] async fn delegated_write_member_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; seed_procedure_lexicon(&app).await; @@ -1039,6 +1058,7 @@ async fn delegated_write_member_rejected() { #[tokio::test] #[serial] async fn delegated_write_owner_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; seed_procedure_lexicon(&app).await; @@ -1086,6 +1106,7 @@ async fn delegated_write_owner_success() { #[tokio::test] #[serial] async fn delegated_write_admin_success() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; seed_procedure_lexicon(&app).await; @@ -1148,6 +1169,7 @@ async fn delegated_write_admin_success() { #[tokio::test] #[serial] async fn admin_can_add_delegate() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:acd_owner"; @@ -1211,6 +1233,7 @@ async fn admin_can_add_delegate() { #[tokio::test] #[serial] async fn admin_can_remove_member() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:arm_owner"; @@ -1276,6 +1299,7 @@ async fn admin_can_remove_member() { #[tokio::test] #[serial] async fn admin_can_list_delegates() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:ald_owner"; @@ -1319,6 +1343,7 @@ async fn admin_can_list_delegates() { #[tokio::test] #[serial] async fn member_can_view_account() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:mva_owner"; @@ -1362,6 +1387,7 @@ async fn member_can_view_account() { #[tokio::test] #[serial] async fn owner_can_remove_admin() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:ora_owner"; @@ -1419,6 +1445,7 @@ async fn owner_can_remove_admin() { #[tokio::test] #[serial] async fn cross_client_get_account_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:xc_ga_owner"; let target_did = "did:plc:xc_ga_studio"; @@ -1444,6 +1471,7 @@ async fn cross_client_get_account_rejected() { #[tokio::test] #[serial] async fn cross_client_add_delegate_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:xc_ad_owner"; let target_did = "did:plc:xc_ad_studio"; @@ -1467,6 +1495,7 @@ async fn cross_client_add_delegate_rejected() { #[tokio::test] #[serial] async fn cross_client_delegated_write_rejected() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; seed_procedure_lexicon(&app).await; @@ -1505,6 +1534,7 @@ async fn cross_client_delegated_write_rejected() { #[tokio::test] #[serial] async fn cross_client_list_accounts_isolated() { + common::require_db!(); let app = common::app::TestApp::new_with_encryption().await; let owner_did = "did:plc:xc_la_owner"; let studio1 = "did:plc:xc_la_studio1"; diff --git a/tests/e2e_domains.rs b/tests/e2e_domains.rs index 6ec08e3..141c034 100644 --- a/tests/e2e_domains.rs +++ b/tests/e2e_domains.rs @@ -96,8 +96,8 @@ async fn seed_domain(app: &TestApp, id: &str, url: &str, is_primary: bool) { #[tokio::test] #[serial] -#[ignore] async fn domains_list_returns_seeded_domain() { + common::require_db!(); let app = TestApp::new().await; seed_domain(&app, "primary-id", "http://127.0.0.1:0", true).await; @@ -119,8 +119,8 @@ async fn domains_list_returns_seeded_domain() { #[tokio::test] #[serial] -#[ignore] async fn domains_create_and_delete() { + common::require_db!(); let app = TestApp::new().await; seed_domain(&app, "primary-id", "http://127.0.0.1:0", true).await; @@ -175,8 +175,8 @@ async fn domains_create_and_delete() { #[tokio::test] #[serial] -#[ignore] async fn domains_duplicate_url_returns_400() { + common::require_db!(); let app = TestApp::new().await; seed_domain(&app, "primary-id", "http://127.0.0.1:0", true).await; @@ -203,8 +203,8 @@ async fn domains_duplicate_url_returns_400() { #[tokio::test] #[serial] -#[ignore] async fn domains_cannot_delete_primary() { + common::require_db!(); let app = TestApp::new().await; seed_domain(&app, "primary-id", "http://127.0.0.1:0", true).await; @@ -229,8 +229,8 @@ async fn domains_cannot_delete_primary() { #[tokio::test] #[serial] -#[ignore] async fn domains_set_primary() { + common::require_db!(); let app = TestApp::new().await; seed_domain(&app, "id-a", "http://127.0.0.1:0", true).await; @@ -278,8 +278,8 @@ async fn domains_set_primary() { #[tokio::test] #[serial] -#[ignore] async fn unknown_host_returns_421_on_domain_scoped_routes() { + common::require_db!(); let app = TestApp::new().await; // No domains seeded — cache is empty @@ -300,8 +300,8 @@ async fn unknown_host_returns_421_on_domain_scoped_routes() { #[tokio::test] #[serial] -#[ignore] async fn health_check_bypasses_domain_resolution() { + common::require_db!(); let app = TestApp::new().await; // No domains seeded — cache is empty @@ -322,8 +322,8 @@ async fn health_check_bypasses_domain_resolution() { #[tokio::test] #[serial] -#[ignore] async fn domain_scoped_route_works_with_known_host() { + common::require_db!(); let app = TestApp::new().await; // Domain.host() for "http://localhost:3000" is "localhost:3000" diff --git a/tests/e2e_feature_flags.rs b/tests/e2e_feature_flags.rs index 617d7c9..6718920 100644 --- a/tests/e2e_feature_flags.rs +++ b/tests/e2e_feature_flags.rs @@ -53,8 +53,8 @@ fn admin_delete( #[tokio::test] #[serial] -#[ignore] async fn space_routes_blocked_when_flag_disabled() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -76,8 +76,8 @@ async fn space_routes_blocked_when_flag_disabled() { #[tokio::test] #[serial] -#[ignore] async fn space_routes_allowed_after_enabling_flag() { + common::require_db!(); let app = TestApp::new().await; // Enable the feature flag @@ -116,8 +116,8 @@ async fn space_routes_allowed_after_enabling_flag() { #[tokio::test] #[serial] -#[ignore] async fn space_routes_blocked_again_after_disabling_flag() { + common::require_db!(); let app = TestApp::new().await; // Enable @@ -165,8 +165,8 @@ async fn space_routes_blocked_again_after_disabling_flag() { #[tokio::test] #[serial] -#[ignore] async fn admin_feature_flags_lists_flags() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -192,8 +192,8 @@ async fn admin_feature_flags_lists_flags() { #[tokio::test] #[serial] -#[ignore] async fn admin_feature_flags_reflects_enabled_state() { + common::require_db!(); let app = TestApp::new().await; // Enable the flag @@ -228,8 +228,8 @@ async fn admin_feature_flags_reflects_enabled_state() { #[tokio::test] #[serial] -#[ignore] async fn config_endpoint_includes_features() { + common::require_db!(); let app = TestApp::new().await; // Default: spaces disabled @@ -282,8 +282,8 @@ async fn config_endpoint_includes_features() { #[tokio::test] #[serial] -#[ignore] async fn admin_feature_flags_requires_auth() { + common::require_db!(); let app = TestApp::new().await; let resp = app diff --git a/tests/e2e_health.rs b/tests/e2e_health.rs index df70b2b..f97690c 100644 --- a/tests/e2e_health.rs +++ b/tests/e2e_health.rs @@ -8,8 +8,8 @@ use tower::ServiceExt; #[tokio::test] #[serial] -#[ignore] async fn health_returns_200_ok() { + common::require_db!(); let app = common::app::TestApp::new().await; let resp = app diff --git a/tests/e2e_labelers.rs b/tests/e2e_labelers.rs index 9edd60e..0c4b824 100644 --- a/tests/e2e_labelers.rs +++ b/tests/e2e_labelers.rs @@ -76,8 +76,8 @@ fn admin_delete( #[tokio::test] #[serial] -#[ignore] async fn labeler_add_returns_201() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "did": "did:plc:labeler1" }); @@ -94,8 +94,8 @@ async fn labeler_add_returns_201() { #[tokio::test] #[serial] -#[ignore] async fn labeler_add_upsert_reactivates() { + common::require_db!(); let app = TestApp::new().await; let body = json!({ "did": "did:plc:labeler1" }); @@ -151,8 +151,8 @@ async fn labeler_add_upsert_reactivates() { #[tokio::test] #[serial] -#[ignore] async fn labeler_list_empty() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -169,8 +169,8 @@ async fn labeler_list_empty() { #[tokio::test] #[serial] -#[ignore] async fn labeler_list_returns_added() { + common::require_db!(); let app = TestApp::new().await; app.router @@ -217,8 +217,8 @@ async fn labeler_list_returns_added() { #[tokio::test] #[serial] -#[ignore] async fn labeler_update_status() { + common::require_db!(); let app = TestApp::new().await; app.router @@ -261,8 +261,8 @@ async fn labeler_update_status() { #[tokio::test] #[serial] -#[ignore] async fn labeler_update_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -285,8 +285,8 @@ async fn labeler_update_not_found() { #[tokio::test] #[serial] -#[ignore] async fn labeler_delete_returns_204() { + common::require_db!(); let app = TestApp::new().await; app.router @@ -327,8 +327,8 @@ async fn labeler_delete_returns_204() { #[tokio::test] #[serial] -#[ignore] async fn labeler_delete_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -346,8 +346,8 @@ async fn labeler_delete_not_found() { #[tokio::test] #[serial] -#[ignore] async fn labeler_delete_removes_labels() { + common::require_db!(); let app = TestApp::new().await; let backend = app.state.db_backend; @@ -405,8 +405,8 @@ async fn labeler_delete_removes_labels() { #[tokio::test] #[serial] -#[ignore] async fn labeler_no_auth_returns_401() { + common::require_db!(); let app = TestApp::new().await; let resp = app diff --git a/tests/e2e_network_lexicons.rs b/tests/e2e_network_lexicons.rs index 5a889cf..0d48304 100644 --- a/tests/e2e_network_lexicons.rs +++ b/tests/e2e_network_lexicons.rs @@ -72,8 +72,8 @@ async fn seed_network_lexicon(app: &TestApp, nsid: &str, authority_did: &str) { #[tokio::test] #[serial] -#[ignore] async fn network_lexicon_list_empty() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -90,8 +90,8 @@ async fn network_lexicon_list_empty() { #[tokio::test] #[serial] -#[ignore] async fn network_lexicon_list_returns_seeded() { + common::require_db!(); let app = TestApp::new().await; seed_network_lexicon(&app, "games.gamesgamesgamesgames.game", "did:plc:authority").await; @@ -113,8 +113,8 @@ async fn network_lexicon_list_returns_seeded() { #[tokio::test] #[serial] -#[ignore] async fn network_lexicon_delete_removes_tracking_and_lexicon() { + common::require_db!(); let app = TestApp::new().await; let backend = app.state.db_backend; @@ -149,8 +149,8 @@ async fn network_lexicon_delete_removes_tracking_and_lexicon() { #[tokio::test] #[serial] -#[ignore] async fn network_lexicon_delete_not_found() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -168,8 +168,8 @@ async fn network_lexicon_delete_not_found() { #[tokio::test] #[serial] -#[ignore] async fn network_lexicon_no_auth_returns_401() { + common::require_db!(); let app = TestApp::new().await; let resp = app diff --git a/tests/e2e_proxy_config.rs b/tests/e2e_proxy_config.rs index c985fa3..8fe8d4d 100644 --- a/tests/e2e_proxy_config.rs +++ b/tests/e2e_proxy_config.rs @@ -41,8 +41,8 @@ fn admin_put( #[tokio::test] #[serial] -#[ignore] async fn get_proxy_config_returns_default() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -60,8 +60,8 @@ async fn get_proxy_config_returns_default() { #[tokio::test] #[serial] -#[ignore] async fn put_and_get_allowlist() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -98,8 +98,8 @@ async fn put_and_get_allowlist() { #[tokio::test] #[serial] -#[ignore] async fn disabled_mode_clears_nsids() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -132,8 +132,8 @@ async fn disabled_mode_clears_nsids() { #[tokio::test] #[serial] -#[ignore] async fn invalid_mode_rejected() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -155,8 +155,8 @@ async fn invalid_mode_rejected() { #[tokio::test] #[serial] -#[ignore] async fn invalid_nsid_rejected() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -178,8 +178,8 @@ async fn invalid_nsid_rejected() { #[tokio::test] #[serial] -#[ignore] async fn requires_auth() { + common::require_db!(); let app = TestApp::new().await; let resp = app diff --git a/tests/e2e_settings.rs b/tests/e2e_settings.rs index 030f1b9..3586e01 100644 --- a/tests/e2e_settings.rs +++ b/tests/e2e_settings.rs @@ -61,8 +61,8 @@ fn admin_delete( #[tokio::test] #[serial] -#[ignore] async fn settings_crud() { + common::require_db!(); let app = TestApp::new().await; // PUT a setting @@ -134,8 +134,8 @@ async fn settings_crud() { #[tokio::test] #[serial] -#[ignore] async fn settings_requires_auth() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -155,8 +155,8 @@ async fn settings_requires_auth() { #[tokio::test] #[serial] -#[ignore] async fn logo_upload_and_serve() { + common::require_db!(); let app = TestApp::new().await; let boundary = "----testboundary"; @@ -260,8 +260,8 @@ async fn logo_upload_and_serve() { #[tokio::test] #[serial] -#[ignore] async fn client_metadata_includes_settings() { + common::require_db!(); let app = TestApp::new().await; // PUT app_name setting @@ -306,8 +306,8 @@ async fn client_metadata_includes_settings() { #[tokio::test] #[serial] -#[ignore] async fn client_metadata_client_id_matches_path() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -332,46 +332,8 @@ async fn client_metadata_client_id_matches_path() { #[tokio::test] #[serial] -#[ignore] -async fn client_metadata_scope_overridden_by_setting() { - let app = TestApp::new().await; - - let resp = app - .router - .clone() - .oneshot(admin_put( - "/admin/settings/oauth_scopes", - app.admin_cookie(), - &json!({ "value": "atproto include:com.example.foo\n include:com.example.bar" }), - )) - .await - .unwrap(); - assert!(resp.status().is_success()); - - let resp = app - .router - .clone() - .oneshot( - Request::builder() - .uri("/oauth-client-metadata.json") - .body(Body::empty()) - .unwrap(), - ) - .await - .unwrap(); - assert_eq!(resp.status(), StatusCode::OK); - let json = json_body(resp).await; - assert_eq!( - json["scope"], "atproto include:com.example.foo include:com.example.bar", - "expected normalized scope string, got {:?}", - json["scope"] - ); -} - -#[tokio::test] -#[serial] -#[ignore] async fn client_metadata_client_uri_overridden_by_setting() { + common::require_db!(); let app = TestApp::new().await; let resp = app diff --git a/tests/e2e_xrpc.rs b/tests/e2e_xrpc.rs index 172c3de..95d0268 100644 --- a/tests/e2e_xrpc.rs +++ b/tests/e2e_xrpc.rs @@ -109,8 +109,8 @@ async fn seed_record(app: &TestApp, uri: &str, did: &str, collection: &str, reco #[tokio::test] #[serial] -#[ignore] async fn profile_no_auth_returns_401() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -128,58 +128,14 @@ async fn profile_no_auth_returns_401() { assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); } -#[tokio::test] -#[serial] -#[ignore] -async fn profile_with_mocked_services_returns_200() { - let app = TestApp::new().await; - let did = &app.admin_did; - - // Mock PLC directory - Mock::given(method("GET")) - .and(path(format!("/{did}"))) - .respond_with( - ResponseTemplate::new(200) - .set_body_json(fixtures::did_document(did, &app.mock_server.uri())), - ) - .mount(&app.mock_server) - .await; - - // Mock PDS getRecord for profile - Mock::given(method("GET")) - .and(path("/xrpc/com.atproto.repo.getRecord")) - .respond_with(ResponseTemplate::new(200).set_body_json(fixtures::profile_record())) - .mount(&app.mock_server) - .await; - - let cookie = app.admin_cookie(); - let resp = app - .router - .clone() - .oneshot( - Request::builder() - .uri("/xrpc/app.bsky.actor.getProfile") - .header(cookie.0, cookie.1) - .body(Body::empty()) - .unwrap(), - ) - .await - .unwrap(); - - assert_eq!(resp.status(), StatusCode::OK); - let json = json_body(resp).await; - assert_eq!(json["did"], did.as_str()); - assert_eq!(json["displayName"], "Test User"); -} - // --------------------------------------------------------------------------- // Catch-all GET (queries) // --------------------------------------------------------------------------- #[tokio::test] #[serial] -#[ignore] async fn xrpc_get_unknown_method_proxies_and_returns_bad_gateway() { + common::require_db!(); let app = TestApp::new().await; let resp = app @@ -188,6 +144,7 @@ async fn xrpc_get_unknown_method_proxies_and_returns_bad_gateway() { .oneshot( Request::builder() .uri("/xrpc/nonexistent.method") + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -201,8 +158,8 @@ async fn xrpc_get_unknown_method_proxies_and_returns_bad_gateway() { #[tokio::test] #[serial] -#[ignore] async fn xrpc_get_non_query_returns_400() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; @@ -213,6 +170,7 @@ async fn xrpc_get_non_query_returns_400() { .oneshot( Request::builder() .uri("/xrpc/games.gamesgamesgamesgames.game") + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -224,8 +182,8 @@ async fn xrpc_get_non_query_returns_400() { #[tokio::test] #[serial] -#[ignore] async fn xrpc_get_single_record_by_uri() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; @@ -253,6 +211,7 @@ async fn xrpc_get_single_record_by_uri() { "/xrpc/games.gamesgamesgamesgames.listGames?uri={}", urlencoding::encode(uri) )) + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -267,8 +226,8 @@ async fn xrpc_get_single_record_by_uri() { #[tokio::test] #[serial] -#[ignore] async fn xrpc_get_record_not_found() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; @@ -277,6 +236,7 @@ async fn xrpc_get_record_not_found() { .oneshot( Request::builder() .uri("/xrpc/games.gamesgamesgamesgames.listGames?uri=at%3A%2F%2Fdid%3Aplc%3Anone%2Fgames.gamesgamesgamesgames.game%2Fmissing") + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -288,8 +248,8 @@ async fn xrpc_get_record_not_found() { #[tokio::test] #[serial] -#[ignore] async fn xrpc_get_list_with_pagination() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; @@ -326,6 +286,7 @@ async fn xrpc_get_list_with_pagination() { .oneshot( Request::builder() .uri("/xrpc/games.gamesgamesgamesgames.listGames?limit=2") + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -347,6 +308,7 @@ async fn xrpc_get_list_with_pagination() { .uri(format!( "/xrpc/games.gamesgamesgamesgames.listGames?limit=2&cursor={cursor}" )) + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -361,8 +323,8 @@ async fn xrpc_get_list_with_pagination() { #[tokio::test] #[serial] -#[ignore] async fn xrpc_get_list_filtered_by_did() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; @@ -402,6 +364,7 @@ async fn xrpc_get_list_filtered_by_did() { .oneshot( Request::builder() .uri("/xrpc/games.gamesgamesgamesgames.listGames?did=did:plc:a") + .header("x-client-key", "hvc_test") .body(Body::empty()) .unwrap(), ) @@ -421,8 +384,8 @@ async fn xrpc_get_list_filtered_by_did() { #[tokio::test] #[serial] -#[ignore] async fn xrpc_post_no_auth_returns_401() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; @@ -445,37 +408,8 @@ async fn xrpc_post_no_auth_returns_401() { #[tokio::test] #[serial] -#[ignore] -async fn xrpc_post_non_procedure_returns_400() { - let app = TestApp::new().await; - seed_lexicons(&app).await; - - // Use cookie auth for did:plc:test so auth passes - let (cookie_name, cookie_val) = - common::auth::admin_cookie_header("did:plc:test", &app.state.cookie_key); - - let resp = app - .router - .clone() - .oneshot( - Request::builder() - .method("POST") - .uri("/xrpc/games.gamesgamesgamesgames.listGames") - .header(cookie_name, cookie_val) - .header("content-type", "application/json") - .body(Body::from(b"{}".to_vec())) - .unwrap(), - ) - .await - .unwrap(); - - assert_eq!(resp.status(), StatusCode::BAD_REQUEST); -} - -#[tokio::test] -#[serial] -#[ignore] async fn xrpc_delete_procedure_removes_record() { + common::require_db!(); let app = TestApp::new().await; seed_lexicons(&app).await; let backend = app.state.db_backend; @@ -576,8 +510,8 @@ async fn xrpc_delete_procedure_removes_record() { #[tokio::test] #[serial] -#[ignore] async fn upload_lexicon_with_invalid_action_returns_400() { + common::require_db!(); let app = TestApp::new().await; let resp = app diff --git a/tests/lua_atproto_api.rs b/tests/lua_atproto_api.rs index 94a5b64..4946ced 100644 --- a/tests/lua_atproto_api.rs +++ b/tests/lua_atproto_api.rs @@ -84,7 +84,9 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> std::sync::Arc::new(oauth), )), oauth_state_store: happyview::auth::oauth_store::DbStateStore::new(pool.clone(), backend), - cookie_key: axum_extra::extract::cookie::Key::derive_from(b"test-secret"), + cookie_key: axum_extra::extract::cookie::Key::derive_from( + b"test-secret-that-is-at-least-32-bytes-long", + ), plugin_registry: std::sync::Arc::new(happyview::plugin::PluginRegistry::new()), wasm_runtime: std::sync::Arc::new( happyview::plugin::WasmRuntime::new().expect("wasm runtime"), @@ -170,8 +172,8 @@ async fn seed_label( #[tokio::test] #[serial] -#[ignore] async fn get_labels_returns_external_labels() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -217,8 +219,8 @@ async fn get_labels_returns_external_labels() { #[tokio::test] #[serial] -#[ignore] async fn get_labels_filters_expired() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -266,8 +268,8 @@ async fn get_labels_filters_expired() { #[tokio::test] #[serial] -#[ignore] async fn get_labels_includes_self_labels() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -309,8 +311,8 @@ async fn get_labels_includes_self_labels() { #[tokio::test] #[serial] -#[ignore] async fn get_labels_empty_for_unlabeled_record() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -346,8 +348,8 @@ async fn get_labels_empty_for_unlabeled_record() { #[tokio::test] #[serial] -#[ignore] async fn get_labels_batch_returns_labels_per_uri() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -408,8 +410,8 @@ async fn get_labels_batch_returns_labels_per_uri() { #[tokio::test] #[serial] -#[ignore] async fn get_labels_batch_empty_for_no_labels() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -439,8 +441,8 @@ async fn get_labels_batch_empty_for_no_labels() { #[tokio::test] #[serial] -#[ignore] async fn label_negation_removes_row() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -498,8 +500,8 @@ async fn label_negation_removes_row() { #[tokio::test] #[serial] -#[ignore] async fn label_upsert_is_idempotent() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; diff --git a/tests/lua_db_api.rs b/tests/lua_db_api.rs index 0e2ce49..1eb8de3 100644 --- a/tests/lua_db_api.rs +++ b/tests/lua_db_api.rs @@ -87,7 +87,9 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> std::sync::Arc::new(oauth), )), oauth_state_store: happyview::auth::oauth_store::DbStateStore::new(pool.clone(), backend), - cookie_key: axum_extra::extract::cookie::Key::derive_from(b"test-secret"), + cookie_key: axum_extra::extract::cookie::Key::derive_from( + b"test-secret-that-is-at-least-32-bytes-long", + ), plugin_registry: std::sync::Arc::new(happyview::plugin::PluginRegistry::new()), wasm_runtime: std::sync::Arc::new( happyview::plugin::WasmRuntime::new().expect("wasm runtime"), @@ -165,8 +167,8 @@ fn setup_lua(state: &AppState) -> Lua { #[tokio::test] #[serial] -#[ignore] async fn db_get_returns_record() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -189,8 +191,8 @@ async fn db_get_returns_record() { #[tokio::test] #[serial] -#[ignore] async fn db_get_returns_nil_for_missing() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -208,8 +210,8 @@ async fn db_get_returns_nil_for_missing() { #[tokio::test] #[serial] -#[ignore] async fn db_query_returns_records() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -229,8 +231,8 @@ async fn db_query_returns_records() { #[tokio::test] #[serial] -#[ignore] async fn db_query_respects_limit() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -254,8 +256,8 @@ async fn db_query_respects_limit() { #[tokio::test] #[serial] -#[ignore] async fn db_count_returns_total() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -274,8 +276,8 @@ async fn db_count_returns_total() { #[tokio::test] #[serial] -#[ignore] async fn db_count_with_did_filter() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -294,8 +296,8 @@ async fn db_count_with_did_filter() { #[tokio::test] #[serial] -#[ignore] async fn db_search_finds_matching() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; @@ -318,8 +320,8 @@ async fn db_search_finds_matching() { #[tokio::test] #[serial] -#[ignore] async fn db_raw_select_works() { + common::require_db!(); let pool = db::test_pool().await; let backend = db::test_backend(); db::truncate_all(&pool).await; diff --git a/tests/plugin_logging.rs b/tests/plugin_logging.rs index f8033ad..99eb121 100644 --- a/tests/plugin_logging.rs +++ b/tests/plugin_logging.rs @@ -14,6 +14,7 @@ use serial_test::serial; /// The log() function spawns fire-and-forget tasks; we need to yield /// until they complete before querying. async fn flush_spawned_tasks() { + common::require_db!(); for _ in 0..20 { tokio::task::yield_now().await; tokio::time::sleep(tokio::time::Duration::from_millis(25)).await; @@ -23,6 +24,7 @@ async fn flush_spawned_tasks() { #[tokio::test] #[serial] async fn plugin_log_writes_all_four_levels_to_event_logs() { + common::require_db!(); let pool = test_pool().await; let backend = test_backend(); truncate_all(&pool).await; @@ -103,6 +105,7 @@ async fn plugin_log_writes_all_four_levels_to_event_logs() { #[tokio::test] #[serial] async fn plugin_log_with_none_db_does_not_write_event_log() { + common::require_db!(); let pool = test_pool().await; let backend = test_backend(); truncate_all(&pool).await; -- 2.51.2 From 849f0970494f90141b8585d52ecbe8f6c15d94f0 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 19:25:16 -0500 Subject: [PATCH 067/250] fix: remove forced HappyView redirect URI from API client creation Signed-off-by: Trezy Signed-off-by: Trezy --- .../app/dashboard/settings/api-clients/page.tsx | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/web/src/app/dashboard/settings/api-clients/page.tsx b/web/src/app/dashboard/settings/api-clients/page.tsx index 086abe8..15cfbe8 100644 --- a/web/src/app/dashboard/settings/api-clients/page.tsx +++ b/web/src/app/dashboard/settings/api-clients/page.tsx @@ -260,7 +260,6 @@ export default function ApiClientsPage() { function CreateApiClientDialog({ onSuccess }: { onSuccess: () => void }) { const config = useConfig(); - const happyviewCallbackUri = `${config.public_url.replace(/\/$/, "")}/auth/callback`; const [clientType, setClientType] = useState<"confidential" | "public">( "confidential", @@ -312,8 +311,7 @@ function CreateApiClientDialog({ onSuccess }: { onSuccess: () => void }) { async function handleCreate() { setError(null); - const extraUris = redirectUris.map((u) => u.trim()).filter(Boolean); - const allUris = [happyviewCallbackUri, ...extraUris]; + const allUris = redirectUris.map((u) => u.trim()).filter(Boolean); const extraScopes = scopes.map((s) => s.trim()).filter(Boolean); const allScopes = ["atproto", ...extraScopes].join(" "); @@ -550,7 +548,6 @@ function CreateApiClientDialog({ onSuccess }: { onSuccess: () => void }) { values={redirectUris} onChange={setRedirectUris} placeholder="https://example.com/auth/callback" - readonlyValues={[happyviewCallbackUri]} /> {clientType === "public" && ( @@ -682,12 +679,9 @@ function EditApiClientDialog({ onSuccess: () => void; }) { const config = useConfig(); - const happyviewCallbackUri = `${config.public_url.replace(/\/$/, "")}/auth/callback`; - // Parse existing redirect URIs: separate the HappyView callback from user-added ones function parseRedirectUris(uris: string[]): string[] { - const filtered = uris.filter((u) => u !== happyviewCallbackUri); - return filtered.length > 0 ? [...filtered, ""] : [""]; + return uris.length > 0 ? [...uris, ""] : [""]; } // Parse existing scopes: separate "atproto" from user-added ones @@ -760,8 +754,7 @@ function EditApiClientDialog({ } setSaving(true); try { - const extraUris = redirectUris.map((u) => u.trim()).filter(Boolean); - const allUris = [happyviewCallbackUri, ...extraUris]; + const allUris = redirectUris.map((u) => u.trim()).filter(Boolean); const extraScopes = scopes.map((s) => s.trim()).filter(Boolean); const allScopes = ["atproto", ...extraScopes].join(" "); @@ -843,7 +836,6 @@ function EditApiClientDialog({ values={redirectUris} onChange={setRedirectUris} placeholder="https://example.com/auth/callback" - readonlyValues={[happyviewCallbackUri]} /> {client.client_type === "public" && ( -- 2.51.2 From 70655affdcccf894449feb7b49211bbfe8d1002f Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 20:59:19 -0500 Subject: [PATCH 068/250] ci: run CI on push so builds still happen after merges Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3553144..90fff2d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,8 @@ name: CI on: + push: + branches: [main, dev] pull_request: branches: [main, dev] delete: @@ -14,7 +16,7 @@ jobs: # Required because workflow-level `paths` filters can't vary per job. # --------------------------------------------------------------------------- changes: - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'push' runs-on: depot-ubuntu-24.04 outputs: server: ${{ steps.filter.outputs.server }} -- 2.51.2 From 8ef7f90d240734cd3c88f2d97a4dfd718b8544d9 Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 21:16:03 -0500 Subject: [PATCH 069/250] chore: remove custom postgres image (superfluous for v2) Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 41 -------------------------------------- docker-compose.yml | 1 - docker/Dockerfile.postgres | 2 -- docker/init-databases.sh | 6 ------ 4 files changed, 50 deletions(-) delete mode 100644 docker/Dockerfile.postgres delete mode 100755 docker/init-databases.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 90fff2d..306b886 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,6 @@ jobs: oauth-client-browser: ${{ steps.filter.outputs.oauth-client-browser }} oauth-client-node: ${{ steps.filter.outputs.oauth-client-node }} lex-agent: ${{ steps.filter.outputs.lex-agent }} - postgres: ${{ steps.filter.outputs.postgres }} steps: - name: Checkout repository uses: actions/checkout@v6 @@ -49,9 +48,6 @@ jobs: lex-agent: - 'packages/oauth-client/**' - 'packages/lex-agent/**' - postgres: - - 'docker/Dockerfile.postgres' - - 'docker/init-databases.sh' # --------------------------------------------------------------------------- # Server — unit tests, e2e tests, frontend build, lint @@ -626,43 +622,6 @@ jobs: # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} # fi - # --------------------------------------------------------------------------- - # Docker — Postgres image (only when Postgres Docker files change) - # --------------------------------------------------------------------------- - docker-postgres: - needs: changes - if: >- - needs.changes.outputs.postgres == 'true' - runs-on: depot-ubuntu-24.04 - permissions: - contents: read - packages: write - env: - GHCR_POSTGRES_IMAGE: ghcr.io/${{ github.repository }}-postgres - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: docker - file: docker/Dockerfile.postgres - push: true - tags: ${{ env.GHCR_POSTGRES_IMAGE }}:latest - cache-from: type=gha,scope=postgres - cache-to: type=gha,scope=postgres,mode=max,ignore-error=true - # --------------------------------------------------------------------------- # Mirror to Tangled # --------------------------------------------------------------------------- diff --git a/docker-compose.yml b/docker-compose.yml index 4fc0374..c147bc3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,6 @@ services: # - "5432:5432" # volumes: # - pgdata:/var/lib/postgresql/data - # - ./docker/init-databases.sh:/docker-entrypoint-initdb.d/init-databases.sh # healthcheck: # test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] # interval: 5s diff --git a/docker/Dockerfile.postgres b/docker/Dockerfile.postgres deleted file mode 100644 index 4e5214e..0000000 --- a/docker/Dockerfile.postgres +++ /dev/null @@ -1,2 +0,0 @@ -FROM ghcr.io/railwayapp-templates/postgres-ssl:17 -COPY init-databases.sh /docker-entrypoint-initdb.d/ diff --git a/docker/init-databases.sh b/docker/init-databases.sh deleted file mode 100755 index 9bdd905..0000000 --- a/docker/init-databases.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE DATABASE tap; -EOSQL -- 2.51.2 From d129d2667f1db871e59ae599f31f853c8d628e6e Mon Sep 17 00:00:00 2001 From: Trezy Date: Mon, 11 May 2026 19:55:45 -0500 Subject: [PATCH 070/250] fix: move record info into sheets Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/records.rs | 81 ++++++++++++------- web/src/app/dashboard/records/page.tsx | 108 ++++++++++++++++++++----- web/src/types/records.ts | 4 + 3 files changed, 140 insertions(+), 53 deletions(-) diff --git a/src/admin/records.rs b/src/admin/records.rs index b931134..f771848 100644 --- a/src/admin/records.rs +++ b/src/admin/records.rs @@ -36,6 +36,10 @@ pub(super) struct RecordLabel { pub(super) struct RecordEntry { pub uri: String, pub did: String, + pub collection: String, + pub rkey: String, + pub cid: String, + pub indexed_at: Option, pub record: Value, pub labels: Vec, } @@ -47,6 +51,16 @@ pub(super) struct ListRecordsResponse { pub cursor: Option, } +type RecordRow = ( + String, + String, + String, + String, + String, + Option, + String, +); + /// GET /admin/records?collection=X&limit=N&cursor=C — browse records by collection. pub(super) async fn list_records( State(state): State, @@ -63,10 +77,10 @@ pub(super) async fn list_records( .unwrap_or(0); let sql = adapt_sql( - "SELECT uri, did, record FROM records WHERE collection = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", + "SELECT uri, did, collection, rkey, cid, indexed_at, record FROM records WHERE collection = ? ORDER BY indexed_at DESC LIMIT ? OFFSET ?", backend, ); - let rows: Vec<(String, String, String)> = sqlx::query_as(&sql) + let rows: Vec = sqlx::query_as(&sql) .bind(¶ms.collection) .bind(limit + 1) .bind(offset) @@ -75,13 +89,12 @@ pub(super) async fn list_records( .map_err(|e| AppError::Internal(format!("failed to list records: {e}")))?; let has_more = rows.len() as i64 > limit; - let visible_rows: Vec<(String, String, String)> = - rows.into_iter().take(limit as usize).collect(); + let visible_rows: Vec = rows.into_iter().take(limit as usize).collect(); // Batch-query external labels for all visible URIs let uris: Vec<&str> = visible_rows .iter() - .map(|(uri, _, _)| uri.as_str()) + .map(|(uri, _, _, _, _, _, _)| uri.as_str()) .collect(); let label_rows: Vec<(String, String, String, String)> = if uris.is_empty() { @@ -114,34 +127,40 @@ pub(super) async fn list_records( let records: Vec = visible_rows .into_iter() - .map(|(uri, did, record_str)| { - let record: Value = serde_json::from_str(&record_str).unwrap_or_default(); - let mut labels = labels_by_uri.remove(&uri).unwrap_or_default(); - - // Extract self-labels from record JSONB - if let Some(values) = record - .get("labels") - .and_then(|l| l.get("values")) - .and_then(|v| v.as_array()) - { - for entry in values { - if let Some(val) = entry.get("val").and_then(|v| v.as_str()) { - labels.push(RecordLabel { - src: did.clone(), - val: val.to_string(), - cts: String::new(), - }); + .map( + |(uri, did, collection, rkey, cid, indexed_at, record_str)| { + let record: Value = serde_json::from_str(&record_str).unwrap_or_default(); + let mut labels = labels_by_uri.remove(&uri).unwrap_or_default(); + + // Extract self-labels from record JSONB + if let Some(values) = record + .get("labels") + .and_then(|l| l.get("values")) + .and_then(|v| v.as_array()) + { + for entry in values { + if let Some(val) = entry.get("val").and_then(|v| v.as_str()) { + labels.push(RecordLabel { + src: did.clone(), + val: val.to_string(), + cts: String::new(), + }); + } } } - } - - RecordEntry { - uri, - did, - record, - labels, - } - }) + + RecordEntry { + uri, + did, + collection, + rkey, + cid, + indexed_at, + record, + labels, + } + }, + ) .collect(); let cursor = if has_more { diff --git a/web/src/app/dashboard/records/page.tsx b/web/src/app/dashboard/records/page.tsx index 462eeb4..01cbc40 100644 --- a/web/src/app/dashboard/records/page.tsx +++ b/web/src/app/dashboard/records/page.tsx @@ -28,6 +28,12 @@ import { ResponsiveDialogHeader, ResponsiveDialogTitle, } from "@/components/ui/responsive-dialog"; +import { + Sheet, + SheetContent, + SheetHeader, + SheetTitle, +} from "@/components/ui/sheet"; import { Checkbox } from "@/components/ui/checkbox"; import { CodeBlock } from "@/components/code-block"; import { DataTable } from "@/components/data-table/data-table"; @@ -430,29 +436,87 @@ export default function RecordsPage() { )} - {viewRecord && ( - setViewRecord(null)}> - - - - {viewRecord.uri} - - - - {hasPermission("records:delete") && ( -
- + { + if (!open) setViewRecord(null); + }} + > + + {viewRecord && ( + <> + + Record Detail + +
+
+
+ URI +

{viewRecord.uri}

+
+
+ DID +

{viewRecord.did}

+
+
+ Collection +

{viewRecord.collection}

+
+
+ Record Key +

{viewRecord.rkey}

+
+
+ CID +

{viewRecord.cid}

+
+ {viewRecord.indexed_at && ( +
+ Indexed +

+ {new Date(viewRecord.indexed_at).toLocaleString()} +

+
+ )} + {viewRecord.labels.length > 0 && ( +
+ Labels +
+ {viewRecord.labels.map((l, i) => ( + + {l.val} + + ))} +
+
+ )} +
+ +
+ Record +
+ +
+
- )} - - - )} + {hasPermission("records:delete") && ( +
+ +
+ )} + + )} +
+
labels: RecordLabel[] } -- 2.51.2 From 50a378624dcd78a6ff0de35808ccfb1580bf70b8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 09:58:05 -0500 Subject: [PATCH 071/250] fix: prevent dead letters from being created without an ID fixes #20 Signed-off-by: Trezy Signed-off-by: Trezy --- src/lua/execute.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lua/execute.rs b/src/lua/execute.rs index c2c0c0c..2e32cb9 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -957,12 +957,13 @@ pub async fn execute_hook_script(event: &HookEvent<'_>) -> Option { .map(|r| serde_json::to_string(r).unwrap_or_default()); let dead_letter_sql = adapt_sql( r#" - INSERT INTO dead_letter_hooks (lexicon_id, uri, did, collection, rkey, action, record, error, attempts, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + INSERT INTO dead_letter_hooks (id, lexicon_id, uri, did, collection, rkey, action, record, error, attempts, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "#, backend, ); if let Err(e) = sqlx::query(&dead_letter_sql) + .bind(uuid::Uuid::new_v4().to_string()) .bind(event.lexicon_id) .bind(event.uri) .bind(event.did) -- 2.51.2 From 671a753f772a8bcbf25d7c5e1a7656b7ee7abc9c Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 09:58:46 -0500 Subject: [PATCH 072/250] fix: generate missing IDs for dead letters fixes #20 Signed-off-by: Trezy Signed-off-by: Trezy --- migrations/postgres/20260512000000_fix_null_dead_letter_ids.sql | 1 + migrations/sqlite/20260512000000_fix_null_dead_letter_ids.sql | 1 + 2 files changed, 2 insertions(+) create mode 100644 migrations/postgres/20260512000000_fix_null_dead_letter_ids.sql create mode 100644 migrations/sqlite/20260512000000_fix_null_dead_letter_ids.sql diff --git a/migrations/postgres/20260512000000_fix_null_dead_letter_ids.sql b/migrations/postgres/20260512000000_fix_null_dead_letter_ids.sql new file mode 100644 index 0000000..42239fa --- /dev/null +++ b/migrations/postgres/20260512000000_fix_null_dead_letter_ids.sql @@ -0,0 +1 @@ +UPDATE dead_letter_hooks SET id = gen_random_uuid() WHERE id IS NULL; diff --git a/migrations/sqlite/20260512000000_fix_null_dead_letter_ids.sql b/migrations/sqlite/20260512000000_fix_null_dead_letter_ids.sql new file mode 100644 index 0000000..715dfc2 --- /dev/null +++ b/migrations/sqlite/20260512000000_fix_null_dead_letter_ids.sql @@ -0,0 +1 @@ +UPDATE dead_letter_hooks SET id = lower(hex(randomblob(4)) || '-' || hex(randomblob(2)) || '-4' || substr(hex(randomblob(2)),2) || '-' || substr('89ab', abs(random()) % 4 + 1, 1) || substr(hex(randomblob(2)),2) || '-' || hex(randomblob(6))) WHERE id IS NULL; -- 2.51.2 From a119510f2929d62c8fd63e5175cac87246a48d34 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 10:49:44 -0500 Subject: [PATCH 073/250] fix: add permissions to the internal API Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/mod.rs | 1 + src/admin/permissions.rs | 465 ++++++++++++++++++++++++++++++++++++++- src/admin/users.rs | 52 ++++- tests/e2e_permissions.rs | 258 ++++++++++++++++++++++ web/src/lib/api.ts | 23 ++ 5 files changed, 796 insertions(+), 3 deletions(-) create mode 100644 tests/e2e_permissions.rs diff --git a/src/admin/mod.rs b/src/admin/mod.rs index 6a65c66..be15a5f 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -125,4 +125,5 @@ pub fn admin_routes(_state: AppState) -> Router { .route("/dead-letters/{id}/dismiss", post(dead_letters::dismiss)) .route("/dead-letters/{id}/retry", post(dead_letters::retry)) .route("/dead-letters/{id}/reindex", post(dead_letters::reindex)) + .route("/permissions", get(users::list_permissions)) } diff --git a/src/admin/permissions.rs b/src/admin/permissions.rs index 3a8406f..1bc0977 100644 --- a/src/admin/permissions.rs +++ b/src/admin/permissions.rs @@ -2,7 +2,15 @@ use std::collections::HashSet; use serde::{Deserialize, Serialize}; -/// All 37 permissions in the system. +#[derive(Serialize)] +pub struct PermissionInfo { + pub key: &'static str, + pub name: &'static str, + pub description: &'static str, + pub category: &'static str, +} + +/// All permissions in the system. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Permission { #[serde(rename = "lexicons:create")] @@ -150,6 +158,257 @@ impl Permission { } } + pub fn info(&self) -> PermissionInfo { + match self { + Self::LexiconsCreate => PermissionInfo { + key: "lexicons:create", + name: "Create Lexicons", + description: "Upload and register new lexicon schemas", + category: "Lexicons", + }, + Self::LexiconsRead => PermissionInfo { + key: "lexicons:read", + name: "View Lexicons", + description: "View registered lexicon schemas", + category: "Lexicons", + }, + Self::LexiconsDelete => PermissionInfo { + key: "lexicons:delete", + name: "Delete Lexicons", + description: "Remove lexicon schemas", + category: "Lexicons", + }, + Self::RecordsRead => PermissionInfo { + key: "records:read", + name: "View Records", + description: "Browse indexed AT Protocol records", + category: "Records", + }, + Self::RecordsDelete => PermissionInfo { + key: "records:delete", + name: "Delete Records", + description: "Delete individual records from the index", + category: "Records", + }, + Self::RecordsDeleteCollection => PermissionInfo { + key: "records:delete-collection", + name: "Delete Collections", + description: "Bulk-delete all records in a collection", + category: "Records", + }, + Self::ScriptVariablesCreate => PermissionInfo { + key: "script-variables:create", + name: "Create Script Variables", + description: "Add or update environment variables for Lua scripts", + category: "Script Variables", + }, + Self::ScriptVariablesRead => PermissionInfo { + key: "script-variables:read", + name: "View Script Variables", + description: "View script environment variable keys and values", + category: "Script Variables", + }, + Self::ScriptVariablesDelete => PermissionInfo { + key: "script-variables:delete", + name: "Delete Script Variables", + description: "Remove script environment variables", + category: "Script Variables", + }, + Self::UsersCreate => PermissionInfo { + key: "users:create", + name: "Create Users", + description: "Add new dashboard users", + category: "Users", + }, + Self::UsersRead => PermissionInfo { + key: "users:read", + name: "View Users", + description: "View the user list and their permissions", + category: "Users", + }, + Self::UsersUpdate => PermissionInfo { + key: "users:update", + name: "Update Users", + description: "Modify user permissions", + category: "Users", + }, + Self::UsersDelete => PermissionInfo { + key: "users:delete", + name: "Delete Users", + description: "Remove dashboard users", + category: "Users", + }, + Self::ApiKeysCreate => PermissionInfo { + key: "api-keys:create", + name: "Create API Keys", + description: "Generate new API keys for admin access", + category: "API Keys", + }, + Self::ApiKeysRead => PermissionInfo { + key: "api-keys:read", + name: "View API Keys", + description: "View existing API keys", + category: "API Keys", + }, + Self::ApiKeysDelete => PermissionInfo { + key: "api-keys:delete", + name: "Revoke API Keys", + description: "Revoke existing API keys", + category: "API Keys", + }, + Self::BackfillCreate => PermissionInfo { + key: "backfill:create", + name: "Start Backfill", + description: "Trigger historical record backfill jobs", + category: "Backfill", + }, + Self::BackfillRead => PermissionInfo { + key: "backfill:read", + name: "View Backfill", + description: "View backfill job status and progress", + category: "Backfill", + }, + Self::StatsRead => PermissionInfo { + key: "stats:read", + name: "View Stats", + description: "View collection statistics and record counts", + category: "System", + }, + Self::EventsRead => PermissionInfo { + key: "events:read", + name: "View Events", + description: "View the event log", + category: "System", + }, + Self::LabelersCreate => PermissionInfo { + key: "labelers:create", + name: "Add Labelers", + description: "Subscribe to external labeler services", + category: "Labelers", + }, + Self::LabelersRead => PermissionInfo { + key: "labelers:read", + name: "View Labelers", + description: "View subscribed labeler services", + category: "Labelers", + }, + Self::LabelersDelete => PermissionInfo { + key: "labelers:delete", + name: "Remove Labelers", + description: "Unsubscribe from labeler services", + category: "Labelers", + }, + Self::SettingsManage => PermissionInfo { + key: "settings:manage", + name: "Manage Settings", + description: "Modify instance settings, logo, and configuration", + category: "Settings", + }, + Self::PluginsRead => PermissionInfo { + key: "plugins:read", + name: "View Plugins", + description: "View installed plugins and their configuration", + category: "Plugins", + }, + Self::PluginsCreate => PermissionInfo { + key: "plugins:create", + name: "Install Plugins", + description: "Install and configure new plugins", + category: "Plugins", + }, + Self::PluginsDelete => PermissionInfo { + key: "plugins:delete", + name: "Remove Plugins", + description: "Uninstall plugins", + category: "Plugins", + }, + Self::ApiClientsView => PermissionInfo { + key: "api-clients:view", + name: "View API Clients", + description: "View registered OAuth API clients", + category: "API Clients", + }, + Self::ApiClientsCreate => PermissionInfo { + key: "api-clients:create", + name: "Create API Clients", + description: "Register new OAuth API clients", + category: "API Clients", + }, + Self::ApiClientsEdit => PermissionInfo { + key: "api-clients:edit", + name: "Edit API Clients", + description: "Modify API client settings and credentials", + category: "API Clients", + }, + Self::ApiClientsDelete => PermissionInfo { + key: "api-clients:delete", + name: "Delete API Clients", + description: "Remove registered API clients", + category: "API Clients", + }, + Self::DeadLettersRead => PermissionInfo { + key: "dead-letters:read", + name: "View Dead Letters", + description: "View failed hook executions", + category: "Dead Letters", + }, + Self::DeadLettersManage => PermissionInfo { + key: "dead-letters:manage", + name: "Manage Dead Letters", + description: "Retry, re-index, or dismiss dead letters", + category: "Dead Letters", + }, + Self::SpacesCreate => PermissionInfo { + key: "spaces:create", + name: "Create Spaces", + description: "Create new permissioned data spaces", + category: "Spaces", + }, + Self::SpacesRead => PermissionInfo { + key: "spaces:read", + name: "View Spaces", + description: "View space details and metadata", + category: "Spaces", + }, + Self::SpacesUpdate => PermissionInfo { + key: "spaces:update", + name: "Update Spaces", + description: "Modify space settings", + category: "Spaces", + }, + Self::SpacesDelete => PermissionInfo { + key: "spaces:delete", + name: "Delete Spaces", + description: "Remove spaces and their data", + category: "Spaces", + }, + Self::SpacesManageMembers => PermissionInfo { + key: "spaces:manage-members", + name: "Manage Members", + description: "Add or remove space members and roles", + category: "Spaces", + }, + Self::SpacesManageInvites => PermissionInfo { + key: "spaces:manage-invites", + name: "Manage Invites", + description: "Create and revoke space invitations", + category: "Spaces", + }, + Self::SpacesManageRecords => PermissionInfo { + key: "spaces:manage-records", + name: "Manage Records", + description: "Read and write records within spaces", + category: "Spaces", + }, + Self::SpacesManageCredentials => PermissionInfo { + key: "spaces:manage-credentials", + name: "Manage Credentials", + description: "Issue and revoke space access credentials", + category: "Spaces", + }, + } + } + /// All permissions. pub fn all() -> HashSet { HashSet::from([ @@ -198,8 +457,65 @@ impl Permission { } } +/// Ordered list of all permissions with metadata. +pub fn catalog() -> Vec { + use Permission::*; + [ + LexiconsCreate, + LexiconsRead, + LexiconsDelete, + RecordsRead, + RecordsDelete, + RecordsDeleteCollection, + ScriptVariablesCreate, + ScriptVariablesRead, + ScriptVariablesDelete, + UsersCreate, + UsersRead, + UsersUpdate, + UsersDelete, + ApiKeysCreate, + ApiKeysRead, + ApiKeysDelete, + BackfillCreate, + BackfillRead, + StatsRead, + EventsRead, + LabelersCreate, + LabelersRead, + LabelersDelete, + SettingsManage, + PluginsRead, + PluginsCreate, + PluginsDelete, + ApiClientsView, + ApiClientsCreate, + ApiClientsEdit, + ApiClientsDelete, + DeadLettersRead, + DeadLettersManage, + SpacesCreate, + SpacesRead, + SpacesUpdate, + SpacesDelete, + SpacesManageMembers, + SpacesManageInvites, + SpacesManageRecords, + SpacesManageCredentials, + ] + .iter() + .map(|p| p.info()) + .collect() +} + +/// Check whether a permission string is recognized. +#[allow(dead_code)] +pub fn is_valid(key: &str) -> bool { + serde_json::from_value::(serde_json::Value::String(key.to_string())).is_ok() +} + /// Predefined permission templates. -#[derive(Debug, Clone, Copy, Deserialize)] +#[derive(Debug, Clone, Copy, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum Template { Viewer, @@ -208,7 +524,47 @@ pub enum Template { FullAccess, } +#[derive(Serialize)] +pub struct TemplateInfo { + pub key: String, + pub label: &'static str, + pub permissions: Vec<&'static str>, +} + impl Template { + pub const ALL: &[Template] = &[ + Template::Viewer, + Template::Operator, + Template::Manager, + Template::FullAccess, + ]; + + pub fn key(&self) -> &'static str { + match self { + Self::Viewer => "viewer", + Self::Operator => "operator", + Self::Manager => "manager", + Self::FullAccess => "full_access", + } + } + + pub fn label(&self) -> &'static str { + match self { + Self::Viewer => "Viewer", + Self::Operator => "Operator", + Self::Manager => "Manager", + Self::FullAccess => "Full Access", + } + } + + pub fn info(&self) -> TemplateInfo { + TemplateInfo { + key: self.key().to_string(), + label: self.label(), + permissions: self.permissions().iter().map(|p| p.as_str()).collect(), + } + } + pub fn permissions(&self) -> HashSet { match self { Self::Viewer => HashSet::from([ @@ -262,3 +618,108 @@ impl Template { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn catalog_covers_all_permissions() { + let catalog_keys: Vec<&str> = catalog().iter().map(|p| p.key).collect(); + for perm in Permission::all() { + assert!( + catalog_keys.contains(&perm.as_str()), + "Permission {} missing from catalog()", + perm.as_str() + ); + } + } + + #[test] + fn catalog_has_no_duplicates() { + let entries = catalog(); + let mut seen = std::collections::HashSet::new(); + for entry in &entries { + assert!( + seen.insert(entry.key), + "Duplicate key in catalog: {}", + entry.key + ); + } + } + + #[test] + fn info_key_matches_as_str() { + for perm in Permission::all() { + assert_eq!(perm.info().key, perm.as_str()); + } + } + + #[test] + fn info_fields_are_nonempty() { + for perm in Permission::all() { + let info = perm.info(); + assert!(!info.name.is_empty(), "{} has empty name", info.key); + assert!( + !info.description.is_empty(), + "{} has empty description", + info.key + ); + assert!(!info.category.is_empty(), "{} has empty category", info.key); + } + } + + #[test] + fn is_valid_accepts_known_permissions() { + assert!(is_valid("lexicons:create")); + assert!(is_valid("spaces:manage-members")); + } + + #[test] + fn is_valid_rejects_unknown_permissions() { + assert!(!is_valid("fake:permission")); + assert!(!is_valid("")); + } + + #[test] + fn template_full_access_covers_all() { + assert_eq!(Template::FullAccess.permissions(), Permission::all()); + } + + #[test] + fn template_viewer_is_subset_of_operator() { + let viewer = Template::Viewer.permissions(); + let operator = Template::Operator.permissions(); + assert!(viewer.is_subset(&operator)); + } + + #[test] + fn template_operator_is_subset_of_manager() { + let operator = Template::Operator.permissions(); + let manager = Template::Manager.permissions(); + assert!(operator.is_subset(&manager)); + } + + #[test] + fn template_info_permissions_match_template_permissions() { + for t in Template::ALL { + let info = t.info(); + let expected: HashSet<&str> = t.permissions().iter().map(|p| p.as_str()).collect(); + let actual: HashSet<&str> = info.permissions.into_iter().collect(); + assert_eq!(expected, actual, "Template {:?} info mismatch", t); + } + } + + #[test] + fn spaces_permissions_are_in_spaces_category() { + for entry in catalog() { + if entry.key.starts_with("spaces:") { + assert_eq!( + entry.category, "Spaces", + "{} should be in Spaces category", + entry.key + ); + } + } + } +} diff --git a/src/admin/users.rs b/src/admin/users.rs index 6b8aaf7..375da13 100644 --- a/src/admin/users.rs +++ b/src/admin/users.rs @@ -10,7 +10,7 @@ use crate::error::AppError; use crate::event_log::{EventLog, Severity, log_event}; use super::auth::UserAuth; -use super::permissions::Permission; +use super::permissions::{self, Permission}; use super::types::{CreateUserBody, TransferSuperBody, UpdatePermissionsBody, UserSummary}; /// POST /admin/users — create a new user with template or explicit permissions. @@ -480,3 +480,53 @@ pub(super) async fn transfer_super( Ok(StatusCode::NO_CONTENT) } + +/// GET /admin/permissions — list all available permissions and templates. +pub(super) async fn list_permissions( + State(state): State, + auth: UserAuth, +) -> Result, AppError> { + auth.require(Permission::UsersRead).await?; + + let spaces_enabled = crate::feature_flags::is_enabled( + &state.db, + crate::feature_flags::FeatureFlag::SPACES_ENABLED, + state.db_backend, + ) + .await; + + let all_permissions: Vec = permissions::catalog() + .into_iter() + .filter(|p| spaces_enabled || p.category != "Spaces") + .map(|p| { + serde_json::json!({ + "key": p.key, + "name": p.name, + "description": p.description, + "category": p.category, + }) + }) + .collect(); + + let templates: Vec = permissions::Template::ALL + .iter() + .map(|t| { + let info = t.info(); + let perms: Vec<&str> = info + .permissions + .into_iter() + .filter(|p| spaces_enabled || !p.starts_with("spaces:")) + .collect(); + serde_json::json!({ + "key": info.key, + "label": info.label, + "permissions": perms, + }) + }) + .collect(); + + Ok(Json(serde_json::json!({ + "permissions": all_permissions, + "templates": templates, + }))) +} diff --git a/tests/e2e_permissions.rs b/tests/e2e_permissions.rs new file mode 100644 index 0000000..6827d23 --- /dev/null +++ b/tests/e2e_permissions.rs @@ -0,0 +1,258 @@ +mod common; + +use axum::body::Body; +use axum::http::{Method, Request, StatusCode}; +use http_body_util::BodyExt; +use serde_json::{Value, json}; +use serial_test::serial; +use tower::ServiceExt; + +use common::app::TestApp; + +async fn json_body(resp: axum::response::Response) -> Value { + let body = resp.into_body().collect().await.unwrap().to_bytes(); + serde_json::from_slice(&body).unwrap() +} + +fn admin_get( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), +) -> Request { + Request::builder() + .uri(uri) + .header(cookie.0, cookie.1) + .body(Body::empty()) + .unwrap() +} + +fn admin_put( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), + body: &Value, +) -> Request { + Request::builder() + .method(Method::PUT) + .uri(uri) + .header(cookie.0, cookie.1) + .header("content-type", "application/json") + .body(Body::from(serde_json::to_vec(body).unwrap())) + .unwrap() +} + +fn admin_delete( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), +) -> Request { + Request::builder() + .method(Method::DELETE) + .uri(uri) + .header(cookie.0, cookie.1) + .body(Body::empty()) + .unwrap() +} + +#[tokio::test] +#[serial] +async fn permissions_requires_auth() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/admin/permissions") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); +} + +#[tokio::test] +#[serial] +async fn permissions_returns_catalog() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().expect("permissions array"); + assert!(!permissions.is_empty()); + + let first = &permissions[0]; + assert!(first["key"].is_string()); + assert!(first["name"].is_string()); + assert!(first["description"].is_string()); + assert!(first["category"].is_string()); + + let templates = body["templates"].as_array().expect("templates array"); + assert!(!templates.is_empty()); + + let first_template = &templates[0]; + assert!(first_template["key"].is_string()); + assert!(first_template["label"].is_string()); + assert!(first_template["permissions"].is_array()); +} + +#[tokio::test] +#[serial] +async fn permissions_excludes_spaces_when_flag_disabled() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().unwrap(); + let has_spaces = permissions + .iter() + .any(|p| p["key"].as_str().unwrap_or("").starts_with("spaces:")); + assert!( + !has_spaces, + "spaces permissions should be excluded when flag is disabled" + ); + + let has_spaces_category = permissions + .iter() + .any(|p| p["category"].as_str().unwrap_or("") == "Spaces"); + assert!( + !has_spaces_category, + "Spaces category should not appear when flag is disabled" + ); + + let templates = body["templates"].as_array().unwrap(); + for template in templates { + let perms = template["permissions"].as_array().unwrap(); + let has_spaces_perm = perms + .iter() + .any(|p| p.as_str().unwrap_or("").starts_with("spaces:")); + assert!( + !has_spaces_perm, + "template {:?} should not contain spaces permissions when flag is disabled", + template["key"] + ); + } +} + +#[tokio::test] +#[serial] +async fn permissions_includes_spaces_when_flag_enabled() { + common::require_db!(); + let app = TestApp::new().await; + + // Enable the spaces feature flag + let resp = app + .router + .clone() + .oneshot(admin_put( + "/admin/settings/feature.spaces_enabled", + app.admin_cookie(), + &json!({ "value": "true" }), + )) + .await + .unwrap(); + assert!(resp.status().is_success()); + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().unwrap(); + let has_spaces = permissions + .iter() + .any(|p| p["key"].as_str().unwrap_or("").starts_with("spaces:")); + assert!( + has_spaces, + "spaces permissions should be included when flag is enabled" + ); + + let templates = body["templates"].as_array().unwrap(); + let manager = templates + .iter() + .find(|t| t["key"] == "manager") + .expect("manager template"); + let manager_perms = manager["permissions"].as_array().unwrap(); + let has_spaces_perm = manager_perms + .iter() + .any(|p| p.as_str().unwrap_or("").starts_with("spaces:")); + assert!( + has_spaces_perm, + "manager template should include spaces permissions when flag is enabled" + ); +} + +#[tokio::test] +#[serial] +async fn permissions_spaces_removed_after_disabling_flag() { + common::require_db!(); + let app = TestApp::new().await; + + // Enable + let resp = app + .router + .clone() + .oneshot(admin_put( + "/admin/settings/feature.spaces_enabled", + app.admin_cookie(), + &json!({ "value": "true" }), + )) + .await + .unwrap(); + assert!(resp.status().is_success()); + + // Disable + let resp = app + .router + .clone() + .oneshot(admin_delete( + "/admin/settings/feature.spaces_enabled", + app.admin_cookie(), + )) + .await + .unwrap(); + assert!(resp.status().is_success()); + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().unwrap(); + let has_spaces = permissions + .iter() + .any(|p| p["key"].as_str().unwrap_or("").starts_with("spaces:")); + assert!( + !has_spaces, + "spaces permissions should be gone after disabling flag" + ); +} diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index f05a348..fcee80a 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -213,6 +213,29 @@ export function transferSuper(body: { target_user_id: string }) { }); } +// Permissions catalog +export type PermissionEntry = { + key: string; + name: string; + description: string; + category: string; +}; + +export type PermissionTemplate = { + key: string; + label: string; + permissions: string[]; +}; + +export type PermissionsCatalog = { + permissions: PermissionEntry[]; + templates: PermissionTemplate[]; +}; + +export function getPermissions() { + return apiFetch("/admin/permissions"); +} + // API Keys export function getApiKeys() { return apiFetch("/admin/api-keys"); -- 2.51.2 From efd6140c6f4d9c8ef8a34c8051b51bb5e98a8cd8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 10:50:18 -0500 Subject: [PATCH 074/250] fix: allow sheets to be much larger Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/dead-letters/page.tsx | 2 +- web/src/app/dashboard/records/page.tsx | 2 +- web/src/components/ui/sheet.tsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/web/src/app/dashboard/dead-letters/page.tsx b/web/src/app/dashboard/dead-letters/page.tsx index 24ff16f..d871d5d 100644 --- a/web/src/app/dashboard/dead-letters/page.tsx +++ b/web/src/app/dashboard/dead-letters/page.tsx @@ -560,7 +560,7 @@ export default function DeadLettersPage() { if (!open) setViewDetail(null); }} > - + {viewDetail && ( <> diff --git a/web/src/app/dashboard/records/page.tsx b/web/src/app/dashboard/records/page.tsx index 01cbc40..4f0bb02 100644 --- a/web/src/app/dashboard/records/page.tsx +++ b/web/src/app/dashboard/records/page.tsx @@ -442,7 +442,7 @@ export default function RecordsPage() { if (!open) setViewRecord(null); }} > - + {viewRecord && ( <> diff --git a/web/src/components/ui/sheet.tsx b/web/src/components/ui/sheet.tsx index 5963090..cd427e3 100644 --- a/web/src/components/ui/sheet.tsx +++ b/web/src/components/ui/sheet.tsx @@ -62,9 +62,9 @@ function SheetContent({ className={cn( "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && - "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm", + "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-[90%] border-l lg:w-1/2", side === "left" && - "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", + "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-[90%] border-r lg:w-1/2", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b", side === "bottom" && -- 2.51.2 From 1d8b4001e1b71d358e7ae22e318947889366db93 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 10:50:57 -0500 Subject: [PATCH 075/250] fix: move user permission management into sheets fixes #23 Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/settings/users/page.tsx | 438 +++++++++++------- 1 file changed, 266 insertions(+), 172 deletions(-) diff --git a/web/src/app/dashboard/settings/users/page.tsx b/web/src/app/dashboard/settings/users/page.tsx index 84c6d45..e41f8cd 100644 --- a/web/src/app/dashboard/settings/users/page.tsx +++ b/web/src/app/dashboard/settings/users/page.tsx @@ -1,7 +1,7 @@ "use client"; -import React, { useCallback, useEffect, useState } from "react"; -import { ChevronDown, ChevronRight, Shield, Trash2 } from "lucide-react"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; +import { ChevronRight, Search, Shield, Trash2 } from "lucide-react"; import { useAuth } from "@/lib/auth-context"; import { @@ -10,13 +10,16 @@ import { deleteUser, updateUserPermissions, transferSuper, + getPermissions, } from "@/lib/api"; +import type { PermissionEntry, PermissionTemplate } from "@/lib/api"; import type { UserSummary } from "@/types/users"; import { SiteHeader } from "@/components/site-header"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Badge } from "@/components/ui/badge"; +import { Card, CardContent } from "@/components/ui/card"; import { Switch } from "@/components/ui/switch"; import { Select, @@ -43,45 +46,61 @@ import { ResponsiveDialogTitle, ResponsiveDialogTrigger, } from "@/components/ui/responsive-dialog"; +import { + Sheet, + SheetContent, + SheetFooter, + SheetHeader, + SheetTitle, + SheetDescription, +} from "@/components/ui/sheet"; -const PERMISSION_CATEGORIES: Record = { - Lexicons: ["lexicons:create", "lexicons:read", "lexicons:delete"], - Records: ["records:read", "records:delete", "records:delete-collection"], - "Script Variables": [ - "script-variables:create", - "script-variables:read", - "script-variables:delete", - ], - Users: ["users:create", "users:read", "users:update", "users:delete"], - "API Keys": ["api-keys:create", "api-keys:read", "api-keys:delete"], - Backfill: ["backfill:create", "backfill:read"], - "API Clients": ["api-clients:view", "api-clients:create", "api-clients:edit", "api-clients:delete"], - Plugins: ["plugins:read", "plugins:create", "plugins:delete"], - System: ["stats:read", "events:read"], +type BskyProfile = { + avatar?: string; + displayName?: string; + description?: string; }; -const ALL_PERMISSIONS = Object.values(PERMISSION_CATEGORIES).flat(); - -const TEMPLATES = [ - { value: "viewer", label: "Viewer" }, - { value: "operator", label: "Operator" }, - { value: "manager", label: "Manager" }, - { value: "full_access", label: "Full Access" }, -] as const; - -const TEMPLATE_PERMISSIONS: Record = { - viewer: ["lexicons:read", "records:read", "script-variables:read", "users:read", "api-keys:read", "backfill:read", "stats:read", "events:read"], - operator: ["lexicons:read", "records:read", "records:delete", "script-variables:read", "script-variables:create", "users:read", "api-keys:read", "backfill:read", "backfill:create", "stats:read", "events:read"], - manager: ["lexicons:create", "lexicons:read", "lexicons:delete", "records:read", "records:delete", "records:delete-collection", "script-variables:create", "script-variables:read", "script-variables:delete", "users:read", "api-keys:read", "backfill:create", "backfill:read", "stats:read", "events:read", "plugins:read", "plugins:create", "plugins:delete"], - full_access: ALL_PERMISSIONS, -}; +function buildCategories(permissions: PermissionEntry[]): Record { + const cats: Record = {}; + for (const p of permissions) { + if (!cats[p.category]) cats[p.category] = []; + cats[p.category].push(p); + } + return cats; +} export default function UsersPage() { const { did: currentDid } = useAuth(); const [users, setUsers] = useState([]); const [handles, setHandles] = useState>({}); const [error, setError] = useState(null); - const [expandedUserId, setExpandedUserId] = useState(null); + const [selectedUserId, setSelectedUserId] = useState(null); + const [permSearch, setPermSearch] = useState(""); + const [permissionEntries, setPermissionEntries] = useState([]); + const [profiles, setProfiles] = useState>({}); + const [templates, setTemplates] = useState([]); + + const permissionCategories = React.useMemo(() => buildCategories(permissionEntries), [permissionEntries]); + const filteredCategories = useMemo(() => { + if (!permSearch.trim()) return permissionCategories; + const terms = permSearch.toLowerCase().split(/\s+/); + const result: Record = {}; + for (const [category, permissions] of Object.entries(permissionCategories)) { + const matched = permissions.filter((p) => { + const haystack = `${p.name} ${p.description} ${p.category} ${p.key}`.toLowerCase(); + return terms.every((term) => haystack.includes(term)); + }); + if (matched.length > 0) result[category] = matched; + } + return result; + }, [permissionCategories, permSearch]); + const allPermissionKeys = React.useMemo(() => permissionEntries.map((p) => p.key), [permissionEntries]); + const templatePermissions = React.useMemo(() => { + const map: Record = {}; + for (const t of templates) map[t.key] = t.permissions; + return map; + }, [templates]); const currentUser = users.find((u) => u.did === currentDid); const isCurrentUserSuper = currentUser?.is_super ?? false; @@ -94,6 +113,12 @@ export default function UsersPage() { useEffect(() => { load(); + getPermissions() + .then((catalog) => { + setPermissionEntries(catalog.permissions); + setTemplates(catalog.templates); + }) + .catch((e) => setError(e instanceof Error ? e.message : String(e))); }, [load]); // Resolve DIDs to handles via PLC directory @@ -116,6 +141,27 @@ export default function UsersPage() { } }, [users, handles]); + // Fetch Bluesky profile when a user is selected + useEffect(() => { + if (!selectedUserId) return; + const user = users.find((u) => u.id === selectedUserId); + if (!user || user.did in profiles) return; + fetch(`https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${encodeURIComponent(user.did)}`) + .then((res) => (res.ok ? res.json() : null)) + .then((data) => { + if (!data) return; + setProfiles((prev) => ({ + ...prev, + [user.did]: { + avatar: data.avatar, + displayName: data.displayName, + description: data.description, + }, + })); + }) + .catch(() => {}); + }, [selectedUserId, users, profiles]); + async function handleDelete(id: string) { try { await deleteUser(id); @@ -193,7 +239,7 @@ export default function UsersPage() {

Users

{(isCurrentUserSuper || currentUser?.permissions.includes("users:create")) && ( - + )}
@@ -201,19 +247,18 @@ export default function UsersPage() { - User Permissions Created Last Used - + {users.length === 0 && ( No users yet. @@ -221,125 +266,169 @@ export default function UsersPage() { )} {users.map((user) => ( - - - -
+
+ + {(() => { + const selectedUser = users.find((u) => u.id === selectedUserId); + return ( + { if (!open) { setSelectedUserId(null); setPermSearch(""); } }}> + + {selectedUser && ( + <> + + User + + + + + {profiles[selectedUser.did]?.avatar && ( + + )} +
+

+ {profiles[selectedUser.did]?.displayName || handles[selectedUser.did] ? ( + <> + {profiles[selectedUser.did]?.displayName && ( + {profiles[selectedUser.did].displayName} + )} + {handles[selectedUser.did] && ( + + @{handles[selectedUser.did]} + + )} + ) : ( - - )} - - - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > -

-
- {handles[user.did] && ( - @{handles[user.did]} + {selectedUser.did} )} - {user.did} -
- {user.is_super && ( - - Owner - - )} -
- - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > - {user.is_super - ? `${ALL_PERMISSIONS.length}/${ALL_PERMISSIONS.length}` - : `${user.permissions.length}/${ALL_PERMISSIONS.length}`} - - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > - {new Date(user.created_at).toLocaleString()} - - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > - {user.last_used_at - ? new Date(user.last_used_at).toLocaleString() - : "Never"} - - -
- {isCurrentUserSuper && ( - handleTransferSuper(user.id)} - /> +

+

{selectedUser.did}

+ {profiles[selectedUser.did]?.description && ( +

{profiles[selectedUser.did].description}

)} -
-
- - {expandedUserId === user.id && ( - - - + + +
+
+ Role +

+ {selectedUser.is_super ? ( + Owner + ) : "Member"} +

+
+
+ Permissions +

+ {selectedUser.is_super + ? `${allPermissionKeys.length}/${allPermissionKeys.length}` + : `${selectedUser.permissions.filter((p) => allPermissionKeys.includes(p)).length}/${allPermissionKeys.length}`} +

+
+
+ Created +

{new Date(selectedUser.created_at).toLocaleString()}

+
+
+ Last Active +

+ {selectedUser.last_used_at + ? new Date(selectedUser.last_used_at).toLocaleString() + : "Never"} +

+
+
+ +
+ +
+ + setPermSearch(e.target.value)} + className="pl-9" + /> +
+ +
+ +
+ + +
+ {isCurrentUserSuper && ( + handleTransferSuper(selectedUser.id)} /> - - - )} - - ))} - - -
+ )} + +
+ + + )} +
+
+ ); + })()} ); @@ -350,47 +439,50 @@ function PermissionsPanel({ isSelf, currentUserPermissions, isCurrentUserSuper, + filteredCategories, onToggle, }: { user: UserSummary; isSelf: boolean; currentUserPermissions: string[]; isCurrentUserSuper: boolean; + filteredCategories: Record; onToggle: (user: UserSummary, permission: string, enabled: boolean) => void; }) { const canUpdate = isCurrentUserSuper || currentUserPermissions.includes("users:update"); return ( -
- {Object.entries(PERMISSION_CATEGORIES).map(([category, permissions]) => ( -
+
+ {Object.entries(filteredCategories).map(([category, permissions]) => ( +

{category}

-
+
{permissions.map((perm) => { - const enabled = user.is_super || user.permissions.includes(perm); + const enabled = user.is_super || user.permissions.includes(perm.key); return ( -
+
- onToggle(user, perm, checked) + onToggle(user, perm.key, checked) } - className="scale-75" + className="mt-0.5 scale-75" />
); @@ -422,14 +514,12 @@ function TransferOwnershipDialog({ @@ -457,8 +547,12 @@ function TransferOwnershipDialog({ function AddUserDialog({ onSuccess, + templates, + templatePermissions, }: { onSuccess: () => void; + templates: PermissionTemplate[]; + templatePermissions: Record; }) { const [did, setDid] = useState(""); const [template, setTemplate] = useState(""); @@ -511,8 +605,8 @@ function AddUserDialog({ - {TEMPLATES.map((t) => ( - + {templates.map((t) => ( + {t.label} ))} @@ -521,7 +615,7 @@ function AddUserDialog({
{template && (

- Grants {TEMPLATE_PERMISSIONS[template]?.length ?? 0} permissions. + Grants {templatePermissions[template]?.length ?? 0} permissions.

)}
-- 2.51.2 From a37a25479677a03ddb7044444fd563ce79c7217a Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 11:12:49 -0500 Subject: [PATCH 076/250] fix: use correct permission IDs in dashboard fixes #24 Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/settings/users/page.tsx | 172 +++++++++++++----- web/src/components/ui/sonner.tsx | 4 + 2 files changed, 132 insertions(+), 44 deletions(-) diff --git a/web/src/app/dashboard/settings/users/page.tsx b/web/src/app/dashboard/settings/users/page.tsx index e41f8cd..6bb9f43 100644 --- a/web/src/app/dashboard/settings/users/page.tsx +++ b/web/src/app/dashboard/settings/users/page.tsx @@ -2,6 +2,7 @@ import React, { useCallback, useEffect, useMemo, useState } from "react"; import { ChevronRight, Search, Shield, Trash2 } from "lucide-react"; +import { toast } from "sonner"; import { useAuth } from "@/lib/auth-context"; import { @@ -76,6 +77,8 @@ export default function UsersPage() { const [handles, setHandles] = useState>({}); const [error, setError] = useState(null); const [selectedUserId, setSelectedUserId] = useState(null); + const [pendingPermissions, setPendingPermissions] = useState([]); + const [saving, setSaving] = useState(false); const [permSearch, setPermSearch] = useState(""); const [permissionEntries, setPermissionEntries] = useState([]); const [profiles, setProfiles] = useState>({}); @@ -141,6 +144,13 @@ export default function UsersPage() { } }, [users, handles]); + // Initialize pending permissions when a user is selected + useEffect(() => { + if (!selectedUserId) return; + const user = users.find((u) => u.id === selectedUserId); + if (user) setPendingPermissions([...user.permissions]); + }, [selectedUserId, users]); + // Fetch Bluesky profile when a user is selected useEffect(() => { if (!selectedUserId) return; @@ -171,53 +181,59 @@ export default function UsersPage() { } } - async function handleTogglePermission( - user: UserSummary, + function handleTogglePermission( + _user: UserSummary, permission: string, enabled: boolean ) { - const grant: string[] = []; - const revoke: string[] = []; - - const [ns, action] = permission.split(":"); - - if (enabled) { - grant.push(permission); - // Adding a write permission also enables its read counterpart - if (action === "create" || action === "update" || action === "delete") { - const readPerm = `${ns}:read`; - if (!user.permissions.includes(readPerm)) { - grant.push(readPerm); - } - } - // Adding records:delete-collection also enables records:delete - if (permission === "records:delete-collection" && !user.permissions.includes("records:delete")) { - grant.push("records:delete"); - } - } else { - revoke.push(permission); - // Removing read also removes all write permissions in the same namespace - if (action === "read") { - for (const p of user.permissions) { - if (p.startsWith(`${ns}:`) && p !== permission) { - revoke.push(p); + setPendingPermissions((prev) => { + const perms = new Set(prev); + const [ns, action] = permission.split(":"); + + const nsReadPerm = allPermissionKeys.find( + (k) => k.startsWith(`${ns}:`) && (k.endsWith(":read") || k.endsWith(":view")) + ); + const isReadAction = action === "read" || action === "view"; + + if (enabled) { + perms.add(permission); + if (!isReadAction && nsReadPerm) perms.add(nsReadPerm); + if (permission === "records:delete-collection") perms.add("records:delete"); + } else { + perms.delete(permission); + if (isReadAction) { + for (const p of prev) { + if (p.startsWith(`${ns}:`) && p !== permission) perms.delete(p); } } + if (permission === "records:delete") perms.delete("records:delete-collection"); } - // Removing records:delete also removes records:delete-collection - if (permission === "records:delete" && user.permissions.includes("records:delete-collection")) { - revoke.push("records:delete-collection"); - } - } + return [...perms]; + }); + } + + async function handleSavePermissions(userId: string, originalPermissions: string[]) { + const originalSet = new Set(originalPermissions); + const pendingSet = new Set(pendingPermissions); + + const grant = pendingPermissions.filter((p) => !originalSet.has(p)); + const revoke = originalPermissions.filter((p) => !pendingSet.has(p)); + + if (grant.length === 0 && revoke.length === 0) return; + + setSaving(true); try { const body: { grant?: string[]; revoke?: string[] } = {}; if (grant.length > 0) body.grant = grant; if (revoke.length > 0) body.revoke = revoke; - await updateUserPermissions(user.id, body); + await updateUserPermissions(userId, body); + toast.success("Permissions updated"); load(); } catch (e: unknown) { setError(e instanceof Error ? e.message : String(e)); + } finally { + setSaving(false); } } @@ -307,8 +323,27 @@ export default function UsersPage() { {(() => { const selectedUser = users.find((u) => u.id === selectedUserId); return ( - { if (!open) { setSelectedUserId(null); setPermSearch(""); } }}> - + { + if (!open) { + const user = users.find((u) => u.id === selectedUserId); + if (user) { + const origSet = new Set(user.permissions); + const pendSet = new Set(pendingPermissions); + const unsaved = pendingPermissions.some((p) => !origSet.has(p)) || user.permissions.some((p) => !pendSet.has(p)); + if (unsaved) { + toast.warning("You have unsaved changes. Save or cancel before closing."); + return; + } + } + setSelectedUserId(null); + setPermSearch(""); + } + }}> + { + if (e.target instanceof HTMLElement && e.target.closest("[data-sonner-toaster]")) { + e.preventDefault(); + } + }}> {selectedUser && ( <> @@ -349,6 +384,14 @@ export default function UsersPage() { + {(() => { + const originalSet = new Set(selectedUser.permissions); + const pendingSet = new Set(pendingPermissions); + const added = pendingPermissions.filter((p) => !originalSet.has(p)).length; + const removed = selectedUser.permissions.filter((p) => !pendingSet.has(p)).length; + const hasChanges = added > 0 || removed > 0; + return ( + <>
Role @@ -363,7 +406,14 @@ export default function UsersPage() {

{selectedUser.is_super ? `${allPermissionKeys.length}/${allPermissionKeys.length}` - : `${selectedUser.permissions.filter((p) => allPermissionKeys.includes(p)).length}/${allPermissionKeys.length}`} + : `${pendingPermissions.filter((p) => allPermissionKeys.includes(p)).length}/${allPermissionKeys.length}`} + {hasChanges && ( + + {added > 0 && +{added}} + {added > 0 && removed > 0 && " "} + {removed > 0 && -{removed}} + + )}

@@ -399,12 +449,23 @@ export default function UsersPage() { currentUserPermissions={currentUser?.permissions ?? []} isCurrentUserSuper={isCurrentUserSuper} filteredCategories={filteredCategories} + pendingPermissions={pendingPermissions} + originalPermissions={selectedUser.permissions} onToggle={handleTogglePermission} />
-
+
+ {isCurrentUserSuper && ( handleTransferSuper(selectedUser.id)} /> )} +
+
+
+ + ); + })()} )} @@ -440,6 +512,8 @@ function PermissionsPanel({ currentUserPermissions, isCurrentUserSuper, filteredCategories, + pendingPermissions, + originalPermissions, onToggle, }: { user: UserSummary; @@ -447,9 +521,12 @@ function PermissionsPanel({ currentUserPermissions: string[]; isCurrentUserSuper: boolean; filteredCategories: Record; + pendingPermissions: string[]; + originalPermissions: string[]; onToggle: (user: UserSummary, permission: string, enabled: boolean) => void; }) { const canUpdate = isCurrentUserSuper || currentUserPermissions.includes("users:update"); + const originalSet = new Set(originalPermissions); return (
@@ -460,7 +537,10 @@ function PermissionsPanel({

{permissions.map((perm) => { - const enabled = user.is_super || user.permissions.includes(perm.key); + const enabled = user.is_super || pendingPermissions.includes(perm.key); + const wasEnabled = user.is_super || originalSet.has(perm.key); + const isAdded = enabled && !wasEnabled; + const isRemoved = !enabled && wasEnabled; return (
- {perm.name} + + {perm.name} + {isAdded && } + {isRemoved && } + {perm.description}
diff --git a/web/src/components/ui/sonner.tsx b/web/src/components/ui/sonner.tsx index 9b20afe..7a41a46 100644 --- a/web/src/components/ui/sonner.tsx +++ b/web/src/components/ui/sonner.tsx @@ -17,6 +17,7 @@ const Toaster = ({ ...props }: ToasterProps) => { , info: , @@ -30,6 +31,9 @@ const Toaster = ({ ...props }: ToasterProps) => { "--normal-text": "var(--popover-foreground)", "--normal-border": "var(--border)", "--border-radius": "var(--radius)", + "--toast-close-button-start": "unset", + "--toast-close-button-end": "0", + "--toast-close-button-transform": "translate(35%, -35%)", } as React.CSSProperties } {...props} -- 2.51.2 From 20e8969b0c232aadb27f5697f05e69f48d2e1bf7 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 13:26:58 -0500 Subject: [PATCH 077/250] docs: add design system package Signed-off-by: Trezy Signed-off-by: Trezy --- bun.lock | 2699 +++++------------------- packages/design-system/package.json | 10 + packages/design-system/src/fonts.ts | 15 + packages/design-system/src/globals.css | 48 + packages/design-system/src/tokens.css | 45 + packages/design-system/tsconfig.json | 17 + 6 files changed, 615 insertions(+), 2219 deletions(-) create mode 100644 packages/design-system/package.json create mode 100644 packages/design-system/src/fonts.ts create mode 100644 packages/design-system/src/globals.css create mode 100644 packages/design-system/src/tokens.css create mode 100644 packages/design-system/tsconfig.json diff --git a/bun.lock b/bun.lock index 0ff328b..3a2661a 100644 --- a/bun.lock +++ b/bun.lock @@ -5,22 +5,33 @@ "": { "name": "happyview", }, + "packages/design-system": { + "name": "@happyview/design-system", + "version": "0.0.0", + "dependencies": { + "geist": "^1.4.1", + }, + }, "packages/docs": { "name": "@happyview/docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.10.0", - "@docusaurus/preset-classic": "^3.10.0", - "@docusaurus/theme-mermaid": "^3.10.0", - "@mdx-js/react": "^3.1.1", - "@mermaid-js/layout-elk": "^0.1.9", - "@tailwindcss/typography": "^0.5.19", - "prismjs": "^1.30.0", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "@happyview/design-system": "workspace:*", + "@tailwindcss/postcss": "^4.2.0", + "@types/mdx": "^2.0.13", + "fumadocs-core": "^16.8.10", + "fumadocs-mdx": "^15.0.4", + "fumadocs-ui": "^16.8.10", + "mermaid": "^11.6.0", + "next": "^16.1.6", + "next-themes": "^0.4.6", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "tailwindcss": "^4.2.0", }, "devDependencies": { - "@docusaurus/tsconfig": "^3.10.0", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", "typescript": "^5.7.0", }, }, @@ -121,41 +132,7 @@ "@actions/io": ["@actions/io@3.0.2", "", {}, "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw=="], - "@algolia/abtesting": ["@algolia/abtesting@1.16.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-n9s6bEV6imdtIEd+BGP7WkA4pEZ5YTdgQ05JQhHwWawHg3hyjpNwC0TShGz6zWhv+jfLDGA/6FFNbySFS0P9cw=="], - - "@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.19.8", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.19.8", "@algolia/autocomplete-shared": "1.19.8" } }, "sha512-3YEorYg44niXcm7gkft3nXYItHd44e8tmh4D33CTszPgP0QWkaLEaFywiNyJBo7UL/mqObA/G9RYuU7R8tN1IA=="], - - "@algolia/autocomplete-plugin-algolia-insights": ["@algolia/autocomplete-plugin-algolia-insights@1.19.8", "", { "dependencies": { "@algolia/autocomplete-shared": "1.19.8" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "sha512-ZvJWO8ZZJDpc1LNM2TTBdmQsZBLMR4rU5iNR2OYvEeFBiaf/0ESnRSSLQbryarJY4SVxtoz6A2ZtDMNM+iQEAA=="], - - "@algolia/autocomplete-shared": ["@algolia/autocomplete-shared@1.19.8", "", { "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-h5hf2t8ejF6vlOgvLaZzQbWs5SyH2z4PAWygNAvvD/2RI29hdQ54ldUGwqVuj9Srs+n8XUKTPUqb7fvhBhQrnQ=="], - - "@algolia/client-abtesting": ["@algolia/client-abtesting@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-52iq0vHy1sphgnwoZyx5PmbEt8hsh+m7jD123LmBs6qy4GK7LbYZIeKd+nSnSipN2zvKRZ2zScS6h9PW3J7SXg=="], - - "@algolia/client-analytics": ["@algolia/client-analytics@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-WpPIUg+cSG2aPUG0gS8Ko9DwRgbRPUZxJkolhL2aCsmSlcEEZT65dILrfg5ovcxtx0Kvr+xtBVsTMtsQWRtPDQ=="], - - "@algolia/client-common": ["@algolia/client-common@5.50.2", "", {}, "sha512-Gj2MgtArGcsr82kIqRlo6/dCAFjrs2gLByEqyRENuT7ugrSMFuqg1vDzeBjRL1t3EJEJCFtT0PLX3gB8A6Hq4Q=="], - - "@algolia/client-insights": ["@algolia/client-insights@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-CUqoid5jDpmrc0oK3/xuZXFt6kwT0P9Lw7/nsM14YTr6puvmi+OUKmURpmebQF22S2vCG8L1DAoXXujxQUi/ug=="], - - "@algolia/client-personalization": ["@algolia/client-personalization@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-AndZWFoc0gbP5901OeQJ73BazgGgSGiBEba4ohdoJuZwHTO2Gio8Q4L1VLmytMBYcviVigB0iICToMvEJxI4ug=="], - - "@algolia/client-query-suggestions": ["@algolia/client-query-suggestions@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-NWoL+psEkz5dIzweaByVXuEB45wS8/rk0E0AhMMnaVJdVs7TcACPH2/OURm+N0xRDITkTHqCna823rd6Uqntdg=="], - - "@algolia/client-search": ["@algolia/client-search@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-ypSboUJ3XJoQz5DeDo82hCnrRuwq3q9ZdFhVKAik9TnZh1DvLqoQsrbBjXg7C7zQOtV/Qbge/HmyoV6V5L7MhQ=="], - - "@algolia/events": ["@algolia/events@4.0.1", "", {}, "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ=="], - - "@algolia/ingestion": ["@algolia/ingestion@1.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-VlR2FRXLw2bCB94SQo6zxg/Qi+547aOji6Pb+dKE7h1DMCCY317St+OpjpmgzE+bT2O9ALIc0V4nVIBOd7Gy+Q=="], - - "@algolia/monitoring": ["@algolia/monitoring@1.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-Cmvfp2+qopzQt8OilU97rhLhosq7ZrB6uieok3EwFUqG/aalPg6DgfCmu0yJMrYe+KMC1qRVt1MTRAUwLknUMQ=="], - - "@algolia/recommend": ["@algolia/recommend@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-jrkuyKoOM7dFWQ/6Y4hQAse2SC3L/RldG6GnPjMvAj65h+7Ubb51S0pKk4ofSStF0xm4LCNe0C4T6XX4nOFDiQ=="], - - "@algolia/requester-browser-xhr": ["@algolia/requester-browser-xhr@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2" } }, "sha512-4107YLJqCudPiBUlwnk6oTSUVwU7ab+qL1SfQGEDYI8DZH5gsf1ekPt9JykXRKYXf2IfouFL5GiCY/PHTFIjYw=="], - - "@algolia/requester-fetch": ["@algolia/requester-fetch@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2" } }, "sha512-vOrd3MQpLgmf6wXAueTuZ/cA0W4uRwIHHaxNy3h+a6YcNn6bCV/gFdZuv3F13v593zRU2k5R75NmvRWLenvMrw=="], - - "@algolia/requester-node-http": ["@algolia/requester-node-http@5.50.2", "", { "dependencies": { "@algolia/client-common": "5.50.2" } }, "sha512-Mu9BFtgzGqDUy5Bcs2nMyoILIFSN13GKQaklKAFIsd0K3/9CpNyfeBc+/+Qs6mFZLlxG9qzullO7h+bjcTBuGQ=="], + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], @@ -211,208 +188,8 @@ "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], - "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], - - "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], - - "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], - - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], - - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], - - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], - - "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.28.5", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw=="], - - "@babel/helper-define-polyfill-provider": ["@babel/helper-define-polyfill-provider@0.6.8", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "debug": "^4.4.3", "lodash.debounce": "^4.0.8", "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA=="], - - "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - - "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.28.5", "", { "dependencies": { "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5" } }, "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg=="], - - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.28.6", "", { "dependencies": { "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw=="], - - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA=="], - - "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" } }, "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw=="], - - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.28.6", "", {}, "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug=="], - - "@babel/helper-remap-async-to-generator": ["@babel/helper-remap-async-to-generator@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA=="], - - "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.28.6", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg=="], - - "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], - - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - - "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/traverse": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ=="], - - "@babel/helpers": ["@babel/helpers@7.29.2", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.29.0" } }, "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw=="], - - "@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], - - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q=="], - - "@babel/plugin-bugfix-safari-class-field-initializer-scope": ["@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA=="], - - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA=="], - - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw=="], - - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g=="], - - "@babel/plugin-proposal-private-property-in-object": ["@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w=="], - - "@babel/plugin-syntax-dynamic-import": ["@babel/plugin-syntax-dynamic-import@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ=="], - - "@babel/plugin-syntax-import-assertions": ["@babel/plugin-syntax-import-assertions@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw=="], - - "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw=="], - - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], - - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="], - - "@babel/plugin-syntax-unicode-sets-regex": ["@babel/plugin-syntax-unicode-sets-regex@7.18.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg=="], - - "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], - - "@babel/plugin-transform-async-generator-functions": ["@babel/plugin-transform-async-generator-functions@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w=="], - - "@babel/plugin-transform-async-to-generator": ["@babel/plugin-transform-async-to-generator@7.28.6", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g=="], - - "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg=="], - - "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw=="], - - "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw=="], - - "@babel/plugin-transform-class-static-block": ["@babel/plugin-transform-class-static-block@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ=="], - - "@babel/plugin-transform-classes": ["@babel/plugin-transform-classes@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-replace-supers": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q=="], - - "@babel/plugin-transform-computed-properties": ["@babel/plugin-transform-computed-properties@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/template": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ=="], - - "@babel/plugin-transform-destructuring": ["@babel/plugin-transform-destructuring@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw=="], - - "@babel/plugin-transform-dotall-regex": ["@babel/plugin-transform-dotall-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg=="], - - "@babel/plugin-transform-duplicate-keys": ["@babel/plugin-transform-duplicate-keys@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q=="], - - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ["@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw=="], - - "@babel/plugin-transform-dynamic-import": ["@babel/plugin-transform-dynamic-import@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A=="], - - "@babel/plugin-transform-explicit-resource-management": ["@babel/plugin-transform-explicit-resource-management@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg=="], - - "@babel/plugin-transform-exponentiation-operator": ["@babel/plugin-transform-exponentiation-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw=="], - - "@babel/plugin-transform-export-namespace-from": ["@babel/plugin-transform-export-namespace-from@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ=="], - - "@babel/plugin-transform-for-of": ["@babel/plugin-transform-for-of@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw=="], - - "@babel/plugin-transform-function-name": ["@babel/plugin-transform-function-name@7.27.1", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ=="], - - "@babel/plugin-transform-json-strings": ["@babel/plugin-transform-json-strings@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw=="], - - "@babel/plugin-transform-literals": ["@babel/plugin-transform-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA=="], - - "@babel/plugin-transform-logical-assignment-operators": ["@babel/plugin-transform-logical-assignment-operators@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A=="], - - "@babel/plugin-transform-member-expression-literals": ["@babel/plugin-transform-member-expression-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ=="], - - "@babel/plugin-transform-modules-amd": ["@babel/plugin-transform-modules-amd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA=="], - - "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.28.6", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA=="], - - "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.29.0", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ=="], - - "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w=="], - - "@babel/plugin-transform-named-capturing-groups-regex": ["@babel/plugin-transform-named-capturing-groups-regex@7.29.0", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ=="], - - "@babel/plugin-transform-new-target": ["@babel/plugin-transform-new-target@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ=="], - - "@babel/plugin-transform-nullish-coalescing-operator": ["@babel/plugin-transform-nullish-coalescing-operator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg=="], - - "@babel/plugin-transform-numeric-separator": ["@babel/plugin-transform-numeric-separator@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w=="], - - "@babel/plugin-transform-object-rest-spread": ["@babel/plugin-transform-object-rest-spread@7.28.6", "", { "dependencies": { "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA=="], - - "@babel/plugin-transform-object-super": ["@babel/plugin-transform-object-super@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng=="], - - "@babel/plugin-transform-optional-catch-binding": ["@babel/plugin-transform-optional-catch-binding@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ=="], - - "@babel/plugin-transform-optional-chaining": ["@babel/plugin-transform-optional-chaining@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w=="], - - "@babel/plugin-transform-parameters": ["@babel/plugin-transform-parameters@7.27.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg=="], - - "@babel/plugin-transform-private-methods": ["@babel/plugin-transform-private-methods@7.28.6", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg=="], - - "@babel/plugin-transform-private-property-in-object": ["@babel/plugin-transform-private-property-in-object@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA=="], - - "@babel/plugin-transform-property-literals": ["@babel/plugin-transform-property-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ=="], - - "@babel/plugin-transform-react-constant-elements": ["@babel/plugin-transform-react-constant-elements@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug=="], - - "@babel/plugin-transform-react-display-name": ["@babel/plugin-transform-react-display-name@7.28.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA=="], - - "@babel/plugin-transform-react-jsx": ["@babel/plugin-transform-react-jsx@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/plugin-syntax-jsx": "^7.28.6", "@babel/types": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow=="], - - "@babel/plugin-transform-react-jsx-development": ["@babel/plugin-transform-react-jsx-development@7.27.1", "", { "dependencies": { "@babel/plugin-transform-react-jsx": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q=="], - - "@babel/plugin-transform-react-pure-annotations": ["@babel/plugin-transform-react-pure-annotations@7.27.1", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA=="], - - "@babel/plugin-transform-regenerator": ["@babel/plugin-transform-regenerator@7.29.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog=="], - - "@babel/plugin-transform-regexp-modifiers": ["@babel/plugin-transform-regexp-modifiers@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg=="], - - "@babel/plugin-transform-reserved-words": ["@babel/plugin-transform-reserved-words@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw=="], - - "@babel/plugin-transform-runtime": ["@babel/plugin-transform-runtime@7.29.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w=="], - - "@babel/plugin-transform-shorthand-properties": ["@babel/plugin-transform-shorthand-properties@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ=="], - - "@babel/plugin-transform-spread": ["@babel/plugin-transform-spread@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA=="], - - "@babel/plugin-transform-sticky-regex": ["@babel/plugin-transform-sticky-regex@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g=="], - - "@babel/plugin-transform-template-literals": ["@babel/plugin-transform-template-literals@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg=="], - - "@babel/plugin-transform-typeof-symbol": ["@babel/plugin-transform-typeof-symbol@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw=="], - - "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw=="], - - "@babel/plugin-transform-unicode-escapes": ["@babel/plugin-transform-unicode-escapes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg=="], - - "@babel/plugin-transform-unicode-property-regex": ["@babel/plugin-transform-unicode-property-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A=="], - - "@babel/plugin-transform-unicode-regex": ["@babel/plugin-transform-unicode-regex@7.27.1", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw=="], - - "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q=="], - - "@babel/preset-env": ["@babel/preset-env@7.29.2", "", { "dependencies": { "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.28.6", "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", "@babel/plugin-transform-class-properties": "^7.28.6", "@babel/plugin-transform-class-static-block": "^7.28.6", "@babel/plugin-transform-classes": "^7.28.6", "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", "babel-plugin-polyfill-regenerator": "^0.6.6", "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw=="], - - "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], - - "@babel/preset-react": ["@babel/preset-react@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-transform-react-display-name": "^7.28.0", "@babel/plugin-transform-react-jsx": "^7.27.1", "@babel/plugin-transform-react-jsx-development": "^7.27.1", "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ=="], - - "@babel/preset-typescript": ["@babel/preset-typescript@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g=="], - - "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="], - - "@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="], - - "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], - - "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@12.0.0", "", { "dependencies": { "@chevrotain/gast": "12.0.0", "@chevrotain/types": "12.0.0" } }, "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg=="], @@ -427,357 +204,277 @@ "@colors/colors": ["@colors/colors@1.5.0", "", {}, "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="], - "@csstools/cascade-layer-name-parser": ["@csstools/cascade-layer-name-parser@2.0.5", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A=="], - - "@csstools/color-helpers": ["@csstools/color-helpers@5.1.0", "", {}, "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA=="], - - "@csstools/css-calc": ["@csstools/css-calc@2.1.4", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], - - "@csstools/css-color-parser": ["@csstools/css-color-parser@3.1.0", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "@csstools/css-calc": "^2.1.4" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA=="], - - "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.5", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ=="], - - "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], - - "@csstools/media-query-list-parser": ["@csstools/media-query-list-parser@4.0.3", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ=="], - - "@csstools/postcss-alpha-function": ["@csstools/postcss-alpha-function@1.0.1", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w=="], + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@csstools/postcss-cascade-layers": ["@csstools/postcss-cascade-layers@5.0.2", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], - "@csstools/postcss-color-function": ["@csstools/postcss-color-function@4.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], - "@csstools/postcss-color-function-display-p3-linear": ["@csstools/postcss-color-function-display-p3-linear@1.0.1", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="], - "@csstools/postcss-color-mix-function": ["@csstools/postcss-color-mix-function@3.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="], - "@csstools/postcss-color-mix-variadic-function-arguments": ["@csstools/postcss-color-mix-variadic-function-arguments@1.0.2", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="], - "@csstools/postcss-content-alt-text": ["@csstools/postcss-content-alt-text@2.0.8", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="], - "@csstools/postcss-contrast-color-function": ["@csstools/postcss-contrast-color-function@2.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="], - "@csstools/postcss-exponential-functions": ["@csstools/postcss-exponential-functions@2.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="], - "@csstools/postcss-font-format-keywords": ["@csstools/postcss-font-format-keywords@4.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="], - "@csstools/postcss-gamut-mapping": ["@csstools/postcss-gamut-mapping@2.0.11", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="], - "@csstools/postcss-gradients-interpolation-method": ["@csstools/postcss-gradients-interpolation-method@5.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="], - "@csstools/postcss-hwb-function": ["@csstools/postcss-hwb-function@4.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="], - "@csstools/postcss-ic-unit": ["@csstools/postcss-ic-unit@4.0.4", "", { "dependencies": { "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="], - "@csstools/postcss-initial": ["@csstools/postcss-initial@2.0.1", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="], - "@csstools/postcss-is-pseudo-class": ["@csstools/postcss-is-pseudo-class@5.0.3", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="], - "@csstools/postcss-light-dark-function": ["@csstools/postcss-light-dark-function@2.0.11", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="], - "@csstools/postcss-logical-float-and-clear": ["@csstools/postcss-logical-float-and-clear@3.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="], - "@csstools/postcss-logical-overflow": ["@csstools/postcss-logical-overflow@2.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="], - "@csstools/postcss-logical-overscroll-behavior": ["@csstools/postcss-logical-overscroll-behavior@2.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="], - "@csstools/postcss-logical-resize": ["@csstools/postcss-logical-resize@3.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="], - "@csstools/postcss-logical-viewport-units": ["@csstools/postcss-logical-viewport-units@3.0.4", "", { "dependencies": { "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="], - "@csstools/postcss-media-minmax": ["@csstools/postcss-media-minmax@2.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="], - "@csstools/postcss-media-queries-aspect-ratio-number-values": ["@csstools/postcss-media-queries-aspect-ratio-number-values@3.0.5", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="], - "@csstools/postcss-nested-calc": ["@csstools/postcss-nested-calc@4.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="], - "@csstools/postcss-normalize-display-values": ["@csstools/postcss-normalize-display-values@4.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="], - "@csstools/postcss-oklab-function": ["@csstools/postcss-oklab-function@4.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], - "@csstools/postcss-position-area-property": ["@csstools/postcss-position-area-property@1.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q=="], + "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], - "@csstools/postcss-progressive-custom-properties": ["@csstools/postcss-progressive-custom-properties@4.2.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw=="], + "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], - "@csstools/postcss-property-rule-prelude-list": ["@csstools/postcss-property-rule-prelude-list@1.0.0", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA=="], + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], - "@csstools/postcss-random-function": ["@csstools/postcss-random-function@2.0.1", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w=="], + "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], - "@csstools/postcss-relative-color-syntax": ["@csstools/postcss-relative-color-syntax@3.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw=="], + "@fumadocs/tailwind": ["@fumadocs/tailwind@0.0.5", "", { "peerDependencies": { "@tailwindcss/oxide": "^4.0.0", "tailwindcss": "^4.0.0" }, "optionalPeers": ["@tailwindcss/oxide", "tailwindcss"] }, "sha512-ENKPWUDRmriccsrUDE4bDBq3FNr/ms3BP2rWlsAEMV1yP23pcCaan+ceGfeBUsAQjw7sj9Q3R4Kl3g/TCStPzQ=="], - "@csstools/postcss-scope-pseudo-class": ["@csstools/postcss-scope-pseudo-class@4.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q=="], - - "@csstools/postcss-sign-functions": ["@csstools/postcss-sign-functions@1.1.4", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg=="], - - "@csstools/postcss-stepped-value-functions": ["@csstools/postcss-stepped-value-functions@4.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA=="], - - "@csstools/postcss-syntax-descriptor-syntax-production": ["@csstools/postcss-syntax-descriptor-syntax-production@1.0.1", "", { "dependencies": { "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow=="], - - "@csstools/postcss-system-ui-font-family": ["@csstools/postcss-system-ui-font-family@1.0.0", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ=="], - - "@csstools/postcss-text-decoration-shorthand": ["@csstools/postcss-text-decoration-shorthand@4.0.3", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA=="], - - "@csstools/postcss-trigonometric-functions": ["@csstools/postcss-trigonometric-functions@4.0.9", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A=="], - - "@csstools/postcss-unset-value": ["@csstools/postcss-unset-value@4.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA=="], - - "@csstools/selector-resolve-nested": ["@csstools/selector-resolve-nested@3.1.0", "", { "peerDependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g=="], - - "@csstools/selector-specificity": ["@csstools/selector-specificity@5.0.0", "", { "peerDependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw=="], - - "@csstools/utilities": ["@csstools/utilities@2.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ=="], - - "@discoveryjs/json-ext": ["@discoveryjs/json-ext@0.5.7", "", {}, "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw=="], - - "@docsearch/core": ["@docsearch/core@4.6.2", "", { "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", "react": ">= 16.8.0 < 20.0.0", "react-dom": ">= 16.8.0 < 20.0.0" }, "optionalPeers": ["@types/react", "react", "react-dom"] }, "sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA=="], - - "@docsearch/css": ["@docsearch/css@4.6.2", "", {}, "sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ=="], - - "@docsearch/react": ["@docsearch/react@4.6.2", "", { "dependencies": { "@algolia/autocomplete-core": "1.19.2", "@docsearch/core": "4.6.2", "@docsearch/css": "4.6.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", "react": ">= 16.8.0 < 20.0.0", "react-dom": ">= 16.8.0 < 20.0.0", "search-insights": ">= 1 < 3" }, "optionalPeers": ["@types/react", "react", "react-dom", "search-insights"] }, "sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w=="], - - "@docusaurus/babel": ["@docusaurus/babel@3.10.0", "", { "dependencies": { "@babel/core": "^7.25.9", "@babel/generator": "^7.25.9", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-runtime": "^7.25.9", "@babel/preset-env": "^7.25.9", "@babel/preset-react": "^7.25.9", "@babel/preset-typescript": "^7.25.9", "@babel/runtime": "^7.25.9", "@babel/traverse": "^7.25.9", "@docusaurus/logger": "3.10.0", "@docusaurus/utils": "3.10.0", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" } }, "sha512-mqCJhCZNZUDg0zgDEaPTM4DnRsisa24HdqTy/qn/MQlbwhTb4WVaZg6ZyX6yIVKqTz8fS1hBMgM+98z+BeJJDg=="], - - "@docusaurus/bundler": ["@docusaurus/bundler@3.10.0", "", { "dependencies": { "@babel/core": "^7.25.9", "@docusaurus/babel": "3.10.0", "@docusaurus/cssnano-preset": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "babel-loader": "^9.2.1", "clean-css": "^5.3.3", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.11.0", "css-minimizer-webpack-plugin": "^5.0.1", "cssnano": "^6.1.2", "file-loader": "^6.2.0", "html-minifier-terser": "^7.2.0", "mini-css-extract-plugin": "^2.9.2", "null-loader": "^4.0.1", "postcss": "^8.5.4", "postcss-loader": "^7.3.4", "postcss-preset-env": "^10.2.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", "url-loader": "^4.1.1", "webpack": "^5.95.0", "webpackbar": "^6.0.1" }, "peerDependencies": { "@docusaurus/faster": "*" }, "optionalPeers": ["@docusaurus/faster"] }, "sha512-iONUGZGgp+lAkw/cJZH6irONcF4p8+278IsdRlq8lYhxGjkoNUs0w7F4gVXBYSNChq5KG5/JleTSsdJySShxow=="], - - "@docusaurus/core": ["@docusaurus/core@3.10.0", "", { "dependencies": { "@docusaurus/babel": "3.10.0", "@docusaurus/bundler": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/mdx-loader": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", "cli-table3": "^0.6.3", "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", "detect-port": "^1.5.1", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", "execa": "^5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", "leven": "^3.1.0", "lodash": "^4.17.21", "open": "^8.4.0", "p-map": "^4.0.0", "prompts": "^2.4.2", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.3", "react-router": "^5.3.4", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.4", "semver": "^7.5.4", "serve-handler": "^6.1.7", "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", "webpack-dev-server": "^5.2.2", "webpack-merge": "^6.0.1" }, "peerDependencies": { "@docusaurus/faster": "*", "@mdx-js/react": "^3.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@docusaurus/faster"], "bin": { "docusaurus": "bin/docusaurus.mjs" } }, "sha512-mgLdQsO8xppnQZc3LPi+Mf+PkPeyxJeIx11AXAq/14fsaMefInQiMEZUUmrc7J+956G/f7MwE7tn8KZgi3iRcA=="], - - "@docusaurus/cssnano-preset": ["@docusaurus/cssnano-preset@3.10.0", "", { "dependencies": { "cssnano-preset-advanced": "^6.1.2", "postcss": "^8.5.4", "postcss-sort-media-queries": "^5.2.0", "tslib": "^2.6.0" } }, "sha512-qzSshTO1DB3TYW+dPUal5KHM7XPc5YQfzF3Kdb2NDACJUyGbNcFtw3tGkCJlYwhNCRKbZcmwraKUS1i5dcHdGg=="], - - "@docusaurus/logger": ["@docusaurus/logger@3.10.0", "", { "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" } }, "sha512-9jrZzFuBH1LDRlZ7cznAhCLmAZ3HSDqgwdrSSZdGHq9SPUOQgXXu8mnxe2ZRB9NS1PCpMTIOVUqDtZPIhMafZg=="], - - "@docusaurus/mdx-loader": ["@docusaurus/mdx-loader@3.10.0", "", { "dependencies": { "@docusaurus/logger": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", "estree-util-value-to-estree": "^3.0.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "image-size": "^2.0.2", "mdast-util-mdx": "^3.0.0", "mdast-util-to-string": "^4.0.0", "rehype-raw": "^7.0.0", "remark-directive": "^3.0.0", "remark-emoji": "^4.0.0", "remark-frontmatter": "^5.0.0", "remark-gfm": "^4.0.0", "stringify-object": "^3.3.0", "tslib": "^2.6.0", "unified": "^11.0.3", "unist-util-visit": "^5.0.0", "url-loader": "^4.1.1", "vfile": "^6.0.1", "webpack": "^5.88.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-mQQV97080AH4PYNs087l202NMDqRopZA4mg5W76ZZyTFrmWhJ3mHg+8A+drJVENxw5/Q+wHMHLgsx+9z1nEs0A=="], - - "@docusaurus/module-type-aliases": ["@docusaurus/module-type-aliases@3.10.0", "", { "dependencies": { "@docusaurus/types": "3.10.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "sha512-/1O0Zg8w3DFrYX/I6Fbss7OJrtZw1QoyjDhegiFNHVi9A9Y0gQ3jUAytVxF6ywpAWpLyLxch8nN8H/V3XfzdJQ=="], - - "@docusaurus/plugin-content-blog": ["@docusaurus/plugin-content-blog@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/mdx-loader": "3.10.0", "@docusaurus/theme-common": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "cheerio": "1.0.0-rc.12", "combine-promises": "^1.1.0", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", "schema-dts": "^1.1.2", "srcset": "^4.0.0", "tslib": "^2.6.0", "unist-util-visit": "^5.0.0", "utility-types": "^3.10.0", "webpack": "^5.88.1" }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-RuTz68DhB7CL96QO5UsFbciD7GPYq6QV+YMfF9V0+N4ZgLhJIBgpVAr8GobrKF6NRe5cyWWETU5z5T834piG9g=="], - - "@docusaurus/plugin-content-docs": ["@docusaurus/plugin-content-docs@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/mdx-loader": "3.10.0", "@docusaurus/module-type-aliases": "3.10.0", "@docusaurus/theme-common": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "schema-dts": "^1.1.2", "tslib": "^2.6.0", "utility-types": "^3.10.0", "webpack": "^5.88.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-9BjHhf15ct8Z7TThTC0xRndKDVvMKmVsAGAN7W9FpNRzfMdScOGcXtLmcCWtJGvAezjOJIm6CxOYCy3Io5+RnQ=="], - - "@docusaurus/plugin-content-pages": ["@docusaurus/plugin-content-pages@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/mdx-loader": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-5amX8kEJI+nIGtuLVjYk59Y5utEJ3CHETFOPEE4cooIRLA4xM4iBsA6zFgu4ljcopeYwvBzFEWf5g2I6Yb9SkA=="], - - "@docusaurus/plugin-css-cascade-layers": ["@docusaurus/plugin-css-cascade-layers@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "tslib": "^2.6.0" } }, "sha512-6q1vtt5FJcg5osgkHeM1euErECNqEZ5Z1j69yiNx2luEBIso+nxCkS9nqj8w+MK5X7rvKEToGhFfOFWncs51pQ=="], - - "@docusaurus/plugin-debug": ["@docusaurus/plugin-debug@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "fs-extra": "^11.1.1", "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-XcljKN+G+nmmK69uQA1d9BlYU3ZftG3T3zpK8/7Hf/wrOlV7TA4Ampdrdwkg0jElKdKAoSnPhCO0/U3bQGsVQQ=="], - - "@docusaurus/plugin-google-analytics": ["@docusaurus/plugin-google-analytics@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "tslib": "^2.6.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-hTEoodatpBZnUat5nFExbuTGA1lhWGy7vZGuTew5Q3QDtGKFpSJLYmZJhdTjvCFwv1+qQ67hgAVlKdJOB8TXow=="], - - "@docusaurus/plugin-google-gtag": ["@docusaurus/plugin-google-gtag@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "@types/gtag.js": "^0.0.20", "tslib": "^2.6.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-iB/Zzjv/eelJRbdULZqzWCbgMgJ7ht4ONVjXtN3+BI/muil6S87gQ1OJyPwlXD+ELdKkitC7bWv5eJdYOZLhrQ=="], - - "@docusaurus/plugin-google-tag-manager": ["@docusaurus/plugin-google-tag-manager@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "tslib": "^2.6.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-FEjZxqKgLHa+Wez/EgKxRwvArNCWIScfyEQD95rot7jkxp6nonjI5XIbGfO/iYhM5Qinwe8aIEQHP2KZtpqVuA=="], - - "@docusaurus/plugin-sitemap": ["@docusaurus/plugin-sitemap@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-DVTSLjB97hIjmayGnGcBfognCeI7ZuUKgEnU7Oz81JYqXtVg94mVTthDjq3QHTylYNeCUbkaW8VF0FDLcc8pPw=="], - - "@docusaurus/plugin-svgr": ["@docusaurus/plugin-svgr@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", "webpack": "^5.88.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-lNljBESaETZqVBMPqkrGchr+UPT1eZzEPLmJhz8I76BxbjqgsUnRvrq6lQJ9sYjgmgX52KB7kkgczqd2yzoswQ=="], - - "@docusaurus/preset-classic": ["@docusaurus/preset-classic@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/plugin-content-blog": "3.10.0", "@docusaurus/plugin-content-docs": "3.10.0", "@docusaurus/plugin-content-pages": "3.10.0", "@docusaurus/plugin-css-cascade-layers": "3.10.0", "@docusaurus/plugin-debug": "3.10.0", "@docusaurus/plugin-google-analytics": "3.10.0", "@docusaurus/plugin-google-gtag": "3.10.0", "@docusaurus/plugin-google-tag-manager": "3.10.0", "@docusaurus/plugin-sitemap": "3.10.0", "@docusaurus/plugin-svgr": "3.10.0", "@docusaurus/theme-classic": "3.10.0", "@docusaurus/theme-common": "3.10.0", "@docusaurus/theme-search-algolia": "3.10.0", "@docusaurus/types": "3.10.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-kw/Ye02Hc6xP1OdTswy8yxQEHg0fdPpyWAQRxr5b2x3h7LlG2Zgbb5BDFROnXDDMpUxB7YejlocJIE5HIEfpNA=="], - - "@docusaurus/theme-classic": ["@docusaurus/theme-classic@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/mdx-loader": "3.10.0", "@docusaurus/module-type-aliases": "3.10.0", "@docusaurus/plugin-content-blog": "3.10.0", "@docusaurus/plugin-content-docs": "3.10.0", "@docusaurus/plugin-content-pages": "3.10.0", "@docusaurus/theme-common": "3.10.0", "@docusaurus/theme-translations": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.45", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.5.4", "prism-react-renderer": "^2.3.0", "prismjs": "^1.29.0", "react-router-dom": "^5.3.4", "rtlcss": "^4.1.0", "tslib": "^2.6.0", "utility-types": "^3.10.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-9msCAsRdN+UG+RwPwCFb0uKy4tGoPh5YfBozXeGUtIeAgsMdn6f3G/oY861luZ3t8S2ET8S9Y/1GnpJAGWytww=="], + "@happy-dom/global-registrator": ["@happy-dom/global-registrator@16.8.1", "", { "dependencies": { "happy-dom": "^16.8.1" } }, "sha512-EzV55rpNs5AXwFRb2tGrU6STr2Rgwtoi9awvh6vDglGZypXCFsJYYJpskZ2rhWaLL6Zbw5/+uJj+mocRPZuEUg=="], - "@docusaurus/theme-common": ["@docusaurus/theme-common@3.10.0", "", { "dependencies": { "@docusaurus/mdx-loader": "3.10.0", "@docusaurus/module-type-aliases": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "clsx": "^2.0.0", "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^2.3.0", "tslib": "^2.6.0", "utility-types": "^3.10.0" }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-Dkp1YXKn16ByCJAdIjbDIOpVb4Z66MsVD694/ilX1vAAHaVEMrVsf/NPd9VgreyFx08rJ9GqV1MtzsbTcU73Kg=="], + "@happyview/design-system": ["@happyview/design-system@workspace:packages/design-system"], - "@docusaurus/theme-mermaid": ["@docusaurus/theme-mermaid@3.10.0", "", { "dependencies": { "@docusaurus/core": "3.10.0", "@docusaurus/module-type-aliases": "3.10.0", "@docusaurus/theme-common": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "mermaid": ">=11.6.0", "tslib": "^2.6.0" }, "peerDependencies": { "@mermaid-js/layout-elk": "^0.1.9", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@mermaid-js/layout-elk"] }, "sha512-Y2xrlwhIJ80oOZIO3PXL6A7J869splfcMI87E3NKpYsy3zJxOyV+BP1QMtGi59ajKgU868HPuyyn6J+6BZGOBg=="], + "@happyview/docs": ["@happyview/docs@workspace:packages/docs"], - "@docusaurus/theme-search-algolia": ["@docusaurus/theme-search-algolia@3.10.0", "", { "dependencies": { "@algolia/autocomplete-core": "^1.19.2", "@docsearch/react": "^3.9.0 || ^4.3.2", "@docusaurus/core": "3.10.0", "@docusaurus/logger": "3.10.0", "@docusaurus/plugin-content-docs": "3.10.0", "@docusaurus/theme-common": "3.10.0", "@docusaurus/theme-translations": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-validation": "3.10.0", "algoliasearch": "^5.37.0", "algoliasearch-helper": "^3.26.0", "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", "lodash": "^4.17.21", "tslib": "^2.6.0", "utility-types": "^3.10.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-f5FPKI08e3JRG63vR/o4qeuUVHUHzFzM0nnF+AkB67soAZgNsKJRf2qmUZvlQkGwlV+QFkKe4D0ANMh1jToU3g=="], + "@happyview/lex-agent": ["@happyview/lex-agent@workspace:packages/lex-agent"], - "@docusaurus/theme-translations": ["@docusaurus/theme-translations@3.10.0", "", { "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" } }, "sha512-L9IbFLwTc5+XdgH45iQYufLn0SVZd6BUNelDbKIFlH+E4hhjuj/XHWAFMX/w2K59rfy8wak9McOaei7BSUfRPA=="], + "@happyview/oauth-client": ["@happyview/oauth-client@workspace:packages/oauth-client"], - "@docusaurus/tsconfig": ["@docusaurus/tsconfig@3.10.0", "", {}, "sha512-TXdC3WXuPrdQAexLvjUJfnYf3YKEgEqAs5nK0Q88pRBCW7t7oN4ILvWYb3A5Z1wlSXyXGWW/mCUmLEhdWsjnDQ=="], + "@happyview/oauth-client-browser": ["@happyview/oauth-client-browser@workspace:packages/oauth-client-browser"], - "@docusaurus/types": ["@docusaurus/types@3.10.0", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", "@types/mdast": "^4.0.2", "@types/react": "*", "commander": "^5.1.0", "joi": "^17.9.2", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "utility-types": "^3.10.0", "webpack": "^5.95.0", "webpack-merge": "^5.9.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" } }, "sha512-F0dOt3FOoO20rRaFK7whGFQZ3ggyrWEdQc/c8/UiRuzhtg4y1w9FspXH5zpCT07uMnJKBPGh+qNazbNlCQqvSw=="], + "@happyview/oauth-client-node": ["@happyview/oauth-client-node@workspace:packages/oauth-client-node"], - "@docusaurus/utils": ["@docusaurus/utils@3.10.0", "", { "dependencies": { "@docusaurus/logger": "3.10.0", "@docusaurus/types": "3.10.0", "@docusaurus/utils-common": "3.10.0", "escape-string-regexp": "^4.0.0", "execa": "^5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", "globby": "^11.1.0", "gray-matter": "^4.0.3", "jiti": "^1.20.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", "p-queue": "^6.6.2", "prompts": "^2.4.2", "resolve-pathname": "^3.0.0", "tslib": "^2.6.0", "url-loader": "^4.1.1", "utility-types": "^3.10.0", "webpack": "^5.88.1" } }, "sha512-T3B0WTigsIthe0D4LQa2k+7bJY+c3WS+Wq2JhcznOSpn1lSN64yNtHQXboCj3QnUs1EuAZszQG1SHKu5w5ZrlA=="], + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], - "@docusaurus/utils-common": ["@docusaurus/utils-common@3.10.0", "", { "dependencies": { "@docusaurus/types": "3.10.0", "tslib": "^2.6.0" } }, "sha512-JyL7sb9QVDgYvudIS81Dv0lsWm7le0vGZSDwsztxWam1SPBqrnkvBy9UYL/amh6pbybkyYTd3CMTkO24oMlCSw=="], + "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], - "@docusaurus/utils-validation": ["@docusaurus/utils-validation@3.10.0", "", { "dependencies": { "@docusaurus/logger": "3.10.0", "@docusaurus/utils": "3.10.0", "@docusaurus/utils-common": "3.10.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "tslib": "^2.6.0" } }, "sha512-c+6n2+ZPOJtWWc8Bb/EYdpSDfjYEScdCu9fB/SNjOmSCf1IdVnGf2T53o0tsz0gDRtCL90tifTL0JE/oMuP1Mw=="], + "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], + "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], + "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], + "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], - "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - "@happy-dom/global-registrator": ["@happy-dom/global-registrator@16.8.1", "", { "dependencies": { "happy-dom": "^16.8.1" } }, "sha512-EzV55rpNs5AXwFRb2tGrU6STr2Rgwtoi9awvh6vDglGZypXCFsJYYJpskZ2rhWaLL6Zbw5/+uJj+mocRPZuEUg=="], + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@happyview/docs": ["@happyview/docs@workspace:packages/docs"], + "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], - "@happyview/lex-agent": ["@happyview/lex-agent@workspace:packages/lex-agent"], + "@mermaid-js/parser": ["@mermaid-js/parser@1.1.0", "", { "dependencies": { "langium": "^4.0.0" } }, "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw=="], - "@happyview/oauth-client": ["@happyview/oauth-client@workspace:packages/oauth-client"], + "@next/env": ["@next/env@16.2.6", "", {}, "sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw=="], - "@happyview/oauth-client-browser": ["@happyview/oauth-client-browser@workspace:packages/oauth-client-browser"], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg=="], - "@happyview/oauth-client-node": ["@happyview/oauth-client-node@workspace:packages/oauth-client-node"], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ=="], - "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w=="], - "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA=="], - "@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw=="], - "@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g=="], - "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg=="], - "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA=="], - "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], - "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], - "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], - "@jsonjoy.com/base64": ["@jsonjoy.com/base64@1.1.2", "", { "peerDependencies": { "tslib": "2" } }, "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA=="], + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@jsonjoy.com/buffers": ["@jsonjoy.com/buffers@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw=="], + "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - "@jsonjoy.com/codegen": ["@jsonjoy.com/codegen@1.0.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g=="], + "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], - "@jsonjoy.com/fs-core": ["@jsonjoy.com/fs-core@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-node-builtins": "4.57.2", "@jsonjoy.com/fs-node-utils": "4.57.2", "thingies": "^2.5.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ=="], + "@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], - "@jsonjoy.com/fs-fsa": ["@jsonjoy.com/fs-fsa@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-core": "4.57.2", "@jsonjoy.com/fs-node-builtins": "4.57.2", "@jsonjoy.com/fs-node-utils": "4.57.2", "thingies": "^2.5.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g=="], + "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], - "@jsonjoy.com/fs-node": ["@jsonjoy.com/fs-node@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-core": "4.57.2", "@jsonjoy.com/fs-node-builtins": "4.57.2", "@jsonjoy.com/fs-node-utils": "4.57.2", "@jsonjoy.com/fs-print": "4.57.2", "@jsonjoy.com/fs-snapshot": "4.57.2", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg=="], + "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - "@jsonjoy.com/fs-node-builtins": ["@jsonjoy.com/fs-node-builtins@4.57.2", "", { "peerDependencies": { "tslib": "2" } }, "sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg=="], + "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@14.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw=="], - "@jsonjoy.com/fs-node-to-fsa": ["@jsonjoy.com/fs-node-to-fsa@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-fsa": "4.57.2", "@jsonjoy.com/fs-node-builtins": "4.57.2", "@jsonjoy.com/fs-node-utils": "4.57.2" }, "peerDependencies": { "tslib": "2" } }, "sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ=="], + "@octokit/plugin-retry": ["@octokit/plugin-retry@8.1.0", "", { "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=7" } }, "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw=="], - "@jsonjoy.com/fs-node-utils": ["@jsonjoy.com/fs-node-utils@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-node-builtins": "4.57.2" }, "peerDependencies": { "tslib": "2" } }, "sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ=="], + "@octokit/plugin-throttling": ["@octokit/plugin-throttling@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^7.0.0" } }, "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg=="], - "@jsonjoy.com/fs-print": ["@jsonjoy.com/fs-print@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-node-utils": "4.57.2", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ=="], + "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], - "@jsonjoy.com/fs-snapshot": ["@jsonjoy.com/fs-snapshot@4.57.2", "", { "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", "@jsonjoy.com/fs-node-utils": "4.57.2", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw=="], + "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], - "@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@1.21.0", "", { "dependencies": { "@jsonjoy.com/base64": "^1.1.2", "@jsonjoy.com/buffers": "^1.2.0", "@jsonjoy.com/codegen": "^1.0.0", "@jsonjoy.com/json-pointer": "^1.0.2", "@jsonjoy.com/util": "^1.9.0", "hyperdyperid": "^1.2.0", "thingies": "^2.5.0", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg=="], + "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], - "@jsonjoy.com/json-pointer": ["@jsonjoy.com/json-pointer@1.0.2", "", { "dependencies": { "@jsonjoy.com/codegen": "^1.0.0", "@jsonjoy.com/util": "^1.9.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg=="], + "@orama/orama": ["@orama/orama@3.1.18", "", {}, "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA=="], - "@jsonjoy.com/util": ["@jsonjoy.com/util@1.9.0", "", { "dependencies": { "@jsonjoy.com/buffers": "^1.0.0", "@jsonjoy.com/codegen": "^1.0.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ=="], + "@pnpm/config.env-replace": ["@pnpm/config.env-replace@1.1.0", "", {}, "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="], - "@leichtgewicht/ip-codec": ["@leichtgewicht/ip-codec@2.0.5", "", {}, "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="], + "@pnpm/network.ca-file": ["@pnpm/network.ca-file@1.0.2", "", { "dependencies": { "graceful-fs": "4.2.10" } }, "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA=="], - "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + "@pnpm/npm-conf": ["@pnpm/npm-conf@3.0.2", "", { "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" } }, "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA=="], - "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], + "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], - "@mermaid-js/layout-elk": ["@mermaid-js/layout-elk@0.1.9", "", { "dependencies": { "d3": "^7.9.0", "elkjs": "^0.9.3" }, "peerDependencies": { "mermaid": "^11.0.2" } }, "sha512-HuvaqFZBr6yT9PpWYockvKAZPJVd89yn/UjOYPxhzbZxlybL2v+2BjVCg7MVH6vRs1irUohb/s42HEdec1CCZw=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], - "@mermaid-js/parser": ["@mermaid-js/parser@1.1.0", "", { "dependencies": { "langium": "^4.0.0" } }, "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw=="], + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA=="], - "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], - "@noble/hashes": ["@noble/hashes@1.4.0", "", {}, "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="], + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], - "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], - "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], - "@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], - "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], - "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], - "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@14.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw=="], + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], - "@octokit/plugin-retry": ["@octokit/plugin-retry@8.1.0", "", { "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=7" } }, "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw=="], + "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w=="], - "@octokit/plugin-throttling": ["@octokit/plugin-throttling@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^7.0.0" } }, "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg=="], + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], - "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], - "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], - "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], - "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "@peculiar/asn1-x509-attr": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], - "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], - "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g=="], + "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.10", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A=="], - "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.6.1", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.1", "@peculiar/asn1-pkcs8": "^2.6.1", "@peculiar/asn1-rsa": "^2.6.1", "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], - "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A=="], - "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.6.1", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.1", "@peculiar/asn1-pfx": "^2.6.1", "@peculiar/asn1-pkcs8": "^2.6.1", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "@peculiar/asn1-x509-attr": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], - "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA=="], + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], - "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.6.0", "", { "dependencies": { "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], - "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA=="], + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], - "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.6.1", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.1", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ=="], + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], - "@peculiar/x509": ["@peculiar/x509@1.14.3", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-csr": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.0", "@peculiar/asn1-pkcs9": "^2.6.0", "@peculiar/asn1-rsa": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA=="], + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], - "@pnpm/config.env-replace": ["@pnpm/config.env-replace@1.1.0", "", {}, "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="], + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], - "@pnpm/network.ca-file": ["@pnpm/network.ca-file@1.0.2", "", { "dependencies": { "graceful-fs": "4.2.10" } }, "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA=="], + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], - "@pnpm/npm-conf": ["@pnpm/npm-conf@3.0.2", "", { "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" } }, "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA=="], + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], - "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], + "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.1", "", { "os": "android", "cpu": "arm" }, "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA=="], @@ -843,68 +540,66 @@ "@semantic-release/release-notes-generator": ["@semantic-release/release-notes-generator@14.1.0", "", { "dependencies": { "conventional-changelog-angular": "^8.0.0", "conventional-changelog-writer": "^8.0.0", "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.0.0", "debug": "^4.0.0", "get-stream": "^7.0.0", "import-from-esm": "^2.0.0", "into-stream": "^7.0.0", "lodash-es": "^4.17.21", "read-package-up": "^11.0.0" }, "peerDependencies": { "semantic-release": ">=20.1.0" } }, "sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA=="], - "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], + "@shikijs/core": ["@shikijs/core@4.0.2", "", { "dependencies": { "@shikijs/primitive": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw=="], - "@sideway/formula": ["@sideway/formula@3.0.1", "", {}, "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag=="], - "@sideway/pinpoint": ["@sideway/pinpoint@2.0.0", "", {}, "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg=="], - "@simple-libs/stream-utils": ["@simple-libs/stream-utils@1.2.0", "", {}, "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA=="], + "@shikijs/langs": ["@shikijs/langs@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg=="], + + "@shikijs/primitive": ["@shikijs/primitive@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw=="], + + "@shikijs/themes": ["@shikijs/themes@4.0.2", "", { "dependencies": { "@shikijs/types": "4.0.2" } }, "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA=="], + + "@shikijs/types": ["@shikijs/types@4.0.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@sinclair/typebox": ["@sinclair/typebox@0.27.10", "", {}, "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA=="], + "@simple-libs/stream-utils": ["@simple-libs/stream-utils@1.2.0", "", {}, "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA=="], "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], - "@slorber/remark-comment": ["@slorber/remark-comment@1.0.0", "", { "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.1.0", "micromark-util-symbol": "^1.0.1" } }, "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA=="], - "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@svgr/babel-plugin-add-jsx-attribute": ["@svgr/babel-plugin-add-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g=="], + "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], - "@svgr/babel-plugin-remove-jsx-attribute": ["@svgr/babel-plugin-remove-jsx-attribute@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], - "@svgr/babel-plugin-remove-jsx-empty-expression": ["@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], - "@svgr/babel-plugin-replace-jsx-attribute-value": ["@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], - "@svgr/babel-plugin-svg-dynamic-title": ["@svgr/babel-plugin-svg-dynamic-title@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], - "@svgr/babel-plugin-svg-em-dimensions": ["@svgr/babel-plugin-svg-em-dimensions@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], - "@svgr/babel-plugin-transform-react-native-svg": ["@svgr/babel-plugin-transform-react-native-svg@8.1.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], - "@svgr/babel-plugin-transform-svg-component": ["@svgr/babel-plugin-transform-svg-component@8.0.0", "", { "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], - "@svgr/babel-preset": ["@svgr/babel-preset@8.1.0", "", { "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", "@svgr/babel-plugin-transform-svg-component": "8.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], - "@svgr/core": ["@svgr/core@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", "camelcase": "^6.2.0", "cosmiconfig": "^8.1.3", "snake-case": "^3.0.4" } }, "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], - "@svgr/hast-util-to-babel-ast": ["@svgr/hast-util-to-babel-ast@8.0.0", "", { "dependencies": { "@babel/types": "^7.21.3", "entities": "^4.4.0" } }, "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], - "@svgr/plugin-jsx": ["@svgr/plugin-jsx@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", "@svgr/hast-util-to-babel-ast": "8.0.0", "svg-parser": "^2.0.4" }, "peerDependencies": { "@svgr/core": "*" } }, "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], - "@svgr/plugin-svgo": ["@svgr/plugin-svgo@8.1.0", "", { "dependencies": { "cosmiconfig": "^8.1.3", "deepmerge": "^4.3.1", "svgo": "^3.0.2" }, "peerDependencies": { "@svgr/core": "*" } }, "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], - "@svgr/webpack": ["@svgr/webpack@8.1.0", "", { "dependencies": { "@babel/core": "^7.21.3", "@babel/plugin-transform-react-constant-elements": "^7.21.3", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.0", "@svgr/core": "8.1.0", "@svgr/plugin-jsx": "8.1.0", "@svgr/plugin-svgo": "8.1.0" } }, "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], - "@szmarczak/http-timer": ["@szmarczak/http-timer@5.0.1", "", { "dependencies": { "defer-to-connect": "^2.0.1" } }, "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], - "@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.0", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "postcss": "^8.5.10", "tailwindcss": "4.3.0" } }, "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w=="], "@ts-morph/common": ["@ts-morph/common@0.28.1", "", { "dependencies": { "minimatch": "^10.0.1", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.14" } }, "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g=="], - "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], - - "@types/bonjour": ["@types/bonjour@3.5.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ=="], - "@types/bun": ["@types/bun@1.3.12", "", { "dependencies": { "bun-types": "1.3.12" } }, "sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A=="], - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], - - "@types/connect-history-api-fallback": ["@types/connect-history-api-fallback@1.5.4", "", { "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw=="], - "@types/d3": ["@types/d3@7.4.3", "", { "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", "@types/d3-brush": "*", "@types/d3-chord": "*", "@types/d3-color": "*", "@types/d3-contour": "*", "@types/d3-delaunay": "*", "@types/d3-dispatch": "*", "@types/d3-drag": "*", "@types/d3-dsv": "*", "@types/d3-ease": "*", "@types/d3-fetch": "*", "@types/d3-force": "*", "@types/d3-format": "*", "@types/d3-geo": "*", "@types/d3-hierarchy": "*", "@types/d3-interpolate": "*", "@types/d3-path": "*", "@types/d3-polygon": "*", "@types/d3-quadtree": "*", "@types/d3-random": "*", "@types/d3-scale": "*", "@types/d3-scale-chromatic": "*", "@types/d3-selection": "*", "@types/d3-shape": "*", "@types/d3-time": "*", "@types/d3-time-format": "*", "@types/d3-timer": "*", "@types/d3-transition": "*", "@types/d3-zoom": "*" } }, "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww=="], "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], @@ -969,269 +664,97 @@ "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], - "@types/eslint": ["@types/eslint@9.6.1", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag=="], - - "@types/eslint-scope": ["@types/eslint-scope@3.7.7", "", { "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], - "@types/express": ["@types/express@4.17.25", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "^1" } }, "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw=="], - - "@types/express-serve-static-core": ["@types/express-serve-static-core@4.19.8", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA=="], - "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], - "@types/gtag.js": ["@types/gtag.js@0.0.20", "", {}, "sha512-wwAbk3SA2QeU67unN7zPxjEHmPmlXwZXZvQEpbEUQuMCRGgKyE1m6XDuTUA9b6pCGb/GqJmdfMOY5LuDjJSbbg=="], - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], - "@types/history": ["@types/history@4.7.11", "", {}, "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA=="], - - "@types/html-minifier-terser": ["@types/html-minifier-terser@6.1.0", "", {}, "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg=="], - - "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="], - - "@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="], - - "@types/http-proxy": ["@types/http-proxy@1.17.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw=="], - - "@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="], - - "@types/istanbul-lib-report": ["@types/istanbul-lib-report@3.0.3", "", { "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA=="], - - "@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="], - - "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], - "@types/mime": ["@types/mime@1.3.5", "", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="], - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], + "@types/node": ["@types/node@22.19.19", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew=="], "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], - "@types/prismjs": ["@types/prismjs@1.26.6", "", {}, "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw=="], + "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], - "@types/qs": ["@types/qs@6.15.0", "", {}, "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow=="], + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], - "@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="], - - "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], - - "@types/react-router": ["@types/react-router@5.1.20", "", { "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" } }, "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q=="], - - "@types/react-router-config": ["@types/react-router-config@5.0.11", "", { "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router": "^5.1.0" } }, "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw=="], - - "@types/react-router-dom": ["@types/react-router-dom@5.3.3", "", { "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router": "*" } }, "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw=="], - - "@types/retry": ["@types/retry@0.12.2", "", {}, "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow=="], - - "@types/sax": ["@types/sax@1.2.7", "", { "dependencies": { "@types/node": "*" } }, "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A=="], - - "@types/send": ["@types/send@0.17.6", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="], - - "@types/serve-index": ["@types/serve-index@1.9.4", "", { "dependencies": { "@types/express": "*" } }, "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug=="], - - "@types/serve-static": ["@types/serve-static@1.15.10", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="], - - "@types/sockjs": ["@types/sockjs@0.3.36", "", { "dependencies": { "@types/node": "*" } }, "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q=="], - - "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], - - "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - - "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - - "@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="], - - "@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="], + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], - "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], - - "@webassemblyjs/floating-point-hex-parser": ["@webassemblyjs/floating-point-hex-parser@1.13.2", "", {}, "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA=="], - - "@webassemblyjs/helper-api-error": ["@webassemblyjs/helper-api-error@1.13.2", "", {}, "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ=="], - - "@webassemblyjs/helper-buffer": ["@webassemblyjs/helper-buffer@1.14.1", "", {}, "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA=="], - - "@webassemblyjs/helper-numbers": ["@webassemblyjs/helper-numbers@1.13.2", "", { "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA=="], - - "@webassemblyjs/helper-wasm-bytecode": ["@webassemblyjs/helper-wasm-bytecode@1.13.2", "", {}, "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA=="], - - "@webassemblyjs/helper-wasm-section": ["@webassemblyjs/helper-wasm-section@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/wasm-gen": "1.14.1" } }, "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw=="], - - "@webassemblyjs/ieee754": ["@webassemblyjs/ieee754@1.13.2", "", { "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw=="], - - "@webassemblyjs/leb128": ["@webassemblyjs/leb128@1.13.2", "", { "dependencies": { "@xtuc/long": "4.2.2" } }, "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw=="], - - "@webassemblyjs/utf8": ["@webassemblyjs/utf8@1.13.2", "", {}, "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ=="], - - "@webassemblyjs/wasm-edit": ["@webassemblyjs/wasm-edit@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/helper-wasm-section": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-opt": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1", "@webassemblyjs/wast-printer": "1.14.1" } }, "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ=="], - - "@webassemblyjs/wasm-gen": ["@webassemblyjs/wasm-gen@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg=="], - - "@webassemblyjs/wasm-opt": ["@webassemblyjs/wasm-opt@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", "@webassemblyjs/wasm-gen": "1.14.1", "@webassemblyjs/wasm-parser": "1.14.1" } }, "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw=="], - - "@webassemblyjs/wasm-parser": ["@webassemblyjs/wasm-parser@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", "@webassemblyjs/ieee754": "1.13.2", "@webassemblyjs/leb128": "1.13.2", "@webassemblyjs/utf8": "1.13.2" } }, "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ=="], - - "@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw=="], - - "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], - - "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], - "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], - "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], - "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], - - "address": ["address@1.2.2", "", {}, "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA=="], - "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], - "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], - - "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], - - "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], - - "algoliasearch": ["algoliasearch@5.50.2", "", { "dependencies": { "@algolia/abtesting": "1.16.2", "@algolia/client-abtesting": "5.50.2", "@algolia/client-analytics": "5.50.2", "@algolia/client-common": "5.50.2", "@algolia/client-insights": "5.50.2", "@algolia/client-personalization": "5.50.2", "@algolia/client-query-suggestions": "5.50.2", "@algolia/client-search": "5.50.2", "@algolia/ingestion": "1.50.2", "@algolia/monitoring": "1.50.2", "@algolia/recommend": "5.50.2", "@algolia/requester-browser-xhr": "5.50.2", "@algolia/requester-fetch": "5.50.2", "@algolia/requester-node-http": "5.50.2" } }, "sha512-Tfp26yoNWurUjfgK4GOrVJQhSNXu9tJtHfFFNosgT2YClG+vPyUjX/gbC8rG39qLncnZg8Fj34iarQWpMkqefw=="], - - "algoliasearch-helper": ["algoliasearch-helper@3.28.1", "", { "dependencies": { "@algolia/events": "^4.0.1" }, "peerDependencies": { "algoliasearch": ">= 3.1 < 6" } }, "sha512-6iXpbkkrAI5HFpCWXlNmIDSBuoN/U1XnEvb2yJAoWfqrZ+DrybI7MQ5P5mthFaprmocq+zbi6HxnR28xnZAYBw=="], - - "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], - "ansi-html-community": ["ansi-html-community@0.0.8", "", { "bin": { "ansi-html": "bin/ansi-html" } }, "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], - "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], - - "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "argv-formatter": ["argv-formatter@1.0.0", "", {}, "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw=="], - "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], "array-ify": ["array-ify@1.0.0", "", {}, "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng=="], "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - "asn1js": ["asn1js@3.0.7", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ=="], - "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], - "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="], - - "babel-loader": ["babel-loader@9.2.1", "", { "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0", "webpack": ">=5" } }, "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA=="], - - "babel-plugin-dynamic-import-node": ["babel-plugin-dynamic-import-node@2.3.3", "", { "dependencies": { "object.assign": "^4.1.0" } }, "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ=="], - - "babel-plugin-polyfill-corejs2": ["babel-plugin-polyfill-corejs2@0.4.17", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w=="], - - "babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.13.0", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A=="], - - "babel-plugin-polyfill-regenerator": ["babel-plugin-polyfill-regenerator@0.6.8", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg=="], - "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="], - "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], "baseline-browser-mapping": ["baseline-browser-mapping@2.10.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g=="], - "batch": ["batch@0.6.1", "", {}, "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="], - "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - "big.js": ["big.js@5.2.2", "", {}, "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="], - - "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], - - "body-parser": ["body-parser@1.20.4", "", { "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "~1.2.0", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.14.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA=="], - - "bonjour-service": ["bonjour-service@1.3.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA=="], - - "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], - "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], - "boxen": ["boxen@6.2.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^6.2.0", "chalk": "^4.1.2", "cli-boxes": "^3.0.0", "string-width": "^5.0.1", "type-fest": "^2.5.0", "widest-line": "^4.0.1", "wrap-ansi": "^8.0.1" } }, "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw=="], - - "brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], + "brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], - "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], - "bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="], - "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], - "bundle-require": ["bundle-require@5.1.0", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.18" } }, "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA=="], - "bytes": ["bytes@3.0.0", "", {}, "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw=="], - - "bytestreamjs": ["bytestreamjs@2.0.1", "", {}, "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ=="], - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - "cacheable-lookup": ["cacheable-lookup@7.0.0", "", {}, "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="], - - "cacheable-request": ["cacheable-request@10.2.14", "", { "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", "http-cache-semantics": "^4.1.1", "keyv": "^4.5.3", "mimic-response": "^4.0.0", "normalize-url": "^8.0.0", "responselike": "^3.0.0" } }, "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ=="], - - "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], - "camel-case": ["camel-case@4.1.2", "", { "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="], - - "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - - "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], - "caniuse-lite": ["caniuse-lite@1.0.30001788", "", {}, "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="], @@ -1243,33 +766,23 @@ "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], - "cheerio": ["cheerio@1.0.0-rc.12", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q=="], - - "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], - "chevrotain": ["chevrotain@12.0.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "12.0.0", "@chevrotain/gast": "12.0.0", "@chevrotain/regexp-to-ast": "12.0.0", "@chevrotain/types": "12.0.0", "@chevrotain/utils": "12.0.0" } }, "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ=="], "chevrotain-allstar": ["chevrotain-allstar@0.4.1", "", { "dependencies": { "lodash-es": "^4.17.21" }, "peerDependencies": { "chevrotain": "^12.0.0" } }, "sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA=="], - "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], - "chrome-trace-event": ["chrome-trace-event@1.0.4", "", {}, "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="], - - "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], - - "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], - "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], - "cli-highlight": ["cli-highlight@2.1.11", "", { "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", "mz": "^2.4.0", "parse5": "^5.1.1", "parse5-htmlparser2-tree-adapter": "^6.0.0", "yargs": "^16.0.0" }, "bin": { "highlight": "bin/highlight" } }, "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg=="], "cli-table3": ["cli-table3@0.6.5", "", { "dependencies": { "string-width": "^4.2.0" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "client-only": ["client-only@0.0.1", "", {}, "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="], - "clone-deep": ["clone-deep@4.0.1", "", { "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" } }, "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], @@ -1277,27 +790,17 @@ "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], - - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], + "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - "combine-promises": ["combine-promises@1.2.0", "", {}, "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ=="], + "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], - "commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], - - "common-path-prefix": ["common-path-prefix@3.0.0", "", {}, "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w=="], + "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "compare-func": ["compare-func@2.0.0", "", { "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA=="], - "compressible": ["compressible@2.0.18", "", { "dependencies": { "mime-db": ">= 1.43.0 < 2" } }, "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg=="], - - "compression": ["compression@1.8.1", "", { "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" } }, "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w=="], + "compute-scroll-into-view": ["compute-scroll-into-view@3.1.1", "", {}, "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw=="], "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], @@ -1305,16 +808,8 @@ "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], - "configstore": ["configstore@6.0.0", "", { "dependencies": { "dot-prop": "^6.0.1", "graceful-fs": "^4.2.6", "unique-string": "^3.0.0", "write-file-atomic": "^3.0.3", "xdg-basedir": "^5.0.1" } }, "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA=="], - - "connect-history-api-fallback": ["connect-history-api-fallback@2.0.0", "", {}, "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA=="], - "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - "content-disposition": ["content-disposition@0.5.2", "", {}, "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA=="], - - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - "conventional-changelog-angular": ["conventional-changelog-angular@8.3.1", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg=="], "conventional-changelog-writer": ["conventional-changelog-writer@8.4.0", "", { "dependencies": { "@simple-libs/stream-utils": "^1.2.0", "conventional-commits-filter": "^5.0.0", "handlebars": "^4.7.7", "meow": "^13.0.0", "semver": "^7.5.2" }, "bin": { "conventional-changelog-writer": "dist/cli/index.js" } }, "sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g=="], @@ -1325,20 +820,8 @@ "convert-hrtime": ["convert-hrtime@5.0.0", "", {}, "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "cookie-signature": ["cookie-signature@1.0.7", "", {}, "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="], - - "copy-text-to-clipboard": ["copy-text-to-clipboard@3.2.2", "", {}, "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A=="], - - "copy-webpack-plugin": ["copy-webpack-plugin@11.0.0", "", { "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", "globby": "^13.1.1", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ=="], - "core-js": ["core-js@3.49.0", "", {}, "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg=="], - "core-js-compat": ["core-js-compat@3.49.0", "", { "dependencies": { "browserslist": "^4.28.1" } }, "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA=="], - "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], @@ -1349,38 +832,6 @@ "crypto-random-string": ["crypto-random-string@2.0.0", "", {}, "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="], - "css-blank-pseudo": ["css-blank-pseudo@7.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag=="], - - "css-declaration-sorter": ["css-declaration-sorter@7.4.0", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw=="], - - "css-has-pseudo": ["css-has-pseudo@7.0.3", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA=="], - - "css-loader": ["css-loader@6.11.0", "", { "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.1.0", "postcss-modules-local-by-default": "^4.0.5", "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g=="], - - "css-minimizer-webpack-plugin": ["css-minimizer-webpack-plugin@5.0.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "cssnano": "^6.0.1", "jest-worker": "^29.4.3", "postcss": "^8.4.24", "schema-utils": "^4.0.1", "serialize-javascript": "^6.0.1" }, "peerDependencies": { "webpack": "^5.0.0" } }, "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg=="], - - "css-prefers-color-scheme": ["css-prefers-color-scheme@10.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ=="], - - "css-select": ["css-select@4.3.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ=="], - - "css-tree": ["css-tree@2.3.1", "", { "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" } }, "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw=="], - - "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], - - "cssdb": ["cssdb@8.8.0", "", {}, "sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q=="], - - "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - - "cssnano": ["cssnano@6.1.2", "", { "dependencies": { "cssnano-preset-default": "^6.1.2", "lilconfig": "^3.1.1" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA=="], - - "cssnano-preset-advanced": ["cssnano-preset-advanced@6.1.2", "", { "dependencies": { "autoprefixer": "^10.4.19", "browserslist": "^4.23.0", "cssnano-preset-default": "^6.1.2", "postcss-discard-unused": "^6.0.5", "postcss-merge-idents": "^6.0.3", "postcss-reduce-idents": "^6.0.3", "postcss-zindex": "^6.0.2" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ=="], - - "cssnano-preset-default": ["cssnano-preset-default@6.1.2", "", { "dependencies": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", "cssnano-utils": "^4.0.2", "postcss-calc": "^9.0.1", "postcss-colormin": "^6.1.0", "postcss-convert-values": "^6.1.0", "postcss-discard-comments": "^6.0.2", "postcss-discard-duplicates": "^6.0.3", "postcss-discard-empty": "^6.0.3", "postcss-discard-overridden": "^6.0.2", "postcss-merge-longhand": "^6.0.5", "postcss-merge-rules": "^6.1.1", "postcss-minify-font-values": "^6.1.0", "postcss-minify-gradients": "^6.0.3", "postcss-minify-params": "^6.1.0", "postcss-minify-selectors": "^6.0.4", "postcss-normalize-charset": "^6.0.2", "postcss-normalize-display-values": "^6.0.2", "postcss-normalize-positions": "^6.0.2", "postcss-normalize-repeat-style": "^6.0.2", "postcss-normalize-string": "^6.0.2", "postcss-normalize-timing-functions": "^6.0.2", "postcss-normalize-unicode": "^6.1.0", "postcss-normalize-url": "^6.0.2", "postcss-normalize-whitespace": "^6.0.2", "postcss-ordered-values": "^6.0.2", "postcss-reduce-initial": "^6.1.0", "postcss-reduce-transforms": "^6.0.2", "postcss-svgo": "^6.0.3", "postcss-unique-selectors": "^6.0.4" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg=="], - - "cssnano-utils": ["cssnano-utils@4.0.2", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ=="], - - "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], "cytoscape": ["cytoscape@3.33.2", "", {}, "sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw=="], @@ -1457,93 +908,39 @@ "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], - "debounce": ["debounce@1.2.1", "", {}, "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], - "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], - "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], - "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], - - "default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="], - - "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], - - "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], - - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - - "define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], - - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - "del": ["del@6.1.1", "", { "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", "is-glob": "^4.0.1", "is-path-cwd": "^2.2.0", "is-path-inside": "^3.0.2", "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" } }, "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg=="], "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], - "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "detect-node": ["detect-node@2.1.0", "", {}, "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="], - - "detect-port": ["detect-port@1.6.1", "", { "dependencies": { "address": "^1.0.1", "debug": "4" }, "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" } }, "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q=="], + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], - "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], - - "dom-converter": ["dom-converter@0.2.0", "", { "dependencies": { "utila": "~0.4" } }, "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA=="], - - "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], - - "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], - - "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], - "dompurify": ["dompurify@3.4.0", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg=="], - "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], - - "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], - - "dot-prop": ["dot-prop@6.0.1", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="], + "dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], - "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - - "electron-to-chromium": ["electron-to-chromium@1.5.339", "", {}, "sha512-Is+0BBHJ4NrdpAYiperrmp53pLywG/yV/6lIMTAnhxvzj/Cmn5Q/ogSHC6AKe7X+8kPLxxFk0cs5oc/3j/fxIg=="], - - "elkjs": ["elkjs@0.9.3", "", {}, "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ=="], - - "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "emojilib": ["emojilib@2.4.0", "", {}, "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw=="], - "emojis-list": ["emojis-list@3.0.0", "", {}, "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="], + "enhanced-resolve": ["enhanced-resolve@5.21.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q=="], - "emoticon": ["emoticon@4.1.0", "", {}, "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ=="], - - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - - "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], - - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "env-ci": ["env-ci@11.2.0", "", { "dependencies": { "execa": "^8.0.0", "java-properties": "^1.0.2" } }, "sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA=="], @@ -1553,35 +950,17 @@ "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], + "esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "escape-goat": ["escape-goat@4.0.0", "", {}, "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg=="], - - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - - "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - - "eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], - - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - - "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], - - "estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="], + "escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "estree-util-attach-comments": ["estree-util-attach-comments@3.0.0", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw=="], @@ -1599,62 +978,30 @@ "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - - "eta": ["eta@2.2.0", "", {}, "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g=="], - - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - - "eval": ["eval@0.1.8", "", { "dependencies": { "@types/node": "*", "require-like": ">= 0.1.1" } }, "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw=="], - "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], - "eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], - "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - - "express": ["express@4.22.1", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.3", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.3.1", "fresh": "~0.5.2", "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", "serve-static": "~1.16.2", "setprototypeof": "1.2.0", "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g=="], + "execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], - "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], - "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], - "fast-redact": ["fast-redact@3.5.0", "", {}, "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="], - "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], - "fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="], - - "faye-websocket": ["faye-websocket@0.11.4", "", { "dependencies": { "websocket-driver": ">=0.5.1" } }, "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g=="], - "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], - "feed": ["feed@4.2.2", "", { "dependencies": { "xml-js": "^1.6.11" } }, "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ=="], - "figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="], - "file-loader": ["file-loader@6.2.0", "", { "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw=="], - "file-url": ["file-url@3.0.0", "", {}, "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "finalhandler": ["finalhandler@1.3.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "statuses": "~2.0.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], - - "find-cache-dir": ["find-cache-dir@4.0.0", "", { "dependencies": { "common-path-prefix": "^3.0.0", "pkg-dir": "^7.0.0" } }, "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg=="], - "find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], "find-up-simple": ["find-up-simple@1.0.1", "", {}, "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="], @@ -1663,88 +1010,56 @@ "fix-dts-default-cjs-exports": ["fix-dts-default-cjs-exports@1.0.1", "", { "dependencies": { "magic-string": "^0.30.17", "mlly": "^1.7.4", "rollup": "^4.34.8" } }, "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg=="], - "flat": ["flat@5.0.2", "", { "bin": { "flat": "cli.js" } }, "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="], - - "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="], - - "form-data-encoder": ["form-data-encoder@2.1.4", "", {}, "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw=="], - - "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], - - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - - "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], - - "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], + "framer-motion": ["framer-motion@12.38.0", "", { "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g=="], "from2": ["from2@2.3.0", "", { "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g=="], - "fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], + "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "fumadocs-core": ["fumadocs-core@16.8.10", "", { "dependencies": { "@orama/orama": "^3.1.18", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "js-yaml": "^4.1.1", "mdast-util-mdx": "^3.0.0", "mdast-util-to-markdown": "^2.1.2", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^4.0.2", "tinyglobby": "^0.2.16", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3" }, "peerDependencies": { "@mdx-js/mdx": "*", "@mixedbread/sdk": "0.x.x", "@orama/core": "1.x.x", "@oramacloud/client": "2.x.x", "@tanstack/react-router": "1.x.x", "@types/estree-jsx": "*", "@types/hast": "*", "@types/mdast": "*", "@types/react": "*", "algoliasearch": "5.x.x", "flexsearch": "*", "lucide-react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router": "7.x.x", "waku": "^0.26.0 || ^0.27.0 || ^1.0.0", "zod": "4.x.x" }, "optionalPeers": ["@mdx-js/mdx", "@mixedbread/sdk", "@orama/core", "@oramacloud/client", "@tanstack/react-router", "@types/estree-jsx", "@types/hast", "@types/mdast", "@types/react", "algoliasearch", "flexsearch", "lucide-react", "next", "react", "react-dom", "react-router", "waku", "zod"] }, "sha512-dXSk2tVMAlQQ5NOCwtu2n+2nw0nB6JCYvTKmCCImHJk8ZVy3Y3Y3qDIU9QUScD5Fsa/t3+k5Wce+mPdwqlcGRw=="], + + "fumadocs-mdx": ["fumadocs-mdx@15.0.4", "", { "dependencies": { "@mdx-js/mdx": "^3.1.1", "@standard-schema/spec": "^1.1.0", "chokidar": "^5.0.0", "esbuild": "^0.28.0", "estree-util-value-to-estree": "^3.5.0", "js-yaml": "^4.1.1", "mdast-util-mdx": "^3.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.4", "tinyexec": "^1.1.2", "tinyglobby": "^0.2.16", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3", "zod": "^4.4.3" }, "peerDependencies": { "@types/mdast": "*", "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "^16.7.0", "mdast-util-directive": "*", "next": "^15.3.0 || ^16.0.0", "react": "^19.2.0", "rolldown": "*", "vite": "7.x.x || 8.x.x" }, "optionalPeers": ["@types/mdast", "@types/mdx", "@types/react", "mdast-util-directive", "next", "react", "rolldown", "vite"], "bin": { "fumadocs-mdx": "./dist/bin.js" } }, "sha512-swJ7VB9x8fPjVAcH4xMg7qplgm7m6Hy3woB5s/yssBWVPkvET7wGOHoYZ05iW9TDIWruk5vyqwEDrwq3t4PZUw=="], + + "fumadocs-ui": ["fumadocs-ui@16.8.10", "", { "dependencies": { "@fumadocs/tailwind": "0.0.5", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-direction": "^1.1.1", "@radix-ui/react-navigation-menu": "^1.2.14", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-presence": "^1.1.5", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "class-variance-authority": "^0.7.1", "lucide-react": "^1.14.0", "motion": "^12.38.0", "next-themes": "^0.4.6", "react-remove-scroll": "^2.7.2", "rehype-raw": "^7.0.0", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^4.0.2", "tailwind-merge": "^3.5.0", "unist-util-visit": "^5.1.0" }, "peerDependencies": { "@takumi-rs/image-response": "*", "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "16.8.10", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0" }, "optionalPeers": ["@takumi-rs/image-response", "@types/mdx", "@types/react", "next"] }, "sha512-sw+ZBoNBFRqiKVK7Ig5r0E4TgOhdY/Eq2+rFRTpxN/eq0Bys9OSoIXxLNkUBzaj+YGaXU8jHY4qOsDQgymHVTQ=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], "function-timeout": ["function-timeout@1.0.2", "", {}, "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA=="], - "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + "geist": ["geist@1.7.0", "", { "peerDependencies": { "next": ">=13.2.0" } }, "sha512-ZaoiZwkSf0DwwB1ncdLKp+ggAldqxl5L1+SXaNIBGkPAqcu+xjVJLxlf3/S8vLt9UHx1xu5fz3lbzKCj5iOVdQ=="], "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-own-enumerable-property-symbols": ["get-own-enumerable-property-symbols@3.0.2", "", {}, "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], "get-stream": ["get-stream@7.0.1", "", {}, "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ=="], "git-log-parser": ["git-log-parser@1.2.1", "", { "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", "split2": "~1.0.0", "stream-combiner2": "~1.1.1", "through2": "~2.0.0", "traverse": "0.6.8" } }, "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ=="], - "github-slugger": ["github-slugger@1.5.0", "", {}, "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw=="], + "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "glob-to-regex.js": ["glob-to-regex.js@1.2.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ=="], - - "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - - "global-dirs": ["global-dirs@3.0.1", "", { "dependencies": { "ini": "2.0.0" } }, "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA=="], - "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "got": ["got@12.6.1", "", { "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", "cacheable-lookup": "^7.0.0", "cacheable-request": "^10.2.8", "decompress-response": "^6.0.0", "form-data-encoder": "^2.1.2", "get-stream": "^6.0.1", "http2-wrapper": "^2.1.10", "lowercase-keys": "^3.0.0", "p-cancelable": "^3.0.0", "responselike": "^3.0.0" } }, "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], - - "gzip-size": ["gzip-size@6.0.0", "", { "dependencies": { "duplexer": "^0.1.2" } }, "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q=="], - "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], - "handle-thing": ["handle-thing@2.0.1", "", {}, "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="], - "handlebars": ["handlebars@4.7.9", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ=="], "happy-dom": ["happy-dom@16.8.1", "", { "dependencies": { "webidl-conversions": "^7.0.0", "whatwg-mimetype": "^3.0.0" } }, "sha512-n0QrmT9lD81rbpKsyhnlz3DgnMZlaOkJPpgi746doA+HvaMC79bdWkwjrNnGJRvDrWTI8iOcJiVTJ5CdT/AZRw=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-yarn": ["has-yarn@3.0.0", "", {}, "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", "hastscript": "^9.0.0", "property-information": "^7.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", "web-namespaces": "^2.0.0" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], @@ -1755,6 +1070,8 @@ "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], "hast-util-to-parse5": ["hast-util-to-parse5@8.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "web-namespaces": "^2.0.0", "zwitch": "^2.0.0" } }, "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA=="], @@ -1763,80 +1080,36 @@ "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], - "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - "highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="], - "history": ["history@4.10.1", "", { "dependencies": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", "resolve-pathname": "^3.0.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0", "value-equal": "^1.0.1" } }, "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew=="], - - "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], - "hook-std": ["hook-std@4.0.0", "", {}, "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ=="], "hosted-git-info": ["hosted-git-info@9.0.2", "", { "dependencies": { "lru-cache": "^11.1.0" } }, "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg=="], - "hpack.js": ["hpack.js@2.1.6", "", { "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" } }, "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ=="], - - "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], - - "html-minifier-terser": ["html-minifier-terser@7.2.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "~5.3.2", "commander": "^10.0.0", "entities": "^4.4.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.15.1" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA=="], - - "html-tags": ["html-tags@3.3.1", "", {}, "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ=="], - "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], - "html-webpack-plugin": ["html-webpack-plugin@5.6.6", "", { "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" }, "optionalPeers": ["@rspack/core", "webpack"] }, "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw=="], - - "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], - - "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], - - "http-deceiver": ["http-deceiver@1.2.7", "", {}, "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw=="], - - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], - - "http-parser-js": ["http-parser-js@0.5.10", "", {}, "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA=="], - - "http-proxy": ["http-proxy@1.18.1", "", { "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ=="], - "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], - "http-proxy-middleware": ["http-proxy-middleware@2.0.9", "", { "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" }, "peerDependencies": { "@types/express": "^4.17.13" }, "optionalPeers": ["@types/express"] }, "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q=="], - - "http2-wrapper": ["http2-wrapper@2.2.1", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" } }, "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ=="], - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - - "hyperdyperid": ["hyperdyperid@1.2.0", "", {}, "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A=="], + "human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], - "icss-utils": ["icss-utils@5.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA=="], - "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "import-from-esm": ["import-from-esm@2.0.0", "", { "dependencies": { "debug": "^4.3.4", "import-meta-resolve": "^4.0.0" } }, "sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g=="], - "import-lazy": ["import-lazy@4.0.0", "", {}, "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw=="], - "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], - "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], - "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], "index-to-position": ["index-to-position@1.2.0", "", {}, "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="], - "infima": ["infima@0.2.0-alpha.45", "", {}, "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw=="], - "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], @@ -1849,28 +1122,16 @@ "into-stream": ["into-stream@7.0.0", "", { "dependencies": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" } }, "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw=="], - "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], - - "ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="], - "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], - "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], - - "is-ci": ["is-ci@3.0.1", "", { "dependencies": { "ci-info": "^3.2.0" }, "bin": { "is-ci": "bin.js" } }, "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], - "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], - - "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], @@ -1879,17 +1140,9 @@ "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], - "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], - - "is-installed-globally": ["is-installed-globally@0.4.0", "", { "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" } }, "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ=="], - - "is-network-error": ["is-network-error@1.3.1", "", {}, "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw=="], - - "is-npm": ["is-npm@6.1.0", "", {}, "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA=="], - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-obj": ["is-obj@1.0.1", "", {}, "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg=="], + "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], "is-path-cwd": ["is-path-cwd@2.2.0", "", {}, "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="], @@ -1897,39 +1150,21 @@ "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], - "is-plain-object": ["is-plain-object@2.0.4", "", { "dependencies": { "isobject": "^3.0.1" } }, "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="], - - "is-regexp": ["is-regexp@1.0.0", "", {}, "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA=="], - - "is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - - "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], + "is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], - "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - - "is-yarn-global": ["is-yarn-global@0.4.1", "", {}, "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ=="], - - "isarray": ["isarray@0.0.1", "", {}, "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="], + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "iso-datestring-validator": ["iso-datestring-validator@2.2.2", "", {}, "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="], - "isobject": ["isobject@3.0.1", "", {}, "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="], - "issue-parser": ["issue-parser@7.0.1", "", { "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.uniqby": "^4.7.0" } }, "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg=="], "java-properties": ["java-properties@1.0.2", "", {}, "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ=="], - "jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], - - "jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="], - - "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], - - "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="], + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], @@ -1939,41 +1174,45 @@ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], - "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - - "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "json-parse-better-errors": ["json-parse-better-errors@1.0.2", "", {}, "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="], "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], - "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], - "json-with-bigint": ["json-with-bigint@3.5.8", "", {}, "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], "katex": ["katex@0.16.45", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA=="], - "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], - "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + "langium": ["langium@4.2.2", "", { "dependencies": { "@chevrotain/regexp-to-ast": "~12.0.0", "chevrotain": "~12.0.0", "chevrotain-allstar": "~0.4.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.11", "vscode-uri": "~3.1.0" } }, "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ=="], - "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], - "langium": ["langium@4.2.2", "", { "dependencies": { "@chevrotain/regexp-to-ast": "~12.0.0", "chevrotain": "~12.0.0", "chevrotain-allstar": "~0.4.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.11", "vscode-uri": "~3.1.0" } }, "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], - "latest-version": ["latest-version@7.0.0", "", { "dependencies": { "package-json": "^8.1.0" } }, "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], - "launch-editor": ["launch-editor@2.13.2", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.3" } }, "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], - "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], @@ -1983,64 +1222,42 @@ "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], - "loader-runner": ["loader-runner@4.3.1", "", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="], - - "loader-utils": ["loader-utils@2.0.4", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="], - "locate-path": ["locate-path@3.0.0", "", { "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="], - "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], - "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], "lodash.capitalize": ["lodash.capitalize@4.2.1", "", {}, "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw=="], - "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], - "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], - "lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="], - - "lodash.uniq": ["lodash.uniq@4.5.0", "", {}, "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="], - "lodash.uniqby": ["lodash.uniqby@4.7.0", "", {}, "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - - "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], - - "lowercase-keys": ["lowercase-keys@3.0.0", "", {}, "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="], - "lru-cache": ["lru-cache@11.3.5", "", {}, "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw=="], + "lucide-react": ["lucide-react@1.14.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "make-asynchronous": ["make-asynchronous@1.1.0", "", { "dependencies": { "p-event": "^6.0.0", "type-fest": "^4.6.0", "web-worker": "^1.5.0" } }, "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg=="], "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], - "markdown-table": ["markdown-table@2.0.0", "", { "dependencies": { "repeat-string": "^1.0.0" } }, "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A=="], + "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], - "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + "marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], "marked-terminal": ["marked-terminal@7.3.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "ansi-regex": "^6.1.0", "chalk": "^5.4.1", "cli-highlight": "^2.1.11", "cli-table3": "^0.6.5", "node-emoji": "^2.2.0", "supports-hyperlinks": "^3.1.0" }, "peerDependencies": { "marked": ">=1 <16" } }, "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "mdast-util-directive": ["mdast-util-directive@3.1.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "parse-entities": "^4.0.0", "stringify-entities": "^4.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q=="], - "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], - "mdast-util-frontmatter": ["mdast-util-frontmatter@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "escape-string-regexp": "^5.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" } }, "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA=="], - "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], "mdast-util-gfm-autolink-literal": ["mdast-util-gfm-autolink-literal@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-find-and-replace": "^3.0.0", "micromark-util-character": "^2.0.0" } }, "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ=="], @@ -2069,32 +1286,18 @@ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], - "mdn-data": ["mdn-data@2.0.30", "", {}, "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="], - - "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], - - "memfs": ["memfs@4.57.2", "", { "dependencies": { "@jsonjoy.com/fs-core": "4.57.2", "@jsonjoy.com/fs-fsa": "4.57.2", "@jsonjoy.com/fs-node": "4.57.2", "@jsonjoy.com/fs-node-builtins": "4.57.2", "@jsonjoy.com/fs-node-to-fsa": "4.57.2", "@jsonjoy.com/fs-node-utils": "4.57.2", "@jsonjoy.com/fs-print": "4.57.2", "@jsonjoy.com/fs-snapshot": "4.57.2", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", "thingies": "^2.5.0", "tree-dump": "^1.0.3", "tslib": "^2.0.0" } }, "sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ=="], - "meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], - "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], - "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "mermaid": ["mermaid@11.14.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.1", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.1.0", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.19", "dompurify": "^3.3.1", "katex": "^0.16.25", "khroma": "^2.1.0", "lodash-es": "^4.17.23", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0" } }, "sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g=="], - "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], - "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], - "micromark-extension-directive": ["micromark-extension-directive@3.0.2", "", { "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "parse-entities": "^4.0.0" } }, "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA=="], - - "micromark-extension-frontmatter": ["micromark-extension-frontmatter@2.0.0", "", { "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg=="], - "micromark-extension-gfm": ["micromark-extension-gfm@3.0.0", "", { "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", "micromark-extension-gfm-strikethrough": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "micromark-extension-gfm-tagfilter": "^2.0.0", "micromark-extension-gfm-task-list-item": "^2.0.0", "micromark-util-combine-extensions": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w=="], "micromark-extension-gfm-autolink-literal": ["micromark-extension-gfm-autolink-literal@2.1.0", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw=="], @@ -2125,13 +1328,13 @@ "micromark-factory-mdx-expression": ["micromark-factory-mdx-expression@2.0.3", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-position-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ=="], - "micromark-factory-space": ["micromark-factory-space@1.1.0", "", { "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-types": "^1.0.0" } }, "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ=="], + "micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], "micromark-factory-title": ["micromark-factory-title@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw=="], "micromark-factory-whitespace": ["micromark-factory-whitespace@2.0.1", "", { "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ=="], - "micromark-util-character": ["micromark-util-character@1.2.0", "", { "dependencies": { "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.0" } }, "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg=="], + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], "micromark-util-chunked": ["micromark-util-chunked@2.0.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA=="], @@ -2157,7 +1360,7 @@ "micromark-util-subtokenize": ["micromark-util-subtokenize@2.1.0", "", { "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA=="], - "micromark-util-symbol": ["micromark-util-symbol@1.1.0", "", {}, "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag=="], + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], @@ -2165,29 +1368,21 @@ "mime": ["mime@4.1.0", "", { "bin": { "mime": "bin/cli.js" } }, "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw=="], - "mime-db": ["mime-db@1.33.0", "", {}, "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="], - - "mime-types": ["mime-types@2.1.18", "", { "dependencies": { "mime-db": "~1.33.0" } }, "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ=="], - "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "mimic-response": ["mimic-response@4.0.0", "", {}, "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="], - - "mini-css-extract-plugin": ["mini-css-extract-plugin@2.10.2", "", { "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" }, "peerDependencies": { "webpack": "^5.0.0" } }, "sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg=="], - - "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], - - "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], "mlly": ["mlly@1.8.2", "", { "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.3" } }, "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA=="], - "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + "motion": ["motion@12.38.0", "", { "dependencies": { "framer-motion": "^12.38.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "motion-dom": ["motion-dom@12.38.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA=="], - "multicast-dns": ["multicast-dns@7.2.5", "", { "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg=="], + "motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], @@ -2195,59 +1390,35 @@ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], - "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], - "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], "nerf-dart": ["nerf-dart@1.0.0", "", {}, "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g=="], - "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], + "next": ["next@16.2.6", "", { "dependencies": { "@next/env": "16.2.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.6", "@next/swc-darwin-x64": "16.2.6", "@next/swc-linux-arm64-gnu": "16.2.6", "@next/swc-linux-arm64-musl": "16.2.6", "@next/swc-linux-x64-gnu": "16.2.6", "@next/swc-linux-x64-musl": "16.2.6", "@next/swc-win32-arm64-msvc": "16.2.6", "@next/swc-win32-x64-msvc": "16.2.6", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw=="], - "node-emoji": ["node-emoji@2.2.0", "", { "dependencies": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", "emojilib": "^2.4.0", "skin-tone": "^2.0.0" } }, "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw=="], + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "node-releases": ["node-releases@2.0.37", "", {}, "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg=="], + "node-emoji": ["node-emoji@2.2.0", "", { "dependencies": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", "emojilib": "^2.4.0", "skin-tone": "^2.0.0" } }, "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw=="], "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], - "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], - "normalize-url": ["normalize-url@9.0.0", "", {}, "sha512-z9nC87iaZXXySbWWtTHfCFJyFvKaUAW6lODhikG7ILSbVgmwuFjUqkgnheHvAUcGedO29e2QGBRXMUD64aurqQ=="], "npm": ["npm@11.12.1", "", { "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^9.4.2", "@npmcli/config": "^10.8.1", "@npmcli/fs": "^5.0.0", "@npmcli/map-workspaces": "^5.0.3", "@npmcli/metavuln-calculator": "^9.0.3", "@npmcli/package-json": "^7.0.5", "@npmcli/promise-spawn": "^9.0.1", "@npmcli/redact": "^4.0.0", "@npmcli/run-script": "^10.0.4", "@sigstore/tuf": "^4.0.2", "abbrev": "^4.0.0", "archy": "~1.0.0", "cacache": "^20.0.4", "chalk": "^5.6.2", "ci-info": "^4.4.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", "glob": "^13.0.6", "graceful-fs": "^4.2.11", "hosted-git-info": "^9.0.2", "ini": "^6.0.0", "init-package-json": "^8.2.5", "is-cidr": "^6.0.3", "json-parse-even-better-errors": "^5.0.0", "libnpmaccess": "^10.0.3", "libnpmdiff": "^8.1.5", "libnpmexec": "^10.2.5", "libnpmfund": "^7.0.19", "libnpmorg": "^8.0.1", "libnpmpack": "^9.1.5", "libnpmpublish": "^11.1.3", "libnpmsearch": "^9.0.1", "libnpmteam": "^8.0.2", "libnpmversion": "^8.0.3", "make-fetch-happen": "^15.0.5", "minimatch": "^10.2.4", "minipass": "^7.1.3", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", "node-gyp": "^12.2.0", "nopt": "^9.0.0", "npm-audit-report": "^7.0.0", "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.2", "npm-pick-manifest": "^11.0.3", "npm-profile": "^12.0.1", "npm-registry-fetch": "^19.1.1", "npm-user-validate": "^4.0.0", "p-map": "^7.0.4", "pacote": "^21.5.0", "parse-conflict-json": "^5.0.1", "proc-log": "^6.1.0", "qrcode-terminal": "^0.12.0", "read": "^5.0.1", "semver": "^7.7.4", "spdx-expression-parse": "^4.0.0", "ssri": "^13.0.1", "supports-color": "^10.2.2", "tar": "^7.5.11", "text-table": "~0.2.0", "tiny-relative-date": "^2.0.2", "treeverse": "^3.0.0", "validate-npm-package-name": "^7.0.2", "which": "^6.0.1" }, "bin": { "npm": "bin/npm-cli.js", "npx": "bin/npx-cli.js" } }, "sha512-zcoUuF1kezGSAo0CqtvoLXX3mkRqzuqYdL6Y5tdo8g69NVV3CkjQ6ZBhBgB4d7vGkPcV6TcvLi3GRKPDFX+xTA=="], - "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - - "nprogress": ["nprogress@0.2.0", "", {}, "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA=="], - - "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - - "null-loader": ["null-loader@4.0.1", "", { "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg=="], + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - - "obuf": ["obuf@1.1.2", "", {}, "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="], - "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - - "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + "oniguruma-parser": ["oniguruma-parser@0.12.2", "", {}, "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw=="], - "opener": ["opener@1.5.2", "", { "bin": { "opener": "bin/opener-bin.js" } }, "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A=="], - - "p-cancelable": ["p-cancelable@3.0.0", "", {}, "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw=="], + "oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="], "p-each-series": ["p-each-series@3.0.0", "", {}, "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw=="], @@ -2255,32 +1426,22 @@ "p-filter": ["p-filter@4.1.0", "", { "dependencies": { "p-map": "^7.0.1" } }, "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw=="], - "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], - "p-is-promise": ["p-is-promise@3.0.0", "", {}, "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ=="], "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], - "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - - "p-queue": ["p-queue@6.6.2", "", { "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="], + "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], "p-reduce": ["p-reduce@3.0.0", "", {}, "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q=="], - "p-retry": ["p-retry@6.2.1", "", { "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ=="], - - "p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "^1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], + "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], "p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="], - "package-json": ["package-json@8.1.1", "", { "dependencies": { "got": "^12.1.0", "registry-auth-token": "^5.0.1", "registry-url": "^6.0.0", "semver": "^7.3.7" } }, "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA=="], - "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="], - "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], - "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], @@ -2289,15 +1450,9 @@ "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="], - "parse-numeric-range": ["parse-numeric-range@1.3.0", "", {}, "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ=="], - "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], - "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], - - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - - "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], + "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@6.0.1", "", { "dependencies": { "parse5": "^6.0.1" } }, "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="], "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], @@ -2307,21 +1462,17 @@ "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], - "path-is-inside": ["path-is-inside@1.0.2", "", {}, "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w=="], - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "path-to-regexp": ["path-to-regexp@1.9.0", "", { "dependencies": { "isarray": "0.0.1" } }, "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g=="], - "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "pify": ["pify@3.0.0", "", {}, "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg=="], @@ -2335,227 +1486,49 @@ "pkg-conf": ["pkg-conf@2.1.0", "", { "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" } }, "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g=="], - "pkg-dir": ["pkg-dir@7.0.0", "", { "dependencies": { "find-up": "^6.3.0" } }, "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA=="], - "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], "pkg-up": ["pkg-up@3.1.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="], - "pkijs": ["pkijs@3.4.0", "", { "dependencies": { "@noble/hashes": "1.4.0", "asn1js": "^3.0.6", "bytestreamjs": "^2.0.1", "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw=="], - "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], - "postcss": ["postcss@8.5.10", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ=="], - - "postcss-attribute-case-insensitive": ["postcss-attribute-case-insensitive@7.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw=="], - - "postcss-calc": ["postcss-calc@9.0.1", "", { "dependencies": { "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ=="], - - "postcss-clamp": ["postcss-clamp@4.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.6" } }, "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow=="], - - "postcss-color-functional-notation": ["postcss-color-functional-notation@7.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw=="], - - "postcss-color-hex-alpha": ["postcss-color-hex-alpha@10.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w=="], - - "postcss-color-rebeccapurple": ["postcss-color-rebeccapurple@10.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ=="], - - "postcss-colormin": ["postcss-colormin@6.1.0", "", { "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw=="], - - "postcss-convert-values": ["postcss-convert-values@6.1.0", "", { "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w=="], - - "postcss-custom-media": ["postcss-custom-media@11.0.6", "", { "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/media-query-list-parser": "^4.0.3" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw=="], - - "postcss-custom-properties": ["postcss-custom-properties@14.0.6", "", { "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ=="], - - "postcss-custom-selectors": ["postcss-custom-selectors@8.0.5", "", { "dependencies": { "@csstools/cascade-layer-name-parser": "^2.0.5", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg=="], - - "postcss-dir-pseudo-class": ["postcss-dir-pseudo-class@9.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA=="], - - "postcss-discard-comments": ["postcss-discard-comments@6.0.2", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw=="], - - "postcss-discard-duplicates": ["postcss-discard-duplicates@6.0.3", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw=="], - - "postcss-discard-empty": ["postcss-discard-empty@6.0.3", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ=="], - - "postcss-discard-overridden": ["postcss-discard-overridden@6.0.2", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ=="], - - "postcss-discard-unused": ["postcss-discard-unused@6.0.5", "", { "dependencies": { "postcss-selector-parser": "^6.0.16" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA=="], - - "postcss-double-position-gradients": ["postcss-double-position-gradients@6.0.4", "", { "dependencies": { "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g=="], - - "postcss-focus-visible": ["postcss-focus-visible@10.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA=="], - - "postcss-focus-within": ["postcss-focus-within@9.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw=="], - - "postcss-font-variant": ["postcss-font-variant@5.0.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA=="], - - "postcss-gap-properties": ["postcss-gap-properties@6.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw=="], - - "postcss-image-set-function": ["postcss-image-set-function@7.0.0", "", { "dependencies": { "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA=="], - - "postcss-lab-function": ["postcss-lab-function@7.0.12", "", { "dependencies": { "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/utilities": "^2.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w=="], + "postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="], "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], - "postcss-loader": ["postcss-loader@7.3.4", "", { "dependencies": { "cosmiconfig": "^8.3.5", "jiti": "^1.20.0", "semver": "^7.5.4" }, "peerDependencies": { "postcss": "^7.0.0 || ^8.0.1", "webpack": "^5.0.0" } }, "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A=="], - - "postcss-logical": ["postcss-logical@8.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA=="], - - "postcss-merge-idents": ["postcss-merge-idents@6.0.3", "", { "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g=="], - - "postcss-merge-longhand": ["postcss-merge-longhand@6.0.5", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^6.1.1" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w=="], - - "postcss-merge-rules": ["postcss-merge-rules@6.1.1", "", { "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", "cssnano-utils": "^4.0.2", "postcss-selector-parser": "^6.0.16" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ=="], - - "postcss-minify-font-values": ["postcss-minify-font-values@6.1.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg=="], - - "postcss-minify-gradients": ["postcss-minify-gradients@6.0.3", "", { "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q=="], - - "postcss-minify-params": ["postcss-minify-params@6.1.0", "", { "dependencies": { "browserslist": "^4.23.0", "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA=="], - - "postcss-minify-selectors": ["postcss-minify-selectors@6.0.4", "", { "dependencies": { "postcss-selector-parser": "^6.0.16" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ=="], - - "postcss-modules-extract-imports": ["postcss-modules-extract-imports@3.1.0", "", { "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q=="], - - "postcss-modules-local-by-default": ["postcss-modules-local-by-default@4.2.0", "", { "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw=="], - - "postcss-modules-scope": ["postcss-modules-scope@3.2.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA=="], - - "postcss-modules-values": ["postcss-modules-values@4.0.0", "", { "dependencies": { "icss-utils": "^5.0.0" }, "peerDependencies": { "postcss": "^8.1.0" } }, "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ=="], - - "postcss-nesting": ["postcss-nesting@13.0.2", "", { "dependencies": { "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ=="], - - "postcss-normalize-charset": ["postcss-normalize-charset@6.0.2", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ=="], - - "postcss-normalize-display-values": ["postcss-normalize-display-values@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg=="], - - "postcss-normalize-positions": ["postcss-normalize-positions@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q=="], - - "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ=="], - - "postcss-normalize-string": ["postcss-normalize-string@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ=="], - - "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA=="], - - "postcss-normalize-unicode": ["postcss-normalize-unicode@6.1.0", "", { "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg=="], - - "postcss-normalize-url": ["postcss-normalize-url@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ=="], - - "postcss-normalize-whitespace": ["postcss-normalize-whitespace@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q=="], - - "postcss-opacity-percentage": ["postcss-opacity-percentage@3.0.0", "", { "peerDependencies": { "postcss": "^8.4" } }, "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ=="], - - "postcss-ordered-values": ["postcss-ordered-values@6.0.2", "", { "dependencies": { "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q=="], - - "postcss-overflow-shorthand": ["postcss-overflow-shorthand@6.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q=="], - - "postcss-page-break": ["postcss-page-break@3.0.4", "", { "peerDependencies": { "postcss": "^8" } }, "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ=="], - - "postcss-place": ["postcss-place@10.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw=="], - - "postcss-preset-env": ["postcss-preset-env@10.6.1", "", { "dependencies": { "@csstools/postcss-alpha-function": "^1.0.1", "@csstools/postcss-cascade-layers": "^5.0.2", "@csstools/postcss-color-function": "^4.0.12", "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", "@csstools/postcss-color-mix-function": "^3.0.12", "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", "@csstools/postcss-content-alt-text": "^2.0.8", "@csstools/postcss-contrast-color-function": "^2.0.12", "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", "@csstools/postcss-gamut-mapping": "^2.0.11", "@csstools/postcss-gradients-interpolation-method": "^5.0.12", "@csstools/postcss-hwb-function": "^4.0.12", "@csstools/postcss-ic-unit": "^4.0.4", "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.3", "@csstools/postcss-light-dark-function": "^2.0.11", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", "@csstools/postcss-logical-viewport-units": "^3.0.4", "@csstools/postcss-media-minmax": "^2.0.9", "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.1", "@csstools/postcss-oklab-function": "^4.0.12", "@csstools/postcss-position-area-property": "^1.0.0", "@csstools/postcss-progressive-custom-properties": "^4.2.1", "@csstools/postcss-property-rule-prelude-list": "^1.0.0", "@csstools/postcss-random-function": "^2.0.1", "@csstools/postcss-relative-color-syntax": "^3.0.12", "@csstools/postcss-scope-pseudo-class": "^4.0.1", "@csstools/postcss-sign-functions": "^1.1.4", "@csstools/postcss-stepped-value-functions": "^4.0.9", "@csstools/postcss-syntax-descriptor-syntax-production": "^1.0.1", "@csstools/postcss-system-ui-font-family": "^1.0.0", "@csstools/postcss-text-decoration-shorthand": "^4.0.3", "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.23", "browserslist": "^4.28.1", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.3", "css-prefers-color-scheme": "^10.0.0", "cssdb": "^8.6.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", "postcss-color-functional-notation": "^7.0.12", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", "postcss-double-position-gradients": "^6.0.4", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", "postcss-lab-function": "^7.0.12", "postcss-logical": "^8.1.0", "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", "postcss-place": "^10.0.0", "postcss-pseudo-class-any-link": "^10.0.1", "postcss-replace-overflow-wrap": "^4.0.0", "postcss-selector-not": "^8.0.1" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g=="], - - "postcss-pseudo-class-any-link": ["postcss-pseudo-class-any-link@10.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q=="], - - "postcss-reduce-idents": ["postcss-reduce-idents@6.0.3", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA=="], - - "postcss-reduce-initial": ["postcss-reduce-initial@6.1.0", "", { "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw=="], - - "postcss-reduce-transforms": ["postcss-reduce-transforms@6.0.2", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA=="], - - "postcss-replace-overflow-wrap": ["postcss-replace-overflow-wrap@4.0.0", "", { "peerDependencies": { "postcss": "^8.0.3" } }, "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw=="], - - "postcss-selector-not": ["postcss-selector-not@8.0.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA=="], - - "postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], - - "postcss-sort-media-queries": ["postcss-sort-media-queries@5.2.0", "", { "dependencies": { "sort-css-media-queries": "2.2.0" }, "peerDependencies": { "postcss": "^8.4.23" } }, "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA=="], - - "postcss-svgo": ["postcss-svgo@6.0.3", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.2.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g=="], - - "postcss-unique-selectors": ["postcss-unique-selectors@6.0.4", "", { "dependencies": { "postcss-selector-parser": "^6.0.16" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg=="], - - "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], - - "postcss-zindex": ["postcss-zindex@6.0.2", "", { "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg=="], - "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], - "pretty-error": ["pretty-error@4.0.0", "", { "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw=="], - "pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="], - "pretty-time": ["pretty-time@1.1.0", "", {}, "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA=="], - - "prism-react-renderer": ["prism-react-renderer@2.4.1", "", { "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": ">=16.0.0" } }, "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig=="], - - "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], - "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "process-warning": ["process-warning@3.0.0", "", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], - "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], - - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], - "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], "proto-list": ["proto-list@1.2.4", "", {}, "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - - "pupa": ["pupa@3.3.0", "", { "dependencies": { "escape-goat": "^4.0.0" } }, "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA=="], - - "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], - - "pvutils": ["pvutils@1.1.5", "", {}, "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA=="], - - "qs": ["qs@6.14.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], "quick-format-unescaped": ["quick-format-unescaped@4.0.4", "", {}, "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="], - "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], - "ramda": ["ramda@0.27.2", "", {}, "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - - "range-parser": ["range-parser@1.2.0", "", {}, "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A=="], - - "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], - "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], "react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="], "react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="], - "react-fast-compare": ["react-fast-compare@3.2.2", "", {}, "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="], - - "react-helmet-async": ["@slorber/react-helmet-async@1.3.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "invariant": "^2.2.4", "prop-types": "^15.7.2", "react-fast-compare": "^3.2.0", "shallowequal": "^1.1.0" }, "peerDependencies": { "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A=="], - - "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], - - "react-json-view-lite": ["react-json-view-lite@2.5.0", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g=="], - - "react-loadable": ["@docusaurus/react-loadable@6.0.0", "", { "dependencies": { "@types/react": "*" }, "peerDependencies": { "react": "*" } }, "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ=="], + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], - "react-loadable-ssr-addon-v5-slorber": ["react-loadable-ssr-addon-v5-slorber@1.0.3", "", { "dependencies": { "@babel/runtime": "^7.10.3" }, "peerDependencies": { "react-loadable": "*", "webpack": ">=4.41.1 || 5.x" } }, "sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ=="], + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - "react-router": ["react-router@5.3.4", "", { "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.2", "react-is": "^16.6.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, "peerDependencies": { "react": ">=15" } }, "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA=="], - - "react-router-config": ["react-router-config@5.1.1", "", { "dependencies": { "@babel/runtime": "^7.1.2" }, "peerDependencies": { "react": ">=15", "react-router": ">=5" } }, "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg=="], - - "react-router-dom": ["react-router-dom@5.3.4", "", { "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, "peerDependencies": { "react": ">=15" } }, "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ=="], + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], "read-package-up": ["read-package-up@11.0.0", "", { "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", "type-fest": "^4.6.0" } }, "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ=="], @@ -2563,7 +1536,7 @@ "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], @@ -2575,33 +1548,19 @@ "recma-stringify": ["recma-stringify@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-to-js": "^2.0.0", "unified": "^11.0.0", "vfile": "^6.0.0" } }, "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g=="], - "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], - - "regenerate": ["regenerate@1.4.2", "", {}, "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="], + "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], - "regenerate-unicode-properties": ["regenerate-unicode-properties@10.2.2", "", { "dependencies": { "regenerate": "^1.4.2" } }, "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g=="], + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], - "regexpu-core": ["regexpu-core@6.4.0", "", { "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.2.1" } }, "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA=="], + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], "registry-auth-token": ["registry-auth-token@5.1.1", "", { "dependencies": { "@pnpm/npm-conf": "^3.0.2" } }, "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q=="], - "registry-url": ["registry-url@6.0.1", "", { "dependencies": { "rc": "1.2.8" } }, "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q=="], - - "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], - - "regjsparser": ["regjsparser@0.13.1", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw=="], - "rehype-raw": ["rehype-raw@7.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", "vfile": "^6.0.0" } }, "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww=="], "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], - "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], - - "remark-directive": ["remark-directive@3.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-directive": "^3.0.0", "micromark-extension-directive": "^3.0.0", "unified": "^11.0.0" } }, "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A=="], - - "remark-emoji": ["remark-emoji@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.2", "emoticon": "^4.0.1", "mdast-util-find-and-replace": "^3.0.1", "node-emoji": "^2.1.0", "unified": "^11.0.4" } }, "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg=="], - - "remark-frontmatter": ["remark-frontmatter@5.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0", "unified": "^11.0.0" } }, "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ=="], + "remark": ["remark@15.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A=="], "remark-gfm": ["remark-gfm@4.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", "micromark-extension-gfm": "^3.0.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.0" } }, "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg=="], @@ -2613,30 +1572,12 @@ "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", "unified": "^11.0.0" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], - "renderkid": ["renderkid@3.0.0", "", { "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" } }, "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg=="], - - "repeat-string": ["repeat-string@1.6.1", "", {}, "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - - "require-like": ["require-like@0.1.2", "", {}, "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A=="], - - "requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="], - "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], - "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], - "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - "resolve-pathname": ["resolve-pathname@3.0.0", "", {}, "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="], - - "responselike": ["responselike@3.0.0", "", { "dependencies": { "lowercase-keys": "^3.0.0" } }, "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg=="], - - "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], @@ -2647,35 +1588,19 @@ "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], - "rtlcss": ["rtlcss@4.3.0", "", { "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0", "postcss": "^8.4.21", "strip-json-comments": "^3.1.1" }, "bin": { "rtlcss": "bin/rtlcss.js" } }, "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig=="], - - "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], - "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - "sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="], - "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], - "schema-dts": ["schema-dts@1.1.5", "", {}, "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg=="], - - "schema-utils": ["schema-utils@3.3.0", "", { "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg=="], - - "search-insights": ["search-insights@2.17.3", "", {}, "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ=="], - - "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], - - "select-hose": ["select-hose@2.0.0", "", {}, "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg=="], - - "selfsigned": ["selfsigned@5.5.0", "", { "dependencies": { "@peculiar/x509": "^1.14.2", "pkijs": "^3.3.3" } }, "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew=="], + "scroll-into-view-if-needed": ["scroll-into-view-if-needed@3.1.0", "", { "dependencies": { "compute-scroll-into-view": "^3.0.2" } }, "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ=="], "semantic-release": ["semantic-release@25.0.3", "", { "dependencies": { "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^12.0.0", "@semantic-release/npm": "^13.1.1", "@semantic-release/release-notes-generator": "^14.1.0", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", "debug": "^4.0.0", "env-ci": "^11.0.0", "execa": "^9.0.0", "figures": "^6.0.0", "find-versions": "^6.0.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^4.0.0", "hosted-git-info": "^9.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", "marked": "^15.0.0", "marked-terminal": "^7.3.0", "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", "read-package-up": "^12.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", "signale": "^1.2.1", "yargs": "^18.0.0" }, "bin": { "semantic-release": "bin/semantic-release.js" } }, "sha512-WRgl5GcypwramYX4HV+eQGzUbD7UUbljVmS+5G1uMwX/wLgYuJAxGeerXJDMO2xshng4+FXqCgyB5QfClV6WjA=="], @@ -2685,70 +1610,30 @@ "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - "semver-diff": ["semver-diff@4.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA=="], - "semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="], - "send": ["send@0.19.2", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "~0.5.2", "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "~2.4.1", "range-parser": "~1.2.1", "statuses": "~2.0.2" } }, "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg=="], - - "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], - - "serve-handler": ["serve-handler@6.1.7", "", { "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg=="], - - "serve-index": ["serve-index@1.9.2", "", { "dependencies": { "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", "http-errors": "~1.8.0", "mime-types": "~2.1.35", "parseurl": "~1.3.3" } }, "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ=="], - - "serve-static": ["serve-static@1.16.3", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "~0.19.1" } }, "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA=="], - - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - - "shallow-clone": ["shallow-clone@3.0.1", "", { "dependencies": { "kind-of": "^6.0.2" } }, "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA=="], - - "shallowequal": ["shallowequal@1.1.0", "", {}, "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="], + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], - - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + "shiki": ["shiki@4.0.2", "", { "dependencies": { "@shikijs/core": "4.0.2", "@shikijs/engine-javascript": "4.0.2", "@shikijs/engine-oniguruma": "4.0.2", "@shikijs/langs": "4.0.2", "@shikijs/themes": "4.0.2", "@shikijs/types": "4.0.2", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ=="], - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "signale": ["signale@1.4.0", "", { "dependencies": { "chalk": "^2.3.2", "figures": "^2.0.0", "pkg-conf": "^2.1.0" } }, "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w=="], - "sirv": ["sirv@2.0.4", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ=="], - - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], - - "sitemap": ["sitemap@7.1.3", "", { "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, "bin": { "sitemap": "dist/cli.js" } }, "sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw=="], - "skin-tone": ["skin-tone@2.0.0", "", { "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" } }, "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], - "snake-case": ["snake-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg=="], - - "sockjs": ["sockjs@0.3.24", "", { "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ=="], - "sonic-boom": ["sonic-boom@3.8.1", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg=="], - "sort-css-media-queries": ["sort-css-media-queries@2.2.0", "", {}, "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA=="], - "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], - "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], "spawn-error-forwarder": ["spawn-error-forwarder@1.0.0", "", {}, "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g=="], @@ -2761,625 +1646,285 @@ "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], - "spdy": ["spdy@4.0.2", "", { "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" } }, "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA=="], - - "spdy-transport": ["spdy-transport@3.0.0", "", { "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", "hpack.js": "^2.1.6", "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" } }, "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw=="], - "split2": ["split2@1.0.0", "", { "dependencies": { "through2": "~2.0.0" } }, "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg=="], - "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - - "srcset": ["srcset@4.0.0", "", {}, "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw=="], - - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - - "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - "stream-combiner2": ["stream-combiner2@1.1.1", "", { "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw=="], - "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "stringify-object": ["stringify-object@3.3.0", "", { "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" } }, "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw=="], - - "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], - "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + "strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - - "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], - "stylehacks": ["stylehacks@6.1.1", "", { "dependencies": { "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.16" }, "peerDependencies": { "postcss": "^8.4.31" } }, "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg=="], - - "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], - - "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], - - "super-regex": ["super-regex@1.1.0", "", { "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" } }, "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ=="], - - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - - "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], - - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - - "svg-parser": ["svg-parser@2.0.4", "", {}, "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="], - - "svgo": ["svgo@3.3.3", "", { "dependencies": { "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0", "sax": "^1.5.0" }, "bin": "./bin/svgo" }, "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng=="], - - "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], - - "tailwindcss": ["tailwindcss@4.2.2", "", {}, "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="], - - "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], - - "temp-dir": ["temp-dir@2.0.0", "", {}, "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg=="], - - "tempy": ["tempy@1.0.1", "", { "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" } }, "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w=="], - - "terser": ["terser@5.46.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ=="], - - "terser-webpack-plugin": ["terser-webpack-plugin@5.4.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g=="], - - "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], - - "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], - - "thingies": ["thingies@2.6.0", "", { "peerDependencies": { "tslib": "^2" } }, "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg=="], - - "thread-stream": ["thread-stream@2.7.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw=="], - - "through2": ["through2@2.0.5", "", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="], - - "thunky": ["thunky@1.1.0", "", {}, "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="], - - "time-span": ["time-span@5.1.0", "", { "dependencies": { "convert-hrtime": "^5.0.0" } }, "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA=="], - - "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - - "tiny-warning": ["tiny-warning@1.0.3", "", {}, "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="], - - "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - - "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], - - "tinypool": ["tinypool@1.1.1", "", {}, "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg=="], - - "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - - "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], - - "traverse": ["traverse@0.6.8", "", {}, "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA=="], - - "tree-dump": ["tree-dump@1.1.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA=="], - - "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], - - "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], - - "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - - "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], - - "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], - - "ts-morph": ["ts-morph@27.0.2", "", { "dependencies": { "@ts-morph/common": "~0.28.1", "code-block-writer": "^13.0.3" } }, "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w=="], - - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - - "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], - - "tsyringe": ["tsyringe@4.10.0", "", { "dependencies": { "tslib": "^1.9.3" } }, "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw=="], - - "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], - - "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], - - "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], - - "typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="], - - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - - "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], - - "uint8arrays": ["uint8arrays@3.0.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA=="], - - "undici": ["undici@7.25.0", "", {}, "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ=="], - - "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], - - "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], - - "unicode-emoji-modifier-base": ["unicode-emoji-modifier-base@1.0.0", "", {}, "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g=="], - - "unicode-match-property-ecmascript": ["unicode-match-property-ecmascript@2.0.0", "", { "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q=="], - - "unicode-match-property-value-ecmascript": ["unicode-match-property-value-ecmascript@2.2.1", "", {}, "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg=="], - - "unicode-property-aliases-ecmascript": ["unicode-property-aliases-ecmascript@2.2.0", "", {}, "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ=="], - - "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], - - "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], - - "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - - "unique-string": ["unique-string@2.0.0", "", { "dependencies": { "crypto-random-string": "^2.0.0" } }, "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg=="], - - "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - - "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], - - "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], - - "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], - - "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - - "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - - "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - - "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - - "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - - "update-notifier": ["update-notifier@6.0.2", "", { "dependencies": { "boxen": "^7.0.0", "chalk": "^5.0.1", "configstore": "^6.0.0", "has-yarn": "^3.0.0", "import-lazy": "^4.0.0", "is-ci": "^3.0.1", "is-installed-globally": "^0.4.0", "is-npm": "^6.0.0", "is-yarn-global": "^0.4.0", "latest-version": "^7.0.0", "pupa": "^3.1.0", "semver": "^7.3.7", "semver-diff": "^4.0.0", "xdg-basedir": "^5.1.0" } }, "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og=="], - - "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], - - "url-join": ["url-join@5.0.0", "", {}, "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA=="], - - "url-loader": ["url-loader@4.1.1", "", { "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" }, "peerDependencies": { "file-loader": "*", "webpack": "^4.0.0 || ^5.0.0" }, "optionalPeers": ["file-loader"] }, "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA=="], - - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - - "utila": ["utila@0.4.0", "", {}, "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA=="], - - "utility-types": ["utility-types@3.11.0", "", {}, "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw=="], - - "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], - - "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - - "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], - - "value-equal": ["value-equal@1.0.1", "", {}, "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="], - - "varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="], - - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - - "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - - "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], - - "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - - "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], - - "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], - - "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], - - "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], - - "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], - - "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], - - "watchpack": ["watchpack@2.5.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg=="], - - "wbuf": ["wbuf@1.7.3", "", { "dependencies": { "minimalistic-assert": "^1.0.0" } }, "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA=="], - - "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - - "web-worker": ["web-worker@1.5.0", "", {}, "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw=="], - - "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - - "webpack": ["webpack@5.97.1", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg=="], - - "webpack-bundle-analyzer": ["webpack-bundle-analyzer@4.10.2", "", { "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" } }, "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw=="], - - "webpack-dev-middleware": ["webpack-dev-middleware@7.4.5", "", { "dependencies": { "colorette": "^2.0.10", "memfs": "^4.43.1", "mime-types": "^3.0.1", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "peerDependencies": { "webpack": "^5.0.0" }, "optionalPeers": ["webpack"] }, "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA=="], - - "webpack-dev-server": ["webpack-dev-server@5.2.3", "", { "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", "@types/express": "^4.17.25", "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", "@types/sockjs": "^0.3.36", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", "express": "^4.22.1", "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.2", "ws": "^8.18.0" }, "peerDependencies": { "webpack": "^5.0.0" }, "optionalPeers": ["webpack"], "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" } }, "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ=="], - - "webpack-merge": ["webpack-merge@6.0.1", "", { "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.1" } }, "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg=="], - - "webpack-sources": ["webpack-sources@3.3.4", "", {}, "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q=="], - - "webpackbar": ["webpackbar@6.0.1", "", { "dependencies": { "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "consola": "^3.2.3", "figures": "^3.2.0", "markdown-table": "^2.0.0", "pretty-time": "^1.1.0", "std-env": "^3.7.0", "wrap-ansi": "^7.0.0" }, "peerDependencies": { "webpack": "3 || 4 || 5" } }, "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q=="], - - "websocket-driver": ["websocket-driver@0.7.4", "", { "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg=="], - - "websocket-extensions": ["websocket-extensions@0.1.4", "", {}, "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="], - - "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], - - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - - "widest-line": ["widest-line@4.0.1", "", { "dependencies": { "string-width": "^5.0.1" } }, "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig=="], - - "wildcard": ["wildcard@2.0.1", "", {}, "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ=="], - - "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], - - "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - - "write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], - - "ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - - "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], - - "xdg-basedir": ["xdg-basedir@5.1.0", "", {}, "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ=="], - - "xml-js": ["xml-js@1.6.11", "", { "dependencies": { "sax": "^1.2.4" }, "bin": { "xml-js": "./bin/cli.js" } }, "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="], - - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - - "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - - "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], - - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - - "@actions/http-client/undici": ["undici@6.25.0", "", {}, "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg=="], - - "@antfu/install-pkg/tinyexec": ["tinyexec@1.1.1", "", {}, "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg=="], - - "@atproto-labs/simple-store-memory/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - - "@atproto/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - - "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/helper-create-regexp-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/plugin-transform-runtime/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/preset-env/babel-plugin-polyfill-corejs3": ["babel-plugin-polyfill-corejs3@0.14.2", "", { "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.8", "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g=="], - - "@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@csstools/postcss-cascade-layers/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "@csstools/postcss-is-pseudo-class/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "@csstools/postcss-scope-pseudo-class/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "@csstools/selector-resolve-nested/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "@csstools/selector-specificity/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "@docsearch/react/@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.19.2", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", "@algolia/autocomplete-shared": "1.19.2" } }, "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw=="], - - "@docusaurus/types/webpack-merge": ["webpack-merge@5.10.0", "", { "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.0" } }, "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA=="], - - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@17.67.0", "", { "dependencies": { "@jsonjoy.com/base64": "17.67.0", "@jsonjoy.com/buffers": "17.67.0", "@jsonjoy.com/codegen": "17.67.0", "@jsonjoy.com/json-pointer": "17.67.0", "@jsonjoy.com/util": "17.67.0", "hyperdyperid": "^1.2.0", "thingies": "^2.5.0", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w=="], - - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/util": ["@jsonjoy.com/util@17.67.0", "", { "dependencies": { "@jsonjoy.com/buffers": "17.67.0", "@jsonjoy.com/codegen": "17.67.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew=="], - - "@jsonjoy.com/json-pack/@jsonjoy.com/buffers": ["@jsonjoy.com/buffers@1.2.1", "", { "peerDependencies": { "tslib": "2" } }, "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA=="], - - "@jsonjoy.com/util/@jsonjoy.com/buffers": ["@jsonjoy.com/buffers@1.2.1", "", { "peerDependencies": { "tslib": "2" } }, "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA=="], - - "@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], - - "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], - - "@semantic-release/exec/execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], - - "@semantic-release/github/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - - "@semantic-release/npm/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - - "@semantic-release/npm/execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], - - "@semantic-release/npm/read-pkg": ["read-pkg@10.1.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", "type-fest": "^5.4.4", "unicorn-magic": "^0.4.0" } }, "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg=="], - - "@semantic-release/npm/tempy": ["tempy@3.2.0", "", { "dependencies": { "is-stream": "^3.0.0", "temp-dir": "^3.0.0", "type-fest": "^2.12.2", "unique-string": "^3.0.0" } }, "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ=="], - - "@svgr/core/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - - "@svgr/plugin-svgo/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - - "@ts-morph/common/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], - - "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], - "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + "stylis": ["stylis@4.3.6", "", {}, "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="], - "ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], - "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "super-regex": ["super-regex@1.1.0", "", { "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" } }, "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ=="], - "babel-loader/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], - "body-parser/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], - "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "tailwind-merge": ["tailwind-merge@3.6.0", "", {}, "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w=="], - "cacheable-request/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + "tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], - "cacheable-request/normalize-url": ["normalize-url@8.1.1", "", {}, "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], - "cheerio-select/css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + "temp-dir": ["temp-dir@2.0.0", "", {}, "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg=="], - "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "tempy": ["tempy@1.0.1", "", { "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" } }, "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w=="], - "cli-highlight/parse5": ["parse5@5.1.1", "", {}, "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="], + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], - "cli-highlight/parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@6.0.1", "", { "dependencies": { "parse5": "^6.0.1" } }, "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA=="], + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], - "cli-highlight/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], + "thread-stream": ["thread-stream@2.7.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw=="], - "cli-table3/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "through2": ["through2@2.0.5", "", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="], - "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "time-span": ["time-span@5.1.0", "", { "dependencies": { "convert-hrtime": "^5.0.0" } }, "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA=="], - "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "tinyexec": ["tinyexec@1.1.2", "", {}, "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], - "compare-func/dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "compressible/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "traverse": ["traverse@0.6.8", "", {}, "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA=="], - "compression/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], - "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], - "configstore/unique-string": ["unique-string@3.0.0", "", { "dependencies": { "crypto-random-string": "^4.0.0" } }, "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ=="], + "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], - "copy-webpack-plugin/glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + "ts-dedent": ["ts-dedent@2.2.0", "", {}, "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ=="], - "copy-webpack-plugin/globby": ["globby@13.2.2", "", { "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" } }, "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w=="], + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], - "copy-webpack-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "ts-morph": ["ts-morph@27.0.2", "", { "dependencies": { "@ts-morph/common": "~0.28.1", "code-block-writer": "^13.0.3" } }, "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w=="], - "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "css-blank-pseudo/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], + "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], - "css-has-pseudo/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], + "tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="], - "css-minimizer-webpack-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], - "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], + "uint8arrays": ["uint8arrays@3.0.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA=="], - "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + "undici": ["undici@7.25.0", "", {}, "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ=="], - "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], - "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], + "unicode-emoji-modifier-base": ["unicode-emoji-modifier-base@1.0.0", "", {}, "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g=="], - "decompress-response/mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], - "dot-prop/is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], + "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], - "env-ci/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], - "esrecurse/estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + "unique-string": ["unique-string@2.0.0", "", { "dependencies": { "crypto-random-string": "^2.0.0" } }, "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg=="], - "execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], - "express/content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], - "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="], - "express/path-to-regexp": ["path-to-regexp@0.1.13", "", {}, "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="], + "unist-util-remove-position": ["unist-util-remove-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" } }, "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q=="], - "express/range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], - "fdir/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="], - "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "global-dirs/ini": ["ini@2.0.0", "", {}, "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="], + "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - "got/@sindresorhus/is": ["@sindresorhus/is@5.6.0", "", {}, "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - "got/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + "url-join": ["url-join@5.0.0", "", {}, "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA=="], - "gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], - "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - "html-minifier-terser/commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "html-webpack-plugin/html-minifier-terser": ["html-minifier-terser@6.1.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" } }, "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw=="], + "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], - "http-proxy-middleware/is-plain-obj": ["is-plain-obj@3.0.0", "", {}, "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA=="], + "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], - "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], + "varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="], - "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], - "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], - "katex/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], + "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], - "make-asynchronous/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + "vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], - "marked-terminal/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], - "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], - "mdast-util-from-markdown/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], - "mdast-util-frontmatter/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], - "mdast-util-gfm-autolink-literal/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], - "mdast-util-gfm-table/markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], + "web-worker": ["web-worker@1.5.0", "", {}, "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw=="], - "mermaid/marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - "micromark/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], - "micromark/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "micromark/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], - "micromark-core-commonmark/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - "micromark-core-commonmark/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "micromark-core-commonmark/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - "micromark-extension-directive/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "micromark-extension-directive/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], - "micromark-extension-directive/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "micromark-extension-frontmatter/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "micromark-extension-frontmatter/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="], - "micromark-extension-gfm-autolink-literal/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - "micromark-extension-gfm-autolink-literal/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "micromark-extension-gfm-footnote/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "@actions/http-client/undici": ["undici@6.25.0", "", {}, "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg=="], - "micromark-extension-gfm-footnote/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@antfu/install-pkg/tinyexec": ["tinyexec@1.1.1", "", {}, "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg=="], - "micromark-extension-gfm-footnote/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@atproto-labs/did-resolver/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-gfm-strikethrough/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@atproto-labs/handle-resolver/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-gfm-table/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "@atproto-labs/simple-store-memory/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "micromark-extension-gfm-table/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@atproto/common-web/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-gfm-table/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@atproto/did/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-gfm-task-list-item/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "@atproto/jwk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-gfm-task-list-item/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@atproto/jwk-webcrypto/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-gfm-task-list-item/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@atproto/repo/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "micromark-extension-mdx-expression/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], - "micromark-extension-mdx-expression/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "micromark-extension-mdx-expression/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "micromark-extension-mdx-jsx/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "@radix-ui/react-popover/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "micromark-extension-mdx-jsx/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - "micromark-extension-mdx-jsx/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@semantic-release/github/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - "micromark-extension-mdxjs-esm/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@semantic-release/npm/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - "micromark-extension-mdxjs-esm/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@semantic-release/npm/fs-extra": ["fs-extra@11.3.4", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA=="], - "micromark-factory-destination/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@semantic-release/npm/read-pkg": ["read-pkg@10.1.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", "type-fest": "^5.4.4", "unicorn-magic": "^0.4.0" } }, "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg=="], - "micromark-factory-destination/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@semantic-release/npm/tempy": ["tempy@3.2.0", "", { "dependencies": { "is-stream": "^3.0.0", "temp-dir": "^3.0.0", "type-fest": "^2.12.2", "unique-string": "^3.0.0" } }, "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ=="], - "micromark-factory-label/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "micromark-factory-label/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "micromark-factory-mdx-expression/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "micromark-factory-mdx-expression/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], - "micromark-factory-mdx-expression/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], - "micromark-factory-space/micromark-util-types": ["micromark-util-types@1.1.0", "", {}, "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg=="], + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "micromark-factory-title/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "bun-types/@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], - "micromark-factory-title/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "cli-highlight/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "micromark-factory-title/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "cli-highlight/parse5": ["parse5@5.1.1", "", {}, "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="], - "micromark-factory-whitespace/micromark-factory-space": ["micromark-factory-space@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg=="], + "cli-highlight/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], - "micromark-factory-whitespace/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - "micromark-factory-whitespace/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], - "micromark-util-character/micromark-util-types": ["micromark-util-types@1.1.0", "", {}, "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg=="], + "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "micromark-util-chunked/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], - "micromark-util-classify-character/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], - "micromark-util-classify-character/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "del/p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], - "micromark-util-decode-numeric-character-reference/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "env-ci/execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], - "micromark-util-decode-string/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - "micromark-util-decode-string/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "micromark-util-events-to-acorn/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "micromark-util-normalize-identifier/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "micromark-util-sanitize-uri/micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + "load-json-file/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], - "micromark-util-sanitize-uri/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "marked-terminal/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], - "micromark-util-subtokenize/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - "mini-css-extract-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], "normalize-package-data/hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], @@ -3665,17 +2210,13 @@ "npm/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "p-event/p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], - - "p-filter/p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "parse-json/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - - "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + "parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="], "pino-abstract-transport/readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], @@ -3683,189 +2224,47 @@ "pkg-conf/find-up": ["find-up@2.1.0", "", { "dependencies": { "locate-path": "^2.0.0" } }, "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ=="], - "pkg-dir/find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], - - "postcss-attribute-case-insensitive/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-calc/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "postcss-custom-selectors/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-dir-pseudo-class/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-discard-unused/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "postcss-focus-visible/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-focus-within/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-loader/cosmiconfig": ["cosmiconfig@8.3.6", "", { "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA=="], - - "postcss-merge-rules/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "postcss-minify-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "postcss-modules-local-by-default/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-modules-scope/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-nesting/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-pseudo-class-any-link/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-selector-not/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - - "postcss-unique-selectors/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], - - "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - - "raw-body/bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], - - "rc/strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], - "read-package-up/read-pkg": ["read-pkg@9.0.1", "", { "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", "parse-json": "^8.0.0", "type-fest": "^4.6.0", "unicorn-magic": "^0.1.0" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="], - "read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - "read-pkg/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], "read-pkg/type-fest": ["type-fest@0.6.0", "", {}, "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg=="], - "readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], - - "readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - - "renderkid/htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="], - - "renderkid/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "semantic-release/aggregate-error": ["aggregate-error@5.0.0", "", { "dependencies": { "clean-stack": "^5.2.0", "indent-string": "^5.0.0" } }, "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw=="], - "semantic-release/execa": ["execa@9.6.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", "yoctocolors": "^2.1.1" } }, "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA=="], - "semantic-release/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], + "semantic-release/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + "semantic-release/read-package-up": ["read-package-up@12.0.0", "", { "dependencies": { "find-up-simple": "^1.0.1", "read-pkg": "^10.0.0", "type-fest": "^5.2.0" } }, "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw=="], "semantic-release/yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], - "semantic-release-monorepo/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + "semantic-release-monorepo/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], "semantic-release-monorepo/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "semantic-release-monorepo/p-each-series": ["p-each-series@2.2.0", "", {}, "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA=="], - "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], - - "send/range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "serve-handler/path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="], - - "serve-index/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - - "serve-index/http-errors": ["http-errors@1.8.1", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.1" } }, "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g=="], - - "serve-index/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "signale/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], "signale/figures": ["figures@2.0.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA=="], - "sitemap/@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], - - "sockjs/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - - "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - - "spdy-transport/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - - "string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], - - "stylehacks/postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + "strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], - "svgo/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - - "svgo/css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + "tempy/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], "tempy/type-fest": ["type-fest@0.16.0", "", {}, "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg=="], - "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - - "terser-webpack-plugin/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], - - "terser-webpack-plugin/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], - - "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], - "tsup/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], - "tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - - "type-is/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "update-notifier/boxen": ["boxen@7.1.1", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.1", "chalk": "^5.2.0", "cli-boxes": "^3.0.0", "string-width": "^5.1.2", "type-fest": "^2.13.0", "widest-line": "^4.0.1", "wrap-ansi": "^8.1.0" } }, "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog=="], - - "update-notifier/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - - "url-loader/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "webpack/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - - "webpack-bundle-analyzer/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - - "webpack-dev-middleware/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - - "webpack-dev-middleware/range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "webpack-dev-middleware/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], - - "webpack-dev-server/open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], - - "webpack-dev-server/schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], + "tsup/esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], - "webpack-dev-server/ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + "tsup/tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], - "webpackbar/ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], - - "webpackbar/figures": ["figures@3.2.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="], - - "webpackbar/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], - - "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - - "wsl-utils/is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], - - "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "@docsearch/react/@algolia/autocomplete-core/@algolia/autocomplete-plugin-algolia-insights": ["@algolia/autocomplete-plugin-algolia-insights@1.19.2", "", { "dependencies": { "@algolia/autocomplete-shared": "1.19.2" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg=="], - - "@docsearch/react/@algolia/autocomplete-core/@algolia/autocomplete-shared": ["@algolia/autocomplete-shared@1.19.2", "", { "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w=="], - - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack/@jsonjoy.com/base64": ["@jsonjoy.com/base64@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw=="], - - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack/@jsonjoy.com/codegen": ["@jsonjoy.com/codegen@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q=="], - - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack/@jsonjoy.com/json-pointer": ["@jsonjoy.com/json-pointer@17.67.0", "", { "dependencies": { "@jsonjoy.com/util": "17.67.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA=="], - - "@jsonjoy.com/fs-snapshot/@jsonjoy.com/util/@jsonjoy.com/codegen": ["@jsonjoy.com/codegen@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q=="], - - "@semantic-release/exec/execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - - "@semantic-release/exec/execa/human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - - "@semantic-release/exec/execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], - - "@semantic-release/exec/execa/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - - "@semantic-release/exec/execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "@semantic-release/exec/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], + "wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "@semantic-release/github/aggregate-error/clean-stack": ["clean-stack@5.3.0", "", { "dependencies": { "escape-string-regexp": "5.0.0" } }, "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg=="], @@ -3875,18 +2274,6 @@ "@semantic-release/npm/aggregate-error/indent-string": ["indent-string@5.0.0", "", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="], - "@semantic-release/npm/execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - - "@semantic-release/npm/execa/human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - - "@semantic-release/npm/execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], - - "@semantic-release/npm/execa/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - - "@semantic-release/npm/execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "@semantic-release/npm/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - "@semantic-release/npm/read-pkg/normalize-package-data": ["normalize-package-data@8.0.0", "", { "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ=="], "@semantic-release/npm/read-pkg/type-fest": ["type-fest@5.5.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g=="], @@ -3897,64 +2284,18 @@ "@semantic-release/npm/tempy/temp-dir": ["temp-dir@3.0.0", "", {}, "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw=="], - "@semantic-release/npm/tempy/unique-string": ["unique-string@3.0.0", "", { "dependencies": { "crypto-random-string": "^4.0.0" } }, "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ=="], - - "@svgr/core/cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - - "@svgr/plugin-svgo/cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - - "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - - "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "ansi-align/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "babel-loader/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "@semantic-release/npm/tempy/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], - "babel-loader/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "@semantic-release/npm/tempy/unique-string": ["unique-string@3.0.0", "", { "dependencies": { "crypto-random-string": "^4.0.0" } }, "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ=="], - "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "bun-types/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], - "cli-highlight/parse5-htmlparser2-tree-adapter/parse5": ["parse5@6.0.1", "", {}, "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="], + "cli-highlight/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "cli-highlight/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], - "cli-highlight/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "cli-highlight/yargs/yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], - "cli-table3/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "cli-table3/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - - "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "compare-func/dot-prop/is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], - - "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "configstore/unique-string/crypto-random-string": ["crypto-random-string@4.0.0", "", { "dependencies": { "type-fest": "^1.0.1" } }, "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA=="], - - "copy-webpack-plugin/globby/slash": ["slash@4.0.0", "", {}, "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="], - - "copy-webpack-plugin/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "copy-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - - "css-minimizer-webpack-plugin/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "css-minimizer-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - - "css-select/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], - - "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], - "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], "d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], @@ -3971,23 +2312,9 @@ "env-ci/execa/onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], - "env-ci/execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "env-ci/execa/strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], - "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - - "html-webpack-plugin/html-minifier-terser/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], - - "mdast-util-gfm-autolink-literal/micromark-util-character/micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], - - "mini-css-extract-plugin/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "mini-css-extract-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], "npm/minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], @@ -3997,40 +2324,24 @@ "pkg-conf/find-up/locate-path": ["locate-path@2.0.0", "", { "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA=="], - "pkg-dir/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], - - "pkg-dir/find-up/path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], - - "postcss-loader/cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], - "read-package-up/read-pkg/normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="], "read-package-up/read-pkg/unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], - "renderkid/htmlparser2/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "semantic-release-monorepo/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "renderkid/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], + "semantic-release-monorepo/execa/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - "renderkid/htmlparser2/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "semantic-release-monorepo/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - "renderkid/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "semantic-release-monorepo/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "semantic-release-monorepo/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], "semantic-release/aggregate-error/clean-stack": ["clean-stack@5.3.0", "", { "dependencies": { "escape-string-regexp": "5.0.0" } }, "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg=="], "semantic-release/aggregate-error/indent-string": ["indent-string@5.0.0", "", {}, "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg=="], - "semantic-release/execa/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], - - "semantic-release/execa/human-signals": ["human-signals@8.0.1", "", {}, "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ=="], - - "semantic-release/execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], - - "semantic-release/execa/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - - "semantic-release/execa/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "semantic-release/execa/strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="], - "semantic-release/read-package-up/read-pkg": ["read-pkg@10.1.0", "", { "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", "type-fest": "^5.4.4", "unicorn-magic": "^0.4.0" } }, "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg=="], "semantic-release/read-package-up/type-fest": ["type-fest@5.5.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g=="], @@ -4041,164 +2352,114 @@ "semantic-release/yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], - "send/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "serve-index/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - - "serve-index/http-errors/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], - - "serve-index/http-errors/statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="], - - "serve-index/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "signale/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], - "signale/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], "signale/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], "signale/figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "spdy-transport/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - - "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - - "terser-webpack-plugin/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "terser-webpack-plugin/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - "tsup/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - "type-is/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - - "update-notifier/boxen/camelcase": ["camelcase@7.0.1", "", {}, "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw=="], + "tsup/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], - "url-loader/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "tsup/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], - "webpack-dev-middleware/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "tsup/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], - "webpack-dev-middleware/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "tsup/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], - "webpack-dev-middleware/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "tsup/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], - "webpack-dev-server/open/define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + "tsup/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], - "webpack-dev-server/schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "tsup/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], - "webpack-dev-server/schema-utils/ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], + "tsup/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], - "webpack/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "tsup/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], - "webpackbar/ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "tsup/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], - "webpackbar/figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "tsup/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], - "webpackbar/wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "tsup/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], - "webpackbar/wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "tsup/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], - "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "tsup/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], - "yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "tsup/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], - "@semantic-release/exec/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + "tsup/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], - "@semantic-release/github/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - - "@semantic-release/npm/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - - "@semantic-release/npm/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - - "@semantic-release/npm/tempy/unique-string/crypto-random-string": ["crypto-random-string@4.0.0", "", { "dependencies": { "type-fest": "^1.0.1" } }, "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA=="], + "tsup/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], - "@ts-morph/common/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "tsup/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], - "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "tsup/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], - "babel-loader/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "tsup/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], - "cli-highlight/yargs/cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "tsup/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], - "cli-highlight/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "tsup/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], - "cli-highlight/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "tsup/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], - "cli-highlight/yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "tsup/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], - "cli-table3/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "tsup/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], - "configstore/unique-string/crypto-random-string/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="], + "tsup/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], - "copy-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "wrap-ansi/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - "css-minimizer-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "@semantic-release/npm/tempy/unique-string/crypto-random-string": ["crypto-random-string@4.0.0", "", { "dependencies": { "type-fest": "^1.0.1" } }, "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA=="], - "css-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], + "cli-highlight/chalk/ansi-styles/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "env-ci/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], "env-ci/execa/onetime/mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], - "mini-css-extract-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "npm/minipass-flush/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "npm/minipass-pipeline/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - "pkg-conf/find-up/locate-path/p-locate": ["p-locate@2.0.0", "", { "dependencies": { "p-limit": "^1.1.0" } }, "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg=="], + "pino-abstract-transport/readable-stream/string_decoder/safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], - "pkg-dir/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], + "pkg-conf/find-up/locate-path/p-locate": ["p-locate@2.0.0", "", { "dependencies": { "p-limit": "^1.1.0" } }, "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg=="], "read-package-up/read-pkg/normalize-package-data/hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], - "renderkid/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], - - "semantic-release/aggregate-error/clean-stack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - - "semantic-release/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - "semantic-release/read-package-up/read-pkg/normalize-package-data": ["normalize-package-data@8.0.0", "", { "dependencies": { "hosted-git-info": "^9.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ=="], "semantic-release/read-package-up/read-pkg/unicorn-magic": ["unicorn-magic@0.4.0", "", {}, "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw=="], + "semantic-release/yargs/cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "semantic-release/yargs/cliui/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], "semantic-release/yargs/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - "signale/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "semantic-release/yargs/string-width/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "signale/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "terser-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "webpack-dev-middleware/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "webpack-dev-server/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "webpackbar/wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - - "webpackbar/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "wrap-ansi/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "@semantic-release/npm/tempy/unique-string/crypto-random-string/type-fest": ["type-fest@1.4.0", "", {}, "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="], - "cli-highlight/yargs/cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "cli-highlight/yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "cli-highlight/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], "pkg-conf/find-up/locate-path/p-locate/p-limit": ["p-limit@1.3.0", "", { "dependencies": { "p-try": "^1.0.0" } }, "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="], - "pkg-dir/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - "read-package-up/read-pkg/normalize-package-data/hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "semantic-release/yargs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - "signale/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], - "pkg-conf/find-up/locate-path/p-locate/p-limit/p-try": ["p-try@1.0.0", "", {}, "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww=="], - - "pkg-dir/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], } } diff --git a/packages/design-system/package.json b/packages/design-system/package.json new file mode 100644 index 0000000..5b4e5d6 --- /dev/null +++ b/packages/design-system/package.json @@ -0,0 +1,10 @@ +{ + "name": "@happyview/design-system", + "version": "0.0.0", + "private": true, + "exports": { + "./tokens.css": "./src/tokens.css", + "./globals.css": "./src/globals.css", + "./fonts": "./src/fonts.ts" + } +} diff --git a/packages/design-system/src/fonts.ts b/packages/design-system/src/fonts.ts new file mode 100644 index 0000000..309dbb7 --- /dev/null +++ b/packages/design-system/src/fonts.ts @@ -0,0 +1,15 @@ +import { Geist, Geist_Mono } from "next/font/google"; + +export const geistSans = Geist({ + subsets: ["latin"], + variable: "--font-geist-sans", + display: "swap", +}); + +export const geistMono = Geist_Mono({ + subsets: ["latin"], + variable: "--font-geist-mono", + display: "swap", +}); + +export const fontVariables = `${geistSans.variable} ${geistMono.variable}`; diff --git a/packages/design-system/src/globals.css b/packages/design-system/src/globals.css new file mode 100644 index 0000000..5d8494d --- /dev/null +++ b/packages/design-system/src/globals.css @@ -0,0 +1,48 @@ +@import "./tokens.css"; + +html { + font-family: var(--font-sans); + background: rgb(var(--color-bg)); + color: rgb(var(--color-fg)); + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +body { + background: rgb(var(--color-bg)); + color: rgb(var(--color-fg)); +} + +code, pre, kbd, samp { + font-family: var(--font-mono); +} + +::selection { + background: rgb(var(--color-fg) / 0.15); + color: rgb(var(--color-fg)); +} + +:root { + --color-fd-background: rgb(var(--color-bg)); + --color-fd-foreground: rgb(var(--color-fg)); + --color-fd-muted: rgb(var(--color-bg-subtle)); + --color-fd-muted-foreground: rgb(var(--color-fg-muted)); + --color-fd-popover: rgb(var(--color-surface)); + --color-fd-popover-foreground: rgb(var(--color-fg)); + --color-fd-card: rgb(var(--color-surface)); + --color-fd-card-foreground: rgb(var(--color-fg)); + --color-fd-border: rgb(var(--color-border)); + --color-fd-primary: rgb(var(--color-fg)); + --color-fd-primary-foreground: rgb(var(--color-bg)); + --color-fd-secondary: rgb(var(--color-bg-subtle)); + --color-fd-secondary-foreground: rgb(var(--color-fg)); + --color-fd-accent: rgb(var(--color-bg-subtle)); + --color-fd-accent-foreground: rgb(var(--color-fg)); + --color-fd-ring: rgb(var(--color-fg) / 0.2); +} + +.surface-card { + background: rgb(var(--color-surface)); + border: 1px solid rgb(var(--color-border)); + border-radius: var(--radius-lg); +} diff --git a/packages/design-system/src/tokens.css b/packages/design-system/src/tokens.css new file mode 100644 index 0000000..ad6991b --- /dev/null +++ b/packages/design-system/src/tokens.css @@ -0,0 +1,45 @@ +:root { + --color-bg: 252 252 252; + --color-bg-subtle: 247 247 248; + --color-surface: 255 255 255; + --color-border: 230 230 233; + --color-border-strong: 210 210 215; + + --color-fg: 10 10 11; + --color-fg-muted: 90 90 100; + --color-fg-subtle: 140 140 150; + + --color-accent: 10 10 11; + --color-accent-fg: 255 255 255; + --color-accent-subtle: 240 240 244; + + --color-code-bg: 247 247 248; + --color-code-fg: 10 10 11; + + --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif; + --font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, monospace; + + --radius-sm: 0.375rem; + --radius-md: 0.5rem; + --radius-lg: 0.75rem; + --radius-xl: 1rem; +} + +.dark { + --color-bg: 10 10 11; + --color-bg-subtle: 16 16 18; + --color-surface: 20 20 23; + --color-border: 32 32 36; + --color-border-strong: 48 48 54; + + --color-fg: 250 250 250; + --color-fg-muted: 161 161 170; + --color-fg-subtle: 115 115 122; + + --color-accent: 250 250 250; + --color-accent-fg: 10 10 11; + --color-accent-subtle: 28 28 32; + + --color-code-bg: 14 14 17; + --color-code-fg: 236 236 240; +} diff --git a/packages/design-system/tsconfig.json b/packages/design-system/tsconfig.json new file mode 100644 index 0000000..1fd683a --- /dev/null +++ b/packages/design-system/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx" + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules"] +} -- 2.51.2 From f714de990f939191276c670aefb5d0087fa753fa Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 13:28:28 -0500 Subject: [PATCH 078/250] docs: convert to fumadocs Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/.gitignore | 6 +- .../docs/api-reference}/admin/admin-api.md | 4 +- .../docs/api-reference}/admin/api-clients.md | 4 +- .../docs/api-reference}/admin/api-keys.md | 4 +- .../docs/api-reference}/admin/backfill.md | 4 +- .../docs/api-reference}/admin/domains.md | 4 +- .../docs/api-reference}/admin/events.md | 4 +- .../docs/api-reference}/admin/labelers.md | 4 +- .../docs/api-reference}/admin/lexicons.md | 4 +- .../docs/api-reference/admin/meta.json | 19 + .../docs/api-reference}/admin/plugins.md | 4 +- .../api-reference}/admin/script-variables.md | 4 +- .../docs/api-reference}/admin/settings.md | 4 +- .../docs/api-reference}/admin/stats.md | 4 +- .../docs/api-reference}/admin/users.md | 4 +- .../docs/api-reference}/admin/xrpc-proxy.md | 4 +- .../docs/api-reference}/lua/atproto-api.md | 4 +- .../docs/api-reference}/lua/database-api.md | 4 +- .../docs/api-reference}/lua/http-api.md | 4 +- .../docs/api-reference}/lua/json-api.md | 4 +- .../content/docs/api-reference/lua/meta.json | 13 + .../docs/api-reference}/lua/record-api.md | 4 +- .../api-reference}/lua/standard-libraries.md | 4 +- .../api-reference}/lua/utility-globals.md | 4 +- .../docs/api-reference}/lua/xrpc-lua-api.md | 4 +- .../docs/content/docs/api-reference/meta.json | 9 + .../docs/api-reference}/oauth/api-clients.md | 4 +- .../docs/api-reference/oauth/meta.json | 6 + .../docs/api-reference}/xrpc-api.md | 4 +- .../docs/content/docs/experimental/meta.json | 6 + .../docs/experimental/spaces/changelog.md | 4 +- .../docs/experimental/spaces/credentials.md | 4 +- .../docs/experimental/spaces/index.md} | 4 +- .../docs/experimental/spaces/invites.md | 4 +- .../experimental/spaces/managing-spaces.md | 4 +- .../docs/experimental/spaces/members.md | 4 +- .../docs/experimental/spaces/meta.json | 12 + .../docs/experimental/spaces/records.md | 4 +- .../docs/getting-started/authentication.md | 4 +- .../docs/getting-started/configuration.md | 4 +- .../docs/getting-started/dashboard.md | 4 +- .../docs/getting-started/deployment/docker.md | 4 +- .../docs/getting-started/deployment/meta.json | 9 + .../docs/getting-started/deployment/other.md | 4 +- .../getting-started/deployment/production.md} | 4 +- .../getting-started/deployment/railway.md | 4 +- .../content/docs/getting-started/meta.json | 10 + .../docs/getting-started/quickstart.md | 4 +- .../docs/guides}/api-clients.md | 4 +- .../admin => content/docs/guides}/api-keys.md | 4 +- .../docs/guides}/attestation-signing.md | 4 +- .../docs/guides}/backfill.md | 4 +- .../docs/guides/database/database-setup.md | 4 +- .../content/docs/guides/database/meta.json | 8 + .../database/postgres-to-sqlite-migration.md | 4 +- .../database/sqlite-to-postgres-migration.md | 4 +- .../docs/guides}/developing-plugins.md | 4 +- .../docs/guides}/event-logs.md | 4 +- .../docs/guides}/index-hooks.md | 4 +- .../docs/guides}/labelers.md | 4 +- .../docs/guides}/lexicons.md | 4 +- .../docs/guides/lua-scripting.md} | 4 +- packages/docs/content/docs/guides/meta.json | 19 + .../docs/guides}/permissions.md | 4 +- .../docs/guides}/plugins.md | 4 +- .../docs/guides/upgrading-to-v2.md | 4 +- .../{docs/README.md => content/docs/index.md} | 4 +- packages/docs/content/docs/meta.json | 19 + .../docs/reference/architecture.md | 4 +- .../{ => content}/docs/reference/glossary.md | 4 +- .../docs/content/docs/reference/meta.json | 10 + .../script-examples}/algolia-sync.md | 4 +- .../reference/script-examples}/batch-save.md | 4 +- .../script-examples}/cascading-delete.md | 4 +- .../script-examples}/complex-mutations.md | 4 +- .../script-examples}/create-record.md | 4 +- .../script-examples}/expanded-query.md | 4 +- .../reference/script-examples}/get-record.md | 4 +- .../script-examples}/list-or-fetch.md | 4 +- .../script-examples}/meilisearch-sync.md | 4 +- .../docs/reference/script-examples/meta.json | 20 + .../script-examples}/paginated-list.md | 4 +- .../script-examples}/sidecar-records.md | 4 +- .../script-examples}/signed-record-verify.md | 4 +- .../script-examples}/signed-record.md | 4 +- .../script-examples}/update-or-delete.md | 4 +- .../script-examples}/upsert-record.md | 4 +- .../docs/reference/troubleshooting.md | 4 +- .../content/docs/sdk/lex-agent/changelog.md | 13 + .../docs/content/docs/sdk/lex-agent/meta.json | 7 + .../docs/sdk/lex-agent/overview.md} | 4 +- packages/docs/content/docs/sdk/meta.json | 10 + .../sdk/oauth-client-browser/changelog.md | 21 + .../docs/sdk/oauth-client-browser/meta.json | 7 + .../sdk/oauth-client-browser/overview.md} | 4 +- .../docs/sdk/oauth-client-node/changelog.md | 7 + .../docs/sdk/oauth-client-node/meta.json | 7 + .../docs/sdk/oauth-client-node/overview.md} | 4 +- .../docs/sdk/oauth-client/changelog.md | 21 + .../content/docs/sdk/oauth-client/meta.json | 7 + .../docs/sdk/oauth-client/overview.md} | 4 +- .../docs/{ => content}/docs/sdk/overview.md | 4 +- .../docs/content/docs/tutorials/meta.json | 6 + .../docs/tutorials/statusphere.md | 4 +- packages/docs/docusaurus.config.ts | 70 --- packages/docs/next-env.d.ts | 6 + packages/docs/next.config.mts | 10 + packages/docs/package.json | 30 +- packages/docs/postcss.config.mjs | 7 + .../docs/{static => public}/img/favicon.png | Bin .../docs/{static => public}/img/logo.dark.png | Bin .../{static => public}/img/logo.light.png | Bin packages/docs/{static => public}/img/og.png | Bin packages/docs/scripts/generate-changelogs.mjs | 18 +- packages/docs/sidebars.ts | 541 ------------------ packages/docs/source.config.ts | 12 + .../src/app/docs/[[...slug]]/not-found.tsx | 12 + .../docs/src/app/docs/[[...slug]]/page.tsx | 48 ++ packages/docs/src/app/docs/layout.tsx | 32 ++ packages/docs/src/app/global.css | 16 + packages/docs/src/app/layout.tsx | 29 + packages/docs/src/app/page.tsx | 5 + packages/docs/src/components/mermaid.tsx | 53 ++ packages/docs/src/lib/fonts.ts | 15 + packages/docs/src/lib/source.ts | 6 + packages/docs/tsconfig.json | 45 +- 126 files changed, 831 insertions(+), 716 deletions(-) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/admin-api.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/api-clients.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/api-keys.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/backfill.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/domains.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/events.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/labelers.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/lexicons.md (99%) create mode 100644 packages/docs/content/docs/api-reference/admin/meta.json rename packages/docs/{docs/reference => content/docs/api-reference}/admin/plugins.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/script-variables.md (96%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/settings.md (96%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/stats.md (93%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/users.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/admin/xrpc-proxy.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/atproto-api.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/database-api.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/http-api.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/json-api.md (95%) create mode 100644 packages/docs/content/docs/api-reference/lua/meta.json rename packages/docs/{docs/reference => content/docs/api-reference}/lua/record-api.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/standard-libraries.md (99%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/utility-globals.md (98%) rename packages/docs/{docs/reference => content/docs/api-reference}/lua/xrpc-lua-api.md (98%) create mode 100644 packages/docs/content/docs/api-reference/meta.json rename packages/docs/{docs/reference => content/docs/api-reference}/oauth/api-clients.md (99%) create mode 100644 packages/docs/content/docs/api-reference/oauth/meta.json rename packages/docs/{docs/reference => content/docs/api-reference}/xrpc-api.md (99%) create mode 100644 packages/docs/content/docs/experimental/meta.json rename packages/docs/{ => content}/docs/experimental/spaces/changelog.md (99%) rename packages/docs/{ => content}/docs/experimental/spaces/credentials.md (99%) rename packages/docs/{docs/experimental/spaces.md => content/docs/experimental/spaces/index.md} (99%) rename packages/docs/{ => content}/docs/experimental/spaces/invites.md (99%) rename packages/docs/{ => content}/docs/experimental/spaces/managing-spaces.md (99%) rename packages/docs/{ => content}/docs/experimental/spaces/members.md (99%) create mode 100644 packages/docs/content/docs/experimental/spaces/meta.json rename packages/docs/{ => content}/docs/experimental/spaces/records.md (99%) rename packages/docs/{ => content}/docs/getting-started/authentication.md (99%) rename packages/docs/{ => content}/docs/getting-started/configuration.md (99%) rename packages/docs/{ => content}/docs/getting-started/dashboard.md (99%) rename packages/docs/{ => content}/docs/getting-started/deployment/docker.md (98%) create mode 100644 packages/docs/content/docs/getting-started/deployment/meta.json rename packages/docs/{ => content}/docs/getting-started/deployment/other.md (98%) rename packages/docs/{docs/getting-started/production-deployment.md => content/docs/getting-started/deployment/production.md} (99%) rename packages/docs/{ => content}/docs/getting-started/deployment/railway.md (98%) create mode 100644 packages/docs/content/docs/getting-started/meta.json rename packages/docs/{ => content}/docs/getting-started/quickstart.md (99%) rename packages/docs/{docs/guides/features => content/docs/guides}/api-clients.md (99%) rename packages/docs/{docs/guides/admin => content/docs/guides}/api-keys.md (99%) rename packages/docs/{docs/guides/features => content/docs/guides}/attestation-signing.md (99%) rename packages/docs/{docs/guides/indexing => content/docs/guides}/backfill.md (99%) rename packages/docs/{ => content}/docs/guides/database/database-setup.md (98%) create mode 100644 packages/docs/content/docs/guides/database/meta.json rename packages/docs/{ => content}/docs/guides/database/postgres-to-sqlite-migration.md (98%) rename packages/docs/{ => content}/docs/guides/database/sqlite-to-postgres-migration.md (98%) rename packages/docs/{docs/guides/features => content/docs/guides}/developing-plugins.md (99%) rename packages/docs/{docs/guides/admin => content/docs/guides}/event-logs.md (99%) rename packages/docs/{docs/guides/indexing => content/docs/guides}/index-hooks.md (99%) rename packages/docs/{docs/guides/features => content/docs/guides}/labelers.md (99%) rename packages/docs/{docs/guides/indexing => content/docs/guides}/lexicons.md (99%) rename packages/docs/{docs/guides/scripting.md => content/docs/guides/lua-scripting.md} (99%) create mode 100644 packages/docs/content/docs/guides/meta.json rename packages/docs/{docs/guides/admin => content/docs/guides}/permissions.md (99%) rename packages/docs/{docs/guides/features => content/docs/guides}/plugins.md (99%) rename packages/docs/{ => content}/docs/guides/upgrading-to-v2.md (99%) rename packages/docs/{docs/README.md => content/docs/index.md} (99%) create mode 100644 packages/docs/content/docs/meta.json rename packages/docs/{ => content}/docs/reference/architecture.md (99%) rename packages/docs/{ => content}/docs/reference/glossary.md (99%) create mode 100644 packages/docs/content/docs/reference/meta.json rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/algolia-sync.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/batch-save.md (97%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/cascading-delete.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/complex-mutations.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/create-record.md (97%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/expanded-query.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/get-record.md (96%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/list-or-fetch.md (97%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/meilisearch-sync.md (98%) create mode 100644 packages/docs/content/docs/reference/script-examples/meta.json rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/paginated-list.md (97%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/sidecar-records.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/signed-record-verify.md (97%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/signed-record.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/update-or-delete.md (98%) rename packages/docs/{docs/guides/scripting => content/docs/reference/script-examples}/upsert-record.md (98%) rename packages/docs/{ => content}/docs/reference/troubleshooting.md (99%) create mode 100644 packages/docs/content/docs/sdk/lex-agent/changelog.md create mode 100644 packages/docs/content/docs/sdk/lex-agent/meta.json rename packages/docs/{docs/sdk/lex-agent.md => content/docs/sdk/lex-agent/overview.md} (98%) create mode 100644 packages/docs/content/docs/sdk/meta.json create mode 100644 packages/docs/content/docs/sdk/oauth-client-browser/changelog.md create mode 100644 packages/docs/content/docs/sdk/oauth-client-browser/meta.json rename packages/docs/{docs/sdk/oauth-client-browser.md => content/docs/sdk/oauth-client-browser/overview.md} (99%) create mode 100644 packages/docs/content/docs/sdk/oauth-client-node/changelog.md create mode 100644 packages/docs/content/docs/sdk/oauth-client-node/meta.json rename packages/docs/{docs/sdk/oauth-client-node.md => content/docs/sdk/oauth-client-node/overview.md} (99%) create mode 100644 packages/docs/content/docs/sdk/oauth-client/changelog.md create mode 100644 packages/docs/content/docs/sdk/oauth-client/meta.json rename packages/docs/{docs/sdk/oauth-client.md => content/docs/sdk/oauth-client/overview.md} (99%) rename packages/docs/{ => content}/docs/sdk/overview.md (99%) create mode 100644 packages/docs/content/docs/tutorials/meta.json rename packages/docs/{ => content}/docs/tutorials/statusphere.md (99%) delete mode 100644 packages/docs/docusaurus.config.ts create mode 100644 packages/docs/next-env.d.ts create mode 100644 packages/docs/next.config.mts create mode 100644 packages/docs/postcss.config.mjs rename packages/docs/{static => public}/img/favicon.png (100%) rename packages/docs/{static => public}/img/logo.dark.png (100%) rename packages/docs/{static => public}/img/logo.light.png (100%) rename packages/docs/{static => public}/img/og.png (100%) delete mode 100644 packages/docs/sidebars.ts create mode 100644 packages/docs/source.config.ts create mode 100644 packages/docs/src/app/docs/[[...slug]]/not-found.tsx create mode 100644 packages/docs/src/app/docs/[[...slug]]/page.tsx create mode 100644 packages/docs/src/app/docs/layout.tsx create mode 100644 packages/docs/src/app/global.css create mode 100644 packages/docs/src/app/layout.tsx create mode 100644 packages/docs/src/app/page.tsx create mode 100644 packages/docs/src/components/mermaid.tsx create mode 100644 packages/docs/src/lib/fonts.ts create mode 100644 packages/docs/src/lib/source.ts diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore index 0ff5702..158aaa3 100644 --- a/packages/docs/.gitignore +++ b/packages/docs/.gitignore @@ -1,6 +1,8 @@ .vercel .env*.local +.next +.source # Generated changelogs (built from GitHub releases) -docs/reference/changelog.md -docs/sdk/changelog-*.md +content/docs/reference/changelog.md +content/docs/sdk/changelog-*.md diff --git a/packages/docs/docs/reference/admin/admin-api.md b/packages/docs/content/docs/api-reference/admin/admin-api.md similarity index 99% rename from packages/docs/docs/reference/admin/admin-api.md rename to packages/docs/content/docs/api-reference/admin/admin-api.md index b94f655..dea2496 100644 --- a/packages/docs/docs/reference/admin/admin-api.md +++ b/packages/docs/content/docs/api-reference/admin/admin-api.md @@ -1,4 +1,6 @@ -# Admin API +--- +title: "Overview" +--- The admin API lets you manage lexicons, monitor records, run backfill jobs, and control user access. All endpoints live under `/admin` and require authentication from a DID that exists in the `users` table, with the appropriate [permissions](../../guides/admin/permissions.md) for the endpoint being called. You can also manage all of this through the [web dashboard](../../getting-started/dashboard.md). diff --git a/packages/docs/docs/reference/admin/api-clients.md b/packages/docs/content/docs/api-reference/admin/api-clients.md similarity index 99% rename from packages/docs/docs/reference/admin/api-clients.md rename to packages/docs/content/docs/api-reference/admin/api-clients.md index 79be48f..6178c99 100644 --- a/packages/docs/docs/reference/admin/api-clients.md +++ b/packages/docs/content/docs/api-reference/admin/api-clients.md @@ -1,4 +1,6 @@ -# API Clients +--- +title: "API Clients" +--- API clients identify third-party applications that call HappyView's XRPC endpoints. Every request — authenticated or not — needs an `X-Client-Key` header (or `client_key` query param). Requests without one get `401 Unauthorized`. The client key is HappyView's rate-limit bucket. diff --git a/packages/docs/docs/reference/admin/api-keys.md b/packages/docs/content/docs/api-reference/admin/api-keys.md similarity index 98% rename from packages/docs/docs/reference/admin/api-keys.md rename to packages/docs/content/docs/api-reference/admin/api-keys.md index 1280707..b437637 100644 --- a/packages/docs/docs/reference/admin/api-keys.md +++ b/packages/docs/content/docs/api-reference/admin/api-keys.md @@ -1,4 +1,6 @@ -# API Keys +--- +title: "API Keys" +--- Manage API keys for programmatic access. See the [API Keys guide](../../guides/admin/api-keys.md) for usage details. diff --git a/packages/docs/docs/reference/admin/backfill.md b/packages/docs/content/docs/api-reference/admin/backfill.md similarity index 98% rename from packages/docs/docs/reference/admin/backfill.md rename to packages/docs/content/docs/api-reference/admin/backfill.md index 03736f6..9b4d339 100644 --- a/packages/docs/docs/reference/admin/backfill.md +++ b/packages/docs/content/docs/api-reference/admin/backfill.md @@ -1,4 +1,6 @@ -# Backfill +--- +title: "Backfill" +--- Create and monitor historical backfill jobs. See the [Backfill guide](../../guides/indexing/backfill.md) for background. diff --git a/packages/docs/docs/reference/admin/domains.md b/packages/docs/content/docs/api-reference/admin/domains.md similarity index 99% rename from packages/docs/docs/reference/admin/domains.md rename to packages/docs/content/docs/api-reference/admin/domains.md index 711ce9c..5c90d0e 100644 --- a/packages/docs/docs/reference/admin/domains.md +++ b/packages/docs/content/docs/api-reference/admin/domains.md @@ -1,4 +1,6 @@ -# Domains +--- +title: "Domains" +--- Manage the domains a HappyView instance serves. Each domain gets its own atproto OAuth client identity. The primary domain is set from `PUBLIC_URL` on first boot. All endpoints require the `settings:manage` permission. diff --git a/packages/docs/docs/reference/admin/events.md b/packages/docs/content/docs/api-reference/admin/events.md similarity index 98% rename from packages/docs/docs/reference/admin/events.md rename to packages/docs/content/docs/api-reference/admin/events.md index f54a7f3..d463647 100644 --- a/packages/docs/docs/reference/admin/events.md +++ b/packages/docs/content/docs/api-reference/admin/events.md @@ -1,4 +1,6 @@ -# Event Logs +--- +title: "Event Logs" +--- HappyView logs system events — lexicon changes, record operations, script errors, user actions, and more. See the [Event Logs guide](../../guides/admin/event-logs.md) for details on event types and retention. diff --git a/packages/docs/docs/reference/admin/labelers.md b/packages/docs/content/docs/api-reference/admin/labelers.md similarity index 98% rename from packages/docs/docs/reference/admin/labelers.md rename to packages/docs/content/docs/api-reference/admin/labelers.md index 18b942c..d573ba6 100644 --- a/packages/docs/docs/reference/admin/labelers.md +++ b/packages/docs/content/docs/api-reference/admin/labelers.md @@ -1,4 +1,6 @@ -# Labelers +--- +title: "Labelers" +--- Manage external labeler subscriptions. See the [Labelers guide](../../guides/features/labelers.md) for background. diff --git a/packages/docs/docs/reference/admin/lexicons.md b/packages/docs/content/docs/api-reference/admin/lexicons.md similarity index 99% rename from packages/docs/docs/reference/admin/lexicons.md rename to packages/docs/content/docs/api-reference/admin/lexicons.md index a951116..c312407 100644 --- a/packages/docs/docs/reference/admin/lexicons.md +++ b/packages/docs/content/docs/api-reference/admin/lexicons.md @@ -1,4 +1,6 @@ -# Lexicons +--- +title: "Lexicons" +--- Manage lexicons and network lexicons. See the [Lexicons guide](../../guides/indexing/lexicons.md) for background on how lexicons drive indexing and XRPC routing. diff --git a/packages/docs/content/docs/api-reference/admin/meta.json b/packages/docs/content/docs/api-reference/admin/meta.json new file mode 100644 index 0000000..5582234 --- /dev/null +++ b/packages/docs/content/docs/api-reference/admin/meta.json @@ -0,0 +1,19 @@ +{ + "title": "Admin API", + "pages": [ + "admin-api", + "lexicons", + "stats", + "backfill", + "events", + "api-keys", + "users", + "labelers", + "settings", + "xrpc-proxy", + "domains", + "script-variables", + "api-clients", + "plugins" + ] +} diff --git a/packages/docs/docs/reference/admin/plugins.md b/packages/docs/content/docs/api-reference/admin/plugins.md similarity index 99% rename from packages/docs/docs/reference/admin/plugins.md rename to packages/docs/content/docs/api-reference/admin/plugins.md index 30393fc..fdead49 100644 --- a/packages/docs/docs/reference/admin/plugins.md +++ b/packages/docs/content/docs/api-reference/admin/plugins.md @@ -1,4 +1,6 @@ -# Plugins +--- +title: "Plugins" +--- Plugins extend HappyView with WebAssembly modules sourced from the [official plugin registry](../../guides/features/plugins.md) or any URL serving a `manifest.json`. Most endpoints take a plugin manifest URL and load (or reload) the plugin in place — no restart needed. Encrypted plugin secrets require `TOKEN_ENCRYPTION_KEY` to be configured. diff --git a/packages/docs/docs/reference/admin/script-variables.md b/packages/docs/content/docs/api-reference/admin/script-variables.md similarity index 96% rename from packages/docs/docs/reference/admin/script-variables.md rename to packages/docs/content/docs/api-reference/admin/script-variables.md index 8850992..2b0f51d 100644 --- a/packages/docs/docs/reference/admin/script-variables.md +++ b/packages/docs/content/docs/api-reference/admin/script-variables.md @@ -1,4 +1,6 @@ -# Script Variables +--- +title: "Script Variables" +--- Script variables are encrypted key/value pairs available to Lua scripts via the `vars` global. Use them for secrets like API tokens. diff --git a/packages/docs/docs/reference/admin/settings.md b/packages/docs/content/docs/api-reference/admin/settings.md similarity index 96% rename from packages/docs/docs/reference/admin/settings.md rename to packages/docs/content/docs/api-reference/admin/settings.md index e88724b..7c975e4 100644 --- a/packages/docs/docs/reference/admin/settings.md +++ b/packages/docs/content/docs/api-reference/admin/settings.md @@ -1,4 +1,6 @@ -# Instance Settings +--- +title: "Instance Settings" +--- Instance settings override environment variables at runtime — things like app name, ToS URL, privacy policy URL, and logo. Settings stored here take precedence over their env var equivalents. All endpoints require the `settings:manage` permission. diff --git a/packages/docs/docs/reference/admin/stats.md b/packages/docs/content/docs/api-reference/admin/stats.md similarity index 93% rename from packages/docs/docs/reference/admin/stats.md rename to packages/docs/content/docs/api-reference/admin/stats.md index cab57b4..64c005c 100644 --- a/packages/docs/docs/reference/admin/stats.md +++ b/packages/docs/content/docs/api-reference/admin/stats.md @@ -1,4 +1,6 @@ -# Stats +--- +title: "Stats" +--- ```sh # All examples assume $TOKEN is an API key (hv_...) diff --git a/packages/docs/docs/reference/admin/users.md b/packages/docs/content/docs/api-reference/admin/users.md similarity index 99% rename from packages/docs/docs/reference/admin/users.md rename to packages/docs/content/docs/api-reference/admin/users.md index b7b608e..22aed31 100644 --- a/packages/docs/docs/reference/admin/users.md +++ b/packages/docs/content/docs/api-reference/admin/users.md @@ -1,4 +1,6 @@ -# Users +--- +title: "Users" +--- Manage admin users and their permissions. See the [Permissions guide](../../guides/admin/permissions.md) for available permissions and templates. diff --git a/packages/docs/docs/reference/admin/xrpc-proxy.md b/packages/docs/content/docs/api-reference/admin/xrpc-proxy.md similarity index 98% rename from packages/docs/docs/reference/admin/xrpc-proxy.md rename to packages/docs/content/docs/api-reference/admin/xrpc-proxy.md index 8aa5cf5..bce8faa 100644 --- a/packages/docs/docs/reference/admin/xrpc-proxy.md +++ b/packages/docs/content/docs/api-reference/admin/xrpc-proxy.md @@ -1,4 +1,6 @@ -# XRPC Proxy +--- +title: "XRPC Proxy" +--- Control which unrecognized XRPC methods HappyView forwards to their resolved authority. Locally registered lexicons are always served regardless of this setting. diff --git a/packages/docs/docs/reference/lua/atproto-api.md b/packages/docs/content/docs/api-reference/lua/atproto-api.md similarity index 99% rename from packages/docs/docs/reference/lua/atproto-api.md rename to packages/docs/content/docs/api-reference/lua/atproto-api.md index 9286b7f..b6e6c05 100644 --- a/packages/docs/docs/reference/lua/atproto-api.md +++ b/packages/docs/content/docs/api-reference/lua/atproto-api.md @@ -1,4 +1,6 @@ -# atproto API +--- +title: "atproto API" +--- The `atproto` table provides atproto utility functions. Available in queries, procedures, and [index hooks](../../guides/indexing/index-hooks.md). diff --git a/packages/docs/docs/reference/lua/database-api.md b/packages/docs/content/docs/api-reference/lua/database-api.md similarity index 99% rename from packages/docs/docs/reference/lua/database-api.md rename to packages/docs/content/docs/api-reference/lua/database-api.md index c6797c7..6f80d67 100644 --- a/packages/docs/docs/reference/lua/database-api.md +++ b/packages/docs/content/docs/api-reference/lua/database-api.md @@ -1,4 +1,6 @@ -# Database API +--- +title: "Database API" +--- The `db` table provides access to the database. Available in queries, procedures, and [index hooks](../../guides/indexing/index-hooks.md). diff --git a/packages/docs/docs/reference/lua/http-api.md b/packages/docs/content/docs/api-reference/lua/http-api.md similarity index 98% rename from packages/docs/docs/reference/lua/http-api.md rename to packages/docs/content/docs/api-reference/lua/http-api.md index 8d1c935..b6b9aee 100644 --- a/packages/docs/docs/reference/lua/http-api.md +++ b/packages/docs/content/docs/api-reference/lua/http-api.md @@ -1,4 +1,6 @@ -# HTTP API +--- +title: "HTTP API" +--- The `http` table provides async HTTP client functions. Available in queries, procedures, and [index hooks](../../guides/indexing/index-hooks.md). diff --git a/packages/docs/docs/reference/lua/json-api.md b/packages/docs/content/docs/api-reference/lua/json-api.md similarity index 95% rename from packages/docs/docs/reference/lua/json-api.md rename to packages/docs/content/docs/api-reference/lua/json-api.md index 7d712d7..67f65fa 100644 --- a/packages/docs/docs/reference/lua/json-api.md +++ b/packages/docs/content/docs/api-reference/lua/json-api.md @@ -1,4 +1,6 @@ -# JSON API +--- +title: "JSON API" +--- The `json` global provides JSON serialization and deserialization. Available in queries, procedures, and [index hooks](../../guides/indexing/index-hooks.md). diff --git a/packages/docs/content/docs/api-reference/lua/meta.json b/packages/docs/content/docs/api-reference/lua/meta.json new file mode 100644 index 0000000..d65b99a --- /dev/null +++ b/packages/docs/content/docs/api-reference/lua/meta.json @@ -0,0 +1,13 @@ +{ + "title": "Lua API", + "pages": [ + "record-api", + "database-api", + "http-api", + "xrpc-lua-api", + "atproto-api", + "json-api", + "utility-globals", + "standard-libraries" + ] +} diff --git a/packages/docs/docs/reference/lua/record-api.md b/packages/docs/content/docs/api-reference/lua/record-api.md similarity index 99% rename from packages/docs/docs/reference/lua/record-api.md rename to packages/docs/content/docs/api-reference/lua/record-api.md index 79e2107..d15fec9 100644 --- a/packages/docs/docs/reference/lua/record-api.md +++ b/packages/docs/content/docs/api-reference/lua/record-api.md @@ -1,4 +1,6 @@ -# Record API +--- +title: "Record API" +--- The `Record` API is only available in **procedure** scripts. It handles creating, updating, loading, and deleting atproto records. Writes are proxied to the caller's PDS and indexed locally. diff --git a/packages/docs/docs/reference/lua/standard-libraries.md b/packages/docs/content/docs/api-reference/lua/standard-libraries.md similarity index 99% rename from packages/docs/docs/reference/lua/standard-libraries.md rename to packages/docs/content/docs/api-reference/lua/standard-libraries.md index c5a4d24..adbf908 100644 --- a/packages/docs/docs/reference/lua/standard-libraries.md +++ b/packages/docs/content/docs/api-reference/lua/standard-libraries.md @@ -1,4 +1,6 @@ -# Standard Libraries +--- +title: "Standard Libraries" +--- The following Lua 5.4 standard library modules and builtins are available in the HappyView sandbox. diff --git a/packages/docs/docs/reference/lua/utility-globals.md b/packages/docs/content/docs/api-reference/lua/utility-globals.md similarity index 98% rename from packages/docs/docs/reference/lua/utility-globals.md rename to packages/docs/content/docs/api-reference/lua/utility-globals.md index 235219c..de1bb5a 100644 --- a/packages/docs/docs/reference/lua/utility-globals.md +++ b/packages/docs/content/docs/api-reference/lua/utility-globals.md @@ -1,4 +1,6 @@ -# Utility Globals +--- +title: "Utility Globals" +--- Global functions available in queries, procedures, and [index hooks](../../guides/indexing/index-hooks.md). These don't belong to a specific API table — they're available at the top level of any Lua script. diff --git a/packages/docs/docs/reference/lua/xrpc-lua-api.md b/packages/docs/content/docs/api-reference/lua/xrpc-lua-api.md similarity index 98% rename from packages/docs/docs/reference/lua/xrpc-lua-api.md rename to packages/docs/content/docs/api-reference/lua/xrpc-lua-api.md index f0a9a85..8179a30 100644 --- a/packages/docs/docs/reference/lua/xrpc-lua-api.md +++ b/packages/docs/content/docs/api-reference/lua/xrpc-lua-api.md @@ -1,4 +1,6 @@ -# XRPC Lua API +--- +title: "XRPC Lua API" +--- The `xrpc` table provides cross-endpoint XRPC calls. Available in queries, procedures, and [index hooks](../../guides/indexing/index-hooks.md). diff --git a/packages/docs/content/docs/api-reference/meta.json b/packages/docs/content/docs/api-reference/meta.json new file mode 100644 index 0000000..c46480f --- /dev/null +++ b/packages/docs/content/docs/api-reference/meta.json @@ -0,0 +1,9 @@ +{ + "title": "API Reference", + "pages": [ + "xrpc-api", + "admin", + "oauth", + "lua" + ] +} diff --git a/packages/docs/docs/reference/oauth/api-clients.md b/packages/docs/content/docs/api-reference/oauth/api-clients.md similarity index 99% rename from packages/docs/docs/reference/oauth/api-clients.md rename to packages/docs/content/docs/api-reference/oauth/api-clients.md index e77416b..72d257c 100644 --- a/packages/docs/docs/reference/oauth/api-clients.md +++ b/packages/docs/content/docs/api-reference/oauth/api-clients.md @@ -1,4 +1,6 @@ -# Third-Party API Clients +--- +title: "Third-Party API Clients" +--- Third-party applications can manage their own API clients via the `dev.happyview.*` XRPC endpoints. A third-party client is always tied to exactly one parent — the admin-created top-level API client whose DPoP session made the request. Only one level of nesting is allowed; third-party clients cannot create further children. Each third-party client gets its own rate limit bucket with instance default settings. diff --git a/packages/docs/content/docs/api-reference/oauth/meta.json b/packages/docs/content/docs/api-reference/oauth/meta.json new file mode 100644 index 0000000..4c2f6d3 --- /dev/null +++ b/packages/docs/content/docs/api-reference/oauth/meta.json @@ -0,0 +1,6 @@ +{ + "title": "OAuth API", + "pages": [ + "api-clients" + ] +} diff --git a/packages/docs/docs/reference/xrpc-api.md b/packages/docs/content/docs/api-reference/xrpc-api.md similarity index 99% rename from packages/docs/docs/reference/xrpc-api.md rename to packages/docs/content/docs/api-reference/xrpc-api.md index c6aeb65..47fda88 100644 --- a/packages/docs/docs/reference/xrpc-api.md +++ b/packages/docs/content/docs/api-reference/xrpc-api.md @@ -1,4 +1,6 @@ -# XRPC API +--- +title: "XRPC API" +--- [XRPC](https://atproto.com/specs/xrpc) is the HTTP-based RPC protocol used by the atproto. HappyView dynamically registers XRPC endpoints based on your uploaded [lexicons](../guides/indexing/lexicons.md): query lexicons become `GET /xrpc/{nsid}` routes, procedure lexicons become `POST /xrpc/{nsid}` routes. diff --git a/packages/docs/content/docs/experimental/meta.json b/packages/docs/content/docs/experimental/meta.json new file mode 100644 index 0000000..0655f33 --- /dev/null +++ b/packages/docs/content/docs/experimental/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Experimental", + "pages": [ + "spaces" + ] +} diff --git a/packages/docs/docs/experimental/spaces/changelog.md b/packages/docs/content/docs/experimental/spaces/changelog.md similarity index 99% rename from packages/docs/docs/experimental/spaces/changelog.md rename to packages/docs/content/docs/experimental/spaces/changelog.md index deaf36e..fda0ec3 100644 --- a/packages/docs/docs/experimental/spaces/changelog.md +++ b/packages/docs/content/docs/experimental/spaces/changelog.md @@ -1,4 +1,6 @@ -# Changelog +--- +title: "Changelog" +--- ## Latest diff --git a/packages/docs/docs/experimental/spaces/credentials.md b/packages/docs/content/docs/experimental/spaces/credentials.md similarity index 99% rename from packages/docs/docs/experimental/spaces/credentials.md rename to packages/docs/content/docs/experimental/spaces/credentials.md index afd8855..ab17537 100644 --- a/packages/docs/docs/experimental/spaces/credentials.md +++ b/packages/docs/content/docs/experimental/spaces/credentials.md @@ -1,4 +1,6 @@ -# Credentials +--- +title: "Credentials" +--- :::caution Experimental This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. diff --git a/packages/docs/docs/experimental/spaces.md b/packages/docs/content/docs/experimental/spaces/index.md similarity index 99% rename from packages/docs/docs/experimental/spaces.md rename to packages/docs/content/docs/experimental/spaces/index.md index 41d9e0e..37cda75 100644 --- a/packages/docs/docs/experimental/spaces.md +++ b/packages/docs/content/docs/experimental/spaces/index.md @@ -1,4 +1,6 @@ -# Permissioned Spaces +--- +title: "Overview" +--- :::caution Experimental Permissioned Spaces are experimental and the API will change. This implementation follows Daniel Holmgren's [Permissioned Data Diaries](https://dholms.leaflet.pub/3meluqcwky22a) and aligns structurally with the `permissioned-data` branch on `bluesky-social/atproto`, but uses a `dev.happyview` namespace to allow iteration while the official spec stabilizes. diff --git a/packages/docs/docs/experimental/spaces/invites.md b/packages/docs/content/docs/experimental/spaces/invites.md similarity index 99% rename from packages/docs/docs/experimental/spaces/invites.md rename to packages/docs/content/docs/experimental/spaces/invites.md index b0e15ce..169f512 100644 --- a/packages/docs/docs/experimental/spaces/invites.md +++ b/packages/docs/content/docs/experimental/spaces/invites.md @@ -1,4 +1,6 @@ -# Invites +--- +title: "Invites" +--- :::caution Experimental This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. diff --git a/packages/docs/docs/experimental/spaces/managing-spaces.md b/packages/docs/content/docs/experimental/spaces/managing-spaces.md similarity index 99% rename from packages/docs/docs/experimental/spaces/managing-spaces.md rename to packages/docs/content/docs/experimental/spaces/managing-spaces.md index caff754..59d2315 100644 --- a/packages/docs/docs/experimental/spaces/managing-spaces.md +++ b/packages/docs/content/docs/experimental/spaces/managing-spaces.md @@ -1,4 +1,6 @@ -# Managing Spaces +--- +title: "Managing Spaces" +--- :::caution Experimental This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. diff --git a/packages/docs/docs/experimental/spaces/members.md b/packages/docs/content/docs/experimental/spaces/members.md similarity index 99% rename from packages/docs/docs/experimental/spaces/members.md rename to packages/docs/content/docs/experimental/spaces/members.md index 24299a8..a290b1b 100644 --- a/packages/docs/docs/experimental/spaces/members.md +++ b/packages/docs/content/docs/experimental/spaces/members.md @@ -1,4 +1,6 @@ -# Members +--- +title: "Members" +--- :::caution Experimental This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. diff --git a/packages/docs/content/docs/experimental/spaces/meta.json b/packages/docs/content/docs/experimental/spaces/meta.json new file mode 100644 index 0000000..cdfbf93 --- /dev/null +++ b/packages/docs/content/docs/experimental/spaces/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Permissioned Spaces", + "pages": [ + "index", + "managing-spaces", + "members", + "records", + "credentials", + "invites", + "changelog" + ] +} diff --git a/packages/docs/docs/experimental/spaces/records.md b/packages/docs/content/docs/experimental/spaces/records.md similarity index 99% rename from packages/docs/docs/experimental/spaces/records.md rename to packages/docs/content/docs/experimental/spaces/records.md index b58dfa9..bac88c3 100644 --- a/packages/docs/docs/experimental/spaces/records.md +++ b/packages/docs/content/docs/experimental/spaces/records.md @@ -1,4 +1,6 @@ -# Records +--- +title: "Records" +--- :::caution Experimental This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. diff --git a/packages/docs/docs/getting-started/authentication.md b/packages/docs/content/docs/getting-started/authentication.md similarity index 99% rename from packages/docs/docs/getting-started/authentication.md rename to packages/docs/content/docs/getting-started/authentication.md index 0ae4a2a..16a443a 100644 --- a/packages/docs/docs/getting-started/authentication.md +++ b/packages/docs/content/docs/getting-started/authentication.md @@ -1,4 +1,6 @@ -# Authentication +--- +title: "Authentication" +--- HappyView has two distinct authentication surfaces: diff --git a/packages/docs/docs/getting-started/configuration.md b/packages/docs/content/docs/getting-started/configuration.md similarity index 99% rename from packages/docs/docs/getting-started/configuration.md rename to packages/docs/content/docs/getting-started/configuration.md index 0c7f530..421e65f 100644 --- a/packages/docs/docs/getting-started/configuration.md +++ b/packages/docs/content/docs/getting-started/configuration.md @@ -1,4 +1,6 @@ -# Configuration +--- +title: "Configuration" +--- HappyView is configured via environment variables. A `.env` file in the project root is loaded automatically on startup. See [Deployment](deployment/docker.md) for local setup or [Production Deployment](production-deployment.md) for production setup. diff --git a/packages/docs/docs/getting-started/dashboard.md b/packages/docs/content/docs/getting-started/dashboard.md similarity index 99% rename from packages/docs/docs/getting-started/dashboard.md rename to packages/docs/content/docs/getting-started/dashboard.md index b5292bf..82a3485 100644 --- a/packages/docs/docs/getting-started/dashboard.md +++ b/packages/docs/content/docs/getting-started/dashboard.md @@ -1,4 +1,6 @@ -# Dashboard +--- +title: "Dashboard" +--- HappyView ships with a web dashboard that provides a visual interface for everything the [admin API](../reference/admin/admin-api.md) offers. It runs as a separate Next.js application alongside the Rust backend and authenticates via atproto OAuth. diff --git a/packages/docs/docs/getting-started/deployment/docker.md b/packages/docs/content/docs/getting-started/deployment/docker.md similarity index 98% rename from packages/docs/docs/getting-started/deployment/docker.md rename to packages/docs/content/docs/getting-started/deployment/docker.md index d111ab2..2ca804a 100644 --- a/packages/docs/docs/getting-started/deployment/docker.md +++ b/packages/docs/content/docs/getting-started/deployment/docker.md @@ -1,4 +1,6 @@ -# Local Development with Docker +--- +title: "Docker" +--- This guide runs HappyView and the dashboard locally using Docker Compose. diff --git a/packages/docs/content/docs/getting-started/deployment/meta.json b/packages/docs/content/docs/getting-started/deployment/meta.json new file mode 100644 index 0000000..894c06a --- /dev/null +++ b/packages/docs/content/docs/getting-started/deployment/meta.json @@ -0,0 +1,9 @@ +{ + "title": "Deployment", + "pages": [ + "railway", + "docker", + "other", + "production" + ] +} diff --git a/packages/docs/docs/getting-started/deployment/other.md b/packages/docs/content/docs/getting-started/deployment/other.md similarity index 98% rename from packages/docs/docs/getting-started/deployment/other.md rename to packages/docs/content/docs/getting-started/deployment/other.md index 5eae03a..b048f28 100644 --- a/packages/docs/docs/getting-started/deployment/other.md +++ b/packages/docs/content/docs/getting-started/deployment/other.md @@ -1,4 +1,6 @@ -# Local Development from Source +--- +title: "From Source" +--- This guide runs HappyView directly with `cargo run`. If you'd rather use Docker Compose, see [Local Development with Docker](docker.md). diff --git a/packages/docs/docs/getting-started/production-deployment.md b/packages/docs/content/docs/getting-started/deployment/production.md similarity index 99% rename from packages/docs/docs/getting-started/production-deployment.md rename to packages/docs/content/docs/getting-started/deployment/production.md index 640a66d..e4bfa6c 100644 --- a/packages/docs/docs/getting-started/production-deployment.md +++ b/packages/docs/content/docs/getting-started/deployment/production.md @@ -1,4 +1,6 @@ -# Production +--- +title: "Production" +--- This page covers what to change when taking a HappyView instance from local development to production. For setup instructions, see [Deployment](../getting-started/deployment/railway.md). This page assumes you already have a working deployment and focuses on hardening and operational concerns. diff --git a/packages/docs/docs/getting-started/deployment/railway.md b/packages/docs/content/docs/getting-started/deployment/railway.md similarity index 98% rename from packages/docs/docs/getting-started/deployment/railway.md rename to packages/docs/content/docs/getting-started/deployment/railway.md index 79046c5..d43d10b 100644 --- a/packages/docs/docs/getting-started/deployment/railway.md +++ b/packages/docs/content/docs/getting-started/deployment/railway.md @@ -1,4 +1,6 @@ -# Deploy on Railway +--- +title: "Railway" +--- The fastest way to get HappyView running is with Railway. Choose the database you want and these templates will deploy HappyView with a single click: diff --git a/packages/docs/content/docs/getting-started/meta.json b/packages/docs/content/docs/getting-started/meta.json new file mode 100644 index 0000000..290dbfe --- /dev/null +++ b/packages/docs/content/docs/getting-started/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Getting Started", + "pages": [ + "quickstart", + "configuration", + "dashboard", + "authentication", + "deployment" + ] +} diff --git a/packages/docs/docs/getting-started/quickstart.md b/packages/docs/content/docs/getting-started/quickstart.md similarity index 99% rename from packages/docs/docs/getting-started/quickstart.md rename to packages/docs/content/docs/getting-started/quickstart.md index 4fcf78d..c7e7da8 100644 --- a/packages/docs/docs/getting-started/quickstart.md +++ b/packages/docs/content/docs/getting-started/quickstart.md @@ -1,4 +1,6 @@ -# Quickstart +--- +title: "Quickstart" +--- This page walks you through the fastest path to a working HappyView instance. By the end, you'll have an AppView that indexes records from the atproto network and serves XRPC endpoints. diff --git a/packages/docs/docs/guides/features/api-clients.md b/packages/docs/content/docs/guides/api-clients.md similarity index 99% rename from packages/docs/docs/guides/features/api-clients.md rename to packages/docs/content/docs/guides/api-clients.md index 274c226..14d7341 100644 --- a/packages/docs/docs/guides/features/api-clients.md +++ b/packages/docs/content/docs/guides/api-clients.md @@ -1,4 +1,6 @@ -# API Clients +--- +title: "API Clients" +--- API clients identify your application to a HappyView instance. Every XRPC request — even unauthenticated queries — must include a client key. This guide walks through creating a client, choosing between public and confidential types, and authenticating users. diff --git a/packages/docs/docs/guides/admin/api-keys.md b/packages/docs/content/docs/guides/api-keys.md similarity index 99% rename from packages/docs/docs/guides/admin/api-keys.md rename to packages/docs/content/docs/guides/api-keys.md index a5a9655..b21765e 100644 --- a/packages/docs/docs/guides/admin/api-keys.md +++ b/packages/docs/content/docs/guides/api-keys.md @@ -1,4 +1,6 @@ -# API Keys +--- +title: "API Keys" +--- API keys let you authenticate with the admin API without going through the OAuth flow. They're useful for CI/CD pipelines, scripts, and any automation that needs to manage your HappyView instance programmatically. diff --git a/packages/docs/docs/guides/features/attestation-signing.md b/packages/docs/content/docs/guides/attestation-signing.md similarity index 99% rename from packages/docs/docs/guides/features/attestation-signing.md rename to packages/docs/content/docs/guides/attestation-signing.md index 3348c2f..077f84f 100644 --- a/packages/docs/docs/guides/features/attestation-signing.md +++ b/packages/docs/content/docs/guides/attestation-signing.md @@ -1,4 +1,6 @@ -# Attestation Signing +--- +title: "Attestation Signing" +--- HappyView can sign records with an ECDSA (secp256k1) keypair so their origin can be verified later. Lua scripts call `atproto.sign()` to attach an inline signature to a record and `atproto.verify_signature()` to check one. HappyView's implementation follows the [atproto attestation spec](https://tangled.org/strings/did:plc:cbkjy5n7bk3ax2wplmtjofq2/3m3fy2xuahc22). diff --git a/packages/docs/docs/guides/indexing/backfill.md b/packages/docs/content/docs/guides/backfill.md similarity index 99% rename from packages/docs/docs/guides/indexing/backfill.md rename to packages/docs/content/docs/guides/backfill.md index 292a05c..ba2b638 100644 --- a/packages/docs/docs/guides/indexing/backfill.md +++ b/packages/docs/content/docs/guides/backfill.md @@ -1,4 +1,6 @@ -# Backfill +--- +title: "Backfill" +--- When you add a new record-type lexicon, HappyView starts indexing new records from that moment via [Jetstream](https://github.com/bluesky-social/jetstream). But what about records that already exist on the network? That's what backfill does: HappyView discovers repos via the relay and fetches records directly from each user's PDS. diff --git a/packages/docs/docs/guides/database/database-setup.md b/packages/docs/content/docs/guides/database/database-setup.md similarity index 98% rename from packages/docs/docs/guides/database/database-setup.md rename to packages/docs/content/docs/guides/database/database-setup.md index 88919e5..9e13162 100644 --- a/packages/docs/docs/guides/database/database-setup.md +++ b/packages/docs/content/docs/guides/database/database-setup.md @@ -1,4 +1,6 @@ -# Database Setup +--- +title: "Database Setup" +--- HappyView supports two database backends: **SQLite** (default) and **PostgreSQL**. The backend is auto-detected from your `DATABASE_URL` scheme, or you can set `DATABASE_BACKEND` explicitly. diff --git a/packages/docs/content/docs/guides/database/meta.json b/packages/docs/content/docs/guides/database/meta.json new file mode 100644 index 0000000..b3a9ea1 --- /dev/null +++ b/packages/docs/content/docs/guides/database/meta.json @@ -0,0 +1,8 @@ +{ + "title": "Database", + "pages": [ + "database-setup", + "postgres-to-sqlite-migration", + "sqlite-to-postgres-migration" + ] +} diff --git a/packages/docs/docs/guides/database/postgres-to-sqlite-migration.md b/packages/docs/content/docs/guides/database/postgres-to-sqlite-migration.md similarity index 98% rename from packages/docs/docs/guides/database/postgres-to-sqlite-migration.md rename to packages/docs/content/docs/guides/database/postgres-to-sqlite-migration.md index 5a8afc0..0ce1a86 100644 --- a/packages/docs/docs/guides/database/postgres-to-sqlite-migration.md +++ b/packages/docs/content/docs/guides/database/postgres-to-sqlite-migration.md @@ -1,4 +1,6 @@ -# Migrating from Postgres to SQLite +--- +title: "Postgres to SQLite Migration" +--- This guide covers migrating an existing HappyView deployment from Postgres to SQLite. If you are staying on Postgres, no action is required. diff --git a/packages/docs/docs/guides/database/sqlite-to-postgres-migration.md b/packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md similarity index 98% rename from packages/docs/docs/guides/database/sqlite-to-postgres-migration.md rename to packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md index d75c814..edfead4 100644 --- a/packages/docs/docs/guides/database/sqlite-to-postgres-migration.md +++ b/packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md @@ -1,4 +1,6 @@ -# Migrating from SQLite to Postgres +--- +title: "SQLite to Postgres Migration" +--- This guide covers migrating an existing HappyView deployment from SQLite to Postgres. If you are staying on SQLite, no action is required. diff --git a/packages/docs/docs/guides/features/developing-plugins.md b/packages/docs/content/docs/guides/developing-plugins.md similarity index 99% rename from packages/docs/docs/guides/features/developing-plugins.md rename to packages/docs/content/docs/guides/developing-plugins.md index 03d4fab..a0ca83b 100644 --- a/packages/docs/docs/guides/features/developing-plugins.md +++ b/packages/docs/content/docs/guides/developing-plugins.md @@ -1,4 +1,6 @@ -# Developing Plugins +--- +title: "Developing Plugins" +--- This guide covers how to build your own HappyView WASM plugins. For installing and configuring plugins, see the [Plugins guide](plugins.md). diff --git a/packages/docs/docs/guides/admin/event-logs.md b/packages/docs/content/docs/guides/event-logs.md similarity index 99% rename from packages/docs/docs/guides/admin/event-logs.md rename to packages/docs/content/docs/guides/event-logs.md index aebd43b..b1354d5 100644 --- a/packages/docs/docs/guides/admin/event-logs.md +++ b/packages/docs/content/docs/guides/event-logs.md @@ -1,4 +1,6 @@ -# Event Logs +--- +title: "Event Logs" +--- HappyView maintains an internal event log that records system activity — lexicon changes, record operations, Lua script executions and errors, user actions, API key events, backfill jobs, and Jetstream connectivity. Events are stored in the database and queryable via the [admin API](../../reference/admin/events.md). diff --git a/packages/docs/docs/guides/indexing/index-hooks.md b/packages/docs/content/docs/guides/index-hooks.md similarity index 99% rename from packages/docs/docs/guides/indexing/index-hooks.md rename to packages/docs/content/docs/guides/index-hooks.md index a7f37d1..2749e53 100644 --- a/packages/docs/docs/guides/indexing/index-hooks.md +++ b/packages/docs/content/docs/guides/index-hooks.md @@ -1,4 +1,6 @@ -# Index Hooks +--- +title: "Index Hooks" +--- Index hooks are Lua scripts that run whenever a record in a collection is created, updated, or deleted. They run **before** the record is indexed, giving you the ability to filter out unwanted records, transform record data before storage, or trigger side effects like syncing with external services. diff --git a/packages/docs/docs/guides/features/labelers.md b/packages/docs/content/docs/guides/labelers.md similarity index 99% rename from packages/docs/docs/guides/features/labelers.md rename to packages/docs/content/docs/guides/labelers.md index a5ce876..2b554e6 100644 --- a/packages/docs/docs/guides/features/labelers.md +++ b/packages/docs/content/docs/guides/labelers.md @@ -1,4 +1,6 @@ -# Labelers +--- +title: "Labelers" +--- Labelers are external services that apply content labels to records. They operate out-of-band — labeler data does not appear in repos or flow through relays. HappyView can subscribe to labelers and store the labels they emit, making them available on records in the admin dashboard and via Lua scripts. diff --git a/packages/docs/docs/guides/indexing/lexicons.md b/packages/docs/content/docs/guides/lexicons.md similarity index 99% rename from packages/docs/docs/guides/indexing/lexicons.md rename to packages/docs/content/docs/guides/lexicons.md index f5a74ca..85c1354 100644 --- a/packages/docs/docs/guides/indexing/lexicons.md +++ b/packages/docs/content/docs/guides/lexicons.md @@ -1,4 +1,6 @@ -# Lexicons +--- +title: "Lexicons" +--- Lexicons are the core building block of HappyView. They're [atproto schema definitions](https://atproto.com/specs/lexicon) that describe your data model, and HappyView uses them to decide which records to index from the network and what XRPC endpoints to serve. diff --git a/packages/docs/docs/guides/scripting.md b/packages/docs/content/docs/guides/lua-scripting.md similarity index 99% rename from packages/docs/docs/guides/scripting.md rename to packages/docs/content/docs/guides/lua-scripting.md index 62982d0..e22128d 100644 --- a/packages/docs/docs/guides/scripting.md +++ b/packages/docs/content/docs/guides/lua-scripting.md @@ -1,4 +1,6 @@ -# Lua Scripting +--- +title: "Lua Scripting" +--- Without Lua scripts, HappyView's query endpoints return raw records and procedure endpoints proxy simple creates and updates. Lua scripts let you go much further: diff --git a/packages/docs/content/docs/guides/meta.json b/packages/docs/content/docs/guides/meta.json new file mode 100644 index 0000000..0cf3422 --- /dev/null +++ b/packages/docs/content/docs/guides/meta.json @@ -0,0 +1,19 @@ +{ + "title": "Guides", + "pages": [ + "upgrading-to-v2", + "lexicons", + "backfill", + "index-hooks", + "lua-scripting", + "api-clients", + "attestation-signing", + "labelers", + "plugins", + "developing-plugins", + "api-keys", + "permissions", + "event-logs", + "database" + ] +} diff --git a/packages/docs/docs/guides/admin/permissions.md b/packages/docs/content/docs/guides/permissions.md similarity index 99% rename from packages/docs/docs/guides/admin/permissions.md rename to packages/docs/content/docs/guides/permissions.md index b6aa668..42ea1cd 100644 --- a/packages/docs/docs/guides/admin/permissions.md +++ b/packages/docs/content/docs/guides/permissions.md @@ -1,4 +1,6 @@ -# Permissions +--- +title: "Permissions" +--- HappyView uses a granular permission system to control access to the admin API. Each user has a set of permissions that determine which endpoints they can access. Permissions can be assigned individually, via templates, or both. diff --git a/packages/docs/docs/guides/features/plugins.md b/packages/docs/content/docs/guides/plugins.md similarity index 99% rename from packages/docs/docs/guides/features/plugins.md rename to packages/docs/content/docs/guides/plugins.md index 0715892..4281c57 100644 --- a/packages/docs/docs/guides/features/plugins.md +++ b/packages/docs/content/docs/guides/plugins.md @@ -1,4 +1,6 @@ -# Plugins +--- +title: "Plugins" +--- HappyView uses WASM plugins to extend its functionality. Plugins can integrate with external platforms, sync data to users' atproto identities, and more. Auth plugins — the first supported plugin type — enable users to link accounts from platforms like Steam, Xbox, itch.io, and others, then sync data like game libraries. diff --git a/packages/docs/docs/guides/upgrading-to-v2.md b/packages/docs/content/docs/guides/upgrading-to-v2.md similarity index 99% rename from packages/docs/docs/guides/upgrading-to-v2.md rename to packages/docs/content/docs/guides/upgrading-to-v2.md index 25c9f60..3abaffd 100644 --- a/packages/docs/docs/guides/upgrading-to-v2.md +++ b/packages/docs/content/docs/guides/upgrading-to-v2.md @@ -1,4 +1,6 @@ -# Migrating from v1 +--- +title: "Migrating from v1" +--- v2 consolidates HappyView, [Tap](https://github.com/bluesky-social/indigo/tree/main/cmd/tap), and [AIP](https://tangled.org/gamesgamesgamesgames.games/aip) into a single binary. Real-time indexing, backfill, and OAuth are now built in — there are no companion services to deploy. diff --git a/packages/docs/docs/README.md b/packages/docs/content/docs/index.md similarity index 99% rename from packages/docs/docs/README.md rename to packages/docs/content/docs/index.md index 1dfda7a..17c7e67 100644 --- a/packages/docs/docs/README.md +++ b/packages/docs/content/docs/index.md @@ -1,4 +1,6 @@ -# HappyView +--- +title: "Introduction" +--- HappyView is the best way to build an [AppView](https://atproto.com/guides/glossary#app-view) for the [AT Protocol](https://atproto.com). Upload your [lexicon](reference/glossary.md#atproto-terms) schemas and get a fully functional AppView, complete with [XRPC](reference/glossary.md#atproto-terms) endpoints, OAuth, real-time network sync, and historical [backfill](guides/indexing/backfill.md), without writing a single line of server code. diff --git a/packages/docs/content/docs/meta.json b/packages/docs/content/docs/meta.json new file mode 100644 index 0000000..1202053 --- /dev/null +++ b/packages/docs/content/docs/meta.json @@ -0,0 +1,19 @@ +{ + "pages": [ + "index", + "---Getting Started---", + "...getting-started", + "---Tutorials---", + "...tutorials", + "---Guides---", + "...guides", + "---JavaScript SDKs---", + "...sdk", + "---Experimental---", + "...experimental", + "---API Reference---", + "...api-reference", + "---Reference---", + "...reference" + ] +} diff --git a/packages/docs/docs/reference/architecture.md b/packages/docs/content/docs/reference/architecture.md similarity index 99% rename from packages/docs/docs/reference/architecture.md rename to packages/docs/content/docs/reference/architecture.md index 766c258..682e0a1 100644 --- a/packages/docs/docs/reference/architecture.md +++ b/packages/docs/content/docs/reference/architecture.md @@ -1,4 +1,6 @@ -# Architecture +--- +title: "Architecture" +--- Guide for contributors working on HappyView itself. For a user-facing overview, see the [Introduction](../README.md). diff --git a/packages/docs/docs/reference/glossary.md b/packages/docs/content/docs/reference/glossary.md similarity index 99% rename from packages/docs/docs/reference/glossary.md rename to packages/docs/content/docs/reference/glossary.md index f19dd87..8bf3d87 100644 --- a/packages/docs/docs/reference/glossary.md +++ b/packages/docs/content/docs/reference/glossary.md @@ -1,4 +1,6 @@ -# Glossary +--- +title: "Glossary" +--- Key terms used throughout the HappyView documentation. For a broader introduction to the atproto, see the [official ATProto glossary](https://atproto.com/guides/glossary). diff --git a/packages/docs/content/docs/reference/meta.json b/packages/docs/content/docs/reference/meta.json new file mode 100644 index 0000000..2a84973 --- /dev/null +++ b/packages/docs/content/docs/reference/meta.json @@ -0,0 +1,10 @@ +{ + "title": "Reference", + "pages": [ + "glossary", + "architecture", + "script-examples", + "troubleshooting", + "changelog" + ] +} diff --git a/packages/docs/docs/guides/scripting/algolia-sync.md b/packages/docs/content/docs/reference/script-examples/algolia-sync.md similarity index 98% rename from packages/docs/docs/guides/scripting/algolia-sync.md rename to packages/docs/content/docs/reference/script-examples/algolia-sync.md index 30c27d2..3167180 100644 --- a/packages/docs/docs/guides/scripting/algolia-sync.md +++ b/packages/docs/content/docs/reference/script-examples/algolia-sync.md @@ -1,4 +1,6 @@ -# Index Hook: Algolia Sync +--- +title: "Algolia Sync" +--- Push records to an Algolia search index whenever they are created, updated, or deleted on the network. diff --git a/packages/docs/docs/guides/scripting/batch-save.md b/packages/docs/content/docs/reference/script-examples/batch-save.md similarity index 97% rename from packages/docs/docs/guides/scripting/batch-save.md rename to packages/docs/content/docs/reference/script-examples/batch-save.md index 669734a..405056f 100644 --- a/packages/docs/docs/guides/scripting/batch-save.md +++ b/packages/docs/content/docs/reference/script-examples/batch-save.md @@ -1,4 +1,6 @@ -# Procedure: Batch Save +--- +title: "Batch Save" +--- Use `Record.save_all()` to create multiple records in parallel. diff --git a/packages/docs/docs/guides/scripting/cascading-delete.md b/packages/docs/content/docs/reference/script-examples/cascading-delete.md similarity index 98% rename from packages/docs/docs/guides/scripting/cascading-delete.md rename to packages/docs/content/docs/reference/script-examples/cascading-delete.md index 870868f..ca2ebc0 100644 --- a/packages/docs/docs/guides/scripting/cascading-delete.md +++ b/packages/docs/content/docs/reference/script-examples/cascading-delete.md @@ -1,4 +1,6 @@ -# Procedure: Cascading Delete +--- +title: "Cascading Delete" +--- Delete a record and all related records across collections. diff --git a/packages/docs/docs/guides/scripting/complex-mutations.md b/packages/docs/content/docs/reference/script-examples/complex-mutations.md similarity index 98% rename from packages/docs/docs/guides/scripting/complex-mutations.md rename to packages/docs/content/docs/reference/script-examples/complex-mutations.md index 94453e2..35208af 100644 --- a/packages/docs/docs/guides/scripting/complex-mutations.md +++ b/packages/docs/content/docs/reference/script-examples/complex-mutations.md @@ -1,4 +1,6 @@ -# Procedure: Complex Mutations +--- +title: "Complex Mutations" +--- Load an existing record, apply multiple transformations, and save it back. diff --git a/packages/docs/docs/guides/scripting/create-record.md b/packages/docs/content/docs/reference/script-examples/create-record.md similarity index 97% rename from packages/docs/docs/guides/scripting/create-record.md rename to packages/docs/content/docs/reference/script-examples/create-record.md index 7b0429e..cd022d7 100644 --- a/packages/docs/docs/guides/scripting/create-record.md +++ b/packages/docs/content/docs/reference/script-examples/create-record.md @@ -1,4 +1,6 @@ -# Procedure: Create a Record +--- +title: "Create Record" +--- The simplest write: take the request body, save it as a record, and return the URI. diff --git a/packages/docs/docs/guides/scripting/expanded-query.md b/packages/docs/content/docs/reference/script-examples/expanded-query.md similarity index 98% rename from packages/docs/docs/guides/scripting/expanded-query.md rename to packages/docs/content/docs/reference/script-examples/expanded-query.md index 8415038..dfdb211 100644 --- a/packages/docs/docs/guides/scripting/expanded-query.md +++ b/packages/docs/content/docs/reference/script-examples/expanded-query.md @@ -1,4 +1,6 @@ -# Query: Expanded Query with Profiles +--- +title: "Expanded Query" +--- List statuses and include the profile of each user who created one. diff --git a/packages/docs/docs/guides/scripting/get-record.md b/packages/docs/content/docs/reference/script-examples/get-record.md similarity index 96% rename from packages/docs/docs/guides/scripting/get-record.md rename to packages/docs/content/docs/reference/script-examples/get-record.md index 6ecd7e4..838bd05 100644 --- a/packages/docs/docs/guides/scripting/get-record.md +++ b/packages/docs/content/docs/reference/script-examples/get-record.md @@ -1,4 +1,6 @@ -# Query: Get a Single Record +--- +title: "Get a Record" +--- Fetch a single record by its AT URI. diff --git a/packages/docs/docs/guides/scripting/list-or-fetch.md b/packages/docs/content/docs/reference/script-examples/list-or-fetch.md similarity index 97% rename from packages/docs/docs/guides/scripting/list-or-fetch.md rename to packages/docs/content/docs/reference/script-examples/list-or-fetch.md index 3aa63a2..242280e 100644 --- a/packages/docs/docs/guides/scripting/list-or-fetch.md +++ b/packages/docs/content/docs/reference/script-examples/list-or-fetch.md @@ -1,4 +1,6 @@ -# Query: List or Fetch Records +--- +title: "List or Fetch" +--- This query handles both single-record lookups (when a `uri` param is provided) and paginated listing. diff --git a/packages/docs/docs/guides/scripting/meilisearch-sync.md b/packages/docs/content/docs/reference/script-examples/meilisearch-sync.md similarity index 98% rename from packages/docs/docs/guides/scripting/meilisearch-sync.md rename to packages/docs/content/docs/reference/script-examples/meilisearch-sync.md index 4061776..177297c 100644 --- a/packages/docs/docs/guides/scripting/meilisearch-sync.md +++ b/packages/docs/content/docs/reference/script-examples/meilisearch-sync.md @@ -1,4 +1,6 @@ -# Index Hook: Meilisearch Sync +--- +title: "Meilisearch Sync" +--- Push records to a Meilisearch search index whenever they are created, updated, or deleted on the network. diff --git a/packages/docs/content/docs/reference/script-examples/meta.json b/packages/docs/content/docs/reference/script-examples/meta.json new file mode 100644 index 0000000..1d3802b --- /dev/null +++ b/packages/docs/content/docs/reference/script-examples/meta.json @@ -0,0 +1,20 @@ +{ + "title": "Script Examples", + "pages": [ + "get-record", + "create-record", + "upsert-record", + "paginated-list", + "list-or-fetch", + "expanded-query", + "update-or-delete", + "batch-save", + "sidecar-records", + "cascading-delete", + "complex-mutations", + "signed-record", + "signed-record-verify", + "algolia-sync", + "meilisearch-sync" + ] +} diff --git a/packages/docs/docs/guides/scripting/paginated-list.md b/packages/docs/content/docs/reference/script-examples/paginated-list.md similarity index 97% rename from packages/docs/docs/guides/scripting/paginated-list.md rename to packages/docs/content/docs/reference/script-examples/paginated-list.md index b1aaeed..7a281e7 100644 --- a/packages/docs/docs/guides/scripting/paginated-list.md +++ b/packages/docs/content/docs/reference/script-examples/paginated-list.md @@ -1,4 +1,6 @@ -# Query: Paginated List +--- +title: "Paginated List" +--- List records from a collection with cursor-based pagination and an optional DID filter. diff --git a/packages/docs/docs/guides/scripting/sidecar-records.md b/packages/docs/content/docs/reference/script-examples/sidecar-records.md similarity index 98% rename from packages/docs/docs/guides/scripting/sidecar-records.md rename to packages/docs/content/docs/reference/script-examples/sidecar-records.md index 142f752..529da25 100644 --- a/packages/docs/docs/guides/scripting/sidecar-records.md +++ b/packages/docs/content/docs/reference/script-examples/sidecar-records.md @@ -1,4 +1,6 @@ -# Procedure: Create Sidecar Records +--- +title: "Sidecar Records" +--- Create two records with different collection NSIDs but the same rkey, linking them together by key. diff --git a/packages/docs/docs/guides/scripting/signed-record-verify.md b/packages/docs/content/docs/reference/script-examples/signed-record-verify.md similarity index 97% rename from packages/docs/docs/guides/scripting/signed-record-verify.md rename to packages/docs/content/docs/reference/script-examples/signed-record-verify.md index dc0dcd5..d42b361 100644 --- a/packages/docs/docs/guides/scripting/signed-record-verify.md +++ b/packages/docs/content/docs/reference/script-examples/signed-record-verify.md @@ -1,4 +1,6 @@ -# Query: Verify Signed Record +--- +title: "Verify Signed Record" +--- Fetch a record and verify its attestation signature. diff --git a/packages/docs/docs/guides/scripting/signed-record.md b/packages/docs/content/docs/reference/script-examples/signed-record.md similarity index 98% rename from packages/docs/docs/guides/scripting/signed-record.md rename to packages/docs/content/docs/reference/script-examples/signed-record.md index 448bc55..46e8ab2 100644 --- a/packages/docs/docs/guides/scripting/signed-record.md +++ b/packages/docs/content/docs/reference/script-examples/signed-record.md @@ -1,4 +1,6 @@ -# Procedure: Signed Record +--- +title: "Signed Record" +--- Save a record with an attestation signature attached. diff --git a/packages/docs/docs/guides/scripting/update-or-delete.md b/packages/docs/content/docs/reference/script-examples/update-or-delete.md similarity index 98% rename from packages/docs/docs/guides/scripting/update-or-delete.md rename to packages/docs/content/docs/reference/script-examples/update-or-delete.md index ee565df..40371ce 100644 --- a/packages/docs/docs/guides/scripting/update-or-delete.md +++ b/packages/docs/content/docs/reference/script-examples/update-or-delete.md @@ -1,4 +1,6 @@ -# Procedure: Update or Delete +--- +title: "Update or Delete" +--- A single endpoint that handles create, update, and delete based on the input fields. diff --git a/packages/docs/docs/guides/scripting/upsert-record.md b/packages/docs/content/docs/reference/script-examples/upsert-record.md similarity index 98% rename from packages/docs/docs/guides/scripting/upsert-record.md rename to packages/docs/content/docs/reference/script-examples/upsert-record.md index 1a1b45c..f963e3e 100644 --- a/packages/docs/docs/guides/scripting/upsert-record.md +++ b/packages/docs/content/docs/reference/script-examples/upsert-record.md @@ -1,4 +1,6 @@ -# Procedure: Upsert a Record +--- +title: "Upsert Record" +--- Create a new record, or update an existing one if the client provides its rkey. diff --git a/packages/docs/docs/reference/troubleshooting.md b/packages/docs/content/docs/reference/troubleshooting.md similarity index 99% rename from packages/docs/docs/reference/troubleshooting.md rename to packages/docs/content/docs/reference/troubleshooting.md index eae25bf..d67c75c 100644 --- a/packages/docs/docs/reference/troubleshooting.md +++ b/packages/docs/content/docs/reference/troubleshooting.md @@ -1,4 +1,6 @@ -# Troubleshooting +--- +title: "Troubleshooting" +--- Common issues and how to resolve them. diff --git a/packages/docs/content/docs/sdk/lex-agent/changelog.md b/packages/docs/content/docs/sdk/lex-agent/changelog.md new file mode 100644 index 0000000..a43b984 --- /dev/null +++ b/packages/docs/content/docs/sdk/lex-agent/changelog.md @@ -0,0 +1,13 @@ +--- +title: "Changelog" +--- + + + +## v1.1.0 + +*Released 2026-05-05* + +### Features + +* update JS SDKs to more closely match their [@atproto](https://github.com/atproto) cousins ([7b87c36](https://github.com/gamesgamesgamesgamesgames/happyview/commit/7b87c36ffd9458942c321009b4a39013abb9cff7)) diff --git a/packages/docs/content/docs/sdk/lex-agent/meta.json b/packages/docs/content/docs/sdk/lex-agent/meta.json new file mode 100644 index 0000000..49fdf0f --- /dev/null +++ b/packages/docs/content/docs/sdk/lex-agent/meta.json @@ -0,0 +1,7 @@ +{ + "title": "Lex Agent", + "pages": [ + "overview", + "changelog" + ] +} diff --git a/packages/docs/docs/sdk/lex-agent.md b/packages/docs/content/docs/sdk/lex-agent/overview.md similarity index 98% rename from packages/docs/docs/sdk/lex-agent.md rename to packages/docs/content/docs/sdk/lex-agent/overview.md index 0119846..4cc2ad9 100644 --- a/packages/docs/docs/sdk/lex-agent.md +++ b/packages/docs/content/docs/sdk/lex-agent/overview.md @@ -1,4 +1,6 @@ -# Lex Agent +--- +title: "Lex Agent" +--- The Lex agent adapter is the recommended way to interact with HappyView from JavaScript. It creates an [`@atproto/lex`](https://npmx.dev/package/@atproto/lex) `Agent` from a `HappyViewSession`, so you can use `@atproto/lex`'s type-safe `Client` to make XRPC calls with HappyView's DPoP authentication. All requests are routed to your HappyView instance, which handles its own lexicons locally and proxies standard atproto methods (e.g., `com.atproto.repo.createRecord`) to the user's PDS. diff --git a/packages/docs/content/docs/sdk/meta.json b/packages/docs/content/docs/sdk/meta.json new file mode 100644 index 0000000..b6d0b18 --- /dev/null +++ b/packages/docs/content/docs/sdk/meta.json @@ -0,0 +1,10 @@ +{ + "title": "JavaScript SDKs", + "pages": [ + "overview", + "lex-agent", + "oauth-client", + "oauth-client-browser", + "oauth-client-node" + ] +} diff --git a/packages/docs/content/docs/sdk/oauth-client-browser/changelog.md b/packages/docs/content/docs/sdk/oauth-client-browser/changelog.md new file mode 100644 index 0000000..d25a298 --- /dev/null +++ b/packages/docs/content/docs/sdk/oauth-client-browser/changelog.md @@ -0,0 +1,21 @@ +--- +title: "Changelog" +--- + + + +## v1.2.0 + +*Released 2026-05-05* + +### Features + +* update JS SDKs to more closely match their [@atproto](https://github.com/atproto) cousins ([7b87c36](https://github.com/gamesgamesgamesgamesgames/happyview/commit/7b87c36ffd9458942c321009b4a39013abb9cff7)) + +## v1.1.0 + +*Released 2026-04-25* + +### Features + +* **sdk:** allow client to configure clientId ([e76acbe](https://github.com/gamesgamesgamesgamesgames/happyview/commit/e76acbea356b453910ffdc6eaac78b42bfd2fd74)) diff --git a/packages/docs/content/docs/sdk/oauth-client-browser/meta.json b/packages/docs/content/docs/sdk/oauth-client-browser/meta.json new file mode 100644 index 0000000..1fe68c4 --- /dev/null +++ b/packages/docs/content/docs/sdk/oauth-client-browser/meta.json @@ -0,0 +1,7 @@ +{ + "title": "OAuth Client Browser", + "pages": [ + "overview", + "changelog" + ] +} diff --git a/packages/docs/docs/sdk/oauth-client-browser.md b/packages/docs/content/docs/sdk/oauth-client-browser/overview.md similarity index 99% rename from packages/docs/docs/sdk/oauth-client-browser.md rename to packages/docs/content/docs/sdk/oauth-client-browser/overview.md index eef3bbe..ef521da 100644 --- a/packages/docs/docs/sdk/oauth-client-browser.md +++ b/packages/docs/content/docs/sdk/oauth-client-browser/overview.md @@ -1,4 +1,6 @@ -# Browser Client +--- +title: "Browser Client" +--- The browser client handles the full OAuth redirect flow for browser apps authenticating with a HappyView instance. It wraps the [OAuth Client](./oauth-client.md) with Web Crypto, localStorage, and atproto handle/DID resolution. diff --git a/packages/docs/content/docs/sdk/oauth-client-node/changelog.md b/packages/docs/content/docs/sdk/oauth-client-node/changelog.md new file mode 100644 index 0000000..ad569ea --- /dev/null +++ b/packages/docs/content/docs/sdk/oauth-client-node/changelog.md @@ -0,0 +1,7 @@ +--- +title: "Changelog" +--- + + + +No releases yet. diff --git a/packages/docs/content/docs/sdk/oauth-client-node/meta.json b/packages/docs/content/docs/sdk/oauth-client-node/meta.json new file mode 100644 index 0000000..cf16b93 --- /dev/null +++ b/packages/docs/content/docs/sdk/oauth-client-node/meta.json @@ -0,0 +1,7 @@ +{ + "title": "OAuth Client Node", + "pages": [ + "overview", + "changelog" + ] +} diff --git a/packages/docs/docs/sdk/oauth-client-node.md b/packages/docs/content/docs/sdk/oauth-client-node/overview.md similarity index 99% rename from packages/docs/docs/sdk/oauth-client-node.md rename to packages/docs/content/docs/sdk/oauth-client-node/overview.md index 2b5d2b2..8d5f9e6 100644 --- a/packages/docs/docs/sdk/oauth-client-node.md +++ b/packages/docs/content/docs/sdk/oauth-client-node/overview.md @@ -1,4 +1,6 @@ -# Node Client +--- +title: "Node Client" +--- Server-side OAuth client for authenticating with a HappyView instance using AT Protocol. Built on top of [`@happyview/oauth-client`](./oauth-client.md), matching the API surface of [`@atproto/oauth-client-node`](https://www.npmjs.com/package/@atproto/oauth-client-node). diff --git a/packages/docs/content/docs/sdk/oauth-client/changelog.md b/packages/docs/content/docs/sdk/oauth-client/changelog.md new file mode 100644 index 0000000..9f3c6cd --- /dev/null +++ b/packages/docs/content/docs/sdk/oauth-client/changelog.md @@ -0,0 +1,21 @@ +--- +title: "Changelog" +--- + + + +## v1.1.1 + +*Released 2026-05-08* + +### Bug Fixes + +* expose oauth scopes via the SDKs ([bbcddd0](https://github.com/gamesgamesgamesgamesgames/happyview/commit/bbcddd08fd12105e1c047616cf84dc71a44bf9b7)) + +## v1.1.0 + +*Released 2026-05-05* + +### Features + +* update JS SDKs to more closely match their [@atproto](https://github.com/atproto) cousins ([7b87c36](https://github.com/gamesgamesgamesgamesgames/happyview/commit/7b87c36ffd9458942c321009b4a39013abb9cff7)) diff --git a/packages/docs/content/docs/sdk/oauth-client/meta.json b/packages/docs/content/docs/sdk/oauth-client/meta.json new file mode 100644 index 0000000..06ecb5f --- /dev/null +++ b/packages/docs/content/docs/sdk/oauth-client/meta.json @@ -0,0 +1,7 @@ +{ + "title": "OAuth Client", + "pages": [ + "overview", + "changelog" + ] +} diff --git a/packages/docs/docs/sdk/oauth-client.md b/packages/docs/content/docs/sdk/oauth-client/overview.md similarity index 99% rename from packages/docs/docs/sdk/oauth-client.md rename to packages/docs/content/docs/sdk/oauth-client/overview.md index 4e90da3..1b13b20 100644 --- a/packages/docs/docs/sdk/oauth-client.md +++ b/packages/docs/content/docs/sdk/oauth-client/overview.md @@ -1,4 +1,6 @@ -# OAuth Client +--- +title: "OAuth Client" +--- The core OAuth client handles DPoP key provisioning, session registration, and session restoration against a HappyView instance. It's platform-agnostic — you provide a `CryptoAdapter` and optional `StorageAdapter` for your environment. diff --git a/packages/docs/docs/sdk/overview.md b/packages/docs/content/docs/sdk/overview.md similarity index 99% rename from packages/docs/docs/sdk/overview.md rename to packages/docs/content/docs/sdk/overview.md index 60fede4..8deddbb 100644 --- a/packages/docs/docs/sdk/overview.md +++ b/packages/docs/content/docs/sdk/overview.md @@ -1,4 +1,6 @@ -# JavaScript SDK +--- +title: "Overview" +--- HappyView provides JavaScript packages for building third-party apps that authenticate with a HappyView instance and make XRPC requests on behalf of users. diff --git a/packages/docs/content/docs/tutorials/meta.json b/packages/docs/content/docs/tutorials/meta.json new file mode 100644 index 0000000..7ea6192 --- /dev/null +++ b/packages/docs/content/docs/tutorials/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Tutorials", + "pages": [ + "statusphere" + ] +} diff --git a/packages/docs/docs/tutorials/statusphere.md b/packages/docs/content/docs/tutorials/statusphere.md similarity index 99% rename from packages/docs/docs/tutorials/statusphere.md rename to packages/docs/content/docs/tutorials/statusphere.md index 5b9983d..01c957d 100644 --- a/packages/docs/docs/tutorials/statusphere.md +++ b/packages/docs/content/docs/tutorials/statusphere.md @@ -1,4 +1,6 @@ -# Tutorial: Statusphere with HappyView +--- +title: "Statusphere" +--- [Statusphere](https://github.com/bluesky-social/statusphere-example-app) is an example atproto application where users set their current status as a single emoji. It's a great way to learn how HappyView works because the data model is simple but the queries are interesting. diff --git a/packages/docs/docusaurus.config.ts b/packages/docs/docusaurus.config.ts deleted file mode 100644 index 6e3afed..0000000 --- a/packages/docs/docusaurus.config.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { Config } from "@docusaurus/types"; -import type * as Preset from "@docusaurus/preset-classic"; - -const config: Config = { - title: "HappyView", - tagline: "Lexicon-driven ATProto AppView", - url: "https://happyview.dev", - baseUrl: "/", - favicon: "img/favicon.png", - onBrokenLinks: "throw", - markdown: { - mermaid: true, - }, - themes: ["@docusaurus/theme-mermaid"], - - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - - presets: [ - [ - "classic", - { - docs: { - path: "docs", - routeBasePath: "/", - sidebarPath: "./sidebars.ts", - }, - blog: false, - theme: { - customCss: undefined, - }, - } satisfies Preset.Options, - ], - ], - - themeConfig: { - image: "img/og.png", - navbar: { - title: "", - logo: { - alt: "HappyView", - src: "img/logo.light.png", - srcDark: "img/logo.dark.png", - }, - items: [ - { - type: "docSidebar", - sidebarId: "docs", - position: "left", - label: "Docs", - }, - { - href: "https://tangled.org/gamesgamesgamesgames.games/happyview", - label: "Source", - position: "right", - }, - ], - }, - prism: { - additionalLanguages: ["lua"], - }, - footer: { - copyright: `Copyright \u00a9 ${new Date().getFullYear()} Birbhouse Games.`, - }, - } satisfies Preset.ThemeConfig, -}; - -export default config; diff --git a/packages/docs/next-env.d.ts b/packages/docs/next-env.d.ts new file mode 100644 index 0000000..c4b7818 --- /dev/null +++ b/packages/docs/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +import "./.next/dev/types/routes.d.ts"; + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/packages/docs/next.config.mts b/packages/docs/next.config.mts new file mode 100644 index 0000000..40f832f --- /dev/null +++ b/packages/docs/next.config.mts @@ -0,0 +1,10 @@ +import { createMDX } from 'fumadocs-mdx/next'; +import type { NextConfig } from 'next'; + +const config: NextConfig = { + transpilePackages: ['@happyview/design-system'], +}; + +const withMDX = createMDX(); + +export default withMDX(config); diff --git a/packages/docs/package.json b/packages/docs/package.json index 7ccc467..5a9da50 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -3,24 +3,28 @@ "version": "0.0.0", "private": true, "scripts": { - "start": "docusaurus start", + "dev": "next dev --turbopack", "generate-changelogs": "node scripts/generate-changelogs.mjs", - "build": "npm run generate-changelogs && docusaurus build", - "clear": "docusaurus clear" + "build": "npm run generate-changelogs && next build", + "start": "next start" }, "dependencies": { - "@docusaurus/core": "^3.10.0", - "@docusaurus/preset-classic": "^3.10.0", - "@docusaurus/theme-mermaid": "^3.10.0", - "@mdx-js/react": "^3.1.1", - "@mermaid-js/layout-elk": "^0.1.9", - "@tailwindcss/typography": "^0.5.19", - "prismjs": "^1.30.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "@happyview/design-system": "workspace:*", + "@types/mdx": "^2.0.13", + "fumadocs-core": "^16.8.10", + "fumadocs-mdx": "^15.0.4", + "fumadocs-ui": "^16.8.10", + "mermaid": "^11.6.0", + "next-themes": "^0.4.6", + "next": "^16.1.6", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "@tailwindcss/postcss": "^4.2.0", + "tailwindcss": "^4.2.0" }, "devDependencies": { - "@docusaurus/tsconfig": "^3.10.0", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", "typescript": "^5.7.0" } } diff --git a/packages/docs/postcss.config.mjs b/packages/docs/postcss.config.mjs new file mode 100644 index 0000000..297374d --- /dev/null +++ b/packages/docs/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; + +export default config; diff --git a/packages/docs/static/img/favicon.png b/packages/docs/public/img/favicon.png similarity index 100% rename from packages/docs/static/img/favicon.png rename to packages/docs/public/img/favicon.png diff --git a/packages/docs/static/img/logo.dark.png b/packages/docs/public/img/logo.dark.png similarity index 100% rename from packages/docs/static/img/logo.dark.png rename to packages/docs/public/img/logo.dark.png diff --git a/packages/docs/static/img/logo.light.png b/packages/docs/public/img/logo.light.png similarity index 100% rename from packages/docs/static/img/logo.light.png rename to packages/docs/public/img/logo.light.png diff --git a/packages/docs/static/img/og.png b/packages/docs/public/img/og.png similarity index 100% rename from packages/docs/static/img/og.png rename to packages/docs/public/img/og.png diff --git a/packages/docs/scripts/generate-changelogs.mjs b/packages/docs/scripts/generate-changelogs.mjs index 96f261f..a1b7c3a 100644 --- a/packages/docs/scripts/generate-changelogs.mjs +++ b/packages/docs/scripts/generate-changelogs.mjs @@ -6,31 +6,31 @@ const API_BASE = "https://api.github.com"; const CHANGELOGS = [ { name: "HappyView", - output: "docs/reference/changelog.md", + output: "content/docs/reference/changelog.md", match: (tag) => /^v\d/.test(tag), formatVersion: (tag) => tag, }, { name: "@happyview/oauth-client", - output: "docs/sdk/changelog-oauth-client.md", + output: "content/docs/sdk/changelog-oauth-client.md", match: (tag) => tag.startsWith("@happyview/oauth-client-v"), formatVersion: (tag) => tag.replace("@happyview/oauth-client-", ""), }, { name: "@happyview/oauth-client-browser", - output: "docs/sdk/changelog-oauth-client-browser.md", + output: "content/docs/sdk/changelog-oauth-client-browser.md", match: (tag) => tag.startsWith("@happyview/oauth-client-browser-v"), formatVersion: (tag) => tag.replace("@happyview/oauth-client-browser-", ""), }, { name: "@happyview/oauth-client-node", - output: "docs/sdk/changelog-oauth-client-node.md", + output: "content/docs/sdk/changelog-oauth-client-node.md", match: (tag) => tag.startsWith("@happyview/oauth-client-node-v"), formatVersion: (tag) => tag.replace("@happyview/oauth-client-node-", ""), }, { name: "@happyview/lex-agent", - output: "docs/sdk/changelog-lex-agent.md", + output: "content/docs/sdk/changelog-lex-agent.md", match: (tag) => tag.startsWith("@happyview/lex-agent-v"), formatVersion: (tag) => tag.replace("@happyview/lex-agent-", ""), }, @@ -84,7 +84,9 @@ function buildMarkdown(changelog, releases) { if (matching.length === 0) return null; const lines = [ - `# ${changelog.name}`, + `---`, + `title: "${changelog.name}"`, + `---`, "", ``, "", @@ -139,7 +141,9 @@ async function main() { let md = buildMarkdown(changelog, releases); if (!md) { md = [ - `# ${changelog.name}`, + `---`, + `title: "${changelog.name}"`, + `---`, "", ``, "", diff --git a/packages/docs/sidebars.ts b/packages/docs/sidebars.ts deleted file mode 100644 index 553e6bc..0000000 --- a/packages/docs/sidebars.ts +++ /dev/null @@ -1,541 +0,0 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; - -const sidebars: SidebarsConfig = { - docs: [ - { - type: "doc", - id: "README", - label: "Introduction", - }, - { - type: "category", - label: "Getting Started", - items: [ - { - type: "doc", - id: "getting-started/quickstart", - label: "Quickstart", - }, - { - type: "doc", - id: "getting-started/configuration", - label: "Configuration", - }, - { - type: "doc", - id: "getting-started/dashboard", - label: "Dashboard", - }, - { - type: "doc", - id: "getting-started/authentication", - label: "Authentication", - }, - { - type: "category", - label: "Deployment", - items: [ - { - type: "doc", - id: "getting-started/deployment/railway", - label: "Railway", - }, - { - type: "doc", - id: "getting-started/deployment/docker", - label: "Docker", - }, - { - type: "doc", - id: "getting-started/deployment/other", - label: "From Source", - }, - { - type: "doc", - id: "getting-started/production-deployment", - label: "Production", - }, - ], - }, - ], - }, - { - type: "category", - label: "Tutorials", - items: [ - { - type: "doc", - id: "tutorials/statusphere", - label: "Statusphere", - }, - ], - }, - { - type: "category", - label: "Guides", - items: [ - { - type: "doc", - id: "guides/upgrading-to-v2", - label: "Migrating from v1", - }, - { - type: "category", - label: "Features", - items: [ - { - type: "doc", - id: "guides/features/api-clients", - label: "API Clients", - }, - { - type: "doc", - id: "guides/features/attestation-signing", - label: "Attestation Signing", - }, - { - type: "doc", - id: "guides/features/labelers", - label: "Labelers", - }, - { - type: "doc", - id: "guides/features/plugins", - label: "Plugins", - }, - { - type: "doc", - id: "guides/features/developing-plugins", - label: "Developing Plugins", - }, - ], - }, - { - type: "category", - label: "Indexing", - items: [ - { - type: "doc", - id: "guides/indexing/lexicons", - label: "Lexicons", - }, - { - type: "doc", - id: "guides/indexing/backfill", - label: "Backfill", - }, - { - type: "doc", - id: "guides/indexing/index-hooks", - label: "Index Hooks", - }, - ], - }, - { - type: "category", - label: "Scripting", - items: [ - { - type: "doc", - id: "guides/scripting", - label: "Lua Scripting", - }, - { - type: "category", - label: "Script Examples", - items: [ - { - type: "doc", - id: "guides/scripting/get-record", - label: "Get a Record", - }, - { - type: "doc", - id: "guides/scripting/create-record", - label: "Create Record", - }, - { - type: "doc", - id: "guides/scripting/upsert-record", - label: "Upsert Record", - }, - { - type: "doc", - id: "guides/scripting/paginated-list", - label: "Paginated List", - }, - { - type: "doc", - id: "guides/scripting/list-or-fetch", - label: "List or Fetch", - }, - { - type: "doc", - id: "guides/scripting/expanded-query", - label: "Expanded Query", - }, - { - type: "doc", - id: "guides/scripting/update-or-delete", - label: "Update or Delete", - }, - { - type: "doc", - id: "guides/scripting/batch-save", - label: "Batch Save", - }, - { - type: "doc", - id: "guides/scripting/sidecar-records", - label: "Sidecar Records", - }, - { - type: "doc", - id: "guides/scripting/cascading-delete", - label: "Cascading Delete", - }, - { - type: "doc", - id: "guides/scripting/complex-mutations", - label: "Complex Mutations", - }, - { - type: "doc", - id: "guides/scripting/signed-record", - label: "Signed Record", - }, - { - type: "doc", - id: "guides/scripting/signed-record-verify", - label: "Verify Signed Record", - }, - { - type: "doc", - id: "guides/scripting/algolia-sync", - label: "Algolia Sync", - }, - { - type: "doc", - id: "guides/scripting/meilisearch-sync", - label: "Meilisearch Sync", - }, - ], - }, - ], - }, - { - type: "category", - label: "Administration", - items: [ - { - type: "doc", - id: "guides/admin/api-keys", - label: "API Keys", - }, - { - type: "doc", - id: "guides/admin/permissions", - label: "Permissions", - }, - { - type: "doc", - id: "guides/admin/event-logs", - label: "Event Logs", - }, - ], - }, - { - type: "category", - label: "Database", - items: [ - { - type: "doc", - id: "guides/database/database-setup", - label: "Database Setup", - }, - { - type: "doc", - id: "guides/database/postgres-to-sqlite-migration", - label: "Postgres → SQLite Migration", - }, - { - type: "doc", - id: "guides/database/sqlite-to-postgres-migration", - label: "SQLite → Postgres Migration", - }, - ], - }, - ], - }, - { - type: "category", - label: "JavaScript SDK", - items: [ - { - type: "doc", - id: "sdk/overview", - label: "Overview", - }, - { - type: "doc", - id: "sdk/lex-agent", - label: "Lex Agent", - }, - { - type: "doc", - id: "sdk/oauth-client", - label: "OAuth Client", - }, - { - type: "doc", - id: "sdk/oauth-client-browser", - label: "Browser Client", - }, - { - type: "doc", - id: "sdk/oauth-client-node", - label: "Node Client", - }, - ], - }, - { - type: "category", - label: "Experimental", - items: [ - { - type: "category", - label: "Permissioned Spaces", - items: [ - { - type: "doc", - id: "experimental/spaces", - label: "Overview", - }, - { - type: "doc", - id: "experimental/spaces/managing-spaces", - label: "Managing Spaces", - }, - { - type: "doc", - id: "experimental/spaces/members", - label: "Members", - }, - { - type: "doc", - id: "experimental/spaces/records", - label: "Records", - }, - { - type: "doc", - id: "experimental/spaces/credentials", - label: "Credentials", - }, - { - type: "doc", - id: "experimental/spaces/invites", - label: "Invites", - }, - { - type: "doc", - id: "experimental/spaces/changelog", - label: "Changelog", - }, - ], - }, - ], - }, - { - type: "category", - label: "Reference", - items: [ - { - type: "doc", - id: "reference/xrpc-api", - label: "XRPC API", - }, - { - type: "category", - label: "Admin API", - items: [ - { - type: "doc", - id: "reference/admin/admin-api", - label: "Overview", - }, - { - type: "doc", - id: "reference/admin/lexicons", - label: "Lexicons", - }, - { - type: "doc", - id: "reference/admin/stats", - label: "Stats", - }, - { - type: "doc", - id: "reference/admin/backfill", - label: "Backfill", - }, - { - type: "doc", - id: "reference/admin/events", - label: "Event Logs", - }, - { - type: "doc", - id: "reference/admin/api-keys", - label: "API Keys", - }, - { - type: "doc", - id: "reference/admin/users", - label: "Users", - }, - { - type: "doc", - id: "reference/admin/labelers", - label: "Labelers", - }, - { - type: "doc", - id: "reference/admin/settings", - label: "Instance Settings", - }, - { - type: "doc", - id: "reference/admin/xrpc-proxy", - label: "XRPC Proxy", - }, - { - type: "doc", - id: "reference/admin/domains", - label: "Domains", - }, - { - type: "doc", - id: "reference/admin/script-variables", - label: "Script Variables", - }, - { - type: "doc", - id: "reference/admin/api-clients", - label: "API Clients", - }, - { - type: "doc", - id: "reference/admin/plugins", - label: "Plugins", - }, - ], - }, - { - type: "category", - label: "OAuth API", - items: [ - { - type: "doc", - id: "reference/oauth/api-clients", - label: "Third-Party API Clients", - }, - ], - }, - { - type: "category", - label: "Lua API", - items: [ - { - type: "doc", - id: "reference/lua/record-api", - label: "Record API", - }, - { - type: "doc", - id: "reference/lua/database-api", - label: "Database API", - }, - { - type: "doc", - id: "reference/lua/http-api", - label: "HTTP API", - }, - { - type: "doc", - id: "reference/lua/xrpc-lua-api", - label: "XRPC Lua API", - }, - { - type: "doc", - id: "reference/lua/atproto-api", - label: "atproto API", - }, - { - type: "doc", - id: "reference/lua/json-api", - label: "JSON API", - }, - { - type: "doc", - id: "reference/lua/utility-globals", - label: "Utility Globals", - }, - { - type: "doc", - id: "reference/lua/standard-libraries", - label: "Standard Libraries", - }, - ], - }, - { - type: "doc", - id: "reference/glossary", - label: "Glossary", - }, - { - type: "doc", - id: "reference/architecture", - label: "Architecture", - }, - { - type: "doc", - id: "reference/troubleshooting", - label: "Troubleshooting", - }, - { - type: "category", - label: "Changelogs", - items: [ - { - type: "doc", - id: "reference/changelog", - label: "HappyView", - }, - { - type: "doc", - id: "sdk/changelog-oauth-client", - label: "oauth-client", - }, - { - type: "doc", - id: "sdk/changelog-oauth-client-browser", - label: "oauth-client-browser", - }, - { - type: "doc", - id: "sdk/changelog-oauth-client-node", - label: "oauth-client-node", - }, - { - type: "doc", - id: "sdk/changelog-lex-agent", - label: "lex-agent", - }, - ], - }, - ], - }, - ], -}; - -export default sidebars; diff --git a/packages/docs/source.config.ts b/packages/docs/source.config.ts new file mode 100644 index 0000000..0222c33 --- /dev/null +++ b/packages/docs/source.config.ts @@ -0,0 +1,12 @@ +import { defineDocs, defineConfig } from 'fumadocs-mdx/config'; +import { remarkMdxMermaid } from 'fumadocs-core/mdx-plugins'; + +export const docs = defineDocs({ + dir: 'content/docs', +}); + +export default defineConfig({ + mdxOptions: { + remarkPlugins: [remarkMdxMermaid], + }, +}); diff --git a/packages/docs/src/app/docs/[[...slug]]/not-found.tsx b/packages/docs/src/app/docs/[[...slug]]/not-found.tsx new file mode 100644 index 0000000..52dcac4 --- /dev/null +++ b/packages/docs/src/app/docs/[[...slug]]/not-found.tsx @@ -0,0 +1,12 @@ +import { DocsBody, DocsPage } from 'fumadocs-ui/layouts/docs/page'; + +export default function NotFound() { + return ( + + +

404 — Page Not Found

+

The page you're looking for doesn't exist.

+
+
+ ); +} diff --git a/packages/docs/src/app/docs/[[...slug]]/page.tsx b/packages/docs/src/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..8219079 --- /dev/null +++ b/packages/docs/src/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,48 @@ +import { source } from '@/lib/source'; +import { notFound } from 'next/navigation'; +import { + DocsBody, + DocsPage, + DocsTitle, + DocsDescription, +} from 'fumadocs-ui/layouts/docs/page'; +import defaultMdxComponents from 'fumadocs-ui/mdx'; +import { Mermaid } from '@/components/mermaid'; + +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + + if (!page) notFound(); + + const Mdx = page.data.body; + + return ( + + {page.data.title} + {page.data.description} + + + + + ); +} + +export function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) return {}; + + return { + title: page.data.title, + description: page.data.description, + }; +} diff --git a/packages/docs/src/app/docs/layout.tsx b/packages/docs/src/app/docs/layout.tsx new file mode 100644 index 0000000..c7145b0 --- /dev/null +++ b/packages/docs/src/app/docs/layout.tsx @@ -0,0 +1,32 @@ +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import { source } from '@/lib/source'; +import type { ReactNode } from 'react'; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + + + ), + }} + links={[ + { + text: 'Docs', + url: '/docs', + active: 'nested-url', + }, + { + text: 'Source', + url: 'https://tangled.org/gamesgamesgamesgames.games/happyview', + external: true, + }, + ]} + > + {children} + + ); +} diff --git a/packages/docs/src/app/global.css b/packages/docs/src/app/global.css new file mode 100644 index 0000000..016986e --- /dev/null +++ b/packages/docs/src/app/global.css @@ -0,0 +1,16 @@ +@import 'tailwindcss'; +@import '@happyview/design-system/globals.css'; +@import 'fumadocs-ui/css/lib/default-colors.css'; +@import 'fumadocs-ui/css/preset.css'; + +@source "../../node_modules/fumadocs-ui/dist/**/*.js"; + +@media (min-width: 768px) { + * { + --fd-sidebar-width: 300px !important; + } +} + +#nd-sidebar a { + white-space: nowrap; +} diff --git a/packages/docs/src/app/layout.tsx b/packages/docs/src/app/layout.tsx new file mode 100644 index 0000000..d68c2c4 --- /dev/null +++ b/packages/docs/src/app/layout.tsx @@ -0,0 +1,29 @@ +import './global.css'; +import { RootProvider } from 'fumadocs-ui/provider/next'; +import { fontVariables } from '@/lib/fonts'; +import type { ReactNode } from 'react'; + +export const metadata = { + metadataBase: new URL( + `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL ?? 'localhost:3000'}`, + ), + title: { + template: '%s | HappyView', + default: 'HappyView', + }, + description: 'Lexicon-driven ATProto AppView', + openGraph: { + images: [{ url: '/img/og.png' }], + }, + icons: [{ rel: 'icon', url: '/img/favicon.png' }], +}; + +export default function RootLayout({ children }: { children: ReactNode }) { + return ( + + + {children} + + + ); +} diff --git a/packages/docs/src/app/page.tsx b/packages/docs/src/app/page.tsx new file mode 100644 index 0000000..88715e3 --- /dev/null +++ b/packages/docs/src/app/page.tsx @@ -0,0 +1,5 @@ +import { redirect } from 'next/navigation'; + +export default function Home() { + redirect('/docs'); +} diff --git a/packages/docs/src/components/mermaid.tsx b/packages/docs/src/components/mermaid.tsx new file mode 100644 index 0000000..8325c4c --- /dev/null +++ b/packages/docs/src/components/mermaid.tsx @@ -0,0 +1,53 @@ +'use client'; + +import { use, useEffect, useId, useState } from 'react'; +import { useTheme } from 'next-themes'; + +const cache = new Map>(); + +function cachePromise(key: string, fn: () => Promise): Promise { + const cached = cache.get(key); + if (cached) return cached as Promise; + const promise = fn(); + cache.set(key, promise); + return promise; +} + +export function Mermaid({ chart }: { chart: string }) { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + if (!mounted) return null; + return ; +} + +function MermaidContent({ chart }: { chart: string }) { + const id = useId().replace(/:/g, '_'); + const { resolvedTheme } = useTheme(); + const { default: mermaid } = use( + cachePromise('mermaid', () => import('mermaid')), + ); + + mermaid.initialize({ + startOnLoad: false, + securityLevel: 'loose', + fontFamily: 'inherit', + theme: resolvedTheme === 'dark' ? 'dark' : 'default', + }); + + const { svg, bindFunctions } = use( + cachePromise(`${chart}-${resolvedTheme}`, () => + mermaid.render(id, chart.replaceAll('\\n', '\n')), + ), + ); + + return ( +
{ + if (container) bindFunctions?.(container); + }} + dangerouslySetInnerHTML={{ __html: svg }} + /> + ); +} diff --git a/packages/docs/src/lib/fonts.ts b/packages/docs/src/lib/fonts.ts new file mode 100644 index 0000000..309dbb7 --- /dev/null +++ b/packages/docs/src/lib/fonts.ts @@ -0,0 +1,15 @@ +import { Geist, Geist_Mono } from "next/font/google"; + +export const geistSans = Geist({ + subsets: ["latin"], + variable: "--font-geist-sans", + display: "swap", +}); + +export const geistMono = Geist_Mono({ + subsets: ["latin"], + variable: "--font-geist-mono", + display: "swap", +}); + +export const fontVariables = `${geistSans.variable} ${geistMono.variable}`; diff --git a/packages/docs/src/lib/source.ts b/packages/docs/src/lib/source.ts new file mode 100644 index 0000000..519d4a0 --- /dev/null +++ b/packages/docs/src/lib/source.ts @@ -0,0 +1,6 @@ +import { docs } from 'collections/server'; +import { loader } from 'fumadocs-core/source'; + +export const source = loader(docs.toFumadocsSource(), { + baseUrl: '/docs', +}); diff --git a/packages/docs/tsconfig.json b/packages/docs/tsconfig.json index d250afa..6112851 100644 --- a/packages/docs/tsconfig.json +++ b/packages/docs/tsconfig.json @@ -1,6 +1,45 @@ { - "extends": "@docusaurus/tsconfig", "compilerOptions": { - "baseUrl": "." - } + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./src/*" + ], + "collections/*": [ + "./.source/*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".source/**/*.ts", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] } -- 2.51.2 From d744cfe15cb55a5a1f072c51b5ad7e4696decffc Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 13:37:19 -0500 Subject: [PATCH 079/250] docs: remove /docs path prefix Signed-off-by: Trezy Signed-off-by: Trezy --- .../app/{docs => }/[[...slug]]/not-found.tsx | 0 .../src/app/{docs => }/[[...slug]]/page.tsx | 0 packages/docs/src/app/docs/layout.tsx | 32 ------------------- packages/docs/src/app/layout.tsx | 29 ++++++++++++++++- packages/docs/src/app/page.tsx | 5 --- packages/docs/src/lib/source.ts | 2 +- 6 files changed, 29 insertions(+), 39 deletions(-) rename packages/docs/src/app/{docs => }/[[...slug]]/not-found.tsx (100%) rename packages/docs/src/app/{docs => }/[[...slug]]/page.tsx (100%) delete mode 100644 packages/docs/src/app/docs/layout.tsx delete mode 100644 packages/docs/src/app/page.tsx diff --git a/packages/docs/src/app/docs/[[...slug]]/not-found.tsx b/packages/docs/src/app/[[...slug]]/not-found.tsx similarity index 100% rename from packages/docs/src/app/docs/[[...slug]]/not-found.tsx rename to packages/docs/src/app/[[...slug]]/not-found.tsx diff --git a/packages/docs/src/app/docs/[[...slug]]/page.tsx b/packages/docs/src/app/[[...slug]]/page.tsx similarity index 100% rename from packages/docs/src/app/docs/[[...slug]]/page.tsx rename to packages/docs/src/app/[[...slug]]/page.tsx diff --git a/packages/docs/src/app/docs/layout.tsx b/packages/docs/src/app/docs/layout.tsx deleted file mode 100644 index c7145b0..0000000 --- a/packages/docs/src/app/docs/layout.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { DocsLayout } from 'fumadocs-ui/layouts/docs'; -import { source } from '@/lib/source'; -import type { ReactNode } from 'react'; - -export default function Layout({ children }: { children: ReactNode }) { - return ( - - - - ), - }} - links={[ - { - text: 'Docs', - url: '/docs', - active: 'nested-url', - }, - { - text: 'Source', - url: 'https://tangled.org/gamesgamesgamesgames.games/happyview', - external: true, - }, - ]} - > - {children} - - ); -} diff --git a/packages/docs/src/app/layout.tsx b/packages/docs/src/app/layout.tsx index d68c2c4..b2c27e3 100644 --- a/packages/docs/src/app/layout.tsx +++ b/packages/docs/src/app/layout.tsx @@ -1,5 +1,7 @@ import './global.css'; import { RootProvider } from 'fumadocs-ui/provider/next'; +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import { source } from '@/lib/source'; import { fontVariables } from '@/lib/fonts'; import type { ReactNode } from 'react'; @@ -22,7 +24,32 @@ export default function RootLayout({ children }: { children: ReactNode }) { return ( - {children} + + + + + ), + }} + links={[ + { + text: 'Docs', + url: '/', + active: 'nested-url', + }, + { + text: 'Source', + url: 'https://tangled.org/gamesgamesgamesgames.games/happyview', + external: true, + }, + ]} + > + {children} + + ); diff --git a/packages/docs/src/app/page.tsx b/packages/docs/src/app/page.tsx deleted file mode 100644 index 88715e3..0000000 --- a/packages/docs/src/app/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from 'next/navigation'; - -export default function Home() { - redirect('/docs'); -} diff --git a/packages/docs/src/lib/source.ts b/packages/docs/src/lib/source.ts index 519d4a0..12d573a 100644 --- a/packages/docs/src/lib/source.ts +++ b/packages/docs/src/lib/source.ts @@ -2,5 +2,5 @@ import { docs } from 'collections/server'; import { loader } from 'fumadocs-core/source'; export const source = loader(docs.toFumadocsSource(), { - baseUrl: '/docs', + baseUrl: '/', }); -- 2.51.2 From 7c2f2b95dea33826e17705af07062ff6fc90dbcf Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 14:00:42 -0500 Subject: [PATCH 080/250] docs: add vercel config Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/vercel.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/docs/vercel.json diff --git a/packages/docs/vercel.json b/packages/docs/vercel.json new file mode 100644 index 0000000..7ef21ac --- /dev/null +++ b/packages/docs/vercel.json @@ -0,0 +1,5 @@ +{ + "framework": "nextjs", + "installCommand": "bun install", + "buildCommand": "bun run build" +} -- 2.51.2 From 3af5b083013424f23334cc8a77bb9c293d767e3f Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 14:45:51 -0500 Subject: [PATCH 081/250] docs: update layout for theme switcher and sidebar close button Signed-off-by: Trezy Signed-off-by: Trezy --- bun.lock | 6 +----- packages/docs/package.json | 5 +++-- packages/docs/src/app/global.css | 10 ++++++++++ packages/docs/src/app/layout.tsx | 7 ++++++- packages/docs/src/components/sidebar-footer.tsx | 17 +++++++++++++++++ 5 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 packages/docs/src/components/sidebar-footer.tsx diff --git a/bun.lock b/bun.lock index 3a2661a..e9d0483 100644 --- a/bun.lock +++ b/bun.lock @@ -8,9 +8,6 @@ "packages/design-system": { "name": "@happyview/design-system", "version": "0.0.0", - "dependencies": { - "geist": "^1.4.1", - }, }, "packages/docs": { "name": "@happyview/docs", @@ -22,6 +19,7 @@ "fumadocs-core": "^16.8.10", "fumadocs-mdx": "^15.0.4", "fumadocs-ui": "^16.8.10", + "lucide-react": "^1.14.0", "mermaid": "^11.6.0", "next": "^16.1.6", "next-themes": "^0.4.6", @@ -1030,8 +1028,6 @@ "function-timeout": ["function-timeout@1.0.2", "", {}, "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA=="], - "geist": ["geist@1.7.0", "", { "peerDependencies": { "next": ">=13.2.0" } }, "sha512-ZaoiZwkSf0DwwB1ncdLKp+ggAldqxl5L1+SXaNIBGkPAqcu+xjVJLxlf3/S8vLt9UHx1xu5fz3lbzKCj5iOVdQ=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], diff --git a/packages/docs/package.json b/packages/docs/package.json index 5a9da50..a5f0540 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -10,16 +10,17 @@ }, "dependencies": { "@happyview/design-system": "workspace:*", + "@tailwindcss/postcss": "^4.2.0", "@types/mdx": "^2.0.13", "fumadocs-core": "^16.8.10", "fumadocs-mdx": "^15.0.4", "fumadocs-ui": "^16.8.10", + "lucide-react": "^1.14.0", "mermaid": "^11.6.0", - "next-themes": "^0.4.6", "next": "^16.1.6", + "next-themes": "^0.4.6", "react": "^19.2.0", "react-dom": "^19.2.0", - "@tailwindcss/postcss": "^4.2.0", "tailwindcss": "^4.2.0" }, "devDependencies": { diff --git a/packages/docs/src/app/global.css b/packages/docs/src/app/global.css index 016986e..9b06a50 100644 --- a/packages/docs/src/app/global.css +++ b/packages/docs/src/app/global.css @@ -11,6 +11,16 @@ } } +#nd-docs-layout { + --fd-layout-width: 100vw; +} + #nd-sidebar a { white-space: nowrap; } + +@media (min-width: 768px) { + #nd-sidebar > :first-child button[aria-label="Collapse Sidebar"] { + display: none; + } +} diff --git a/packages/docs/src/app/layout.tsx b/packages/docs/src/app/layout.tsx index b2c27e3..55eaf19 100644 --- a/packages/docs/src/app/layout.tsx +++ b/packages/docs/src/app/layout.tsx @@ -3,6 +3,7 @@ import { RootProvider } from 'fumadocs-ui/provider/next'; import { DocsLayout } from 'fumadocs-ui/layouts/docs'; import { source } from '@/lib/source'; import { fontVariables } from '@/lib/fonts'; +import { SidebarFooter } from '@/components/sidebar-footer'; import type { ReactNode } from 'react'; export const metadata = { @@ -30,10 +31,14 @@ export default function RootLayout({ children }: { children: ReactNode }) { nav={{ title: ( - + HappyView ), }} + sidebar={{ + footer: , + }} + themeSwitch={{ enabled: false }} links={[ { text: 'Docs', diff --git a/packages/docs/src/components/sidebar-footer.tsx b/packages/docs/src/components/sidebar-footer.tsx new file mode 100644 index 0000000..39fd2ce --- /dev/null +++ b/packages/docs/src/components/sidebar-footer.tsx @@ -0,0 +1,17 @@ +'use client'; + +import { SidebarCollapseTrigger } from 'fumadocs-ui/components/sidebar/base'; +import { ThemeSwitch } from 'fumadocs-ui/layouts/shared/slots/theme-switch'; +import { SidebarIcon } from 'lucide-react'; + +export function SidebarFooter() { + return ( +
+ +
+ + + +
+ ); +} -- 2.51.2 From 02744997d243f71f8d615f24aa221b7114609219 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 15:08:10 -0500 Subject: [PATCH 082/250] docs: fix callouts for Fumadocs Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/api-reference/admin/api-clients.md | 4 ++-- .../docs/api-reference/oauth/api-clients.md | 4 ++-- .../docs/experimental/spaces/credentials.md | 4 ++-- .../content/docs/experimental/spaces/index.md | 4 ++-- .../docs/experimental/spaces/invites.md | 12 +++++------ .../experimental/spaces/managing-spaces.md | 8 ++++---- .../docs/experimental/spaces/members.md | 4 ++-- .../docs/experimental/spaces/records.md | 4 ++-- .../docs/getting-started/authentication.md | 4 ++-- .../docs/getting-started/configuration.md | 4 ++-- .../docs/getting-started/deployment/docker.md | 8 ++++---- .../docs/getting-started/deployment/other.md | 4 ++-- .../docs/content/docs/guides/api-clients.md | 4 ++-- .../database/sqlite-to-postgres-migration.md | 4 ++-- .../docs/content/docs/guides/event-logs.md | 4 ++-- packages/docs/content/docs/guides/lexicons.md | 8 ++++---- .../docs/sdk/oauth-client-browser/overview.md | 20 +++++++++---------- .../content/docs/sdk/oauth-client/overview.md | 4 ++-- .../content/docs/tutorials/statusphere.md | 8 ++++---- 19 files changed, 58 insertions(+), 58 deletions(-) diff --git a/packages/docs/content/docs/api-reference/admin/api-clients.md b/packages/docs/content/docs/api-reference/admin/api-clients.md index 6178c99..7dbbc74 100644 --- a/packages/docs/content/docs/api-reference/admin/api-clients.md +++ b/packages/docs/content/docs/api-reference/admin/api-clients.md @@ -8,9 +8,9 @@ A single API client represents your application, not individual users. Create on Each client has an `hvc_`-prefixed client key and an `hvs_`-prefixed client secret. The secret is only returned at creation and is sha256-hashed in the database. Server-to-server callers pass the secret as `X-Client-Secret`. Browser callers use the `Origin` header, which is matched against the client's `client_uri`. Mismatches currently log warnings rather than rejecting the request, but rate limiting applies either way. See [Authentication — XRPC](../../getting-started/authentication.md#xrpc-api-client-identification) for the client-side view, and the [API Keys guide](../../guides/admin/api-keys.md) for how admin API keys differ from API clients. -:::tip Third-Party API Clients + Third-party apps can also create, list, and delete their own API clients programmatically via the [XRPC API](../oauth/api-clients.md), without needing admin access. -::: + ```sh # All examples assume $TOKEN is an API key (hv_...) diff --git a/packages/docs/content/docs/api-reference/oauth/api-clients.md b/packages/docs/content/docs/api-reference/oauth/api-clients.md index 72d257c..5d42f55 100644 --- a/packages/docs/content/docs/api-reference/oauth/api-clients.md +++ b/packages/docs/content/docs/api-reference/oauth/api-clients.md @@ -6,9 +6,9 @@ Third-party applications can manage their own API clients via the `dev.happyview All endpoints use [DPoP authentication](../../getting-started/authentication.md#authenticating-users-for-procedures). See the [admin API client docs](../admin/api-clients.md) for managing clients through the admin API, and the [API Clients guide](../../guides/features/api-clients.md) for how API clients work. -:::note + Only top-level API clients can call these endpoints. Third-party (child) clients receive `401 Unauthorized` or `403 Forbidden`. -::: + ## Authentication diff --git a/packages/docs/content/docs/experimental/spaces/credentials.md b/packages/docs/content/docs/experimental/spaces/credentials.md index ab17537..9049622 100644 --- a/packages/docs/content/docs/experimental/spaces/credentials.md +++ b/packages/docs/content/docs/experimental/spaces/credentials.md @@ -2,9 +2,9 @@ title: "Credentials" --- -:::caution Experimental + This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. -::: + Space credentials are short-lived JWTs for cross-service access to space data. A member proves their membership to get a grant, exchanges the grant for a credential JWT, then passes it to an external service that needs to read the space's records. diff --git a/packages/docs/content/docs/experimental/spaces/index.md b/packages/docs/content/docs/experimental/spaces/index.md index 37cda75..688af69 100644 --- a/packages/docs/content/docs/experimental/spaces/index.md +++ b/packages/docs/content/docs/experimental/spaces/index.md @@ -2,9 +2,9 @@ title: "Overview" --- -:::caution Experimental + Permissioned Spaces are experimental and the API will change. This implementation follows Daniel Holmgren's [Permissioned Data Diaries](https://dholms.leaflet.pub/3meluqcwky22a) and aligns structurally with the `permissioned-data` branch on `bluesky-social/atproto`, but uses a `dev.happyview` namespace to allow iteration while the official spec stabilizes. -::: + Spaces are containers for permissioned data in atproto. Unlike regular public records that live in a user's repo, space records are gated by membership — only members can read or write data within a space. diff --git a/packages/docs/content/docs/experimental/spaces/invites.md b/packages/docs/content/docs/experimental/spaces/invites.md index 169f512..a5ae5de 100644 --- a/packages/docs/content/docs/experimental/spaces/invites.md +++ b/packages/docs/content/docs/experimental/spaces/invites.md @@ -2,15 +2,15 @@ title: "Invites" --- -:::caution Experimental + This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. -::: + Invites let space owners distribute membership tokens without knowing recipients' DIDs in advance. -:::info HappyView Extension + Invites are a HappyView-specific feature, not part of the AT Protocol spaces spec. They may be replaced by a different mechanism in the future. -::: + ## Creating an invite @@ -51,9 +51,9 @@ curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.createInvit } ``` -:::warning + The `token` is only returned once. It is stored as a SHA-256 hash — HappyView cannot recover the plaintext. -::: + ## Redeeming an invite diff --git a/packages/docs/content/docs/experimental/spaces/managing-spaces.md b/packages/docs/content/docs/experimental/spaces/managing-spaces.md index 59d2315..d588d7a 100644 --- a/packages/docs/content/docs/experimental/spaces/managing-spaces.md +++ b/packages/docs/content/docs/experimental/spaces/managing-spaces.md @@ -2,9 +2,9 @@ title: "Managing Spaces" --- -:::caution Experimental + This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. -::: + ## Creating a space @@ -132,6 +132,6 @@ curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.deleteSpace -d '{"space": "ats://did:plc:abc123/com.example.forum/main"}' ``` -:::warning + Deleting a space does not currently cascade to records, members, or credentials. This behavior may change. -::: + diff --git a/packages/docs/content/docs/experimental/spaces/members.md b/packages/docs/content/docs/experimental/spaces/members.md index a290b1b..43d3c3d 100644 --- a/packages/docs/content/docs/experimental/spaces/members.md +++ b/packages/docs/content/docs/experimental/spaces/members.md @@ -2,9 +2,9 @@ title: "Members" --- -:::caution Experimental + This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. -::: + Membership determines who can read and write within a space. Members have either `read` or `write` access — write implies read. diff --git a/packages/docs/content/docs/experimental/spaces/records.md b/packages/docs/content/docs/experimental/spaces/records.md index bac88c3..4e2bb17 100644 --- a/packages/docs/content/docs/experimental/spaces/records.md +++ b/packages/docs/content/docs/experimental/spaces/records.md @@ -2,9 +2,9 @@ title: "Records" --- -:::caution Experimental + This API is experimental and will change. See the [Permissioned Spaces overview](../spaces.md) for context. -::: + Space records are stored separately from public AT Protocol records. They follow the same URI pattern but use the `ats://` scheme and include the space identity: diff --git a/packages/docs/content/docs/getting-started/authentication.md b/packages/docs/content/docs/getting-started/authentication.md index 16a443a..71a5844 100644 --- a/packages/docs/content/docs/getting-started/authentication.md +++ b/packages/docs/content/docs/getting-started/authentication.md @@ -170,9 +170,9 @@ sequenceDiagram HV-->>Client: Response ``` -:::tip + The [JavaScript SDK](../sdk/overview.md) handles this entire flow for you. The raw HTTP flow below is useful for understanding the protocol or building a non-JavaScript client. -::: + ### API clients: confidential vs public diff --git a/packages/docs/content/docs/getting-started/configuration.md b/packages/docs/content/docs/getting-started/configuration.md index 421e65f..41f60cf 100644 --- a/packages/docs/content/docs/getting-started/configuration.md +++ b/packages/docs/content/docs/getting-started/configuration.md @@ -32,9 +32,9 @@ HappyView is configured via environment variables. A `.env` file in the project | `TOS_URI` | no | --- | URL to terms of service. Overridden by database setting if set via admin API | | `POLICY_URI` | no | --- | URL to privacy policy. Overridden by database setting if set via admin API | -:::warning[Use 127.0.0.1, not localhost] + ATProto OAuth loopback clients are registered with `127.0.0.1`. If you set `PUBLIC_URL` to `http://localhost:3000`, OAuth sign-in will fail because the redirect URI won't match the loopback client ID. Always use `http://127.0.0.1:3000` for local development. -::: + ## Example `.env` diff --git a/packages/docs/content/docs/getting-started/deployment/docker.md b/packages/docs/content/docs/getting-started/deployment/docker.md index 2ca804a..0032897 100644 --- a/packages/docs/content/docs/getting-started/deployment/docker.md +++ b/packages/docs/content/docs/getting-started/deployment/docker.md @@ -18,9 +18,9 @@ cp .env.example .env Edit `.env` and set at least `PUBLIC_URL` (e.g. `http://127.0.0.1:3000`) and `SESSION_SECRET` (at least 64 characters). The defaults work for everything else. See [Configuration](../configuration.md) for the full list of environment variables. -:::warning[Use 127.0.0.1, not localhost] + ATProto OAuth loopback clients are registered with `127.0.0.1`. If you set `PUBLIC_URL` to `http://localhost:3000`, OAuth sign-in will fail because the redirect URI won't match the loopback client ID. Always use `http://127.0.0.1:3000` for local development. -::: + ## 2. Start the stack @@ -39,9 +39,9 @@ HappyView runs migrations automatically on startup. The first build will take a The `happyview` container serves its own bundled dashboard at `http://127.0.0.1:3000`, but that copy is baked in at container build time and only updates when you rebuild the image. For day-to-day development, use the dev dashboard at `http://127.0.0.1:3001` — it hot-reloads on changes to the `web/` source. -:::tip + SQLite is the default and requires no extra services. To use Postgres instead, uncomment the `postgres` service in `docker-compose.yml` and update `DATABASE_URL` in `.env`. See the [database setup guide](../../guides/database/database-setup.md). -::: + ## Next steps diff --git a/packages/docs/content/docs/getting-started/deployment/other.md b/packages/docs/content/docs/getting-started/deployment/other.md index b048f28..69b12e3 100644 --- a/packages/docs/content/docs/getting-started/deployment/other.md +++ b/packages/docs/content/docs/getting-started/deployment/other.md @@ -26,9 +26,9 @@ PUBLIC_URL=http://127.0.0.1:3000 SESSION_SECRET=change-me-in-production ``` -:::warning[Use 127.0.0.1, not localhost] + ATProto OAuth loopback clients are registered with `127.0.0.1`. If you set `PUBLIC_URL` to `http://localhost:3000`, OAuth sign-in will fail because the redirect URI won't match the loopback client ID. Always use `http://127.0.0.1:3000` for local development. -::: + Or if you prefer Postgres: diff --git a/packages/docs/content/docs/guides/api-clients.md b/packages/docs/content/docs/guides/api-clients.md index 14d7341..23a5a7f 100644 --- a/packages/docs/content/docs/guides/api-clients.md +++ b/packages/docs/content/docs/guides/api-clients.md @@ -29,9 +29,9 @@ Choose based on where your code runs: | **Origin validation** | No | Yes — `Origin` must match `allowed_origins` | | **PKCE required?** | No | Yes (S256) | -:::tip + If your app has a backend that can securely store the client secret, use a confidential client even if the frontend is a browser app. The backend can proxy OAuth operations. -::: + ## Creating a client diff --git a/packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md b/packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md index edfead4..c9c6e46 100644 --- a/packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md +++ b/packages/docs/content/docs/guides/database/sqlite-to-postgres-migration.md @@ -59,9 +59,9 @@ Since HappyView indexes records from the atproto network, the simplest way to po Backfill fetches all records fresh from the network, so no data transfer between databases is needed. -:::tip + If you have many lexicons, you can export them from the old instance before switching. Use `GET /admin/lexicons` to list them and `POST /admin/lexicons` to re-upload after switching to Postgres. -::: + ## Step 6: Re-create admin settings diff --git a/packages/docs/content/docs/guides/event-logs.md b/packages/docs/content/docs/guides/event-logs.md index b1354d5..848d5cf 100644 --- a/packages/docs/content/docs/guides/event-logs.md +++ b/packages/docs/content/docs/guides/event-logs.md @@ -36,9 +36,9 @@ Logged when records are received from Jetstream and stored or removed from the l Logged when Lua scripts run for XRPC query or procedure endpoints. Script errors capture the full context needed to reproduce and debug the issue: the error message, the complete Lua script source, the input that triggered it, and the caller's DID. -:::note + For query scripts (unauthenticated), `caller_did` and `input` are omitted from the detail since queries don't have an authenticated user or request body. -::: + ### User events diff --git a/packages/docs/content/docs/guides/lexicons.md b/packages/docs/content/docs/guides/lexicons.md index 85c1354..9a34863 100644 --- a/packages/docs/content/docs/guides/lexicons.md +++ b/packages/docs/content/docs/guides/lexicons.md @@ -25,9 +25,9 @@ For example, a query lexicon `xyz.statusphere.listStatuses` would set `target_co See the [admin API](../../reference/admin/lexicons.md#upload--upsert-a-lexicon) for how to set `target_collection` when uploading. -:::note + The `target_collection` is available in Lua scripts as the `collection` global, but it is not required if your endpoint uses a Lua script. -::: + ## Backfill flag @@ -53,9 +53,9 @@ Lexicons are stored as records themselves with the `com.atproto.lexicon.schema` 4. Parse the TXT record for a `did=` value. 5. Resolve the DID to a PDS endpoint via the PLC directory. -:::note + The spec states that resolution must be **non-hierarchical**. Each authority requires its own explicit TXT record. If you have multiple levels of authority (e.g. `xyz.statusphere.status` and `xyz.statusphere.actor.profile`), each level must have an explicit TXT record. -::: + ### Fetching diff --git a/packages/docs/content/docs/sdk/oauth-client-browser/overview.md b/packages/docs/content/docs/sdk/oauth-client-browser/overview.md index ef521da..7df0a09 100644 --- a/packages/docs/content/docs/sdk/oauth-client-browser/overview.md +++ b/packages/docs/content/docs/sdk/oauth-client-browser/overview.md @@ -46,9 +46,9 @@ const client = new HappyViewBrowserClient({ }); ``` -:::note + The API client must be registered as a **public** client (no secret) with your app's origin in `allowed_origins`. See [Authentication — API clients](../getting-started/authentication.md#api-clients-confidential-vs-public). -::: + ## Sign in @@ -84,9 +84,9 @@ const { authorizationUrl, did, state } = await client.prepareLogin("alice.bsky.social"); ``` -:::note + `login()` still works as an alias for `signInRedirect()`. -::: + ### What happens during sign in @@ -135,9 +135,9 @@ const session = await client.restore("did:plc:abc123"); Calling `restore()` with no arguments returns the last active session, or `null` if none is found. -:::note + `callback()` still works as a standalone method that processes the OAuth callback and returns a session directly. -::: + ## Detecting callback params @@ -191,9 +191,9 @@ Pass a relative path (prepends the HappyView instance URL) or a full URL (used a await client.revoke(session.did); ``` -:::note + `logout()` still works as an alias for `revoke()`. -::: + ## Resolution utilities @@ -286,9 +286,9 @@ Or from the session itself: await session.signOut(); ``` -:::note + `logout()` still works as an alias for `revoke()`. -::: + ## Identity resolution diff --git a/packages/docs/content/docs/sdk/oauth-client/overview.md b/packages/docs/content/docs/sdk/oauth-client/overview.md index 1b13b20..f793540 100644 --- a/packages/docs/content/docs/sdk/oauth-client/overview.md +++ b/packages/docs/content/docs/sdk/oauth-client/overview.md @@ -148,9 +148,9 @@ interface StorageAdapter { If no `StorageAdapter` is provided, sessions are stored in memory and won't survive page reloads or process restarts. -:::note + The built-in `MemoryStorage` is exported for testing. In production, always provide a persistent storage adapter. -::: + ## Error handling diff --git a/packages/docs/content/docs/tutorials/statusphere.md b/packages/docs/content/docs/tutorials/statusphere.md index 01c957d..26541ac 100644 --- a/packages/docs/content/docs/tutorials/statusphere.md +++ b/packages/docs/content/docs/tutorials/statusphere.md @@ -6,9 +6,9 @@ title: "Statusphere" In this tutorial, you'll set up HappyView to act as the AppView for Statusphere. By the end, you'll have indexed records and working XRPC endpoints. -:::tip + This tutorial assumes you have a running HappyView instance. If you don't, start with the [Quickstart](../getting-started/deployment/railway.md) or one of the local development guides ([Docker](../getting-started/deployment/docker.md), [from source](../getting-started/deployment/other.md)). -::: + ## The Statusphere lexicon @@ -33,7 +33,7 @@ First, tell HappyView to start indexing Statusphere records. Since `xyz.statusph HappyView now subscribes to `xyz.statusphere.status` via Jetstream and kicks off a backfill job to index historical records. -:::tip + You can also add lexicons via the [admin API](../reference/admin/lexicons.md). This is useful for automation or CI/CD workflows: ```sh @@ -63,7 +63,7 @@ curl -X POST http://127.0.0.1:3000/admin/lexicons \ }' ``` -::: + ## Step 2: Verify records are being indexed -- 2.51.2 From fc5770f6c95d926ad35947e8b11736dd21fe2606 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 15:08:57 -0500 Subject: [PATCH 083/250] docs: add missing parameter lists Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/content/docs/experimental/spaces/invites.md | 6 ++++++ .../docs/content/docs/experimental/spaces/records.md | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/docs/content/docs/experimental/spaces/invites.md b/packages/docs/content/docs/experimental/spaces/invites.md index a5ae5de..d4c37c5 100644 --- a/packages/docs/content/docs/experimental/spaces/invites.md +++ b/packages/docs/content/docs/experimental/spaces/invites.md @@ -114,6 +114,12 @@ curl 'https://happyview.example.com/xrpc/dev.happyview.space.listInvites?space=a -H 'DPoP: ' ``` +**Parameters:** + +| Field | Type | Required | Description | +| ------- | ------ | -------- | --------------------------------- | +| `space` | string | Yes | The space to list invites for | + **Response:** ```json diff --git a/packages/docs/content/docs/experimental/spaces/records.md b/packages/docs/content/docs/experimental/spaces/records.md index 4e2bb17..25acf2e 100644 --- a/packages/docs/content/docs/experimental/spaces/records.md +++ b/packages/docs/content/docs/experimental/spaces/records.md @@ -53,7 +53,7 @@ curl -X POST 'https://happyview.example.com/xrpc/dev.happyview.space.createRecor `createRecord` always inserts a new record. If a record with the generated URI already exists, it returns `409 Conflict`. -## Writing a record (put) +## Updating a record Requires `write` membership in the space. @@ -109,6 +109,14 @@ curl 'https://happyview.example.com/xrpc/dev.happyview.space.getRecord?space=ats -H 'DPoP: ' ``` +**Parameters:** + +| Field | Type | Required | Description | +| ------------ | ------------- | -------- | ------------------------------- | +| `space` | string | Yes | The space containing the record | +| `collection` | string (NSID) | Yes | The record collection | +| `rkey` | string | Yes | The record key | + **Response:** ```json -- 2.51.2 From a68c444571efcba4d37bde83ed254d9588362525 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 15:13:44 -0500 Subject: [PATCH 084/250] docs: remove Cartridge as example domain Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/docs/api-reference/admin/domains.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/docs/content/docs/api-reference/admin/domains.md b/packages/docs/content/docs/api-reference/admin/domains.md index 5c90d0e..3285140 100644 --- a/packages/docs/content/docs/api-reference/admin/domains.md +++ b/packages/docs/content/docs/api-reference/admin/domains.md @@ -43,11 +43,11 @@ POST /admin/domains curl -X POST http://127.0.0.1:3000/admin/domains \ -H "$AUTH" \ -H "Content-Type: application/json" \ - -d '{ "url": "https://api.cartridge.dev" }' + -d '{ "url": "https://api.example.com" }' ``` -| Field | Type | Required | Description | -| ----- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------ | +| Field | Type | Required | Description | +| ----- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------- | | `url` | string | yes | Valid origin (scheme + host, no path or trailing slash). Must be `https` unless `PUBLIC_URL` is a loopback address. | Returns `400 Bad Request` if the URL is invalid or already registered. @@ -57,7 +57,7 @@ Returns `400 Bad Request` if the URL is invalid or already registered. ```json { "id": "550e8400-e29b-41d4-a716-446655440001", - "url": "https://api.cartridge.dev", + "url": "https://api.example.com", "is_primary": false, "created_at": "2026-04-16T00:00:00Z", "updated_at": "2026-04-16T00:00:00Z" -- 2.51.2 From 7bb7eb6c2c14d70b4de248c3143004b64ca1b685 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 15:17:54 -0500 Subject: [PATCH 085/250] fix: use cursors for pagination in spaces endpoints Signed-off-by: Trezy Signed-off-by: Trezy --- .../experimental/spaces/managing-spaces.md | 2 +- .../docs/experimental/spaces/records.md | 2 +- src/db.rs | 14 ++++ src/lua/atproto_api.rs | 4 +- src/lua/db_api.rs | 15 +--- src/spaces/db.rs | 79 +++++++++++-------- src/spaces/routes.rs | 12 +-- 7 files changed, 67 insertions(+), 61 deletions(-) diff --git a/packages/docs/content/docs/experimental/spaces/managing-spaces.md b/packages/docs/content/docs/experimental/spaces/managing-spaces.md index d588d7a..581ce49 100644 --- a/packages/docs/content/docs/experimental/spaces/managing-spaces.md +++ b/packages/docs/content/docs/experimental/spaces/managing-spaces.md @@ -95,7 +95,7 @@ curl 'https://happyview.example.com/xrpc/dev.happyview.space.listSpaces?limit=20 "isOwner": true } ], - "cursor": "2026-05-09T12:00:00Z" + "cursor": "MjAyNi0wNS0wOVQxMjowMDowMFp8YXRzOi8vZGlkOnBsYzphYmMxMjMvY29tLmV4YW1wbGUuZm9ydW0vbWFpbg" } ``` diff --git a/packages/docs/content/docs/experimental/spaces/records.md b/packages/docs/content/docs/experimental/spaces/records.md index 25acf2e..a848ff7 100644 --- a/packages/docs/content/docs/experimental/spaces/records.md +++ b/packages/docs/content/docs/experimental/spaces/records.md @@ -162,7 +162,7 @@ curl 'https://happyview.example.com/xrpc/dev.happyview.space.listRecords?space=a "cid": "bafyrei..." } ], - "cursor": "2026-05-09T12:00:00Z" + "cursor": "MjAyNi0wNS0wOVQxMjowMDowMFp8YXRzOi8vZGlkOnBsYzphYmMxMjMvY29tLmV4YW1wbGUuZm9ydW0vbWFpbg" } ``` diff --git a/src/db.rs b/src/db.rs index f8fc963..19f571a 100644 --- a/src/db.rs +++ b/src/db.rs @@ -1,3 +1,4 @@ +use base64::{Engine, engine::general_purpose::STANDARD as BASE64}; use chrono::{DateTime, Utc}; use regex::Regex; use serde::Deserialize; @@ -185,6 +186,19 @@ pub fn now_rfc3339() -> String { Utc::now().to_rfc3339() } +/// Encode a pagination cursor from a timestamp and URI. +pub fn encode_cursor(timestamp: &str, uri: &str) -> String { + BASE64.encode(format!("{timestamp}|{uri}")) +} + +/// Decode a pagination cursor into (timestamp, uri). Returns None if invalid. +pub fn decode_cursor(cursor: &str) -> Option<(String, String)> { + let decoded = BASE64.decode(cursor).ok()?; + let s = String::from_utf8(decoded).ok()?; + let (ts, uri) = s.split_once('|')?; + Some((ts.to_string(), uri.to_string())) +} + /// Connect to the configured database and run migrations. pub async fn connect(url: &str, backend: DatabaseBackend) -> AnyPool { sqlx::any::install_default_drivers(); diff --git a/src/lua/atproto_api.rs b/src/lua/atproto_api.rs index e1669a6..e70e488 100644 --- a/src/lua/atproto_api.rs +++ b/src/lua/atproto_api.rs @@ -429,7 +429,7 @@ pub fn register_atproto_api( } }; - let records = crate::spaces::db::list_space_records( + let (records, next_cursor) = crate::spaces::db::list_space_records( &state.db, state.db_backend, &space.id, @@ -442,8 +442,6 @@ pub fn register_atproto_api( .await .map_err(|e| mlua::Error::runtime(format!("record query failed: {e}")))?; - let next_cursor = records.last().map(|r| r.indexed_at.clone()); - let result = lua.create_table()?; let records_table = lua.create_table()?; for (i, record) in records.iter().enumerate() { diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index e2fb031..1937267 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -5,20 +5,7 @@ use sqlx::{Column, Row}; use std::sync::Arc; use crate::AppState; -use crate::db::{DatabaseBackend, adapt_sql}; - -/// Encode a cursor from created_at timestamp and uri. -fn encode_cursor(created_at: &str, uri: &str) -> String { - BASE64.encode(format!("{created_at}|{uri}")) -} - -/// Decode a cursor into (created_at, uri). Returns None if invalid. -fn decode_cursor(cursor: &str) -> Option<(String, String)> { - let decoded = BASE64.decode(cursor).ok()?; - let s = String::from_utf8(decoded).ok()?; - let (ts, uri) = s.split_once('|')?; - Some((ts.to_string(), uri.to_string())) -} +use crate::db::{DatabaseBackend, adapt_sql, decode_cursor, encode_cursor}; /// Register the `db` table with database query functions. pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { diff --git a/src/spaces/db.rs b/src/spaces/db.rs index f6eae7b..63196fc 100644 --- a/src/spaces/db.rs +++ b/src/spaces/db.rs @@ -1,4 +1,4 @@ -use crate::db::{DatabaseBackend, adapt_sql, now_rfc3339}; +use crate::db::{DatabaseBackend, adapt_sql, decode_cursor, encode_cursor, now_rfc3339}; use crate::error::AppError; use crate::spaces::types::*; @@ -123,28 +123,24 @@ pub async fn list_spaces_for_user( did: &str, limit: i64, cursor: Option<&str>, -) -> Result, AppError> { - let (sql, has_cursor) = if cursor.is_some() { - ( - adapt_sql( - "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? AND sm.created_at > ? ORDER BY sm.created_at ASC LIMIT ?", - backend, - ), - true, +) -> Result<(Vec, Option), AppError> { + let decoded_cursor = cursor.and_then(decode_cursor); + + let sql = if decoded_cursor.is_some() { + adapt_sql( + "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? AND (sm.created_at > ? OR (sm.created_at = ? AND ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) > ?)) ORDER BY sm.created_at ASC, ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) ASC LIMIT ?", + backend, ) } else { - ( - adapt_sql( - "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? ORDER BY sm.created_at ASC LIMIT ?", - backend, - ), - false, + adapt_sql( + "SELECT s.did, s.owner_did, s.type_nsid, s.skey, sm.created_at FROM space_members sm JOIN spaces s ON s.id = sm.space_id WHERE sm.member_did = ? ORDER BY sm.created_at ASC, ('ats://' || s.did || '/' || s.type_nsid || '/' || s.skey) ASC LIMIT ?", + backend, ) }; let mut query = sqlx::query_as::<_, (String, String, String, String, String)>(&sql).bind(did); - if has_cursor { - query = query.bind(cursor.unwrap()); + if let Some((ref ts, ref uri)) = decoded_cursor { + query = query.bind(ts.as_str()).bind(ts.as_str()).bind(uri.as_str()); } query = query.bind(limit); @@ -153,7 +149,7 @@ pub async fn list_spaces_for_user( .await .map_err(|e| AppError::Internal(format!("failed to list spaces for user: {e}")))?; - Ok(rows + let views: Vec = rows .into_iter() .map( |(space_did, owner_did, type_nsid, skey, created_at)| SpaceView { @@ -162,7 +158,15 @@ pub async fn list_spaces_for_user( created_at, }, ) - .collect()) + .collect(); + + let next_cursor = if views.len() as i64 == limit { + views.last().map(|v| encode_cursor(&v.created_at, &v.uri)) + } else { + None + }; + + Ok((views, next_cursor)) } pub async fn update_space( @@ -491,7 +495,9 @@ pub async fn list_space_records( limit: i64, cursor: Option<&str>, reverse: bool, -) -> Result, AppError> { +) -> Result<(Vec, Option), AppError> { + let decoded_cursor = cursor.and_then(decode_cursor); + let mut conditions = vec!["space_id = ?".to_string()]; if repo.is_some() { conditions.push("author_did = ?".to_string()); @@ -499,19 +505,17 @@ pub async fn list_space_records( if collection.is_some() { conditions.push("collection = ?".to_string()); } - let (cursor_op, order) = if reverse { - ("indexed_at < ?", "DESC") - } else { - ("indexed_at > ?", "ASC") - }; - if cursor.is_some() { - conditions.push(cursor_op.to_string()); + let (cursor_cmp, order) = if reverse { ("<", "DESC") } else { (">", "ASC") }; + if decoded_cursor.is_some() { + conditions.push(format!( + "(indexed_at {cursor_cmp} ? OR (indexed_at = ? AND uri {cursor_cmp} ?))" + )); } let where_clause = conditions.join(" AND "); let raw = format!( - "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE {} ORDER BY indexed_at {} LIMIT ?", - where_clause, order + "SELECT uri, space_id, author_did, collection, rkey, record, cid, indexed_at FROM space_records WHERE {} ORDER BY indexed_at {}, uri {} LIMIT ?", + where_clause, order, order ); let sql = adapt_sql(&raw, backend); @@ -522,8 +526,8 @@ pub async fn list_space_records( if let Some(c) = collection { query = query.bind(c); } - if let Some(cur) = cursor { - query = query.bind(cur); + if let Some((ref ts, ref uri)) = decoded_cursor { + query = query.bind(ts.as_str()).bind(ts.as_str()).bind(uri.as_str()); } query = query.bind(limit); @@ -532,7 +536,18 @@ pub async fn list_space_records( .await .map_err(|e| AppError::Internal(format!("failed to list space records: {e}")))?; - rows.into_iter().map(parse_record_row).collect() + let records: Vec = rows + .into_iter() + .map(parse_record_row) + .collect::>()?; + + let next_cursor = if records.len() as i64 == limit { + records.last().map(|r| encode_cursor(&r.indexed_at, &r.uri)) + } else { + None + }; + + Ok((records, next_cursor)) } pub async fn insert_space_record( diff --git a/src/spaces/routes.rs b/src/spaces/routes.rs index 02b4dcf..7022c8f 100644 --- a/src/spaces/routes.rs +++ b/src/spaces/routes.rs @@ -498,7 +498,7 @@ async fn list_spaces( let did = query.did.unwrap_or_else(|| claims.did().to_string()); let limit = query.limit.unwrap_or(50).min(100); - let views = db::list_spaces_for_user( + let (views, cursor) = db::list_spaces_for_user( &state.db, state.db_backend, &did, @@ -507,12 +507,6 @@ async fn list_spaces( ) .await?; - let cursor = if views.len() as i64 == limit { - views.last().map(|v| v.created_at.clone()) - } else { - None - }; - let spaces_json: Vec = views .into_iter() .map(|v| { @@ -915,7 +909,7 @@ async fn list_records( let limit = query.limit.unwrap_or(50).min(100); let reverse = query.reverse.unwrap_or(false); - let records = db::list_space_records( + let (records, cursor) = db::list_space_records( &state.db, state.db_backend, &space.id, @@ -927,8 +921,6 @@ async fn list_records( ) .await?; - let cursor = records.last().map(|r| r.indexed_at.clone()); - let records_json: Vec = records .into_iter() .map(|r| { -- 2.51.2 From da97a2f041c76470c45a1fa20070c7fce32a5a03 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 22:43:17 -0500 Subject: [PATCH 086/250] docs: make it vaporwave Signed-off-by: Trezy Signed-off-by: Trezy --- packages/design-system/package.json | 1 + packages/design-system/src/fonts.ts | 14 +- packages/design-system/src/globals.css | 30 ++- packages/design-system/src/tokens.css | 82 ++++-- packages/design-system/src/vaporwave.css | 86 ++++++ packages/docs/public/img/face.png | Bin 0 -> 6954364 bytes packages/docs/source.config.ts | 108 ++++++++ packages/docs/src/app/[[...slug]]/page.tsx | 2 + packages/docs/src/app/global.css | 80 +++++- packages/docs/src/app/layout.tsx | 15 +- .../docs/src/components/vaporwave-grid.tsx | 250 ++++++++++++++++++ packages/docs/src/lib/fonts.ts | 16 +- 12 files changed, 620 insertions(+), 64 deletions(-) create mode 100644 packages/design-system/src/vaporwave.css create mode 100644 packages/docs/public/img/face.png create mode 100644 packages/docs/src/components/vaporwave-grid.tsx diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 5b4e5d6..1c3cde2 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -5,6 +5,7 @@ "exports": { "./tokens.css": "./src/tokens.css", "./globals.css": "./src/globals.css", + "./vaporwave.css": "./src/vaporwave.css", "./fonts": "./src/fonts.ts" } } diff --git a/packages/design-system/src/fonts.ts b/packages/design-system/src/fonts.ts index 309dbb7..a9c5202 100644 --- a/packages/design-system/src/fonts.ts +++ b/packages/design-system/src/fonts.ts @@ -1,15 +1,17 @@ -import { Geist, Geist_Mono } from "next/font/google"; +import { Fraunces, Space_Mono } from "next/font/google"; -export const geistSans = Geist({ +export const fraunces = Fraunces({ subsets: ["latin"], - variable: "--font-geist-sans", + variable: "--font-fraunces", display: "swap", + axes: ["WONK", "SOFT"], }); -export const geistMono = Geist_Mono({ +export const spaceMono = Space_Mono({ subsets: ["latin"], - variable: "--font-geist-mono", + variable: "--font-space-mono", display: "swap", + weight: ["400", "700"], }); -export const fontVariables = `${geistSans.variable} ${geistMono.variable}`; +export const fontVariables = `${fraunces.variable} ${spaceMono.variable}`; diff --git a/packages/design-system/src/globals.css b/packages/design-system/src/globals.css index 5d8494d..2414331 100644 --- a/packages/design-system/src/globals.css +++ b/packages/design-system/src/globals.css @@ -2,6 +2,9 @@ html { font-family: var(--font-sans); + font-size: 15px; + line-height: 1.7; + font-variation-settings: 'WONK' 0, 'SOFT' 50; background: rgb(var(--color-bg)); color: rgb(var(--color-fg)); -webkit-font-smoothing: antialiased; @@ -9,36 +12,49 @@ html { } body { - background: rgb(var(--color-bg)); color: rgb(var(--color-fg)); } +h1, h2, h3, h4, h5, h6 { + font-variation-settings: 'WONK' 1, 'SOFT' 50; +} + +h1 { font-weight: 900; letter-spacing: -0.5px; } +h2 { font-weight: 800; letter-spacing: -0.3px; } +h3 { font-weight: 700; } + code, pre, kbd, samp { font-family: var(--font-mono); } ::selection { - background: rgb(var(--color-fg) / 0.15); + background: rgb(var(--color-aqua) / 0.25); color: rgb(var(--color-fg)); } -:root { +:root, .dark { --color-fd-background: rgb(var(--color-bg)); --color-fd-foreground: rgb(var(--color-fg)); - --color-fd-muted: rgb(var(--color-bg-subtle)); + --color-fd-muted: rgb(var(--color-surface)); --color-fd-muted-foreground: rgb(var(--color-fg-muted)); --color-fd-popover: rgb(var(--color-surface)); --color-fd-popover-foreground: rgb(var(--color-fg)); --color-fd-card: rgb(var(--color-surface)); --color-fd-card-foreground: rgb(var(--color-fg)); --color-fd-border: rgb(var(--color-border)); - --color-fd-primary: rgb(var(--color-fg)); - --color-fd-primary-foreground: rgb(var(--color-bg)); + --color-fd-primary: rgb(var(--color-accent)); + --color-fd-primary-foreground: rgb(var(--color-accent-fg)); --color-fd-secondary: rgb(var(--color-bg-subtle)); --color-fd-secondary-foreground: rgb(var(--color-fg)); --color-fd-accent: rgb(var(--color-bg-subtle)); --color-fd-accent-foreground: rgb(var(--color-fg)); - --color-fd-ring: rgb(var(--color-fg) / 0.2); + --color-fd-ring: rgb(var(--color-accent) / 0.3); + + --color-fd-info: rgb(var(--color-aqua)); + --color-fd-warn: rgb(var(--color-sun)); + --color-fd-error: rgb(var(--color-magenta)); + --color-fd-success: rgb(var(--color-mint)); + --color-fd-idea: rgb(var(--color-sun)); } .surface-card { diff --git a/packages/design-system/src/tokens.css b/packages/design-system/src/tokens.css index ad6991b..da6b52d 100644 --- a/packages/design-system/src/tokens.css +++ b/packages/design-system/src/tokens.css @@ -1,23 +1,35 @@ :root { - --color-bg: 252 252 252; - --color-bg-subtle: 247 247 248; + --color-bg: 240 244 248; + --color-bg-subtle: 230 236 244; --color-surface: 255 255 255; - --color-border: 230 230 233; - --color-border-strong: 210 210 215; + --color-border: 200 212 228; + --color-border-strong: 168 184 208; - --color-fg: 10 10 11; - --color-fg-muted: 90 90 100; - --color-fg-subtle: 140 140 150; + --color-fg: 14 21 48; + --color-fg-muted: 80 96 128; + --color-fg-subtle: 136 152 176; - --color-accent: 10 10 11; + --color-accent: 0 153 187; --color-accent-fg: 255 255 255; - --color-accent-subtle: 240 240 244; + --color-accent-subtle: 228 238 248; - --color-code-bg: 247 247 248; - --color-code-fg: 10 10 11; + --color-code-bg: 248 240 255; + --color-code-fg: 14 21 48; - --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif; - --font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, monospace; + --color-aqua: 0 153 187; + --color-magenta: 217 32 110; + --color-sun: 204 153 0; + --color-mint: 0 179 107; + + --syntax-keyword: 217 32 110; + --syntax-string: 0 128 90; + --syntax-type: 0 153 187; + --syntax-function: 204 153 0; + --syntax-comment: 136 152 176; + --syntax-fg: 14 21 48; + + --font-sans: var(--font-fraunces), Georgia, serif; + --font-mono: var(--font-space-mono), ui-monospace, SFMono-Regular, Menlo, monospace; --radius-sm: 0.375rem; --radius-md: 0.5rem; @@ -26,20 +38,32 @@ } .dark { - --color-bg: 10 10 11; - --color-bg-subtle: 16 16 18; - --color-surface: 20 20 23; - --color-border: 32 32 36; - --color-border-strong: 48 48 54; - - --color-fg: 250 250 250; - --color-fg-muted: 161 161 170; - --color-fg-subtle: 115 115 122; - - --color-accent: 250 250 250; - --color-accent-fg: 10 10 11; - --color-accent-subtle: 28 28 32; - - --color-code-bg: 14 14 17; - --color-code-fg: 236 236 240; + --color-bg: 8 8 24; + --color-bg-subtle: 15 18 40; + --color-surface: 20 20 50; + --color-border: 30 30 64; + --color-border-strong: 42 42 85; + + --color-fg: 232 240 255; + --color-fg-muted: 128 144 176; + --color-fg-subtle: 80 96 128; + + --color-accent: 0 212 255; + --color-accent-fg: 8 8 24; + --color-accent-subtle: 12 20 45; + + --color-code-bg: 6 6 15; + --color-code-fg: 232 240 255; + + --color-aqua: 0 212 255; + --color-magenta: 255 51 144; + --color-sun: 255 204 0; + --color-mint: 0 255 159; + + --syntax-keyword: 255 51 144; + --syntax-string: 0 255 159; + --syntax-type: 0 212 255; + --syntax-function: 255 204 0; + --syntax-comment: 80 96 128; + --syntax-fg: 232 240 255; } diff --git a/packages/design-system/src/vaporwave.css b/packages/design-system/src/vaporwave.css new file mode 100644 index 0000000..a9a9d82 --- /dev/null +++ b/packages/design-system/src/vaporwave.css @@ -0,0 +1,86 @@ +/* ============================================================ + Vaporwave decorative layer — framework-agnostic + Uses design-system CSS custom properties for light/dark mode. + Consumer apps map their framework selectors to these effects. + ============================================================ */ + +/* --- Neon Active State --- + Apply .vw-active to sidebar items, tab items, etc. */ + +.vw-active { + border-left: 2px solid rgb(var(--color-aqua)); + background: rgb(var(--color-aqua) / 0.08); + box-shadow: inset 0 0 16px rgb(var(--color-aqua) / 0.04); +} + +/* --- Links --- */ + +a { + color: rgb(var(--color-aqua)); + transition: color 0.2s, text-shadow 0.2s; +} + +a:hover { + text-shadow: 0 0 8px rgb(var(--color-aqua) / 0.4); +} + +/* --- Headings --- */ + +h2 { + color: rgb(var(--color-aqua)); +} + +/* --- Inline Code --- */ + +:not(pre) > code { + background: rgb(var(--color-magenta) / 0.1); + color: rgb(var(--color-magenta)); + padding: 0.15em 0.35em; + border-radius: 0.25em; +} + +/* --- Horizontal Rules --- */ + +hr { + border: none; + height: 1px; + background: linear-gradient(90deg, rgb(var(--color-aqua)), rgb(var(--color-magenta)), transparent); +} + +/* --- Code Block Ambiance --- */ + +pre { + box-shadow: 0 0 20px rgb(var(--color-aqua) / 0.04); +} + +/* --- Gradient Logo --- + Apply .vw-logo to text elements for aqua→magenta gradient. */ + +.vw-logo { + background: linear-gradient(90deg, rgb(var(--color-aqua)), rgb(var(--color-magenta))); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + color: transparent; + filter: drop-shadow(0 0 10px rgb(var(--color-aqua) / 0.3)); +} + +/* --- Custom Scrollbar --- */ + +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + background: rgb(var(--color-bg-subtle)); +} + +::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, rgb(var(--color-aqua)), rgb(var(--color-magenta))); + border-radius: 4px; +} + +* { + scrollbar-color: rgb(var(--color-aqua)) rgb(var(--color-bg-subtle)); + scrollbar-width: thin; +} diff --git a/packages/docs/public/img/face.png b/packages/docs/public/img/face.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d57acef6eaf0a8b978c2409b2476659e95c283 GIT binary patch literal 6954364 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
703Y40;o?Cr? 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 z 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�Abk#ijv@ffZW}agGIko%k?gITz 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°0_SCXDjx1N$d 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%0Dx3 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 z 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

>Pz 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

v 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

S{=sf9H~-gj{X! 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 z zf5*;!49WB6mHVat+jYHB&iZNmw-0p(PQP}1CRg+B^&9ig-)_D&e7R>$nEKv%+qN@q zykBJY{o0DWc~{(dQtNO3ZF6RLA_*YE$sjyzY+Ah;7ZJ8D1U@afxzr4#O8|+}bvnH4CvurvmUj5)^ z+@3m>Pd3G!UV0Y~@aM_C*N%SoHSo{GNVb(%IwLrzSg8UMl$Z%q;JnZQ|cYZC|^i&E(z0(s@rui=N%~@F73< zsnRE3zIuzLoA%e=$-8p&m)X%zYDbMW?fE+)sn)UfXYe+Du2-i;7gn_X`Xu^5y5&*m zE%tNK8Cgj>9Eq%qPL+-tc5HU<7{v93y2LfF+q2$lPV&^4C(tE&w#@a3p03bSW~Ys+ z$AUYyFIdUZEq!EH!v}Atk8&pEogY8X-KF(ll7QKkh2p!zr#Lxt><(LKC@{MzKt$j$ zgAxD43(5}ONtYEHe@{5p&G$gO({KsH_HRYM*WS11&=pwr+DYuFZKuP%(v5-(L~iZ5 zTbFd<%e^&B%ooDX?6`l(;6Z{fca5>Y%%|Kc2VzxwFWs50nqQ^ru%Pq#d(IU{-#Uw8VqwnZl{xhuarFm>7Y7AxUP zRcxH~!iuc!FY9KVxaMBI)#p_Fw^LPN-(tVHFK_t4<#E>av0UY0hJ$=&8=AkaeK+^s zs_2KLF$$oIc&Z#sb*Fm}c`_*?}F5d1qG4F~o-^*(2({C5<@{*chQIfyq z8$(p(YxT_j6AT-!+AVskzv+9~!#B=PUo5WmuKo4z;rBgj{J5srn)u9)_1t-r>HD9hIjk#L zFLqu}U&KAto+nj&mGsrMU(Y{Sw|no$dwGvP#Gdw0y5(F|(C{&Q_NKZ;`!t^2)|XWG zx$nn+YpTuH$4$TNm#<#puXMduc8kI5@Pl`Qt3O}AE3s_i)89s0jQsjL=N{cM|94^L zllnEfXWKjGC12mB+)(eg@*JDPE5*t)X;0AJ;QTRmS--V$mUsIU5bwb1itVOW%u*EtjMeURj7Dfyd>}O?W$AD_U5!7dzXFTpvNN%`9FIy zSMB$``EH?|)l=o=PwW@%kM9oIx6&(DUKMJ4D?Y7q`imDAE~%R5p7Wiq9c6KOl2}U4f+FVUx0St^ z6{BsZAG&(HT)^HR!JwlAOft@Jy` z#^=csw}qZp^Vh7jtvTcH`qr{K&vn%Dq6*?{(tY7 z6ZFA;U)|?gPCK6HYj5om*My@gV*Z z)8Y4r_tEwO_b!$qR?4+)CclbU62%a@UC{JeBK}_vPbLX7k8`*{u4Pna;^? ze(EguaY9#b zN83bM#a*(Lh#Zkw}VNuu*XP2P#T;xUCs+j=9?t-WF|2xRW?Nh{hJS#UUEp_SFm zH7D1}Z+;lD`+eQF*O#AsGGB81{);zP>uw90{ClCyx+d!1v5()BCts8Q`OdxKYPY=L z-xcpO<@5LM&o|jpV!0vb-NA2)@88pUy>8Dot^Ojs&Q|Eg+E5>TKS?Xd-Nt51NSNF}FG*N!xRq=|MUr+4*Yvr#zt@_{Z zw0)0nZfx4L-dSp*t$*-8ef{`((_hw{;?wQ@dre&+kw1Rw`x%i7zU@suw&V5WSD$Be zyx#eGe%zO@;P&;*v{^5W9gw@tFO6Ne)av98y!4+vPyE5}T~`|C38yS~W&6J+^(RZ_ zeKnUwpV#p!ZOMJ4w8UKY#~y}RueXK&xG8_^$5Q)@LqBgfzW+aY$)CP(?dRG56VE=D zHxCh4-5AFhu9G*J(try-9IOV?O!587A&#q2CX9VPMc7N9td%tNyBUlf5+Rcn;8-r z3r{w-dgHsFzcz?>Keh!?sT>Zf10}=^0{|Xxh-fEHCz@^f#jD>?s zQ{k9H?8HEkn<|SIotPT8}lZY#u!q%53o2Sp^JIfN< z$Fktncc!&6TU96D{c^uizIykRz3%dyd)VLZuJxbn$j|d4_nh6~50~BR-ZO6AxH+FO zPEGLe+I&%!ZI2FaW$W@&dLnheoaegxH__lYWri)=1D~q?{1V0VL!=;v>D|?$yVZ<) z*ZKTQ@|b@kE&cvvh2p8fm#u$q(>NJ;`r6(zD{JlFivP<^@yr&?ubv$s&yege=jEM6 z9oDxu+I4)ruW(mv_l{vO*pK7nN-d8uXFF! zciVoo^Lgu+V{Z2H{k?ZjbiZhP-TH6k#cA$kPY%x7>YZ(OXJyFWs|AIRcCQbv4?H!C zq5fC7s*r5wzQ2m{TJ8N`=H3Wc6_=Pts-8>D&A-IbHhZ zReS&QwwIcd%y$0T(z7P&S;m{Ym!F-CIsAp~akJ906K7qw)J^{Bd%yR@g0H8ZawkdO zjeZpPYj5Lk-*7tl<%0VcO&p)xIQ;y^r{aruK68Hl*{9vYd3csWzP<21$J*R)0*#;? zns58pw}|`rwWkxT>*bzIH~9Tx*Gs-w>nY`0=PysGmn{ljx>EDA@#W9!jvK!GJL&TC z&kCNqpT!%V|F~1{>9WLccis1V%Pr!`tm9vhe`o%(?Mo-cuJ)Y1Y*xDBOPybvpTPgaxL#1-&x)&zkk@q$6SiH?BE9Bga;*8`R|r) z-dNSte=?!pg{Njtw*1!ktKG5RbMwC?wzHlHvdzqA^>ohCUV5kf<6@rsWz()VJfC)b z`ojL7#r<2Q-TF@m-3(>(USHI1`*N%ARGt2ttD3&Q-S__Ty!NSY9bbG~-oJ;t{O+yn zg94>@e;Yks{!34_c1iDP>#N^utyk~4wSG&S+_Os_l3LzR>$F#%%N5_OvNiVq4(07S zw?9j$yxu&&Y|Y7=Hx#X&6tD9RE^ez$F7s>uCskBCzpm(K-_qota>e!Wv*j1P-tsu4 zw)pd5&AQ`fYK!))H$HCZveT$&-|6!cmp^-NDZA~lm-N*=viH5r*6dpGTzBUEh)c&# zb=f_kx5%i?9DElweN3lc%ocZ)92=JVB#c)qh0-$5A`)Gr_Zv^`MKMqrjfN& zy!@}TUqw5s>O^5Lxy=t+W=*}aKjEOeNQlcjp`8b(ofqzO@SPI4JHhuL?*q|mIvGE- zA9$)?cFvLu3=H0&P|)3We{rwQzuI#@lGjxni2u00;l$}XPgwVPo_sG9vEhlGwOr7K zMQ>~hp0pg`)W0CmIpxlhUW>frY_S3rl0S5_-UWT0&}9Fd^iN zn&aELOY^1~p82FVInt5u#_P4KCcL-udTzFK@7G6{en>8xD1Y(KnvGkVOT<#{mzupv z*Hl~o-gDQ*W#4OKzkU5M!Sngo2kC#K>hj9cpPUZuf9M|0YPi~_uC3}sw%^$&f8N*5 zyO^eDrG4t|=bAmfVoS;vndNLQc<;J)-@e??z860Z&Nv?;`#m45uB9u*Ir=Om9&C31@5%A! z{<^K27O-BfA@XU`cG*|<`w8s-dN;ed`Tw@bZjay9*-!rWjq%3(^4le;zV;iW?caEt zF|FhLciz^+Z$pbNc(Xhx-55KmYh_x^$Sn-p-p>L{9%U*?s(toa>{qgJql5M0mS5hfTS`GV3g> z;Xdw-i#&b<)ZtHPic!;;6kq)+MNvoohwFtcbj9BbHAa=rRM zACu6+eyf=-j=e$4J>*WLU7xt?WPH3j`UbE)JaKym)KpB zB`M$Ji}PoNJnr-ygf(I{9nEKJx=R`V6=2>XxiG`BeLBUB|QV%0nL{#U2S4|GrgMe`_7L z{AA15$u4adUhZU9iLQQJvf``IzrFu_^C#W^)W&c$=>y}pl?=c3-G7#I;Zl_Sm0jk# zJ8Ug)IKR>U@vH2STDx|~yI*P{br$x^cbUwdmaVL?{#JETi?i&S__w_wJukLpzIC}g z^N;d^wKuM57*!rGPSHL$UH#wPpLtS32_|;E*XLe#zF_iho}7d*v&gIFEjDLgm!{b* zRCp^NG=IrG-jg>PPA7l5#mKPnvZHYDzs1|~+qT?`_d8c_^v~v}UTRw73!cnxjQNw9 zv-kW>`SkSIo{2U4-lx7<@Llqee)HwoC)e3oPgD$Fc4hhVmG8}c&S?Mocs2g=My^e{ zFLF;VJAX=jW1w`kQKkCHn%?iqbA3+!Se1F?yssR?!=F3NUes&zsp5>+OEMv~p+Wm&;G;Z+%*S`1bwXev!h# zCz_vpEy}RC7yjk@BN!q1hy(Lb@A$>FZhM}_+CtIP;5Jk7awSmmkRQtyuHb>Y7>c zzw5fnzwB9sUzbiUcf57&*L4p5&8AOwKXa~=ZaK5;e%$nbh7Ik!8h<>>Yek}x_g{5; zJ8^2h^8PCuOroZ_eRR9D`fNl=MenAyPpdVizpCs?f46|yH~FW?9eI!24zC~HzENTN zE~@X&;!c%qs}A1ylE74bX4wWa{+q$_DZgS3Tz22Ly!*qQ_uI=vcdoMas`KA(4imTj zbI>+y-kaoA@o%+foqzJlFtt{y{_c}a{l3%60#Kz!U?wT)?nsk@T8q^%;w4N3+Wr|A_$FJ3(bFaFZW;rZbs1hVx zG4nvU=1$iqV$%D3j!J5m&G{g={7(n#{v{9fM9Ujxx$PDt@=lpzlX6mD<7Qy-^seif z8S!QsmHh`SRr7<3+hyaE4>~{SY7171U-+Qwg#XH)Gumd!is#%cI3?K_oMq?!qayz&aQ=^Hs`okStTbPJ!-6NVOyLf`hqd4QV0|7FBotZf_ngaMf+$GHArNldNmhX4ntwz#;Z8N`gHRa};$_d;&VcOE3Gox3j z{drpN(kItv=HzW#Fy*yo-7|x&LLa`ieX*Dub3W9vbjjy?*UzshEn96I`1s}epEsA+ z2iUpV?LDWocio;nb{p!&0jJ|Mp*B z`d&WH&%<3e-px-=`}pk{&#v$J6_PlgcZFT?t{Jb~eVIDyv^R!NHGb|M9G9<}yJofQ zeLu^cL6x;EZ?{h>le&E~y3@yT(Z=?F`&>i)9bX*3bfrgQDPzYw^M3Z9-*U8hVPb1_WxI6jOY5Wlomcy-&hEc%9%!v4Xyfm<3&=Z>e)RLcGBN$ldEk3 ze}uaBtBB}d3aRIRwE9SaqlR5u0pFX9GW|>6&dQ3vj}v^Yek9ACL)35|&mXlTtOfFq zYL(Ijyc2vm$`#jGJ-DT+ILG)-}e6Z8~(y&-gLpAWA@Pvr;b&F4|+Qq-(72nC@AC#AE zQu{vVpJNL5HMK*&ul}ui#=kPR zN6B1V<$>m9XTBq|8E);`>(H$ecOouM{-&_dh2ZnI-}7qy=drlHD3H0*pj_t7^@c-r z?+<;szx@3vt|ac-nOrSm*H>SRTPx=|B_Uf}{H@hS+t-VC+D7cW=U)2$oAvCw3gzp$ z|1Z0Lyvf3Y&MsBPPyJP$FufKe#HE%b}9MG4@vkeuX8?nz4n{JpIx7tUN4V} z>n)r6dK;Hb?yGBM)w?eS1Q&it-^=^!?+>-DC!Z+r`Ch-f`NYA$jgqaalUrmY!g4P$ zU#>3Lx6;?CPnCUUhOJN7=fkV=!~Izwe*3FY;<-gPMw-F%NvVS6hsE#xUxgc0d8b^| zKR2!V(#8|_#5Wigoa*~q5$Gv7(|kv5OG?4@qOTvfz51H^mQ(XVWmmhlcFFb47vB`8 z{Mv4Iac8^e<*nIb0lM#VRq9qs^Z)92b*Nm6tG0-t{k!lx-FGSb9zNsvy{O`SF9%;{ zHS15~%DdlVs?`ttsa46n?7n5XnJnYklPC0yRM|UxPAo8bZ+pP)X`xZ|Y_3Q8LIP!c z2i_dt zwS;4R_H4N=pKWcb|G&BKKE)>T-^^cfzQO66cFLynbZ%&+^i zCx6+@v|m?VX2u*<_q8Sy zLvFb}t8Hv8!VkWeOIwnV@tCK|d)C_hI&t~d$_e*RnNOIu`ejj>lw`y2lpha2RWNM1KJowBZ|fgq@i&<6 zl`OdR`nW>Mz5A=r9I`u+3ID#ej9$-;(a6elH98M zQ{G!IJG1h*(D8Hr%Z}yif3}ma;>rIz_i^g?5^J^R-nRQ=VwWE~KdVXGFY|FSyI0ct z_@>J)(!ck7)ycK_teeW7V%9I-pu7Cd4Y|i6?8buEi8i*UjJXxJS6obHTz# zV!Vy2;%h4VS>Fd1xSq{b3Ky|SJIH3S^qE<=URC8$^P3-E$9xLic4yIpCgVD%gKb@^ z;Wd*FtS@dh{lJ|Sx9Fj{=1%v6>?VJF3dlc}n`(kHt{S>AjBi^po&Orizt zCp0I1�JvqHU7&l`AtZv^? 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�U zuxo8RPvSSb$LO8De(S`Kytgj?_p8kMZZ9j`xQ6M-%&6+~Z}*$!ZT~BwVRbwDQ+ECK z(pO8f-+sQe6;&IV`FAd{>aP}(%xyTVf|iwVXb)F#Oqe=6Q3+RP~#H!eLde@o&%Gcl}T*oJGB*ji_T>qmOW}TzkMxxbV{K|mb-ghlJ3vv z=|cT;_Om@x9fgf2 zIG)=~OJ>Q{-+aKbm*I;l+os5A4FWdH);{`mv*+#Aj-LXendQa_b`J02Dz6$aTb#J9 z-~Yp*I_4;Y00V=ki(|-B|K}2kf9w)0wdU2DJbZPN?Xbb4U#*8=?}DHTw9Q3cC*Gy}Pe*=fOihxw^iIcbdz8JX&6;()s%kOZ)GJvr`Y(1jxwc zxQY3q%{tacEaB@#e{bjJ`f%4OOj5F+zw5R*-|e|hbCSw=YyLf+ z!0_VjnMSK;t5kE`P31l|Uar}7ZPKTNy4uNY>5R^wV}9RWceBuY@65pUb!N?5%o%6% zZZ+Qf?d+ECdu^k-PG_e3Oj|a$bB*QtsNENz-BvF1yZyc_?U2ou{G7crO=tZ+#{Aml zw^+#edvzDiEb`h?v@Y5@Ti9#;55_}W5w|Pi7EgM=T%+NA@qzdL{uLUVUf6yQ3HY&G zpz5Dy;PvV+H`c6*f47|J52vNv{~3#T{+yh(_!DH1tYjhg*B49<`(X>V%zJc%eunor z-8);ZdtPLwj0SfEGsF7({}U_t?L;n~{n7AZ*Bf0E#-pKc7?NPb&{oEXpU^TPIW;rH3(>eA99^>5T> zANaT2Jm5diZU1i)`DuS2#IM-%i@%A3Yd>2-i=KQ!-S6K5f8-vBohaacVC?XpHDo{g z)%YbHg!X@~cx zNQHNb^L}VuoVxn7prERa!*tHXO1>7^2X<_2mX;+l3&IBW+wAA559oEPe8P*%bNeOJ^^p zG|2wWo%e6&l9Q#W0s5C3x7{Q|08bGpO+IkcDZbQ(y_;AiBa0B!;=oYQaG^EWkThR0(Yd37)4Y`fiYU$*P)8a~~`4LdFWdKz3k)~uplxYUN(H+-UltZjOg zcW!>W_LFAT6Y|%aZeKFdU>4S1P`KrD)Ya`Dm#fxJNU`3^v~;SoOp>+gz6na}(%H^C|Bl=UtmVwPZv2f&N>4?%NEzWLTLUF6KTqEP3KqbmFtjJqgoAw>WR* zIju@bIH?k^#AtGUNhLdTaBq9f1c9&2J1%Vr-TzGKjbv8xZ2bxS+u6}T z{wiQXV~L8$&S$&U{)1PBe?xVtnCkOwOzxGS6+9n<5Uw=#Q>f$@*TlPk7 z=dM3*cJ0fB9FeX)n|Sj-n^u1RX3TJPj^X~-J*u@I49^Sy_Io_%Z21npO24z46l@c# z6Tj`)s(Plr?%uNxCht$SizwVn7fvd*TDkvh>YDiA`vyBd*(|J@_vy^zh~WM6-i3VT z^FD00FkO49g;#m!Pu+a!c>MKD~a@zIR3QX5GJTnDWP}eQx<& zCL2@#HBYjgOFwIUS+elwMw7Ew-Yr=Z-yTyxH+8P^JU?64GM`I-wi?y=#GlhOoiqE~ z*JbfDI9Jtu;SC z%iOo!`Ehm9?Bl_u-(>2`?oZQ*Tz;{}{`;u|KWB3vh`VTUfBA)5X8*Uz=4!s`uXFRXRz*IiqEy?sgLzPbldkYhUjEFp9I3eSSFiLS*0ChA)j3xzkO2^w{PW`O4k; zW9l6>_1(79UTc)q)T`SVKYzRXAm^C7^xU|DTm2DjZyh#D7&~i()4wZK^7=w>7tq*c@z|_4?}Oul};ay1duV|9JOtlUaXd z4$qRM8};VrT4w**Rt37N8%uiM$IX2HX4ke}N8T+~`jbAbVVbZd-m&40HOEW2 z6WR6q6?euyE0T*$b>#{?%7~xkuZnB+)u)+ zL7I74ZfA{M9_wR{p5#s*`w9KiZtLD&BA~kVpd(X}OG)9|H><7*FfJ&QsyegMWD!@0 ztjP_#{Y*W*c1u~MrtOe-<>zou_mrW9#MH$Y_-Djd`xxcvLpZ_|; zdo@ijza`uJNnzeTbHmSqmUGcR9(SDWwryMeqOCjO3d0N0XV=Xm?&TH!QCjrYd9q`l48s|jpYg!E4U5? zE?!*6QgV^y-_;r0)x-;&HgyOayxPH_{Ul{`-PV`)_UtI@JW!cCWyh#P&RLuq zy~KrWc3ERY)cy1YM$Pqi1sFHvwF|xU7i>J`{gZ`Zrn11y(9pIQ53-d1KFjFmd6sB7 zGx+Qe&er&K%hx7$xmkMH=YHV*%0Clc?biIXvf-89GkxU+?5AdH zG#i~gsk-v`Zj-5<-OKLV9Hu`9w zlCW)Stc6PYYD;g~j}L+`ZV7f-v({J5Tl4rl`LYWi*%}-aPE35X+O&T1+^d?O^moQi zQ_5yM+47}t@%*Te1oNYx?y?2&OHPh?6Tlkx{`~91*WL*^M$F(oU@D)G@axP!xz(FL zPJfraK%DWVh1E{RMMe|!rcPzJnDln?uN5t-kJJ=bzMVAL%zB09tZM#>DSpP&Uor4K zn!flXlV^N8%Qd~fuCfZRge~Hf{TXlGJHm1Q&GZ$uB9k1O-JZmVi&VBGKfL_ug!+wU zxrErDQ|I68lJz>UO;yA;xJ!ZGLG{SykQqh0-4)91wJI)Mzw_VYn~}iM{NN$(b@QU#N{$xk z>BpZQ>E6J*Y}Trqa%{1|)!wP)H_f8<8zpEZu;)*4W^*XpIx{(C!~Cz4rm{a3U@YIDWCpp&QhI6pc>e-}G*e8H70n~j^8R~5E8KG*dy53cUL zeS4~RW!;rq6}^9FG2T&s;IZQ1Cut4~LPQdxU5%pXA(v40`H1w$B*>aY_ zElb&T`MM?jXD**qWbA$Sv8H>al|=io=coFbo?QLt{G8Wq;h$~)CYtBYwQ2d~=3ZWO z?`+NbOQ$Dn^Pli`yJY|?kJ`Ua-y5o?Yu#pkwDgsB*m0BmtGGI4YEuc}gsHtou%hl4X@R`c~G$Yysw`}4Iy334fAq}T->?0PwCjC)audtRdB^sx zIv+jj-j4%6O^Y{wv+X>6>im}CnE|J*_Q!9S8=<`Iv+nucy{GUw-=i(4Ly@cLcy zQ@gG2P1iT6r+)oZzlz8Dw4HjT?bP#TwX@atPqP2^CizOWY3%O(ZhwAdudiaO+PdPt zgRJuhnXkW`s&dyHIQ#6FiNc4CC!2q6eE;_K4*x&AzPI9jZ~gNzku7=hw%9rYCGlu0 zv3(~_#(3|U5;y;N)Vj|_+|vzBt~W|a9a@liZhGU-Y3H8E&iW$Oc-!HE*!_v;{+wm_ z-1+YILdI=-j#`V(u=h*XbIPlqwtQ=&Gvj3GAAfEvF}94Z`*!=(_CM(&26YR*s7cqc zZnxTQcKcIK?&(|k&BrDA9WL@~U%sVzVg4ocfG20(=HxPqeAw0aA^NUa?Q|{vX_)zf9bql8I11E#Rk6PQ`-aP$I{IyG;Y?jM* z-^zY+ZQYN|&yPRW`TC#hUA}kQo4;|JbJwo5GC%j_)ARJI(yX^))Bmqaew=KxCboL| z#`~APKily98Ef{Z+E3M&y`EL(bErPvD1PZhibF}vYAqw>3Q-Ar63PrYSxFylMyXV`b3Eb7avwEnZE56rB2qT4gs zc^)%JE^)CdSF7%A)MhCVI(VIrZ`PWQ-~*lvZ1VoH?aO{$ztmIet&k@^lXsuRJ+n{~7WA98wFo4Pta9%)IaTKW7za?Ks5VnA6vA zj-#FR0;^sJ+YgD8cNtIXG~@{^KEpkyxS-joSt)^$MdFy??bo{77`~Oa%ZS=kG!_e1 z?62@uC_Y;FzObTUPo?D{-V3u`3qQ*QRP1ovc$4dnJL74Y2kEVc5UB;1k z@V35Sstn85dFL%o<*sLWB=WoZox(=r{B>>)vLVVd{yjZ!`>kAx@ss~ z@5J&jp81i;Zt0`{-pz5%b+_GpY}&TMJM$UlMYpS-FS-5aL}!hW(E7;qc`LVE={xe) zW1pGT_j~KA`VPz4re4|j=f~T|N~5f~-EMnl^33|JyLI!LV;9z)Gibb|HjUl&?TdYe z3q9j2@(x}z?buVtt(6(!w@iGmWNhrUm*r1t?B8Ci@0FY1Sy1<$Nu@sPR&m1b_3}IZ zg?_U3ulHg8qk0OqBT!xdX`1kF+r{-vHUIji_}iL1*je|#ov*=L@S^jtT)m89<5{Qw zY1IF6kK6zMurl9%jv4cgbKIHOr=j;{^_M?_-|e|}{F5vAzx|@?ub=y^AI<+KQ1RpD z68Znz^;35K&Xp~@-&Vil*zNs04!wO}&u3owqg}8n`cP!Hzz$Et7}gUH9?09V9cp-a zSlRAZc>af@|D`#O=R3CDZ@mAX(WFNB^Yrx_@0|Vc`}(J&|7{Mww`cqCn_(ZfxnM5WK+JrR!4O5X1b7m*G6)9fv!z zZEwX6_a3gO<^6ho;~m@PHhyI;VWzLbSNu6I?)H?MqIgPA=fZ}@S5pEi+C_HOa8Ffi zJeyoqsMlC6s?;PQCDx!}!je#SVF9PhqJUBX$pu;WcouF|ceUf2Ar>gHBuDzPvBv?k z`_c{9WwfT$o>R}wNf+qbwEV_DA%ip5{60VXp4QvrD9dKDE#r( z?l0fcxxJugzT}6Oi;|ajDd~8!HgF~I{LU>hQtxBbwpqpd`>N(C&LznY)VH3$HrX$G z(yPV|{RdJXdvDhWEDkpL%(KN#$z8`?Bhx6t%_zfSeYjMI-uzQ@UQJlMTAnjw-jfW5 zl8G-=tQmhw{y2W%-II!7UxikmEVN9~?`X`alfgxz&M`jO|hrRA$Px$hQV zyy^Bq#$~^CALMA%F8d_R@p6r}&1}8`lQfT#ZPwz8>zpUbKD+6kxJ!P~o*w`19qU}z zE8XWYGLbdi9r2z?ICeqZ{D`H^LSeO0$HF~kv-F5mZf?{zTjz2v?8#w|qL!Z`YpqXu z-6)&YvDQvfCi|1y#OAGwCGx-3Op5sFI8V`s0nDx<;!TS3SCloz+pbC zMeONYTFX4IU1ExkTx7Jw?4fKOn@->3xSl<7PZxXMTcr5wqjASZN&ihbUGsgImUo&t zAAQ=)>~rtdWXEa#lDAcLQe#%WSvBoGgVBe%w>(yN>}BN<|9)u6zAWkZHT{LRH^;AK z+RL>me;jQPkGi6M&zjiFd%6X;ThW5^sJIsD*n|3k>msFMLn)G5cM})REu$MN_`c%suK)rls8W{T#zKUFV8xdJmpdi)ORP z{$+b9{&w7%^!0Ty$0q&Yd%5dla-QyPwnwQ8vw1db|I{nLdh=Gs-8;@cO*>GZR~#3% z(ahWZ+4JnRe;-*jzl+|vM*Z0Cj|oTiZ1 zrRGV$udOz|y)Mi?+WO`x59|7jcgFEK$}ykkJiU9XRIfPqpd`#|b`_UA2S z>nillPrDzs?5)uMsM>4KjQu4yNB_IFZvE81SH91UvyFT|&+3_d>bk4nE}km)y1uD~ z>Eoh?8Ts8JcmM3D)bDwlSg@tuNvUGa$xG=6Or~beS7*Pb9A~Uxz2ph=(UXj?E8llr ztL#u{KEBz; zZ{FTxS3fJ?DQl57Z`kd4!1O^I$C>hmVy@>VpJn!EPwF>~dL|^*W}#jZDYU%q0!u*u zh4+kIkIsmMyT$PaiKs@(^D@4wy|a3AImdC)yj*eA_&x8R-dQFlWncRO>6`Rgx_ zihJbuxJ+PWWDZehv3QZ#5-p-7SGD=Lg^onNOj{xIT;&yVeulYeEq^(9mG69$_uVT*XRR0$fjlHXNj8~xP!4HA;wtF}$Dv}o`=eHz# zr|Nw4TK`knk>yFfzp$4t}i-b&*YR(9z>*IL}~sB4&TX?jtw-PzRrr%%LxN{XCw z>GG$Vs3+epZ;AI`Qu4&c&Xt$xzi{ZEjV;^;f1IGjNBMH3ZG_xwgZSUfTeo)cYz@s< ztn$|4w_ks+mso%QALDML+pLS4-cA14Q6S(Fo>G_?S6ki8|NrS$x&3#PWZZxJ75(#1 zs&47sFr@^vI6GM`VO?_9{Qbi2g#Vk5fcFrV>KlpLf?BnLXJz_$^56<_PIGI z*Mu(m+|K0^Vq|dkSiq>6$;rUFpg}PsR=;_pP=?2?yJBm+o;`7_)N7ftmoa0?B~{Z? z>dKd^((HI=T$AHfncA&#e5#(t0p2M0HGZPoGEVND$l1ln zbYAQ847-^*Kz1~i~_QLs*y}a0jk~KwLQ8zsgSa$slaM&|#p6s3pH~b!#=9I@aJe9jp zvSz<)`PPp8$Bs`Zx%q1Y&q>EwPu`ndcqwTRqs-iMh2f%#Z_(Y-7)!D`I=Xu5jkrRoz^Vf4t1v+HMZZbY62@@=M77Dq!ccnCXTW(^c!%N;LzUwbvxhQa%+G&yAXf~$a<5jC~271`IDBLvaz9IM7vqpOY zKTo5{b%wsA#O=(> zToN}vt6u(M=-zxS#(eD?^OI+OEeN_D{?GBW{e{gtom~5MmDb8GY6|PmoOfBSVgmol z1$Lo~xw_h`%$J{csM{Q@7BBt(#R9Q!o5R{aOW60?M@6#5-A#-(labPJW+(z)X5Q=6+P)tC0|E4cT~=4F_k zv4Z@x3C8|Lr~gJ|-+Z#M?=aWKeXTRfr^$XjT_Yi|z41!rmR;%W!6^(o&aTv{?w?#Y zvGewZyXFP~LAtfJuf4qH%X6EqFPq>lCp^0e97*hbR7;*=2uv+FO~c{r4q5shuviI$!1YZ6)gg?UO3|&(BlN z3eSB~(YLGNZ~4-1mD_ehi@KZL_x;BkLHVl=SMKT8Gds=jUgdQ067Bov zV>iF{zk0a1DC>5r?)+`O=PpLg-g`JZ&2>-DhHL(Erx%y+|7=zKNoTL$I;P{1%Wv0Z z1eY^sb8!XyTzw<>+1}&z{_p<8%$Bd;_OjA*M{L+5|8vY53Q5dn(Q!O!+l|aL1drra zF4tLm{i}?I?ezQ6O|_?12j9;7w)5KlOP56XIuc?W85i6(a^9Vi_hSsXRXv)&V6>dW5KO|8P_HEg`S(JYqa_EBHgtokM#Y!AMkhWI_?Hru8dnxPHjq^ zx6|$!-{wzmtY0@xP5*wvw~*;#)?2OX{ZBKC*2h|IofrLgNAJ#ebCx-@zA}4QBU`&^ z^{T1;UwQ4iXP*wLy0-4K`s=on$KGURFW%YTxNfU=!1H6d+v?ZGKKzzcSDpN8_ZjP| z$DE%J&)>W0mg=76=fbPL{kaoy;Mav^?=ObevRjyc+jjljS^HbR*Y2%-HDhDgzsR5? zwx(yB-!d*^;F8#_d7a^UlDNrDp-;I|46;J@#eZiV-1S^|<)j;*HJelQ{#|SA+4fVe zvUclP_MlJ3@!`Agoq4^ek9UDdX25pGsr#oG&7I?Z2nDqVlVsP z7^jiWjhMHJej6$py*0|TFLN63$esInggbNQ5stfhZT9Rz4#JLIb$XZVc_LeI;?I4-JI?a#lrper%t`-oSmf=m7lQA$pZuX!BBsMH z{HLHlHS$4v|Ar%6Ji!cmG-Et+MGSlz+8Dj9?%X}!@SX9onwzt{`avUhmi)z=n&X-N zyji$vM>Vgdoki`xjfV|pZa#ZhU#_k*p~RfS%-UhELv!%{!ls*w6^$1ChOX}7>JsYg zgZcFd1Rsga*8Onyz2%=z%lXRJvpilhV_RV4T;_Fo zv2(cd8TM=NeNX*X{rg~p0Mosidvg>R8?$<<)*no~!xPch^)tZjW+r!xeZTRPrz(pi<6m$zP5Lc{9D{~$%p(^evi()f4P^*#(Zv$S@xWhuWOa( ztiQOtVD+E+U8|P+pZxx^=3B$F{aGJ=vfinKZmMDTLf%jK%WKM_1Qd_$)hvBBv9k~PbZ9D#}x1Hr~dAz^n{{P}1?fD94tR1!o zSR7DoSvhO=-M}OHoy+%T-Fl|TeB`bZ8@rBhgXAMIiK0ynlbo4O?Rp_HGloUcy4C;n z&x_tlUp@ETrX58nyuB8dZ5)jRp-r!wdj;K-#HKUOVy&5BbCGRV@$HahY63eO^R_b_WBKCuprG5&E>5}mPqB;Fw}RzX zX%os;O?N#UHh)&RBU|Tc_r3*uzL}T5#w?#w-sjdIw4GeT1&V?aElz(w&y)86vh6q%Zi-a_XEy zgs#>6#pwDGM>>!+AH~^=W}pBa9UZvZu80gKi4QJNq;apsqKC|?3H+$w~a!X#~~Kk zvJEfpKk9e*u=K6pf#)0ZpRTyJXy@B2z9;!K1g5dv^7V5m6nM>S$+dLxe#QbmuGWg% zU!8u7+gL!I=?u4UE118unsEA-OBh$!zRpc(#SFv;B&Bb@uaDf(O4H z@#bGr!j$FpYr-x6w*qZ@l8?_bzdiAnZoV0Vm;A;Pt0eDesm_<-yBKd!%>{|c|u9^$}hH0o4GF~a&Wb-xU|}mFqJz`^M2^fpdHa@TfZU$$2@KCKO-wJ{;kEm-K|bn#MK|4SEYwr0&fR(|HQ$UO6szqik%KcBbY#$v9RS+6vg%s#XE zrr|`lbIY2SY_}D9cKTJ4ncl}N_IX=o&-_#;KmC%&Vz;$@>a$mB?g?R=_bI~d{FAz@ zZ#SOYdm(!LJxfjAUn>{MXBtnNf)6gKtg(K6+GxAZO4%Lr&ODa-n6{Ct#?Rt{?haMz*j%3UyLr!4coyY)C$Ydv>{w|HbRhyV>(C zm-nm5SNDG7)z6KZ>@V$oVNo^rqoOLS|J#Z#Z(HBG_TSc0bKBb&-f#2&Bw4cU&-nu- z%=7!F^qt;P6@52aE}EfATX^^R0_n-!6JzrkFW!-Fy)-lX?wzXKDJ6dCMh2COPp+TZ z`!t)K_e;ZFMpl;m10{L<)AXLY3yMEI{vFf4)iB+c z?NI!zuCVs5@=s@NCfI9E*VK5uJ*3YfVZj6DoBQvD?66v6@|4|oy3-TgijeFhN-X>Q zu78@>Eb!f8#WH4j8G&P>6D+QpH!qF7bNcb6!3Y zv3uQkYJ%2MX?6vV%;v<7O|o7FOe;9{+9c7obwUqW~bVXvkr3i z@rPUN6WnoD-{9^)kNkaq%?r%C8p0=hC^8P?^qwFHQ)W(kS<@PbDYEI`{|}cmSdU+s{0FhIJ^&B zUHhm&-ulTmt!Kp*25Z;fU&B+Om)BLbjPdiq=Ow#mGlp+xDr9W0W?m4@zv28Rapg7a zZ;b!H?U-k}`De`RnRC1^&zAkfv$nSTNww_r+Uf4wHvH+SHM+6GocY1bAIVQ8*Pd0n zmX`3%`kaFDf}P*ZKHkXRcTc-H-Q&Q^obLIV_a%C&Hrue7ZC{+L-TrOurhV~?W^Vr) zGvD?~!yCEtufM$Xw5$;kxzKM>?bN@}Lv0wY^{O-@ikfzeE z3$6EN>oI(R?u2Rm*BHdqRK9pd{oRz*B}T@-mTB%Ty)WrH{m$KZ=KX)>H{Abe?ojAE z-F5R>c4?XU)+Yo6`jq+hhveAbW4Mu2#m4Y`M%)|2{WlYK-hS|*JH2D#appsX2a5JL zE(^AOZoa+2is!ofkM`#mHVA*^Tp?H2ch;}>-!y5;=lxB;<}>~%Ty?yh(Pqj1Y6tNZbv%-Jj62(V zxI^*{_g6CW+B;d)h$sFOYtUw}W{5s;ob}tL88hzea}=;>S#d;{@sZjI1EvTCBj-}T z>x_lUM_4n8ViG(*@d-Jee8VFdv^ym3)s1OlKW&(o31{E!NM-4}ls0!WYofx0;8kBk z)YOCG%(p(jnJDa4c{TIkRCR7ilf2oVBoo#%urWY--|gFP7g?`HmkrahR5(nDAjmYt*gc**HI=;YY=?o?Q|L z<0c%q#J0%qYbcMv6ti;;zstm1Ht0y0c>X=u%kskiZGM^lQ}tJkseLsweK%CSjJb90 zjpMdR!@0}sloj7hXc$P;bf)OqMf_@>KxUnl;Uu3X6+;{GJ#so2LoE))GKS0787 zbF(~4*wjJkWm4YtjP~SxD}8(dZo5qUzoyftt@nK=zrjg{&zojzyTzE#o|B@Kw*6Sm z2A7KqcjaFZyp#K;;!vWh{5okio5 zz_YEB&a7q*^=Q}5y1ngVzgO{oroy28=iAu}t3Uf$U$a-p-*>_x!TWIOv|0DFnuVrn zW@=@(e>ZrrW4HT(8(fj;*?Sj$Y_GjuS(AH=bDnm}%)*U&tLsnt2hT6=aLAL3o?NqP zgj=W;1FJX?baRvv#&|*u)2$Cro%QlfCbe zUcrq`9#&6$?AFAG&0H3LqtSTTaV=N-qG+>)-F~+syZ1e#FlEFIgTt!R++HiILk}ZR9iGt$vzslpwpQ zE@{(d=CE0nA^p!+DahGdM!5?jI%v|_2_{Yua{P- z=6tp|uKZeV`$FBh+ONWYncn_CQPW?ZJKj8Y|Pn(Q#Jn#Q_@Hr$h?OGYzylu~0*KJ(4 zy=-Odv*FR`X$zM>j^Z({QVp`6#x2)B6 z2q@`&dS!=|-@Mc$*~G|O^7qrNPkeg1Wx?-vXXFFi>(l@J*uePsV#>wKbHk3m?LRkb z-Iuvv=iDt@>$kDz$K=YW=xdS%ry2$^$ENuC189zNF5+bj_QW zA=P`|_V2B{8Ws8cnOLq|eCoRI61HafSs z>t_JF`1eo-3rh`ghmSuwvf_h&@o;alzp?K2!F?qXmQ6~(zqNegm14Zz$L1r>KhfTn z#rEVO&y(A4{Z>#B4}W!WE_11f8}n3M75-o666)NGniSr5N}7Mnzs2-;%D0m|4dr~B za~_ni>`9VgZ5FmrSLJX!b(vT0u!#F*18bJjLi>3;B$gZyzb`$@?DZtwPu?qQSQfZj zS_Se5DNITe5mIROx4Xf3(7I)Th1~WDmF=(d_a3?W&3lJ;6e9x5F^7~kQ*v_ifhrc=!IRrvG`W-5sAIn(1$Jv4vzV%BK--r3;YcHq7%egD%*Ak>DV3EDcHn$`f$h32ZrqY=4~16?H0GH zZd)(mGH3hI+`cN|9zRE%fzN>r6*KuSB=T_7bxLPH*eJug%9*8~{h&dW1$za@A0dHh zJKmqQ%&>XkxWI9N;sH&+2g=$;KTQD?csN3X%@LG2M_$v&i6a~;sKlEho-_333JBNfd-)2 zzy|U87CyIG_3gQL)UUO87wvpt|HK2&v-53oe`bfx=@qwZ_+;w+es;FQOy93=ir&W; z=SAmPduhSyL+>v*RQjEwEf|<>rC_3-S?|1 zeV*J_5q9ZR>-)u?x6fJ4clyJ2WwxeBZB@8K=}PP8mzNha6rW!0d;a@8KB4L7wocmr z@{1WOM!f|A2jJ3#{}nIqd&`n8(R~ zes|sf_NM(mw@+$#R(SFG^#7OnzT3C`u>F$%Z|(7l)jR&Zo%Q(}?%Y51=hy9q zyppPal5MNEOXSCA-mnh*Up-_0AF*%te~nw77Tf%J!tg-1VLnp@-s(OY(!JR7}TEG0sS-AQ@Jkt;V3m>Eolr#QRQ;>IjBDvr{ z)2sQ3k#)1oQu7(^9I47GEY6D4F)n{CC}>&klkHKwXPMlqd?ES5gK`BE7RKi2ytBQk zahzj;(2DDiN((JROCmNbw-Ryp>odz(z;)%Eghti^&#H5#feyN#wlVe;honZmzgqI8 zj_vV~|I}#hL!)1&-4ydygWbfsZm6c{l@e({D$avgh+7_N&#?L2SJ=-hzBsb|> zJCj9Pdq3j}o(_YY$%nJp4l#-bC^ILV%}iDo+5UR{$-_^!aXt`E`f15zl_j}DcTrc= zZnIn!KEqdEmwm8~S-Quv=~vJ^-r_aQ915DZcCK9*9cwwOhHY}BOENQ~Z|~xqMXEEOF-_Q_q?_@YTT<->}#zU@n&%$+ajAk>lWQ5n^eTOU7t`eJ8kh6{DY zdws;%f>?|aY8PmHy2kc!#;Gmeo(BkByEo~VS6A7Z;y-5uFYq4mZdVLhU~)jot9xrD zTi~TU=Fg0;m^hnWO<%~{F(9T(?rJ_8F&6&G)L=gj3g{+{1XyxHnHnO!Mk4*%~9tdDFJyjd1GpJHT6 zusrr_g{;cLmjRqRG~}#Rm`<3*ZITf>ahu^vn!3W$zBKODheIYfTz}$x=5gOoLHF6F zQ};#9t(pHOi6Mk(36l=j*2GoIi#P7=4L7NL`fIAcsQBNPk`d?a_A90D@SU>%~ z)*pdq8~$W`y2&r{GhEX#L+Qs%6R$(^oqw{={WTydf zIeBNy`aSohgVg_OJ9lP-;xCzYHOI_mU*Qkjslxp2s8qt0ibu}fA`EFF1tlw9&(5vP z;tte0S90W*!bzjo!k=e+I`>ohe$;c-oe8_vtB2}*b<(^pwDFJDtGApR(lhK%Hg}#p znd7|eeW$y7?o4y9nRB9}PwYDIXYq&p^WA4p&f01IW&zix=O2~?r@Y=YchOI;@;hmf zGvDmsy}9nvpQTfyweRnlxh7@yb8Gca4>ry_wqkO*+rO;ZcG}GSDf63ZQN9!Gr3|HeH`Q%VX8U^a&*e9Q-=#IrhkfNJTpY)` zOl*qt#3j?hr){3{zLMuzRp!b#yOf^eO4b`ri~ifX^L$nQ_o>f!U%T(izA`Sf{=7I> z|Ib+7qsutIM&3J9v1#>;&wNkA^1ioCpQFB9dFC3%J(Y{oW`}3<7w?Uhjg@qc%DSzd zzbWS$o7TP?_e^T${7Jia-ssZLe=Pr?C8+;$Q{lUdx0d|s%be%+*7&_q&YZ<&^S?iQ zE5mQY`zv(HMInFIc~*DI;#lwRezW|}`;Xt(1vhWC+4A|X<`tiEzh#e~S8OPGeyT=1 zZl2QdZU4?*`8W4hk@s7X%HHqu^5&mjUf%!N%G`9S`jW~sZU+1NzfKOT%g(HNI`46| zZ`zwE%j~v?@J6ro;!}+~G8hy%a6{`C0D=_7hcgQ^toA>;a5xBb~4O*DP}88p)pAKhbgDcCT$dS+8LC)=ocsru2bn z8+yeB^tog6r_WonZ_aYv?Kh2QfAPskNvZrGe|l!F^z^ysQqS*sd)f4|beZ+GUx_I- zRj0zO>vQX$@7fgI^0jSxUe3(U#cP?DS6#p5@=iSavBKe7Z=%+(>wj6H|Ng>~$GHk~ z+^y?>tSV+-ytOhm|IRDH*Ozb2xVrn8)rp!lH-DAsL`*&!{H$>AF57J-SEYB~`gf#; z^~%#P&kkOS+wi(6c>aW+)2+T{oc#7arQTqIH8=BQ)BnzFmEFhQPcv&?JN3ZJJ^c(C z`xb6_mhDi&oUi;e@%##K6tz|_x5eU#_O%ubE=siDFw zzj)Ag|GfHko@>+Nn78FV@QPhq*L32y1>@w#^X3N(9NSmAxU@4j?cnK@(b)fEc|mjg z4vx0I-`ChWj?`uw`dNGySv=GIx$E6)%TxBAcQf!!JyLy;Ij@6v>8cB=O_L5A9g;T- zaB=vxDJJ<|{)U7@n`9OmG2b?~%85%Xk>+{KmnhlrSM< z#g4+ZUyKL+KfDs?lh)z4eqoeY_0O{HdA`6CzE5w~=GA{cy(9myZ_$sB?+@(X+gkl` z!Mnrk84)gh;k)kSE_f_=gYUwIR(`(EI!5}7`yw{%=DYERB~L)+d)I=d4Hj?SCvEwZ zC}Z%}&Byx1H?0Q`{T3cPT@&!;z1W-gVt4j`ym7Zf=lJ3-OO0)OhebB*<>F$flVr4r ze5TOeuJQSS?6k@Q9}^E4aZg*EWXD%S!w>tvv}{;Yqs54nbj$qHps%DFdH%97{z z-Fh$gm1p|=$B{+R`tvf^_u8%9bL-}1sjq48%_e8MFPj!NCtBTI`|By8nku8)>l;7J z4?9qtcYbSR=w{8dsqIRK{U^uNUpV{uie)+1zPhe^Uk+X~<@mcLKH`?Y|E*b{r<{Ap z_|*69WtGXM6TUBB{dO}SPrdkoij~fH`6WO6%bfgN-n{wZZ>E#~BbHQsWAcL@x$sxq z19?`FiNW*Y>95*M7jLG9JzaeN|H7R&_Wb$!e?isX*!J1?2SH?JATI42l9Lq4l?dwb5VH5VZNvBk#WLL-4*}s z7FCz>KUmLD!*t?5-+}!MAAUFNYfxg?)%?nw;V;vpI-V279Wl+g)jbo2yu|{A0UjkREUivKE#WH<6bXJvzbAaf zL7;fT3}y{Ww<0N~HBZtn@0!Dyz3K3ArEi>!f1^y5mwWe_r0;2&q~E}_%k0{0(<@qB zRj+?sdURov#)@amh7M*Tf*)qTN_)UOGr&QvbGd;s^9H9bsd)$akJPiS^Q@FyaNR+Z zZ5@ZPfm*^A4x%9HR)#9;>_wxKD>}+yv%lN%sFIzIp({I{zy$*Jv z3x!`LC$L}YRxD%f*O;9s?6_F(S}0G!`enzL%{MOk&+VQS&-CKC-o^>a_xL&*(D~9-C6;5#wLL4Y ziE%c__j%TzO`Ez%yWX!7HDTy_`aQI zRhwEs9`l^_e5W6j_5Y1AaWJlsa+UkGn#pJTY~CR2TL;+-%>;i=Vq}{C^UTxRiqe^P zE^P61=sBN~eYE1F)r&>q)}PaOg&)1mG3)%VCX~gZ^Zifv95K`L9SzxA4gDrIlq&4q z$ZWyj*b%t@=%N+Bh5lM^cRZ#2I{uf)0*1P!e>@pn7I;kDf6`oi73Yupr(8YT&!%0v zamh`V&wFK2SB~CJ`5hvLb}wfx^Z3Z&YIaT3Nh3AA!KObtY`ao(#I(OT$BG`GpJzV% z;Dh4Z8IzR1wyDf!m>PCZZSgVl8H`_8qSo{6HmKB7oqcEe+PO=nO#VG%>-1?KuRRlU zI5|JJZr|}eYL;PwHI?krTT@MsKit@H>siXJbKB13xG$bRZSRfgVe>tf=fpgFx9rNi zGuyRZ$*x@SKJ|iH?DKM3BmapT6h&p+GTy7a-~ z@;CP@WfuRpm0g?EFLdAR+_r>|XWXm&q9nC0m=$wRJ8zZuo~!J3Ny{_YsdHA`-N`@i zLcpbTySEPd&yJVeIaY8hc(SYh6tNY*(x%jeiq z&gnh<*s2Nhc+c{s0YZFM<%U( z!+omwQD5)*ubbX?9uM7pBYXY5t;b)~&f9qbya#dZrI{~3T%UH`^77wx=hyI>`pe2) zTlO_xyzt-tbBeEPZ*4S>t$1Vly!PdjxgWHje4SypclDj>8e7x(<#X@t@t5EDyvisi z?&Det)&pyBI+FN!0%L?_^^Wq|BeY?8M z_xz`<(|KRdEOc4L=Jh4>=;fy+oBnM$RPIo6RYuVE6px762NUK6*K_)wrs@gDapm0J z<$lL)&!3DxcNaF?+HR41e&Nq8=`(%m*6Q6Z>fV|Eqw2TkX*Kl%h0K2zR@+}HpKh%* zs?*u^w~5KiynLEF;{y5MIAO2bH?(b;=kgZlYXm;+<)2&`-L`-&b^E4wAN4gJ6fb?w z{HTxVarfozxvAc9#gmwsPu&zvx9L5Sum8((`~C~XF>=n6ZhR}e>zlsjkJyvk%B|iq zVgDT}dA>vkZkN>OyjgtAx?t7vW$9~Yx0OzLo9%FS-WugUKP7C}Q|NF}tklH$JcOPJC~)zv|SE!aTlB zX8Mn+b@j82*aOy!79D$=@<>xO=aN?J`akiVcOn|@soTuj?{|9sQ*CF)Ear~iliN6s zockL#f#1b8(wNVI!|>HFPth9+H%-@8p1C@uDE?)o-HzF>6KX8mg;eMM+;o4+^qYsa z&78p3^?a|h+V(^ZhtDMu+xU`Mmh{gqnftwbiPux-3fIYhSnKXN9iDQnLUr2lV}^gH z{&lK)B^~UUeY$H$rixz9aogOm3LmMa<}<>3dJG$y*;a_REIz#F{(~QB?Ee)$oMt=z zyT4(6J^u|>78aShj~jK$`5wPp%XhwyL-E}~P9=_Wt8eQ*TK8Qbur$1(O?KLE&WCje zzdhbA(PsP1{5l8!^%?xuAHSa$k$8+;><-g54qJz(>X#_j!%pH~U$)o@mHa z7QCaYY!=S_E>4s0dqcd;zCW%9_QV_T@Et!K=M=CbG2n!N@;rXQJ+*&pTH@!}?fGaV z-&aw=T(RE5hDC?Hafd`;%1qXCjP2Ep#a+Lzcm2I>vFYv}0iMMPo0*rbbzL6*CXZ>| zJYJ6Oq?xwQm<9GYH6P$*&RfU+<~`dP_5+p&w{%{-IX8F(pT(W)Zcl$0JpLij-#v4i z^1AunObgj#?7Ppuf6w$T?q=KkAAjD7-PoV%-B+U@Wc_RPSY^M7Kx&A*qpO>=y*|v*imt4^;rg_gKrwb(f5>dI=@22-f z`mAxb@%BmQEfsz&KfBf6KPCFr^&r{Wee2F=?)tpP#?9Vg#ev`R!>WqrMJfEW{3U#q z$K<`evZcR+z5{G#)4l}h`sZB&3EsD4Km6S7;y&H}ukzLR{|)p_O6O^FN8bN&{lMz~ z1}FbLKfmGso7*$)?`t?0?{Fu&qx!(7Z;bD%jZ+Ff{W?D{@&9JsLw~p#*mtZ=`2Shk zN58DW??XFd9?uh7ftJ7Q9H+TEss&m+?|x&v{5k&Bi}+K2o_V(%KK`No{-KXg6^zbQ zeSN$C$T#Ww?%n(EDV>?`aM<28M&-xqFFzR@o-^!Ye86?UzNzg#`v#t#4PFW~_?4R#9cKYhBbAFWe(TNJ zO-^v&mVaj$G8CR}?c6_IB=fpb?(^VTwhwf(N~*5OGy3k4HVBzqd^ES~jN(Q=r&x~Q zl4~ae7#^_wI6d*?THo4!To?{6yEo<7fJo8Z%D zB23!b$J>M8K3o@dE6+oaABTiX3Nk0z~uSN+SS*}c6RQV>vXZW`wh<|$E)9U zPi^mC<|Sj~5gaqcSY*Ybs_ZqBUHsF46Degy}4gdf#d$`W49s?elmL-1+^8 zvUNr5sq1eS)$kU)d%1wwI5aD8xA1~%C7QPdvfW?nv)%F9B+yXHyw!MSnVsj_<66ur z?yK@j<}6;GHAyqb=(v*O1)m7CmX=1@>B2XU!C~dZ>PSUAoij1=@jux zGbgw$P<_7k(WKfr3!0a#3EI!)eK9?K*SudjYl!<1P>OgavEY0|r8o38k3w5!kPk-73G`lkc8)MBRh zYovggv&+tq!Kgoeug#mC z-`qB3i%yvEyt3EkO_gar_f!6^;0KlIealqj^}?inhJ0>h46Q%E=X1CIJkbBk6Rx@PTN_iUL7|2F1wqy4jfY|K`Ob)Fl4X2BI>=Df^xvtMTk zH=E3#woK2a{CvCW3(1c~)i-{qE&aolk+mzaruRyG#Q7I9UtQ3iV%7AlXJ=m2>5$mi z?ca>A`@WRayLUBt{#p0myZ34Q_nUw6=f`)E)hY~c9W~cjS3Z`$EqL41yI7oON%orc z+w>cL8b?aXXWn-%ZD4wS`18Rj`)qR@W9H5mT5l<|v$tO3<&9}uQ`2w1d0j2KW1s4_ z_>=p>+PQChwy~Re=WW#HOn=?aM8`k|rNinsGAV#)@OV zLhhYZ%yznd+a_?i?x6**ZG*fH|1Ewisdf0-ahvnD8>j2$$BWyBtp_gyscH#p`+Ps5 z>P_wA_f6;a{kQp)v)*oR`mM~U>c6q=-S@97eERyr^RT+NBL7xy%8XwtSG{g-RZVQw zpU_XSv-#FuT^fFV>-Em>3y+u7uU(%}{PvEq|I_B>z5O3A+Ff7v_9f@@v)8NM?nwK7 ztLD6KcC_7((zb_;dp9#(Kb3l~IyLIvH=pQuy>j1cd#eoQMxLu!|8dcGuk%GewUPt! zS29H8-!6Vz*Vq1SUSr$aH!jR_>{CvhshO8?d)YRV!gVoAi}*Sod{#bnNz{F@+vmTA zcjaDgZev>W*=7BLsrNMR28$S!ujk+TQSfBzr2jlmaw})nJm>45yL1j0gN<2baa5e! z*6gr8*$Eez8s6UOo0mOpdU0*eO4S8+-hHp%2;MfEtJ{;i>)fu?%I&AQ_lTVF_FTI+ zIdZGnCFNIBPD)J)-yM?j^}#L;uOr`-KW=e-$-Ji}X}<9*ju+S7tufE>k1g(BdDYPS z`YSPg&#hJ$PaUb?^Q}`;ZY#Z5^y=ge$$;xipWa`nm%Z@yvi*CG>||5Ve%<`+->t33 zpRqUo`yur@Sbu+U@rvWqDyqtwfB(4=W51mL&&^logHw+F+?wn@`(KRoms_tl7DY!% z@4vNk+sj2S-y|2$jEkEVzka{x=W?_6ajx^NBt7@*8aQp(S{Uces`a2U?y>2=7?!~3 zeax~(XX~E5DbD?oT-GLdls&DIpY_VQKOY$PpI!JYFfHoSd)Z^z2a4MdO=k;9_-0mB z@y&PXuN^4?v5$m><`;gmWI8PJ|JWDvp0DM03oKM-@~%3`k*VeV;IP`Z{$L*G6$hWL zwAmQEmQ^)4>=uugzOq|SgIa>1SR0-`CQ6{(hQy zXYVej8}p4vY z#>XZHdYO-KIz@!IJb4%DQMJm#rb0%(;c?u9I~ucBFUVuao5y@UkG-S&`yZo(nd&m~ zX?y-DJ?Nf)Y}=i?7CGx#4+|W8R~NSDj}Fr@^YFmT^?9<}!ucM#ojKm{w1VM*Vb4XO zR)#&5FN>?QtO{@FA1GWugTE=$`cbpLOrE{WhW+Ay9_3GCaZpcH`a6SvlEX*F@be7z z%Gk;$%8oqr}YVrSDpPtQ($-a5-=!A=$7uAi!=H+fy zZu$H;(y>3~>F&Sp&X%1IJe`~$mXmL>Z*rN#-I;6ozVXaTuPV)4f4Oa1O^op8t9`4o zm9w;0mzhcIudkZqpMOovs`BIetv5py7)otl>paNVcdX&{ugQ)#vjtDR-o#ydYj57> z-823NH{SbOvi9Es;hlFG-fZ3X<&xq0tv>g9uPxqx{fI)*Z(bYOj(yYAo^h|a-3=~v zc3o)wckm)>19T1lt_!WZ4t!oe;rgQc{}W$VF<)Y0nY#2wt@XQ2(-Ik*ju)}#*cIKV zOFr-=>EN@&whRxh&cEyMmFoa+gL2$|$q#S#&r-05YBpXluaqTp@#cW-a;#;nUS+rPV&r+hN+usgdz^!KVB5m^^M23!7000;Iq`apquM#=6^P9 z2(eC}%$V z{Og%7=?))w9;rU?nkGJ}`K{E9yg;R+?I*(Rwlt(1Rj3p=VJ#ELVBC?L$u1Cbm&en5 zTkC(GTV^}e1onKC=X<)V@wBh_Cq*{ij;pR4H0CHVS6MKn&QR8f=;Qq3S-ZXK%WBs) z2de`KdOv5#t$N#%m=w=7>5WiB$qg~t2h6OKnj`Ltl_N&fh^ zNnA@#ndva*@=D}w(>TM)a_^1S8iwwLH#`*gMLk%2)8VxGb@f}8(qdQqOt*8~Q)^c# zKYL)cQu`+9lO={XFKjsS;^QmDM+^Ks@SyZE)>m=-WoLC$-)dqM?Q`&o3QFxX2 zp_JLN1~VgfN8INNwcEMoj$3E@lPlq`cjqycH2!M8GEajn43j;^R^!54!UU*`kL`&<-IA-6|&Ep*hS_w3vWo7lwZow6jU8B(`l2{&A{AU+*iIW z`>5UhQKZ1=dUUtgoP(=k{3hjo6Wlead|h#{zqL-AHXYmC3x%4c18ck0PE2Cf%7-9wJQvb=UX;Fk6E*5iM-EH-*R`ITpK)Xlq* zZ?b1@Ugq5H@HM%vXZfo28JEM#?&eGsv!3;J>T{8>eJ1;vqe9n22x{5iH@IM;dhRpN zEcKAuHP_iMUYU42^qT3r&At1!HoW|1H_6AyLW;LPCO)rRnCJ*`?A-h1`awI7-5zfKF+k@bBp|F-z~s~g$v_e>_&fB#kc zd+*cp^EQUdL{HOkcd+lh_DX5RV!_+5x!s>`eR?G>_S&bnd*VX(SHG;f{MGEQRHUuM zl>4tP2bY{kxufU2=Hu;c!Tr}Kf3KKQck|UE-NPS^7Vfmtk+QnJQT=w<{pvmJE(_kt z2`+gvyLy|7{jwt7Bd4DhR9jBrxF@IDR9fYFZr71Lb2n#Bt8@7>tNM!IDa(GbJ?DxcT0?1GcvRl0+$&Cr6(ef3Kw2 zU7ml{TQlDMdZfH$$C*uLMwYxQQjes3N{jq#wD9E-r~A=6Wjo86-);Z2X-kdAVZo;c ztlM&R!r$Gu-Bi@$ZfCM!v(2oN?#rM z%-y%W^!3Rlx~pZ|ZxucXH>|Jgxn4eV_PS5Ymsf7juFj3#6vL8vo+ov|%XscJY^UNH z|I~P0mfNHi6LCsgzQXVIA1%O7>=*|xBdeSEjolN>&sN>>%Eu*+@8WS+at@YT;9o(sNg zkw4M9;=tE1zK}$_Tu=30X9jTw!A5BjrElprnny(6hOF9Pu*rUYl+5L0Rh1Uc6$3J6 zFtF@+D3^E3dGFy(_Y?1NKeK-Dq3p=Nhf?j2O{b+gMA*!UOWYM{(8J!d*!{zHj^F(P za`%#UR5A0ouV7mte^g%P&p)vy?Z|KIO?ccpY!YtCJ$PUKVg0()%HN8A3Y!JqDbChc z*k0bX+I+@y&VN5-`1o%0aQxQ((XM;wqvW!?(me9}+S-pV;_f?_d~C|MN18Gs=PFwq zulUD3yP0gq);eEMZ0d)y_NR$0e%wvcr4r03A0*rl@CMf9No?57c7@qo-^T8r?t`c4 z2Wmp@>}6UOD^vTIi8HQ5LMfy6)|n5*cg~10Es)r7hVit_;`9B|{hAhc_6S(0SA4DP zQLFp?utWU5fXw$y|7Y7w9v6MFu&ZcM2;i-#SUrPZ(8R8Xxy>-@(cii4@k}l<)07qR z4tzV6SgvgN==a~I!+R4pOB=jpIbC?{;XWDR;_pk7s@GQhj6A?TpCj(C(zMhkF;|xU zzTP#P|53U5vcD4!CYEd8*nd>=(Zp|tk7f$lYik&nINEaOy2mYietXZ>$=g)jGow$R zKEFNn%RLv7(%1^M%YEmF~_`EK8K|G!N8`R_OCL>`zazx!7;@&Eh( zs=I2B&t^XMx_w81HGjlA=0DCI2cE7yl>2DWwA&RiyU!~gUSlM;Vb4#_2G-sA|0K-! ze;3{nD9ERLY_|2>xIL48?~h!N*!}Y7^9G%WcOp{X0`|JcJgML=G&Yf8{39Xw;%~IT zO~#7u9V<3Bw%up@BCp7Fq5OgY!w5WW$OC4N!w@rHDZIJLnL{=&(!KrJD&dd9pKbTi2+b%2OS&|UA+nAx&lOgr- z(K#wjx2kWi(>8s*uCAXatW8YL=*F(V{I8ltI~wbzx%F{HT&VooAjGkiDST#)_$luR zja-V1eqSW^pBB8pGV4r3M{;3Nr!(7RX3uA0SMNHUURkH;x=^HhhMk&0ao4xGi#cZL zMVM5aVt-lZaq%WI^DJHuuX*)$TP0WODsKFf7|hToGtt_eTfXZL)BWj(?r&ghTP-0O zJ)Ps*S2j8S++>B%32)73TvlQ{Fj+3OAYMUoi5c$}Va?{(>?SC$mp+i! zX{Gq`=bI%wPa`L5ia2yB^>4h=sLZ|WSEsB_!rLZ>6MV1CR5xv#r0){=>(qwsw*t>1 zwy9i@a8EvCvuv)4-b=pM#jI8?OvUC6(yDs}+c_-Qxgt)f@0C@sx?Uq)aI4|%vB@uG zM4moqz8o9CS|W8jNOta@x$9Q9&1mCaQlMONL&;4tTtO#*gJs{B^=s7G*ve0a@p>+o z;F$Vk*4I;CF29>Cqp811-YO?R_ECW4L*)(8p)3AeF~8i%pEdFE**@;=b8qThGQ7%^ zr>3wWDkYrx$#ZAjwoCW@4;%=3GG*}rrH`}TOrLSyXW=3N9TjQE9tk~5rR__;g=xNx zC|Sk8WXy1@;mP53H{#z#pPjJq&NQC9vz%NNdks!i-JP`P)%R)Zx+HEXXY2o#oX~hr z-Ogi*-MpuQOG~ZPmVNU%@0GVXphSRKA<$j*x@PR_XE%RwS=$9|{K@*-%c^7nyWSbW z+@*g!FJ5Kxdw=r$(`}cpObfJezC6!n-33N*wfxQVB`;(r&%Pw_I^dk#rjLD&i(_Qo z_htW?^YTGs5_iBl;~D3VX+1vv>cH;5yBfZRsIPPOyME&Cr?q^s3-)*)E4iC;r1Z_t zs@cD`l&#$8n);@wH)d(f`QlS01rtsNO?{GCykU#*rdj7_t&6I2-WaK#k{ir9V;{Gd z{c`Vu(*GByD9D#27v-MXQW6@U|E7=e-OaEkzZza8erx$Xdy&f)_lNDJy3BJf8~^+m zCf{H+Yin=1$-TKhzDI7)%z3(Hr&i3gmnSQYlAeA$`i1%R zmA4MMZRs4fjq$&n zy6Lx9O~~IVpWlC#owW9*jokTF8|9WvzM|(*w1P>|r0izO@npY$xuqKm=ik2Z>Z#W> z^}rKrZQs~7{5E>+di>nlTa%xC-|752diQ_3DZlUkPANI3w&>^IP|3ZJS;)B;UTWXJ z?;j=2RJC5B|Kjz~=gXgbUUxWL|L=8M7CY1RWxKwt`?+8Hd~UQ|Sedcxn|sx#{;qf0 zTXgHwzE3uhi9w&!a8BoqF~3cSPOWt@lJqdgJ%i zofEq`KfCVxr`J!N*So9#+;+b0**}k$5^@*z918#XFm-eJM(*tE^A`!f-E=-`zvbs& z@h9KUx%(hIGwNUDQ(cq&m$OURG>UigbxaWQyWV78{dH5euFsP1F%FC_mnCP<)X}}a z-6Y#8Wsh{koP`>>_tyTYD&6?{Y|+ckeP6$} z)o0_nw#oL;>M*< zjGHeM*)Cy|%;^pD+SkYJbL#1&emxJSIO``IuPzzq#f0CMKUnu{%eOg(SEsZysMjf1 z+pRZ@whb3imcOOt$|m;oZo|jJGrrxMk2xXXs_~E#=0())RuCA9A(t zj(!s#pLmbCz4}3g%mPP)6Fr4BooC;r@A&m2U1HmMQK^*w-O@VW?@wBM`*mIwGdsVn zRm*PPF9wcJILxaOtX$mq!z1GEJIUuU{^waG&BA-&i`1syG41^EjN!%$_^M_ssN@v*iycJqeZI~`$t2oADeU}wi$9AGtk-9!mvZK&g#(v)-Kk# zZxKz0*xNZ74?jrS&1=}7*fCqjEZlK^?GuAMH_2nH`u5E4;+Sts7C0Z+6K?Um;EuIV zG`~IbL2f>NzTejEKOYp7zW#8~T=cW!!#38(8Vyw)!99~7yo%JUE?>-Hr}a5)`HdLM zp34o}7gc<<{O}>{PqR<#oVa9d_~SKi`_}A@ zj61Gab?Eobi(M<9mga5~zWn9j-IzRm|J+L(KIXmuXuSOGU3Tx!(zh+OQj4Cvm$!L& zbNS`vcem>-_^@)yHilc-^QL@yB&qu0UGAT+6B^IY7yA20^NV`shW!npzF3?l|oJ|EyB|xBJyS=jS=HP2Ih} zQ~&w(`_hdD2jt%^c&J-;-!5TK*olIM9`_RqCO9sPQ)o{5e30?++2=RvirD{un7>fb z&8=Lz|MB$QTPmXs;^e>nD*q>A#O8B8-nrl1^3NyBXW{#KzeY3YGwy8b;dZe-w1-{b zaKdUohB~eTj!&!u{>mv?{1t7GXRc!B-OqngZh}7JAEAp^e=!}l$W} z@J!uL_6|=}8~7I_w!Knkuxo1*6g=@y*Tw$?NAd2}UMv?1R+zb2ddA3T3!Zn(jt!d2 zF(+R$fRTH0yK?iqQ;$VCx@AqAcC+%x%>6GEV8o%o{zT)(H2LOv6|t*hwB6~3G%Ml@_LHZ@ja@I(~Vc$Txzv!#bLIbw@izK-ZviD`1V#NTVh@yvReIH2ytS!u``L?A8FwqcocQv1htNj>&HX!{%%1P> zXU<`yaJk_Mn~D3Q_QgHj&W!iv16?J=qohlPAC!H({HpDWU0(DTrRE=R4=|MZEjnRg z9ecYprnp9GzxS;d4<_gMmgnBJv0ZN0wC8RIQ<(Y1*?P-krOGZi<>_DkE^_p4N!Qm< z;S*9T_pf@!%pB6jVYI&C`pW|5uMPDc-yb`{~hHC->AK z&9dw3(U@-@f!BH8xL7}T5em4ruJw|cp4>Ku!i_cg&ld#T|MXksJL3meHmjV*kF(yi zZ*}J0#{AN$>%?8RH$Dof8|x-I?$*eh@t&)|-_BC<(n2QB@*DkXd|ctT1lQSFIMja8 zeztAPKG)<0i0wXu-&1wamJh<1!9{$zx6PQo-kT6LH_16@dTU6&pt8thHAXc zZOG>h3D54k#HOB{Ja@vWgnLWB2!0jN-L=$V%XE&94Zm&lg!!cydduP~Y)-Z_PRL!9 zvGU^qcHOd_bFBmBuP#;HI4^h6ls~yL-aj*59XI_k|Jds_?uM}w7k=%$l5X_i+O1io zmN%1MFHf`n^w2m*y_dE86#x0;qH4y<@L0Ci+n-;)f08io9N!L}yrq_LnGTa!V>jR5 z8S`!O{ItSJ`>ft9e?EPS$=)+7`ajJ$_jb->$c&t#Qu>(4H} z6!YcC@jGU6f6vtlEPb#2n!7ih;nbbpr?#-ZaW(4O6;>TSoQGyo9Jt? zr~7WrF#j1^b*kp`kDNc-a(%x&N;&i7_{+Z=E{X3tml|5T`s&j*xx4=_+_N`K@n0f( zJ3g>_@6?yOr~U7ci+uswBpJSR-ppMW9)Br4xn}zL-%svJN8MU^HvHuO+K$R!yS~18 zpQQ1p^!w!F%S3D?3uY}pwPNO>eUo!$hi{*3bL+SE`umn=gHK0SzpJgN=aS!heMOwy z^DlGap6?T~e|{>@{`UL5R$Edz{K})ZUarsmcWx{9{rt<46%*g{&;8ltvA#9 zpH;1wt<0`lJ(FQ|XTO>V zd=@LcQaSnmtU3doLyOsp->>M?(Oyy__V)G@<0YS}x7~h~Ze+4yd%#S+SaaFzuNe!h zd{^AQaVhK6`HH7c4da-Sl5X~|e6w@n`j3}iZTQHt>;5bC(+jt9>l8l-DYwww8Rz$= zMR&FF3(K9&#)a`_H)q!^sN6TzclGNnPo^>cDC?abz4he!x68YB*{w0Z6SvGf?EF1N zkvsQ%rX8Q9oA>(mx%#U8Z+C8s-|*JqxujnE>yt%M(!tTO6{lq0-l+u z>fYF$UY-71Zua~=@BjR`W7G2AA~#>JGB59{YVN*Qr#|;4S%%+VHK|l>G1C)|2Ojfh z<=t2~Kj6vMa>qN$$(cH<6YQ+C?pq#d5b)R+^;mhWAb%5Az`b=VZ&__vJCS|X%^jjk?bkH6k7V6U|2pV+kU`we>L6FxGO@^@Yr zZ`jjlzvozi=%atjJs-F{T*mrqLt}CEiSGR^ufq83|8p=(x18nK8Fn;J>#l#%p#w#XXz_^qF3$+P%y(PNi6hac7*JRIHc%hVTtmua?k`&+#S71GKx z&L6*Ykng+P`g+bY>_>0wzg@z7(7>{1c0(n9PPw7c@6G(Ij~dM5k33iYvB$hut>axLG! zXi%HKZJn9+qc4H%{+~1550y>JNG<%8w%N_q*7?S#<3*3ROFnDng+t> z-wQ6w9WYJVz}m-9c;MM#=0jWC@ArRb=lr}{HiY%`UC};$d#4%y&AS9c#YOmgHxWHtppzz=v=ZfX48X3--Ubo*-%-9q#D~ws@ zHIukSgTulWHWtV2Ew94DMQ^ICuHfT8pS=H?va#|ZU*_`S|96axuHX7S$2n}{r47aF z&v5XU7Z(>7^PB&_6DA?I_rTHX_D4T_VY?mA{Q2$f8SnRTX0)@Y)$=RKJEgLHkYix{ zqP*nAbA1Mzvwa=gCmeWb&-mdwXc3tw+p5{KE%ncwWO%`lz|L9japJY)s_G>MH)cQi z>cH;NRWq+_d%djG{gbJ&Pi*uOtzVp0s{6K2!ofLINa=zM15<`dem7@aA;US1z;6w& z{&cLAVgADK)_B^q>pvxGl)Bh<@cRDb2vAxqeM0=^#2|+BW6pljGX7!r=d9;wDCM5k zTb;1awf9EWIqj(L#t*buL`{w@=(*FA80vU(T9}IY(ph&lda#AP4AV8Z*^upejV(-O zwG2-T_m%V`43%$MPJJ>uFtx;E;?&sPA_th)R*DH2H15}p+WVyAsA8j`_soT>zw7?0 z>`a-@IRDxpZ(MUr4}AR%F7toD=6;&J-_+ zwRJsiWwI-lPhx`!+l$3E5(*N!a~u}bWug8r3KBuQIMmY-pKx zs(Yq=w^IL_)wUs@`gEA@O1IiIPF4Q2SM#&WKOW|tGv}<8Tg0#|%US8`{s~Gct6zFu zRcTsv#-wuLs){B8zzd-tzi zw|lh*+y86#H6@#8Y+0E+wR5WB#JSR|{zV_Taw&bq|LJx|&2+=8FW-0-Q|7r!RAcV% zPWHI#9anbhsyL{)$1Sg!%Fm&hn@}4&q3sMyjLxQw9YSnQMDE({df7- zZg+Egn5qFTs64&?V01pvqqY2iRP@WhRl7%vqckhWT!29Guia^ zsoAL~u1#~+%=*2w&j0i5pt@=P!kjm|EY1E;Xf65vv*@Me?U*NT9Tzt{Tn^9BSz{#` z^Lyc`!@raGS1p?Q{>p-t^F@Cr{Br#|sYb!`#j1Hft)?X9-dX%p?fl$RbEX_y&Qx^% z>GWpS6@GR5PA2CRH!!?!IFlQFZekok}FX)NmuB{w4Y+3dRr=IG%9$^bO_MvEn>zbb?W^K8y>#8r; z$L#c#_0`X;$@|jqef9^NdABdVS@JQH{pN>t*N-VYUmrAIcfaFXmzsk3C(I#I47M*% zFna2)Z+I4KpLZ(ql)6mECf2^qeQEnd*6uU=t9)AZ+=}97FDf4VoB!M)hu^<(^Xc7c zS+l2oobXwPf5D4Clh%Eb>EaK3SkxtB!@op1F746J4bgM_6D8Vv3*;-SiiN}|&1|Q=zm)yz((8`rPrIKyR(z6LKmUx)&+D1-{Y$rfJU>q>-?MGrv~_pG z@71R6^P6}4)eiwlyDfG1+J2XKUrws_71$CuZ+gXp-`_v(U2^+)MeHWmxZ|I-FERc< z{)yf1^|{)rqq*Nw{V&y858|FR<5=Jc^(7bc_k6K+*Hu!=@UdY_iy3F!T48F%l) zbF+Kt?R$7~Ew99-=Kieqyv7!i%JA3lu320J`=9JBy64{%@7wkz;rsi|?q95;ALz4L zy_=Bo^!Fvrxm)crPOnvqS3Yx@Uoj!f~EHef3D~@+{__LL>jVEvXm{MxA$^&!&GUZu z`}^6zH*&8v>YrOh)g5>E?fvBUCquhwmx^as?@rIHNU2<9xh47JzYV^1FC@-p_V=1E zf3y4iVf*L5dH%O;5cJuRne}Z@Yd~irtxx7=KqoBeg z&w*1x!QruX=aGn;-6|P>mIZ#kk#_#GoRqmnr^^58kFWif#5dMB-z*Q5i_eHTnY!V> zQOf+l$EQ{IZ=U#5rDwX5Qud4o>z-~}6lOVtr{z+?JjE1-%J~0M9X9R`*Y)I|nO$MQ>4Op05yHau$ zO0G`$wl1-)#dZ?&>86z&$98MKiHl9Vv(CVeu~_7Y~@UeZiqiM~y zTlW8=zw~d5u>C1vc@o}}%;jOPWxbB#9VQu5PBK{+MiChwTYP{jsFDx+HyN4yN^ulXVgZHk- zI6t$TxWl>R`oBPj7iS9A$o;*+KSZ%)qb6cpx3neG>s@VDrr(eW=891DLNCEb~6$DzR0o4hJqyzsZz#+@P_9(&7*r&=BR zwkt#7R$xbZX6CkyyB{m>-jn?H#){08&0^9E*REMQQRTw%ipNH}cPE*q-+SBJblNO# zXHDVv<9~F{YaFfJacAkS&uflZv+wte_qqFx=f3nwx4LX!WyO5qe91B}_gA&cr^oWE8ZXpKr`8MJ zY&h3+?frj`r^oH*ysu2_GNfd0*2`ywXXf2^yR(MSW&|Pre z@Vy@6p59#*U%7 z>&}vmp1k<$Y1aVOMhUNw;9@%tUE9`QjGLO1*7ZrST;bTg(W>3zlQJ_4zs)o5@0MPr z%sin?`=bAO{Yky3aiKwbw`kCl48~ojXDw%(^Eg7;viM4x_VPCZC;qT>8`v;dF_Jhw3*6Fi~ilf_11-^;SnCZBm zl_N-L-m_}f4f~bilGeW7v$o;%1;(rcHzIB?JAGbk=P@nr;utZ9%CfqtpFFlNdb{A{ zuH1xbHg{hQadR+$J zO-FzJF z@tVKsx#pxD3z%+;JKW=(b8q3RStqBIPW^u?M&WhT#jhq|-b+57J(kaOcln7IO}moM z`$q5Zo%KnBp-8%X^EciF4{JKD+hqBEE}$_&E6^3XWgH2@5|;K9mAiI-@eUFo%7oF zw-;aIt7VsS?BAOGmd)MVH@$Od{Df}vt7dvGuh$#jG*0d=z4}bVvUX!(<-Hp{%SC(- z{n|F;pYZ8x^|lgGIcHqX&E}gjG3LLL^Csa`zSCA^O%*wtS3K{H*}3+O{pRdF%trTx zxB1(ozqx$OXtw#3FUQ*7#yp8VzT~kXyVV2d#2*ErXI%Y%)47F&2-!~U#G z{+017FS&Nb-&4;%)qLnY$(Zr_q3gw*6UnpJ>-9c;{JCt8`TDgsemgfFY~Fv`;_UT3 z6AQkzY}P4Gp0@Ypoc!w89eHI3Pp&`XedCzB%&lc<1+1pU_0`mS#Kp78R{pJjZ1i`_+5PkOdD{8d$(zeoT`->CE~m6w_1<1P zo0jXX*XK_zt?bC#$9MktiDhT@@Xq^edF}r6UoDrOM?}tfU;9+&W&87d&Hm(~(C_7) z`tg1DZ~dLH@}rRa&#g-%*F{zRt?{_WzqI|9Wug4OeIfmlqB*=F8`eG$sNwy7_e-;) z*tb_Fy|e#SoT6p)exLE72 zk3S!Ex*J)SQ$78_b?;v%P6rp9m#AmFs(PkfD&l6%x#T5#bmim4=FhHtHGxB|`rd2J z{@6#C^j@}Kd@iZqf0Jvq{Pfe;r&nx!{l+S_a>8z&f|u_e|BaAcyC>MY^Y}Byg8G@; zmwqfiX}9rjOxExASIp11AKAQrf5?3!hPi@{=mSS|FC)9f~@A4T;BJ%z>4=Xub z$O-;*tIDL_b6>h$r0|x2rDy8J?<(A3nSNo~(iIwl$J0++|91cBkiYQHn!3h6%wg>- zOl_I(IF|Mb`fmB&roXUCn@eH-!OyAr-p^D^t~{HPpI&Wi#WZPsu*+vVcYA)>D-6$t zvgYpMGfk@MtBF%u&|bA(dH*VoPY)SA85m>MUpcUCx$?0IUyOf?oQh-pmi^SVym!)U zi@&-ne$R>D#mpcmq{Px?!TRFPQj^GnRX6>XnN6reW&Ztu=lT=RaxUK0o>Y&EzxN;~n?>)?->Hu!OnHf5B(IO;wDM_U;v5 z1VhX^Zs#lAvpx3XPi*I5?YD>gc=Zojttb#Qt_yjGa_fmcoi zKUGSX{S~`$*EJ_U=rq6f(JlT8KiADKj=yk7{_@eqBAkC;t-Zw`+)}c6M%kY8mu5H0 zTmI3xyY8mX!FAP#Pb$wjyX%k7q4Upn%Ir=vKEAZt!TR^-n$Ir|91s53Q})usRPS(_ zry29(iPx?l|MAgSeRk|ej-#o?RkK4s`4qhL?R@&U^5IO2>D#v`CD{D_i{(Revt8kd^9%o7FI&a% z`|{=m@=v~;x%~U=-p5~dJt#i?Iba{S?*?uvP{QYCg+3@v($GLsh>lxm)J9<`sU*pebOn)C|+x&WWTw>lbgVT>sd++@H zq2KWCAGt?A%o-ZrJ(@mYLC5cgk4qoCYv#MW)#0(&1a*de%rDp*au{lv9xzSNRjKK@ zaQ|t?k?S4{DjcIUb~`YgwRbA&&;MNP&=vDf;sDzL7EWP>Y>(|;5ANPjEm2^2!E#mb zf_KKBuqwax3>!C}W99t9r($k-Y3m+~^@ek;vigKHJ6Z!S>#kk=EN7NR&Ni`hKjqJ? zJGLHsbmP>#!0ul+8?JD!2wkVTA&v1v2GiSXy+5Z-VK88N)V^3k%3AWvBC&lALI3Vb zv92(9pH&x@ev+Yk$NCzvc7OI3URS;C*=BR!2`OxQlCE_AQ}PEdW`#@6GpA=Biz-n6<%`%j7JliZ1CPBX5KRBLoJxAgC>lM8!U#mM~p zm&k&;X`wHKDx?kdC+{wOxv03Z_ZFXW#}egK-|1($e{(TueW>-|)0kU4ci9~OX_cKx z_TiS1zgt6l_vx+p`bwU0_4eX>$y2L4PtB@jFl;`yw7n&iZB114r(L^F`Udc`cQm-H z`rJ@-#isf3nTgqd3U7OOSml>?++I`6Y_f)tQ{ZI6SEe;HgKsX|UdJ1`T<3g*y+^4} zZm&xE)tGxBua9P5VvExEyZ_*o=%gBHh8(tk&I=0XJ1jc*%YRa^w5s)Ki{`1kHY@M4 zUa&n?6KS1N8?f2)nixwAt4Dd&6pyvD4qhv^b6&!*vFeiNw(698mrXvrKKC7WJN)%A zz7e;2&a@RKyKjnRE5Gwko9>mmYEII%|Ci*8s@Cm(_W#k1m~gglQ#B4SM)8?`aPVa+ z7oV^zG(oRa_dqe*jOoqVJTF!yOo-_coBOo)PFvV^qq>WHPHg*HL$mjDG2A`2DaT?X_?TXZ2R^Ths|qRpRjcvS{B5|y*9CtfraN8x-KSJNTUJ!d{nd<#{F(tQ z9aWYS>L=Xp{F})uuzRlc2S*m6%pT1YE8E>QGw-k4ve&D@W%u(};S6&WcJBDN#U<{! z(biW*kJTSn^7pE?k#j+&Jo$MZS%`%H&@)b@0;&E|Aq1TRHdnWfdVVvM)AGb z*yJQCpI>3Q;imWH4>syL$(d^gs&d*t%4{njcO zwnw!mOw5xen4kAN#c26$Pw#ixmnt_;8J**twJ)VoyujvT?i#sv^cguQD5!|M|&sH~nQ@YLe2V0~VH(ILQ z`m!`PBTx0?hV#ZR_HW$FZS%3(>*u-O$~ip`ZF#(p{Jrqs_3ByGg5sC`*VuBBJJYkX zv){YD-}(OezrqFCU;a4Wp7d|(mr8p#V|KT**Dsk^xxZ)bm7BbZ%}OHcpX<9zG> zb;Xaqw<|KEsq@&%`I*5l;Sh_Q18JW{+y7Kl#3^WX-w!Tk<>ZzAXLwptQmu*A%_x7ym ztqv)_uyM~${>s}AzkX1BynSlEcO%=Ktu{U8({3BuZnI)I>7937;s(DA`(i&2h4(dm z6&H>Fo&F&9_`TgeE0z3Rl{e46HMrbg-)C+aDRN z@!4*hU>Kk8{LZ_&XUEz*n=W7cDE?*cZ?4aW-|jczo3qJ#UyfgXYL(oc+mB}W+Jzkt zE*3ifd(zveQ;+xUGMFp1e(#xgv+Z?zy}f7Zt^2&w$kJc$!s(bf2c+*7`iSjcd2Q1a ziRYyWj`#ExzXpGbdBKo+_tvJji=y|NP1xD^;p~ar{L6y* zVfU4;A6nqxqG-9NcH?O-k29OjF+F5H!^*|6fXz&O=_R3FmjxS{OIWXRTDiZN(jvDj zHt)DhuI$SNjhal!XU?!XB=x_1mV0ympV|{2w0q3OZ`6O2J@S%k(@%-j>iZ9T`Lr^} zzDj)i{(sLU*8i6%{3GR5)6*cwsLV2d0k^zTi(HfGqr1CjtpBh1XouSY?jy&I1-8G~ zCVt=>le4_xp5pco8SIkPJ>}XZ;+wz4?-g9(wA=dayuJ=0R{@2p#)`|%dLqR#Pu{W3 zaJzcCn=ib-Au-^KxU$H}j|Tn+OxQ|lkJz|+cqEkcX1d(H%k*2ps9)BKrR4T^gP8x) zEqDJ5Refh%_9OYtm;5L19*MnBJEC!6#S7gT=Vv_Gxrut;C*0Cb5;ITV1JJan}W3f9hPaS7xGB-pfj}q|Z5x?xph#D^@>u z=U6az>&;U8Pe1v^=0z55DXz3x6*bd)^W9|Sz>@Q~H#&JM&p*reGrzB)*noShVEEn5 zar10eKeURJn^{!>gxNK|KD8o_Mu9}`}?ea9@(#9T$55GD)^o0K{ms_PLuSV zZcz%}-goLh*3bFS`#-PkTz2gK>dxc;RT65-IxByRa2%-kEA)49iCE>GIE8ofmEP^+ z>z&SVn7iew=`Z*71~xkncki#!I{*Js?i;(`$_jPtLi_k02&&w1e5}9lvoJ$F$Ab2f z|Du=vvKrKNv2^`6wTQC*V9T)IrK@G0bBwZ+ifd5#-2>2d18}@$}FVoxu2h+E&KM zO~>~!Jh65#60qtT%aC>Wl-<;k9ZGM^VRtYTq0w?~G-tNoATwDjqX|4ME+%xQ42 zN?D-LeJb~@qT=b;RXM)PKAW9ZYhT2%XK_<`+|0!~?nTq>EZLI#7DY3ZM~3tENToTv zjHo}`uHGWLC3?C0F6|J8Y`xVoG6@PlXFSbmc*JppvE%oh&}UlrnVNW~q_ge1^^k>U z*5!awR*whi)*gU0R-WzNbt~qR(#>iAT=sPr888*? zoA{;1shET5yZATVj5DS0i?$U%efq#4YBML}gwWn~yq6E=$Q7rQcP3}an^m(q%z2%@ z;D~|)&y{IhFIYN-L!P}!IoBRFc zUxrsn{Z^Yo->kUyYdd49yTTJ=uSYIsDyOf=oKIucEvjJ*iM;=O&vKR*?k5CKoXv}x zKS_tF?1cZ#YftOqb5h!wG|u}~pPYDjYQxU2EEQG;3|totXA9faD1MbcIHzW_t4$YI z+VYL7dYE_C>%O(pbU4QM^-7I&*<@dzhKHx3R~Bd1ul&}w-2Kq6+}z0}>ttpLtcjb& zc(Ogk;q|uP%*PP^n? z&Mt2f_+EdWRC4c^xop`2OaHw1$XV^O8|1U^sp?+OJ^4NB{LQ}(U&}KkJ0gBDe@l2Zl;O+esOEjO#Y|O&-hK<)N(24rrEQ`FE?H{_s+cc{Y1m_XCL}= ztfdpQdUao=q$kg+*Uf5p9rZb5($?B-FE6Lsoc`WDccbO5dbRt;H+6F_WjTC{30rfY z`(hl^!fnUF!9V->*G+rBe(8d5yPICUd^i1B zVeZr4Cj%R{)|yJD-cGolvpBL+KkC84E7vPhEq8BWUr@bN<>!RC&9wq1X1Dg_zPx+( z`$wZTt-G7jZ=9QPHtf3IvhUuHm2S>oYM9*lLSf3Ua}(!l*D5RV202tSu=E<*#FxZw z|F*Nk?fqAUz}sTIIuUGP=bCyG9{h5QX7H6}_+oo{?Tg8$cW-&i87ZflUj5Gd`Onxt z{~A8=U9$gDc`8}3r5-Z=UX{Bm|3^fXsO8jl`FH(GYbPhZw)?bao>p?E--ape%Y#dQ z@A+b7ROzw1R??_0_Lq&#kC#?2zCX`xUz+~@@z;Gu{dd#vek!euwYs{#@8naF`}4!6 z-w)xR{-$Nu{s@oauKwg*N#{RL`f=&X&DUc4lZq|9w}kL-bM`KMY~$~{wYKie^Po8X z+{=HgLLCk^ait5$9D8j%A`(p9vIex!S*L*6Uwz&Oo!M{CEPHx(?WzU~ORlHvEn)26jz0*rKJ2U_J zB*T12ckNQc?`GfaORulZSz5EE_Su|kPmcfGd}inT4YeOm`?ERBe_`pDd_MB`k6m^p za+#<5o%Y|1tFW7X>`m~ux23t(&ogUuuFie^F!%JO8;kY!$}|5d))CgTma9B>dz-^c z`AscHe!Y9W&E?E(O}oCWg0B@{%xs@f|14tn-Ej8v{cB&|UikUn!=;v*{kF%SiS21y zzv93Xx9L|-dVBPBz2e^RoR#&;T8H9*^(7e%*L&|PEpXA(Zx{F8dyL&aJB-Ua`*%mv z0=NA0d)z-&PW|Z9vE1R)!di~hx3^x&UEbGxX<5)|hiQT72W5>;?1@)r__?8Jn#POO zA}{A$KgKP;b06!HJi*JnHF*!pzFD$1{JHe>K!n|z$OQtPzb~AU+7d83Z9ygDJn`Oy z+`{WD7j8J3%8D*F?A;(#_9D!9S7F-%_9TZBZw=fPRymkBY;0Q8{>50}y2Si?{?B(s zOTP0xs_C?dbu>J=x3QuN5A+J`{j3hl1zPD^jtxv4Yx{Ov^T6ff67u*MdQ($ zi2Q~Nk+ZjK-g<$v?Q75N>4N5qlZvM*Z^}NsDHf>B#lX;e^thRwiE`C*e)P_Dz(;nC9}2sryu{4 zW^b?DuXo^=UDCW;9xv*SZI8*Ty0?9?$@l#kQKvqCo>F{&bNwXt1NOEL9sW#aRe!tk z3v96JZ{KCfhB`=jV|96E-^3T+>%T-Pl>GcTU$gFCdVYx5HhJ4gv*+*a{`pQe<4*Ff ze;fzaGyHL1a^m@X#viI?@uE5PbLai~P#=)9Pp{}>?~22db(j3+`Fph|Z*x0~YZuG9 z33f_r;+5XaXMQML@;aU4Z*h;lRn4F0@zY<=uMyo||6T0SH`x{M7;ZWrN^ZH@U~x_| zrnVbLeWOQy==U_QkOttoewVO%x zX=wpd%XF{qbcffA%=_o6)HD^GTWwLFVY@bRKIhegDSrx=JUjX|c)^A(lD!0&zY_J zcHg``dU9FNv9u^H*lXtgPoM$cY*gc151^1LXwa>B(3{SQ& z_Ro`AV06Jn*>pG4+Kcy+*{^c&gr#>`-F5l(Hd|icwZ7BKHS1G8RCaRNJ8wDdQ20ps z-EA|51csESMiL&&1vP_e->Lh#y`8BY^~oo*|A%vk;*15?%ASSfJ7lH^x9rzA^-z+x zV(sevroXj)#U&5OUuKkBWLT`G;rCx4tTWA5iQ-;JL4N)%g9(+OluV!wXRPPX^x zrRP=N^ZHVwXa1e*`OmV;!u|Ku4k^xCw+=s9I#r&b_uusN;#!||Yzf<(wUwS8ym+Zw z*5pCv-0d=QIu4&%*#gZDTw1fdHFxcwqMti^o-I&Vux;sC<~8=F+ooKO{`u|pk41LT z&wTFWAE`~ByFGi_F|!jhcuy6dShhc``c{+1)_Zz_uPfV)0~+7x1baU|_3`uFww%7x z2Z~%fQ!bu4zp3X`qV6(r6SEI&`m4OWqmIv2(w46OyJz;XwKm7hji${JcNcD4kh9@a zvae-8OQouvSFDl!)0t=b1O9r)*4zwP=XxdM*0nE3-?JOe+`Q(DTZ`3noxg`~HJ2>V z+<)$`l%xso<{v@j9ljd%5T-W%R#zP?@K+um!9#|s}_yfls3+GD+Ut$H;mPLH;G+sy0xB}LY5cidHC;Q!F( z$1TlATU^-xe%V(uqyPHS_9wNF@~uj_sw30RYJTluo4+5v++K8j?R9&WU%4l~Y}Y*A z?w4+3Yx4J!$&1fd%2(F*O-=mX_wlP*YSq1XcRv1?+mA0h_5JE&5&7kpWG3HUxoK}s zrDta#r(|iirS>}^+W0gzPrnR z$Jy0s=Dw8l-*)7%%{-{=4%&zXi+e7PW|clq>9KDie!EnVLxyXoY=o4ss0+aL3|pO*K{CCZYnOYpHw zf8G!_{ri_Q9_MHBSjgM2o1vR%KDYShl_9)Fcynzm!s$Matw z{yX#ikCD#x%RBAFbJ@2~KR^5UtPLM@Ht5*LWj(i=pJjf{eSPtn-OJBg|F_-xrrhU$ z-^ZY11yT92QpVGc1=&B7J0tt4caxZJ_Gb1vVaMtfnST1y=GC?~6**X}pD0~%%Q&v# zy6uJA^QO+(-nf&W??2B9hq84QdY8YbZepBprrv?|>*dd^0`sI--P!bh*#;AZ4~#2g z*TtJ(Iq~$cTJ!nv0}~iu9JadJ`85Bx{hGLi>lI4b=C%i{XZ*7J*LQAz!)1S&c@tud z9DZGS6BXR*du>$>e`aylPxqvLi}HZCMbhsXe0JV7ecO9k#8!INalx4v`OlZuel7mu zZ_iY)_HN#!%Ku^vuG?oVysY|c$H6Ust)AUw-FE%I$nL-83yT^rv?fKc#X3H=?)dF} zW>-^=-KDeF>$J50q@VdD`K*Aw@~haFqx+BS`JaB_s&~t2-Cf(?FWAkutNG0Ounzrw zTnDRn{rfxr!KciY7>3Ux0`uAK-Y?lyyYj}Vp0~cYA~x;gkq8q`dmA*NMcOmrlV78N zV3X1@$=$m>%eJ3Plud5Gn|t8yR)-~rpJlb?1+*M5pCDe(ex{yt;&+8jjAp`*>|Fch z&9qzm1kw*~nQz#u{AkbNUqweu{Dc-SdVQIZ!LV#bP)Fq#W`%|B`-OZKC)JA!>}p6< zJ}||q+igj8biy6(U3N)#Tyydp&#G?NB~Vg(z=qT5`oefdfBhi!y){yWKdWtz?R{|5 zU3i-r-vCclh$K6mj}$v_+b<7p;yt{ckP ze)PF{>bvr?T%pa9W~V2o+kM+J|KQKX4L^2HtDEqC@BJ(1)6PvR_y2j3^SyhzfqIU& z@uc5YA8yN@t|_aZo~GuVd#Kc>a^L+a)fT@k*cR38pZPU&-?@BV-JdJ&>vsH2H12uK zkYm3|zS{0tQDofm({++km+AOzpuZ0t^`t={1QSLk&5Sdy5ePK z>(Ar%d-4s}EM5P9y|vB%?&YACa^WAdhUX0LCMb0-=XjjBG-ChetMC7M9^Y@s(Fip^X^e-x} z&Me{g#qS1pduFV2Kk{?Bz)x!idB;P$Cv0fVfgySzcA-#o*W~eiKl55zm zSj79lc|{!u=XQ_X_pBZC827RiFowomVP3#kDCV%c#9!IK)x*GqeRo`@yB&i^!;{vS z=;sslmR(M>PGM2J)%&I3oa_Pyd)+9LB&L>WykDl7S6``pe7WkL(t$HF9#2d*ZmOKS z>WBJ?m5i>Pagx7So`il%s$S5;7`s68?jCk4&waeiVv;*Blm&9T##;NMehs7H7J+|EpJjP%*SEwMW=u0tU)|Gf`vwKh65;iS8EOJ`&tg*rU zrT3W`b~-W6t}s}-HC!gpVGqx>j^AtK9T;~@T-d3j8`Sb_neFbV^A?PgN)4mt7RBlsG}-D`nMIli%8ad~~B>l&w~*sTK%Mn5OCR(hY)TU#$EJimB)W8=)}d2=tP z1bAk?-lHbDxzB|uH2U^5jss3_XMfdQvw4k~27_34MDC{-*Dky>dVPau48xD&X@aO;gv7t$$73KbQs7CKuh%Psp9juQ21R-vvF!%U>V8Ik{4;WQn)e zX577bV5YB27(-)&``ONyD~xph8r)X1;&3c!I%n-rG^J?n{nGsHcV^%7 z>TCCxFh62ry>YC)N~C(m+z(GLu&2a1=FVzc`7EHX=mgW!>z3}j+?a&2uT4L6{oe(> zBep5`7B-zVUa|LK;ndR|1_|ZHW}+Wn&sjS0_R1x^KY1h;&&jvkap29>IZtwGcQ?Fs zd>nd>*SE~0WZlJEZ$Geiu9Q8!!@X4VSGG~Y-;z4%KCQR|vzGLyDm(l9-SZ^3-TO&d zukcqvU-t9j8)RMzFb7KuC|+cgIG3Z|U)}eddBT>Ez-cwR&ji={P5FGztdrpd+qrOs zxBdpVV^d5;cL&r=;5qf=S7*qE{ToXP9{B2*dEUrLd9cT2|8K4%+~*HYIVO8=W!PsX zmCt@nLYovj9VhL-srEcR^+Ni|u2%go?w=lCI|upWQ5i?eph?at># z4zIPJecJL$>vZqIzr6g*E-#sF!=ECs=4pJ&%;#CXdBz{p6n4A6ogrd$-#pr}a{5la zo0HY_PtAY+)@I!Xy^TEGayMcouZm1@PIhN5T4xpU)hXcFCf(pG>QLBJb(Yw=F~pkkPCZcrq%O^)Vx{H zw1~f?_t?Z^YLRxl0k_{pTiYuB~->=JnZg}xkom=?#Rg{lIo7yppc%YAabFg@~|xNH6Wwh87BlUMQ`Z~LyF ze4{?2?)as-mu3h5xfeeD{Nd|D_VH8lQ@}zf#p%6Sr^9Qq|SJ zPwmmqkBZaSfA`a!MSp7IBYwSmdBfH|b)SC!Qmcx{JMPO%?!CL6eQ6TU9P5V+EB>n4 z%*i^QZ1k+`^B(S79oPPqmaXJ*oL%Q>zQ;!HR^C7J<~eJ5D{tn!H2t&i=jEbHi{9N= zKfm;kT8P8PhA{JKakp&^GxoSMC9z-0xFT0`t|sE=HlCdONB@S&xJhh(u6!%wF5A_c z&!4Z&v6g7~X>e~sbawwQIbKx~KX3SN28P8BcvU-D~+Aolc|LJ|^r_>^ZA)u4dH?TQ-|K&F zw@B`n&#lkJp4aV6c-Z1l9kFA9?G}^i;g`5RPOUVUKgrdKeL};9GTZfcrMUhi?6bG?DfBr8wZv0)MS z_FX%Famv+y);F;EC-C@fPn=!onmWygPgx&*W4il}^UJsI2KVZu7v(EH`o7?9=qc%y zvZ7rY3`q@-n2hXN@6?9=dh7Ok`~1#(ZYSOuE_-X<@bUYC%jOGe`A=Bo9^0|A#n1Zf zwd#Yv_+mLE^jQB^u}WTYW4#;ixu;J2^K!xB@8vU|i#yC{==S_=dZCo@^Sa}E*hA94 ztmb&B?$SHsd54AeFFDvTWcFXRO>hV{V!heQRv2h#wU-&UtCjW zV=1X^UnhT|^uUs)%sGX>i~8@bmepIAwuhr@_3{H7W(it(Rv&#P@R{4Ji$lM@f``Dh%LmbI8GY+K~2kI(Nf zsYol!Dv6ajDpv8t>V~Pk_t&34w`*Qo8@!2qTFHaI)%VWvIo`38pZ`r_uFOjQPZ4ZQ zvw8fVCr&x=`Olr&Pmyd3_xDd={I1)7{O6yym*>yv+EfT>Mp<39_d{ND?(XyJuYBj9 zAMLwDp3Ye`-#+Ic<5L#r7vJkm>`aPw)%|yOtov2}cHw0$U6tdq4Yy;S@g3l15bXcA z;P_GV>m9$f_xw05__#ZoL3!D0|AzH@Tl})$*zKNrd;f2_U1yW`{`u=~U{l%Go&QE* zlj|KObNky#yMA&tq+j^Kb36Wi()W+SFTQB6P}EQ5e!<>Q$8N>BK%8SWKSPe<-JT2f zZC}hg9?N}R*M5RmVLgLS!<~h%;~9$>d-IupiA>;a(0;M!WcF;e%cdsFjL(KL3q{!O z>@j^N`~OgP!5b;FM@Lsi$V$h4tJrW|*Q02W%aWtN|5!Ai=QiNT6=W@#b$!B($e;tO zCN*w+wm|W!WkHwbtrZJaTn%EDdTOfOZF0+{r{~D>+k1l;qIT*TGE4IsqzYCz&tL4B zZt%0Do9UibLR?gIpKybPT4=HMn&&YFt%4JuOdcGa_i01N@-2ON z3>Ph!KZY_D83pX=w37_B%4yu`|JBr>^2~#(H-}U=Tw9})574zR;iuWkm zQx^MHnU`bB>dZyKQhiaGg6DUaUhS9pyT_twsdI0}s-5${om9zMQ5&e@o^O_(vBE0! zfRSX4tdbCi?AknYJMPzyYb=b4>L$sovIChMH+6j%kcG@?u9fA+84=@O#<#=7!Y?A6st?u|?~I_i6vdu>A( zFr0Jdo33bU!lSv8jcMj>HpXv(s`ZA<%)ugGV%k^~`Z#OyYOik3-uT+KLG$+3S3kmE z8(-5eIn}Ndu_a#D~b{?ov=K0iX%(ZC-{}YWOW7!q|j&VixWgPEyo*%&K?0rqN zyC%1x;H*)2#)74@*mSZZTmH-uNw92?>b;w@n&pYG`hq0(EDcxI>vxv#n)aQ|VE)Y$ z!6KTEi_e|@)4b}!f)%^3%?O`d`OiRLJLC7~e}?(@lDDZn(lvkE1y?mvl9YcSO8NwTft| zX_|HTj)?7ov&xV7>(l3F3UbVJo0jPCm3#6W$tSlb+}BJ`y%e+M#{4($^ZA}Ew7Yp@ zwT+m^60@hfX6S9u-TX-Tm81Q^t;wD)Hr{LJ-wldqzg?SoUgwRn21CvJ>(`>D7u^t& z-Bf2_&i3X(@0YtJ)89-vo7?TX{L>WeCau>+ANn6xpX@W0Uh-q>g?pS9^CNz0Z=3Tp zrMUK!?`*xBbxS$alkYFjkkM!73Xt9;_j%5SE!wX&G`*9Rjn?-{UQaSU{b#A-Z{KZw z%VomM+%KA0-;t3!cqDmh>a_cl*Q^)cyJX`^$^RF&xn7Q2#(&T6hgIS3ohhs=^YzWz z8B-*uHM9LlEVWu4`ad`B@N6;5`-kH6cE7x>5`JxF5rgZrY{}x{sA=-ylSXOO z^z_j3tGCay>)3BQ*n7~)IW_Nek%45y?VZO@H422iZ{4O{oL^nubNbuF+=q@Wi+iQI+SmWs zQ@K}9_vEjTTkX?6PpJC&d%beI`P$dBmZ$^QJH>B&z&zkX;~_hV=B9y^uZ z^Zz3(kN!o_+}I`oc!8-5XWU z&ATM+>a~4K%I=c+(|7frxhnF)GEezFJNuFquYB0-=3mtLZQ|Xdmdt#Kd)2?lxo@{x z@4kH6Xkz2N$mu+9&Tr5wVx9KoO#fBeMQ-u&mr~bR$Fs+Zf1jN@`{k6UPZ{rfn<*{Q zoqRjB(|kvX+aBe^^K)}v{*>A+Xem4Sd`_l%z(9&8DSUwB_}$%^NzdGyX-JYO2Y zoXx!8`HJU<)$W?_`S+?ScR*ItGNh0xO2)j zqkz>UzbD{iQFi(kp=Wp4nU%Jj*eGXl!LgW&Q&YiPov9`8_gD8FHLssb=*2re?YM7G zFTWt(zu>oAQ8{Y@`%8Pr?f<5(+yAXxVqVU|?cp6-9J8(8?)z(8GIzoLUCwi=UYu=s z+kM=q?nms4&F>fOp1bko`U`9SaRvXE3_IMDD0*?d+KO`*Vkg{<4dE4ZHcyKz;aJ%0 zaiU$PBqEpP_34In{4ah<#>$s`E)m=LL*(&if5X~u^BWbDw$3x~IgpUVSc)g@`bNWUqgc$w(K`NJH?6pNTt(@hP!i93ic$F zPApj>&$6&PB3|oQu9tA~feo(|E-4;kEDX!hYqqNl|M)}Jk>jNFx0~&T&8LJpYKuiT z>|`?GimPF|G~Z>mJLBzaIo=AF&&pi)zh9f_UNleeXL8M-6Yu9ge*Nd~l+#10F?AX2j1998_tofL~Ic?s`B5C=& z3d@?+pN>@iD7zMPy^QVY&)_}$u?!*lTZ4T+|8tCOe4JbV6~Hb@~3Y z^V{^fEnh+R+f3SB#GcSyweLs6ZvJ}*e>}=A`hHMqcK#os!;fXp$X5TIY+W+D_fG8& zw>y9JFT|H_`v2zt!o!cVdHUlYzB|0V@b_unM-{ym|3s|*hM&2;|LDJ)e3!qbb+bMnkTGGKw}|5gn~7+Yb#g+1=lp|Cvo7C$_DgM1s@@D`wJ52+w1@-G zkEyThzQ5*PgZ-Pz?rk}LBB#9O3F2vDO4^jMCz18bEQbl7^_VBiIvi-|op$d)W0sMD z!xps#CJmc@+VhAujTdugeC|G>+#2MteRgFc&`KK#n_m$Ksh`IFW;1U5>Q1u!!oJEJ)D z;Ca@Xw_lBeD%l>KYghbmkYky)&;kyDtsR&4EY@x`G5vDV<%pcX?Z~9Rlb^`6vB+KJ zTokGPjOUD5!(P|?>k*~OYZkElnQp-}$#MM)4j;e3Hqov5sg+%_Rt*eux39JHm_B>Q zFI%k@+w~a=p1yb*7RRFXz;3E?VaqX@(7R9Wx@>xv_46oSlyoZls;Ky$3rU}OBwp0Y zsyxpNel_*ax>;W}mY=Fs3M z>r7#42aG0^@|UM=Yn~@rEfEy@wPbSGvU5M{ z&iviGep{fjNbelrk&T!vR9c|9jjxN@p;CkgDp?O_#CXZ z37`4Vsd9hcs{n~lTWc76Z|*tVkb7Bn^1|48#lbgXj+}KredpS%vv#?gJFiSXz1Jq5 z%X|0QTFIZ*-@^l*WXqM$Hk8qrcz<@)rxqH*8Gft z>9JyvoQe6~{#k~m*Y!87Tl9487u|Q=-@>zNz3M9eXe>xvwRyWId*G(K>q7Pip515u zIPTi+N$bBF+FyU5vxaxsE&Hy!hL#z=(ZBwLy#M&;ro7kV(@&V=BI3-<#3fs_Za<5h z*1Ep=?0H`{r?R|7YjpT$Rf{YtyjilVhc~XSa!>OD89C-Fd-%=%1pel}x_gT8WebKa zf14_o{1lupFIm8Dxwg&c8yluP^Vt8;isQbyUGe<u+yr`1CLR@8LJm$;Iz( zf8J;ycYpT1udmhStKR(Uy!3vn)g17a=lljaqu43z%YG~UcyQl4Rd)BkT|essGxuja z+QfQ#k4~(;n)bf(HF0y^DVEl+sPTLH-O8wL^2?KkvX!#7WtWdHe!6GfzCC_7WBvun zTTXrd+V8!^-1%zrwZ4bk`*Z87z~AUyM_CGy?tBfs#i^IQrKx6_VZqk7)Mon+aEb7zrSBSIxcE|toWYy z&r?pfR6o^x-t6t2#=mrFs@d*$r!6%eGcr$l-`@ReQohM1(JQsWKiw=Nrk~Q@XYwm| zri4Lk65Hh9g-7eVpTxf}vQ@dSy-!Z>@U;fUBOEO^rbRNmaliJ_^-|;CW9y%#Cp}wy zx>V1~_fzNsm%@0Jl{Hd7cFPMLsHx@T(ayN8ZhvJ1Q`l@4tM|WTSZ$dvwtmtUJomOb z{PctBIbsJKzkGfc&=?c{_`2AUt4}m8{Zj5#Ug&oIlS7@|&k`YJDdq;rh2F;Dt}KVd z7S3K!==S3Ki$h$B9KZY;?VNV=9e!nbE!_U-vy;aq;%$!Yh)w))%Uk18-L8ip#R{X6 z@6?K3{%76sOX7k%!>(1AFG^|MZsY6-R7h;Ks1yC%UEf&wU+mG_>kB@LvdBAz*}HH5 zXW6#h{^;cTU&TjuI{&{aeI)WS;}Zs_jssf`?qU5lKknpR_WMV_UH>oi`K!FM+R+Vl zJ$0q+l`~3qRP@yatkF+P=#nUJ($qR6adExK>QaU!$9D*q>{TmkPAFBhTH~z6%{jw< z&EhuS7Mq)n_ka65)10fke-~#&e8)OHrC*5$>{jIHi9TM;SIux+Fe0_#SJvVkyZd(3 z&b0F0&vq>Lh{?GfyWbhUW8h@G%fP|pBz~dPp`0^Eud(|$W9_~7TlU^fj!><=Ya?_f z*x~xu8~N-eN&L{!MVGq>i@)y<#qSW@jkHuWtMhVTiDzB zw6cE5MWK&5g`Ioe)a)vGUwf%n-eKaR!@tefFJ-*B-Ft7m^2Fa?A{eUWKfPyseSA^h zeRU!CyTgiwOd45=f3n0{ix1Ar{nL-N1k`VBk3i}jQ=iPg47bb zuV{3@yy57IXY<~9J{C89ryQq{B{s3h)nYXjKPBEUS@0MFE=cKA%c49$9_oTB~4;vq= zK1wXFSU)9I{@#rZDgtvFp;c7Vrp|4%;EO9n}7&%~Am9N^=5adF|PP-TJbn)OWF%QE&^W?3?E9XQ0y zt+Jr=mE89OC6hnP%IeQ@_~xowY%QUoDDYqn;}Q<73H2-PFJ??{IK1`Y8F4Fz&w)SK zIHrqEP3_yuBarXla_du&gOyJEoiL$*hFvoPl#U*sqxK|Lp>V$4(z!d{s>WVlxy`uw zckl8=VzX}9J^K}Tr1-M)<%JdtU*v2yJ9*A71>Z9=2ig zi#d*~D$|``F!BbRZ77hOEO*9umb2)i8Ks$Xm8O@kK9hfMr;w=9m2<2n(_gO=jx~-B z`74t2JyA_pL3UzpLx9x`h6XX&_r-C^tD-ZxE;FwD)G2()QcdHR;wsJc%^s6}MinzK zy{!H?G3a;kZm9>W8me@7ZNnLYEbmX?FA88y@vpkz=zISR+X8=vr*rl<9XNb5tUD~y zNyo@?>qNh=)mKghGydP4yJ=Obtls0c&HLBcPg!v_Y2qYkwwmevDVV#4cO{>z+s(cYigKwvk7OH` zOirE5+^zdsZAsGg8`~!IL_e^7e<%7wu-SvR9&hi5th>j)LeETm!!HgMmJEUGc^OLU zuiI?BA!qH;bnwkq*-duSIj-LflmC&MlNXqp+^**#DIC>MmsS31w%nVuc4u?)w=mu= z+O2<=5oOf#+Tr*BMOQF-H-i2TtR{68%$ zrf7Uti@WE*s;0Fdc3t0D^E)%5`DzSz7VTZxr|P?=_TYK%i%c(V8z;IAn^46Rw zuM>VLOo`K+-&!TU`{nb-g?H5se135By2@o~sq|Aa(Gwef*i2WAT(LFu9Q%sgBio)X zm>n=b-{JI{$vWKG;;*@F;-b1>=eRGHm;KSf&QY-qM*4EyG{+zz#NHb=fJbBz8`cQoa3&sotw{{-{vUsg#L zFL}ECh0e*9H=M6zce|9Gx?NkhX3F%-^33x;H_GPwEDf0d^ZAL-kgd;OqL(hcK0o>8 zv`crs|Ec{s&+C2s-}^0pgbvkysXX<|_tHu$+11aT+g~fMKdXLOck1EGZNWxQ&8&_d zHjI-y^?u`~X`d=H>gK$=V)8L$c8%b#ZxgEKdzHsq|2F$-^!@AqJytJH+aJBId3(!| z_bd0rZNKy9R^f&v-zKC_KNUI2^u?^bUTwnXf7bLK7t{?fUC?BIQue@lQTC_5@6Tgj zy!7qgskJ?Kc3x4hjD3~d^-Abl zLeBi_8+UE+yOq89W!qk_>I>WZ7oXU3R!=_e*21N;meu^ruKca~nKO6xj};HsI4}6k z_HNs68QZ(_jQ5p$JSe!_+;F(4C;VUDSJRs_^dfE7#O=A0z2}DMyT>&Q4*guZMshy+ z5@kmwzS_(8oBy`%_Ag}%l;@epm#<#@^yGv3)z+^CUPNwl-IH?ow86opsr!_)X3S50 z;P~R${d-r>f7(#==OI&FPV!$#q)07j^F<*>yAw?l>dLcB6?Q3&eY0PxzkU5&po)m z)_U5eFCNmKanZ3F!Jqj*m(KnlF>(FGOWh1}m+g5|aJJdmt+gaDkk34i@Bg-vE$A}`pS?dnb*okD zndVxZPd_&>wegxTU%2>{li~jQ7njuoHn`fG&-6NX`Bfa>eKD=mr^wEZV?!1P(>p+B44%kO&5 z_;$eNbj9*pUk_vn3;(E_I%nHo2H9&(>-sqqPZrHv^k)02%NC2})s9%4w$c1{Te48B zgt_E~M%&b+h~+E3KIW5HCvsV2LmYR|JO-6C+Zl?nLMQI}9_j8Ey&R|DXs~7%OAUWh zrBF$2(1O#)W%cA7!^If{QvVek+cDp8ja7{8+l${BC&>NY&1m>7BEDo-<&qb_Ix^)q z?(Z)89kg+`aE8blv!?tS{Rc0r=f>Hz-Pt#%pxXBF(c>8oFLKkLO6r%_SkF72mh64) zc7B<4TI}By=dbTc?sVU*y88WT!{)5>pVpj^mb;Zx9w6@h-u-g&VwvlSo$mA1mw#98 zI;&G9bIxeTnvQKg^F$5nb>1)C_E>Q4&+nPF(FX7L`SQCzKAiE;+v-5RS?RWq|B_~X z`^lpB-KyvYpYDl0cOQKD=a@Br->Dz9yTa$^f3A_A_#^B0;g8REu8WIj*njY4?XLgL zZqGu+yi;wb$T2zD*S#!@J-=?)!8 zBcTJVld6C69Z=4QaW0+f%#yE=I8|1u+~Ee(W`{$&FGy%980%MgcT^VIscgv<6*Wzc zyRjj(TGie2W0eNa$t9b&EXa3czQGu@SxU_Ai4vdLjNs4SyUV8DIMXNX7vEsQHpNox zs{Zr4Yn~sOwJmxvgJEqIKa*xdYO&bX2b)+l&Ix8c-Zw3?lp}je@MP5xhN6}HYg>=X z8r;2R^H{HzXNAD>BinCu9u9lI@846k-rpiix9#@$uDj{Yp5;$NA1!nV4!`o^R4mi{ z@8KE^zbuyR>0ZMjvNX78NkQ~;kDIJlR_z&iO%>MfKC_lPgMo z-wHRm@86J8eBp$@lz_hWJ~Bf;W7r-zB;?xecWqPTNZwk ze;RA%AY6H;WUb4LX=j4xA6P4;5Gc%WTj{1aLqPWQD~sB@8J8@ViH%-;*yOvb;qPFX z)sc3EEKYJ=Z_0)L3a5PjBcKryzvOvZu|o9kHkNgIeW?QSmbXlr|EN6KwLXD8a)p-4 zyTI$$PdesQh2N6X{8chBcY#$(dQD%#{3o-&E|obT7^pOP^X3`1XaBBZt}wk&eJ%84 z`}7-%JgQxWw>d**XC@?e2KbhGPu${r&8)6sLjJqtYxkapoly9}$fYRzWMAUMW1mlc zJl20x>1B|$sO8MPMh+_1w|f6w?y@bdKJe>9nTF2Iy%!uN&f_k)^-g^s_lJ3mFV04Y zXC3)^$t^5CS1H4MSBu@rQ@6~X?emki+QPsXxL(;oP(eXD)=cC`ja9d8B8pj_W#k>DGaiz_&h(dp7T>y%KGhu(k1t@|G{h_q<+jxy5~D{qCI;?&`nX zdDm0#c+FDZmM<~!97}H0oId|c;q22>6^l&LQf^LRP6_yW{g)^6ylwwHKHHw19nf`l z%f`uno8pdn7j4}1r~J{=1J5<|*4rEpuDZt;&{cWs_M2zPv4*?P7dvlaZdIQbES0G% zZDzVXn?*!_*YUr%Z!S~w55FIzzx3Oq!*j$u8n})vw-rg7&Hv3|N0qCUK*!&gNB`|k z=d!qYTKCGAwC{fu`FZ8z#P67%+b?6___=bnycv5{f&C(i;nr!Cm&E6H=_eDth6BEb&* zUuKm|DX*5@!f*fhbNs6LQ!@`lA1pF?zO-h~ANgDIGtBSjh4m>lW|Uj7yo}n_@$1&+ zEk2*DY$B`b&p$~#qL4lR-1pRIyUG_5sV{9R?!0E0zLfiWM4#Bnd#?pf&;Gozzgji# z$L4J}7r#2ERsUzxszq*m?5pw&KW<{WKJ|3^^qyVWvbR*Vo;6nPbC{~le4+Bpru%o) z-B&p;F>#RIc&Fs(lXv#V{QGw`U;eRmY3XCecb2ZKdp;L?-49=J@#@`4w;ug?F@5rl zyh7`ZZ*=+d)VGPBnH@V@Lw{ZKRQZi}{HOgg{O+C?9rw?OVc-1j8G9d?bxb*Snk%Dp zO1vDB*Y_N+G#-xb?;XT1JB!Sab=T>shf zAM?udWj9~;uB`fgSm>wa@!H~o`E76CZrt@_+lTwLw$ndZnC8jOE|<-o&+M?_>C(5G z|F~ML^;cif{@5+N{Oo>K-h{}A2PNm-AMnNYIn1l=3zO3>-0-~R&7Pm_MRAJPHm$uU z6u@W9swE*A^uBt5nbRXpExteTGCl`hnLXd+bZ+sM&~=j=kM6c}wUfVgAS+gRUU@Ck zta9gHxA`Tf*j-6qTf;WXoS|gW>XS#9FP%2#7FG|PVw>vu?$Wg9DP=uJq?k2tId;h~ z9NFpI)3iYFg_25s-bKld;1kug$3*^G_q`}=&--iGb~=8+{$DJY@A9oaZtZisH|GD_ z?OS*6Ir8-Vf89e_Zrf*-?5NVad^)}3wsp@81rI@mLp*1M4LTiuZJF-Lq#($#=!I*; zPp->(yhmA`>RZ>{UT~k`FWZH;Y`b&WD}ON+^8^I0;9yc}T6UJ}_3`oxZ&^3|HY@pK zmQp8u>AvF^O{W^^8RndC_PtL1fARK#yHdM;u_(_=o)UR1aEmLOag8Tz( zo^$S0y5w%gB}-CQIed0b_nqmY z{~s7D@aM^SMfpGc%ypmY4a*<0JTT6XQT(g@Wp?@tdG5Hs;>FSGcKZAHPJH0$FrSgP zuleJz*fZtAkKRp>u>Gmpww~pU-B0lu>-MwD<}diA%`l&72kVE)e`@=mzy4i_4PiOMoa{OrTy{=s^V=p$@eR|LKA-da|p~1Yt zJ?e6fpHbO^1&5s3mYW7<70;W*c;2x3m~;Tc$$rNMwgskjUM11Y-e*JRr4_`m9Fk)- z(5q$25OYv#-uWqg-|FwL8kwe=v&nZXXxjChXN|f5=LE;+KX)>iDBPW-SI=)NV5a%E zX13$Abv`NT)6;G`2>lQiD~&b2|4iW2CN7bOcNl)NDZJ;HVfTKOjO3Sy6a@{25au<` zjIxX;t)o>!CfKmB&d_Im`uqvEtEIw$h91>VY5@lxiS4{}V2`W#t~1Wpx2+DiJ+<`O zx>HK-HU5F+cdd53oKv=S?(EXSOFx6ue?Q51P{^{Yw62T6>rQ`V?bQQMBL54YtI??q zw$$2k(tVSkXu$^t7iLHAsWTbNPk-jI;QJZSv~nA38_%3~il6m1d+!#Js-9SCdCoIU zHK;7_xX{$yt4n*Xu_s@xx7KmoRZ@TJU_-Um>m}@w{HDivoZP3nGtXNx*SYM4qovJ( zd4XE{of)%k8?$=wh6qdynH}^dcV9kxsL6xG)tejVPnNxWtZcR)s|kaLnw{rfhO}ON zY2l)ulgbk#OMX_)zpeazro}{Eqe)@^T9fvM=Xkkq+G6+4Om2qGBaZH-*oH4l?|Z#; z5|t3YY%COTs6E|%`>ecKGTtm7?xcMdQ;o{s&hY2jpPa`T+xM9~{qreLX4}q5S7mlu@;0rIplI&?e5I}VGhPpKqgR%@?%MiwpeStntr|UTTiLc~X`}5G7?XUII z)=M!IOs&*iEqG4Q@^WqB%>et)D%?L!+80Hn)>zu?Un1Ku%UNAgVwX!_T-Cga4R`xp z^E2ZP1irZX=k}57j}D4%JKvCU+~GRYhPVZ4n~bmP_6N@TuFSFGZs748}^C*n&p1-+A;Ra+1pfi+J&iihD?)ApZ#4jk9nHr z>+O>rnb(znHc#2dl2PWk`EI1jHA#JczqDfJ)w3tW%&1Q{{Bfd-ddsdqy*oFT|LNw6g4WA(pM79_^xPpnvo6$Zg52ec z%Bi_KGkK=?04U+&$5%BNetO+UCO z?)bDXEtfg6jyzpzG-H4AkzEBkb02-Z)fmIdD{+5%>iV9!yN~brvB&@F@lRVyV(d=O zozC(nTkLacZr!SN|03DcfB&)Fnc6T(Z;@L=T$Aeto}arJXRw-jZFze9kB`UkZRd}? z7c!Xfbyn%sOA*%kSGzwa|9xmx?XY`&|J2-sy8UM^?oLmanfCDW_TOS>@96WphFJc( zo^S2rc;QuKL200h;A-EI2Q2r@3~j`3rg3CKi?f9 zHvM3(jqZ}l6BWK5ggRAiK;jP77v98NB^}X^nT2#aafRhO&;}{zB~; zWlVG3Gwvw+G4)z|?01j2pY;2Y;k>_J;!m9B-`{)pv-*UeQHNelzm@+l|G@6^0?+wY ztFJe>ThmbaU8Jz4r83I#xv2}wT!t1M-tS!T zS~Nv@k^Z^`yLlHl^e`r~EED2IhS3N<*ZNl`OWz_?&G86qu+%oNA&ZO7uPd|gE+d@ ziI?nM5U=>wm*v7&rk5%ocb{(fQ8^`1_tw{@ynrvxEX+6~w@6OGzcWKFUvDauT zWe+|2uI$*`)w=WQ_ne-1?eZJ9P=V(m?`)R8FMM`0X>sb3mb$VNizV_4J}zFl{okKE zm)_KNPD>NB5q=)Y()TBB)ogiQ-M!^gZko=U`QzfF8!ujdj$JkRf9|Ig_U-d6b$Z_& zlm5SLyGn71pPs&cv|Q_+Gg0$|9cHCZ{8P4fiMjXU(%bXA1Gj27+$m|ROx^ctvyAB< zcD?uC6~DWDFqULJfZ+q<((n&;9r`A<}kv_Y`-n&GjM$KiA3~UfhwVyyN%OSKsSZ zeq8-O<5caJ_ONvy6Z1}&ycPeic;ef2+hgI3m%m!M8@!vyaG&7=scRIHuy9Akvedlv9jj^KgZs* z12?1&hzeZ4P}y7MvgRc3gI3|WOIcHxCC^N_7{@hbL;Ixv+I>Aw&aSv;LpKdK;6mPvIbo3PeR-e8paSYN;Tus|v9NU@0d`8wK z!#L@9$LZvIX%F5+q@E7Es?1ozdqGt)AZCt>wa5Zv6K0;q=B?4%zZrTSH!!g&8QDG0 zWvdZdaP`Tmt|FN|Y*Sv`JGPv0)$^Lz<8!8ORllm*H#MF4v&4*54BuAD8D6P&<(v3P zwrJj#Y}F;k;z3K&75{F0cmCJhN`nOT?bhxaQ-4OvYffy|&DzeGxjod4wPD`DLa$ne zpxY-J^bDKNEMZPz?laTzt#)G)j5b$!uGrWeEcf$IXJxyZmy)|uyX0M-J%$f-+;?qh zW_y!==lQ#Yx3iw+U)=s!ZqjWZZ|k7nrP-HGzhV)ayUw?r?soA6gKOCebP?_DMC&CRzOzOZ)4ubQXdIBSh>mv&S6uZ{B$ zI$YmVee7*kXYf_V{9~-1X>2jNyAlFtK7Ugnclz@yN57{E3@Njx@;4_qWYxL38l4cA z49W3Hkv!p}Q+A~Pb$j9bUuJDjVsxu!HojW8UjB2k$N^2kX5qDZp#~ZY!q`^L%FkqK zJkLAfJ>O@8^nK4RC@q~o`L5Qt=07n@_b=HtIYz&CtE^VX&9cm$yQcoj-<6ik)8!X_ zVCUwaWeQC%w|+J4t~$RdV1Z0a0(((}BG02oh8OvA1y8>6T4TJN)7DR&e;u|SW-ah$zw+Tu!!cuC z?FIWiHuVXId^>4&t5JeYr|$&&YvK82Gq~mB4)2-z?4(WB0Y#0OsmZlB-UOXwINByI zP^S|4zEwf5~p8SOu}w2MvIcdh5U1FNfa ze2Dl{qnmP@_jFXq=>IxV7dnaCeShAcmCO2V&R_kt=SH8e_wBUXOa*)AUwe{om9QyT z=EH>#FYR9a$Ziez?Rinrdzl4;boWQbDb6#eJb!Fb|M;iz&)(U;m#+0}H+iyN=kpo= ziSuu!t>b^`v2yp_M~3%}HX6N+y7ru7$;a7d^BLQdLo{dQ&gBli;v%kIn|n-mQ!np^ zxwmg$Kl`jZvOQ9dM{B!prR)DciN@E;mNci{c@wkO=E4k?K&3;$^S^I%*!1@E-)WA& zY8ocmUO#dB`OELSD(-G~X893ygfZimyv%_uB{MvKW>;qUM!$M`=~JTL**%_j;vYR$ z@Dg}EYiT4yzx)lWs)x-Dee!b3>8r&~N}s67UAcdcnC{cn?(6C= zewnTD7(8tCPw?{e#I(N?-tVu!_;ij|^K#3Y`b4fjJD+}7cHX|E;@hA7D}DS=K8mRN z|F=8u{L*g~lTD6asP8#CkLB}wrk8w>=wE-jKmUF6_sm~1kKfuw{=EM5 z_pd8L{@#BK;$x20*4Apq$M4&_>UMj)aHCkp%hQJc{$8ty|Ft-tezsQKp1fts^Gn8To*UjTKe1gq-u~!u%~~Uk#_Ph7JI?+5Sk&lWyhi8$+}EdT z+{({SPkp&LdQrplx0?&j(nZo!sg%Rg3h#V;1MeLn55*Sv3xlX$lO{61m6`SlBivERy0 z-V#{h9ku&UZ8O*PjZY7XK1~*odwlhdP}nwm3FnUgssSdu19qHwV7I1!pZ&vB-xKl|tHwTln)&$P>+T&}_PuA_b?oVebuydTm**VbSb5<2%;h_u zE}A6&omKkqje9?;WKMrBomMpM)q&KFYo;A@iR*gw^hEHJ>F=f=tG9nPf7bkcCvE0` zu6U ztU3D~AEy4b`F!u`pTiA8JNHUAB+fnfT>QWfA6pb--Jx=H}@xfFh5`L@#Xm~`}a6*pI7qr zNAS#Y`@?(cyH;p>)JV_e;ZQoj)5CN|FhIj;hQi(S318!#f6Zt3oqgiY;`&dTZRK{C z|Lu)ew5d|P{JDHX?Kh6e4v#LMZ#Z6VWiziqagnshW0S|<)|=hfe~Y1l^<^FBMfV9G zI1l|=zv0&{|B!o?eH(&$Z~HxBT_ABW{@um$QW_^%6oo}%-9 zgV(Pew^)3F54`nmJvQb02Cs=1ciVkEZ^3?N->eU>Zt{dqln562QaIh}v5jWZ9Kq$D z&obTiOBMdLd3AKL+yRyA=hOH6s5rK{U+v9yE>2CY6RXds*;IL_)+*lms${O8wx^2i zPVDAQV!Dgp*DXuGenaZlO~&&v4w=ek{Z=tHuP%I*UAFhp&-ImIs_zaT+00h|_ln1( z*U8`edYx>3r`>zF?z8lZpr7A*ayd3h{s^*~{WYS_hAG;vGWhDjGbj41blm5^lhA#6 z!1=|MoYOCEtXX}pT4Ke_^tJzf1=T)wy!UMXT>HpzS4J@x-8k1nrY*1AHxekNDVH}Ooy$Ls(5|9QjnfbGe)De?dBTc5eD-Vnne zw6LnZ>RmC@1ZMrh-`g2BI7wXN&_4Lf_UN;0u9td>cSTEfHJ$Tk=xL~7E&L;v_dl=s zrCQRiorg<)3l&N+teN=C`F>N2G(&j6U%rO-3XPY`Jp|AHXE?CCp@x@}$DZj21LuZ+ zET&1nL{(xOxPHV;h}kE7Bl3Zis_v5KtrJ+TTww9jIbp2-x`yk`MpmgP=Fp`_Z6}KH zELict$kR_cnmc8~P6-B8f6>`19-cTSRFoxhfZ28bmX2KlOd`c8*Y|vjIIx>-m1%)@ zyU@=I*YtRANQlX}tBHj=9FJMcbLW~RqxR!@r@p?Ld)cv37JNNNX|u7#nIq~= zW~cI8F7om(=o04op!)1CE0+pGv`c4I*BgP!6C7(L8FX!h1STyy|9ZyaWzk;(*b|Hz zYVRy|b2AO_ElZjDMe(Vzzrz`a*Lln(;w!m6+nrQ=7c6U?y_(}l2h)qx=c^j8HLiNi zw7}RPC}%yh#>It?XS_;ZaNRHKcG3L?HOVq<2F6=!8DAekig`b^fXc4?= z?F>)xo^or3LvuC?Y*LM^pP+1>?!MW`;mogPj2Cp1_Hcbn{j``_~8x)?WE?g70S( zr^#cF7YmQ}Ju_6iv5;kFt>MC^SDW`dlid_-GJWYwhE|Q0=S2)sPuxvvXtVsfmMubj z^P7|N%opS?a4Fn=SVkaV?ysNoe0ILgO!t|{Y4m^E{*z~w_O^2^nPPWy+p`VKn;-hg zGfXkGeZBt4ir4JPvb~2lNibS$&TMC7FnzSc%Z};ztGiQ`3wz8jTFQnoo(#N~`8|R0 zFl*4!JK__cMwF<1KE{6ihi1m&_>z8yFH&tLb|vB_@1CC3lDRlj+2giFjCT0x42Nzr z_D#Pow+UNYJYLa%>6y)x=Y|SfZR1lUZ@p)?ejISRPx$WTGi}W7o9k}6%`mc?730IN zJgd1Vr|;s4j`Gz%&4PF7h4!_UFZ`4AwApdW)0qyN0<^U1xAQu5yX-za>%_SeZ=L>Z zo_F(x@bgpAE46z&uca?pe_rox>w`_cb_bvB&AA-uKjlf{9x3@Zx6^krl_m$g-GBAp zg*iw00<|hjzW!w6Ih&hQYyPO0X!>bt3x)*Dhy_D#{a>=&0-%*`6UZ?*Y^)Z@D| zeAT|K`FeBatdn1P|H<4?nb!NB`H1!FiY@z07ta-+5qI-P#$%oR=?uNPRt)nO+r8)C znDJ}DUUsScIr^zfS8R%?lF#PjF8-8YU2X8aU$_43Z^alZ`}zlV>K0qJr&&MRt(w8E_Dz+DPe>Sc5E%SX@SDDW8YB%%L&^Og5r+nJBYS+&D2dy{N``v!d z-;v`NJl%Y0>z{x3gkGPAmVe$$^|LA-Jl~)5dGCj+vPph->(4Iyq4IZGoBpi2+IMBU z{mr~fgZAw7*?GtOY3<5COZQA$_i^>E{qH}=u6q3Zt^Rl0=f5v%%K1Gl_u2PObVp|L z|Le~;sub6m2AAJ`zIDoR!+Q;4KJMOp{IBA@H+?Ss`pfsUkoxJ!U3Fg9j^FwyvHtik zv%Nx7-|Ni(eahn6^uMNac9iM7Z(y0T)#Flih=Ts-{UWzNbSrF+sZm%S{Oy>o{vGRm za~{q9+V$HZ?h<>!jj(4Yx1ad7=Dl5f+^q*s)uNLO=Ng!A-dVEg^rpyFkNzE9kgCt` z|L2wL#9LO2wteU0ys&oX8Qw|P@4q@$cKB6ddgf&AwT$zB?=qH`wM|a<^Pe(5KuV4I z)ce4L|6`xsyc5^Ob#db-CEM3u`(8gUJ-@)oc3SD-SK=DIw%eCi7i?<$o&8lHq+!!b z2mhB5>(l=d1VK3_JJ!MyXu61^@5UwW1a|vpb${vofpSo&Rq`$aB@Y8^?ZH8QCAd z^=(FOT>q|BBNa;)-r#K(A(dzud>(f^sxgEo?cd+SyuZ?ZkNp8nz{C~zeMI|S^b`3 zv?I{B?$Wf>Om2p~$~(PoKXbJ|xxHuu+gVP3%{P}^E<9It=y76?)OIo1y0}boirhq* zSB!zImrWAntk3)weN@-*j=AhQ^EUnYNq6?QcbHz_d{)VOCO`T2r+CK8$&ss8^RLDr6k^@lg5Z-(Rb5{C&l*aQV96E^CDvhL+_4f21z`4|)3N z@so!6tbZ5p&6=_Bu3WMGX@Tl9#SZtioy1L9PT2TO@Kd<7I6gMZe8q};PKU%+_a>EI zOpIXsEF!S{%8Z4t4c<*E>L_{9&baXXhJ8FcDz+Tj(S73{lM>g97K`%|-yM3o&Z=(M z_vRu$BiF$!?}*qZQG$ia=jhJNA8v$dFNN~*-1fY<1G!R=?>rJ|LP>vn|r@t%8S>GtCQNWoAuVk`yzc) zuWGM)^wGL2e7CCoBs z?!5VT$z%7IZ4W;)+nzQyJ6E4+^7V-ELq5@lyv+)7Yyaphi-o3S@YcPu!=jw6`O49Z#gkL!WpkGKRNwn>EZKC!IAGDe{NoO`&U(Ec;x>58oRZg zbFuYT?6;i5_~6%8hr*@V-kVnm`}u^wm)BWl%V!2}Z~5#uv_iU((A~juRb}KJ3$ed4 z4xK&g?*E_oqvSioopc84Fa0k6f7IKbuK)L*)j{3<-@>V{#o1>Wq=j5d_V~`XWPW1> z?*p;Kzf3}9JAOQqT~}{(Xq)(vjqVZbJpN@jYW7~g8m)A>_tCrX{VgZL74Pnz@I$U- z-;sYu^$qX-k>L=u(kwB%a-QP>)1|+5A^TY`+B1F7TOey<$Na&RA^buG=fw5OjOX$v zGJK3bTUxK(8VQhtNMhZ&5ouo_hY;=v-zlu*^eotmoJif=f;j`g| z%9Z`HtK}{*ST1yU6VR|JW*MWI&Lp!fb@>OLPkiF~Nn3&U)0Ed8LT9HeJ|Su#V!i)a zmA`w)0jsH!3>j?v%$?gSr!$=RY-Xz-naXpcljn}!a_w@D0~Osp*$?>TCx&QsoH%e& zaXP1C=Y(9r`P>ic9haX`Jh9xn{g3UJ2ELU#b1&V0x5(|ex1IA^?T*m1UKiCxeEkDa_-cFU@R7_M#nu$=WkT3|=9VyQx7^HIDeV^U`a^lp(s+*Ns-n%Dz*=Ch3jhA2$aQOJSb>B0| zxtF6vy%Pd-FJAsB9AM6O=0Z_HbBd+*6~3Pv4m9^Iht#q_10_`(&hS?tW`*uW@#v#GCwG zsR^Gg6lFao^KB2{6xhHwyJqvut5gBL95x6{foR{x*+m*PNSwn!R<# zIws3{ulo%NzH;1^#k;F-PCuOGu`V^{6T`DRW|MwLND8m5-;^8w=;+CXJ*^I#qIU&^ zU$GJ|sBlRRSGczB)}6MGrA#_!%e)278%x2)OsiWj6zFpA&y-s$J$ zTFV#FCjL5QeSC&Vk>(9Ko5Z_qqUZjQ?RXpQU@36m-qxOSyE)BYL&bh|>@^mhTevGF zxl;02vflLHT_+E{a{D~-(!a(hva8k{D6U!Xuw2u@IXODR?}(XC#d5RBTXS{nZ-3J9 zl?$HwCNNpsce&M)a@|Ll%~H%#ckP<`Nvz_@zVpey0}XbbKmNS(jph7lU!UwV^1rBQ zx1Z;d@_p#ttN#^V+<1NL`BMEXj~_=*iA>vU#zyJ?60OPy3eV?VnDp-@81{ zwts4Eyk-6&_UXTuZThywBF}C=%$U=S1*10f_pu~dfz{%idWUzT+9xi zd_HLR-RtasKd-+$t?Tf%6iF$LyD?mI*tg%F{mp&7{k6O~<Bbcg7ySA2c~8uWjOj`~a$)MssoG1oh8KIkKfZoxc)&H$ zVsT@O9qz0pw`~s=x#TWQ-~RKxlxbGA18dUmrB5H}naL*CnhRK6?=8I;_gVdyg8k-2 zTc#a*WjW!@w+zM?@8+a^vDA;d_H@g)*>7i`OfK0|)Z@*3)xGN2ZPsnEf@}Y*=~aGZ z^u_1C?=!XFXZ@#5B5$|9KL4Qd{{KFm$)+}&*3FpHb6oKF?}@R`n|UJ4D`Y$8Wn#TW|^yi&)d*4~(ce7XP-E^~m_v5#B<_Xsg5$m=;)%l*h z>rthR>2q7NKE2xKHPeq>NiNB<+dakHe*2VrHEU%SB(3y$8F1jt(+@=p)pWt!cR?|7Eg%OC?zQ{jAfp`5x+N7nPAWdB!Ey zpe-IX?R%zWe@#xXboaa7u<7b)h6iEGpBXd!)pE5r|L`+m;(5-7IHmcQqv|&A*IvLl ze|q{ZE%nL0_6g-D+sm)4FMo88G2rf9>j-r*2CWGTUWQag1Wc0@N@MYvARyp!p>@VL z{ftdaf!8Ir$4@W3<6!vYZzk7UrV#csA9ER)U98WT-#=gzm$<8%{qsMr%QqaKbIRrk z{E}2+?2vW3qukPOSYq#J{)c5%^ow_bB|#qFnFOuRTyA;G-KeCrE>G~@KNEQ^`7QC^ zUtAO1A)WH?OZ1HTzxfN-|9gHxhy zu%tO*t5|G2>zZq^Ogs3s7Ix1#X8ULl`!kc>*CY)6HGl0n(NH<-;NoZB(%kHqdq6eiqq;cjhW6@?O9y#^7o~T@*I~ZGp$}oeXe`sd-TNqTEmZDm)?A` z@h02(MSpw>R-W@t{q@DW=)>X<8zo&%-~W5@fMmtn(@Ak_Wa@&M*4W;2x8d4nckH&& z{bQS_<~|9xcy;Et#fIIi_qH<>$MZkS{#nkgw154Z$4_oQ;qigDsmz^_R%QLSSfP_N zhiQIv)Zgd-+ZjOD6dq+?l76Aemht0cd-heo`|j>`*nJ@A^Zq}zN8jFedvS-cg4@cT z=>zAl?*5PG_U~n8@L3;r<6qRoJ4c+E7QJ)#xc=~w^k%>76W*?mPu%xg)P(JYjl<() zhy7f0cK9#Zu$-Ze z@xj|aI~|<5nXK4fZ1I|Sjn!a_o0aI5oxJ?lSkj+F9Q|1y5%=3DQ_n2WD}W*UnFB`# z!>OlB5}Ef!d~s%Oai5a$eCvTZ>lIw3ug_{*ETGI_q_Sb-mj(fWnTyXxUP%sSXLG;d zc~IXbe%&9$v+%1)1=gzJF;7O%NY0`t`B@I4X z-%CjNK7Vt-@PJN$BM_&_?xPc@hHjLrbx2Q|#v#u>|9;?fl61<6j5 z%Xl%_XX*KH7KzpSI^9+cfC-m(-)LG4!sizZnt0*KBalmp|}}!QE3;qDAtTBz0e$ z`z1R!=DrJusqD)Md_Os+wmY$zlpNk5J4?XVzNk8L+xOP`rQ3o-7_?qCx`voLNOqhz zdR+KVcW%Rpnqzmi{cL1<((SRJc-q{T>1Ws#Qsic)vspx0n=U9>kk{gHb@8EsH9yUy zts~Zd{*nCi*tuhY80m=FK;GZ2l@DqM`Zg1!hK9mUM^Gm)s80opmApz-?p<8S@|V;dhW&a)9xNEHfamKoqlE@x1i}!<(UOLk2b!S$&KG= z<7HobRkwDzdf>5dcJfD-aCP)f+$qQVVtUHqU%|(M!rw2u8(DFu-|@cl-nIWCPdWK~ zU-5TVO=Mod^%on2t#uY|cu;?PPtUi_Qw$|E{{3Ui$UQpooycs(FEMK}&n%l}DSp;^ zp+>uj=eC!5bsKNAPwTiJExwyw{)w~nFFroEgx@zrCRA?zw*2E_nWn`nYW1$zTzR^9 zT3Yo^Q@?q=HGBDs1moqsH_f)$8q8--`nz@irh@v$_Gdd`izDhz zt9-w+KmUYP+5det`+0u(PN~e&dbED;%AEeEXVJNfAIllS-k+S4aDH_Q3=+uPlrV`iP6{4#iu{7M<^GIaz;&9s(*fZvCs22UytX9f3MMbntWR3nx0+%((q5g>t!45 zj&FMwy*GaO*^HBmHBWck{&?flxsAKzUi+`Vy}lwd(=+bd?9!9dW^B5>=tSy)g*ksW zhou*(oBZu$d@=D-bV+`9*gh3yzx^umuF{RSPrZI&{kre1(}NecPgLeiR9ZIM`fS5( zHmP*+4cnQ8ZIA!qI(g;Q>F+s~XQ#EkwR5*)KY7SqVSC0~8@XR)X4|E{e`L(P>)Yo2 zHoN9i(5k1eOJ`PoC}O(mAL#g5t=abJ^Us@1)VSY8KkIt7H0*Yz(2Baa{nL&aWHWbP z$g7O5{So85S=ZaFJM|cQ!UtRC<<&op4~R+V?;E>ooEDL)NRyUrcdm+@yYB-|xedCcc+$ty%k`Vqf}!-00iW zW9Hf3e#$3dVQ&DOf6_oHyr+TcmJic zN7IWwudZ*c{4RRt_jZHxwn=Xkt9sYfx2~JNa7R;1gQK0RL|xa0U)c=vmGbVlzGzU; zzYzOJsA=vS`#Pq|tE+A5R&KhPR8iHOd7C?KZ}Ym>3YU`SUBB>BFyub#p=yUW3odi7 z_$Q?`f8lF;hG!i=Z?Ycy%fKmq$+mXs-SBM(j`pnM-%+6=Wp&U*&093RmF1{`L;KZ^ z%3ZGZ9J>@BJzC{{U3)=xY_8SI@TRL#hWE~NT;}QR`uez|E}$jP$zDUDYoGjr)pvXk zw^Vu^_@B5~VtdntQV*Mw8SW3>MQyylEX=E&?M%mJg%U;~mcI;Z^jT-0ZaA%eU_&6! z>LdSm1Usm`+1`~Yzwy3Xhlbo<*$?l`nU2L?`dP?sQ@j57UEd?`rVH+#ono`iyy4h{ z@0)IRUe)TMoI5tDmqZt*+v)W+=@k5@kZzE9)6?uETqPab~WclOYZean@1 z%kK~WSuww41JnKKm(=I2>EoZM=^mMW;ivQb`ru!e&C8a}gRJU2_r=;5r6u)3@!jkx zAAZ|2y<+O#8S*ynWU}Clf8GBtJp2^R`2O$i759IB53Ku_KJA&&^U~&2@m_`(g}=9F ztC)Y_esQPyZrSCtY`6L4lkdG_*yB(n8n5{7`i|dE*;a37Z(PTiv*G`n*$nd(*2F2k zW1V5fV0Ph0E`zkngCC-o4&CHSb@ZRdxU2OX*8`?Y{~4XWOI%{@_#-vJ`bcbl<$t|Z zr^}qWCe1te{D$Mg16P#KNnV`heAH9GW5d+1yAE7g7kOp#R#&SPyDns}l1xx&UyvnO zB%-q3ia)buhZZNP{ z$X>2EQR84_&vuF}YfHrT*M|=@9F=@_z@7KOoma}Caf;2ics~R!I+$*!qLM!6V`877 z;?9lEy^L?zX0QdtnlRt|eSC$2&+VTR_kL>J^H8oJtKl`%gNd(V9+@6jo3+C7=%;*D zQRBG{i<*u)KQj&bdByBf>W8vvvp=Ril?;&Y5_)JQkx}ax_+a^K9!>NC$)Upm|HYJ%Uy4%K&)d{k5f zD%e_>Bzx%qO$rt`;dZxWh0_mY@^sZhgxKRbTgSu1AqJo>!*jEUNTEXK^G&dW?A zSbj5{%>MOq_m#4R=?U#o1tKMJ-02@GKF?8;&B&=-*I%~Pl2zk?-sVi9Rotu%j7wC{ z1q5!-T-L1gB;&PY!TjG-SgZ^7JY4Wix%FU=x|ptgu@m@~+S#Ba7+BBiNfz91;_ZO_ZVKC*dC^|WYSq1 zhNmAb+-t-?XuQl|47hHUB{_exU&g!srT>3xhHw16@Ks-+q;$?4$BWvcn?5EL&Etx{ zB(uX|pA*}UPczQh*=$nenyt6dUT7(A(3W2T^MvQF)|z;Km7O!YUqoHmipS{LgAL)0BIBdyC^0L^CV& z*mtGa>TjEV>JhWljINm2yWWw$3%S4QNp4*fu+%#&ev@b2x|ovlMglT!uG{Qb)zz=; z5e=Px`mv3_c_jDJ^N%^tKR=~?#>dKK_WrKkCzZ=@@?N%{z5e2#{a21|jjwDgS#m>8 zyf0*u2o9k=kmCJ{rKrC>w@opFKhUz_0sp+CA;NQu02V+c&PiV%I=f7 zcU+{>XD+%mG40Pbv+H4e3{MXi*Cb!%lV9+?-$~7T9(Vf9B72?8zrW{c@86;?+`IPC zEtiLH-GC4_w}vh&vn1-KJgvA`l{~uOGW2X z(|`VXuK9Uk+P~6EoN{(o_URek&!6>w^n7Irz38SpECX zbotMfIad3QXy;dpZz;9?mi0xz?nmh9)9*`j4;ucn@%O%5w(p!bgZs38vD*%JYU_@j zvrK#NUg*8I)m9aMS83K;57dtu$p6B1@6Kk`*MbLRr=CwQS%1gaZSL;~$!%Lsemno=ScQnpoTK+@(&q+E zpSIpT#9+rq!GOjabM)soOW!Sh*IpygsJCQuGsB*96IQQb+_AY@8^ho4>*Y6}Jbvr`=W|=O$h^;ec&Xy~>$AJwRa%yw{bY5_ zT9=zCV9X}_MiMHVft8%bE4zr33sju&d}VjLDuOl|LZUHvp=z%J-FiR zt!=+^v*#~5FvoZ{LrK@G__KP@gG$RfMo_x8q$)&|>O??jjEZY|l)P{pCN%RsS2eo^#a zp-q*Y9eYk@)VKe8CERjaT*CgJ*_PXiHa}f{88E)KK5C%2CZy1i$;zRe>CLqcNgMu~ zPEVOY+q{^0>|M*hGN$Z3x~IOS;`f{()% z3Uri6T$}6_aKzGM&gC=ZTf>gbP@3)^%rx(Px!~>FSNsl3y=dnXV!1q{;#JkbUrGyJ zC)>p+E}g4>)F#tTK{4|1)z*Yk#fbbWj~5qtyS^?}Dsk8!lyl+X$=zLVOYdITx?B0_ z!t)#WCh+9hZ*gh5>N?B!&HGCn<-aebrI<~sK77!4g30TfaoP)t86ULkCCsZ3**Gy= zGk*5Q8$M@WC@$tZKj+Vi(?$Hkv?d?;Zscy#;! zY}>kj>0)ITi#ZGz%)5V+lKN943D=n%wxQz z{O&&U2F52`Lf1G}^W8lf&9QpBz%RbUuY8Z}5_bLNQkdTHn58$K^~-98eVh-Nl&U?< zm3ah(+!FYYNGw=2VZx#<&ebc{3H*Ap^n%RHZL!uS`Fz!NtBeoM7doTPVV-Rrd4{!P z!vExkNjG*aQN4cTd`&l(j0%H0*_qier4OW?*j81U#=$oB4d7tzS+j9QqOkw>9+1^ z^BF}Pjm~DyR=pJASnxUa*E(UX3ub8-@|a#M3tsNb$fur4Jb>!P08+UX4w-Zv+6jEDs+GQH2 zG4d~6JK^azcg9^37xolNtqX8)Gdz9a-PET=w~i{-RvlAX{dv~Bz5{cvA8BTcdAsCo z2iK|d547w~H2hvEuzzQt(DA7Ik1U@0Pu=as-nm<*(Pq0d<1cBAyAAiaCdx^*DAjmp z8J~PR@iJFgu1V5k!!*g)c8n3KA$PSHvRs)@1+o^IJY@P}zWnW+xtE+4EVgibmV52; zgj)v=Y-Ke4FSPRFZ|1I`OP4C<&pr6FPR4WJ!lp2Ohn->bwo2dce>eGU@Eot|)my7y zEWFm=Eqt%RPw}Sm`rB#A+%G1->6B$yXnf_B(D60af=sPhXLg;Qcs20$mJUSmvWkGpP7mHKF!>g9mFT>@pm@k z`J*Yu9g`c+R>}zQGo1OF>-gbByCa7eOX8g7)vr8NAWV*fF8*}kr# z2i;qpPnfBn4shnzT<~ho?A06cekFcgurKP9`R#*tSCninv8J;Z#piulJdyiWmFdr* zo!tw5gw=I3_?`=&_$zeg^&P#&OV{a$?@~KbT>OIfrTOxQmZ}e4Io7W1ob%wx>MO^d z>c3ocR=rzdhQ0doq*;;6>dr}8B(7aNNk>YObLm3M?VsYcn}3P_&f)gIwlMM?8_RQB zwma9Rou6Z_@k@5wKA+e2$@dD<%(}~kKFyi^W>Qq$&U%ppTec=LwD4VMOo@Jf+xgv-0ERlxOX!T=(K@%WvVAuNWonzGq!%_WWP`r}Jiu z&MdFqvaRXap?|S~pJ(if*cZF~sRH}=O$*=OpyOv8o$r`XZ5{5#rzL{M^yefvvQ@ug}lx2k6uRX zo;&IMCENS{Kc-&#{9Wy*ys}>M%Krs*bKV=qmaVsB|Ma-#kLhn69d=pW;*~Xe(@(Ce zmSomFzelG2%rX|4YlSD5-O64czv*-3tlx?KEH`*F9FKYbO1Qo=#yaValCpHYSnln~ z*Ow<-J^Q_C`uRy~#HML;>EAiGuXe9p)W0|XRIUf?Gz;4GCan2^fzwvTDYbWJ*!W+Q zb7=i6A#it5LbTQ7{Vz}Sy_2q(bMX4TuSdS7{M}UJQ@7{#rMZF;CsGmxpX{vr*13XR z-X(-#ukHB*X-og?smXP3Yh1ndpKa9L%~l_URO-#^L{9%rTdDuS^fmLe^;a)`+RX7m ztzG!E>{Ij8i^|V$uq%l4t~&G9#XE`pWleNZ<+qLBHXUX@vo|sK$Z5Nr>pkx8>TCE{ z>`H&@@qDGZ!k>>6yjhC%Dt$g9{(!!2d&U@=*q_gF%_^r&&>7Kk@SA2WksrQPH zm&m_w3}dtVD^$6&NN&#eLqWG5*`#UO*R@@~V=ktDH(qAvF}|74%DG;J@(vAi)NU6#*2neh_=v1VnQRQLI zsOV72`a<;A*EsX(^F3tr1(xxx+Wz8$=B{^s-{$`_{PsBcO!fL2%7AS-HJe6Zg+G?Cr|*+4MHNp_gl6bmk>X*B5C$zXQv*8$aW`aqrxW zZ_3MTFMMTGlsFJ$cyxx@8ixyC9eMPyL>r9Ot_EjQVzF_ihAy&@t|yy2EJ8#_EP`FugrvBvgkTbtm3bv-l`+hX@d*#H5uWM7c3hoKMC9<(PadWFOb9!;h`|qdM zoaLWjwmM~APFST@{j`;~(YOECe*eQi%ZzE-*VUiC)_p!>_^EQ-8H^8hN#AenQYWO{j4l5DX!if7x!W`M zVas+&9bFZdHTM{gO@Ghyv46qG=L~jd<{vqJmtFhFMjt!RS76J z_zr7N2D+B_{sRV{a<2?fIOzk8#=TQ~T#Gl2LcqF4-$h6zCwRR?Kv+#g1`FqYUfZlJ1jAfzgjyZ@DhqeTPqR>*GDHjK9PSlmpHPTYCrw zHhyNgmvG;S@yL^}_bt>uY&pi|$Gc^52V)AW#FX+wXT-K%{nGJdzVcyh*DO)%EeYo) z-V_w7xWw@En7L8CSfmZ})XR#jnum7W__g(%!yV^mJYHL0EMfhSa^UUCYpUC4x9ww^ zDeW-rW}}XOv0T@JIX!&cc3oBHOO`i0{H^nPUx&Pvq9xnXR};U>n>@I2<-N$Ph9A5e zcr^ZAbib5SBXY-V;U}d@4qMJNr~L0OS)ri6py9(Tj@9R;$ub-(s=IdHYxV}YrO#P| ztwiqlIp~|!u6yh7EzG%p7tez?^@X$8SMVHt*7V&3#W~RH_a{{WL+xj zwXagfnqg(++%^AipHsNBa#Nt<=>sX+vX^!&T)BSsx$_fW$=xnmbC31Fsw>-rX0fbL zyB+PJIcw*Wo9(^tbM)^n6Nr#&l_j=auUk$VTi#_`Pek=CKZ}yd6Yq#;~VgJ8JkA*)- z*pqXNKgpjZ-e&f4yJFZSTKr9bZ}x9Sm+S-MG*9Z@?Pe%6VCTX4c)@>hSes z*`JIpoRju0nwI&maO>RmW722upMIvExxO+sNshm$zWe;9 z;!?d$rVlUw&bb&nYq^2Lyyv=Q8QebeGwP1AFW(r)obf&XL(S1&fyOI><`)_18a;Tk zf?wxud`|TDHwSm@NLgNckGs-HW4Fu=*KY^p|9rG6`S5OEO7YVpdzWtU{-a}Cy<|;N zzq}Lw!QD16{iL=B`#<@KapF5f7=IAWLi|K!Yl9h++EmcQuMdR_XmTVj&m z-lU(`|6M=%_=?D*&le2i`d{7)n#uq4uz$3l??t&)v-x#@OZ=~iy?a0S=N?YmFE<~b zwmbg0TI0WW?tx(MbC>^r+p|&b^Y`l$C+h!?h@5xth+bsmzI{CA6?1L&tof{M?NBMF ze7^l@>giIpOC}$d)VIa$7W?^eS7H2LB`tw#C-lD->}%r6+iKKX-nMAYrPR8$rg9>p zVv9@u&r4mt^r-`bs7C(!yF8~-=k2^3A-^N$aqsKnUoDPGJF6;1DXcr#w1&6h<-vwS z4y)Pi@~=Ja+jserGh_7U>;)eaZD!6+n0i@?WA5#n4R4}D5{mjuYW7V{{W&XVjj!{$ z+oxx~&Uk7NF>kuMM8mt^%{v{}`bNqfyWFuvnDKzx=iJgKE56t5Y_9)&Y2ID#jMqyu ze(P)(ouBw}dRwHpZ~R&w{qQ{T)8|k0-=CKMeBI}R!v6{w@~7`v`|0h0)au=NU$>h* ztvmjwxc<>$zG+W5w-oWev)j)8TFpM)Mpq|aR%XM2ZTIZ<$<@T(HC@);^Kzcw&6!J6 z)gM2;a-(Mc+fTnLwfOVz|FrwOVah+nPY(*OzCOG%-FAIlU&)!aXgR?ZzvX^dCb_A+ z{T{I@d&8DV*Qb9rl^OR*_w4K z`<$1|t}V|M+!Su?+W2#}s;ka((}?}^y^3w$PWW^wkEw)(;l0s{ISenX))ajyW_Qq^ zcs^IY?}~rtJH3p*VpsBxURSn=Sg&LBJ@>Db@VQS9n)M1VzT@s%AG26wr>C;FV~AtV zOO<~DYAshgG>jMZOwd#ClXdEdu>Hrf@V@pl^+mgv&p5^~S3Ysh^%>jh8D{D$d{$1l z$56!H(jXubyWjbMoEB3;zeq+}{{}9O>DIjd^O+}~+Vi%-!eN7>`t**=QkUK~K4eX~ z%b4gk=l7HLSKo~6cOUxlCickRWRL$$3xE4J{IgpS{vu59@NVNLNeAw_@9(ety?()C zdB$B#$2fnzvV5ezeTM#j?Qb_u@0ed$zE-0Az^|YUx7HYb(VluCv3&Q`*MC>6_C0b{ zIH6Y3aLuwi_t{FE+y4cHUSs^b;n*vslUBz%GUZd}Eh?)t=nK5C-YSD@&_I7v+8QxbIbcL zc6{-|vyc81x_;YU{L*%A7IS>OoZ?@fGp7$li_MS!729~y+t~d7n)y>@*LzFf-F?o( z=EBdvHqzOQm$v@--pJ$BuP3zY`Pu!Fa`OfE)GwIr{WXg1^!C7;fB(+9fB4{?dFO*S zPhI+Dz5CmP4A5qj@!Xf&U67^;_e-lVEV%#wqBxrqI|JwlcLv4gbIJ_1)9Trl-`@FX zqQe_zp@5jc#q+Nl?fb7hasN+y_B}sNH{4a%e(}e>m?@_)@w;T-^i&{0pU+6Q=-QMwA@2O(AN5e;kUhxYO0?S1WcrOH= zkT!gB_P59{lj=m3C81?oMa#Za-gT8yh_>V`TgmuoS9qtz^y|5&jFx>C5fhkJZ`b^w z$#vqg7Z+E`9ci|#Fh~d1()?YUm3EN1U)!w zUVc30SPzrJ(^AKc`y<`5cB`H^d~)_r-UO??PRw%8UtCmFxp`*ym+g$L$9M|P9KYi| zpW%qNb@C}khMOxzL@rD?HLF}hP)B!{dB9wM9wnoM_)aD{tsAo!FKj}#fJ9FFW0J9}sP$?GAL*L0m$crK_L^hqu?_s;a_PpA6qvmZIUO+KI> z-8{W!Kck(}=cI&!OOu&oF5StSedpiL2~CyJmAdTmEFlLj@FXzv)-*7lytyc0_P!HV zmPWiBc@N~6KNj0xxe>+x+S*ZHq`rUT8Oo|E@t~_L*ICe3x8byQo^`;boc2*Wx8TV&-3Enr8Gs_-W^i!u!Q+ zN#WMYg=hABRy?6%&g9;8j&p(Z_Z1FVMYF^&?D^Q2_1h`FG{WTb;aZm!{ZC?5Pn9nG z#iX%&D&GOiW7``~2U%^cQ=fa5C8(Zv^%eHkr(S zmAK;Ptkk2nUSGamQZJsx_Qm_tnX08p7tcwb0b*96h-*qp5#o2oCg^f8Dk{B2~ixYV-WN%=3!S(62B zYa7*63f!4k7Oa#_aQVR9JNDbZoY?x!?)M${ zP^k@JX>JueX3w5IyL!jZ=i6km=H}E~n{j+U^ASF8!=Ka4-ksf^)AM}OnQ70`XEmE8 zh3-8T$Jy(AO>LRGO?>jr+iVh2<~I4MI*V!;P0V&MINdxy`?8FzNQ2cjkq?@8c7)zu zeKRopS>?uSi@&J9TYg2|at?p9+v$a3)2_XqR`%rJ_g<@)eFydlx+iF_rY|Ivn^`*I*eO|hhdf%}$??cJVlW*#6X59EJ zmM_?_`tkgyn|$N{{$W@79n;RXfzQkP=ailOH)XU>m$+!!XS0X=oMM(}=gGINas9^J zBf;Mfa9nDgv~fXh`P&osZ=3I0x6W6Jp>qA&B~v|(Pfun-@Wb68vX2+e~OcS_TIZ%>+I}F=U<;Vvib<*eYWGIhz4~6#x;rP%Z@-&~lwGtd7|VakWT-CJKMGhgVne|$Wq z*ZA&cj>lVi_GVT0#4mlWQ~Snd`t)^Db07VA^S)t;c!^o+!`9cQ|6cf2=F;nP?yp~L zoSOXl>(ktq*f90|-n~^&e#U~C?@g_9ZEkp8uYad+zG&)ix>fZeIR7Is4?#x{xKkqFg5? z_&!y6>c^qwj`NNas6HkjzJZ-W#FLke0@rHfVvF(E2_IEyg`QF+5e8Z3TtRI72 z?kL*T^PGw1dH-MJ<5GpV{j6uCd1lX7w)rQK_*1g&gWRE`{DSxP9{cjCR_FSD{<-z+ z6TWYnV#n}oz0>#nlb@1S|N0?zT4v*32?4f)67DUPiw}Pj>R#bfF8DiIu(!L-K)I** z+IiL5Hp$uDtcMp_Chbg^*^p_kaI8ZjR7FopoS~zmJAuQ&f`cuvXE&=A@2?kLDP7EF z(MRuYRp4=m5m9vU2=M6ZS`;YIX2RuLSwH_(!}RKdY3y(GL?o1xL}F~EzFxeoTsB=f zFJAA{M}Cp>_N;mF9M3!r-ZBavOq;H>`1XmK9iOkANs}@YetEVc*F@GR!@#Kfiq5$hz6DIJWT4zP-;sC0yKUGtb{XIBN3J=gp4KN{f%UyC44| z^SMB)>X*B_@uhIaM&qmLHWB|MRNkkH^J~Ai*i^lA+Via!Rmv{e&8eF>@mzIDUq~IK zCunt9vH{LqZ~gSe^F1D4p2d~j|F?S&$FV%mWsk~EE-2ogVWh;kN4X)pL@esd-+F-! zwclH9{$8H{=vQ?;Lu?)Yu07lj;u(K%ws9-?Nxv|9X2bBnobivH(2l=+Wo0{$-DmyK zKH*{Ui%krlcolpc{>U|)XZ*u)VfCEj*NyYb8Rj`QCG6O7=*JVT+1r^8J>xUFXzoGOeW7gAGhr&xydQSQ?qa3?{khU%nMUOH70t`Wj->8y|6#+?x_RGVl($L z9x`rdEUS3Yl>DIQys^>HSM`s%4c6cmtvG@u(VHqn-+LP_tEPd zg`%~awieCG_^9~N^vR3EY<6A3Q>RZpF8R{r1@o*Ir>a&I=?gYby>;F%N39^6(JiI2 zP1fKD*Oh0@>AWYTbc{An@-z6MQO{@X;Co$0LG8vthAZb(CsnM=@L+$T6tiTH#FL!m zmC6i?+v~T?wO_c+U1H%wrVFf_?ksU;e580%dBQz|ALp0@xnA&UG~C?K%-9gx#FnuGnN}G$FwM~q%r?Cl`;F6u@9Cu6OXb_C;x=YcE-=RQ}LYZ)*s1&*NgvEJ&@dKmBW)a|KkJ!aik zaj@anq1C;sFJ0TXG0^WgOUBm=KWk<)$0to)d}Ph*JLj)={Cv1CtLR+WYR3FsKUakQ z&iJl={0Ctj}6ecQA7NGrwp(``|2+6#sQU zdHeaxDoR=J zdQ9E6mb00DH|5*>KGgQDIkW!jx8tW-uPw_iJM<}5dVS^3Bd2Cgbhx^0%}%xz+n(Rh zJ-q(qAFiCYk6tI)thp)3Y!m%c`R}xv`wF&fKF@Y>Ms3jB-C(K9e5u-6X6^ls-?A6n z)ZV{rxU`v(^GyEFl@Bg5r2MmZPAqC$&L=(aqoKB*M!emA8T%FE*Tj; z<8<1x`*Ys+aJ8wImoMhdo4Mv^p3M!RIkvkCOHJ*}R~Ye3VZY6~t=X;l^!(|Odu2D7 znOhdrvs{h5vw3-r?M^wbsK;}szY^PZtn^_n`<#90=l9gzvMpQk&Vd-b=2*Uw*HJH3C0ef&QEdv{wL++X|c zN9~Dxef#@t-_M>7D~*x=Ht)gdFotfXgEi9cmNC6e+;e9Bf=F+%lRuv@@Wo76A3iZP z!(Ne7W}R>!->op;fA?qnjehppe8aZXT{;dIo=9)m(!|1*|4pmq&U2=Z${G!yefzTP zQUrc&XzZI^b606DzeeCiU8yPwZU1TWr%x8u&|!9b{95CaYJFz0#)n%6{&g=fbqx{u zKV@w>J7b7a%8W)1ox=7^t{G|!hOV&}D%+oa;^DVinMb#0Y&iQZVu6%^h=iy^ zh|682qyu8&4mJEuw#PoIvi;ONbX1)qxg|mS^yl>}WY}`-epns~&okL4GIQQO_9NRD zme;GhD(>u?5&wtp*=^Zrw;4JeDt?7Cs3olDDC)JSW2*eVe#70rBF+^{9)4n-_R??K z^8MVlf5cLDcwOW#VLT+8Qp0uA_Ig2O``M>!!a0-d%eG zS`-s*x!;L(&$#pW(@CaY{s$-&~3-*R+q&W88iI#fsS46xBD`| zwIh7-_W$e7Z+>ocQ%TqDhUC?{#5Bf&?p;61ecu23%bEW--QP54(Vc%UxVZn>2_^j2 zEPHQ%_^NsOoxfj--`M{(eDvjS%(cmL?h7--JC+95$sV}Au-oCOu|^!z428qz7k;d6 zuw(zg*YKa^L_E_kjswLE#ws?BH)@#=AH6QPEkD$uVu$mMT6v>8NjraQsl2(=IWO_# z@;oWt0NDk_)0&wCJQGTJE@<4mxafdRhvC!rj5pqNPI|K?FzR!TAA{Nl59UjT?#-&A z&!4=kSfaAPrCIj?@BVE^_{3aUrFNTYNp4C$aDaWv^aGaWXJ#h&t(1(oQG7e{eo%Dx z)2|2Th&RhJihQWt;q(15V@H$J!s~MaqqQ35nHS_M1k^DGxNGUJSD$|3;m>?ag~ksP zWn+G`$mk!KwdbEyvG}GJ2RT&Y7q~1liF9RNF;T81)@yxmUfkLHCp*&;dX)n_{>gpv zV^I~Dz}`3Q*V!-D%rS@AG>yKyo+{qwSIVtmSM*!*!=X6|szDoV%NP7s>lfsF;`+dm zc{#tbS4vt$-M2q&r_}B@y58>jsld>^Pj;K;`Hx1n+!OY-y!o;C#Fw!83@vlHP4{xN z|3AIZsB_)o>T4O#sLh^NXB>FSCbY>Uk-f#x^_^H_Qo{)kX*Q=-=aU?wR1(Vk_pd!) z82yCftJIo0Q5O}}Q~GbMv=z4A;ZM5MDJ2=R$!@|sh5+VE(*DQ1r_9PPw)!>cm7?>b z?VT&SulOl0YWUO0a>0DVuZg)Q>gFZ33thaqsBdfho?&$?AN|`U&Y-U{6<4RrSwd$PzH}yg62KZmRa$ad6#^1&R)${(UFqA z)=uVQZ1ZI9{*~9BMVh4wGk*+pIOVN7```li+01RH*5B;UyApJHb=YxJjj8u$a?3Qn zc`@&-s!#qSr|mU&XUw0~A2ENsS(@CYGprtFy$&BQoyl~t@~l#8QafeK{Ik1ubH};L z8t&vxsxljQe6hal%~$yNB+H}JnV)l>xyFQhXH~5$@zvlxyLA@3uiOzYM)_yG`tGyc zJFX|GXS_-O9s7f0%5qt=6!wS+*_-QkIyt>%IzRoT_DxrYt@0h!*Gl5Db}gI3r|()H zVP0h0G~sQ+&47PG7q;w=io9k%chAn;KZ-JPch1(HU-vOl&h=ie!`<>(r%f|kQ<8cv z&tvUA6Zd86d|{P>tv6+@X0$$k<^JRc;{}EbwMQ~cEoby}yq|RM=0~G?fhmVKtl|CX zu-fPue{Ox&mwC_IZS2i<3RwK+aPiq>x^L?5-pj>H->3cWe)nM?%cY~s*3Zg$Bh+hr zBEJ8ar1>)WyUKO_^B(Sd^{kKKW_*_RI&OK1D_=BMyT7P0ubkoM7V!6$gi!6 zzl0+^*zS4muOhogtvS)ga=&ceNh-fvIxpthiO>HoJg*ZxVq|q0JRrna@k8LE^t?B} z#C5aZ-dg?Suho}S{@&$3>hJ!l-1&LK`}n|jr}rN}EI!xh%c&o(_Pf7z9l3vfS#5Ue zuj|j}<^0Vq)<1tQ>%#U;MuHx&O&CuYbOt zw)xt;eLd~3mRw(d&hngl>epKjLViz@Ud{NOPjBva!D-(e&Tn|#U->D|P5<@pCuggU z+pukUaQob9|6sY#;umz7O)iL)nXY}gWu1-vj@Q|>H|}?5+)ij_nW1JL`mi%K&!){U z?!d-3GsRc0j(6K&WAXmprIxE#58QD&|K#b%M|aZ|_FUgNbKTCR-SXWK4j zt&g_dvrohJczVm?$>(krso32x+fdiP;_bm*ui~dy|MEXQ%hx_#uEzdJv)~)K(?>pi zOPv{06TM;1n^{jE=XNhm?~u7|cRwvAeOm9(CsuO=UzT3dPD1H9* zTkWam|NJi6asJoSr@`}=AJckv{dHi!e!Tqp^1UYe__BX~xi#tSsg;$?uf^(r{rU60 z{mgs6yW+bFzvQG}x;i&I^KTB{&1-LtFMlJF@mHa#YJ%PcnG4ws--KL++)5fJzrh3=evB_tlc~N&TS1Y-nf;sm*H&U zntu(stXn6}iqmxR;Ja5TXW*;+%rc>q>mZ{Ncha4NU6t~`U-K8-*x#(0*J$9dbn8yT zG&T_j8NpJQ7^Ouv#}@fFC?*}?H{AbYn$G+^?6C?DU)_IcAR}@#^HNC!_nsfm0gA3i#;kDcT}!?eBJ(VT2F(E<)5GVNtOR} z8NxYkFVA%D(=zxY@au*C!uNGNHg*ndzU{&ZE)wlq%nPlR`BqM54efc{@RsjJ48tVR z#|6_XTHRK#@iv#n|tJ)*M>97^ZwOLdFi)d zXM}+G(YvM_&U6)OOKfNSyrhBc47>En+>*_LeM&Q)L_T`@c-6w~`Zu{gznQ%C#`#r$ zduF>!s@Zq_jJ&vVUXsm6HkNxIP8``RFE_U~e{0Pjp4p#2E;hG(+1K!0E&liCnvb7t z*cXknacg=Hu zxlcxQlb%@DFZ%Ux`{UUsRy*(6@$B>iSChCIHx|y@TI*e3`=N3XbK7aj$5(X~1f~9G zFJYbR9#Fd^|L?;%y}HM&aetOa%goz%i1)lb-Wy842vplPe| zRD}SY2_K4Ie3A@O`6BOp$bZ3U)k)m%xuo_pP2^^{-{99T@KHi2Pw*JtqHUCW?1?&pGi~5VQP~)ae9ugPE|{s*C;l~7;Uc4ss!FZV?S>hj8M$Ui zF{?EB43T3X0YDNX85Bzb?JO5Pgv`V~w)s)}NNo9WRv)J9H zaLhl}A7r1RkZ4(>aC^N%z_(lG2lfY~%=)x-#j_=gUHjcaJ``@^&TMBplgYE9o8KEt4r~jw zNvU0Q*Mw)%H#;WgSx1>~icKp`6cSZ=S+>OVfrV8GW7>YlpU(={=a?AWPOvkSUcSlq z;V#kRdl`k3i)_qujPy%5+OICWGCRlpWBsj&38_L(Tj!o_)QMcDGdpc^+s8y{{xj!p z&zN}pv{Bk}vuTGWJ2<~f&*7eUHbmK5D%tD)vdZ?88yJ$-#(%JJ*<}0evP;T`oi8Qt zYPYXmQnr#k>_`rCW=~S>)16!sQbbnqtkOMQX2f)sQPDNsE$PJ1Z>QS$R`1U>C@fx? zrkB*8Znw*!VEVCr(l55Bhub>bcvm^EJ7$ya1s&;Yx$m9L52(o(9AH;0_@&&Sc3XRO z`?bOg-~Z0*6R%#duVIn&)eJ6|vc@V9bg zyxDTM`Re@VI~{CG4u3D#zP)bp8%dw&9JAXJo3^I@J8s2j;TTjU<-F&8JX=UZ$+_T( z$0B4`c&F8JsysG&o;v$X)#H){8-15$Z%JHLv)wt=Z3;7Y&b=5uS;OB)K3$Hnc|U){ zwj}HG_vhM3?R>Z+KKs4Zb>otfS+`!jsBQVRBdS7c<=fa}Zm*4J<;-OZvcCUr@6Z0T zu|3dLN7oY!% zCpmvkSlj8vCO&(=EMNCi^Y_a1eHuR>zP>(n&zrc=usF6qRqrm(Id%K==hB}aE7wh3 z_`m+uD4FMSsVL(&pIE~@Xs}q|2`^x@^Mw||Akfs@$>Dk zZp$|7y8Sn_WMW+Fd)@i(zux*J^7CJjyySv4mW8hbU2*%`P_;mB>2isoD z8YO(Mn0f6x>uT%Wrc){s=lw1BSL41Hnf!B>Y}&pfcaz1ZEPZ(Yo8;ZS!H*B$D(aK} zJ|iM6yLee}v1VTN>C@|0{(fzHy5`HVwEO3)uDq_!etRPG=DN!1VefagUs!3l+nnv| zyTePZA9V{&`=k+^zkKRC=gs@4O6XSWy}5k7Q`CS-OC#`t^lcZr#5iHo`C*#Q7hNv4 zEnqk=y5hIQnfJ#V6&liP&837r78ELcOiQR>o+iz!yy2$mf}d&Jci+s?c%k|?p-yb_ z=GhY@4%|KUlJTb_HGGO+OQx#u#``2snDCO6mMr(E4)2(LFIrmc}yCQGZ<)9SF zN!^w)jAdz$mXrK+Ov%NA<3=psPOYZh)7N~6YpneCaPIwS_udsA|FpT>{@2G7Z_}B- zZ8x*3;6A7P!lhEmP~Y~_RFgWB$M*KSJ{db`+wVJmE^nUg+Ou(gSG?#64qun8Jbj1# zv$OWsXRrNGzMgyD`g?C?ygr;e=iPj!^!h7jJZ82B8!JCPowhyh+Pv-4f=Y^azyJF9 zica&-x`hjEc0&^K(Ku3Ly|4w@0%XF+Z z?$^WZxeFKVNQzs&=a0{O%d*>?tFk{Z9r*n-pYek{gG`6~iSmC-He{y0Xusdbu;|b6 z`b`f$NzZqj_qTrGFAk%cJ_A0Z`#E1ezL($d`@zybKmLETYp7>}M(`HFOV7DDa+L05 z`W~L2wcy@_MRn0n-aXa(Ja=x&(*+FC@@KMJp9z>usJxjWZ&Yx7-ED1;XUiEFn7vYp znZNZ#izFn^F_Pb7t@$}=_go93U3#H?%glE%oR*7N7o74-X|_YAhnp3n71J(H1+VUD zai8v~MoR9u{l)DV%MLj`BaWa2j+^FdzfRb**lf#w77nA!43d-6Q#Y=7eVc_x-C*7k z&E{Rtzx+w~HS?)l@m^L9hZ{u}%{N(YS%xXi+thz=gUW!mdIb&7Q5}e>Z%I&XHOX>+`M}Df1vBm z{~Kyt0~pVgHg{~AtFy^_&+3+vhNfOitKD{~U!PTS-dxW%q2t#5S+R+Ns=F-YzXdo< zeZm|%d2ZhSu03zh9`gH;k;dPSSLuJ4t{%IYwq#Q3iqcIxd(Np8-@mp`Kl|y@ znc*{S*3_QyoAowfZi1}&Ot0MO$5zZZ`|@>7miD7wei=rs_h#ER`}ErXi#=wNp6vZE z3fb_+fpYQo(SWO6gAuGTe0}Y#Ctb(Bu(F0 zfAD7Pu8d#jN^_nuo0Kt?^sh5@$d{h%G2KUh*L#m6r!O9~TQ)i5{Ux_$=`+U66#*89vYt9)v6u4I|< z+?VSmYiFtzoPA@rZs>dU+Jd&_=p`t!csM>w9$m{)=s4kGl|*`T0&mvV(Pi<71u!d@I;ZFKoIWXi{?RWWzLe z@BH&sKO?Gkq({W>soAU3uawqg1&e%-f zTD8RFS-5=0|0%Ab+f7pYCoGbgqOI6`>Nty;yI%SYhTF0w)r>j%LO1SIOq-xQ-}|h* z$9?XM`!)P4zUDSOzx1zdcY0~srv=3_|8qo}gx8c#yZ*+4X^L*?ysGSzTnUkG9BC|_ z5^M=GgMU<9WjM$)kyEN!r}%&nYcY%3^Y^6BuHsOZ$7m+zR$R?=|nct`ts zhy44~D!yxeDeJDNW}Lfz!%nM=iudUf>*BcP*)u)+F8D!D;9k>{7yL@fY?b1VEt2lA zoY^k?==9nn{`;8b?&r!;I`r+h=B8g;m|YYS-R{(je!T3;wCI(qh|9qO(FL2C4lhUy znaR(c6yo#Sc0rRN*RgKK*|82WEQbXY6cgr&x%gD_A8AP3+}N^W_i5Ku%n-j)66T=q z8A=P{-Q)f1`brgT>v=ZVnO6Pw^*`fp@ASjHS7wi#>d#xouM_h1uAfgU6#5bO`P*!H zrGGmvCO(_~a>~866Q>KuDOUZO?wv0113aia_odHzSEL2o^}QO*d)Y(EXDyibyH=#p zX1V-CF;2Cg=jI=&$<4j!V5|{4A?EaShI?!uR@VJ^`~1`S|KGzS^8Pa%sP7Z``seqr zhug(#{@M3^`Z=Gi=9|5XO1RE*>r>_bQrHz9thJwGXd`swaC}nLM&~>AJ#T;Om+rac zuw0?se*b|@_1p*EGyRBX_#xQfKat^uJ>wJOB^odGvnQ~>V3T5Zh)b*7Gxxt8+Xu0R z`)5jPc^>pH_-MW{Mqc1pzu>XxmbdbZyPA)AXVmChYVt|zl#6#<=IFJI`6w{yJ5%XF z`@bHcx(PF#WE5jBF_||ADc)T#%{5D->7kIsIw6J_C$^MlUkz_R$eU=-&0)95&A0!6 zlg(7$cWi0u1<_{`y!bVY=FRG;iTarm;4ggEm|4Hi@8;P*pO2M4-l_AiIPT_7;bT00 zb{3ZHuQohdQE@6a>CZ*0r<>fFmrUTP=wzwUdArJELBadGXTIt%2z1qDOMeyhNU)8% z9=w1-@$ALWhD|@K9-iG*%=YLA^M;gI1BEL^vl~usyX|z0M`3d_Q`dA}Rsmskg?EiR zPUi45ligsjO`^>>>0 z1AZEBDoX4-utvWy{vBlMioLeLiZw#>M-hTHHr&>CKQaUeETUEBM#xi^oje4aHAiZus~u z=cW9{XNe1bF~#&X$gPS|Y~bPKSmn*OdsA+N!f8ggPSr^;|MWiN5PRwf!*`)uD_+dH z&BT>z-|3;9ZD+A~%jU4^wRu{BN_>;&pKq>TyYH#V?}gVq#X}}63Y#4~=UUjbMXbh? z{7;_ZUhy`XPtL(t**T1N(?#A1lW#5K`5AP3!yW!Uf355DHu6fRo;lUYy}X9ldF?_`|R6epJnEWyD%LMzCX#(-P-+{ zae)0o8}9kvJac0XY@al{dPVBZibY#?Z#Z$~*VNwi&e`2k@+S4md1YM1cIKO27dh*w zpvqm_gKdr{-d8ZTKc%yo@mq1Tk+XyVU6$mWNj(E z!z*4`pMA(HbN7YV`zOyfN@jeEnetI6v@X%bxbNDbl{NqMUf$YT$^W?OR(bi34y`_Z z#_* z;Aq*lGvD9Nt3Pp@YkIh5|BsLCVt1=w9G$IVUsflXx@PM4hU(|GI-uU6oR_xRzwo}Q zntR4)-^Tq{mYJc$CS6|C=e_g1qeU!cY z)5hP+-+evxX6e`O*Oz5yU&)>wCu_Mky3FEK`r0|+Go?ynd}3dn{JC(~fnVFxre8Z% zE4q8zH?M*&|Mlg2i{4#ky|1>sB4%=P?CZV1zMOinDfj2X>))o`dw%=z1x|A@40er=+gYtv1YOt~HnZooaVsuSflYEqlIPwLHAFa$d6K zEu(dN!=4$>~mGfVV zzx>s7YudN##qJSxJVC~BKliO)JaxBw;bF4?#dveQ+dm#ZUsDqo#Pn*N-@D7NJ|)yL zFYR98ZRnNhc-~nU|i>0ILljpv@8N9SQ?3q|;=e*J> zuMhk>_V$8w_>Ozm&To3XcFV-6=XYg(So31t=6S_4W5gF+-FZ()(CYlpeFv|sj?O>x zvDW)e?Na*(GvbSO%U(VFJ^6lq^?8Qe`N_AhSFbY z=I$TNUhdmDeQD(G`@8Gz+vqW!6o2q3KWC@H+sT3r+l?7lWIt+pbUMT_*4X9jhD>*L zk!|^G2I33Y;u7pdo+^6$4srXuHvL%BPvJE=s?`Z!IW^elX>W?RGB(T$tT7TQ63O(; zbn8yrck=gCwuCz>AAY_wV!W)oKFIH0e-W1fpUi!J=e68LaXcR8H>W?3J^t!d&HG21 zN2_A166U#=ow@d=nZYnYLRq9MG3>>JZ&O=7iY+paIL7N@*1>I{e{=o$e?km~uiq^S zl@HpjVc^oTq5VYDhT5*wDz+mGoZL@7`RUicSHIA|KIPZH?E+@phu*Q8yi5I8(*5(N z@Qa7c4(k+d3o%V#W3n8`a~FKf!7hj|BW7{&Y3_wJA~+kY($+9kM<3=HsWwjUU-1oT=tNyy2jM3d7$`9Mksr7uaz)b#OE% z-QhU4_QAKMN<4zQy&rrk^xD0jabC@a)>mxyzgKtc(3zlcqepP|+9WHDym*}emYi}% zB|$?i6&DVX*|A3q^f;WW%Ip{tmkR`XaLjmTa@ujhEHjHE5|<=onCJbw<96rDhuho^ zrb)Nt1Kdj-ZJAD-fA-hou(GAJ{O;%d^9ut*`u1rrWxSPKTxIO5UF}dU(mS6s!ZLd^ zOKhc>9{;nM_mgH+lwH-Hefh`DhT5vis5mu#Io=sn`Fu9F78T#$_nD1R`*zCyW$dLU zZy1-_XT3UlUjDLS$L;e68p7IYR|y`SnXf$A-(OBwzCPyFlBd5i4Jz{6z8f&#e-?e3 znMGdq?*G}&=?{KGn_JiCAm3qpRFnA-_gYsY^#?!rI8*-m?fWWnp!n~H+vcC<+JEfk zjb;e{xzqaZhuhmdxLKc-rF~bMe>nHu5#EOXQU`SY&#(V7{pZa4EFUzc|CX@-o1d?^ zIHBsDc*%sz@u1yu+dq8Tt^eUgxt+7bdxb>)2T~seo^G!HDX}Vi$Dd!v8|<8!=G2QH zc)oMrdxjqt`4a!F7VKy3ea|@Q!gi(Vj5$G7HyJ~{s z$C_L4s1T%gUP$Qmj2W&mB|l zm9ix{F#euyb@MvMk=j?O$!p%`JQWFuh@0PQyudtT(Ujx1St{i!>NCE^vDr^K%xPx& zsnTZ2^Y+z8c6;@0vJGXAd0pvK&w9dUVP}Ob$AjgD_W5rGSI;v)uz12Lxgv{p1E$k# zGx8fM+L`oZ%3e-hY{tCOE^+p)%?-zVpGh8w`xV@GMON8sOX-t3k#vXkpa1e~(5rpa zz_g50+QhnS){FLy*JMxRZdsYyE__Wh&ii0hqR&&s<`BsS?i9n7Q<8C9Z;;8w;B{oS&}ENm*ccu`JRw zu!vb`!iA~PZ5i7NBk%RzHNRJMGqGE(%lh*X1q*#~#w?TYO{eS3rxjJV|C;?bP)OsJ zWkS2_l8hH-zDq1U7$y4xzHMz&e4795(idNcO6mBT4V$)JzT=jnzv*n{j-L}UbeccXP#6xhc%jIh)Tucy)5m>yKNX88pp2=HPfcf2Ukb_%qGh z(wq5@sull#^5@9YgSEzsWEMQ+Pt7Xn`dXfoYjk?=7yoVILHeSfW%_3?oRSGtES_HJJ;?c>tVpY$Cx^1grD73pbp zQ&*VR*30fX-}1|->e zpYr#@mVYy+KArICW#yNz8>+*Ow|`qHw_a!Zz0GgBir2T?HCw)PQ}yqz^2>7{-Ti#_ z^p7U4PbS~*M$Md)zWz?I(e_V2e%&&;A6F^);q|$_dgp)ds+f2E*4fD?@5Mxm`AV+{ zoM+3h8){4Ek3H9-2PqI_s?+ZMOG*{F?Ls$lt=B|D>L0THVafzJH!M>Sp1+ zviybnnQv`gHPka?br~v7Kj_Uv2!o=gYg3?|xRzdVS-&_~VnG7C&9N zX#U<^8{fQ%j4C_QliU z!vnjAb?#pKj}}^2R?e>7^ou2=Hu>L)y0{B;!ll#AU$4FXSML0`z2@g`Z{0EJ+V-u}=hq+WziE5-vDMsJ?RVUl zzj~kg`u)P<_xrxsy>p#^MhFASdYi)~-;bbfmC z{>Eb(t&FTP*?)8l-#0tm?mPB>!e1`KYkL-I?3Q>eM*Dd|!x1NlqKTN)B~r|j+Ha6V$BAF)ib|GuZy{xh5%d<>W8 zCf#8W4?plQ@7UtAgo4&_GaOzaVa{12_q?N!JH|HX&ORS$;djear&{;j$Z_}R zxRIm0Y;Rh?&PN5SZ^W|d7&<)eIGcB53;Q;4?y_*h_Y->r0%hJ+Oxs~rR4TIBTIj}J z-d8-2_icBSKB>NCbJ!Z2+ijYS-+lfiLk_-{i)x+KDAgo_3h7B&3Ai$30`~~ zHTP>x%hHq2m9IaO-&u8+pXs?|$lAxXd+GuUEU$mh*9!RSd%<4JlKCEVop$~#e!Ok2dF~%#|EJ7>DRzG=i3u$56w%>kVT~8w+1O=Y!=8X+Qt?yUN!ZEBQ6K?>B$^ZTY>{RUQgo?mNx-w&UMD z-37^3TZQr;KKspd)w|_v&(mLGr|&*z_$PAUyRpBxhr%!MhCK}@&NKYf$>;emsPc!! zC{N(~e%{{wjUtMF)n7)=U6IGWWW`(Nl7CXmrVAe4fl-`UQ~u1#d8`_<7l(b`H79E3 z?^|jQerbD!yxy^XkCWDn5GSU0r#Skq@t*zkz~iuz#>5?_&8y!EFlOXxd*~IPJ3V=! zUHW}R4R-E^ij7+%*t(*oR5488+3`)m(DhPkUbeURwhIr196Zt;Z`?OZaj?1YYU6@6 zho^hI-`UUba^90zSy%V%D{D(m{&G3D^3rq-dFGH$TOS%-?Z3X_aT7~``P@q^YfKup zxwi60uV|d$z1MtaTszOPo~`y#B^4?PJ5J1K-0`!Z#lrc^u2Y6R0XMJwOZmzcbS2@j z<)?GK0gbPA_BmZty1Y~7+WoU-8d?^o4+N~d&n>cw+iOb^1M3>mvW6Rd{mzyfc4)XW zXG}5cXA(MJ704Gqqaii^_M(L|zFNP|`4}#}K=1bD8KuWc?!L-Ys8*PoUe%j3{pLOq zb=#Y+y*u9)&(~Ry`uOZyJ`?tehx*sPtxsY zw>c*AK*Dmr_y6L<;hAicyoJw(2JmM^1n^Zcc$iHSmlaZCG`&@Rj$KFH-Av8sy&C`g zeC8#KHd($e5@5Y;nzdd?@cIqz6$&Ni#5Ho`zNnqP&5*^jM1>)>Gb^7V!`h{x%u;j0 zTaNzAGs|7qGWYa%Fs%|lnQU(Fzq{LFRqf*Zc{wr9U#8r)Z~e7XE_d4no{aTHmo_-F z?sZ+E^K;_HYy4sM_ok+Q+SFXrz_qE|#(cqtE9Xq3tWUZIrsi*Z%W*|&b=}pd#~JIC z74GFq$ps$xopt?eUhuAG2^|iZy49Z?jXET{A76c?wpH(G!iNjbP8Q!=k`tO{vt7sL z#xm(mtK;-fm(Nq)^;5I?Xzm}Is?d|A--%aaE`9!&-UOO zSC`tShJVjk<$nKZFefR!AgB7qGwy)rx24tPCwEFa|9Kr+xqpMvig?qTv5UE6!R z$mOTo|Ly}X>MY(Jb3am~UMIaX^PPO-ttHF(733U$ewAX*$ni90|5#aF_wbik?B@6T z`1T%V@B0+`t48?A>yK)m|2Cc9cWEErtlfJyTFrUslm2V#!mS^_-23=6e9j)v-%8JZ zm8N`DYj1D2`QL4Ff9}G)7iM3Yy;bpL=;!~7-WJ@yaH4kU=ctNF^G)}KEqlEB>H4R; zj~#bjH}};0Db^%@4AcHo(ns~bZpAzv0r=q*3e>VYIVHqpX^I3x6GMe8-Mxjz2fX$ zuW}DW)qRtEIr;qcG=^O}CC@PDr_Pw|_F{c_-*o-STc+|CP1aRgUO#%fP1LF7n{)bKy;1Y4^TpGOo@|}A%d%qtqO$cB9G4Z;E zY<hbJ#=XPp$`@ZhAUvIpwVAs6b=H2D1>axGr%I&?MUA)Zn_kXRB zPrKBcgSMqvdb-DzoZmNJC*+0mg&zf{4(_&G*|@hd*8a!A&`ZUx=_X4%9U{Hui__z# zT{|AY*C4v&#G_gHtt<}Vp7U87?3Q@EQ04l?VS3>wsCjYetHC0Mvyv8ZN;9n$XU$h_ z`E~rf>3!?D8*+4$Z&p>srdD2lqQ;OKKke=`mG1&RK1>-WJ_YwY=HaaNh*PLv(`^0V4# z{~rdcSSNGy3z9S5%PGIx&l^_4^sV>NE%631qEW<)+FfJ^j08+UH02=ds)UI<|l5 z*H_8&ZPS&{KdQbWUAp6+NG;n|-~RO1`|{%2>b5<;&+%uC%0+qQM~k23K2cn3bp7c5 zpWo76{JGL|?P|nwC7t@oTN+ zU4DuE@BhubCo=aS>>Nw|Mx@5lKPdrM`~5CVQ{orwy2&)n`rzAswx9j~rwhveIoweq z_4qc!Jy)iD?Mc?(_^yibhHSsVqhR%*nx&xk;ivlyA7hXFR4w@_a?)0AqQi^xA5YrP zPx-a`r0nlE=UEO^Gwhpmxwh%awZA5x*L1Y2e*R?2Al?zIl|Iw{*xR>@&;0(*@P~oZ z;s4c`=TGdeKb4v=ok36GVR29YzW#@gWZ&5Tja^YE%sHo?^}%zGhGOgP-|7uI4EGve znG5oVU$ATqzbbU-Gn15X(AGF%1vZV!jB5v)W$vKO$_I|iF=mh^)VIg6FE@y z@9crX-FXi@S=aJQUs%U}M%mx&d8|@&^lkFb4K)>KcQoi(yjnHYRMpJX~SB^-|gKY$JTJJh*LWB*^hm4 z=jD@|OmhCD$a(*6VR>}5gGqu@oaNKWw?PcfY-&pRTb`azbYlML5>nuVL)H)n9o3}!kkZt$f+i1%tqbi?9(3wP%7d@$Zn zGuhc&tb4*aqjNvocsB4$KWZ&Ei;Q15*Pl&9XIXLspLIvy*8i_t*zQQHS~@!_loYwF z>NzQ|&X%yv&L+%GoH@mM!Yme*f-0uC%!?N}BEN;28M-=$olU5}8M4zk>#pkc-bVXf zA_=R+qTT-1ST2xRAaM5B*{!^%9ff!PJ!>YG^jpy(CTO=~@$D3AMn_A5MO!vn&e{Bj zIVw6VM)#(g)1-4^4Xb3IB>ZiIIiw)&!w-p&ZF3uE|FU~V6OX8oqN%^j_ zLTRT}{@*#jvKY@xzL+L^dr5j+JlBV_?~3p8ws<&LJ)LX$O>*cH# z&?6+{jN#vA<;U0G$cTm>c(7#hwP(Bv(_Z_(`ROZk=lka`3*^o@*{PmbIJCD&m&T4A-7~dP9-3?`!^fT6;d; zaC#bDGI?3dH1+4tb5`CI&0C#R+)%{fRCz7Mt$4lBHi`e&<}DLeUV464MlF}Zy)|!j zdT*xQk1w9L$j>d~b>Ok}H{$d^CrB}ST|3r(@<#7`-idZ%(%EI_-d+w^H~Zu4|2c5TL^G$M`TDg+>`poCNVfMctzG+(Ut=~vN;{4oQv(9eV=~`@i`^2Kj^RCyNH=8o` z}!`kugZA7Ys>z>bB@0bNKW>j zQrR_YUt4l@=(D+Z)aHK6eb#OpTQB@&R%y-MO_q$M3GcYuEQ)Up6y4 zwbT3Y<;d8-wsAopDu4X>t6izzA8hn?&obGi?``W>&8?NL-nBmWN9DDCIsWWVFSlN; z-T&9N?(Oz)nP;bCe3hf*L`8YtD7#5#glPE3FAsmX@%phna}vELczu6&d9kp!t$S7K zrk7id^#!AMJ`0k(yVd#Moke$JkFP&@=Dzcfw14U<{$J%n)sA)RR^Ix#cW+g(nf4%uFs#`wQ|6O{)CgZ=e0>9oA{(SVg(dXKK=jxZ8FS%EAvD_|3 zd6BI_!(HFKHEaFunH5^*nD5==)3;3fO&3!izxRW0$<{CLM#Pm@mz}TsJR{-d9Pc$J z+fyGuP26_)$G6%e{qASlpYJZ0e<$@?)c$?t_gt}#sS<9u3Fl2l2UvhS%Lw54sjy`_Rc=ckbGUw>QtR39t&N%sacQ zVe99u3b}I3vUB!-m?xrl`lB_E>3x}pHjU@aUzY#7eAcY_y#A%-t}fgEs;~Z<8Xuu| z|G>9zIm}Mezga)|@iV?O>b3Wt{k#sr+n*>4D6lz*2#F+iT(D3$*B|tsKd`-UVq!px z0!OoxVrjpxUIyc*h3mT<-y86pH{`p1Bkr%n?ec%h(|#I0Dq(F|KH;spRh(Tr50`BW z<42*YAG`@aB#H{#AAaol>DDMA_(ZeGXTlEFX@Up5d3M(~e?0lWCv*SQr_0}Gx*S=Y z|7K&QQ1JsU*BNHJD$SW@OP@H(Yx3+@ZeyZ$N4LV6OqZGY&2QGL--(r9@Uh|U;|04< zGai;O=wUzdRyJihM>ykd?u2eZ_D~(;f*rv;*SVc$6w8P4JZ`xwy5Tl2hx37l6Lel~ z34fEHbZfE@^Pw3BUaS)QJ)3oxj6t4qUcB1s!mlX~b3~;?3I)#uAGpg~P`)=|moSgC zqXbi1uS2rzOno`m9R0@A?p>*V37`M2RoltamFmgZ6vEzfyCG3TXLHg$?Pr?b7yjZ; z>vVbL^Xq7O*IU)*DY@5#?-py+$ew4YIlgJ)CAXKg`<^ZGE^&9Pm$^_ocbd{enZ_x9 zH`lSHUjNhaFui)+W78v>KfJi~``4yDetTWN-AlWcrfqsxUf%Y3`pe_So9xg1sl9UM z*p4-FTa79rj=bHvZH00PYr|)qlCv8%EdS2pY5tueoBcVa-$BkOetDXeMy1T~ z`ZT?JeT=L<2k_pc{ylx)A_`PN=Z3q@m9U_ z3Wxa_e(D`sz#%U9c(OXjV_}}@`VF`J7kuPgu%GcN#{3&nrb+3rY>=%u1UMPsnlX@gRN$f&wu=s*)mK7D{92eHS z7n#7We?gkTXnCYW!O`r%Da&)~zRTGzG_vGUU}0ThYv)z}Q0ciTqc>ZzUb*C&xr@(= zP3T|1R4{Y>pV$VjB!$o`OaJLDu>CYc>c@i4PZ^s|ebt><=X=iZw2tcvzl8U(Od7X~ z*=!glUG~lwPPommI&u2JZITJ0O2TR9ceIpb6%}3ylx{z>-L*_cFX-n4o?U6`w`1n! zvi;L!$bOv9_DHtN-2Ta20ataNhRII@zvwU9#?{5N#ni4#!uW^XtQzqtc}E*sg(9sM z^je)MI{7Q%@9~n<9jDq^QzTmjFBra@V0${@h=6g%FFpZlp2mjHJQ+r|TR3LjP?=Ep zaCO;bwwM@)EJMb-q1n~N`%fkao)wfo`b0aqcSf{QX1ms8p@}!2Y;-6&7g!%H-#W=y zukoVz@zqy;P2cBkd4fT4zboU>)oKm9ZuqIk2`~TG&N?CXQtv~i4&e~dq`#)$i#vl) z6?3fYGrC&$eDVBQ#-dEDjo#AL!dmrH-FdU zvn9#mzHE_oN6j)%u5S|FJ6El~p>f@#DgV~kPxv$Guj93|XPi4{*oxm3J1e+^w#;hvUj>|M0H@{TUM*bLr_)9M+o>OPND`g?0{j{cgz-LgwIZaH!2R{Jkm zW)ap4MKij0ne2=#mW%qtuVVc9p_=R^o(f^<$2Y=P2qu*YANVM9iqCAru8!5sUsZS8 zFJm^1P?x&vx9?Mk*O?+40eh1^(}w!Z<@dt7v_1>{RS1!_V&b}7eD8etGsms6r(&8) zXUuHXUz|m$tm~O7sVD;UcCA5Qv8a))w6T`WS_*m zn|OXt!;PEqr%Q`JC!AisG1ZK1!a9-2Vyk`f{kKp5nzG5xxZcwC`o@Mb-|0Vg^e0yE+unbyEHU7kqqCxxtN-85aMknMH{aYJpd|bAkc#ZiDqB!t z_~rVvSsyRO{x4n9_w)bM#pbE|?zeQ--L>(1d3Lspm7J2gJ*(ZvDei@@C=J2kFkwf7R9=+8_6^ylyYgiUW6ot#ZHHI&42KeY)?oai!tUeK%LP z@6W4|`4qqYzf^wQ_r3F?cHI*ScgPBl-Y0$Wy6gP%^>45Jnt!rQd2audzJs@Ie-`|% zj4ZV7|FYe&^+3;*cE*FYFRIq=Q=8BGG;veZX6_~yHuDV@x|dA^ckG?>H$Q4p#wmkv z?fc2HPoDpjT$-*t_4u#EuZiX^@B63u_usnl>P*qMZ|$c){9*g0Qj>65eed0mzfN4= zv6ttA{7bp*i_7YY=Q(WU-zI%zXHVa)-pd~qnM;;sGCp?Sb^MdT%;Md5%-28swSn)K z;h~+aeRjU#6044%|6SPgGu5uA;%DjEWfgTh`0R4e*R8vH`uW*yGpFZA)*o3KJ$v_> zsl~76>901Q|Dree`_!kWAE>75eZNw%_UC+t)U{tjZVG1h-oLhmx8UA~dD;j5-H|)2 zB$|->JE`l=RohjedWO?u4?J{cozcCd)^MA+%f$ET@&An$Gn(Cw=g?qOV0rm_g7S=Z z!5cZo8*Jj`%>tMgN;A|JPrTG4StD1)9Pq67bzh7+^8#akUXHncS)INvIDfTn+cm!Z zPD>m%$DOIZW8!sbvw}l_&aR_I>^i?03-=w_#Ni^=qUd_YjbYl1?}tA$tVmlfy8EHj z?1#lU|)1_8lwu zZLA@ud_sM~28Q5U2ZYV!lYiga-xgzg^vmY^M>ol{JYIBryZylpvl}fHe3%dIIjS(7 z<2G~K@vard(<~b=JT^(%7j1AqM(LE&>D(g^i;q4mJGi5l!_|WEGfTo86PvJ`e9>>( z7^TcRybmPKV(h#T%a&8tRT*W{;(F|C(_PUokF*?|COjaK`;5$&_!MpV?qoPKV$Q>Kup2Z1PJQq~IHb0!`5GpWT%dhtJDcI0ePS8EX%#kiemzdP z5%sC#nzUnXh{>agXX|eJo_^T&g|Z7-Vgcf((_e5EtcJ1 z81eVdi@fu?UwUdc$<*wdmv6uL?Z-=T|5sFAj-0K!_2-fmFT<7v<}cZOKj2&A<(RlL z->dSc?%kes)G&Uz+q+<9ZKM2;99RAxcdeV&|MBpj^_GG&_3QpEG@f#~ME=D8#C8VI zAT;C*l6WTMjdNU+>VD)FUOdLgus6G;_7ea8zf52Ed|@ne`}U)vU;gj?%bU;tJ0o`7 z=+Y*gIhsK%UwMT(_MWtFK7ZDA4?~09uVqO!d#0cN_q65giua z%oRM6Weoe6V*fF4M)aL|&KtC)M1k?*`w0yn<}?4WW!TUCU^c@%h97m$3J+8)y;1wr zIOqO<3G@523o3qzwVjTRsrlM|;c2x%Wy^+Io)hnxe{t;oF8cZH`3*7m6D@fTlyF|v z%{ubqJ>xHq1Hu}52_60~V!akm_t48IdYWp|)UjaE#HSg#9xmD!{2Ax6?vnU*Xo99j z!^J54tT%?y}uKz!E0DbuFSwSTr` zlgB%2hoUEG%#P*@ns5ALUBD1`SnsJg|B46ic&1G;JpGri!>%g#+5Jxv^2^_|Epk5d z;IysRldlE~8g4L(OxVsC^}Ob6h4w@xUpHefky2(iX?Y&LzT&C9dRKR@FrMYi8nU@r z_kJ{oPcB1(c07}p%VVLxmdzI4A#WEgn5uu7nYln*!H+HF)fCy1Y5a{Q&u2&JGf!1n zpL*@`#~o|e{*V04s4+3%@xpuNd$~NruksmR*lDM}XZEpQGsA4V*gb3(Flcg z^5~xKMJ~Gj&mt2qUO1_q@K%qJZOSBz^b6?F==9HCIlqxT5=A^73`2kW{%9 zadB-tPHDB;?IJT}pIGYm9%i^Tcb3}qJMFWbtIoXZJbnDLYqfX{3%}p;jh~+VPE)X6 zdrZ0Sb>gmbm1btkpF4|9R||@o?q+h{_V4Z!mtNH~K1i!PYIDA8R{N?ohqL}RKI?7e zH&Z2iQi_hjTI<<6OOZ|ZlBdDjwQ#6HN6k|C;o&|7>KF#e?M^82&o( zZs9ie|KAqbc*)l=9rsSRi+VG0`^>#Xb8>Y`3!j?&J+(FVJYS(~pSI^u4!`zVE7zQ2 z$G6+U?&){c%r~<#Z8Q2=`C?_6&E=WrzFeR7Z&%6h_-&qb9JU23{#?q)y-^{o^6vA# zPk)Qc{_nH#dwTcuX7_wAws%vX9jyFTadqnNInP4umM?SQ_ucKbd>QB7mA`6JzkDjV z{Cly@z7=yn1)tt(Q`uF%YX7>IMeAksPM>zS%Di4tuTj6x#ybA|&i%9A|GDk|{iogb ziTV1~XG2x=*FRTPYMgUc+j?QF6|ctgzG=^OgUpz%086K*lxN>b&v%JuEwyJ$JaBc4qNZ!v#$%ZG9e0@%vH4 z6cn9TILqRF@XxPx+I@>7Hp^7KeN%dWnsZHkK#0NayPFRSiHKf0EO@?mKI`#@1nt}F z3RQB~ZQm)r#@8ag`do#_@u$nHqeEm38@A2eo_#?%>RyJ!qp;_^QIQ*EYO3n`EgC?E6l=5SxYLtvnx5H7FfMz2)NyQ+wsDwX$LRl&D`8@ zrqQfx*T-YKUNnAdoR_?BXa4Q?^X@*}(_{YZ_#1WklmjmxJURH7^SfYlSyEh8>SpVn z>F3tysmb#n`FD8$N%h_$&*DU{@`Xl?E+@`oMpQ2`Oo-=Fn%HQYy{#N|FWozZd zmAk55U0rU@{`zd8CI9}OEpFLQW&fTNuWsk~+&FvNw#ZK(&RmuX|Cp-PcYX897{*Jp zs`lkKPGZ%lyL907M$5l5{#LOm$RA@7+U|AyPNxp$yVk+;Lr_ zAEvc@%2(!{-fx%}w2LX|{*_H#Z)$BOmbPOtj9RsPY3H?lhH3UY2U?SHF1`oke4BBa(6K0j%u`HXq> zyn@vpJPs9Y8-7~0o%UZ~$ncr%@jI#6+vh9lNw*XpG>Ub2uKVn7$6@b-f4=A*IoxrV z{rrOM(mmqbZSI2Ydy{qw`$Nzq#UcX}a`3*Mw9P{0Cp7S31J)ilvMxk|v z4C7vAwlf@pH+lk(yEC0&`m68^8M+ATZx-*Cv0Xtv|z@!16$aiMHcLkE@UuT5L5WmWy4L@H~Gx#<}+Qk zQ_>Us%$Rw9iH1|hjW;a6qYr*dYG`4cty}OjVqxHh-BJc`nWuR!G)$6UKBORFE_nH# zRoL8GxxC6PCFj;IzF2qmQMLAa|4A=;7wx%u_+8=6W8BOaZdxANQ+U(P{`cp6zB&Bo z8ERsG@E$&4#!}&&_j5^_HSl)Y@ zJ45{D8Bwk)YuULOmKL2(@@88oKfUs|@PiMLEjdj4{+~Ddan0UJLHFODUKW}EyBX@( zcfDbVQEoh2KV|=akptH!IJ_!n_$S-2pW%aH!+%N6l7GAm;XCF0i|_5{y?Xq{zVG1` zU(Sl}`2BLXg#2H-W5?@T?p8Az)d^qtzTl%QL;pf=r)7E1rq5VEKewNz0%E z&!gDfT^y=svLXU6-Vs<^R6;@%&RW~us35nnqq>&!XzvPVx$ z*j$V+tUW2##MEVWK-!&4j)gbFWe49*+e2)ox4!b|NS5d(>n>*aY_2(JkE?9@h7P@# zH<=vHJg8%1n5uD0@`p&WSMaS9Pn=(tvQ1&=Wj!$csix$c*owR94=V223L4$G+?lqv-HH=Sl=DbPIjx>E!QubyD1DDtdTbV3^iJ%`V$k69Of%drKA}QVZ$YBZ zfp;5xpUzx2bDvZ3UE_op)#sDTUm9$Wq_#9UUh_ybuWMWLI`UrBmz}5dX7ap#&n>0Uof4pC z^7BfAh^DNAWr)M{E9aIKvtF@wIGuU7Hn{TK(kP9&Lw(af zqnLnSd#>f1t!mg;e0W;$rp22NZtU8A^RBZM>yvG!chBxFRr%h0?0?cvk4ucqaPC^3@23^cer-N!?#c%* zuh^KqHJbT*uKmJi_kVEC-0rYR^{&u@*jCUZAzH2!>;y~o5M-1Q=_m4FI2 zx2{DQ%a?%pn#qD^FZPvazuwSm$+|@6>N(L5mY<(`zW#h@)01z@e~SLzUwP)sw;dl> zZ+g4vr>cBh;?okx)o=1s|LZO{-hJ9=!SNpj%h_D!{!TsHQNi{0`NgzVf7VO?t#z=? zP)eJ8@N;>#__l1l^-1^N$}+xqy(X4F|~X_!W-kv&i~5sQS+XC<$bP3``jHi57vqP%s8#}eC3L_r{BI= zymET;sTa1#&Ay1nW$5I6GPZu7yIlJItivjMcv((f{mOsf>e*un_UC5uE;qb;D%4`; zB%VLjnx`+kDZUuF@9pi*+%-GwPv3iAU-Yfx^t-xwO3Ukg_hmmm#{8*L_0g`ni8cFl zszfbIF3En~9A5d)2UHf;o&54TX`P(WlgM5AyZz$b{_(G!KlQ)X%l$lZe~jy_c1;WK zFV8dnfAjQe^Rrd5pMK8qdj7Ke)y>-68>{#0pZ{bL%D%8<@5;BUKV8tCzW%jsrr*bt zslT4r*j8UY8T_Xz>0g9d_T>=o$J1xmSpMAlcS+69c}usds2C|Y=EwHRY-fQ= z{*&r8>cY0!>@E$bKC>5Yu-WM!bxY1(?f%W!?e=kQkGE}0UvqZH-nHj9@$8i|`dGSc ze?iSpyHnO>b5^h4sPDDE_jp_#_tNLvSe9=5mt5lYUE*5G^@^GYuWRnld%1LH{<;HS z-<miB9Zzn-&g`oWby7hONQ_2avJHDU5e$6nO2 ztnxo>o8Dgjjqg$JF=5xQGe2&9)BWIU+HYfloj2@y9IiY4GI_AWR=)VSoO#Bgwb?%V zz8msOsrHvRn3_qJ&(P8_qhdZo6qn3Q>3s-?)veR@O{sA6(1>{w(-f9 zqwBp-6dI6vr^g@t@@RXZMUAK+ zvzd5(>s#ypjGq(Re?Hy5;ZB`wp_Jk$9-;a!0W}BrmJJSv98;Ag^xmo1RB>7MNUZyI zz#?&`*{1(bW=G`7z5KTKzx?tNT^}S+1A{)!LzQOW7+MF zpJj}T5+vL$@4UTYwqD2B;O%sk|7RQSwkF*6g(To`d(NPu;Tj;`I3sv+Keh z-0$1TllR}n^wxHh>vmR;mWDrneDj|BQoX&;Z|#yy*gNg`pLw@hE~ zxnIf2!dh_R>0bT^?-_sGXZrD*!Oo$`xsLz9f0hTkJrX|u=XkK6>BH}aI|@DLH&p&k zm(W{Z___H!!yldHa~c0+GuWT3`Dga%VeOtj-OPD)KX|O_WfOnLE9Cs+oA$S-P?_T~ z+p6gfH7v4b7j`(_us!y*QJ1$?G4Ff;)L9h`o#`-B=P;naEJrIcv84>0>o14^~*F%;D)@ zv|Dh+f(Dk@Bkz^^=aef1BzAUKY=2t(#ddP#nS`ko4vdHNw_DzIIPmt*?uN~07`HLD ztyT%1%V?;-V{IWfmxpu{mxcL;?q}P=9X9Xbi8+P$X^cU+Ec24CKaGY|GMam`<~CZ&ZhdPcu%du(mk=RW?q zfqW$ze|u_}*aT$PUn=&t+Tp+zVf&=x4YNti!cHT7LDquhYU!%GAC+~9el=V$nK^G} ztP#l5^Kycki3VM`;Ltq8+z9&#(QjR-^P9PkMGXjlqE^5TFgsa;=h@7 z)^Z;6f8=~vty`efA4Lr z%U;glBpQBOR{cuGLxtE)zN|G2ZgQ8oT&HZ@)RXJ>=$OI6=T~i=A1ekNmtmNYlP$h| z_2!0@&g*I4`?p$WNxFvY-Kd?v#9;P`M0%)m4?9E4sDxrB5pa1a|!B zSQV2my?k!`1lxC>CKigM=o9H^ShSJAC>w^ zP^W9oiMlBo4{Z9k8pT9U-FW`_^#7t8wq4iU+*+c*cRTg=htPY6Dx*YVleW7W5H(vE&uJ)`=3Cc_i8`b*~zxvSVUl!fo@m7RF%#M=agERItL{bI^h z=U!y(-K$@Eeb%(+OWfJJHq?EPQ9ivu^LoxhhnE?jXYCE2;=Fpt+BfX43)UEI{JwZo zVIRZyvJVmd(|<0|<{avkJuBICW9q!OAItuVd^Fzs{Ep1w z^Q!OX>i=8RQTadh^OC;Scr$xYQ|jCohF3h9`6lRhmi_%JW9A+kzo$ookHr1_ciI2; z^$g$XcT4^{e%h6e*gj>OdT{mChfm+Mu3LL`^K~}cyAS=N?VhTB-dgtR{y!|)G=FbfwpqNN&rxDRU;p;-j6Cn^dj}4P1H1);n=eKXX+dQXj&i21) z<;{(+cdpf~_dXuDX)RBic42ja-SS%}))oIZ{rjzw@vKm$=Itj-J$75C$!y;{HSx4t zvv;z?*T#PlY%;QUnU_TVyThL2&3N19`6|m*^3yXvalW&Y7fX11DAO_X=TDFNob5jA z*XGS}U-CQc_nMgfQ!YodHEW;#|Fa~feE$7ebH5fR{(t^^`}53Py}P^f{@#A~TXo~T znwHn^ULSi}82|9w^Qy1MzHa?JkNsI{F6Z{^dehpc_g=rd_4&1T-*cMs?^i#U-rM3- zTF#s+{PfPI6SC10zw_QGU7Dj=|8NhJ!46J$%Y;e>vu$=gd&E^2xbT_(Yn%A)`Te8& zXQ}hDDQ&M7x^?3DY}pNW9nEhZ&t&*s7(JiYxod}APJq&M>4rN`5)?`n#C?B#dD42$ ztIJ~+*UIlb_WI=K@R?O+?xG!9C*{~2T!MG?eGFJ2BWBR&Aj5ETiEYK_DgTo0X{+A+ zztN@fneZ~vrWFoH#1bQlX2+a(`1JahU+SBE^zR@2^NDlXU%tzKBrZR!UBT6GUQu6O z{lV{tLYMDe7kplB&>}8zsKa7ki(h`KwTh9?{Feo#Yj1y_-}TP*`1ZJ@8WUwXJp+Gh zo!|UVe(kQ0KCV9Bb52=DyWnS$jSq@-&b#YufA7R!&%H|c&>tZo`Q#49!#fgce&2V{ zW9ec&-Oc;O{lE8voB!Fmo_BoyFFL!tzNLG0L!o-bpLZR9eUJQ8OS1GSsy0r(!y7S8 zcR}>d-JSBk_WtxcpBKwF8I6GHm_c%;&;DW%?JL4 z4JY3Av!4IQ!{D;-vwEQYpKTWVMBA5_GlcB>?yuY+oAQIrsR zXq&a)RewoVn1T1cV+UT}`=#zaZ_6&p6OMn*3HiA{xW(jU7{{~6iBD#7whL3%aZA&! zIYtGyC!V|6DHyOww_R|?`aos5XC<@to;7r56nA9oHg5=+w6yX5@zX3fTz&Q@v$Y(S zNmGkvzOJKj@c?&+`e(6i4mTFch#Y8Gpg8|Q%opaDyIr^IO^iADQ+@W7`Aba`G9Kox zvN3u3Y-{M_%`URbJKm^z>1lOroRVDCcE$Iw9&@nCcJDOdD`v~~FU?hBh*abGWO7sd zf`I!=zMcD?80eIq_*GHTRmzgo5@B`udPTzto};cst5QFtozlN%_Moim_niKh^DN`c zPhR9Knl|mkZ8i;6^|e2R*1W%{$i3-~QseEw%8uf*;oCgJ6+HVsvs|=fJh3^i!)*lz zSHzw-EQ`M>Z&)a0a8l+hYr?Xf@ozoMSI8SX>|{vWd|pv5Dt7CpvvRi@nY@09G;qnO z)p5PxTM@X!cUolp&GyST4zA&zn8Pn075L^!(5r<{4Op){KYLA7cG0dh%S;BZFW(c} zjh4AE7o^H=b#^!v;q>?JEr}Dg0ok@(A8H+X^Un6gzu#PZh513#r~CtRm;F!n65h0@ z`=8d<>J@Lp9F~_Ea4u!dir!e8bIj!%_riaAkEH{YD#c?>C1;#{A>$Fi@H9-WcOz?# zcd2;Xy2P2ge7RJA?Y)pgF&^XK?* z-|#|w=0?)&u&;hWtqD9>&sm__jgVeezBWl(!md(J!kLU zXtVZV?3Wj!{~rj(-dviR}rKiR0&;7Rjis2WJ=ic*D z^mpbtmF}G$W80Va`Nqy=``3H&&gVaS`sz;a_zCOHz4m+Ufh?HdEDCNlpCupvdr{?l zDYicXdygHD+PD7K8RyT{8S}C)ui1Ki%e^lzN`HL(E_cZ-JF{xfs@?ZjKdyaRvdq>! zb=}?XoA%^ueYCQ=b^7zZ>#wgbjEnvl@+&0z*UOB4`8wWM?fv2Bx93Um@6NE7Dk6;q+<4yTJJKnJ1S{*vobM zlX0_^E&unA?dMAWot?iod{f+Pt)=JJAK_KF@+5J8wM|sK#R9h``9dC{T94YQw_*Y1 z4=Z;xpVwZ{G@bp|mZx0Z4SL$=fA6WS|7cUacVki2&+o7DH_d-hIqkOdm&3P3n{O7} zt-bm0tL37m@|}G5M30yFeW7wuv3%AY@N{mw6Ej(wOk`Qu6Nc)L{=w-t+}qvdkaXUq>y?wbDa zO`SCVwEdTAS2tfU^?rO_{rR^K-s{$UzjjS$`h$5NFJ8ELtYUB2ujDwNV|(px{eEoX zP+zmb$kAn|G*Sd`}*Zm%~vm#?|;5udGbQVhw~q6_uu)ms<`5QUCrFe zN7?txs%OsCdVb~4?98)e>!-edf7g3coZrXdC$rBkocXg#^Z2ExU2`PgUlerg4av(s zveRec7WP98&z?p)GR_hYsJOR0@!#6SlV(qJUd^@Zh+M4SBu(E= z?&_)x(g{BDQ19jY9XB65%33_ToALCL9krZy_Vq-hImR>?@a?EwR#a-J;3M60+ghXH zt!u+775AM>YA1ePvZHpTrPi;8L;;@19o_EC&ki@eWXRw-AW-_<>TFJ`p7@E+`G~{4)c%?|%~t+mUy04Hna_Sb-dFYWTiWAk`?p`H zGkG*KE}!ktmS-nEDf2#m`g+ffFLrC??^d!M|M~kS|9!@mqPuNM zF9dJw{FJrXwtDi$=fSh=)pq{MxFcVh{?<%;yU{D3U&<9p^D5fzEjDc^I~{GEY<~0F z``48}Bps&y%v7*E@8|dV#mZ9~&AXElcHWJjeEycto6z)<^={z9%9~}DgL`Hr%Z&f_ zqTEo|IEC>^_1_P-jT@wE{@KT#SpNSJ)A@gIbal3eSA5G~|F!=g|MnffroFQMUpXbc ze%ZT7wf)RBEiL5=4{bAQxTV%J+F;wo z^Z)VpZ}|N{_JvJi&6n6awVPVc?eAqtsppK1W2oTi?H5?SUE$$&g~Pu&X6w4lb9kKW zVBdI3w!xXLAz$$MagN758}=T2c9L|*oDJ)$9rzgB9OM}*n4Y+1aB{t1I?Bi? zu%G>d*aGnez5rG65=VWm1ua~``~N8Zyb@A!-E|i4wI(h-yNf$`PU$2But_qQ2F+z; zH(Id1K_=#wT0I+|WU6~WCs(e6`N5BFHM^&OekR;mxp#GEMCLiQ($bBaK2;@dxvSK~ zvOy+*p@zpLK|shl+v_iL(3PSkC5bDGHkF7amhJR*xVu4h`HYiC7;ZnySrjWEX1lRL zgxyPBW%V7i!>(luJea1PV4SdYo9goCdw4Bk{qpxQnB_CiR$npk6|3lmxr^1NcXT`x zc~rA0`K-g8Z;>5ej^A=gE_;;AaB{bp%j7paM>0!eiz2O-YaCXUQqjt|zR2fRBHLqC zEe2crZlC!`7KI1t+(@bZ3lP{%!IO|Azc-pV(i4>w<;XMg$xz6co+LawuID zymI;4X#TCbf=OCWpIpY2^O$WG|8kuzPaX|C)bg&PC0aP7eeWW}e^RdwzPe@G~Qo zFoC@%4}7^?mYq2}Uh$Tr(DaynFL!_adS~6yZMh!iYx5?~JN?)2UEpG0eus`oxh;x~ zwb@qT3z8(+H{Y2h8?fU1>5dW&PmfQUKM#GK9&!89I$77gXR-4x-P2aMdBg60L+0BJ z+*$0KtDSz`XgGh8t>H;-^6soUv8!TJKYg~)Qsd6@mP+25scxmyc*~*WoPy`N{+qnp zSL-o6O%T**sF}3Ob+-B3$Io*vcgdbn$epj--Y8O_@zZ%Wv)UToJ^YvDUcMZKjCzz0WTvuaUNl ztX;wXt9da`$2!@)2@{GKPbi;0#CY!Q1KGNJpVQx_{oQ_scaJaAsXd_+a~%2qMDM%Y zw@Xf9%MC-XViuWYKTD1Mp8s5P#oM+1^g&;n|CfT!e7y0x;*s;(Q+M27{Rrgi*tm1? z*5<9|+pF`O6X&w@9j}|!{IO2#-ScaFInvSsdv?5bu+(U0e0}fVhf-dT^cAU+oU8UG z|BlSjIXU5ZtIXPE7jviW+_B{t`=*%X-y+}d&p$SQ4*U6jZx+ePzAGxtYc}*6-8Kq{ zPv0#ZD|+Oq>n4Gd@ArjWU&B84N$(!-*u8x_zOz5uKjq;3bJrAGJT zEcqY4?4I<}Xv4mnpBT@VzYLjMfAP!eBd0-q$av{rt}`FW{atkWEl)oGqHtgD%a;~E z|7-9zUNdfbjrG0h&sY9_C;I&0`SnZR?oIoW@@dtt1LxOnef#><)#n?h{jc3L$#2(I zBRMPI&o66#<}dPJe{zeu|N7_OPyPvA)}5VMBmHCLi>TkWE^gVux6BRC3T^pQE%zt; zqVumSQSr;3{`z!g7GKrA2CjxD*8`e;UB2(ptu@r|;xa5qXSyG~{GRQ6^Zn003H_ zZGP@~qeV-ne5&SM@cwnymFlZ;9p>A6F5Yn1o&U@7sr|Fu_HFsmdpwGpKYX4OU-DAa z^Z6SF#@E(t)3(3_pg|svYCC2dC9bo6W0nl=j|^dk1s_G(e#;15sM&Jj={ELMhGV`=^ZTO{Hm}Xh;oZe> zmh;WKgU|Pz(~e|w|MZzzrSJXvt#2G~=L9c1ZqRXPNa8-|CUV%oxvk;w!`UR9&twLDZ^&sAxebR$mjf$j>u z3uogQ`}cMKJSrSH&;C%{_Y3FmAKbyx^1=DU2l0;C=@ATfY~>C6m^ZLaOFj57?8(jJ zO^K8H@@6jQRLV>VvrUj_Tz%Sc{vP9`>Ya@|jHjoh>0hopSi|0Ow&(S8ZZ%OK34<7h z)2RoH^l!wu^vq_Ia`$O(IP7TfKKRLJ1C26q#>S`*CjmlB1j6Rx^I?Ua#bLzlBF|yZt|IhV2#qo_FQ{ zRX+Ot-^-PMth);zvI^9*yy$1BVLf2Ig4^BgJ=2d|p6T|N>wnZ&x4r+rInwTb`29)! z|9`Jnl$)o}6My(wv;W5G|Ly^`O@Eiyvs>+FeW0oGhlQhm;puv|2jzm#%N3dxVrs+_ z|3osm>PdSWk@#CkC~xDPy+>L&Ua(!@R%zI+u+v3;;kl_fjUU+#s58Vd z?O-r)c+7U7;qio4+k8e2k%QgY4GSIm9K5m{rk_(~E}MS)$q_>>g$FzyTY7(|-feM| z`KGfr)=cnoM|`Z1MD@+!f8S<2-p;81^s6nii)6tx<*#B19(_Eqb4;Jr1ezqgp5R!? z)}wzQnR!zBa}jspKK2lXz;(+_tA*$K3G<)Um3qIZ@$n)h#xkpf5NoFUGLf^&En0YL zavF}ygjT32=r*e9#Gjmam|MYc^)$bkwoE+1Q(iO8Gl^`Ov#lY;BTvk?aL0-B=`(fB z4-~B^GTkskmVsgId7~XaJ?z5fD}EH^pQ6vW@2yK_T(Ma|jfaABr{tWJ*T*cgb}-J9 z-jMq6{e(}Flh&BzFiI}m^<>5F$md=AqVN5j#rQ~Yf>NpU3;pSWYx=kDGFT3=b#a?8q^*C?+rhPh;Z8%zykmS57&_TQ*taam zbzZ=zKJy-9C%*#YqqS2_ohCk&6ZI{re)8g&(1OJ2N0SotK55VRH){>o1+7cQD>54% zf77#CoUyn(-F@lTmA4|c{+BF>kEx!;+q= z@NIg#)UG^-du)65IkJ9?+HWRnupx29-!r$YbBcG>+Fn_>rTwJH*UfLdjOu*SZ)HuX z6X(xhc(Jtq>Ba+#wkW4arv=`8dx4wDi1N!|HhEPfV}+%yxWRbl1(7CG^zsebckQthxD}t;cGSOH`VG{_C97J=f$< z{5Af*@>2SY{4KkdX8gV`c*5@YwJX=>=J?Cq-XdeS;HsNf!>NuE366vWpNo=R3>Q`H z)n6{)XYLi7*~Vp8e%)pHHeD|Jng5OUFW4EhQSr_G?$-5OyO!K31aQf6b&)Q>) zM7g(ef1JPWVxFhn3*K!_5b{K2iLt}s;>G;e-q*;^w9384u=4IhcHW6= zA6AJk(2~ED@N@S2+w-2AIK86~q_u6g z%(SRw?DM8u-SD5ZG3d8>S>(kR9H(QS+sH5280GOi#bGAn;UX` zzw_oh{Ry7ul^b>{x%T~6$65O&<}c%aIzd?VUc~j7$Fh4jPwMOV=#?q&v{c^Z%H7lN zKFn;}?(pa9v5@2IPaeG8_U!MS*H<;~-Sk^~H(Im#_WKilGuQ3-zB!)r)y*q^Dna+W zT%TWY!|L+uiL+n*b9yNrdvEouf9)rpbYFQ`+Wsb9rSR{&$4`B?r29XM4>6B_esim4 zXu8#X-R3y|{&~^b-OC=R&;NM+=hw^63s?C(oBXqa!#3sA&TDz|?*G2EJ>34EUd2|k zXP@M5`K`YsZ@qrO+0Fa*?cL+=d$syBZ}!t0t0nd?+Nd*=KYH7fAK5%ETZ?ifW#`sZ zS*@93_aNeaO|0L`53}A$zvr3zq3G++uM5QIJ@4T95VM&*Y+vL4nf>hox|d}>9;*5D ziTSno>C?Bm_S|&;^X=4!uOEN@Hv5+ON9b6T?9BGK`mc}id{hlZBWA0VyWF6k-2|p_xr3?35zrJRk z@uk3@G4o=-SGlK)O{>xOV7pddk$L3%RYv#IYESQpm99K@XY;k=IxdaVxpzD3>hI3~ z^<>(VF5fNbk?u46?fF0L;`)_a^YQP*PoHgmKWG1yvOCx2*RIWbEdAF+a)aeP0_d7s=b1&SRZ^tv~Qi+P?SImbXjuQk^Re>zdAWaHojm;Rv;1x6 z#q+Xn*}uM>eRkXTA78)spO8Gib>sUfw%RXkHqSlN_1-(|$;!XKWKTYGNqt+8!D(t# zdE$4q8&m)Ey@8Ydd_EkYJf*s;Qor%(#+!_X*`%0UOn(Zs*PORIp4+>E&yn#&^euxc zC*HKqpToECSM=IC{);#Fb3Wn!z}uLre6(L!<*g>?r0*daldAn%B}5)iSofN7RWyeh z@yx!OB^olc_`_$!%@Qipn;8ZjEIze zO5HcR5VZuMoON{#A78N_C}Djg&**(%!_K1yaZI1@AA7i&vFP*r!jCVEXRccx@=Uzr zx9p?D3k4rTKD^_7@XKX(-6Zu5Td&F#szrwzAX zGYI;&v)yI$5IIrS7$>)3uSDU`l;*pk2aY~w^p@G6!+4k@r%d>fU6ONxk>fXhW=a=O`^OyEbh3)*aW@F51J_+-ZWc$8K=#zTO6;`lj=mG3=4d#?46Zm zbJH4Y&PLnInN}=2KDU84EZ^jMe;k=^tYFt~aJ1nx_6a^@+dh^D4EZ1?5cn-(S6yUFl}~FZbKhd=Z1Y?2G2l zQj|Qe_P#ERB&HpV4PMp!EOae3w7R>p!ik^cVOeVE9inWIxl3Xoi1b zk3#Di9>g>M*v??bs=zV(`-jQ@pU>4PSDvp{#}+ zV+H#J21&P$KYS{GY8kFel+`z$o!r0h^!1Hz_VXRR%`xfD9HF!oIt_Omj+~P^|8ASa z0z-wy^ZLg7-z@U!Hjq*lVz6DG^+=GX<=&+GVoFaROL$z=laun;!tlUof#iY1vu@0h zw_Mw(!Y!b`Ue%NB8{>)wPPX!=_T43?1x z9(X>HAR@*!gins%LHb&Fk-Z11@~ANRzbQU^C^5&FLF_ z0vZRZ*ovOszreM?d@oP*D(fJ7(}aM_*BjLytzye^kNQ2Gk<%r0!Jevw28Ig{nOLWU zAMkRx-5z-R+7C0kQ9lk8sey2qIo>}9+$ zwfxo<=knk$Pc2Wk^1a!xtKIjl_fbEC1ij^(&HAdZ$VSX`zZnwSy1->!|E$vM?`t;h zijL;lYU?F*D|FF{vI}1{7krAzS-0rs(%=JWk_LGPP8B(DT(!^1j-L=vdYMl(k|otV zlvzUkZ{zE59w+vV5iS$TbEcJ@e;knc-Z{_uN?m?!1HWOSL+;DZKkG8xw=*tcoF|?9 zXXfRC*uD1NW)23s`6jvNSu;x6W-%09DSKMb?r>N6_Gz{=c?b4b`3v-lu*PQXGLnm) z@=$TP^6$(8KaKP`8hUniTCAT@cT@fM$(%hIt+UN0JlW{}qwa9}tNV)tZ@K)MsN)(cyodV6SF$}*!IzT{+9$sEV2 z12h5&U z$^5F?ed1$>O2eYTnCSm5*XO zbbI`#$-g$;Z$9zNsm)Qxx!9`B-=~?B71cf6V6gQ0!;}+dtxtmNUf!GdXXpKix;k%< z7A?qr@N4tj1+P>89r-)|Nl*#TR(rAAd5=}U3eQ_SeUq5Yj3XZ-UkTkVOPu-T$2y((sTG@DsmG&s?;wj zC+DA8JbiK5zWd9km(71&+EpJ{_h1wAt3Lg>vX6TzW;plX(azc&bIiN(Ot}AYoA=8v z?Yw?ixoCZZ`st0ko`0@>uiM_ZG;iiN70$nvc77)xhs@u6Jt%K?+}+wr2kxT}wk65g z=D#`GH}}iG$a9BNa=eY7INIr6TA3-ukk<^zK!oyEEq+h`()_ z_J79d85f)iW~k?z@2I=u7G^G=C}&}JrxA9ua@y-vUXa=~l^hdZxlzmNCXS6_WQJNL@z`L{3jd(OE& ztJdIV!OXq;E^YoCBlq2S{{Hpiua}*_{QT|w)PGfF=Y(%BkCQxB?Qb?uJYU?e_jvZ_ z6M1uE8+ZL$Z2vvuUAdN4)0S)VQTBmN?=?P)?)?1J#(7^l`)_fE zUmQI@FFQPAc2{@zJ$+qDe#KRFhQ~9M=H{2(49|Sp&SJ&y+}m_c@Pg%hwvxR1Ap5m) zN8fwy+kI&I$CRW?zpg9m|DHVgY`pO!X5JRHz0C}Pt0v9Z;}-a0!3Z7n%^#{)W6Xuo_QLtfPJ%$zrb?Y5<7)+j7&$ry=r~* z_xy&K_)|5q4R84wYWP20t9STuEPhqoxs~&6e#RWS%J}e^=AnuMe?IPxsQb77P|@H0 zhZk|H{3+JiUC&tg{k-CPjYE^CuZq8U`t>$C{@tMO%x$U)} zBG&K9NL{4sNfez$qU-SGU? z-RHaSd;FQ5tMz~J;&i8d>m&u zzg|+|OYl2kn+H~xTSTt@cE9jLlh5D&^u>$4+g9j3we@?yBW}YRd)5#06&~iU&}*n+ zd!XyEpZh^P;}30y?F@2`&$mBG|Ns7Z#h2UcCw@q_o!-9S^lk>GX|wMitNFWK@Vh_b zU&)5(j62FXdV*%`FFr}C{NYIaE%fkFvBSM%HJ@)^c$q!nY;eMkwjTWj552pTyTPS$D0L5m!9Abh&;z7vVE})V*%sD;}AR>j8SVxM>YDxD%cPqVKkV$}iZd!KhrV&pw_?3d+T?k5bI48mny5>Ho&x(E8$ zoHt)7w^Z-RRa1lSMIM=zy;~Xl(pKdyc)saWq)QCjJQKllpKpaTc1my@o8|OU@?N4s z#$v}?*Jn6PGHx(f+{<^|Puud@*?FcPvKSlWv+i{qn53L@{LVeAr>j!;J(imhx2)sD zo_#hsjRg}KUd$>NkkGj6P$+iu?z-d^Z#TaQRJzW5V8dy_bIy6ocfM+Sy7pMT-{C+3 z-AP58)8>5L(6HUOA;g(=ejDQip1AFLN|v`aX04jEZpL8z1nR;vf z^%uU!mwXEKJ8_PojMHP{8)dByi`PpUSF}Ef{*robS8lEH_Ro_pix$+oa0gxfl4EdT z{q*&X-zUX{vUQZbaqM(C{cFDLBDS23|75mV#xsSBJ}A0$Jfx3ty$Dky-->f7XN^v$ z1s7i_6=f_rDR`xL?^@r(+rIJ7WIX%e%O!T+AIVnPxssoc$2^soek-4ic~g+>$uhMC zC@46T3v^PcIRi0Y`_JX85Ehstf=IbVn)nB$7N ztwBy@+wVI}CmRlzWUw~BTYJ_g>|VKVk#=(T*Z(&@MgH2dfFW)6VQwEb1zXm;=1)y7 zMNQk-qEl~uWbqc>)7MW;cPpEE|4i`b+rRkEKCJkcvF-M+gqsVVe3{Fimyx2Z=bN|w z(~hs|QlGnI9~oK9zq9;op6O@NY5DKMAH9l9IrTRzkpI)exit=}*V}{})Gpp6H8W!N zZJAR)7oNT`>Gkz9d+)4P{N64UIPX}k#>dNjvtLH>Yv@jy|511qZ_ba0|Jr`t5nK>| zyTqn!lV5c0+Wd_+Kk6hd#VkEJ`XPh!r>%vmvbVOR zsh?7P6}&9i_tqhvt(LEMuV*{UxZ}K;*_rFI7SlFQsGC`9_&d$)e%|jdvBxglsHtA} zn`654YME1Rey^MV*~(^=wr~Ez+Ijl${pVI+Z%tfR{`BRmkEgy^od+#P`ZaY~@%De8 zUR?R``L)~LT_ww8<2&vh*>L6bW8W=@XRk`vpMNg<(%vhx<@RXFXXpM}m0E54qV{|6 zv#BrrKhIsZ==-F4)Avu;&fW6ucj>FQr{l6G$Jy@dcw;&L#k;%5A4ko6H}z}EOuN6e zPi;fY!ZTEY5KDXTWeErj>JFaFNvaPH7 z`9Y{_=}Vo~HQ<bMN&s|Mao)!=&u~49iCx1wXCKgm&z&-_ZB?pKU*OMni+@E!-MYzJTR$dcuF;RUWxMp_ zx1*ogzC2BX=?xZFapo=KZ<;T3)C8+4&fSnjH--Hk1rxzbz zJ{7b3dgP?6SLOF734A_R`SV{+}(*4(;)$INC{Z`uAn)%Q7 z7R%J$xbg0N`SEXarfW>vZ>S!0ULZbvis?^*P4Z!Z-*t8rdCS>&o{;bU$$$LScXNiS z6AOx&XHK_|KF@0^RjH}=T((Vw;b2W;|(sv;3SOZ7KflVAG9306F$2wG55-M4aaQ6razL}DHB&3Yt(I1ZT>-#%z zr`I=F>}Nh9CuM%&sh~^4!*^1Tp9SaW@1Olm{ULM9+lCF5j5psI#@I5KEI#~r`UL^O zZQN}F8*6PG%Z>AvXSW=;Z$2W<5SLK-UU;fE!)d=qOS(QT__+4G;IX}D=I?KP`pcZ* zFPlPqd&UuoeSI4$TOPiR?%Dq}=(zUO+p`%zCmveEZNMk-ykUdn#@#H-{<58}>wYL8 z;959=d0Os~Z&}?tdS>LY@7#UUL7rW9p3aQNEE73*uV!_Q*l^#yN1Rzt-o1r!$L_w0 zkCg}R_CEM%&3w!-soL`Kvz-Z>eR9590_Lo2I`8D&4=Fg2h;^p^GrN#Z!Em%^$_vWle${QA6zJ7Y$`mOE$x2umaUlvv^ z*k-}-&9JuQid*ff)CE@__X|oJ{Bgg#Yt7YzpEvM%*dOJ8zF)3zZsmf54@FN|UxrPc zHpl z9)BaE_-4!G>`4DR%E=*l#4UzF{}V z38C*R0#z2D)_xv%V0Y!;Qw@(VT)UWdAj{guL6p;F-od%g95#NEdceJQe$nsfn>=CB z0k=;d*dlbPx5A^6SN!JAt-cSg6nbsqyUp|D-m-Mwmgq$n(|$@?XlCVJXF4$T$%W3J zyJu~W4_Gu`{D7y=+nACGmn1q0+;ndr_&v?;p6Z4>6|6neMFVa&Og{GJNKfc;-{ptY zPA+bUG+*gE&02vg%jAPjIfLpcvv&$si(Qt+@v(&YC3x~mcih@lSSDuX@RVnp9-kw# zUhc&&2Pe$k#Mn&>SpA%9AR!?n&Dn{#&E^v8u3e}%x5JsB8$a~cVGH(B#(K5 zUU658+_O8!-BlL+jQQ==`Ajz;V^{d6E&oIs5)^KoS^d(%B;o(UTg%ustO)b2ffVJoPmq zW?tC@j^5y>mw&VNUiYXxvTE|v0-jy>Y`o7;DY3bBJZ1UX_p6?r4csPp$l>wAO+i;w zubAbW@Q+{PKl#nh+`h6UOLt|xEUxr1K2XCp-+NAWwERil6#j{ym?qhBCNs7!Z`KQn z?&{B&zr0rK62l|Y>&|Ds%{;5KOH1S5xwLst7?ghi7YCST;Y-{jJo` zytfUFm-r{Xy2mj2?i}BpJsn&f=U$#t)X|nMm#Q~9&w7*3t!kaQe0k;cZzs$aZCpIJ zX7*1`&RKj8E36i+sGWKws^ZKalWpf;Rw(n&zMkQmZIr82?6KCrn8Vv$O)cIoW#LPv zY0JOeUT`KcW`CmXvtJ*KIVyw0uU$MA*7@7`@8{xdIqx&~p4!QpW%jMJi8Hh}@w@ri zHEiKjz|32|u_{B+7TzKkypx!XSneEqV5&!)ZL zZNM`po4!S_Dl8u~e3=m6ts3?>diS4SOBOCKPGRpm^&zu5@|9Pl(__*8*V=z% zZf*vZXZ6XMxf<4&UklE@ZmxSc14BjY%>>HFOOZ-OygI`|$Q87k&A4t9u3an4CQQZ5xZ_g}uRh zzWr+1Zn;MO*k|2I;qen5m`wM`eICEkl7HRlS#`y`zn0wkqO!w8=e&se=AgK?j9U|@ ziFD~ya!$N_^U{gNb-6{gmQ~*x9@`zL;h!Qt{r&4R-f`Rhq@30)TVi{<_36pePJ6Z_ zRZ8gYw7d3yji2-+;nUY*#E!jgt21V}J1=}o;MLmMvt`z-uZ;a{mG$h~4+w}D7#lOEyTP9(}T9tOJkfr$9{a2^*q%Rv^i!Hh<68r2eSC00YcN0G) zZKzrDXUBPiJEt!d?l+ysYh$-Nea}6^`WJVeSN$>!jj5WPc|Pq&S>nxa#|+MGHs8)S zw>l@d`t5(M&*y$mTUu3i2*@~t})`}wyqF0c6Z_SNMI>AdUyYoC98bvyNv#DnOj zXAEc4Y&N`}X=tspxnbkmhHGo4T>PPOH2BIEvBVhD_x=la^*MifD869lPq|9|)}I?W zC%ogW?whr)Syo1O>z~BQ4$q%jGoDwSATN_~eR1Ql_FF%KH0LsYY83H#$Z^KMQhLJQ z6aEj@2i~nq_55xBwxG!=?0C%lWmR3T;zK4iGbCPFqHf4=n9oR~jkjcT_oB~Dy*BQ5 z^dgpN`?SkWTfuRdr$thUTSQqzIwPdThUwf#&S{#~DbLnFdiT@3u>8C9j8bOTt~0s< zImaa@@V0&65pruO>`(k7vZ3wO6VA?k zwA#LPkFvyKg=37XoVS&CzmN%06SZ}DQFp-TeM92G4L?~N8#h$)+3aewnOX8#JlSzoBQC?o7K=w<{ispw+(mMa`c<>^cxDLH=gO5 zK3})uW8|h6zjxotTxPq#ia|<%t+A!y@LdkUggeVjK09u_xpaX&*TI9^wycY|*?oNL z=X-loyx*l;zFkvX&8Tsv@#^Lm4ziqoPh5~@wVf-aniH0&JpZgr)t_6RZJ6cm*xFb9 z+VjTu^zyg87TKF3jQ#3b9-qyy;ZAR#HT`(c<3Ekx4lop+uWX;S|DAh`y>zVf!`|?7 z$4?*meDl=D#d)z>l?-J}3$NFGx)^wO#{ZCewF(~|uXy}*XaA|5BHh1*_x@(Qo3`y# zR`2@XKW*22cJElvQU*F)w*)+jl#hJB?>?1D@Behxc}_g9UHe*ouV%q+C0B?2Zl%S& z4EGp6v@`q@Q@GC{u<&y|(+7RVKN6*mU7tO>xlg|>X1IRgr(}wR;$v@~-P%0j*Kh3k z%XIiC_Zj{5g})!$^3A{d=$TT&&RXfyci%fbzU}Zw=0NZZBZtT4M*3W_b?m3@oF1E& z)GfepX6 zpCq0}YJp*ft1% zIuvbkMo3qHb57#ZDZH=Wyj}d&Q(K)WB9G(BN{xmViQrfplX(%};OKK`@kHt+fDke*;9@GjtTJFkJASL*a{CmeE4E_aFk$Hrt9 z=Pi3S(d^0=?(KUSSGJwfU%xpmAg?RJ_SuV9OQtW~Yi7A?_f**xvStoD8u)fkxwB}O z^op6v4Q7J5&TO-v9TqsmaOU@sd^Q%d1x9^266zuh8@5&#uW-DieU{JLkYUr4j#EqH zZeF}OCq*|jY*)%%a|S);icQTMZI&A>U)9E?7tT3Bc|(s#LK>^%<*1E8^|{xs@@k}f z7nvZaWjOPMg}A_Cg|LJSHqESyF9S|%Dny^&eogshCR^&i|2Kb6kBgk9Vk`3djIvVk z+O6O1e$NShziQpPq{%sUQHvBlJ$lsSka?j&ZC1tw2FrKy3no4*UvYD8)*?oBDbq$K zmW+y4W=B;M#wL-1o3FgL-RQ3hpS$Ywo$B>ljf|DE>noFlwP$)h z6quWvn}09(eBQSxdUC$&HAyY+tMdvDT|GTvePb7t3_&z~DC+uIK%Z&m$S(35oA z;~wh~*^4*AGv3CRy=b|4`3?WYV;^HbYaIA;>3D9qz$%+Aot6Jv8$^ok<@mo7XT6eY zoj55+<@3s;#~MGmR$V)lq+mMb&FsZRH&}nK&bh;Jwd_SqZZ#u6-`gKck8KXKmN=%; zf5~lIw)*zPO56F3r~Wisu>R(Kq1Jh2oHN%kYD}zI8?SLwd16lZrZ;acG_W1Xx_aLF z%AbegsdqNoo&Bd(eeLHxt`ow!yMo+rO?@2Z&a1(rSsa}pWbF3K#NxwG_{ z_S2tt_;Pm7%6{X|wXAdNnTiwa^)eT7PH6m%3@qDks$j|XYyHz%Z1)PU8+h+&$(n!a z#_U{vmM%rxgAFOGgM}r{YrEK1xVq#$OR&s5!@gJH*|TqD2A3=rT)BVto;3fXOKE#E z942|z&Eo$i_$6mr?v9hYLf1v!F0Q|1R-amVqqSzO%QxAqS&N$+&b+_Hs4Rb0^v`SN z@Jq*d9=SJ`U7xqKv@|inOn%X!ef4Y|#ql}6mVSJ3?2OUAXC_P6wNL3q>WQ=d-# zH1gQGasRdQ$~jE4etI!SZ2PGFdRNoD&A+>>rtSFYKT$gCSKFp{t8VYPDs9Yl(_*2A zbzJ(UqwD_un9#c@dE3h~r=qmyf3stmF_fRO^-%HVyuwf1Ph79lf(~ z9_t(bUBPdH)8~EMDWH8b-@5eJEAH4A=B-w0ADrelJvs9I{OX?jEU#v|#<#b(@#tSa zfBDL{C%3ix;}h*(e~N4OJNYPNU){gw%R~8}7Qfs2(eR3Q`Kw!+lD{=S?c8&vcHXZ0 zmroX#__0?TRjshKIP3iD?Qe(memd6QSKWR3I%byK`hUBgzg$@L_{`tn%d3iw-h6!U zzF6wN-jmDrOZcBZx&Aov0{hXjX_~YD)YdUaIpp{6kE>gsZ0@h?`r-A3E-{POl@&Ta z%N`ijS~_s|29%#YF^!SOMke6k&aRRxJ1hIwzp(s&tM-xU#t)~S{O)B;<_%cA)21lf z?B|bfoHOsgSU3OGx&hV~ z%9q+SCg1y8G-rKxtElg%av#`Ke^%BHuD|>Ibk%{}CqF-J`c#@culnmm;g_~w=WX9qY4he}>(ev4 z-sk>v{xV^1?mNz`BcFtSdOvqlmbR5smXa%alu^le^8J+e8~-1xu_|lW-!i5Cg#-)R zYW{8MuEoFJ_)EQE_}!ql;!a(*%dK<+6$ML{-u=qVyGv&@Xug*;-0*z|}UDp9s8J@vTo>b+>TE8 zt*DeIn7>|NoAI-|rX?b4q!V`DKJm~lqvCfm=lAO!RxdV0Zd`F{PxQuhT>{rk+@-%q zET2B(DYMH@&9=AqlVs9b(*FxTDgPIBI6OY7xVE*BId;0|G2a#)Z5Q!1?ba*&HtBg* zY?54P&TOC;F};DYDUoM_!VG@F^?dq;wW=NR@(M*0UZ-bXKKW1Yt^bZHp~AlrNd{i{r;nhdX{x7yRsK*vEK#HA8RL@9+bA z)-RsHB%#h2vOvP{eQ>pYu~hBy+yh%!8#)f#_Rn%{4zgQq*?m*!_eG zNqO7ZTP$xgboKJ}Cd*Eb`F>C1)aFq8;)F*x?VdkR57_Igs=YLErlJ2n+dV!reyly+ z|4m1Iz4*&pmI9^HKVz)s|CPLMJz?_CeU~R{FaLUe>%_DDpKG3HJd6BXv)uFN49N?R zUxu^V{TJT8^T+)^m*&hD-*ur?uVf+j-&+@18|oHv$G&h9-*w@+$9(l4e=a{;d;cHb z?$csF-^u^}&=}6JkMTh~(~sv3`*>sd8UATD+-Lky&;DVr+WGsxuRG?|TfCZ_&vZcP z{{PEQgsy(AmRM(ZsKEANZ~dn0`v3DqPM>c6^XRbHdI{U&;OOfgqpPXOp za_-u*kNpGVq}{(XL-HHGy0X>rU#MV?-QTj~zS6qwH*EfL9!hK9vEMCbo#3(Q6JDy8 z)Hdx1&-lai$Wd6L%3MKC=}{85n(?I9@40ld9E?v?ILrvrNQ-3(lif7^X#Qb`+HK-y zm)Gi>KDf>-v|{45eKr$jG0xp{^S6dmLfj1f1bSaLgK_q)$7yEZ;2ZUO*p##t%Syk&I#_XPa1~Z zG^yFJ*-L}B`R1C~PrIs^1N<4BD7HGbv^GtVeXTi&!(Rc9 z125N1R=xDer_|%ysYSZt^gc*h9*o{`)t<~ zj-7mS!WzEU9BBA>l&@yf!9zutw&k7?TN9f8s_6KvhPI<@oFAQo=NIYz-p0josqy_` zm&a1yD_7QtM9({(VOpywA7Sah@a5z`=~>br7D_UO1gLGwJ99GaxU-hE{H?$hGHnO< z*#$&@J9Vz!>pRDjyLk>LYZ)CFon8n1j$@pn&BZY1H&3HO_Lbsojt)07SG=BR8^HOK zfz6@6VN1yMWwW_XrmVH`m^SrFvs}=EdyOd*?KkV@lrIgPJAK{!nUd=A=^I}cKRtgd z?#IuNaM6>2_q6p*gDU*=ZMD>Q>IY z`}k+yNsp+?2)R9qOJzPy{;Bu9Lhdrh{3qF|pYGiJwbH)k#N?aH8eh3ua~(akY1ik7 zjPEzzJxlkpSJ?Tv(ZTiKvE@$_bI)v3y;O7jiTnkIl)s5KHtu#XY8d|a~%uUF_NTQk^;XZ@NgUBC8R*@@2j`P%HVGv9_C10v=et*w{~G_2{WoF@ zHn;`^sHZvHtQ#rc{4*3W*v^2^+XA9JFfJ-o8j z-)Udm-am26d)hx)s_*x|%wKi>+mqjsyook<>+afA2QMzJ^n5P)zv};l99`djIqm%O z@6{(Rt$(LDuja1*$6GVqs9VL z%LRI$KWOt`&vg5gaNFqpw0Xu3?>iosJvE9y{_oc|vj^)MC$s7rh^@%YJm2Cccg*x09zUg_mwlpQdy8>eI6} zJuBD)B|ctC_fOZY-!{3<#_+*!w%jGCPp%CF-;zyJB|*E_fWzsL8p@Qi-r_g{@qQ_uf0 z5MA(l@24NuuLZZuU!PuIy{~%Dw`Uc9Zf-uh-uV01&y()$`LyukvhZ&!f4cS0D)g22 z&|Z=K@ZU^h{;s93IhL0jtl&)C>ZV-3;-}hdTXW0#6KWNY>MNO^H*7xH&dF+Ut~yBK zPwsUcC#$I|WkhT5EZMK9Egipk#q)3Br?<3#n7&}RQY#R+X>M?jw!yjsM(iydt$jk}4iU;u za}0f}754OJR*5&+mX#}~`B=PQIVdV7yCLa71LNkt4#9}jqXusbPRXjAi6}iHlz(ZS zO6tFo#Qp*$E(4S_1}2!?El3jvVF$9KLUxH5C8h4ZE$)Px(fu0YTI9y|Kn;m zf4A{wT;iQ2!M_eO@XYSmpm*VGL#e3F>yFZ!4k->C%!h=J_H>knu3f#pp%r|z+7xxvgB-oXneSW?8 z($^E`EBCAyl zd+z5qW3Os=ABa78yDscvw(@D?MQ&oxtCu@oIWBm#`lqz)^WRoin9lew-)J?*Z+b-? zduSYwlYRL0^U^;5W?0368%m(I)AeQC41YnbCJ^U7!>NQqh6>pSm5-Y&PQAYxuYUdE zmt{%6Tdyt^W-#|~_*~EM;QK_S3GONZKfD>@**`F=ly7|SQ~uq@-T%G5rvFc#6<_nU ze)pr_^;zrQ^%s7<8hxbsh5avkjRsEnKkN_wsfRP%WB9=G`Y*4Fi^3m~lc}bPJ6F_m zJosDlmhHm#g|GW3C~f0!sN;TJ*IfFY?a{wvo^bn1Z^iFT{#wxb^r`rQLT=6jyZA1w zxbRc#b>4w0`=q)b}ITr;7;xtM;Z>Z z`JJrvau61r`!qdwRgmM#K!!I#bwwTu-zSt8uc>BeXOS^ySmvs+eZ`p*4DwS|l)J<7 ztr%F7*vi{ipIQAfh%GnkOu~;2DapDuU-fpS%l+FJXPl6C;?LUZDKEMT8;>w=xRWNJ z`F;8wxuce;Z>N4$aAR6~{7JwTSzbl?zxfIu*eo)4i)`|nl{anIvsdlDPt~8*rLZ&e zL{B+!hUeb-i!Vxdcx`&p@lB*L{4wJujSW%;W}k!k`c8ZeZfz4>Waw_sUt<57{dL&O zW~cqZw@>a`y~p#`+(}IC?N`=y%(R`n`=xq^2&YQc-#CR`4yPSCcfMiDNV`8_tM{|` z=P~YH$q&>dC;!o1Rnhrx&fx%&cAfVj#oM+r%sCmiDVFo*|0RZ|6QAwrvgOT)Ra|&) zGUEjX-2;hUH*Pp@yPoFX&SjTNb@Jqbbd?!HGel75qI@xV`De*`I8i?(Ry9%dI(6U%0L^VadK_DSB&S zJ>tDS8zdC7GKYTkP*;i1e(qaUGNbKtBG(DFn_C-iE$rhw$?jKaQmlGO^zl^w_YJ1K zn|CgaU3yB3>y)G5(e2s0Ryqi*E@XP`?QoYPC3lATZH7u7p;y|BUk^yFO+DfMR zm#?7V?F$c{sArfzj+lLEuM+qC>1TD{7MA`Lb6li)S$DI2#_QLY#ViF)XV+cJdfxTt z^WH<-cG)a__WJFaz^GSGuDy?VW*e}bBlfZ3oTsu;k)P+>f2F!F{^D?q1WX#lg9y{?HPcL`Q^sY01cQ;krC;h9s{%6mo%KMF% zi&s8&kaXssx_z1akz4Dfc8k8Q31m6G+sDy}=Vsk4>#(`%)6P~-+h>_^_({qx#jSF^ zwu=H{Y7`tSd3>|})%m+8Yj>1iJ3sHNjnTt1+Wl{T#=gstTHrU&@^aGt&9Tpa2AA7& z+S_f(oVD*@?WOPf3*L1t`xvsxH>vvh{f&DKq-0CX8os_F(!ueHEvy zE8fo@lrB)6%>MV!`sx25W#5-*@46ZPOup=LJ~ngVo51sX^Q7$8)L!~@e(C=$>*3 zJ~ez=Clu$$`}Ipz#il#wzPw1enYXIY=zMX_yx(`Ve=po)*Z=aYre)c(%?y60PuSo0 zet()P{nCard+WaLlRx|1de7Grd+o~C&z;P^{9%!0t-sv!TeIVP@0#pB`FM&>&ChvN zn<_o(p8qo0|F367;EuDV%v%H)yt5sW<(=OfmR;Ds_wTofQ){cgymHN(v-tYd7nkNf zI@>YrcYnj1Iqg?xR#u;pNIbn}n)vBW?ElO^eXaK}uZiDa#A9N=(5dju-qc+A7`Zw6 zx-X~v=AP7EH@`mr;vw%J{(;K#?<>oyzwh7k+-UE-g85taG-z30cHf=0E9F;8;Qh$; zKh9r2dumfvv|ZD!X*%%_cKE)PdY=At?G*Lb4NEz{ob-MbroP~6;e9{by<2{L|Hb^a zrXk?3#D}-j6i=C6R#bkRSdzK+-m`56wJFv~-*Yl=F}!$Zb7a}QJNl7rG4bB#zwhiX z*e%6BaouLU-YN69o0i=Bc#)B5qIfuKzDR7BFr8d-=W3t1EAq>bDnH ze$7$&{P?r&QUA>SF`Y9+UoPC~H*u*=-nxvLH+OCM`PnvOm&$oj&ZcALN?mG3I~k9= zce%;2C7jr&?$z38Y z(fAL~XDdb{=alBk%B~InjoSM6wLbkP&D1GjW`AVEU(U8fwrA2h`ujVcemfoU)jgn6 z{BT|O)2HDZ-|gqnF>XtAoWU0{t)ujw1E2A+0&dRg7SBRcrjL7d4<&NXz1M8_SM$;5 z=&SmB*<;1;?B|(L&dqS*?`q~}e|yfR9eh@G@R{2N8KE83u}UGVryT{~hoAV{WxDQy zX~G>A2FLaD^@{!%_22EbWPGT8P)}=`++P$wwdPy+}X?WOx8d?$hmK_(y@l$(-}W{b{(+uOXC;0t(|bk<;^=2=7YYCIckE& z9DB`oeONL7-BOO1Hq4JB1r74pR=D{@`%b*(T{nln|B_9x!1U#3O{zBgd!JssRi0OV z(<__cEjLxpNB!+6e#Lw8^O5gW${Obbsuq{!w`{838@c)X{pXL<6PI^fz9|^Mc)Z9g zQupahmcF#en{WDV>)ZbK3-60r9$Yi8ub_^PrkNHAzFIHN&|LGqpVj<+Ou_fV4G*IPmMPBHs^q^Kogn(c%AxIf z1Cx=CN8q`)J@39V?3rEpN2@{iQDXB`Gld+Mc7Aoq`CVQeLen{4znv~PJ-y?!>7%+s zRpJKwZ4&l!cYNmRHB{vK%Jnw#mWz-=vyu;^5uZcIi%9_yN}m!+HXXNMywTe)%^`zZD;o!i@CRf_1N+QUvxf-9IM&&yYJKX zul|qvPji>-KXG-AjCa?jvzxRSa`?C#ru3)r|JmSr>+it?rQ#Z2ha1N&snSN zrr>H-Kk26n(PJmvOUs^|zPk=M+o(y)4OASu}WX0^h7MJK#2Kw@jiwH!U9fg>w=F| zce9|bu!8BS<-eE4R$rr)nS&ku*>X1$#M z%t!uJ{x$8TX1be-e@0c$%GFws5hC~a)t6HT&M1C=s(Djxjma0zr`(%fUorQt-&!CQ zCjXxKbFyMg^%J{TK5;{}jPk@{j)s>k3_7KIgtPp&=?iVrliGjfp6kC9ZJ%jN^&blo-`+)N;EZFcdKuvjy$vCH0Fpkc42jE zN;i6(7gODHMsm}+qi<#h|DJLxU-7bK?)sT`DvLY5+Gku#{PuHWj`fkhQ(mu?+%flc zgSho70h`(?`g;@*Uw^hB?qq`t;l=Qy=peAME)M*{n?_L-}5)e z`p#eQsp`nYiT%&qucdFfr~h^9pCs+YX?+SMSTW z`>tlRb+x{{Rmii2-=;r(uWZ1f)$h*ET)C;zM0V4{g?saBCpIo}e-Q9`xq3zVgF`S(d&9^jAWJ7+id-!r?quc35%wNUz%eOf@bc)12X^3hsVrV#<`{FJ`nFqsd zmQBh}XKm-7q|dvhGT`<6wCLbx3~Ag-FN@aYOJqxmEo?c?9@~&tzxn4}Lx*C~71Fm` zXH7Zw#%Q|n-zPhnuh0B;+$CVYvX(;G^3P`%^4W;pwhfs%b>oz0(XBx!4e|DVY-DPjH2Kf5wgetyuF*Izwn(@f!7^YuF!v(&u~ub&+!_pkKc^y0o7 zy=U0j4S1TTzp;25U0?B)Ib1z%#PwuRfmgmlrU!=N7*}>%Xoai=EnI)? z_CVX~Qqv#j=Ka*o;O9Gcz2dFk48~P|c3MtZYc3|w_4)AcxKC%FCDg3F?zG}%+XTnQ zk`Zw=_nydqU?^ekX`i4pkJ7;dbo*HT&UTV@P5STgl6j4>-P#3j<_5ZQUP>yGQZ~qAJ#6Rd zw7upz^9F^40EHITRnl*!>nHb{Z}4MoV~lW}WbY8bR~yc%#KgDjU_-iuc!G4?qgTJ! zCD!lnudM4!{m*`(^ia+3-w}NG4=HG;Fh1FERBAmV>!URtRSriOKkrJo%JD+>*y{O7 zdn&~*e-leAZZF+=%%om$lgxtK<%T`hC;oE8+*hvq!Se8%_60=-^ZUn(z6L!y&oGg3 zwcDHJ%-0f+{mW}T!FbuN^moaDtG-A0y4QJ6Nfgm3?sDs!&bTSQFe2>EeLo3v=4H7a zf|njQq?-%7#dhi5y?z zJ^!?k?_}z)NWb@MPxha&xm7gRLVw=e8^+7;iRj4Yr+lpWIdl2clY0uPf10zVJg|Hb zdAi)Sx9{BBCzrQv?vXq2(i$nhIv!XFTuOjPtqG~8~!{# zRlQtuz4_rEIWL61{(W`=64<6)61m}Boa5vE2?w5+gQf&E8_XGGH{7f5sAPC|c>2b7?h^}ozrLFt z@jbqIUB1I~&caB+?}D%YHdycn#1_Rp+b6T>NAA~K7sQ!jw=#Gk`#QOlFaEb9+t$$eh+AG`l;MClS zq1*|v#X-^kl@|1*y{p+%S9-mUr zyy^T~%an%llnwSpyMt~XE`4-Trb*~hY4?O&ho=^cU0(AAPt{kk{%e-9G|6lCGiM#1 z9Qp4J_m~U0ee#!BwQ*`CcXh?4OjJ%#X6Amp@6=m312QBc(&~JjK)&-iH7c${zcO)oF!RO%?_1ZQgSd8EH`#ov66p*k;5UEKe`%$ zFLdiA7bvd(J)K#cA<$Q_gY(5IclP*{*`a*98Ke>xbFO6kp>FFr!(yeGtH$1&%vbNY zX6~Kk@Fg^z|7v5ztMq?7OO2dr_jPV~CA(mme%P}apU+z98vd30)F|XS-*-Ce*8|Lx z9GSUJ|7_zGcs6U<57DCAVhx{eJT#oZcjNP#{*9-?)}H;me6ChryUCPI$xqK#%BOyvNr{ z>SArX-IpUZXF+8P6YGarrCK+2w+kEh8z1U1pY2s~r||8q8}d88Dc9X#f5G^2X+*a5 zuGnWTDZhRG+dSBJCU}Rh$@$8NJiYpDD{acP|4#puWhNvT@47srdBVwVv`uXA=o*p!NAtD(NX|`OuXp`N% z*RsC)xy#jW{tVi8GjK;?!_4ycT)Z4JkIz&*dsb!Ap4`5J>>oZ@PrhPQ_34}RAud;; zoi{BO=$tfvA91DMdtQkAYU{}p^1gm+Tw$ABTzkp**=^?4{U>hDbz0MW=iQ|Zfwz|3 zNZYnk{Y$Wictu>U!K3KopxE$-u9Kx&-0%S?)oONPv`E+JwLbp z+<3hvZvElwE7Sk(nz-Zl@>_FGSIPdI`}l3hyydsnPH)%0ZdY4ff61=8@0@Km!)e~E zlx#NcevbwBUjIpF$Z}-8E%hL*s46;ZYqqUj%cURJP1`(nq^_CNZzWeGk?34ds_OL=yofEn5M-Bo7c!^{SU6asGlg2acgdW?5Bje@AqDk zjF|pV$9mQ5my_A&?@s;g6xR1NyT~fsU+@0)^9N4PyqxJX7 zHcBr)UY&pDP4CHXC;uMlxczx!NnTxj*1buog zk1K2*ykCB8-`fkh8msO%pVFww_`79K^MW(rc8=UHz`iq)%Izwp}3*LPR{&sY9>Ylrp4 zX*$mq1WbJu&HZKNfh`QPr7t~am2y8J#FTWysgQN!%>sdz9Gz)4Gh9EHKWpn^TBG=2 zL(WFtrVTZc{_E)H(C5_kP%_(9N^O}1RqvGH7->!lMq z2h$Axe0z|7x6UMf!K-wkw<|WCi@fNvQRYw2;amYtWsT+wmCMqMc^`k=m@mFOjr-f| zpAEa;|9mU^^{eNLD?MkQ+}@pEWMC<&|7Y8g%ALJ3zIJ;j&QA|KUgWdjt=vz+OXttM zKC_;6{`WNd=X??#SKRpg673y2`P%R5x49QxPMy9cj`>F7 z=W9(B0y^878}u1}?Vj*3x8*FGRbNLo%QWVay{=62{yQ_=XL`aV^p5eb;I-e9?6C&* ze?l4Vx4fFpSj*KbTq2kelF@VF>K=K0#+_&HZ;zByc4;foR1OajK2fyuGLO*|mRqrM z9d&tUD_@D-z0BGn`JzZ~Qqt$oF1zLlcR1F&pMUn%s_e!A8H+qyznH4ilMkxTQNQr4 zGHY$0vf}4oA)O~API9`*U1i#~=)EgjS-+pBo=s&OhfGp-1sj{m1?M}9-J;Y2*0H;b zNCt;|;qmZ$;O_Z7;lUrCeUp4o-DbEu>H0-(1qqFb+}s|WvI#5;LR=Z=GkZ+z+|Jo@ zuBu!_cILY2FZx!z&1Nu)4R-m&v>?v-LY;4EPMyEzFB|IzTt7}9=uzGvr%`0Mefid{ zFFBbvv`kxEY`x~YXI-Ler&|86)WDa#CZS*KmPb49O-pUlWIoH-IV(jjpme#*DVYV2 zOLNyBvR?l)tg>_6$>$5TgGz3#QD>VF_rBPrjOnE!(=5iH4our$&uTt&ZQpXo!Yk%A z`x6UdPW)9}(p=X)*<_vPa~_-12Xtc@ZByiY`hwp^v+kH$sn1|@#mex&=>s-}>mHoA zbWC{xbBLRRxCh&jEXH$Eh5N6**8{KSVyQ6JUEHHZ^$C+-v`Cy8Kaz7iFGtc*d#V z?gBlHiv??a|1MNI+BS22=jlFETkHGXy61jQPv4WzX&U?UvDt~QTkFEURGvyY`S&j0 zu?Nl!C9F-dw-P7j728{I<{AHu4P@Msa{0`CF{Ahzhlbok8jn}KT=#V27T3%bf7hLu zba}}h)9>aR-#=Z@tFv1<-M05=s*U--Pd~CRc6k3@yEbQsyy*k$eg03U{mZMB{lc?~ zr}aT?ADl|&kt$y)l)&!rIyJa5)<;=YDr!wwx!_3Tmfxr09f2^7PLu=lQe6zpjPi^`4 z*7-=l{q(zfW&OW)epu}Fv>R zc)C;JWt;3b1@$j0KfK6^zv!C&e8Yk{lS5rjvL6fhWz=pq-{kXz@5&<8EGCchjnmWb z?a=%4?$CR-H0z?+LmoDTciU~+B-X3MPZO5cyU>$(NA2D2m$Pn8T5OlJP51i5w^L>9 zo*b80&zz<%IVa}X@hy)p-aeLBe>yqzv)+`a)goW#@NZ*!>V5z8pR+kt+bnJPH`MHT zfB*J0CFv`By7MBXZYL)fZQ7P)wRQFS9ob>~15UqqC!lWoJX@8idcDv3aGT=~YIbP6 zwsv@HT~gtH(e(7Smx-0@1vh=P3E#9Wpz0sXT$Xdf>+e3lJLCG5&r|N&hn{0TKX*#4 z{`~e!HTRwzKM3>zDxNS*=m0|6VwND-z{-Vk8n>$NrzVd&mgZ0aQ{9JPR zTyzPi+qOtX^uiV9j6IPxGJMH}`l@99P#pg?;{I92J1nIWAI*ufAK& z(eWn!_L`dLpl4=J($~CsFz>&P=Y%H(tt!gh%g%Uf&w4*|O)oq17PbZ4sutg?xVHpI zPt$at$M>!-|K#!O$3Jabs`fayKP=A{p6rvFJV{Z@Ojq|xy}jQM5z|2D5# z14^ekUg!!_n^|AF!Jv0LX) zANyqZyXKVxQ@-<`h$E>5vVJd@Y?puj%r#EEMsCi#n0tGlI@nG;_HU2hw@(bWwmr*! z{w$!T|MZsZed}x`=SlVZo!$NC&KmRO7E;be%7NBjMJD<0%jcYBQ=I5tRNSPwX~MQO z3I|qMSOrXHd?Hr3=i|bkese$b15+SkCiea5kl%-9X{nUh40Z2h|5<4m=s)1|wn987LG zU)WxMQeCrqebSA8re^+iO)D5*Ka_0XU-;Ts=a*SnZ^U(8mhBu74IkwWur=|vy|z83 zF7LGNThaf2Vjr)HKKowB|N5;x^Ox=kFMm%sySrhZ%aJCF{Ec^H8h)lr9E#@n$hqOS z+Lw2)JKFUVEdFrZ4mE5Ezp?+L(BrbJZ_hH!WtaKZq`{cjVU^d!bGYU0k{S1R9RG5x z>vlOa-}*3~!%e034}ZPlGGc9U+{nqi&7VQGp>qGDg8d1094;)M?UKGLCGiNS_^vh0 zWzL(&sp7KcbJJhl4Lc{@F%z7v{h(K$hxN%?DZ%NiTnCE+WZq5wu>CsM#H_upLO)`T zl+Idq{dUfQ{y1j7?`BS)bX0cvGtd7WyuSKeq5Y>DXAY*Zct4jsH@Q-Q{j%VKz2?y> z&x^zPY??nCE6+do|7YM&nV*8w?wj45`1&V%pZl|W9LF~?Mnx9O&fL@bEP3i5jZA4i z;rDVKcb}DKu}!)3<>2MImiJ37&%KwO!<@|Bc+hec(|NVkc5_d?{t>lW{@+e6r|0I3 z{(s5}YyMjV{dP890~@>1`y%Zi&hQJgN(dyhKkkVB{nS9$eZP;NeRNIP;YHR<29JLs zRma2*HN1-RS$BHF+=+{3D}Vl|xWJz2!_hOh^%?$H)YmsY$@(jsQ6s&(e0|W7k3aS| zpQ!JC`09Vx>h*R0_0Q||FSvgAv|jAUU#HC})0GSJC_RAJ>6mhW*@< z`&e5zh3wjT^bK^3r#@Bw3H$E>&u_DaPsZlqP*W=!b*^=IyNleIq4{a0sQb6D!mpuW2N-0?-`+UtFT zilA;aTAO;_*SNI9t06+tHFvFT;OTP@ zlp^0}UvB5*Y{-3(kX_I8K+N*{wGdO;q5}*5F+DMFSku@tVbMDA$f)RyYwK$&8lEgX z(rl+2e|qy5W5y?|w)tDma0vSA@n8*8%CozcSJ=DO-DqSz#^1|)_r!{6bDu1ECUS09*4K?I?)F~3|H_(S6C)Gj z$x{cVZ|W(^vnc4KYpwrr^^-00s!qnb&ogc_RIp235BQn>AnRfBi9Nbg*tZtv)#v_M z=U}^V?z*3uo|%W&SZAx)T|3o(KjR{^@!^jz_zwy0p7!}+$Ai>+j-}a>XTRUfE3$uP zd6?tJS&5nmr-#`JcgyQ5{S=SBv#P&&@u7{wR>hlXopScUeAx>ugBb0jWh2)GrN+N; zoi%+02g@||@1oVM3wBLC?7bql@z%Gq4@GJsT4VcGu=`AyGpkumY3us=)w}-ejAPAt z^LvH*G-3a%#r0F}T%S?uIJLX!$D~u$jDFg-hj+iaQ@c6S{Xx#^`SX7IKHa>oFlwXG z4ZB-E&YDe4%`CopMt=w268}GX5Baxm*tvassm=HNA5*7oKelDonxg-KnU|TTuD_Jt zc4x|x@S|ZCJEw5m^E+R`uCd*JbD;0*h-CKmmX%xA8l_c!xO3x);O*?x9P_%BwWjg~ zOs=*8DJ!Znll$c5XMglsb>=bCinnafe)jkFZ+v!Jrs#l`)25^kCeMR&L~Q+k8$|6D z_sag|Xtn-Ct#IF`&wu8f__pfC#(>LH?>ijV!jc3)|Hnzl>xYTd^@&)+bXhyCmPIO(}nopN$AcZOWil>N5MTdHdN*2l@M zuRbpBn=ws~z_4#7k6&?mUURL zU)0p-V*}Tr9)tc|ZoBk(w*9uzg{RU!eY&M7UHq!_`2JJL4s%wDQ}$=$$&x-TV0I-Ys{EzNBwb{hr0VGpKz2^bno=eaF~EBkrkv z=X|RutdqQ1Tf6UPn)&|vw%1||s;s{IW!r&Y;S1i!LgAW^K32{3%&@*S}ZT@cQIb7MbnQ z`E?gA2bVP#&T4;Vy3f8UHu>fp>E`NhZ?2fmf4_3ytJAM~*_W-io&DDlAIMT!gD0?z+AGDB&0_mcC4lO10qGtKv({iOWqi|1@E(;I}o-f?(v?6xJt4p&F< z=c^w(S4ftuGyEudvtxox|F!MKwdY@+UC;ZKr_VoWSMe!_hY|N4i3EwP^>1#en$I1TvI5sdLXLcz%)!HT#72>e>4jE=VM5$J zhPZ!nPu}?+c`8{_seSh47ts*qX+JH)auymoeK1?}PT)zh&-s61m&Nz>KYS(k@f+7} z{`rYNfA}VRXI=Aozr&UKHidAG#|?^qBrZ$KJFK^J>gjs8mZS1>?SlgDJ%6OW{L@{r zuTx^a17Ez$jatFm>Glmr9NXV^ZQyG1kyzKj+Em#oAgl10#YbB~*sZhTG53K#T2B0e zg)svB;Vb_wPME38*PU>q=jDU8%*K|ErwniMM1N&YhSj5E#zKi@ zCR%H=j|c=e_fLNCGMce{?xTYBGx)iB4KF&&sJM}da=3nRhR> zRh1ukbZx^M&&7$^Tz>3-P`3Rt<}<3xS3me=zi8L5=l3li9sk5IwQ^OgoP>cLYwe{Kuj(hUFR1^Vk^TbK zRH{#Z$>gvfvQaJe#r5v0yhX}YE-YUr`R)HJ>vujq*`MK_TajWt%LCTB5BbVv@850Q z^N6(}n&JJzc@Ot0G@jeeP}i{K%7=D_y0)iz=U$dI{1K6=XPjue>^XPaYSG`{72f}E z*PZwOVNd`6B-RgHyL2L^F+A{m_Pm>6U*nD#M#l~J{2hKsulfF8beG-Pn!AiYB!whu zTThrS&}aN>SW?T)y0X0J;wiB@rc0J@tsUNNikY`u;J}-vQ@cN!ruDZkU|nQ?E&9o| z&mxjfG_L+U;2YoYghfbO@QseFrL%yx!4&0%S{k;@jBhMio%;6iF5RMFpeS6;d@@nV zp;JO)ozaIT$Ko*k+jHhK@+-dIc0pA0lipJEgq4grSIrgI{@tY9d;Nb2>mxpkHCyd= z33ZsAPQ39f{hQ|cgDFicKVsfpXnMOwd!n;OPQZcpg`N#bkL}-mI{7cS)Z{2Dhw*~o zb-!mRRY+UhSfpU?xAji%W1p8i22QV!Ogca9f~xh|_^ZEo#5!XG8`T#+OSDQbiY$M5 zzGTsrex>Ec95WUl5f6A7^;yrz@PKKvtaFu_k48dDpNDSp+1-r)Blb^-TK;g^HOK2Q z?5rulUtAtBP2G8F#}(zjVG|c=dnwElS#$Z7hCY^>BRXhzc!zgTeE&i_R+f3<=bzv zS;AOI_*Eij)a?Zg9+}fa7(2YzC12aD zB!Bkn$?rcd^ss%IW!-l&!1Vdy-J5p!NB{g*om;8(wQsA=>i7b)MV1~%e*dgE!+2`O z>PEA}KmU2{eiGrHvgBWK=39s90k^j^{x~|T&+!y%#>}63wF>5IWM>^RTeMs7(5)+% zvT{$WS#7wfIJwed%_+KtwCtj+0L7OQ6b`g2t3!Y@98r7X`Ev(D(xiQW@` z#pAT`+cw_U=4N4xX6-A#i6ra|d=z@+M@IQ}&PKJ;8)?7aKexAuPn!3+jq`l@%WAV} zQvOd?>wRnfReq8AleJbY`*z7*{+bB_^->0#J|uopwq>xouPbeRrYU88(C1a0(Ur1i zzem_zyYF=Sz3OS<6}w`8m~5Qc>$KJX#Gk1hkId>-Zl6;4H%apR%ANP0{I)57+#BHj zxBK)$XNE4@uj+o0sVwp4#x%dPz%|4x=QpOEv?f6BQMkCpGvK9rdv zZ(ptAzF_A1lHVSB%IhL?WZuqw+h=RPATOynIr3$3%Ot>lS-O2V` zk$a!z&zt+5Jj4=_qpz{{Wz$yWo41Ypw{3L1UDI-lZ^d=#Y9){MPZu1mk{&Z`EmaO) zu+f$wqao*MjK+8VdWI>s!F*mDt!~s@+sc3Y&87Kg?-l$mihA7nCQtJJn!TE}#V36H zj!WOrd2e*>)*jXOJ$khldaM80?%LQpW&i%?D>L8ETl3QVdm!W1#pmzePF(sYcBkoP zKfC$rwf9p08ohdS`(*s?3$1!zv=_%Ov)p~*b>R7uU$6U@`hVWD>;3+f&wgLN@_X{L zN-h3rk9U^+)A^OY{_LOk!j~7XyEiAQtm4J3l}3ISoo(u*syvogM!lc^($}&2)1#U{ zTjOrY)$_k>c;0wA+0K9Kc}>a7+Q(0pSzoW~-)P={k^Q??$&`N!HGgW}y!~2pzaD3n z$-{~7Zks;485hjHr6DO!uDSY|Nc_L6;u*KwZckYM`I64|jY}(g{(eZcnR4xQyP*DQ zjlW`Fly^o;Enxlo{maGEO^mCKd9RmuxiYu@jhac+!~<6yxc9w%xm{OSGT~0eEKOfK z`&~~Gt&VuBXn%aa_z-_a>Dh`8wVkie{xW+I;XiXv+?Slm>$fjzx^Qyo)vLksowt9v z7ku~oD!lLgG@)HJQU9)83)3s$`TB6hleoNZC)))K?oZQyz50Fsy>%YX`=`&e%|F(x z8(8>%!>(VyqUP->d77I3^TRu-zEgHeZ?h72-uV2-XNi63bzk|gEnl}={WP5N^GVqT zn{#hjUcF?wophhQChpF+ypz9H#Ld~ho%PkfHM~COec#2!9b>+(_{ikzF}rK?@BKN_ zQTqOh&4KfhKKvCo&piJ;qmujc&l?+0{IE2A{^I1x{>tUYHm;j<UHpCPmLlgQcouUoRSw~1NqeIt88i+$nw z`y5pcKU+(V%1^4&+sk?2{r?ZlAs4Q!d(4r*eB?EY)_uJTJGxddZOUWJQ9RtFAeek@ zuPW2)S$tXiOguL=X6?WFPi*g@zn@BVJ`3}FGF-sCK)LM$lf-+)ht5YN7FKX~sdv1- z-uP6v$0~VNUEjlhx-YudC+w6Kyk31Ia>JSH5%2yhCjF3gVB^`GaKwM%>~h1JuS?t1 zwTzjZ0$O~J6zz6;>U`uQ!^G$l-@!6xIoT*AIW8HG|)5Q@@0{wu#mugM?VNBOEei zTLQh5%)*)1&0|@^tq|Z5;1hlDU)+YBOnlaIOLY!eYM*7xRAbo1w#8UBbDjPFq+i>1 z`##-b93>a|llQ>+xXQH4vroF^J z{cpSQ+r-H7L(aKNg?2WRE9Y+4n5X;Wabr$e=KjAOWm!|6zqUDTR3x1;>$!hU2IGZu zJh^OFr~N;7@is^OH@6LC%^U)<8FSJ@uJOh6_0PI@>R$8Vw{_AB_nwQh+3;6Z>;K%E z{j5#$+e^6()<50y^;Pq(*PCrNhiwUb>VLN4lFy~-pI0xkU<-$jmPp}pE!Slem; z(Gtc5kY$IhdS70<_eVac?D?&%y6!=7T)+*cA65O@C|9{7&|L>FJwY^W$^NZ)5 zpQtpg-Zs9T|AO|5Pu3C7@|ixVmF#8uaNUF9tNzkYUu$0&DIYU8&iJG2aNmh(*>B@} zy=(LsIcwxL@#H)#u<=u8$}Ic6xKk)|f${FVbF6y17#|vWZ`&qxxA;u$x%)~ljb7Zi zA+o^jkmNhF{v#pp*U77Y&Dkyyp^AlbsE1(**@#C%(-AQ3`c1Bt%*99{R z_gfrTaZc_C-}L#@qZyr2m*1#zurfbr@9ekLB3yk^#Luw#JSx%U84cG88B=_(x9M^* z$TFlXERl@JpLmv=L!H^1UBQ)M|N4uIY!@7Dn8xejbGew6XWni7iu4)Fs$a)OyT=Nj ze|AUc_RmST(|4ZkkG|(nD)o$+S!w;{=*UR(!&5$)e^yqWx_trD8Qv4gefE=WPb=J) zUnle-lFegIpwb!lZZl2E1b>H|$JbZL)J!P#SLVtvS3E6zz~KJmJI}W;>}G6rkTNJ; zmpn&tmwWYm4dN^yqCDtD6_=706)xG6Y!=T}eWMVsYQoP=YyG{|gy7F=>8rINK{ z>ipkrPbObpd^2~G`J~rzK9c?XW;Kz!XPn)%rSZvxr#TC@)Hpa!yq)Bi{mFdlE}1$1 zW^rt}X6@r}V-X`e)4F`i2K(*46GP>aly4qoqiziAi&so;fTQ@y^%_hBC%Mi(;xmR8t-Nr8I;F-MoEVGEHz=~t`+e=r} zbT9kU{F3*!#JqJ+KAwESt-d(wSSIctBev~7R<+{-eIKf8MK)HTy>KjkKVYxtFH9R94?xS^<{aeDB^sdw~jmQCK9 zkgy^4i$X#jyGEH%#v7^g{ie@@8*ccu?~I>v*g1kP>hiDauF|g~Of99{H{SQImFc^m zv;tSNdwNjkcFo#rfNJtw;- z$Bu1ZHm@-y-)7z1T}>%2zjT~uFOjjCl-tkvF1u+~x#WIFE1$=%#R@FFucsw4oKkem zDi%Jqexh{$!F91a*56`GK6@j-M)Qr#b}fGU?Wd|jZ@H|P-|#BW>g2Aa8lRUN?b~!` z&R<(2?Q5Db^9?JfShDx0N4=Nd8y_`~(fy~~-uIW^FS@)ZzwKS6?5D~b5AE)p{Hqwg z&u8ED9I>l?J@%Znm!8{c7E1rMx-j$GK2XDGwX(ghxt00XJr~yZ+2ziziOc=foQhU-wVFnmkR(@8Zt%rJwK4tGxTKX5IdXIJS_U494znd+wh*@6COt zyVCDx=+lsDV}2hwyNi{3ZBAXD{xza%MeVtlkDb3;yst^qQM#3Jao_(Lf0&|XMoUGv zrA{b|n|J8ZrRwYQ7q-oQZojBkNB4;Og=@$4TX!y9J*mt^+WF$AC!d)_bu(r-o}XiW z`cz8d{JPAhz2EnwoG&$)dGivV`@Xay@5HA&=V{-1B@ndJb$Gu9o9M(|kE4}qy@cueA zY5nwT+|yWJJD0p%^R_2FZr6*KCtiF?_}37&ZCi57*CYCzKcC8P-d=Y1bDnqjUc;^C z$2Ps`shJ(Q^Pbw~GdI8evh!HCaq{C!E6oJTWvB4Zx0HLav)EhZ-@ldLx6YgUskA)r z>EzNcSETdhHm`YndzE>3MS|!175|p!RO#O@{=7!5p0TZ=NMNt+j&BAnE^}4?e_Fa` zz4vKjc`lj8^RZtqR|KjGP5uCBCRqbxQ~cZW^u#lq%Ydi*3k^+9FVlO86c?SDP@ zq&L+X)y&u$n|yFRYj5+}d0A#N%bq zqV~_(Q>?FT+xEKmyo!S$OQC&I&xFHPiapYIRy!-|4!ar<1*9$I+_qzaus(<=kg}WP0sy z^aTs24{9ndE^{}&>R>%DSbm==u1@~)W&TuN>o?`vhXf3LtB<_?zVXi61zHD+`ZHHY zw9A&nZhUvIAy528NwnGfBdG_gA~sa7obg_H+TVts1_=j5m!%#m`^_?YZ9;8Xck1TD z59^K=MQjj0dbeBh^dgDvf{)L3{r%f;xb}dJ_Ow#h3mh{=4htCg3Es{=xOqGKojrmA z*9GXOFSL!4)ZiW&SBZ;dl${uk8NvytnvkIOEp-K<;~* zyH3=X%}@6&Jy0uqq4c!#Ra5z^HcLO3<{W(U{Io;x{&Kmq&kJ`;p8xl=yf5WTg=LM{ z7xlbNAM^Ko{$X0Ns{yuWtiBz2z{tG+M(k%R{mrEdvv*YWS^T#v`K!J{?_@kf#D_2M z&sTiCzNg`G@!6bD_nTOh>dlwe_pvzr_f~kb;okoK-|~A|3{Kbode6S+&+7CGPv<*b zU(fub++*SycZPU|57i9!m_FDEDg4uYQ8o8HujN_=#tZ)qg%bYC?b_F{&YHo0qS8it zccvAyxo_wjO}x&)@I~umfXmB({X5SYEty&vYpVMqDlcd*qkDq#a|46?rTrb1S+Z*w z*I%d#Vq|)@iRZ@i`ML)zcBiFU=PNL;In`F1`#Fet^^HZfE=-;V8m-r|yj05g{|Rn! zsC;a19U)clb&`yynmWIbOBtVN;DxBgm#T^xn>QqD+sD5W)0%Me-ODZ(m$RQF*F{&l zcDu<;&S_uG^^c`t1JmjStOX+e(Q9|7J=mhh`Cwg_npUpOlKWx(8=iPvxoH{NaNV+g zn(g|zMg?ZiVhsz=&DLi*J1e)7%eQE=&Eq+@mbtt>s}SQcshMYmpg->n`!HFpiK_yC zG6pPm72a>OWY;n0Nv}7w@|o}a$28S2GsfnMeTp2C93t@nraM zC*IV@L8hoM?R}BROEoFm-;8Ty(#3g2a%;7ue%P#kUc4lL&HCV*A8e{h<;4NcOKj3N zJq+>>PT%=r*6kYh7a_l+8IO8vbuT_YTW`kYyJg>}d{nkRa`pYANwe6uGs|zd$navN zz4(UdFZ~=kkL0i$@kFaIR9$?n-H|>%1b9HSe3Pp659>zJB9V3-#D;TyM?dWJ1uK>Y3qwwIScIXFg0Xs>(_a|##+eK-S7D}lgPD} z`In5D*t0ED6c%kf?QYiJ@UZf8%c%)(>|1g+ZuHp{@_70apJI!J&9Yk<4+Yt=-tnxx zucU0SV+P}qrTYVKS1B0fZ_zw&(qk=qemCFghs-ul`PQDBe%L7^@3`H5rYt@F34e-y zdR5-cd$s6y+bv^$&gs+l`kh|8Bj?B>%d(f!Im>UP zxtp|$nYQy=O!JoC{+s6*+gHxn`-@H2Uf_?zHY6os9J}-}t?Gd1$4bxL?fsuj|`$JpKRmzudmOd~*?zJ4uBb!%-l+|BamCZAZ`(s+&ce{Uj z0{i!#UB6?_pS$_lb>6)=L;HWbpC5lMbp3e0`0`u)8BfoDudXW3T6cMM^T$(9e^}X0 zVYh$&@=DDj^KCX?{v;nW+$YBJ^ud=2)*EFTPSr_itopAeerxvYn^vh4E`RN1a1z_c zF=@S;ee!jkWWnqA3>zOa=jL9YaqZZ3)!zaq{%Zs^a~sTjui7#t{O7ycDKpy>{>5j$ zetGc4u@$V^8<=8(G|kfCQ|67wYyukF%)JCJ++~wwS#pytz+Kx~ z=;ZkyPCr9JWA3u#tY?nfvtF|1+-Bu_M@}rZI)A3h*iu_P*UaM1`K9;c?WMoGI@yq( zzf|&~!MYuPD~@jYcu_FoW2M+N>B_$xwmVJEaaMkM+wZ>l-kKBFr>7U6aV~jjnLmH} z)a%v3kG6f=oEXo)uWVJ_Ki)(4*W2tZzLxQk=k3=O?C0uc{L#^RwnxZTWaFR2PoFYg z*K3_;G3)Ptw2<{=^vwA!*DsfJJ?F9$-^Io>G5qJY>-{h9*mf_gV_Xg$?y2iWZUwQt z+`eDggWD*Tv3XJF|5ZN(|2(+Q_VeHTc}1;uGk6;m8Fzn`%3SzHdC7{$3p z^U)rG=l(Mo{gF8^M|pPs=i>FBzB4z7Gt}{%@OFq-V7z;u?Sr)k!UV{=PifcDY5sZrk93k9{Nv^)e<(BgdHGytLDF=m4JYng zzbYuk?{FqzBENHPh;WFU>ECjMc~i4q+Js!oj)rUVQ$74PeN<}< zUHh)EooPyecf3z&5iZs>$d28qtjSp96nVl&+brv$BHmTxoKYbty4 zm)g?WYg=wx+i_f`D69Y;WdL*w%1Tef_{dUDk2Itk2 zw^}v`&E3baQ0Rn9yS7R|xmNTeCf5_b3%ByO>Uz0UF>lZGIe&0bqdLPDg~s2eKB4kA zFJ_jdq+X~myVWIYcHo@tJ9C}`C#!UvCsv+}Z{S+9$(i@Wwi|zw)YsZ(Ebj`K`SbwC zw!K@L7oIrQP&n(!CMk|>PNMAqwL-bblw!%d(xWtpIvbUu;*_J52E=xSUOkeHxM~n4r z9`3d7zTZr~85uHMaVTDDpT>}Na`u}*^1Pv&TQ<94zlFiZPz~WQ%)4q15bdn@xMQ%wi`jGF$vvr+@m! zX-EGq-+2E@{!Rb8F7f93SAFEV@nz3lhLrnD`!v(6Ri4--m-%GfH?Gw+yZ58;ZCHt4 zwxrE*ohq+nho8JxK3*!hcI)a_@oVMx|M}YL=I3v3d6n{6>2z~WxoBDR{Ka)QUeA~& zf3x`iyvr|+2CNQy;#Vy%abVpVb>^v$pM>AKS#qfB^sYngPIJ4$^pe8_>yAf7SAMoo zyY~H##EJD6mX#-+pRwlU+~rT!daPeyR(7f4MEjH}-+E2+>v~1ERDL)YG|k+-I{#j; zl2k1Fi&+a~a*i2&arlv@qqaMq@4=(y-Zy(QRzBTOt7Wt3Q$lI#-L2cY&TRLtzw)f$ zZIY+#{S77GCV!p!HF<5O_e>MBt*r~Z)6FG{?#}j7nRn&nUya=LXNsTxT^5+W?^CvC zO7hP2G2fQNyl~nt^K19Lt98O>o@oBsbNk)GKlbN8RXf+bH{bh6R&ejN|6vz*{`xTG z`Q|m>(=T58<5%?RpY!$ezPWPI@z-?Eo&TKv{oKoG&!5Nqx)-u#di?vU{{8JIbXm(@ z8vZ?f`t;`~^X)_H&$Zu;YWDuV>&e%{>wcC!e9z<1`upDM$<@5s4x4x~mM?w0*v6*d zVw`BRce+hQ?3Vj^ocm9{7Ww++lcM#Z`OjA@H&%;}US%ZrQ*z#~-@gj>{?Rs_KlRwB zH&>T`t_u9L#p8zH+M1fXe}ks%zuz48BRt^Q{p~v^F8!K*+ii*JL|d&3x96qbi+o?T z?erbKvi`<%^YYca4{w;ym|If(+xSKQ$2BVyKAP4)-?X!~#=7|L+sYkZp6tqSII_=g z&h@Ue&Xq1X<`QD3&);F&r*loYTr9uXg2{RJj2ZRX-O6X@Z{n?4_q$=q;cagdmOQVy zpRjN0ypN@#T8DqB=x2W_J$L;}Q{{6T`AzCM-`Dtmd!u(J|8ei{=JV%I$SYh}z5As{ z{+-9WitfMf&8_o$czotO*#%FxtkZq8Z^4%}+pBeo&*z_i_HBjv`gc!@*TwE!bIBntxSL0F0h#Gk=@bY{xkLxpZ3i=cx@*0hBU@$U%gBBSSre%WoJD){W$y1U(9n` zFWuVLto&h@u*mz#TJ?tRj^|$=5W9M};j8n##Yw4CKOO!1^m(7di-o@Ik0*XgtULND ztEl_!=ZRD8xFJS?;1U8bCjES9KYabf+v zNMcCL zU54-a;T{r&rN)WXvKwSr6g7@`GT)0 z2NS0=ywJb*yz1vnj{dqjmiK3)l$L(qe{|{lzmZY%Slzy-m%csQ_G9?*Ha zm_75#C*FuZe#|xLl96@G-Mr50+dogO%Gz@N+?6!9L&uE`-yh4r+F$-@@9~DC*)2u( z%&SY}bn55HF>k4FuXy?Kd%!)@pz1#%d*Z;ICeSQcyd~21GRspA?-?F&X|5`BvC^(y zfB)aPKdTuQzTUn+IQD%0f9@CW|7o8n{~y7vA-kTnkH6zH(}U#WGb#y>n_iLw>^2Y6LDO!ye)J=s+|W&Z!Lx@W8^e^gU$De{zed~UMX&-y@B zNa8QU3EqZ$rzc#i>h;%aFiGJeG6z8}3D4gLk z2vu=7*rTivsA>Ov`Nk$E?h6NGOc#FQTKmW3oK|M)wFbLA&waD(7`&!D4zsxG8Pc$z z_*rPb$I6|Q^mp2;Uvgkg>4(?>C{l@#6W?k{Rs9;_PB;Ldx& zH0|!Gz?-^Kpd;|z{kLm;-H_heFgudJ@^08MmD7vXuQ6l1z`E&OkhK?slNFCc65ESY z3@x)+Quv+U>hE%Ttk`&;nP;;T$8ISz-| z4ust56;{i*am{3D{p>Sq?N#qiv`{~=v{Clx6Ze|zclRZ)tYllpH~Y@ApxbL2?w+}} z!Jb(oVeKu3wK=nzwHuh$_1@Hrw3U|gz0N5Sq12PcP{kNB`(0bg@+(gs{jp{Hp|^bf za~rM|^=p2`ADEps-}LmMd9GRSiwYQSYAAe8Nw~c9Q{1cc-Aks;+V866=8|1(%#@h{cD~@zOl?_lTVP~*- zl6R_@;r;$Z>BMh2OZQEF&QbS=<<`H*18;8bztwZzWc!BL>NT66222RJ9Wy|S;=g*ohn_k+UN}bkgK2!W% z^-^8WX}lfhZcY6)@#@w5C585b=%#q}TF3#8rdmI<8y@qMI>V9bhjXB*>ozB4P=darOyx!3mS zJ<0f;ca`MpT5Q(sYA%>nZo7G{N^~8+_JYjSlc%N^Ygkz<*ciU>)SfBn*L7mo`zu^M z_{`0wU;DG!w!hzQ-@AQcU1V)v*;H%mSTlu5a;AbQn|gF|XUa!9rp2##FwfW0il?t+ zWqH7yo2lB~Y*&h(>)4);+%a!%rDl4}yycY+npgHs(z){4_q*=dz}UO_TbDvU-zlIwCmTxRWo1PFWTdO z=y|#=i_MYG>YD4n`>gLdUug)8FOCudl40b8K(bJXQVY?Vsv=;?AV&|1U26Y;z%7u|bTX!Y^*G z*~avW$_bxep1hu4|NQ#BbDM$~*WTL9Y@574Gjm&{-n*;KmG;w@Ex-Ros*2^2t!w{V z_5P>NW8(Ihq~{*Gz!g6)e|Mu@b?WRpk^JYsp1qg7bL#2S&0%iq_gBn)Vr4kzn0@kT zmF3geYj)3=SGaGUdfT55pLM*S1#9f*6qR^)`A3zP-syQ8pH82!{-fcqJKJuCMx|u$ z%3>(-KJ0CLt-WIBxs++sZ=T+)e9JDQ^jqze*9R*%_wZJnn;*7sXTMTbN{QoC{qMEg zWRD47zx|H&``tR@7qdEV&wC#|w?guw#wGdZkN01`~oTSZE;^ez`4w3~Kn;o-6we;jgW zUpM#uYt1UtD|t!sxlFOtMTSed@=w2%EMCL;d=KxO+{(3F8Q-ic89N=gf7qG)~1ldLV+CRKmZ(zrHz&*ZA$KNowj)(KTW9s~}wS4{tef|pJ4L$5FAK4PQ4m{&) z|J#1!zO8%A{zeJWLbiAL`~smmyBR;%9r^Z4>T%j3DW*q@B-Sf0lXkVyxpCZBz2{o$)VpsNT^6hQE3!$C z@v&N(faQWfgFKegJa6(ug~U8I+??JUa8u%mpII*Zncp3M_dY6Ef8##$Z0)j=-DjiE zdYn{VvGlC8_z5BTvIF{c6WkWxl?_N=ShwZF;)MKZuVg$JUio+y{`V^Uua$I*<P z^!Ss-mHRK>nR@QK*7@=~Jx5NTWj?I^HBB+>*vjhl?(=n=elOR4e1F9wf0hSUUlvb! zty=XHR8W96r#(j=Ihw&V$@-%&!}-r!qg5KV?EG)1|A@6g?vv7km-qV_S`Iva$@}y6 zeMkP5yq8aQ*ProNV$D$B{Um9N@%rG(_kU-esQ)pW_gH##&VGR}-T&|Qr2o&D`2SaZ z+{cgcOIW8ouV29sR{MIs`<`FfCyv+GwOX*B_`$Vn&;0IxS`Gi%IA{Eu&-h1D=tm9H z2KPDkE;HhsuIno^o=aCb@aw;p{qJ~zZU6bg<9}x7%v-uC*Fl)urq+E{$J9aQ^^4`zO!LQ=5 zit)rkORwrPUuA=B53_MtC+u}+U7H`k@XYyNUg|NP3uzzhn_0Ot)I(yg&Uh^nRmtF? z@ZR~!H$1>>OTGvN$b2{bK7a4i8T_+in;k^2tIyKWs)r;+X^P%ok?)MT!(Z;7G~XHTP+= z%*EIe)@!k>-QodT7BDP2BxZF_rSkAEw~WtO43G9iYkl9j;@q|fc@y?+&(_(6?Pg@% zkg}J{G@tdPTi_yx=>58Z8pY9(BIlV>On>Jjgr9sPWxw!MXt6@;)xx!9S~&rWPKd{v z+;?4L74zlBFDXVx=H_?p)3z&1r#S4N(0$@u*5=%g4sVqYB$)XINq@K@q9(<5<~{Qi zX9KU4YdPVmCwynWox14MYWJrC9G|UkMl4#prd#F{-v%Zo^9NIJnq*CPx;5je*77sy zCYHB92bXaRUf6JA%CYRp-C3s&A7d33ZD4ZaRcT+Rv*lYQgZqO0pJEi^)~xA^WjQ@{ zCacr~Mdn8-PF6B4{6{xd=iPbU9GerDczx~L9}JzFW*#~wyZV06>yRHR1&K42H{S6) z=6cTN-t1hn{jn<5Z!drJ(|PnU!)~Fjzid#qL;WTFS?^Zz+%(Jf)BL&XeqgGR%3i&8 zz8kd*&TN<3khDXXAJF*}R*0&Mf!klgF=9 zl2_k+!SqV4c2dCC4R_4{KGk@8?OQ?WW$j?*Pb^obryTkwvEthmcg?VAj2iiB&p5Bx zU%16St#~7&;Mrp{iXuGa!uuL-1*I}RTc50cI$h4brSwEfZrQoFj2V2JPvsu3z4nId zbku}T8+R6M=Dz#H>1)ofGzV@YwYeJXmlnk7w{JM2b-qn!uB=DO`F@Yb>Ytr=#oL{I z7O{Kb*4s}T#J1({ykoHC`d`KHYxO(-onHX^c_qN7w*K9iZUU6U5uZyQ&->IE{{Pn3D&p&&n z{+#h#Zc_LD`mCz@tXpU9`=1QETRLyq{7u5kJLcPl=H<`Iud!Kj`p>MzUv4k^^e-n| z@A_ohatGD}w?0jFt@(D^SbbXe#CTEfS;1c)Je@O7r{YzOm!IvYN}FZ-fBxpbc}wp8 z&DdLevVNw&DZT#WlI8L@9qaGSsK}BjUcbuyW&HKN4?;odn#)cn``@pwJwESocbVsQE%q&vi@6Y3qRX@HdJanqs#v|v3pB$O7kX>i!bcmr<+F_UTIA|cv^AJ zxnDDszS>^qUz#qWt1zEGZNvRAcjf^15Qo2Bm4)+~rq%y`Te{=AU)Z|2y=T3<@7SMl zlZ;;reUF}h?aN~E<5R!x+8%QFe(nE{Z%=&R;cLmCSN}}ZqHRrK-5;CVanJrv zS!=Iaoj-qv-@Z5VdcTy~9ku@adVaOfJ+Y5-l;_tAJuu`W(2W^cp0`ksdQ%*GoI2J@VcOX%`9Y*{{GcKC$C#y9FMh7Rlw`~TSS$>#`` zg3y<@GGL8#t6JlAv>$Co@KJib_Ro(uL zk_p$meWnU52aU9^sXq88wqxhLgj)=k!#;k|RcLAW8_U%G{+-gd?}C@ZQe#C9TR0>i z_*Ql3cDyK0@{xCWttYxtw|(>6zkZ%u&bFqzxwCez;JQ|MU<;>&`OV7p+TV7keC6ML zFGrq1B;22Mclh!xX$Q8jKC68#ar-{wZ)>@$Z#d-V306FkWYpNZ(EQamx0ru#pZfG| zS*)Dq#Fi+%;MbjKk;(PUiAl#_YTkYI@oeSQlH(4A{A~H@b?+T^HN4@9cz@RI&znV` zez>b&+RNN06aP7{@@d(>FGm=D1%Lgc^K#*dSI--t&VSqRTU|+9;diSZ__*rrQ;|+< z?9ll2Q|y56zs;@-tyL6$J$FC^}ddEbs%cr;3eD7ae_uKke7Hi)`dAGBV-1_Fs zixCoCurFYiTW_0uix=gnLK6)Lif^R3RyxylBMC^#^0OK9h^KkdiKJj2CH z`sKbx%QGvJ&n-A3&FpJww6W1jB}8CJR@ptCuQx5Oe-Zmyeq!P_?Ijo*d4u zcJgHuDcIT=swiS34)dyXx&JA84+ zVY9}*>#`f}Fu#uV%4fK5z_7{J#yDb8gTr%{6@Be*N>0Ds_%7=o>zQqfTuwcG9?rIj zfpt&Tg5cN&%jPY~_ih^GG`^HHu=OvxYI?F}@8U912P1(fm5(f2ic(^A7yQr(f6U6% zq4vSr+Jf7_Xi?KK9+633+>_RIyDmG=@a{^U<*5RjD|@_LQkYJNEKj;NQDC8=(<8nM zGZsJdDoc}!@GVX$FNza95xKc;sWtm0&Tb9)fP>qFO{NF)`<|%MV_L)g*GwQJFInMw zre8zpS)+5c!8|qcIysIlN1nX6vgWXsu!@S`)n9=(QsQTsK6HA!pdmzH)-0YiFK1<( zW%KI3a=h)+8$p2$G6D-S7KKKqycUwZ#n61S?uc_;+1lI`qsMmHxdDszPFgoL@lajA zru~9%zRd4$GcwP3aiBvq;CjF9hY*fEalhJb-dnSn^-kKh>b13(7ww-V7cD2)xjxbP zm!pyCe^%z>rx+Rf~|{yF<*1gm4GLR`y&uQv}Z?tR%L3I}M#;ft-IlNRddz$DI_hf!|5r<<-M@Ao^Qpa&)BSSsO~It#TpzDgkIVBE zW+&8&Wh`Di`%i;We8#gW^K$Z5Em3EFnqNC}*<+?t{;%CPpHw@2NPb#?+{Qh#PnF-; z{IT&z&KtR#tZ$ztR-N2-=r(6S>`ER}Yn2q`lXAbqnV#;M8<%wA5x2#wcD3Z&SB_N6 zvS=_oy|jPs+6~W-p4=>x@%Wp%hR5}rZ8v|s{AI-a(R;qKZU0R_v5&WEI=OV7UbHRz z%Te%6`*T>szd1|yb~EH|`ElobB)cm|&iuEjC)Q7Ns@=lq+5ATAEN6+URY60}Oxb{d zUvq6w@2=>zy{5YPw#WTk;n{z;ed*QR`p-7x_rb@x%KqC~0&|vKJ^IYZX4|e`pR40H zn(M``WZ63XY;VQ6*jo{|(vLhnT)U~^{7#t%E9AxNDtS)6y(IIG?N$2IL!7@g-ktxk z+0fy3`p&nF+v3zee_!%$-u&04pEAs*PU3wxwer<3{oW4y2jNG&{oftPl$@`;oLL-l zxn%pxDUx+}ZO+Y%(|cU%v*rAC{?qfUE>Cp7`+8|@Y*o&`=b!98S8>ca`9J37@{|g# zwddcz`1|V2XS@0BFDCO{=l7M3i2HKt&#lyADf_c^9dX-jp3VJPw}Pimw4O)a_S1t6 z!GC`mmVVgu?KEqh*4@?5o!{PWmZ^BUskt+`0hV0+iqWP`^bW;=7r7auSPpHrNlYYwp7UmEZ%9p+xNxp z?WGISU%vVNYyr#q?J>{gGH$OkjJWsd`M>u+4I*b&H!j|^S?BHfJM3Zewo2}H(s^Y4 z{W9;=^FJf@`W`E}R{HS#sgG7UUs-Q``;dBg>BsADtKVN>ocvRBHs_??mkc|dXK#uu zuYOz5XCAlCX6v6L#VzN8-bUJ{{C@Ry;^~*Vg~hV|XY=>m{rvM+$@3Sb&rF|xO0N9+ z>FwF*Q!+lEmOp!L#hP7`khkUEvv+%T8L#N@KJqW@TXx1j*@i7`b1tvj`A|jW|Jnmj zT}AsVWq18~nq3x=edhXgQ6=xbCcCgYo{oFcGEa~6Z<0S1Z~e2N`sTG;wi>o93eWZ* zi=Y3#b>pXBR=>~JX_n+I`hUao#_J2tU(M$-uj*GgeY3{YF@UE+qA_!}(D9o04UB=z zP8?EhM-5gSu~2rn^kcJ6#Du9P);x>&A|A7Ohpf5b;3^QGBUl#SoYe4WwZ(~GokZ>v zvn38|zbIgx+F)=mY4=~jb<6n;IRw_R>`v|8@ms6lw^>si|BN_?>+ufLpHDb^UGX)y z&ur_t>)sp6tP?oIa?|Nre>%^@3CG$z75(!Xf6sU1mrsl_zh ze8oqkMBDE+CB|&n>1EuVD8%!atz4d2hke#@H0)uT$l-Xz zfWdzr^WhaUz6-XiKKk}pMDg#d&LuBiG(UJbTXC>vs9BKc9Q%KYjG{&g{KEBpW8yuijj8 z{A(RMXTv?Fy^>SvvaVgaWbIzm!*}G}{hr&uww*7I^*?LZ|2l5*w(Ixjix=Mgx8k}fkT;q+etp*pVK zc&0C>S3K{#-Q>}*uC7r>p>;#5f}QTJCl?x@sjScqvSm}h&R21FW%>Ddqja|Q!hy!o zmb@Kztrb3%_XVZT=lQeoXnAyre&2*Oe1&eT7cW}Pezr%NA^KeP-qQ-1%-rn$#u^0@{#2GO3>1bOCZPoC>om3PWj%%3m) z+VtjP))JlupPlBdTxI44(TojiG-bu6cs%gEEiuEk+4-7tT-m&ak5XrEWg7&ftl_f~ zopO1;B##Os=bO6LYu$5Y!`NCb&Sc2hsmGSlUuk}9!`XyOE1xVp%*J%`yxgVvt~Mqg zR&JGS4w!B&^5EwWmDuj;5COkwl@gb?nx4M9==N;Bb-P*S81IyxvG$MPhZ_t|ClppY z>=ypw;81Dhv5>(=;>+?#wMkq5&iZw3QsYZad0t@^9}R|oJW4^53hoJ^ucbG>VrG!t z)*xkJyM6E0&YlZGjn&S78Fxyj{@wB`%jZE&@q<$gQztCmex8A?W9HEfD-WDZjQ;Il zsdDJo=9zm{nX7#LbJ-)V-P~|?!TlP8hQ_1)d^001*D_ZcJM8^npgy;w_}%_z=P#~e z7JBuNwdMtzigiwVRfiMv45i%}Zv%5Kh1}ZEbZ}GMYsL=cukUN@pA^o-1Mr8i5#llTBr5Q4(ty2Xdgwt z06tNJ195_eCwIL_zo)_ITPbFsxT)5-&iU-*&t2>yx9^-$JfT+{$slE5vsumWS?U?3 zxxV7BEE4$5FJ4{RXUG~eGk3+YRmW}QCn{RLTx+RRRR8UB+nM(K<%ha@BX8BoF+N;* zU%Bx(_k%m!YUd4)FrGg8 z_Vrj)_-AMHTD`EJKP}be6B5sV{1X^%a=NZ&L-*9PwLOm8PE|gsa=W+o*|W7vYa5N$ zU2j@>@6PgK`$S36*=grz<=>l{S}U+7dI>+z2eX^evMp~P27KM~<^R-AM)P9iSF;Mr zhxl*vowiP9S;8iMleVJyTem&4`n^%5e%jC2CC{y{G(4KAe*4LhuO~mRf3|?{HS-#K zr^=xJU*Bu#D9?M|wSKdf%Tf~KO=0{*j#S4 zx&Gj=XUnl&X*J5fLx1hRRwVV;;p*;ZwpX4!`jvR`?ACvJ$;LM?8;LXAw71G>=`8Je z{_!kh-bLFewzFpIm3J>ZqJ6t;QvAf3kC)$6c==m8=BE0uRZkE9UA*^ZWn9$W7t6MP zdU~WZeBamQ%j$ode0wuUT{miy<%FVB_g^NVc?q`%(!Bl0!pW%|MY z(9UJ?Vt2mB>hu3DQQK!eMT-CVr?($ZuaEsV>-_EKPfuGJPqnDpYwtcc(`|Zt`->@a z{GOJsx>NjR#>;~{H=UbW`O5P2_k||Q=T-9b+tvTO`#W#{&(iD5U;6Bx9e%jj#?IyW zkM}QsB!7NC-Bof7y3$-@d$86;rNTeky(SG9>@i`KRBWJgQ8ubgR0@?9cqS zE`#gs`gHNA&QohvT%2G1^JmqZMaOS2u72P1nB%?J-CtAgeSdZ6`p+D@-DwLF9AoDt z-<15gdVTvQgRfssf39AoKY!EhHHYs!)8YR2wzTE*Mt&K3sn5(x;8TAuyqL055FTa+5^7oxN zm(H`++NVU$m9nq?`u^!*vlG{E*M0t^yjxOED!96K;dM1NckS09`|YRxPrhVxk8OTmcynqycex#5jrgX0ZLiaE*2`*166`ta-QUFXPDpKe=l;OUu#cTZcH^0H2BkK` zggH!YnMbVjBc_S2;?%J7(^hfOX=iPh{qU%{VfXYV^?Z)JdmL7IA{PSrehccmC)Ce( zTlRW+rTqCBQeR%FJ$S_yF}>q2Ux#0~sUH%O7d67SBmYNHFPy2cC?)S|u@&5H|r?`P?!9)-;=bdLBMM*qPrXlPmD=BMULQOLF@s;HavP2t&_{PX8Ep~kMV8~>Nh-pyXN`!i48CE z6

1TQ#g_h}d}VfB2oh5A09<{$IHK`u!b;zqFnD{(s7Adj(gc`bqQua&V^DDKUO$ zJ@B33k7dJu%j>VDJp!L9H!$wn$NC_8X8(KUAKnc1tWV}M{&1fW|Bvy}FRsKNnveeZ zX8d7isFT0&eCImLIc8-Id)OZw7vK!2RsMW*p`P-s&#R{Euov%VHR%p3`Lq6(^3yo6 z`7Tp7T&cVGq_MPh-Dd@B$vwrMFT5FVmnnT_vS2DQuvnEc?Wev1!^!ODbAA7@z2fa+ z@i1F(I*M`GwE0I)CF{=@vYdTwcgq}YSGG%qOsNZ+8tvLwvy?pDvnFp^UPQwV=iW`c zljH-g8A>*UJ4nkMHDkWp&ZuhjzF_KW%Sm&LCKTNXdGNM~y=Bkrr41WJL?7&N542A- z$Y3)PH_*ED*Fg1x)%>nCliu-0n$4Q8*@$8KZ`oA+>^8&IWA2Qx-f@rSG0Lox@jCKS=X1r1x1k62i?GfsH99xp ztDfoq0^i(8m#0)cGyTu>FIsVz!_TiLf0#D>EnsHp4&r@uwDJ)50@a}Ef+@w!yy3;G z72R*~g}-ZPn2~DE$lO?V&H3tPo|b$Dk2UrkJ9$6FZlTV?KB68OA2gYVadU(dcx z-&5@3wAJ*Q{9A+G$=1^}{IC7LKhCcWaXB~!^h_K>^X>rT+VTkUw|6x&6Ycj#>B0 zUUWSA1=B6B>YQb>9p0!+t|LGe9ZZp;iIC>S>4Ye3hO2$ zd^@sT`}Bl2(|A_CCwl1&`l7 zc)kCbf-C>0IZJ!CSGs3sE}!#1P<+Cy`OiJy%AZ{+#jxk)meh>o`O{FJIipQhlW4Y!}B{Th-eUPY&ni{t22VTVJeryCL*OqC@4r z{B};3P4aa-Ya}P>p0)X1%XD^66JNo_KmUSGJ+su8U8j8WocZ4=zkM9Cub<}qWh^=K zZ2RQ-TLsS^KDB4Dvj2a-v~7=G7;r7*Kh@26Gi<){?paSI8`I)_EISVJF>f}s{eJgZ zfYP*yXC*(?Y+zit`R$YYQ~clCZrKw*xz7CC$$8?JOqcqfK7PzM#O(c@@Aj= zXnb$p;-{-${=fF@(x;GH-M2Q}P|^D>V(;SKK4;F1Vw18bAyQh`PyaPueqQ;!`-SCw zE=PXNu7_=OFGP*Q8)lw=TDk7d@efa4mw2V|UrfIBWMSExmp=OIgP+>ExqbUR=iT>PKVxqH zu8}`|-TC{U*SC_FZ(si8m(}G%#ZUM6-Q=Gtct`&J<$KRPTYCQ!m+8W%TQ|o9y_o!E|E@dX_0d1s?4D+C$-OU{o07HKxOsW*&Erm- z47pDVywjgAh`w($_mQgTyLek8xr&{~Znwy7oU_(1CO*&m^3QqeCe2$lN>6d{BYt6mduouo3)-8YLq9`DL zghPHqHLF{2umoxeDQ zSUws!J2xco_cou=cjvvV^YAF|lXtH#ymo9ik4rkb_RjuU8~5yKx>L{CyvJcrW#j9I znkrfwb~o>tC77plty!ssBUW@5^D@Cx5wVm{%FhD_V#wN02_&q-rDzn`V0kogVswNS$z#@X2k zn?u)Rzgu2>WOaYT+umihLXN>lzNI?GG^)Orza7KqKaV?ap6i+GhFf)6UTt~%O0!7i zOPKWYzg@qlcb%P@bccl}_`sCjPR6@)({^U>wJ*{u@9%pkcw^p2<9qjRvz@QWId;hX z=?}SUvp3#eK0ouP;E{eMyZm`;zw;=6e*F5V@}BvHKW1v(e;nCgUtHLC@Y&nzX?M2v zak9Ma|MjYO&vD~9$sa76S4FDr-9GtC4YyOjrBId59@*)kjaS}JnK}FK&zm!*H!?&N zS$aPIm5}#5NB7EX*P5bNS65ED{{Pmy_ft%6Rlb|{POlo8d3$X=kshE#DZlwY+r2OFKir9>$>W( z_mUM)>iG}sXZWz+q04Vy`?~%8hueki{(Y|3|Lp!iB+w{0~)gGa_7sa}E{aF9(sYlYW zi%c=+v)#W-z zRd%gBn{Zw^-*ZXTj;%g@$J!kh*e^?1%--O-aV4&+IfeS^~qtuQGDIZsj_Y%3%+x$Vdqe3+_Z3Ik5J+5MQz??Zhach95)MJbI|FSP|APR^lEYyGf&HO zp}%Dw7teZ^yvs2QO$fZN+WhWn$yA51s3%s78q9e2NK2-qmZ`kl*2c+Mkkzo9LDp!+ zCKn5}+D%4%*G~H0U&C{GrN`e%N|w>`<_7mStlY(Pw#sfHt9X=j+FtE;BLM-;u@+k|~z%}`wOJ~b=3^y;ntH}kf-Gp1;NedY`ejg8kZsGRu#(l{u*2M+xD^*Oe~X*3+txN ziru`=`SO`(3X~C+pAtoW$EGTj5x{;e&^j${hROM>p%_ z=pFx+TUE_+?pWcir1q8kW)7tbzS+)ObUQ{=W42e9?BudL8oQEg)`l#LO_yx8d%OJP z;V<)^b=f$WJSf(l{`Jq5J9A&VXLj2(NHMnLsL8LpxJSCc(o9{wZnpD$4>qUstL`q( z<|)%#P_=3L(}QugwX(^1ySLi0E%=r_L09=-t(@)Ne1;QY@>O;!)|ceWL~s2vP55~3 zU9g<7m-K>ZS9{LiR5Po}th_jnOZqm0%=w8c^y2tWyuh{>g z;=t1zjc!Nd1mb<;uZGF7{y4|ZBI*Bg{@JHae%YULOHO|(d+g!=-7ET{Y44KTH}9FV zw-oHNY12NXsI2N$n{K0Bb*T2z)4Mj;CpNF|zAtn0M%e$of(#!YezKHGwkplo^r`l5 z>B&>Sw@mr@_3=afr8$ol3eKK$q1F9KF=*M6(|+GC9SeVM@B0(*Brf^D*3z=VeLaktC+1rIHcbzxa|2^gXJ-v_F4Z4#* z7{xfSPM*g!-+2Bz)3+RVJWj7-n0k`I>B8m`wr_#^V$AmPnb*vD+?gtH;hAKiOmN@+ z+3YuMPQ{tu_?x&)5_FSYHD&ZeEZnygj#emwp6^zFR&+wbVzF^~AxmHhYNwzR!l>>hm; zUC}O8uy4;3rY(P6EypO`I&dYXxKe3K!g`LjQJQb5vDp30pSlH0zWlR1H~apwKRh=k*U$c7>~{Ki{{x<;XJ%HW(#fm7|5nI| z4}03(cwMd~u5!hmtG{#q3g6gk{`h15mE$&l1Kq`PBcm#+mp`fXsr@JKzFcX+^{TIF zrQg0iyFc$&iO%8k(|Bs?80SGdS9&2Y5Q9lCW+(}HSS{{Zka0fwf9aC;7(3>?{q`r% z|C47n%U@?vv&DVY+>YwAkJIp@{pQ$??l6QK%pW%b5M+N`mvmHDB1T*Ys?u}>u zB6ff=Fg@Yq3DYwfv2M?{iLS6?{UD<`%Q`^(MMYwhxW2?wr**~?w=`rPDE`!PWqqll zPV3YoFL{sW8Sb;(du_+5*WIiq7L_*cVR+QAi7!L?zv2o9@%J+f3U~t!3W`kJXxVz> zhKhPHqgqPbf|s*=8f3C0=gF@tXRM!T?0V5fPe*XoX5of|f-*04c~rLZlx_7m&GzBj zM3&SO6F22&?PPVyTi{kE_0(in2t(=(hQq>LJNBjssH~VNRkwrfSoVv8X0Btb3$#;uL*uz_%-R!>STeh_BHUvg zd-IyEbxa55l&XFCuk1QZvO7g!PtQ~#)4^8=(bZx!P`)8Nu zoOb04o*HcF)AYtIbADq*`L=CamTJy;$+&{Ihy9(gq(a<*70-O^pY%%Yl>f2fjceJ) zZ?BcIC&Y1hxl{{^DAdGEIwO)>Ey4d(q3MrxN~|VB>dJ4&oB&r}^{chi`#s7U*3?5i)TUVCn)EPZX}lOFk^Nht`(JXSg@1Wc7&&e%fz_^9M=i_OIn3Tu7;Y`S-teR6d%*nk z`Ex8Rr&VR;{M#VexQhiSDzGdQc zq|D4}(_tfx_eTGw{!WYjnG5ciKnoVm?KQst>FM6SP$w%e$7k_-1#Wp4PrI!@poqo~zdRcTz@z zxBt4e@{`qig{PlmqQ9K_RAfK>-1Ubt>z99ezh|1g*8Je_)kZd|x6ftUGYRduJng>x zTe7Y&?%OM2S^uUlQrj-PKWN)6y#J@wVM(_oi=Q(`Nq#6&y{u{b;riLz zIo`s;Q!iH^v-e(iiAl*+LDT5Iw2b@w?cZwG*i@wyeLQct|IM!#FZ=FVrMhOPnmlo^I`84-yL#)TQp6j{QeV;$uNdB0!c+zaX=t@S@S9_jM z{mokce&T}j$@;SOn`#X#=T#j$@j!3Q>^u6^wO6j6ZTNI8ZSLm`|67K?c}nhnGT*o6 z{f$ea&LubGBIXDG5~<=ViPfy%?WWiLZbq_A)qy?!haW3UfBO35pXj*dx9-e)ylciA z<=Xl;caHztb9zns?ZQX*l5?(F{=WFS`T4Q0^UnA`tzE@)?(+46Pd?6AYFWSDeE!2< zHf43yW_#tPhvsF@K6BdlMbbt4llL|67iCnb-1PKX9CTeUckRt@3Orllq;uC=h^Op( zlE5XiS$@*rqGQbrrvv`77W)1+m{#Ml`|ah2djow{N*s$9)Q10m^5%TrefwSdC9${K zr9RlN?f!pkf^fq({rY`RZ-=`wJLwlsUHGnh!(pyA&ZFU`nU`i;Xd1Y@*rCA3XvkyX zAfR|-eLmwyt`6%X7EXc!0t-1J!V}K^k_+9C(30d+7A7jhzNY>8js3rD*R-1pd{u7w zusz~kzJRHMj=$hC@e2mZKEiEpn?l!ZxU;wS>p$&|s@8|E_#S34A6d`%D|Jm```2E6 z!R5A(p4GbCbX?YvTEV(^ccaWahw0X99`e1O%51@ zLI3+Q0!<3*gdb_`s8mj}WB47N@Lfyu$TO>@m7m-iSdQ+}u=_Jpa$<_dxAM#qyF2_6 z=4Qn??mu5I*W6Tf>iP=v&)o0!o&Di=_FR?nzItUF)2JUackDI&G1KZf{}$uid9g*Z ze{RqJcmFK<8Gyp;O~d|;>zX+4t6Q;w(EeKL7@Z+|#E`4rFklXcp+d*c674^-EuaT^Mo z+*5d$uW-0YWab|}PMdwqA6PWIcIv+3@i_2hz0>vW3tyWu9Q_*Z{^ovl*OPsB6;G!3 zv!v{IEA6bG@Oi&8)1v&(U*|L5NZwP~wqsArx%W&Q6B5}Dg)e*^uJBO$f`!vpW`}=5 zLi^Y`xf}W!YsIDVCy1Rmc4T|n^@R*ydkU-#8e(15^y}01{|$36(YIlbm{M#gvYjz$ zPI@O}iMzvgxrW0~w~uK;-9KU*PO7|LtWmzq{6u4Zvnz``+v#@`8YZ*t<7Fv1`8G&tU3&X$+x6NTZgpOAU_2)I zV)uyyDVhyF2P)<^9$|Ak>oCdGeSx_`v+Kz=l?e+yvecQcuUN$J?=Z^=G1dpk4kg)# zWu{7h+}Cu8>%slEhb9_+luYt9zUOdUy}{M^{DJf%l3fg)ze8fX?r6TA_emtg;oA)5 zt?3&|J0EzzUeBuF{*wF0onPq5B~DoR{Q8zS#o#7 zrSom8OYG$sY%hF{?DxO*sOE$-<86?QE)YZ!SIwmk7R)1M{CyLE2C38P8d`i}lv^mOaV+cnuX$0YSx?3z=4 z`|f`9sEKKd{>2B*Q%f0_-l}lhH9_yn`@)sqPb>0=|NPM7yH#@)Lz=?7O>c^#SH2YZ zDJk+c|MT>j!n>AiHdNp4zoa-nXHD`ZtIT!#`?cZ@Oxa?2Xwm*@h1E)R#mi>>o$RiV z9o`=o68`S@GJUDy*ajij0}l6}TF&yGGIx@Lt>`^p>(Zr$0xHsz*S=JHVSaLE>dH*6 zYgZ;7{K)pj{GZc5zxEFq5{#lAJt6k0KP_f<{9kt^Z{^!l7O8I+hb?#bdv}(~`P--R ztuqv_>=N5hbS;oAlu4s%d0KJx-~LIT_Z-x^C8MFBaXIC3cTvL`4%uy$Cpdm42-$s* zG4&k#SxUYe_Rsn!nveA1pH1v~%-S#ckiY>~B?ysqo*LxWYl$a_-Mu zKA(plr@dXGKCArZpN{p@J8fV3N=BbqcdIyz|F??VDMwe6X=0WIUp=4u+FetZ+I{Zp zmY;kdUww^Qxwd*o0vF$d&hF3Y$adYkq$V&}E|q^(oW{_d?U|712>$$4J>Y~6__ zVyl=A-ecbJ_D)3ntDI7SD=Unbu&doRDtm6YT}CY7)4MmynXgXUELdB=xq9kn#YczB zc|z)3)T+0eyROVvaqC!L6DQlexBE^-P21+1@9tfk^DJim_s6>@@Sd*Rpqs^~XnEDW z`umg{mdVb$Txxe#zn77hoo6@wuVh_LrN-Uoq5qOAc7QKZ+MoQTa^}%<0pDj%|9Ru# z(aX>0{#&@muKVFT5&!kG|Eo_;TyOLL?`I|3kAG!8zFu2@)N<;#%O9@pu6t!S{k!Lr z@^$Nf-e3Od?bO$o>!w}aa&Ob&-+D7J?FFi@bstIiPL^J z7B?+C`8obmm&LQzX>oo`6VBh<>~Q|auA-=a+$(mAys`fL;OmJ`->s!>>dQPBub=j;uXBpxHSg}M zJDdCRYs2MVA1}R@+}^$ay!V6W$NcsBfA^I$7gW#Rq}(rge$ATTQwUP4^UcNoJ zGvxiw>oeQp!d#VPl9AFt-i)7X9S)(}Yr^OM#c?HSSm>W6(Ee z*$u~)^=vWmpXGWAU2fgqkD-Pp_3AvimnA3XeN1+~4pY zsOgyDcF=(TM!kT+{y85XJ?;9t_rc5A(mt~Ve}xEK@AzALWS7RV-h^8W-`BIeUKEjb z^j+D})BIsQmnWpyF_p`&ulOohaKklceejcFhKjF=I)Z0gb@q51*&%7r!+6>zp;k~> zqBii({aI`*89X=c^6scrlsGQ>xz3aKTF*TnA`l)Fj zPGq*S9$&nA{>ELsn!c5D?xl&}n-TGE8{>f=3F@<+KEA&oLpf->`FcHm`=k%Wb!LZ; zoO68EnjTm1y|V4ld7Uq}Ee~;j?Ah`u_~4nBQPQF@ANV9x?moUgx&CwNho71=!|tw3 zsF-(9>VDkup7Y;)k6d5r&axHqr8jZ0(3EuxRoQD%m2{N zg-tj1UeW7eIB^hstKBKyJ$1c|yOw+=RL+U2|tl>Wp&9HCYPyPlw_oB7$ zCi|!~KNigpXOet*H1D>GGpFd$1%j+1E6xTU*dp=7eE;*5=Vl$!4(txBYs;>k)!DRB zLrdfOr6<2_1>T2E==lDFFbVT-e2luwI?m0UP5sepSxdb zUe+@b4yul(M#@7yP?2WpSaLo7wq^WMFGz3^2O$CC3q z*R!$Z++HZObME8DHwN1$Tg*(qXCbuWsAG8T?i;*sx9)CV6c z*!*}_J@-kY&jAg;4qW_k`f<@i^V3USXl(DE)c5TEHMXUCE0%4&nfj!5=CSmQ*I_@5 zWKW;_zwF=DW8pu;^go z=BNFya=s?4Dz=--u(6VV`%%HtXZ2-!Zw92~p6b6)8gx! z)g~F;Om@|tWb|xfp2h6TH@GGh7iVz1?&-BZqisL^`F5U3->Sm-vKH*Dec1fmE=F!I zx5+lHtA1v?juw?{%G20V_U1(1r9Z1P+4HRBmgmY%NfjynZTd}U#b?pWve(krx=!iM zIv9HJ_?(Z`e$Kp!P)=v3ztL?^q z&Z+XZUmQPnCS$cz;Mc>iYK_iW?weKpWc7^w0w(6tuX~qnx4NMgpzS`zbT*4b{G4eu zs`oy)Ju9n8XxRIcQ%LjA{95nRt55J|Q}-1 zIq^&CYR*otjGsH-oqhiCslPUC`Bt?xEWhw&RsGGm-(Fg-kNdZG%lD73zoxJK`|k2p z@rRwMmo7gxt^9ha;$GFCwO?m%ExK0nWRhL+%DRtJ+NW=H&B)~X=aOc-uVU7eubrn~ zZnZtFxa;{F(JQxmP5-{%`|Njm`x))mf2B6s?BEj=Z8)b;`)uat4e1%@cf9MoH1FCQ z)zb}e_4-ol_wZc5b$H+H^!Cd|i@eL{+Zmk~-1^V#>;Z+Ra%W5KKhWXfdH!qd)YF$E z&Ax70{GQD?DPik{@AqDBz8*e1i#y}=<4ucJ_dl&%>AST+#y7NzRNqbm! zox6NFySC7`%=S~wraoK#SgU30Zr&@tUKNtWy0==}eot=lGXH1NCj~P0rA>d-v?<4H z!sB;eX8UV}D>Rnm)>(5OyyS8#@sQufdCRw~J9f>BHJW{a#_XrJS3W--^10W1#piWh zlW&Op-&!>csqv$ zQ{kaS`ib9PXd3uStgCPO`0+lYk<(MIhgHWm*c^HH$~NJrWKzYfYi&MEo%s$Qg%sl5 zIo>mGYJYRDCC>fG>g64VN&D)ggF7;9rZfKLk30D816Rrp=bD$c3H3+bPG*(2@l|iR zze1r+o8_kCp@z&jgR|VvG8t3+veln4KD>GQf~R8peCGanNq63E+%329HaFjSrAI=B z{=)P2Sts5(KZDPKqwD1asi&_P1;mfO^D>aXeDdjW>m_c&M<0qcaH+VgU^*VX?Etsa zjE`Sz4}NVfdGu=scf}{iBM$y`VUU;srJ9UU9)%hoQB zueAKn_F-4{{Ocz#e>?Eudia-zU(cLZb@;M1_{L1F5A(%Uzs!FaeA{04OMB&p`wnlV zbGKY{lde6L$-E#R#LC@rartD6IoEt7UToj5{z?76Pr;9$9R;ctui3lW?}zYQ-@Nae z{9fH%G9SJimki}{Wt#urutA@(g5kt-hC56@iXHx&HrO+Mkejw!@OR>Y0%HZg>MON3 z)EO8*evo9?Ke_U!rVxWH!@LD;@AEd?sS_2du59}Rb%eM}Fc8S*w+7&-ADmucMKx!m@Zi^v6^S5L%i zV?W)u@m$#*rm|&0=b|Z-U%wGz<*B+D#+Da3ahCet%D}ox8+RGWn#`Zy8eAT&5_xXp zI`#QVsRNT%`myO18gzJGymsW}Kp;@?hIkcIJWr zxd|c>4|cW3YH9nuG>&0@%&hR{Gv|_-;mjstJ9SLunb#iIwB6jIb^U4N+H%d$TJw*| zG1xx)qpE+$kfGAZ`XRC#Cf}I8<(IoauwPQb)h$gfYvdXk4!Hfi@};QBs=1w~BiK*$T-q+i>yoc` z?wN6Rd9F}G<%h2B8RkI((SKe3u6g3V;BrtoH&go0Zk4@>4*rbFy#WEgU0>f%=I*=X z(eUujJJuPx83(IY=qktoiCGBs}RcmsHf=Ej}7a8iSx?1HC$xcw*7rtw=?S* z!wu_mA`(;6Eax#xPBlFCRnT?oW!8-R*$z+6a`kXkoKL-TBdTlmi5YJN{9`k=-aPwq z^Uk;4Kbpp!Mn3DW>DbtOGeMfit zPe01fdeptt-FjK$tAJaHx^Zq_`58)9BwzPjbLQsMqNI(vUJeNn%qO<M(xA&)8VgQ&$C~> zXwk11Uj38z=Ojm}++QnwcuDpoa~`d){L4#qQ={r1eY~0@aB_yYH`h-OT(Zk#w*Soa4%;@|h+Dn<<_^W);~yPr?|eG(bjI6+ z{SD^+Mv~KdoqK-BHkj7u**4E#Ve|2~gJ$0k1H16tXtnpz^BZ>dCQX%H&;Q7-c+*F=Ugc}|{mqJAe?0bm z@43LpSC`CkpM6UB`Q?*!W!o?2?aAi4pP!@@O;V44{qaNL<*2#WUhTW+1}gpB{p7dL z+-s8m|JH5kP1io{&d>N#dB6Pb@{g7CA3t?{ap_mB%+oKgu2+hFxtz2*^ZeAxlYi&E z{-snDSD71?`+45#uZy-Ed%yInMfm%B+7ouX{&&;+_m1-4z2_S3e(s!C6Z!7No%bKV zC*I0<`)gLtwM*-!p3l^KyL$SKP2RsIo_DvpKY#oBA5~v&o%^hqaq!@uIeX{*{KM?` z(}w+;?RTkT2ZH4_!+u@J&Yk>C=H~0&7mlC4vdrt+8zuYf%UhI%Dz1I{_BCq4w$}5% z*DAd)u2nK$5PxsyuP-OQd)Kf3KKJvN-29qbUt;*4m%P69_;iU%e)#>?R~0jVzc096 zRoiybw|;((#ev+6(v1S{1@bBX)VBQUI~Tuh^7Z0bUUs+NJ+D!{?EhMQTD*T-m_Fa! zi1@(i>Yrb|ZHSF8sN&jHTfwDwsrK3Fcfl2lwe!ou>`e9e9Kdy@M7@(25V8&1Ei zTz08oS6t*Bv+U#**O}MZKR^HS+OfUGc9&-5e&6%u)6VnuA5wpOT$z3N>zAEzjJEbG zJXf#S$n`t>=`;3Iv!?o~X<6nv++?te%5lk-J9d22lI%6&V%LLwrFX1eW?5w2p?HKv ziSNXBc86yyA=_sh-0}WI$ZUIFj=k3L?|P?AzHPZn!}rDXYNu?k&zcMF&Dd+!cfbC# zWrxV#n?4H1e;<$C8oVhxDv5%>3JH-+%bfdICzaaTeC|CTcI#85 z!4bxCEs64`$8(c*F`Kl>?C!V`%ekyM!S0rZjl-!Vp6sO^uiFK$^Eal7$>gWYx-YS{aE{6^?}^J z>Un+t-#xwh`B(0jc;>Cf>tpoTZ~WXXAG(uo-`um!pZ6@DEZ66*cKYzAHP{~jpKy;M6zeM|k9 zDHXq+Z#ujHWpOv@+Eqvmoa6p?SN`Lly}a&sHN%2W>i=~ftd(bA__TGw`hUt(`Tso< z%m33YQa0<}Y=fAy67oL3ZvQ_XIq&b;hNth?4wpJe+&@%Z|7pEoKXb!(g->g3oc}w& z_+-!ULz{tn+HH4>KQRn8jytNFDjs-l3TLd5(_HgcMDt8_?=Jspx9bm$8TPSU&3AlW zuJ~~Ig&%TX%#_}!Wz?`=*w6IAl41Vg9}mhKKkSakyWi}$-sy?yi4W`zHq9@pJ3jX_ z)(Rgu&sbypaj^r_qWcai3^NwYU^x5YmeJ4Tg>I$AmO%%eH?S&Xd}@DoL&W32@!x8P zjxIfUGcsWzV@=Z*Rd!nod5v4FU&>@xFibeJ>6~fB<=Miz%NxHtIGtI~c){Y-?D7s> z^(9!hJ)fTO7iKu|EVzC499OopuU%}UGNv({ zN@PE?y+JOxDub#2%*^Lc^~^up)h@_jP(2+x?V|CO$*1rBna?Q4o3OKGORzLn|*94i~_EA_&PDwi?0 z-}zR3X`$?;m3NpGewUou#iHU+FloL{JCjPz7eT|5)e~~mCNMl<-D1q(*s!7fnc38e z6RQlJzhtIebqG$*R5wkqGii?f&Y)DXH>up{AF?V_0tW2HdvFUc3?K<5u7;`<>eV&r*?r?L5lAnfy z-|Y-#KTkF0psLNhPmg@?u+qI^mi+cQ?+TmSs?}jCFHcUmy{cjRnJvLHeFg4(F$|OQ z`pqC(Gy5%j^IkuPH^JM?^UiFTJWrha$mKNQr$;_aT=s9}yFJ>~%rm-I_8w_CFY-j+ z$gy_Y7u#Dq7X8`!FVpDc^|vmcX5>aHM_)dvvtGm0{+`MKrhTa^mVUhOCh20mtEJ`k z7YlOb-rmt+>z-QVJjs>i)iSm)y_0Jj&a;*lx8LzgE#~l#dK%2ocy0Td_ZKT7US&Pr zY|Xfh!Dyy=-@%I&T$d70@6M5#Sj+hOwrkj)p!Os`)<2o03i3zu7bF+y?rXmg|4n?# zo2dNM6}HE@j{UvcQ9Jd9U3`UaLm_AK>HOkFjH~LR_@pi`QF3S92=f-f-!@^HlGNfqKgomwO+4Be|AIHz9NK z{k|O4n=aamAD%sS=1s+|AKRpa&DvJ(?Rv3fd6J*Kr=s7nmuKRWql@J2J0~(nS@HT7;>?o3RKJEXo` z7618*?VMON^{ib(+8*7i$)D5jZrZrJVcW_1mu%t^6=t9L#xq5n)1i1KZ$@fwT z*Y)52?QQb^-@3f4qubVIR$nvE7T=xrxBso!tz9O|mqbrfdz>}dJJ$EyH$I;1`?0#) zzu$|vB)tFZjr6yV|2W4T3ICHU_jyJBRNoms->b?le^Q$#RTsI=A~xOXiY! z`+uL-aK2k^Ir&@At}8mllIOEe+3Q{YU&yQd{baDd$L49*cCR{r__E~pB|od<_hs*? z{`*MvOm@kqb@z9c>-Aney}xeV($Clb{1r9-*s}b0hVQf(H+}ux?_Xbi{Ps?E{d=kB zm7RRQe(PTfpYi?olN*n_o#hWyHpHK|-S^~QZSK6~mgg?1{+;-J&yv5_XPsaA_U-)U z-+tAv#U`xUs}z4pzc%{DYSq*C9hQ~djeB3cDJr|Z%GOqM{$*FM)7ROTtiAGf*1?dR zT~jYh*BcA1D08YV+H8CL=?|+f6;G<;@^`%1T2pm?limiu54GIur4(*7SJy_y)L%Xt z`&{zz((fCqc|LsK^SjC=BzB|OCfnOP^8|C{KjvP{p8Vod!1ue~<~{qgqwd??Q$-7} zwe9));N>!zb9Riy#r2PWeG>6>iB3Pi`0CO2Ql?iQnZm-w59K)AsS{@4xBOJ}?bqpT ztA+a*FMQL_-+Z&KVt3x3$m&^k8nxU1^y**Z*EgOv_5bbN$A7wNo&UBm)zW49vG4tH z`@+)KiGR;LUw;1D*EbIS^KC2V{r$Y}J)idX$mvz*3oHNqj=CTHxphZxb#ncA^Di}D zm)-btL(9R^a?eQ{^#_wrS@uuf)p0s}?i_2kZ8;Ki_OmZIw(!$0nZD^$ekLt3wYKA5 zeVb{?4Tp29J+)1jNq+kCcgNx)le_&J-=CktYhJ6&J*)Da_e%41bA9#SS^s@^^Nqju z%D>;e*G-u6f6_TNSKAC{7H-YxsOxGG1_{%@y7hOZ2Kk7I_Z`^4Y@qsg-tv;5?JN$9 z653R3`)|HWVV%Lep_wUAu+;I2q;m&DUcsKuq-p3hI}U=|VFbjP8upHbG}-W|rv zd_s8*5BVydu2=XJd?fQg!C#TWU7p$A&#V)~-ps3!tN3Efb6s%vbTuAxX1??54BZ)@ z@G=)h9rJt;S z|B%4`K3h5FcJqQ6b!|Iz1UT9X8&)MnikuetaPanllAar}taogr40|#YZ`AP2P*0f2 zd}u+%he=K@hO$b1s!O=i5Bd*Ij?#PQAW* z^LL*&*46EAzE=Jd{_5wGU-{(;^P)GL-%1{D@ehexWpj>koj!BXYcH$&`{way>mPjm zH!0PPUD$=mOJ;r(_er^Lbj|I!c4 z|98H+|9kzSn*Z!&`mId+fAlYm|8tzX?)iQn{ipB$799F_RpbAw{|Uk-%*Wj4AN}!w zjeq|?wQuYH@RZyCzCPihEkpgh&p!pGNtT20L42${FI=K14F~D?ChP z;Oebsf1p?+q4DP1g&(dA`b#C_{`NC!JbEbh@q<`HJVOQh0qY4L*i8O0UC?)!e%|@3 zBh!NR@Wu@e)4wZxvRv^`;=pbOIR(ZC@(iDh8f-)I6@?TxwI|JAEPTwm+uZ*K#{#d( zURg#*U;YuU{qE2wr*N0~q`#k`@RkHkdCyCiU!T>S7kP!}(}trz)zx>fe!s52W&4AW zXDiEBRWF&WQqCC16Iv@cuz#F%1xNA$hi5i9P1OI>0B#JXSN$ImCh@w zWS=s*in-C7S0nequL|}v{zmr|ZI#b!#4}&l+c0@cu(c#ZniK1NA%+!<8$EZe6Bgi) zd>8ywwa4SPdxo#{w-w7PxeaVQHubqHyjgHqlt)9`*OKXk-f{0fjRqNC1#v@LBioMP zNsU+I+j$nrcJ7beWp96S*9nD?g;kd`R~hCqD46MMF=oAuW;lMupXWi=R|AJ_Jt1ND zTn-$tGi2sD&Bo|pInjDP(^|E|1-`#re>L0+bE@^9rus3*VNJs4^J@OjWIY!AXXz2* z@mPK__<-oFTiPiC#%uV~>_W6JT=UcFja;{l)4_7B-OIUKQztFiTDwl(zUT;IMmOm%J&sY~5nu+S(lZC6Q606Q>GjN@_*H$g{@2pr`tn6a1tHtq_j6Z|y^&$=PCzZ_cKhC>T zx2xyvO^=sb`W#aZXU*Sw-^6XY+O~)bA;;e)d2`yt$!+~6v*Q0VE3@R&9Ysx!4{x7b z-_RdxvuSsMb5^aN-_5PxHkCcFS$bCcc2CLiAJ57>|GI9r>#+CS)2V%J|I;a-gYx8# zH*Gm@s&G2sb@ZD_y}@De>!h>(@mT0ML@m%cpgB9WN7AC-=G!ecrfnOJpHizdP416p z?5tWs-pa$Ll;krOI!)A^tqs%rGjuJoCM%`OTMn!5`0_Sgu=Z8M0GcL4DHM zNB`c0ul)E->8sM!*tcDUTObIoq$q^;6dd;NE9D_nL%{B}zAf;~R| zIXZG#WlmLZ4<7b9Z`81jQQzA)*i3t&U5FWD=hXQg>gzvfJ*&vcT~}1SX`S@^WsiN6 zmy|r~cUYCbFXjKeYuX0+uIqwMKm53+^1X7U==?J^^7HTAno??A@=5sn>|^3`m!;;d zJZ~nQ$KY^JW7Qt!9lN4t9$gnTw|L&RjSQck9K4Zg!zwj9?nKFzuesaqwyJOW)_T8o z@A<1ejmLyvcfEI+KB;e;tZ`|I`^H2X-6n|i)PJGM$qPH=2aqI1RzhpkEUEFK- zYwJRO<2?_Y?S3b|+_&)2r04pI=2!L?{FC2$^ZUAKweMr==lz-Y{igS+@b9rPzxY?T z+uBvx%w24{bM4b=&7ap#{?72tdw%J6CU2Qy^`A9Y7e9|HymvmhKK@(n+XFRUOP07d zeg3+0{krcj@9r$p*FF8(&iD1)CtH_kpTE3Z|LRQft?u9E>=nDb#fl-W?%upMo-bcT zv@<0hWM}f^^u*{jhg3!#e6Ig4x#srX4wlC=0>dwA{<6A1`S#}*@#}MUuBrVeG5;Ia zE`jr9cNsR>)Sfy2<=5pX*&Vt%_V>5VxgYgEZu4Hjw>x|0$*(>gwf{+t!^^ifw{C1% zu4Ef&6=!Q>&{>a)ISey^3Ca;f3eljnPCe%SePirV>Z<9QnNE5Ks&$@b+R9M5w;J^42K z>8H_XS-3ShyB{d8#|BZ9{a;As%O5truy&laQ^w} z=g%?e_Q&LlZ_>`Zern6NufcZ?tjyV|mlqnKx%)bQZ`IGAufPA)$S!(iTO5D8`?um= zrgtZ=&j>s1{5$tuu21lnQwi7C_&RMnnWEBre{!YMyy*M_AAGg|@x_o`!yUhOE zF0V<293F+c{%~6Q+3CD=n67wyuQLN%plr#s21&!dj%Ed&N!OSdGv|i+bP2O?I4%q{ zbQDmTTVZ$RfT3H9qEp*)iARD~>@J}hJKW~jcQ3f!alGN~C%FYp8=?iCaIL!DaXfru z{n!3R!^WPc7k_iC-^bj^{GogOgKz2o6%A|}omiF6>QtUE$$|3A;)`{${b(q6`<~ZZw z8B9Je=O^9KEDIM@>N@p7V~BtOzq&p)qM|1D$hBIa9xXJ5TuYxz0p>lbCc z`^o+%`}1y9-ixmNCbQ>zYNloVx1MWm0(Hy6`<_oe?fpG2|5IZAan@(MecW{?q3)a3ygyHQ=H6%cz_M!( zr{q1>Ct_Cij(79_NIuOMnc!z3&v=KaLY%|8!>0Av_K6Ko@}HY9A8Y3qEbAA1&TvFI zgmu>*uGoDHC$t;t8d&Q7n={n$#NKn6GtcQU%Zt?wY#K}<@<>){LG#=q>zIXePGxWE zXIWtuu;#`7d{GT{$-`_rRmPBUVn2HlAA6 z@G6bNErZdHFSPCFk0k0Y+74r?tl?M}OG%Db(`C^dPXQ-E2w zMne?y`{?L*uf8+6EdR(nQ{GN?`oT`$-#6I=y*EkDD&K4VH`lLf`jvU7l1sLAs-5=O zcI?vpDJOq9eY|L7W?>-v=@C2I>&@q)=AHe)v&A9!((N>6W>?lddb##&9{F##=LStU zZtu9yKFm71cIlj|>_3rpe)$q6_Zhr>|C#(#INk9(S~%L&-s1xM=EDEJf3oZRX1VIx z#bxn$+wQgbAGXOn=*QNL-i)0SEF8W6f47U>Cd{)&rE86?XFd(Dv0wZBZ1}^EdvBQOU4C-R_i&w+eY(!EDE)QD zx4+Di{HnkF`Ps}%IsC~_ug87%vi@@7=cAK>>id4wHech^cvZ@FahmYa&k`^G&Uz+$ zBrwxU`*KbFzLQ@|i!w@%zEG z8j8Q4-HdZtkhd=Nmt*qnz3*$j&3T#p>@>rRqxprizbQ;#eJ6j1qr=;$$HEr+=ATlY z_>1u;JHx5p(|amCo_w73BzT@_b;@I&n-1>|AM5`5)ouR?Kl9WX^`5&{N9y0WpT0Ny zz-OPn?~AnWq}>t!v0L=A#1*a6Zt@n^pEswpE?>jmyEbvQXrWbJ(Y@yEJa#lU?LncmCh;LMH!t9KXKj|H8}16Tkfx*cFFI z=&rgS*?Wy@_v&4JdM-P2=ezYEzZQRuEB<;u_VfA8b3RRBcvoC_{-UbU$C|t9{oe0? z7o9DA@5ozK^`QRylLV_Xm&HwVV?RC2)L@f0mbbO!^mF`JbN+SZiKjdukG~jpZgbC zdS3dezQ?JLXqh{`cdiUHjDW zZnIm{D)Y)+OBt`<-u7?b`LDM${Ev%Rh_xrKoqy~2Yq1xS+S3n*hOOJW_37i(E7H^7 z%$h5F>bHQ~_uIPD87}1YB-CE{uCLF%jy*r(z}t;!;Uc-Sk4~*ti{GXy_wU(fbJ>r7 zRWFq5T`t*i{oR`9b|t4PBkT6%&XCWGFZ^D+w>tMs>BCPowYAneUoKx~w{~h_r~ghf zwn967m#$scoHp9+U%uQdN;Y|E{^^x}EGC|{{6r_XRsSqMs=jMuk16|$%9pOv ze-2OkeOkfx^XHiKzZS2bSw%&#m@vY+^g#NtN+jL$;^;-g%f?)r9qzU@0^E7?^O>qbM8!kUoZY^{vUg$WA0+Jx_@o0-*uw@AIFLVU!obfV&^e_WV@W` zGG|@lLz~!p?o9pB7CsYe+Rigquxj#DGJLRWSZ;auHbWoBZgYi)9Fq12imVsUoA%G> z(HCBaf6Og+-!m(99N*sfLoDPT^9O#$KYwG|KK>Lw^4OW7Kk!@ib;d#|h0}6U>lya4 zrLeyUFO)hY&2ZOxr|S~sb*j^o9ZDS~UN7OCf9r-<#Zu3z%xllyHWYozcw=HXy_(5t zf4ZIb5~hqFS59uqxXU1FmY&5ZI(z%4i3wMp+vGE7ZMfNxEjVEYlWm#M-IFom=U)ci zeClEzQfE0!=G%&fiISW@62IZ+7kx^RYE1@m>ya+tMKmebP(Mr zT$0S{?$uW!eP9vG3McMuAxnQtUg?cpd%kG;sZMwC1IY#9Y@hnfC3}1i95{OF;p831 z&1C1F(W-V>x5}qYI-#b6>(IHkX7;`c^~@JqCmbk~^jZ9nvGM%sx(wzmPM5wj`K3Bc zW}MEO;k2MHs9idtf5#0813l4l%v80M+Iy{R~}-N0$#OO|h!@~lmkt3DI8 zWj%6yf%zlfX}fQ&WBs$+o6(#3Aph?xdAl5@S+C#`==D@ncTjL-{Aa2lvw-PO%aiQC zY3E|EHLMUjb9Gg|S^WIwrHcet8M2@I=4sAzg@4I&rLCSXjrXi-jnKJkmFqEKpVSAN z<_mA1WHPIYJA~Bjcw>_LGqA?-dDOC(&X&2s(bCCZ%@a0iz3N<3c0Y+dY}r&%4gO8e zNBfT55_6Sf;#v6V=*Gsh!|a!z?vZRcX`RJ4L6~7jPEBKQt${!xV}9U&t%DytzWb)1 znHDV@6SHE@nOUbfnWG*k^{Vnj^i}S7+N3wuu9ntEv}FOQGD(yX(*5Tm7n)?4Q*!9dfta5SR|?O3*}<@=c(;~ET^CcB*p)q}Gq>NY|7d8# z7AN&$m&{)0Iu;+bjoX5i+vm-H`j^?NYbj@>6o1s`Ycm)hc`dK1R(7ks_bSBUK;|63 zM+(wGf2M6Y=8$`J)vULRc8L`0=T9jlR>^gqyfeuGWx zCzrF)pK48?^H* zTgZyihiCmxe1DO@FUe~5ZhB|TxUSW1Db1;2yBr<0JMnRN<^C>Hf41+_d!-`g zpKS}?{b}WE0g($;!SlAVURS*R&*FNTY1Xe$2TR_02S0tAZQiz#SLDocFUcK6zUTbZ zt7red@wxZjlU**SZ{KW8Vqd9uRxN6o@tyvhJ?eDR_8zHQyN7As5<`XUzTy&{zrQ>=n_3ZB zH2Y@BoTo>h3q;LgU2gN`$Nv1Plypx*+yL|Or&56PfK1%)Ew&dk$CFfaL2Mpt-FFreeK5EAk8J^=Gnt8I`eXV?F{`{BJ z>G?lHuLv(v{d{&|$g|zo&&7Oe3J%!5ozrHjz=dnax4V|?_f4z*b#{Z=HqmW24~G7W zi2TO$U7KIcev*&Gl(p|9udymP&iEwv_UzC3YwC|p&v&1lHT%M~nWbCJ_a5H#{m)I~ zIpy<&bT>V)iOl;K>6cu@smE*e^4c+$eD>>a7~9*|%$uYCT>MUHb)5_At>WkisRj3s zugS^wURq+K_H*C!^*{F=_!(UracthX-p}*+q2#H)UV~H?19%IcLsF!&vzENuTsY84V*G}K?(BPg* ztbE(AHGg^awuSP@1kF6nBlC`db0w$g=h@eHh%|gOU}{$T7ZPBu&DwRzKw<9d>Q4F8 zPdjeZ?=`vX&p5Rzd+NgZv-OJJrhW)K>9mq3o#oWCFP3?xJq}w;b&nSC2i$$_9N2SR zYy0-h-op>YIyeM6CunqdA6V0*;jti#p-Xbt9Y+_#6UJ|j&wu#pmwSWD9oahO#D7N5 zei)_2IDSn%^KpB_&(|GQ+!O8D+thFD|26%_-aqU3%)1_b?AgI>VRtvVs;sv{Lh#sk zfp5%@KBb;```&?{x#7Fu^X~#5)E*t)f9%hXSf2j01W5t@rpUAt?AAvrohsflKDn8% zeB?g!qwENU2quBAf(zmgb=*JbefWP1|GN6Vrz%{#(GOlZDkjN{n{>=C!YTNXBWQY7hDFgqe!?|%ED@7M5Cd^dsE9X8mL8``zYguz;cxgy~VdIIW zyHgXamb~6=`ziDJw0(CcsWRSuJ|!(&_vt$>$p?Hg`DZ_GXZ3lbx~8(ybD~Sml*fXX ztDACGI9$KxCRmtRapc>)vXb+W37f=wUX^M*(~X%hO)Sl1%Y!KuB86=GKDNxb!Tj#- z>q^Ia(yuSphTXXTesATC(r=62MlM*Z|6N5e*9tg%CDR0 zfz|)H3Cou-_cQEad0@`?$9Bo(W91Ehc#QstF35M7ZqBfW^?~o6U+moP?(yuX{@hlv zi|vE!i%+^Q{(Kks80t~MHFv(#<7kFD#uv?VzOQE3*U6Gm&+veop^o{0@3TynFN!6V z90~r$2OPK}?HqUSw{E|ev+3NS+YN73^%&oJE@u;XW~sh%^21fjg^kl^Em_FK^ZfEP zow++4y65?wxE~%?&ScM?#+7mQfZ{xM?h7dmE|Evx9TbTatLchmNl-Vwogeu^ask6~ zo*81CDncB4&K75i2~3g|D!A?UWA=qPFFX?r90CuzvUxmscAim{ZGyxFLx~l)7oC|@ z()`?+_lQE7{+6>jo1O``Ib(7@l~0#VX1z1>z+tI%m)~1BA7Y$g z@4&h(`;m4`>OYpRE-s$Sm-B}&5oeTGC)_c^FISv-gG7Zg^9fZ3Ey<2JzodSR1Am`A z`QE`ajcq~6p%pXEh=%5;viI!FOPqf2c{P{c({0B0+O$|7h+z!rDw*|qt~zoUOGZq!HRPI}q2@uxo_BLkLzr)0$BBHft z6|R{Wm{+W5+flsryTMP1`y%hPW>;*OFT6@`D}{LD*}{*9u4&YCs+w%M+}V*P~JG=}QW zHea<1?iN`#McFZP9(^_O>*f<#D{pH2l)P4!*rL$v+CBexo&URZ-UP8Jd5+1~rRw`D zFPX(=u3q}Ivvkq*bzx@t3l0|M@XMqn-Jh0v>x;F*&&A6QD@RFd-gNt@-TE=TR^?iB zZ~V=$g{&_ot@~u0>a(pkb<n|_+y+nyHJU}W~qjM-5B;4k-${blo0 zxOeQE|J9tKbh55^$%(eRHX1`Q&u6^VyMHTM!^%c#XarYOR zN}sLGv)0#UNY(lF_?u^}zGA-mj5{|z9FqPydvDdn=k_nZypCEA8F@Yz^wHSv(4KdT zw}x-%pZsU_i72U<3Fls1`lEO9xc}pt8=tPn&A&G9^&Y*)~8;L*p^lt0H+Mjd1w}-9Ynw|Z2%eB03JpPSys?VKXTYmTX zSsUB_b-(xgxgQtzuk=cM`TAAoL+v#9r)}RaW_5ku@^g0YP2+w{o!~5%UHg8L(c9g% zRZpYqw`bbTKKEEtusK1Z=h){Z5$rFcYbAVqg5{o8mej5HbuX;_F>4Xi1l~1S4v#yw zt@}3n^^>QM950&b3ci^4JiqMxw=Z{|FnB4iD4WjsB<_7peWL8E)=5>njuchP#ctk| z6BR$6Z!P41Xy~x%Y33gtkK7FPF6jq%KS{he{8;qDw#gs;gT+&=?mPU` zVPE*3`RPGvrZ3A}X5>G9-}R{@<7=OJ%Z4x2la{Y_Xsm9_UAI+v`}~)^^YxyWCEtB@ zGkU%HzQ4C8xK5RB-&gTiV0InjDx1GwWS?K6&%R;TMFg!vU!1PWqaecrZlms^6J*`Lm=TXW)> zgfdFKD$mM%KXZOn_MJuSwyif_B>hs6{c`H#FM&<>(hrB0STcQNyP(m~CvlARu-q!f zqB)I;>K)b$r#mDXRlPR#HaobrY8hmoVAs6E_=(5R&BG$$`-9k))z&ia?j1GU!}a32 z;PP;Rr-F|*I5Z{Aia-44N%V};e)mu2M#mzLzh2JKf3MkYcER_9rz7UoiambU@$jJR zqsjMM9=&$x>G*7Y;itL5(fdvu@kjpsQ0M5s?>2?8>bKUR`Tu_(C^#Z;&#mH{(4kL4 zOl1=cl#{}9x4%>T#gSamkjTOpeB|;Q!5+uL&lSh6GAGPbc5xCqw=Zh#ZS}6z?2L*m zEsh2$suJY~-f2CkV3&Cxw0u`JmxIXV!~;8o&j?rl=6W&bcjA#9{y+WQ6YliS=s&Ph zJ&^ZY4T}le3avaj*E5xW&z5W`+55Km+C4Rq&xHs7rM0!Zc(*zH@%9Z518W^W&3hx) zf5uKezo1H)vERprYxbWc^|KDw_ozRt+_3-6*ITCRZhHyre|Wo^*H-^v|FtvC|4aP5 zGghQ;xcU3z9*M7e6wb$2|FynQ6ZGrlih1w0?%6-@^H0CZX{CK)vrB%~3%;tHD$ia! z#U{VuDR{c5?)=5Rj)GGZH zKZ0HUXul}pPB;{8|KP$6(Mz2#=QDm#byzRBe1EIX{)S`I8TN3$xIE_{!-L+Kcd`xB zCptWjXZs+)`Jj&dfwqR?*-fARF`Up{P_8mt_4&#b4}-ab-*1lKWo%+QaA^+Lt=ZbI zUH8kB&R@J`7ehBAzr~9rhQ>2;N!&?!H#R)rd>SuyV|S$`BWueWOJ-}sc*_7*S4Qz^ ztuLpYIKRB<(;1s7vhCK|&M6L-d-t5Moqr<7f!R8D8>bhesE)V#om+d7mI&{QwDUdC zdmwf~NFHPACofjMtf#?89?$V(Y7es%lMM{{a7V8>;M3k`Dpz9sb~rIE<@>oMV=)uc z`O;05&lQ;?m>DmpvN-Xb5LHNLJHTTexy-}HfFYJmVa6Y4?pY_RRLZ2P=L8A(HxvmK zT&bC~`O3F0V*!579NBeUb{)$mPrB-7dTy7dFN1N|z2okh`PP4J=PXOMPd>kLoe=-l*fo5v+c(9rFt2Q1Cc@T<%1wYwW~O+IQ!&dIY1@GIZC z&toI|?F!|4jHeY}bFkL%wj5=M-`wh&c5VLBZPL%m3=f{v?78;8s8;g89fqQ{J3M~P z%azU-OZcnqw_>?TabQ>+TSBCR)E>!0lP*8CIj#9N=lq$lkJo;$IIo`S`8MAweZlvl zN44+#nM4fsdR%i}u<^GL!g{(qF(vB z_PNj{HBGx;Mky=CQmh?&z#*%{FJ>ed0WJ zmh+IpZr_bBj;(+8<(c!xR}tU(_pZ_Wua+MoDHb$o;>{xmmp**|C1!H_Rnvg@6uGtg zrim~8EYGGp+dn%w*f{LiD(*At`O^~qUikB!=@|c9t6hZ-jk_LAF*pBMXM9>={ksyo zSlwgaIluQEyw1gO{k7Y^?bqCx8oo1HGnVbPJ1nhrqvD|SOcV8jj9RsMpIhtZ@JKG1=;R4e6i=E2;Yx zJ=v|@R@a31XC0SdZl3?e^HX;9WA}~xe$&p*I4%7*Ab!g?J-dxxRd@S8ZrqzbtM*yz zzt3u(TIRcA|HCISuN*4p{74LW@=7ALR&h~| z*pu9&CyUk8A1!{k^7w1+fSUnaQ=Uuii<@D$uErcZI{a&C!1={QmT> zAW!Fhqh0;q@4dct>+f^PEPJk*caPuxd}(Rr2I(hpiPGgCDqqg|Gbg(;KiVdL=JQ{d zm;U^$$h!|)T=o>d$Mm<%QE{l?tPw8v~q6XmFpqv>*c4t5M8(P zS>=nn-0$wq`n`9Wd29TxO%KA?6mQyO#ZsQDYp-nH8@liIluf?7C4W@+p8tL7$psZ( zOY@o=%dcOv`6_bZeYD`)ZEybN*xOG%9Ne<-GtctnnU91&StY#m-L^$O`KR4NzwpSp zwhmQmZFvNAzwFt&t@)D6l~Cq0>?>sQgjfHs{d?;3)7yQer#@}}y=T{L$a^=)F4 zg8j}gzh?H|{qEwtlDEt1W~a}zU(IZPx^z?UNy|Bh&qvLhWBxt<_r4ul?zByN-*BsJ zjeJ;IepmC`1E!a_#9VD(&P~lSG8C|7zOz%`{w*t#5`(h4hJcol_?j+8Ve_ZfAb;X;8!loYo1_OsS z^$8WdEBGhP6*{qRerxu0BV<-AN^L1rJH?7hPc`Xg|2^~~{(pB9OB?+o5)v!!llpQg!l zoiX5`0aHL@i=zE%3Acj=T+<{Y)Eq)L?hn*Znx;9`^i7V7kMhlbR!{AFm_wMK#jkzH_qtfAiO*>is$fhtDTpM4e({*}YnDl{4Eeb^T8j z*>M5|ztWD&aaBjTnFW1*A$j3ZdDUY7g6}teKNXyJvU>9y(<=RY)hd6k_m|mlNxlE< zRrTzw-9OzUPwsw}=+T&Px59DPr$oCSxy|=We)vv)y=TXB-?%*mH~ROh zbI%%?{V!T7Lu%Ls*O%Y_u=MktzbWeL_e-qUZGEcz(w3k9wHTg!pKq`qGG6K?UF(80 zAr$V+*bNTpN@1KzGWM<=PUEn?R5-q>=*wyQ@^0`YW z9j#jbXbN@w;b*AfJ0P4~}sW zu;BCbQ^t=jKlUI!Q-CqLhy(~vm%#l+`Kj+6gis?#t1 z_D9-c9WzT)kV033kWz!thuM`|(}EW;-k0cLT(DvA8i%*pAV7H(&`YtE-R zuTva66}BENnA>o#Lvqe+|K)5(5hkB=9u%`pk)E+XdxGb@MQG1~q zW8$fZTb6ShbU8oBe9l{|*lft#5WwKY({q7^EvC&zceZ2nDo&B~<@@#9kHp(N`}F-K zGiyncOLjA7#1cF8NnVo}h169R?09nd+}~$w8KsWZT-xPy*q6!r6;tPNmLL5;uT*OY z@EYv7vW@e1%=MW+ysPFhJX=GrO^^IR1+Bw8@OI94nF-?lWyO4B+kJ^JKiDb7lFavk`ou+fQfS{>c(>`QRdM z!`HoYUFJUBE0eW9w_)bB^=o}5>go%mK4hM`nR#~iOa5!?SJZZ$ zyrAR$>OL#WS+kq#Q%?R$-=yc@u-g3@|E$#MuLJ$|gk`C(-D92*psk-`oyb^RFVlXr zbxvQUrh3P$dl`AxwVD3S)bsF-Z+MaR{&<%78_8+gpE1;Oe#?G(wV}w%=5^1ON{?$B zmBi)rlmAK2nb)$#z`@O-FY^5-&Yd4;VbH-iS6!nK7s5uSE7^wcdpvBP#XF=6-20 z*VJ6jmwq?p=H~oEv-w4$UDV%**`BEqNx$T8_suonck&9ON87lR7brKZyfyV0-;8ye za?Y%3HS5;nE70_TqDMmaHwB*!?m0=Tl*8FWH;R)A!Fg?sTETQF>v)oxNXz zFRh%+>U`ze(f42e9yz9S$xzX9*87|~oeQ_tIhkxTZ%BOBm~u}iA^2Bz<-}OaiM_e& zgm3M+IX}y+;E`GBw|$H|SD#kDKHKp^%>7CGgW@-z{w608X#T|T=7k@jCFLu>Uzr;E zXaAgaS2ES^y@{0Ox2)g1a<5$gm!f5{Z1HZB_ctu(rxj}~__Zjl-(#Pvc*Y*H-{p(s zubunWbMkD8Ywg89jQg)Of8F;YyRKgM*TcWg{wn&6eq!yvo=>@bW1e~a8ut+Oh0k|; z9zD4-xNhRXpPDQA-EaN*nepk*j!)pW&8-*7ibdDY1?As(65jlK-t(Gk6&CJ$uTOZs zQ0~9HX|2S+IFtMRi{s+dtKJ2z_qp#jH@t20mQSZ{=vMo_KR5Mr;*%p!E6dM*vb#Rr z=6<%#&#KDl|1SOdd41znlk7kD!jIkBoc+~i`uV8ndB1D@`ljDlc~3k0{mtJMi&sv4 z_xgIRkzG1}by1C6ZTxHZ=daGJ&zSyXYuVYoee1t*{_pW^*YIncCRVxazEkG4Cl|Eu z?|rrI)Rd)$7TGn%j^c6<1^_-26%BOwXPEVfZ&8 z?yb51_TRs4Voy~@{cQ-I`Mc0)(Y%mz%j-6ueW+QxZux?B+cp^0%&n=ew*30b`NYp6 z*&TX0+{GN5*L>PA`MB=e4ld74RjymAL}RO>YmFA%5G57C@Y&+TI`15&=)M=-?U++oeKCQC-STldK z>Ad?}U)S|~y*_i%?)%#7&27Kgl-$4Z^ktBJ;Lq*_XY^Oi`}o!B*qbG_BBhVZd^e`d zuFrjTYIA|=@m-4-9l5ciCvD!nk7sR64e!+WPTwMy!KXP*CNfb){*l0?w&#hSd-Os+ zCN}i!W^ocfc|N;q^39d66pzO*KKncR&ApS6YwZ5~R$kI?wZDJvoJCwwvLEX$mnCnC zIs1LFfZKBB2zkvv1+q?7KMuSkjc|_j+&dPsm(|&LW9bdBLqc6{IbHfw<0@H0Ded5jdW7Bs&j`^AFqqj}9dzwyo zGprMMB-&uE@K~DRpSp&~g=~fEA644#(BPDE@T>DtBiA$TNAF&qam~54 z;qFw0VOO#)o z9ib+jc=`D&wWM-g4o89MC7*unV1A}4Iiqko!!srBvT(uQvpeoy?b*>H^jo5w@$}Xt z31+_ST~YEb?N7f@OQeaCVrn{VY__m^RuTv&U@7JN_Aq<^z@(GD?Ru1 zo#C!-|Fb6gNMTU=hh3RTMW=`A%EAN3dASaPX(z1!cr|0h4Vn6KHOasU6i*8JR0PdI}(#61+g+-Ldlec`X_ z2_HC=m`&I`1Uzmyww+(bx&6m`$F}yLB455wWO!_RDf8ugcdpER{Uw`zvGj^DRdbr& zv1F`hW6`J=op7GHg89P!vzhh62ht}xyfC}@O~-ci?>YQytMo-Ch9zH~_cY7MIOJIX z!wen~t>v1RV!D`09qlj7`EZqCz1~v4l0#x2+hv6Ute5O(o#7Se^RQBG?Vjmxly9~E zK9bH{mwv!Vcf#}F%c2cBp=zqR^QMQo7Tzz}dlS z%e?~&Ouk1k9542LfAG22=YwUhc5IzL*G=x&6unDn)7gIMHwZ9&ol>(&#)N%g+v}RD z@-^p;BSa?Eoz`RD(H9cVy+h!Dld;E$D5oo;7r^-kIiX_trLeL-6diZ;N*_c(L3$#pM~Us&R_*m6E8)QtmAb$0y$rU8247 zugM!B4q2yN2~X1<9{donieX%3>6TiXu*mH6&#B)|?~>~mV2-)%dDZnfZ^b!vAFW%H z)t5foZ*f6LNkBQp^2y}~Z%xXW^`4tuw|ptTZgY-NNBr}WU6srw-l;2CI(XTa+WjwcGY56DCrrY^IXAJ_kM+qc7P9n(_x`DiScVzyvi$s#f#s5A6PR+0C<6@O1M zSg|fS=b-=ExT(rXJ<2-#&8-Qy=U?)Cmp>tE{i3g*CBL>*PS#&_HhCW7rRI)JnoSH} zO^SBqosZoAwQ%O8bJM0hmS2{v95q{bg?v%Wv5y(ECrRuudvjq<$n80QX5Z~rGH3R< z`AUdcyU^#gonto=p*~t{cja-W9;qy%{1k# zj+bceo5dTiyvnS-W2V9ow9_f|h~x$5bLRKioB!zSkMTdLkbJLW(G^9LZ`(52?M`mJ z82$L`P*$^VlBxmo5T3@*yITLWW!^>wl_@uDQWL_;Ol(9`9|_va@3su zeA1Nqw%cTB?a5Esev7yN@qNEEZrY!yu#(#~65p$WYRcao7CCLlcyw0GnSI6e3#abp zDVcg#hci5cX_Gc*=1%c{_ee)ou@2i?U%z) zJF8qiPkEE?8~0iDF)4nzVI^&^6jkPL@@xFVu5GUOHvijxF8eFbUftS%Blh#nqPuUt z~Qv_}|-`h;-^dc7JK!u|4ASv%11{=Uhz$edm8nc3&KP@TB^4 zO@*5uSKEKi%ADKx;m3XN)6(}fPA>f5RyTe5rk~v>qv!bSkUh)xqwe;~>Y1|(Y@#by zC;XS|zj*S7`ht(^YcHt2TWaZ^om-;0_eC*yp`Uc^qt3P;;>)%^e7!II+{NRjU%q^b zeVp3M{{B^cgTESni&2~$Z~$R`?cb8=Xaj^6Sd{lq_3Ce zd0+p1cFVEu_1piyyZrn0^Dp0p?tZH@@_(LEd~VsAud?^uF8#cBx%r;)^OV}m`)^Nf zb^rd|^>+s=JC@%{8~cb2AZ=&AXeGpj98$1QV}k?-dFii{U{SKRe}fBI3s`n-9f zAp#p_H)$l?k$n5|X_?ZlMNCb->i=A}DEyrHX}bxJ&;9iuR=-Ow+PG4*ZE?h}IJvr6 zw^I@mva0(Se|nuSkbh*yJE?Q&#!!KSwx_@UoOiYP_L++47ytTxy!`s~;NNAMkJRMt zOE+F)=XrFr(&uNgc501X_P6%bGqpeVeM_z^vgrGI^;WWCou&Wo^ryV*KZr|K38q{?ak3gpB|YdRSU*g>CfK!@!sc`mn&kEUroLKT6lU-e9X0_b$oZ; zo7Nxd_pP~m{p$0h_p6id);?BU9{<_%)QtI$ty6g?@7glyf0ni1w3MdHU)>!#*}pU# z;qAW^w^>^C-y4=IM;vR~AOHFMPD4z3Q^ZAsW&LOOw@u({k|_Im5NV16L(oZsHo|Qj6c@I zzGL_9Lk+Cgi`ol&Zp8lQnIYctBh{y{{qe{1f?svtdtUk(9v0buOj7?ur>&MxnpR%0IsQY2zJ$Vz`K&fS6OP>#F_abAy}F^$JmJoD zSNq2tZ}KA!37%GT5I<_8>BJ$iu8h;7PxADdmm*&*%X36^E;l7k|NSw|jyKpq6`pwng5tL$;Vh&-I5ezP6I0jM9=HAchavCa>z}jh&7S7gRISSWEBon#U*nIm zzpfR#d*-R%H+}F^{!&9u=D&a^I~!g}?*MIVyp^%I-W_S9(`VuK20xGefA<K^-<$q7Y4eq@AA2z@L^C|D=-GzRADh=Ph+-uqX|0`pE z9XCT$-S6rN_CM2`w$~+07O`h9=zdt$b}V1XFP{0!>V|s`;po=S1zB6cjhhpueTunlv0iT^S`DH{l*r` z{x6O&gx+qxrBYV$Hlu=R%E2arZRNx1FVB>ADV&W*eP%HemRmwCF+4 zllyE|It&WjPa+uFPCc@j(8zw)bj=6vRKo?!S>|3~>yudU*gt7Y@Dau>>dwl|UnE$L zHfl0EL|!gkRJ@8aLGd_OiB73O9dC=<0tQY_jzz*J^_iX6nSPr+Q03Np()yFFqPKGU z6DEc84lbOQz6{6OUnW;=yQ6wwUe+!#9veHxz)fe$Ugk4KrvBZWZ8+b>_7210<|E}c zVf&^pm#pwh$iCrsc1x~ZbN#g4HMT01d_Pm3R5(~V?m2P8!E)iYbWXk~X$~!hprY9F ztv1Z2k_J2H1ZZi@7Byjz;*PsiJZCw>jQOexCL$4i6ACnHR`m$z?3{CCwV8Tj)PE_) zjX!_!c!Zt(B(YlO^py3lvsoijtDGyv9oBU|2)Mm)j?c=UDxW2}Jb$sMe%RUgZjH~< zKi@A{I4YGpt+g_E6L`S5RiAljxm*i@t!1Qtb#J=kU?5-@KvFSFH7{W%}< z7c99|pH*+LU}o&;zn2*PadPm;v&|SZk{dsU_*KcDdi(85)MM6_Jkpm>+n!o%DJxORv*DY& z-0!Y;Giq)=TVQwl$j%ezKCL=o)c1T-(zeA(?}YA~UyIqV_4I<849}T$y`5R+Zz2P# z<}Bl9K6!ke;{C-d^-st}?klkmnk%{D-Pd?=kDEMAx0oGneqm!s@k#EynWud}<=pJY zA7tC@8FJj4_@-^VbaauwnT%n)m_~Q%m8)lO89i5h@O;xd zGij+E`+N6n-Yei0yl%2@4#R4@e|~=tnCWUtFN@f8VcGPCDx>W|l?(PtxPF!6 z%^M6m?RK6w>OQ;U&6FK4roHT0dNMcS&GP!=4{V&zF8{GyM%n$UKHFQfzs;X=%!)t$ zkv=b&s@yRtGF@>-uOJUke$tN^(MP?3%IAtcU>~H4Jl%{Jr&((}ym98iqJh#uJ%F)iDGTwOhEeAz3hyqz~M`)ACg|B&4b^R*s@PcBaTcjv;kY5x|>m{mRf{YU@d z#r<7(r+=%wY~%k=-hATjTRZ+ezr($r|IxeRU0XlZ{JLknH~f+J3HxGs|L+%%UyOVH z;eR zdB@}C?fqB4Sy(G+bLMyVw2UvUKYzTo-FGdeaOK+XzqU>*UqAQ#>;C7r&QD)%QG0gF z^UA2gC0`ES{ru;1`G2Vz`TO&(|Gsth(z>tqm)qy@vIX6JyCr7<(_&qw``WAB9z`o` zz5D*F`tR3q-%lHxuW~DH&4v3 z?93?bJRI&e=iVptt`#5j7w*5;w&tdAo_XQVk6V`WS6BT$SoQAmrnv#%=YIaYt^ae_ zoNe2`pVyIp)_D8k^W$66xcADHF3a&hwS8B?ExG;wZf^ZmA$|KZXIQ0pRhVY}tCD^E z^FE|(jNg^GOLpnAg@5jz61j3?^`dis3ws(b83^~DUA~7~zpR(#($~W)3M)5hQ;SolC#dH0J`b@n{fe)h8ctC?aY==yr zStMMt6%*885o~f4Wo*(^n|U;~;mrKTQ_4EtN0ul*5;8c_Ai$=zJ?5qP>Dm=lXx;XYTcl zhkxiL?Kyll?!$|Zd>;i0Z)mqkAAA?-BGGVLojY&7OV93x*~bM}bv=%C>1kTc-gNgW zhoEb~(UJ~<&r+rjDyB0X;;dLF;dbz!mO~y}PxaAhmsnr^Er=gs%2`1G#lCx-{$xvY0v9_uw;4z0AFSH|LX zpyabh?vwP?mx9%Wdjl`9uYI%Yd)UvolJg&=yDQCXCVgJS{<)|!d-=VN)SsKv-`Ohu zp27a;KA+XWb47DcC#_!}9{+gl^zHfT-?}2$-dx=HXRXfr%n#+&*YYEube;~{Q}^g+ z^vv&le=KT~%Nq+NIOg<(RN7sA`8DR<>x{++(}k;Ro?nuvcUWznJ@3}a?_aIXH6OLt zYxq_BrCsmBsr~w_3;!$fzN*)d=76?|;6JS zKWmv){TFw$mqw45-uGVEbpC(3mi;efd(ET26`9|%L^z%FdB6PR#_x4A-tGCr->};} zwaSb>01{ zFPv{rm#(l)F)*9J&{QX<<;PhO&&+B`Q=p$J(jb}$IgBe9NWEW_qGk2cx!gZT$odpss4t|`spnHk7wQn9^xf(@#!na#=4k> ziINQZ+yecQJS#H}Sk^El-Miv=T21s?{PLW>zbjW?S)Y35>gfaPD$eW@nRIT7UOI!K zRj1UfhW``8etPh2nmT#k=5_5HKHDSbyKC8B`NMsqY(?qQ$qyg9SP7o!oAJ^tK_uVc zz`^)e`_rBsp1>G!?c2?3EYY6HfBV8#&alI;&Udi$E-c#5$*q2P5rUZrwXR_Y~)noM=tEqsyO*Jxj{&pXJIl>Gyeuujgu)obX${ z&oR)CcYCkbtcaNtKR!!JUG{iSq4VaA-Pelt?y<0!%YQs2QX%rEEB9H?RV%(G735T2 zTjgRDGAWUB&+k85_g*`~+xuQe`pF;O8|pWwF|3?#ChfI>@5rTmm*hB|O%47_rdm9I zEi>PE{_$gnXZYKFFN~X1`jPK){>E>54ZhnX_nbQWE_JtPjxqnGi$;3cn||MXr|~j> zQd(LP$I^Sc`x!Z`SG@7M>+*RK3u~{r4D*+{)4sNuH?0WGJh0gJ=f+bBx@~1e^J@b) z^ZpDy_I#nm)^MlV)ju|@+y7hQ+sS8QX_L>2Y1=+NE}G3{ZaO6f12eq*F*>9a<-@Ds|y{CjQ(qfZ+KbG@=mYH^=jcPcx?EX=8qnR`0qVKC7s9DK<%jE3IFDt(4CNqB5|9$RhQx0Ex zO6l?v-ps9m*ZPj~3r%15dB@e{t6?5f^Uw1~Kkb%#;QLJK_rufQSSu=b*6h9xJ_5|_ z7Ds8v2j?@lvbpTbPfqw$$Z!3;?fBLbhu5bnqP{ZQwYt2!b+S}B{{Fn#50{5o+_kKn zn?3v8o~yRs-=A*2v*N0Wt?h^V*H76!=2|!H;rieEu1?;6J^TNyd)5Dh_AUARci*@D zQ_fATU$_2ij{kef$es79w}oGex~pIN%x>3u`+~S{zm5k#cl-Wz`P9rw-9J8WTX5Z8 z_q|;Hyy?|(dv~SoTT$n#vSH)XX*L$qq~a27tw}xi`@6cR{PW5OKQwno;gcXuI=50E6(3lvJPs# zu-oxmvg(LU&UsJobPVU5+%hQ-^ zpR4l6@K@)#pZ~P)EYBPBy1x~P(o8dWdgS%azgnB|^!??ZA1_sGe5on_Yh!xlu8XHO zWtLm)jJSO(f3{z;!uF5P_v?RoSRJRf@7IXJ%FM3Dvp}Q8R7pyS|qD=KYJjrhk8VRpqxQ_f{XS{q|;#{+?;=Po!T7 z8LiJY+qUNM#js@zuh^cyI5E{oxA5bf`Iq7gGb`;j)`+fR4%K3r!Yp#-`uQKySv`8B-m77v!t#*HWdt9}nFImkYYI0JQ z*_F!|+Gl(zKe4fL;u7uSwjpkUp{*+(@GT zhOb4H*jz+AxY$^o;;wTrK4Z9}wIK0;#5%=Q7RO5JLmUMhToyVS`ZFK8%Xj#z?vr2Z z1;0G+cqkhaADbvI$M9K@`=8Y5Pv!^KNGw~=@T=5C!{m2A4-03%gFzgS;buv zWuTBSr_qtE=NAKiIph4lj~Ll2n{J2m%}_sj_cH6_xDC6R>?*A1_SNm-z7ebWNGT%3 z@HmT){2`7`W+#Ss^K>JgnFR4KPLOE)=q12p;Lo%oVVzCE{+;d-FzI@Bt%?#AhIabelcY94;%$M__vK)J_ zeJ}b@>Ghve<|t&X->nymkxmCZ@1Gw3=jreJp?|-9*E@G+`StzZ<5_vGE0^iJ|2XOn*P1)$-N{4KwCsN^?l}K%d9&T0Rj2&_&u>z%PZahOX1HqqW54dF z!~a(^SUp=*Vbr}NV99GKhC2+u^cw7$KV0{C@LpEv#vg8v2On$K9WPyXShnH3GUJ*5 zd>7&sWDi&R?Eh#n{rAl&_ACe3D-Zrvc8Fu#(C*Q4>q+G1(0m8Z!>>9lBA*;sciV-} z|BXc8m!|&SFG(LJKNI=$&|?|D0ON}8zr}^Df0jq`Fa|KE9%B*875l_28ZznmX^9ti zeXe=0^;1-o6Jh-k>A+pN&cjz`!O1e_=_w21ZY({}dyI==Vgs8G*Mc2$dAxF;U2fny z!=hE7{8@tEL*XD#m+s{yY>&<|94cfu#;$Ui$A??Qp=kkwi}G3x&4f611FZ+!6i?d9 z2~}KwCAyrYWg3Id_LuWoSYB-nJ{tPzd+gNNbI&cWDcaC@o<~4L_=atdrG55$4xTPH zh9EP}6O}HmmTz}5s4_=6@T@&!P_UFWw26C{;e^(&jgChYOD#JE*BH`(}P&@5H$w>%476W0_3eFx(8@ zrOLW~%~>zoile-ZuHAQvezRw1GbI{#a4}5yUG`+>ABG3Jw)H=aWXR>&wDrImMxM22 zw|*0x?96Bx^gsL8(yh^Y>O7@V(+`$DdK060`B#A7VTT7n<+lr(ZXZ6{KT9)(%S!C- zne#U?pZU%XxXlhPEQbvW|&$MAPgpW>_S^UgW%(TuD2-kfsU;bi{KEaByyZQB$bUfQeFb4VrFUFg#- z)2f`f_++$EesbI%gXwQp{p}EvkM+jP<7K9jmn0$>>Sl(^9p;^rJ9`BKLt6MX zhK`@i%j&P(+ZO3QQUCttZO?Bk^KP2)(}2Myz_HY_f6;vz>&r{}C;qCL_`iYcUApCy z{o5G1n#&zipHyiyFJX+Zw_NKvE&1Wiij!~G>1<{&t$rcaxPs%zdIO!=GiU5xv-N$! zo4_-F&-|Ra@rqy3`Lg97`5h}aoHd-gX^Y9a-&OOEoSK=TqhH(kN0A}*sLFfir;hEX z9y8r`keVzl`MYXjo>o>|s>~u@(^>l+Zl)~wD1OsDai-<%3s=;y)#Ww(NJ{Ss|988R z{l&fKB_FqNp0ajUw`}10^zCP)eevVoT$iN|tk2V$qYk{)`=7RTV^Hmy|B?cBuOm0w z-`scOM)a+dM$c_d+RdI)@Sy$it6My?hrb6`bzbui6UoPMuKxt-tra*?h7>@Jb}GkMC19dTHzH%?vldSzXt(f2cPQ9=GnR6e0 zul?#O_1^DZ=gR%l>f|@)D%!7R_->sW;FtY!Yq*PX+uR#j>*T*@uY79q?Wq0xTC4i= zuQk?L?fgc4s@=<)eH!&PQyIS8 zZSU`zK2Q2n;7i8cbEkiBes`Z!fBLhH$Br+3cdfnfbk(25pKmXZKmAxp`il4FY3*f~ z)_i>VdBMuHlb`?1J~nIjz2EEJ9bW(V&#$MIw#%dE%@F5KpF4T#f4({M7TsR$pI)_S zXT5y?o{)JzExdlWdj8|GS6lm^ zrZ4Z54_v5ayJ4qqGTZl;UyaXJ{#^TLzPoO=MRfOc8 z!iJ?UeQOKkC0^*iKY42XpM7&H`ilkl4=xq=s&8Lat>gdibnfAAOO`MH!&7g5?!%+1yzl_4IyL`R z@yd#sZeE9jr|S5x6Svy$yS}>U`JW}lvQygMf9Fa1zAfO6DHrFQp0#@m=l)i?Jj+La z>+Q0+ryrEXR`(tExuzcPf8Kljx#u}k<$u@Cnm5OGzTN!dx=Bx5zW>yDeoTRp>%jKw zaoKkLQ)4fA{?oL$yJeD5&Vd)}`n)o|Y@|It9|;S8Z2DaJPi)pKq0M5Ccs;T+lJtz9 zd}T6R+F2QV_aNVaj+ZJWoGWiBRo1c`^~-tb`k;&B){k}NT2{Qbua-}Lm(nL?aq@Yv z^Ob2f>i2Ii_@NT^WA&0ab;en~HQqTk$F-e33_Umx>|p=4{lHy5DTO8u9jzIz0)03A z&c58qakN9yxrXhcxqyJ+W5x^m&Z+auL(hL)BFSOtCdg{>?1pEEV}rsfr&6~gJQrD+ z)mZj0Ki~{en)aACM0AtQk+YvtTRuoUeizy@d%MA7^%?K)xmNry=9sads&z#?%Ol-I zf0!n8e0cM@Bj3I;&bIkfPij;_dB=`>{5y75_bAqhCdL)ier5Z%+r04m15UYpHAjrx zbtXUh<#?vnQ1g%t<8kYQCCgu$e0MA?6;>1~+;LWYfwRH81_|*ak)O9dd3d68yMwQW zV1HcauT#(2W9;`donYu)b+|%+Q@JgWA@E3QV~3NIi-fpG%m$xjEPI$YFUos=IBs6= zwYr6_`YX=oi*%KxB%i-jEwNyW!|TdQ=QH_L)^i@!@347x@I+Joy<&s@Q^M6uw)xlC zXH|3i>*)61+E{#lUvR*>ldHFXIC#lrdf)#d%QucEysF;&hCKN4`h!ZweDN>lyf0od zoSt$zdO6FPz9Z+|lSB2HE4If){onG{)c?(vp3;WO#|!5?`CKT-eD;5Uko@`LuAiD6 z(6O7|x?H3^;GZw=)t`}m;KAybUvJ;{)?aizp5sRSu?h9t`ZxL7o%!_l{WMSczu&%l zWq9rXYdiIQ{q^=p2Kj%Luh|3d74g{o(!F^7-{FSsbqX`)+a4|YU4G#yFN1%9QQo)9XC}4TQ?V&!eo_B&ilZ2w8)7RcP z|9KazXR2r^>H5WZ;eLakzVk<^ONIM=1WnJ_C^X((FZ};h=>t!d|DWcoS#vjCJkKcDN zJ($+O8B z>B->s>jx?(zmxQ+-|3s$#juIJ&33E%wYg9GUb&Xa$S)B-GreZg@1p3&4~f%%MCEB4 zT=rWfw=O8M!-L_K=IczhL*gHvta~+O#vdbx)1S1KFBN)Vy5!yR#1B#Fx4;9ZZkC%-S(6Ol!sFE6q$x zFR1i0C}^>i3GG_)<*CbQ)z9)58}=R6YkVO6fm17f((Q}Srg-0CVVQQcd78=VbA1eM zYzC)mCph-0y-yPV6p-{laDTN$^Cqqt8q67{x20oGl)3&2ka2dpl)S&zb91HRGh2n( z&mF3~q`#WYj?l23pBmHP70bYuFO{HL!k9=$p1 z1M5xs+Zv7L1%jSM8VfBhNoQNnc-I>$9>IV0iND$U7eU)(xo`7%+O$9T6g*|BOKLLP zWa$HCTLR{+tU2oWrzcsVCMx%(^_~76elP7;^RCaib8ABF#66Af62|d+GJSoDHdsV6 z7FH+CUsis5-qWcaJNKnsFTSnm#*q}vuKPAE^R~^aTOD`SDXo+{%K!Oepttw78-6ht zwwNuL=KOba&Z9~8tQ|RK*N^$JmNe-YPtDvm>6Bfk;$&I#x#xDR%n3JrmKGUytGQO~ zvbgkRkNef%PCZ$=M!D&jy52w5o5Fp6pWTSxRQjfzTS`>(({n?Ou*!LJ%-;QS@O=Kp zc`e7U2Y$QaOXkcAUB%o`wwdE{=(}!_$#yp*xI+12^zWztY1-)K_ig^k^mV_EOV^9U zs#X^>P5b_KV(#{vehY4y%Ej-@Ras!`8QT>%ZP%O`Ox}kd`>v=zeM~>&x5|F&n@QW2 zt$$KowrE>!SkR^C`_H-wg~_j;y!B%xw|cy&#B{am|(duQ{d{AVqh z(|_s@+N``15xoEvst4SZ)`?w3wQ`#CitM-Kn^Z1=q|IKSfc#H$ZoKmWIQQCYcb z%R2c`yF1TpuRPb}-@fyk z-M^pgI$bZfn_-K?dGD|1uJ62FUS0b}C_3|d<*O?UTmRU!s=a$!n|sH4`Fl2z?GrXQ zdhO}44i;OToV%c(ov~WM>cXLdH8S&VJ+CSESk0L8D(YhYp5ME;ul<&4pR=RJ`}Okt z^d+H;mRF*FJX|Tdu&Vdny!X@D^wJXcUA^8uB{Kd`>AZR0YKzwLv#Bts%va-E#m{`O zTt%Dt_~DQFrD+Csx8=C}r+sR?JXN#tAKyF4Yp##e%YNS6s_geL=FYS`{5tXT_@pnq zS{R!i`zU+P@{bRGm+_r6Q@_A{tE!;VX6q$s@tSJ)IiD;RO||S7zIb9J_q)iqz?~#=O<~ z`Fri^&Ru`GH1aXG-dWYhKTZ}~I`?T$vC^J8o44|Cb=|Vg*}JQsYiPYvdt*6YZsoI5 zttPgNIEFV(YS%>8`eppSQ{(aZNAuA)n;jlca(Ka@!t%mEt)WWda@wcOM;BH&=P@n{ zuxu)dU^)MKUU&30t~kBT{?b!_^zF#*W67PhdD9Qklb#L745rV>{8zg)Q}@aa<}&LW zX-A|&Q~D09(UAVxzUQ2pR)fTbBi98!M#l92k7ucsw{q7h?C0#?;Nfs#kBb_^EcLA=eT<^5ue=5R+ALV_kkbD5t#i-i=K|mB`<}k?z4P|o;kSxPGOX9j8IArcCsc4I zez#Aq5l~!zmq}>D{=SML=|UR@Ddu(ZY;V4G{ag{TtmC#i!-fP2ah=HyDoHa7FI7%c zO`56f6k#BnWX1XSh_=s5RhJ{Gr#|LgN;G#~e8NU^-d_2_-zf**1|O~QIlt0t(|d0& z2D$e)qz%`fV&CJK`Npc+GiU4Hd^yiQFLLg!Si13OdydRb<`19WJY>|(uXEY<>qhyr z&b_*~y-rkf)~S4voAdpQuUWREp}kUden;uSYS};24wgRry|-xRpL?cpC5h*GGj3n7 ziCH`^{n_3dx4wyL?`0k~2jq&x%U+uOV|9pLx>-)}f z;orr}>+3cZe^-6^w)##3blvgaUC3L>b*E0hz!X*gCECpMpkg$itWo5Q9`y-tB4_V; z@m4d}#|9eAveKE_2?H&#v^BF&hI>;}Y%Obd>b3-}fAA|aP zY#+E9?z?b(+{gMreZmHZW78S_GECUM@O1Qq55_I4wROt>vo_psY&kyj{(R>T$|ruL zU-;qr;uEWbyke^=bHjP($BR|^(?owwv6p{xp0|NL<8Xyr-lL^wB9~sSxs^m+%sf8 z-1@_LYM>2M;q<1c#QBXElv6C2K69MeexQiunR@5+hgSB}9lsl?1QhJ>`py%vr>8+i zd%je#gBKV$=FUu=^ki`W`-am-PwuYE?F&==C|VTXWvn81X|mXY zgA6?U0Sp@*CMDaXJji96pWSeTGvb}m{A*#6^L?K^c7Ek-vOfQyDx>Y;UGp6m?qWX_ z^m`*?l?%h0O&*i>X-&IxImfi&W$mgn5z zC0q>`wPt<2?)TEf^7gv>Ww9#EGginql(?2xXI`7X z@xVQYsuPAHS=TS+-~4v#bBglfm+^9TqFZyeO6!^S6mif9COUkptTrcRgx6w$vl{q>4)Yw5|ThX3RI2tvR~Gp=#>e z!V|N5BYv~m=O*oP)1Jx|FvsDR>-oQ{6jx8XDfa5N>IB=c--jQVzt*-=ohkYtXNgJV zwh2q@dH(5tcizgmG-^*4dnntyQxd6Gopn~-r$rfF1swN_%(A}Sxx4UO?1?`sZ+<-S z_gW6aPs68i)Asi2x~iW{Khcn;o4J#(D=pE5@zADqmnG6RZK#p1-1RTWp<&ximW{KI za~z#;;JLb$mqNk9*R#wI3O?BKzwqyhx2IP#pX5C8p!oVU8$Z)Ow`wo5UMt-!&34Rm zS*&eU>eS$~Z!2#pG+n;Aqef`?S#Ben9UFh_IHuHiPBI~{a*D5XgWLI87F%92Xx$HU zsFY{$t4yh%|F=?VdF8>r-ks`Z6OVnHB>(gB(PwOvlHW(JZhvq@Pvqv&TP-!0O!7TK zFB!?_e2)D;mGSA_m5iq+|G#O|9i`U5_JcQFUHYohOp*Bwmp1+T^gH6FK=$5`cR#-}}(L^2hBJM!H|m)=b~HEcx(`zuXnEM!UOD7q>pY z#FujWjco7R{1Z=ax>=ksoB!8L`~Guvvt^tAF`eBl6!CvYoYNxn{fR5hTK{s+SaWAb za*;-^L+acdkAtOp53${rz5c#icFV_WxA)Je`I+YP;-+%p{fnND zSDJr|pRjJ`v5%?W=S6GRF9vV0=%4z|c>i=h=I^$jm3~%a-Sf9gvD=$C>2s{K+Wh5r z;;#ynud|8&?)~0A|8M1u@^zQ@K8bBN6>mDtWGD5vVBN=?e{B4}pZr?6ZvE4%g{HfI zu6_AkHMPL<`^k?&clWtGzxHB|?#I%%fA?OwTRZP{%)TA3~T_0#*G&;IuC-KU4Qm$+yD zN`G2YhQ1xj$`>LQ72j2gV__uB=?`QGAhhoaH@zv)l zK76mX%B{EcZ~B(wY4>*4LW5=TjqfBS@Bf+oectWBNSn7g`>Xe`&pFf-v5x!J%iJel z_&;sExAOhBxz6#|*45NHGCh|6{8xI5G|vW~2>wX(NWEj~+q>UO*WJ>7|FVzuZC1$c zbARW(e!09`{MU_Aeva>#@9*nxTz7l38hi7swI8powtlVCDl_Zb6J9=@eDCzP(lK>0 z>i5gn-rMK5Z{EM3^Kv7#FF$#ot7VmGIe(t--xYtN3+3zkmp{_q_H-3vo3WP4&0Z%uPb4)t{Ivj2 zntqMeth1l4emXh-UE8gU^+#p$IRpc43s^t1a$VAUb>g*aKJE!NOSbZUj;NF}S`o4J z)A~x|j}zF1P8Mo-OcfP5D^s8PW=i<8pGrNqmUev!yl6Xj=ND0N|4lm@kG~cD7XD-Z z`@0XOJ2jpGT{iUc-FEd0z9`AMqRa{Waq<$@TNVwu7z;R?TY-*{au z@g$aIZ>vsuKrMr;Q)jEoSu2T85fi?aODH*2blv@tE^+98)7>8|yB{hx?Q7}?7ks~u zZEpU8LY5CAf%lGod2zghU%cg|;jx#ZEvkl6=*3oJL^_&~8QoN;%1(+Va|W+wrk$qITa z?GigA%1T?}o^hU@vrhMOQ=<3;v*v&|`7DYYZGnY*q7D3wSDBk7)bC|hk=Iz#^-|#D zlh~uP?W@%K;}}Eo4P=EF{=WQe+_$}9Rl*(hfZfMB4jU)TV|w1D#aHr8Kn58spP z|IxLN{p#jBjLUc1M$eP`koz)5;YEt$b%*nxJo4|gv2LibJ=c3_&hj9;?5|1ut(BWM z{T1`^$vIJ>!hZGc^^?=zW}c0Zd@tgVy>9(e_AQ?tmwov8`?cNuFS}WLv{y~f&D8%q zFUu}F;Z4+b@5Wo}=Wm%D_uaXy4KBV=A7kur&(s!{j8s_R@|1|=y%=n z?{0>FA`{j-JrUK|*U7@NeZ%dZ602YF%s;j>)XiDn>#=<5{b~D+_H;jdrnq2x#5=wV zPX!g25BUl7mpAlDHrP2m=6N8QQo%kUTH&6fqQFlk1?O8wi|m$EiL{*JdBJ$Vn8Ba1 zw(Hg74^Q~~*D;=DnZO{bC}_08PqED}YNm98g1d43g>DN?zh!ey@vl56IeWj3L!V#D z3WjU8FI3KZiyhFMuaR+HE6QOtYpcWgqubU@5}&Gi;-J*5<4-Q@=@v3iyZEL0hPoZ^ zf`sK!&I~dW{EjLgsM>sbBO@DA*6LY4MiW%!vi80`@~ZWqqKdwCXVmf0e<$!*S%mi?k&?kDNIqO#4CbMx&k ze6eY)R++D|eyOjoIQt470nY`T`!37I+?s`k zN6gM~{El&VWetipiwvvL+B<9Shi%%AN_sY3wYYPJ@#Heik9mKJq%X7SFN@EapIGU6 zcJYhWlUF~6IP8rK_u-$tf8n;tFEchL@)U4Mnf#o!W^LZjq?=Fgm)%#d%e~ylb|vkX zWt!}a&oj)fSF@g(dwXZYwY$p;@WRY-?MPcnz^-6VU=XX+m76}F^ znVOq+vGiJINS#;xqQY-FH!H+e#7Gsd;Ww$34Ba=)-JsfMwS1+`_kUp%lmA7Eb!}Yx zsb*JUzjSayPWIk-uj{w_ap=p#wU(EREo#^G%yqb{;&$;C-nin#gdZBUmp&~q*~Yc!qkFDQ+Pt}a z^KX1_`+3iG*SYV>Yr`j|ZsR=~U%Jo3cv(?=n*52=#>=&TiNpwl-?5c4zi?JUb9vrxccOUPp21&KYVB>{_yaWxA8Zx zUHaa(-}_Wm+|6Ri=ks>-)g?6d{6xHUPk^;*6r-`-nSpPKB?7v z@BQT2>!ovFPk;4H>i^#AeS6Qn^zPrjb9tOBkwNryjF7J z`TgD3Cfi@X`YIvVf%#JBL-vpZpK|}5UcUKu=KE##G3_>`C6}iE-E#ZZj0eYgnQM&i z@7r&@qw36_Uj8Z~ZhYqn=ZjjO@*74;!)lO}j1h^6)0ZS|fp7 z`Qev6cW>Wea>s4K`!IX+yZ5h5&F%g8c>U)uiu0@T-X8n@mD#^J{clcwdf(bm`~OSLue$W> zRb@}@?l(QX_qsd#-z(LB-*4U6|BQLspYt4(%$Kz;$hng3@Jep}-i>>&^j?#jqE!57 z@{ak7jxAsE>Cj7mv)5aSEc+aKSa+TK+<*4Ys;TKWpZ$!TJv+9oMCn&TJ4edWS$z{e zGRT(y6e)SNBQUtCd+Keg9wx8rr;0g3`ySnDtNbRdW-q>X#pka!mC^sce^@?Oeoq`% zRO*!twdW50W|_pWT>7^1)}IOc*B8Z~{MfwbV&gH@wT-)?8$2gI;!2Jxo^frB?UA|v z><<0m<2#)!^Eg>!iDaz0 zU(ZODF?bi`F3KtKU3s1S8v(YX55o%o1{9PE7glU@Fin`p?&yqWGZ&9xOQ}@#O*Kct=bT8N+aI8A=&C1);-1h7%bBb*_bpB)eUdP|N z!_+>X`rfpAo7(Alf@&FzkK;Vbe#+6*uGqbFW`Pkui3Abi8cRs z2k!rCJNwEC-2|T zsWSUO1cO7}KmCObr>y_G8Q3xgtteyq5H9djeqq(z=jQvE9w=U7xuV;!pYg+gwhzY{ zl-gDwzhI%@=dNP#L$_@<!-F^%3x zFJG?f*)2bZq$u^-{+~{qH|^e>D_5{a;mYI#BCN)1WUN)U-`TA7)Y87bX%qXI4<~z` zrZ{WcHw(Pka_O0h+v#JjKez&10~{6d^ft^{SMB=KhhO^ zKg{BM>P@Gomu{?E!uayYeI5PY14Y~yIi>cVnUKn3axnP5dd0n6Um9cnZ&GYw^|o|l z$U1*Vz4tp?#NvztX4^U&=YCn2k?YUNwfNfYeZ>bh&PZL|{_=uD*@1bA1!p-W*feGv z&8TB%J{;V0 zzIE-BX~Lw&qOG5zo37k^7J2uS#Ubel0Sl(LJ6;oIel2bg(`R|2BTcy}b*0&=IeWY+ z#SP}fUOwe6ncZ?s;BxY%=DeO`pPpN3NKM$(t7w&K%DrNFhWFa|lXdH=;t!nCiI#HT z;eRWQgIE5^y25ykeN8vjnV(1g3b=jhz$VrP@s+c=FG+0nf6Vyq*H3ZF8_hfCPY+J_ z^xLCs-+z#`A>C+unW40Oc(vG@6MUQOt-|M~I22C|Uh|!6gZ?s`**6vy-#n!zGi$T5 zT{nNquBn#|W<>ZdHl}xOHY~^sU&JyH2`jtY^%;%=>Ch-Q+f=ge`AQp3gnS^ie(Z9+SxS z+hWr?K2Dym+wE8M+gzG`#+{S*H&=bOxHe^OYUCZZD9;L}wkL(#jHgZ6;&v%cKk37+ zIk`p5*W7jQvt${4l|CZUI9vDW)s9zni@zOaQrlKHMcm3TVUK0uV)r2X-n-6q^J=DD za_c?d5wb@5i}(t&$&H`3CHCjKgr54AdEwu)BFEgs>oenTYb?)^NZGgUq(`T^c5_&a zal@_`s+%3oPxj3;`?0ZgdFmhjbupWxO_t5#=iX-hXP@)?s5jq5|C^?WPrRqC%Ud(I zvpvmOY{HyPzTwMf_u5Z?TXAy%>x$PUd+tSS{CPy;@$w$gZ+VIGpS6wp>mIjk5_DbH zeZwNLX5*U3_^yN%Ykm1_*e=Ytcl*u4m+^DhZ*7u_zj#(~%Eo;Xo448jGV1bcoW~nE z@5p!0xDwuZ`MdJozA#UWjFnlLadekb`ulA2J!_x-eeGadnFBgVz1Ati*nhdp`X6^+ z>rayBKRR#TcHTePw?2O;)H`3C86L+x>%IP=;C}x3$9IO$d_HlmfBnnN=Y!R+%{Bce zvfQf7&wk$YD!qGAKli53D8IifJ1=_u`88KxR^EQ&n&JEH`_t{$>U8?=)z)H&rH@6X?U_WaAsIkCz2{=PO` zZkxV2(`u=A+_SwkTRzY2JS6FRV~x4(<;Q0~Gl$$@oBnot;r8pE=j-+TFDq92+AFNh z*zxki^UBEIZ%bR2%hgoPiqdEJBE3ZO^UQfy&l$(C@6NlfVRPAL`?Y2J;(vbG*C)5` z@z0N6(~d^6?XYR5G)T<6Ukiguru7AnZ7Upx0lj^;=3~4A=*A~b@8_5%1^uAEPEAxeAB%f zXYQY$`aZY+C7b>6((v-R#~s#PmfD|v-FE%+Ut<2xt8e}^y!oc_eEZi4U-z27)2gjX zu3o>tde@crankeOe&1Ph%5A~FT>*QG*cw@C{mN8lo^=)uK5J9ZZgTCD1>ZTFslP7l z&G`Jnxi^=^b9Vk}rsgY_wW`m&dpw2bACy@d@H*RYmFlwKbB8%vlnvemT+?ZpP{&{S zIRCV}=nYK)_Jod?CM78kD$f+Qsa{uZne%-@<;EXY$E6E@?e$)F(f`YX%DGFuS6u%% z@A=0&a!X_9C>8Hs9W-ZC@bvz@>!u5p_8of`B=6*KvnL__EBh(8bEhv}o2XgBxQw-< z+adYdYmEa%%@WKZWdedcmNQmKUD_dW$&EwoaYWKD*@BiM^Bo=;>m1KMQqjEQ58Iq^;p)x zUwN5zLcMUo--`a-(GDpGcUUXwvP69Hd()8h>d)ylGv2XWjx+2rUMH_p@zRt*qF|4( zOn&3;^rq$SHS_Ev3U;i$cl@pJ(YKQ&%g^^+SaCsP#_}ti&od7hoRc^vc{$KH;%%W=eQw=beVny_q7QtuZ~610 zzv7dMZ^+)S%?kN{52(E~>Jno-P<`RY;h1;#nSL-c{MWGmy`JIEeuh7m4ci%Pjuicn zWzbh{ops;o#?r@a)2$PB?mhbDAm4#}rXOM^b<9;YEH8dH{4s1e&-6n!l6Txxj8TnyJeSETvCeFvoMxu_9((2wLP0Ys+spR9Qx1CZk?ZJxK?j!wS%Q+Y zGENE~J!Hc#{JX@+BL5uTr8>k8`_uLsGoR=hmGVPk&msmO*>p9fiN^Tid8HWZyId8mEb zuYqaN)=%6MtebltPjOhtb3{DLdUyI=r8k#3UmPy2iZgOpwj_CHpux%pH;#zp1NSRf zRG4?R&;C-q)A#$K&{N832D_d(h$c;KmuuMJZuziwr#Hhli-k;%>@W`7M$A1kd{34{SJTi)!GUlFMKLy zI<;-zuSEXxXsS?Kw`&qS+L&zal~7@X2+@0jTS6N%_KJ5_u2dTRIkqCOUrxX zH))n7l{0py{#LK~;;e9QWv*8|Ux?oAf2Z7@`UaZML4i8zS>_mF*?bnOgPZ)`<+O1Z3BdIk=zH9c%u-j6b za-Y`4ez9H9)ZV#2EqO-FwyeBlw*AMy?R>_PvQ0E{dd-`SPtNc1*_6I-mN4UqZv{KI zEm-nWSxtPh^n_!9w|JJ`d4J?RSHs;)llNYcT;$Ex#IM_LCx10&-O0AE2akQf)0g!# zSZ95X!i1D%PF3Nb{EQ|mu`@SuNiDF`Uy%`Wl)>ZP9+lsUNe$&1TRI;SoCmFH5Hd#EpL{&L~CPNt9P_1z6& zp6|PJmsXTB9-PJ%zVD4CThsK`h;wq&Z1(8r+Pj}UqQOKeJ_K{X4MFeCq8v zK6&4+rpz%H$TI6>_-g+<@v-#n^B$E&dn<4;nu}l%TGwH^4XJ1)9O*J{07Y~rtd_>OwhxsT7+;q_H= z`p@4)tv|nJt9ZNKwVd^_%QJs>|DN_d-S>Ufw-v{O-YqiX|u7xgE29FL~m!N_fQe(%aW(&fi!i_t}&y(d?7SyfwOSD(5|lx*W~tI5%54 zJD+*-?#zpm_gKod$BQiAv}IGpu4U=Jd*%7=e(6Y+oA|4*wMK{MnlyKH?#pFU{NK#| z`|j%1;PZSx>h90B`j+U##awp!MQ`Pq`t!#Ms`BdXV~_qi|LNhckL|CI?YGR=XTJX} zJGb`!jOzQFr}w>`vy8JkV_o}}OuwAUe~X&Z-Uf6;viWV?Rs3OY-@%{VN@q=@CI9ez zjB?sLY4hYgVuy@E<{Yc~WO}>7n(6Ev-J~e(Qky45$#LF|EI#sl6B1kcsuN~jo;AZ# z-p#NlMDOhO>7{Nn_a`nCzEaGi&S08%ZL;{S*LzFUbN61WoIm}XWoG)MQ@48W)a}c) z*vF9avnFcAWk%KvhZooGUD%?Qcx8$6Z|MXpr{~Nn_cRY}VJJRO!*jsTz-ePQciYPj zRX+y_!4kHR4M!M6TUk6OWcdEtox;42U)b%B$l(w648QBSZTGS8|IhS=-5!uTVVR=o52GP$2-0=DO`Hv3r@BcHrZ+J)0z-rS??2a-96Ua~ES@`GJ+wpSg=fD`XyV>uc@_D_ipX&*rkT z*Vca0FkWaIaI)e<>W8wFeLm;cUobv*!R+?i8%Yj!0^Ofe9<^H7T$1{@V)wUg$Kp8R zx4+k!KJWNR<+C{Vrs|J`%O8cEG3--Q|MPu<_&Q}XMFe!$_X3GeI8eZ}t9xNfKy zopDe8i}(Md4d?&nv+UA{`^TQCw1VkEug;Rxg^t|2Z?0=^D!KIYw#V`w`A>W6c^|Yh z)V1xJ|HJTpH4o={h98nC6~abxhI_wh zV4Ymzj-5_7`W<8#?kda3Ir3G%ND`J;JpF9xpWh8lc8B<$o;dAi@qFL+s{O&M=Wosu zYni`L?M7jd@%`DCSxRU2T)&*oC2{s?^pDe@gU)8IVtLj0K&9beso@^G=6bK4VmCfc z+!j;D`N63pD$27q(fFs~QjrX(547=HEuCmUUulntfUE>wW zf~4go(f3Zv8q`mClJ>Ga`-(5~i;|m-ejnQw%{i5)KKC}~qg9>r-Qt-}X`W4-p2F0s zQ?8L6hQCu2<5mdAo1| z%Ln5PMQ4^zZQnC{tKXGpChYP?KVrVESf(>|E!&EGzv<^1dKL*QZvPrP(RG*oq&N<) z1?w4>POFj1o0iQepC&01P<%}~TbtQjH?saw%dPdg64_6m+MS(kH6zo+lI8K`Gw&bW zI#_b`*S4eXH^esXofzf6diGJpF3oE^yQVGaR&Q_$DDOMM?^PYHV70yVW#`1r{zvUT zg=8m+5&W^+^*?`p4EBIyUWIM94eK-@y(? z7oJ*lV@1SIoo&9W?xZ8DP-)<|9a~CsbhXAkI(L_v@|g)sGOVAGU2z` zdWVz^I-hS(_*s8W|M|c7{tq^6T*!EUY598PsQTGwbso1YvkOa^eEhLeHFL+OEW2m- zuddygxwmRotj1L3yNb3!w_dDVGvi$5A-$U&2XfDTJzq1WRP1KI~-#Bjg z+}Y0Tck)u+Gyfv%qk^Pw9uqyQq`%v2abCiP3$+)@U%fuN%<9s!%-j?^<@~rs#dj5Y z4(<)K;?7ulZTBAYiSp}H7I)RV|J^S+`^>dTYqe|7ocda|Fj9~0!*j#Mn<{SgpZI1n zd-{jwYk7Ifo0pxR@MrDbn{DP+w-y@7CiJAmb?diiSwGu)L*SM1zPet8DNmf=xAe|G z_|jkE?UUD+rhWh7S38@vD?4>fpnC0j_n`Q9UA!x2J_zv>pAtJS)?0aQ_VZ5_agcGH zzt&Fj?Ui5FegAy#zd>ca%$Gf>Rp#w4A3wPJ2p4XnAGx=zg-S?^GnR4HE z3d*y7{ZSVuX}5mg9PQ1YZ&e>UA2sj$)QxWEUrVjCy*>NT)92Nt`;MHAp6vd-^vRRo zwLc5*C;$AGve#&DLD;qI%2=md|qXd0kK9>i)i7a`NE*b;gyp-|Ej_ zJ(x1-`&+gNuTq|C+V$IhDeGQ#$}95wR&D>AH@*rUFuin&ah}wJmnx?xFE5B}EAuZ{ zl|Jp-vZJD3UGm>)JII^xX)+x`w-}C>)r<8q6Q31QBAAhti`hJpz=yt`==QlmH%X#|C%=po_^h%?6 z!Q~<^4rkst_M`AryYEk_&#u2U%ikK=pRPT7n|Is$d*?KN{gkMzee0X}HHYi;k?;D~ z*t5;^#LZ1>g4(VxkCSw})~0hf&MID9|F|4~#Lu%W5p zYW#fZV5zH^{5Qd+`gUPunQF___x>`oyEW_Zx6^9Z53;U!?fxlWGH7=Dgwn+MC5hX^ zkF4$}*qdO*7IXH%9)@Nux4DLG>Kqkas&WlKgw$?2znRaldD;0%$s)TK?2yamzwpygWgj!A@v^(OC+s*ZAg^?8KR@UF2A%Z}etqkn@i^S@cs<9Rz0FTQ zERT3{|G|de@e58fRKAo<`Nw(ai|L69X36pia}|301UY+-i3_(L!fOWZ90N z2}eGB*<7*3=GfgIeDhk%KfZ7)__~v!(zCE)+u_OI-FOc3^~c?PT%mp=ma*Jl`B<$> z48ugh#k`*^1I*3~KDK-C@U&z6U#A0y!^f6UCCm2iYWA+f zn^||SmRzN|;^PlvM*jGF$=liQ{cnBrA;;-!%nk1jkL=j$dnF5ua;;^h1!EPqR2-h; ze%^Vr;PGwGX2!-9oHsggXU~k*y3OqG+->9p9nR1Ap0jwR?v&5Udn+UFO@6a9v9d^N zwRH2#zb9T^{{8yd->)`T?s*)q-2U^s{|tH1iCJ-a*I>=t;0=f!1TX$JV3 zoXRB(b^HhZOJxeZzR#4Ze&|2P0cI74AMwl;%wJ31t6Ti3X*2EA?H zE%u+7#h)-ar)ih{7g?bhzs(u;w6R##^B;+z;tB)?8|Np?-dvy-*;x3xxZ^e z{D$h6ngaF*3V*6K)N?#A-g#&L*{5wW$9(_QdTjpmi{XHBMh(y0e1YN@W^(Q?=3L}0 zo3eUg+n3B|k5wJ)n?<6wbxJW``95u%#szNmZ_gf86*Ep`GMsCv$X0GvoV4IU6RX@E zo5=5)7CQiv{dtjN!T9^2w-RTVs&Q5}Rq!Apy@~ zz3lI(e8{#@m|Kd$_uV>vWF_T+uqqsBu`vEgCol~n7 zbrK?)mO5(*Gri#HG``~JU}kGru$8fV?S7V%RhhNdZmBW;Rh3(PuO;@{>ey+Se)$R# zr_E3AWcrY~)UkNiqEcbzU`Yx4>swzmJ=ryT!DpErZ=K?d7w!36&S%7=*${nTcUm8> z%JkBG3~9aT%*m7AYA>(9Rbz2{!kKeVswCGxFf*>x^=mehXDimeEtr4#&8CxWIT0}d z{@2o$NU%?8Oyi$!u*i~kJLA0D-+2x^n*8LdS=)xQ{1sb!zg9APWlxP}Y)X|5t_!x$ z@Dob?z4EHt#vHDKo4+Pbb#~Tjwm)s#HG57&?aN&)I?8?StX|7C624i4{|;p6TsSSe z;bl?P_Ll{9ZZp5f^fj`awh&)!vnY4U+~0e;&F2fT&(D2xW|Q9A$v-!oNjYPavS9nU zOrE6O(PrW&s}3=oG*GKvG3$4=%gut8pFs=e%(}C~Vp;Vu`K{r`(`MUGHcMSUdxp&A zMLc?|)wvfly*RgAyu*pt;-q$;NJdS^q^&>MOpeXiH*?MDibJ(ClJc5XDSvO|F1F5M zymOh2;g9Av(XT&wL_!5U*u+=&8;edzX?gaQwKi_W!#~H^d;cfbUS-t(xgO`&h9 zRZ}E4vL=T4ompSRxYc)U-L-WWD-v%`+@HRQhdJue$B697Q+=18_@3=2!T#!pMR>I2 zTMivPrENyZxASK+{0u#D)cs^OZ^dF}!71Tyg8cX8C(C|z+$Hk)cmK~PJZa{0H96-uie{K9}$&pfBv}YyN%Vp@9%xTe*IK@ zcK`2nUsrs8wfEZccdxJS{q^yaA>W#{&yDI>ZZYHdz1Q;lkCom3UdZ+5%i9B&6OR4v?%QsrnwYq(fvewg z`SLsZYwoG>=b2yI%ecJg<9+5!T3w3&x4z#e6K9xszOeF}V2Hpe+Sx^JJyD7f!6Jm!1ZeAC9?G51?PZFp&z zuWTW|wK;p{a(?N2CujBY zdX2)l`A$u}J#XecUp?JDU*}uZHnV*{3+vC`x4NEw{n)PJx1!C3?JU6TA`2_)FpJ`}f~GvO63M`CqS zivLyHoW6N_l>PmCduAS3K9yyq+%o%R*2$N+Wy_RK*B$ubuz`I6JA=FDY#A2EDT2mw z2~zS&eaa!uvel+9C!Z`AZ+IPh<;8GhS4 z?x|!x{+Gw{-G>hbkEW*Y@BR3)o~`qK(<9zDPxl|r`&r!bk@-zNQ(j!}j@@jBEEHNm zC+`_>EnxgCVj#=1iqX8E^)a77U{Cdf4><=n^EYJ5FzlREc`Gx(4zmoHw+(c3rdH zP~w!icIun8N8S9Gmv5eaMcQ-+Pk_|7dw-<6r=GtT8^=(#>FT5)EBj41Uu4`?{~6e3 zD`0PBT>s{+)Ot1lZxeL=A5Zqv)BL$1rs7H3&4zVfn_ka3u6q4k;QBvWhu`mTxcB<# z>PNmzdw9-G4XiXdP%5u*?^!8dOWb_Zx>ri6%p1P%U8D7wpZlNP`TLrGcQu^7zVf+f z9%x=Vcgw})v&)O2IGx&(F_4 zx&P<7VEmusi~9Gi`*G)gnBkozo(t0L18shI&2)2Ts(sJ6r`6=)2d{s&%5zKPCjM!0 z_jvGuS?I>!zcp`b8T=<4T4*k@?%f8Nd*@3lBpC#jFOPWlZN~hV=QhXAd_O<&z-xYn zKY9)KPd&Y>=v%gzrB`23PA=)#=?gEVj9R#=Y&)0EyT+4PagEi<_>wzZAdS;n+?MF9V%e?m*>AE`@S(NQyI`nm=UW*~? zJ|2r5G69agJ9F3Oyji%Z`GeWFr(b*=SsetG%bSbG z6m<0W3#q-1*f@J(=J8o-%k?uo{k^Ofyb0@DWBhT(53VVGq7zzAolMZ9y#k~2E!{$cy^pu_q)E$Y_Fupc~Mof^h~9j z@@GqvZ{IHE{o|Vbo$;um?eN7)34&?GfykZFS(&|rRvi%+0>k?+u{^zlXr?Kta-Uf+PurB zx8A;BlmFp8v*t#5ZL&(u{@edF-E7L=xby8NSyxE=SkCXdF0kROPNmn`=F;^q4!3L( z?5+QA@Ly?BPRQjC>7^(CF3j1M`03kfAMud+^KVxTZv3_U%ImYwxYu+m?0)e2%FEa4 z@ArJWeeb02e&6LkAHUU~`da+{#`-g}e@yw!`?OMi?+N2SG5z`&7_ochjuU&7C=l%2b_op{czXx8Z-BmdM^pn?%(=Yw3d1<i*Kgcgy=~skYmcWdo8|xI^t;u+*L-|^ z`up|kUwS^z3sf|pxBQ;=n_Jq~RLwr$$zIa9Cz9`8+>dQvpMJLG?w2ZYz0lO^u5zMl zHlP0a=O2vnK5doLIr-(tsgG8Njx@Y~@o$rluh>4hvc2ZHkABXZ*e7{HacZ0TytZp+ z_P_Pd&E2rLBu4z5{4s9-?Gb-7b}jR1{<&fH#|O?=&9>%$k1+rL|IJ_THKyKWavinW zM&Iq8|NsB{e)!$0kAX*pyj5I-l4ei3wdoEkGposk4_g?rQkbPG61Jz$%Dy1nZ?f54 zF2jeB^>7CBHpL%IZYN7l=LO%*nWhn>HRo;PKdq={zai3s_gOU#W~*`Q6q(>;D~@492p{#ZPB#dnz8Lx$pXse=9F2goqrK zddzgDcZmsrTYEvy*OF~QhQ%{b?Hyc_6H$U5x^sQ0l>FLMiR|Jdy*i1|RFL3&gq)z+t z2|xZj^89CZapyTbyWyQ-%lD0E@{?!Ycbv1oMKMnCi297_+XcQ(SA1w*xKdup<}RZ+ zyUxS*h_?FP!V0!G_Z@b87kJn!@9_Q~OZaE@imK8BLdxGh%02nus!%7oXg?1pH(M?H z;ZMRkmxa$r8Q#?h5j`w$+4CLyL7Uzgd1+@ZH>G;o7E3UF6X)Er|F$;Ybzv74bN|Nl z{<4ZsALYv5zc=V4%S=yeuei73`<^qwxy*mwc1qTTJid6u#$i9h!sjnHtF!E4+j6h9 z>|OQxGbsn;dMlTg%`Z!TUv)Uf{&UI?xldnZUxj(U+cLH6$jd7;Uq9aeea-P(8uNZs z+ZBA7<$mZ2VCRgr5=0*GS%rET!9Vwr46I{+@EcTy@+@LDa`tsmpyVpPGf3@&h=x$43_Y{Mqn&K8uXqt>ikZ7uWage9->? ztHS;N_II84>^x9V*?PEH_R`BI^O-;J9Eew#yYAm~4`IjouAe03lp8PTw(NFh>aQ1+ zny>h#o-39~mJ|JE1XThCmTkIRYxtPyezIm1O4?Xt85>LklkLB;D z6}_qE+hSm`$^3s51OJwS`^{J0+*F@ znbo1^B+oD`U^@-Y21=I9a*3`dBWV>ma5b46fGRr?=I*-}4JA6X9mm^MJe|Ax_B~4v8 zec$xiGCd1-y_|FFlEYS3o=FF^rM_{l$yeuZm%Vaovr%O+%W3!LtM(_Z$vv>3tas(y zX{&?wGxZz_IM~5fuqoKzb+sIOSGmZ9dC!DzMt=YNL9lpN(W07dmdDaJdvD+RaMHoV zg={C2wrw?B#JGoheZ$0A>v`jk-g#2Z%Q5?`!HZvg?`GOX)o$Hd?r_!e_K$@*NgEe1 z7BKgGQJvu9kkg`{vSy^|?X6#E?iu!&$a9)A9=& z<~lZP3+%i({Zibtx)Xorheet?SWcRKQ|jIcrsS$)4c)vGCOpoIN)7T0QM({x^7@w3 zF4wm~f4Ur=7Tj+9#qvE@xO<6Fx7O!Xe(9%e1aA1%f1AxCV(neKm2snVWYxFzDklTm zTI~Cc6}*yXEV+EfTV~?1U(4qDx=-q1J@HujzWPt&^>>!{tq{MSy7T9jIqWwtrrA9E zG$rNS(}?|CSFUflwz+fa?WH;UZ^%_!mtEO*gxzC4*Z!Tg(g7k8_H5| zAOE9yYulrbbB|ft&-*lkYr)t4p72llYxwqP25ai?Up_kcws6#?U8xqWlCw&;c)@#rzFF<1)HM#L z`#dUAKUlxC-l4QSZkg?#(^snZzIiFLe_e%LZB+eVk^Rq?Scm=(F0~8|TkjL^r(dtP ze7X7g%VxH9*HZ33-uV5^Eblv&M`Ny@kF&lXW_JI3rk}6uT<7I+ve!;5bM*T{SSVyyxLm!`Lc8N-~PDY=Pqr%x8<_b`%0>i*mR-y1%C-n{Rho~84;75T|;53inlR_f($9(no{5^BofFX)u_tVW! zezT>e8;BoHStB>6eXd{L<(qZ;UATg$RB81&-k7Vod698U-Mmj$lUjph`SkX-ibu4s z@o5YFxQun$G3IHDtM5J85fJB;$^6QVrYlYo^F3B^Za0nl0oiBg>{KwZn z?rFZd8L2-#u5GE@locl~imv*SI@NzwNb>Hjb@q||j#0|Vg^s%gv+ZQOg-*>jH?dpP z*L-nHY~8jaQJ@^|F^HEp8uGWXh3GH%Dr3H7=ZAM~_pY(6h@RQPS5@p6(Og+%{WbhRRKS)@iIWmNQ&kt#dM?D{3@$&HBJ1!&tNa6nRqVKgW=B&T=h4nWn$42hL7?R8Z<5@%}-< z)(5XTldOCMG>+Ap33xpC@H&01lWpye2M5_F->LL1m0+G$dGPF29e+8!h-VFdmp&*s z8!fz)HTkgLXDju_R}J0Of}fXE{Q1apmG!#6@;qCk_eZ07Z?`>b__yxLy~RwoF7Nw$ zEue17wl6s!Z|>e=b2d6@edNnom3n#yLMyi3w^3TpdNG1cBtcJojd6e3`RduP-u(`o ze)^H{rCuwy{U6zO$l3BAy59UbWxe3LowwJ_uit0ywLkjDfgoi%9xx3fkY74QFQo3G-Tad^Xg#=qY=9eTUxTyOp}Q*g6t%#{9PTZ8u( zw)X%3pdkN0@k;#f`*8|y;tv0NyZgreoe4WFAFTa9@x{^f`H6LZ0_OdBYI^T?{hmIH zzqt(c;+!e}?lb(*Y?CK6FXH;14 zTsEDfTH9DfL3M)Ti#sAg2b%;hykoh}`HI!iDN4kC-!#V!H?JlwXliui-cjhOP{Mpg z;KY_Gfqqt{f}x>PCeL9sSw5%gYxaTdPK|vs2elg<`Qn~7xHHB|yf}9Dv#IONt(L4w zO^uSgJEny0VAx{Yu=p~IyLv=B&$R8m=Dy!z>X*%E%G8Or>)fWZN8MmrOGwy_r zZkv;&?jvn+t>N@^jpg^USqkPZPve~-D7+#1ZOZ3bF1L(0+l5Caf6PhnjGb^r^1vsH zr^<>`ckZ73MCfhH8=dPvGk+QH-zi9z=RYGn|{5ej#&BWXQ_3 z`Cd_)%Nw{)aegpzYEL=!s&oA|!KO=@FJ`VaNVAD&i++5J>$JmxkTy1^TW^--{8iMh<5#9nlA7llCcG*>>V@psItD z)g*`0p2rPyT>`%to%fZ#U>UQl#8AF*0%LyEmvT4Tt8;(ty`Q=3g#~kkCW`shombwR{3t@<;rR9U{ZKm;k2&1@guiF<#hkG(-*Zb-P?ALOH1mw)3mL&!45Oh z_<1knKhQqC{;htUhP9mVrnkCQ$-Wz}I8+xW<=i`S(BX!A^6ZoK*SF=)nSAHWvDI74 z^FGTd*mtYw7F>92v}Uc3-_dC)b9EkvtHhmYYg#w6@79gUm#6n?*U0F7K4&P&Z;@@L zP?+3XQ00ACyQ#-~$)~GRSwnV8w$@gkf7E?;8QV`|zn!`jlNq}ni`pOYdu$r_`I*Gg zYqQt2Mje;SxRVmJD(!K6x@hEMy^S)(K7LH6(ky)Cx9FU)Klym()b#VO8AZ>``IRS` zekzS|nfbHNOZRWN$tl{pF*J1I9zpM%ifaZ8yOsnC`utxIx=pBP>u1|uk&8apRbDq_ zoLSetdHv3HT^yQ!w6AV{EIs{f+MiRd@1u8Gtz49+;P~skzm>l9uNmu||K{uFJ@a4J zZ(=r$S8>Jv+wn0C6LPZ|-&#G$+gLkI{F225>3A;wZ&nV;`%dn@X~Jsyep7+gm9hgJ zMqy^jB5OB2=B?_wQ3yX!~i72QAc^n;s9p=YwI;QZ}t=d8VXGAH{~=EEoH z(~m}P{FLx?dezf^>D%^8e)g3w`fIAcZByCj*}OB}$IRGjW2LP$`>Z3wiwEX|W9aLg&pFKO{!;a=N(Q^WF=JlTEb+~il>(;b22GZ}% zuPxwp?ut#8b=rFW=&|(Q=U&T7?dHy^pD@?7QTphee%_dK-&g#d{c9$_aKN#8Q(N_Y zzUvR^-In^Sdp3XTzPC?uQ_bfe;n&YIu8uP6U0Aj9yzrI%H{VIF4=dkZ=>GEeH~(xo z_a{%UiuldnTlehpRHxsSAKff^_p4->m1u6u(v5!^^SKndC}6$nT&ZhzzH)Xa_r!0h zJ8wLt?$VL>9M3Oxf2itP6W7XfZtC-$sgb*ai>#j3RoW&_Klgm^vrE5fZm`zH+3s08 zXY1?p(Z`}@?%nkBYrXD#@t678=PPb@?=I_mXR!a@&)}LllMd(ZDX!G_o_9a)uK!1g z3CkR>#T~Da{P#O|&(ESYHEavk+h!LC&T_MFnp$9aXWsHpZ|}Z;xvqL`&H{EH7GTkiCchM(N8 zZg$COG$)w^R(7hiHLn_=D+jyT(Wz{d!FaRbDNsGYvT6W=qx#Z-Ir~fQ_Iu+%e4ROnXk63 zj7N|EvgBm*e1U{|wq)j|$uo=XpT5lbeb&J6_u1Un=Bf|&B^AA$$~t{sJ@?52ukLOR zj1!-Ee_s7V=kVkkb)7@Eq-F^I2=6_D^ozFHqSH4=-bGv5dy}iL# zHb4D#b93&rhJz>Xeyl#*!SQsZUgr}dR^L5KmXtR09PiC3E-n0NzI~!o}K`PCd+6oa4V-X1e%-(Es1X+PBYSF5g~VsuSO87oTWrXL@St z*IGe`Nad8musbsa^Z9Pr-g7=Q!_0QZ#Ovoc#kz_;ukDO==)8P%&1oZMM-k@;gBPL# z^OL%i)AsarFgm*T{JMR^zv`f>`?T{37yA`{$tk&Y#5kw0 zec*fYLAv9kZpI%uzR&v)e~q?3@X)Sc#P9%j+Y-`>0NLFJLFk30JBGq>IC zdA+<#U0%Q9n}$pe#~e7QLo6jZU2P%{|zs7J~{ts^Y;mAOVSv+|E;ZOy7TuEN9?<# zJ-^k;)-OM~r2D*F!N-}}M_zW;J+$xtbZ~oJmqje&4#z0TI!?~_DGf(vGw^ZzUVdZ0 z;p_E(^4We)uHVM~LG04XXX_b%7&YiSxiHqqPxvnZS>w-?jc^5W`)@9sDO`9rjJQ(DYG=VFK9FhV+nabJvA4D2klWs#$j?nrjkI>hxyQWL5@l z-*d(d2N+(l`5d0asBk^<$T9ATj8Q&nY-!ssv-T@ZhN4Fyv;EGuu(`2TFKwFdTxruhLV=| zf2(f%7kY`J1sP@h{uU?vrzJ z*IqG6jDI_WUHP_}^rW|0nR#8gA`_l5PT;7zN@j3?|r8)y|?+(Db1}{rag6eKSwXB=JY3% zdpX9;w?&RV@md{wYMG4Wo0~6|-K@RLy=kJW*t&c%h75ha<;g?g! z=LdGF3`Y)a|6BPt`RH*d7fFx&9(o5J1vJ33w6(>`so4|SIs&u=DE0U;BUNSpGXTd!9)A=~r{V_;}5o!<%)h=htSfoji)KcfWqF zvwV}n!8al=3mC1Qf85YHf7977-wdZmH(cI$Py76BiDNYfmnzFD&75-NSbk=@w7dEy z-^Nc%K058}>lKcEs{Cwm+Pu?gMmN80v=9Aq_T(;s*HQ1DPprAMOh58(L(!(%m#by2 zo6a@doq2xuwnW*ioUC=zWAz^-W-SkrjXOA_)Iw@T<;uQW84XRWx}n=AS;B&R$2 z{e>K>#9XnL<=d3a)Fe*7dOhRsV~#14H`;p4U-@BcNL}mYpM?kCXq`O!Nnd)~gkGkA z;}XpGi{;J#&$-8ahX2TfCmIenEe`j;zf=BZ->vFtFF!n*XBh4J-qh#L@f^mOn+y$a zM4J!IJ{!2^{l+_Q_Xc~Gtf{tHH}QPtb>;o5qpU6L*G;h(IG-FHe(<=(jE38ZWJTraw{sgmi|)T&v7wIhUNay~$Y1^t;~e-g3j+j@w#G-K|UC z=$_b8cQ$qYEsiCXVYlzU;g)-P^y|l(8@8(sN7@v`JzsJcJjnfGz3j&gFWc5`eo=X8 z?bN5ABdgC^wC9|7V&uo$_1pvT%eOw?sAD7*ZRFocioO1UKxH&^Z!llm5ocwwQX(}d!0A9F)#kM-_15T{p_bdH@&T#Z~mGw z{<*-^snQppPn`ewTfiyx1$oi-i`H^~PG6`$ZSvI2%TCHqw{P3X_&HlZuKDMU&tY=R z_t}?h+wwuvzjEEnJx_CkoA%`w+P=*%s9zTD!2M{OjSa`F*C!Z$2(HaDtY@Fpxc18f zO|^wzboAeG+wr8FH;@;6yNoAid1F|+PVY+&|Jlv!e%GwYsh;-qN$H{1W3&8s+Xw%X z`SzsfrrXCa-A|t%{4lNk8*ULBOzWkH6E9T<# z?ccZlsB$@N{MqmFF5dp^X?BQtJxSUl%0-4t~FIg9U_jXy(V8jmrW6wf?c-WBf>AE*}{_{iO?S8MLE z3_Z`k8ISU9K6vky7ftPrI8ms_EWrNifY7I1{GK0|%t&5a+;zUoE#Zcv{4tkl&zn*F;;?e7imOVSFx+UDN3R1W@nAi%d{!gqs5f_$g-A6UKH$Z(@O zVZwQ*528Gu!xh8BF9=3#NVv9~p^m4seBm!cwLc72d-?e8cC({Q7Q?;z#xyRh=-f^xivr6pai^GzN9Lr|2 z%I`OSd{epgRmaOVfBW@~^H!@HKl9vp=H+)I{fa+7OdZFEK`bzt#6X zRCZ-T(YooC``=iq?JS5a3;MacH*c=q^7#E*tM&bAch+or;`m|t>oZm#UVhqn5waNQ z|3suill>=tdigxH$kXoMV#fD>oF5#vH(IL68q0Oqeemg??cAj*V%pgkHtL8XZ~fr@Z)9%79plbf8HxT z1zo-Wo{@Xp#!(NA#KlFpW*MGC@aT}2NB z%*+dG4LEQoG2VYt z{()z6cixr=X3%2bD8Ib&OxUqWPxBr)u>BOD5PfYj(=WMfNvov^A|}m~elAI84!W`O zw4};eX;y^=3>R|uO=UDx%)fMMK``@LX3iE_^@Q@745!MXw!e&!*c|tyH*UJN!@8om zYk7Ux(;eok&3hw~&bC6@-Zz@xbcdSo%PC9cCptW1d$F(Kh%;ONX1Q7Wyq+y>y1suynn_G@a){T$bcD|D0lm?E91I8gbFehi~GXUHVj6ywUr!S&rc`m*1`NzB0e!Gr!#YS&J;wL{^_=-PEfh zdE;|p$*=w@|ECe#eV^@OFj{=GK=n;=^xYH&x#JIwE^K)5CE`uY)!c0R$GY`1uqqtAbiT9rv~2s_+eap3c_|I2QTwY6w^?=apKjdC zvu^d|{Q)_Vy)(^1e$80>;fc)~$*liwY2W4^6My`6h0G>Twl`0EwfinjsE_?}dz0Gk z2j-a{AMf~hBd5f*uI6Iu+WoVAxz_L(%>BIMbaIxmdG+=eC-z!iReHU};&vRv*}S_B z8@J2O&CF3c-SlhKrQLmBFDw1-Sp0E8&XPla=f8G0+f~WVvxMDc>0aOInK`19l8vuj z*vw%ecmIsKVZ6T3eG@Ztt=Y9E_Zp7Z>|&ZRzdyHV^TMw6@z0jtG&u3&LGK0&-bub0 z3?F`4zPmkVTjly?-*@LHY+}1p7!f$;l*RENlJICCOx`-(@NyB z`R0YHiO-l<*ol32jMhGEb+#<>_4y>}9gfYr&%b?iEHH1r+xZ&#*vfrZ+K;kqRefEy^}5IZ+k4yg7<_FzyR~HQ^;SLm<)5l% zE_@$)_2!D>?#DxIy5m~5i%&fK`BU+#y;WbWr|#c%zWDYZvsY7JE)&SBE%P;>`8;mP z+3%YFZ$IC^O!)bUL)%YA#Xr~z`Gie0CI2b&+nI}x zt)7~Ed8bJ?Naqm7CJWq#xopV3`wa;GX;W^h6pt1gL&72eS+IN(l`kM74 zJi*Xz#koSpXM6k-W(G38nAx^)nQ_Cev$cNL5A0~yDehvG`f-QhWa{A;GTl?-(jz9u z@82{{pf>rdk;;^6PO^j+e!AKM~! zmP(En$!9L>GxXnY;JF_0!LFogO7m^`1Wx;dihop@^a=#^3?A5p)HPVzHJruG;53g8M+X$;y8Z&+F8Gj0i( zb=3B}*c@A?`v?CzD z+X)Jd=SZPyU*z_m4YaT^nBxV@x-ZBWnmv=asg`?9;+8Bg;H9Ao~LFIP~( z!0?~%K>30~H>QLCZ5jR-Gt^68ux~!rzwo1b)%WT0rzh{1F|^&~V0HA*^of2J^|A+e zdL>;&(lctD{_Np=(A}_S?yD936Z{J5nO>wb*06Cl)XBe8Deq5;Rz6!4z+nAi)9Hh3 zFXtafo&3BxOu%`{oHh2dV;$PdHoY|Ey0DA0O@r%ziC>1l!*v$DIrCEr zPR~EA_u}T=TySD>kH&I0x6|PP2cJ&*B>#TdAF;{S0gYGG%qQ2*xytFp zezur6KjWB5d7d5%YOY=}6T9(Xa)R&iCN+hB1)WCmkq2&VS+z8$Z^6#K=_?qNnSTc@ z*l?zGZ(O~n4o8>KJnR>t}JiKH7T>Xe}r1FZV)NDUZ$Wl@4fza zOGjFF&d2Wjn`VD?Wy8)1CF{RjpR@nQGGWEr zd>8h{Uh|%0pFbt3Y=6h`M; zwEkT9AyAgW|KP`>UmNxG*SwaUzhI7$-0R}h#lrIUnNE6m@P*vpG~>WAtLyp^`8+(U zxD{rJ8QplMom6VO;KQJ@%q2;Y8mT?{;=iV&%*X>nVz!XcJ1|DU#u6lx<0Mk zEO{*W`P2nhPXE&0y7lGqp9y;uy*_@OVg4%G*Je`X^XIk?=DxZW?UDS+x+}D}UM+IA zuKlCHSi6$FI(CZ-*Q{*5$&wc?cl+csG5fnYd!nZ&d`ffJ5W8LYruUjTpQU5w9qaxn z=``PA_lc8VT7K!7+&;nS{&xrC@5ytYmg_vN%38keUcTbQX|AqLMGwpj|Cg`4zgOml z-_763zx`6rbZq70v2))hxNAY)jx;;7y}=)?dw*VAIxmJ@?!Qy*wig|_2@h&!Z`#Rw z^TVe-H$$cByW^d5mwV@aH(ED&{Y&v@k{0_;+_=d#x6^#n&fa+EeV&$%?SHMcy*t#e zhnG6;UUnqpz#H?M!O4rhgkM%%aQ9B%lK|s2^IL7@_$zB-Htu{H`D(L!*_~erIeDd@ zvrgPPaZG92!;?K7&xW|88{n=dIWGqHgXx6a2lZa&2Jc`iPVNL$`mn%$qdbx4(Vs zwhu3BfB(FG`*z0B)Yz%#bBiXQ`#$w$Z}iWo-S<{6{x28%tN80n5qsO}62H4W^1p?* zFhs`BfAQ|;@AHc{d!^3va$c{I{xq}ZPMWd*(@MYDb50en{r|z1Pxr&td2t=pcJ1AF!F?e-`!p2K^or6uIBu(){pGa_JYIhHtfz0SB+oyDp=q zS#|D@WWyc5A7UX5yIyKd&tASETH~DE+j+jSH}>7(>4{s>WBc*o*OZ+sd1-sK*@GW{yw1&^W+b!K*k94G|IFs|`DguZZ=JXH?N7M{ zo36cierv}eqfg(m&aQvqlWV@|>*d6~e|}iTulp`v^FQ&^r$<|A=2m|ESuxWn{@%WC zb<>UfEf$^q;UxLnOsjay&tCLCkE@cSss=ZKh%Ch0LtH6Xm3#=;>V#OZ3G;QEG zvvZH-8-tU#8(dlxA34bvO;gK>!^@~rc37r9Z+a1+AI3E2|?orwyUni->aSY;T^~iZIV>OP4s*u=_FJ zZi`1*`;NKKP;mD6cTq=x_ri(}bH>Ge9RVC_D|jTz7y}L(aJ30q#JKAOOG#c*-*B6E zLT0b6>A<99qi zL_1Y%eQK}0z0j}cGyQ*WR(KPYaC@8mt({+rY8vAf&*tCjyOgKLHaX$ixBH} zO6)j6hx_@e9QZn)=?7oYjez~%e4{k^3>0kV*YNGuyZ_70f!Ek?g|MADLtRtJt)KIs zy|;Ip`{L(>&r|+?+h5Z%yMMhvK2Jm3bl#dj?M>zXE=xY%t9|DDyu`{X@z0y9E50?G zKl!y+wxR!v_J8l_kAE6Y?PxCX`kBxCqiEN%_?DjX)T#>p$8*gMV*W5qJ1jmSV6WhX z?2J84C!8~Cc&@g4BvdLep1SYG6awG z^ySLA+%%)!{K2^^;;PN-LY?%)GaPJ_-ue{vt=#`AsX8rU|GJYr8&3b({B`EWXS#RdQf}|bHQg(&z$i8K4NqfN1v9hcW?2TV9|n{DYA)AX z{H-?QQf+i?;IHU43TDQCQy()i`5XGPJ=*C1ZnFD=qANu`@rySJvNs2`mK;A2H6@(+ z#+lE5c^~Mkw=?_@#L4=k=IlD-g8NClT`9$jPIl&OzS+=vFy-d6487Gk2?uNEmo~o= zIQg#O)^@d3U#BR3<(5wGlKE7e8eYC&-le>+TXT|X?Sk$e>L?1@zO;E!j^4$FM`b4S z4Bm&hF+STh)irCQ{MuB8t#|*lX)tI#sPd|8D(y*56gjO`tF~P8sn^utlZXHCZmMTJ zup)H(+PQ0W-+rlN6BUyzc;k72<;dFDDM=w89ln12>ml`V+t;^8tIzOmPT%@1Hkx5k z@wr2D*R1t;>3zRf_rRVLg-iaWY${o8ID4|U(=jA;grtxDGtxB z++)3SX5YdTYxj+5-y%b1H!GhqR<%D{HP1{Z(8Z(Yc;(6kmZdQ_+tPOjm)x4?JTdpw zxsAJk%bJy-F)8dPKGv#L1r~jvR zXnxW7`cWzVikU`gapAMgLHBchnSWN%HrisOyZ+Dbj5m&3O<6Pi_Hg{)u*p}v{qdfL zto~WNt2)H1DBj-3(r5fXXE~-W6Qtk`thFo z_PzOJ_r&p?SJ8&&C-#Z#Ty(1{&U5vb@IPT$!Rf#IefqOLRod>@@0t8_-Ii+SGs@pj zzp)qD?eNodw(k$a36%^>w{OvYX_->uQayOrP{nYjaruWXTyxeuW(5&=6bH3+) zrBu`Rnd+xLy!@jc{C?Js^Wnbp?A6{bu~yfw4*QT)Qyl+A?^D#g=O->-KmPo3v1zr< z*H1Qwb>B}bP3lUVdOU7t-Kxjiit@8>o8FvTbuRAbr;u+K-=F&;@ZjA~GrQ&c*X&*P zHN|}0oocy9o2nkXmGl3%^`%Jvw@SYLYu~n*S2hOzxS;y{^!dnNaWne%&p+M&k#S3I zUSbB1%{GiZTYmNYlYNJNy6;K|e(CmY&Rhfi zDQS*b()GVAw`aTDPP_9@PReEB^h;s;)=r(r`%dcg#M1TVxj8Ru_bd@@L1VCw@)0+YuLc@A-u5-v4UP{dkso z@cj2OEh7RrH&)YHj%HGAk}_&Ps*j z)2(@Pim%;UzGPBlTh?@hMwvK1BNP(;!n(Lp9(Ry1)LVvpIy9Sxq>71kcWXIL7`GHO zCjMl7@h8+_Khulo3o#2?WDV>bc;u5fjh8h$@lBub(#|Qy;E3enz8equl;$PQV{18m z5L1PVU$ z>^Rw8;4?X?#ldhvRl4ojMEySL1It$`Kl(bE^Rr{&j&E+=?)9IO&a8gIV5I-2@v-8r z>@{Eatgg(T@>()b?&Y588TU5JbFPi~Y>=zFsj~cy;Scle_g*}yUSV!iC-UTv!+y&H z$K*Jq)84=Rka7F*<ekCOA78W zs}z`h%6DWcEaqTiSWy4|f5Cz8|BhCFx_f_nr{U}r@5y}a{pmJ87H9kP=RNsQ(Esw_ z`$xZ;&nH!Vkb9;+{ZsS*&-MHdmj9f|y~ML;y#nL;_fH?iv48OHxIX{*X8Cg$p4uIH znjOJ+V$U<>)~~i2|8y7JcV;@Q&#-QjjvB*%u?zpj4%nXfkbU8Y*@FGEo_>&ID4!q@ za%rB9`{Z@HM|I|>M?RY#(l1y#NnQT9ZV}6yN9Ti=6wiD2@pJrvi+@5HFYi=n#E)d9BxUz5&o9p;I_&CprAy9vi=wTpCO@n z%z;-Xhf4n0w!WxGEjioVk#SqZ?pvKZ*;c$@3|+v#h?H@vM({JMFLhSzG;L zj@t994kweD^j7OWTb?jA!0y4WUmnHJR=(LLGwIDCy~abw@3=ls_Y^zq>L;Hyk9Wgi zzwKv>^gmgL)NX(NXv$AJ6WL(pB=WMCpgW|c2lAk?yq3!_)V}1m&$m5t5#ORN#?|Mr zUUk9C@ZcSl6>O%a-*xyeZ+G~<^j4U{*PTplQ=--E^m=sflHhvzV^2_N=t+d$6<@F zSisj!4X@6K-JT)dps=FxxlP!sNjbZo?ORqo#aHLdGm~G+p6pFi*S?)``$O(qpUZM( zygPaK)(0M2(!lhG^;Vsr`j!S?DQ_X+46{8N>fdI~-gc!3HtSv)o5>E^o@sVE7?2J!E?Q z$Nvsh?%EY03LHOKidO#Ya=2PDF(+{2{}n&Y)%o?8*oTGrET8oJpMpS!gvULFd%1yL zYl@P0FX4*J^O|`pCoCcJ&F=5kTR!D)JNu>c^e1(d52peZ|8MAIpInpMlj-+N)jsp> zR5zRde`4qC(TV?b_-Kvtb7r%K@`ca;o-z!$JM|Xx+s${>RNv0B2`JrmLg#bTtG7S5 zl)U<ba9*CnRw=9W|Ehz z6t?9b&C96XyXM8SUC(!Iu)iO}e`Nd3jPz`k*R|!zEW7g_GxSRO%5p#cl41RC&XP@n zJtuEH5z4Qec6&nV*{^o(d*=N%I(PQ@oIl{97Bj6cd!Bt=&%M$5)c*68&t$4*Ccdg{ zJNo?Lf7jC$Q%j`h@3T99`f;~i`uTZP=kCAWk)wJy%J#4J=k7~V>+j{hj(z`e^Ea9M z$>mc{Z~txc_2K8J!qnM+s*YS%U4CiaqqUz;)qQ#O^z*ax#lMZFU!8n7%5LwrFQs;_ z|Lmrhddb)9{AYUCuG(m4FS~zb)B?}jr5BW9wf;Q2(#Fy_Z~J{Qy~kz7a!P+C->+$BzPmj=cj>7Xv7o2R&T_@O#oW8~W$wwj z%MV2STVs4@-<ExckJ}%$2f!S-tDgYxXTwDVvh^KHv3yUbG= z*8a_H9^eZJNeDeVMq^$EROCE~;5fTDyol$j;sFtf}RdvvL>RKK=QM+a{^YzXTY))=WPgwBVe-b*dH9<=~IocJ8^$;dFha-%>tv zjchlDgnf+b<~tn|lycf-_eO}pmPcdxBJUOV<7Zu)v)g~xxk9rgKY#Q$`(3$t{^{~> z;yu*~dl<^f7l?mX_~m1GpQAt^L0z+N`GF+|Hd`LOvOX>0WR>wV#zgUXiR$);6#5k& zHVD`qF!-14bNTp;=k*LNVoQ>yh@k&iw4DWZdlcj?-8-iNAR&$5tyV#U8`c;B&n~Y~DjFza9I6 zIG7&g9orOd5ckgD1uGkCoA*&0{Tp{>H=N0wID<#9P>^Rg11Dqod-gZ_-z$CG)ulD>_sZUsueO^zSwbpq@AE991pPTbzspUmJbLf)BLzu)GsAxm z<|W^IFpu%p+PNZEKYxqkvOm9|Zoz%UQdQmOPwyL5PMmOEQ|@MUoap>xxnDorb68u> zuaT?pvV69=i1K7XeFG=I(_dHF?798n#z^a&EGY z8)NCGRX#!|w(nc`YimB&zAx3Q;(zU(6u0jyZ`9U)4g1RS183QlQ+OEacu!wluPk@3 zU2j|Qll`t-#rK?!tC+2N~!&`*Z(z?c>m%^$c_bF z+hRob6&tvVavEg3)V+|TAhhye&!?Cb4qn>YZvq_l%?Pq{4DgRQr*L$}6Au2q=rC`K)`EuL&%|=L&z|Jj zuwv&O9xEQnl4I(;W(mU6w72pn{mo1Gp6L1Dw>szt4hwU;C74Yh`ue#1QWs;zT-U7wh z{Y-Z17rc`cuG=1Glqkrm(Gub?I~S^d*fr1Swu9pJvkuQ)zfZrV$ICG}$M<3>)9YDv z%FQR8w+XV{;jw&{AZ;_{Ec3US+ZVpdur!?Y#)Z)#(nsxixI>%DY_>U17=42#b6r20 zGUv67x`_2;xtyoh&c!waVDyp#{YV+@D z)32t6ANOG9k(%!-Z?gBqf&6=navs;GOHWbQcXLP5;^Lal&pKtDNwP_$%QrTxpWVO} zQL?V=WJB%mQuk)=uH$5(Fy?wsnTjKmvUB;(Q9xzIYHQMX=R(j7t_vG@erzRe^ zH~g7m%jY~blwW~+LC%WAO)0w*4}5;A_I)+$(=FwF##ufu4{;<+zr3T!;VtLdTJB|+ zk7ZAb+_SQF|A|SjH>8A>FUc z3ax%)9B6Iw?c{act(#32d{NYuI9cWlO4N#~qBM%Fr+Yj}1)Hsby-d4GnTcdpnf3k(H_QDs6z_T4M{erppHi;B?OGwr^d#{8_rH{<+Se<3btRcJ7Y4e=KZf&K|u<`-5&x{LA!O z{|?_0W%pfAeg~H%J^97GboD-?GxxO^s=pbpt)CQg`nS^So@;-&9rj;-{>FCm!h$Z09Zy~_3r?}0m8kJs;F+^*uFvt$ECpX#W(8Mw<%?eI`9F<+ zyQ{ME`uET3@9lG2Y;r+&Y+ZThpiX-v4}aGVkp#O}U?O{`L9U&u`zlvHQ`xt*<+lKfmZ+XB+eQ{}j8A%d4;2Sb0{h zty#e8{ww|3tLw^Dx%;-Bxt){tUh@Ck`P;*%9gKbd@^e&N_WIc8A2I^EJCZLH_usj4 zInZj_;;q{LqF>{buiu(=`)c!iahdJa`u6KrJDq>}!J~N5wpNv&qW5lfl-4ZppM3w# zyUyR-di>93|K8pD+G6j5c}?$bANR|-ue{dnft7Ji+xv|^HW7DEy?D86P0aVNW^%f^ zug~;wS$_IE_iIylXn@3bk8&UTH|Krb#cuTa-maKC_1xC2zrK|y`|HYme73x@@_t4% zZ+33(ug9OQP4^YYKdG9%Z&pwBw%*@Nr%zXW+Lc|kXhrRj)5rWLR$DXtx_deBS?|xs z`!?^Wxt3%9SzRyJzyD43fsHW3H-$^#4~+s$IH7+?N^s_~}|GVy{u>wC`R{+#PM_TU&fT{@i}{t=su6N4<*{ z+UW&7@-S(SyLL(A(w(YyP1mUPhc>cW-)UeiP_Zxl+Nn8TNSeya7UU^&`T$Z|-b<21tqy_BCudUQozBI8JDAWzkZV1svuF)FYqow=H3CndO=42jWYKRCsr}o#w7N0 zo_@y_yu)n=_YuJZHcVCt5<&}NHU+pSP0KuY-~G)u=0gSvcY1H!7rbN1v!hB$vVqTK zJMX!Y!^%^7Tiz&g+zPz!#vy(2np;R~M}oxVT{lvb7MN8_*?fw4Fy-_6-fw#aCtSW& z{(H-NnLS_PcHT`-@}E#?;D4dvkIg0{{bx5L8Loax>c9Ks>E|75FK;q`npu)r5iPUt z-RBQ)4;p>5`L^f0*6YW@hu$tJ%yXCfTD!Mq?|Ji6$Cpuu0=ztXnmxeQ+*S=Y>JKFa}jhJPHKD}U!Q^fTN! zdN_Z-YXAS71O5M>Cg1t_$l2yk+2>8#_kXo9HPro-=j7wpW2oWdtoiqvp>D?Knv|Dc zv+s*koqInmTrG%;<8ItF`#;Q%Oegd!9&gV}sj^9^DiOcD`1gc|k|zHWPn`}+dTq^6 z$1ZfQ?N~X(o{2wyaW!0Lyvta`e<0uKxx0nU9mO~Mnx8&%zwpCOfuCUyzehvMb;dtz zCUt@rvX^wuG@sb;Vmd<|=Ye2`_0C_-8U7eG=req>YOqyVY;>jKH22Hd!8x-HmMOGW z-9N#ZQ`Dm#Zd4F2q-CHRVQ+e|)F;((8+X_hmfXuXR;GVc`+v@XkL_nsl%D$?rYiY@ zLJN?<$QX<%4zVq7sJf3xd+Aj`03*yyS_Om6Qx!y6r@7LD3U6L|E4YR}> z?yM{_X0SZ389leDQ6))>U&noI4eO<7>xbJcd#hG8cyBZ^R#0Z(5HDF&HElX$^mJ_n zwkebEN-8uvJbh-RZyvhsnwy$-FXsyWlm*ZDB;Gl;ci-U?7P`@FE@tqc_FWL$H1o=* z!JSjhWCg6B&e%OqOQ>O@!wiOyPkk3|vb`u^7iiQ8_q^{DmdMXDy))dJ*X-Fg<%Tsc zrdV+AtbIJkFZnu03(u3y9oy4vC&lvd%$gSz&#f%faLVDJ;r-LKDoR^lPN+0+C}w<{ z9@*Z#W;eUYgR+}bZ-3EZ_B+gxF#kZviC+l}+LvE4YOGd$b0o#OH15rj?8|@G+-KeJ z;_VSGi#-jYJOA^feCC_Nm%C3jpDAbY-nkWAE0%{u{haiAm$Rj4&B@iZF44Oq4%B4i zs$W0#O9-qX3M4{|sblugo@bdN=)TDnM%?Z)@rH>Dq( zeUoS&(SgNa{fh{fD+<4DYVn<@GK zrDWg9Pbc>#z3s8t7WtcNtLSfzoAH|3*CXV8)P4NqG&1UXpQf7eX)I?I=}O7|w)51r z={?)eEPwX=w2}amWmd-5ZJEVY`!;wK9ueAR{M*xRMq`ukXU+4Q6kX3X)$U@764g?+ zzuvI%&)I1 z82s#E#zD_DW*c8HeHCQ8Z1&5qc5{wi)2y~!^V>5P^}oq4`W+>0b$?%uhI2hnk6xWw zRBfX5l|A+s*aV(BhDb)szd1G~@OGQIvOz$ha-3ZJ*<-WrpD#+gt8Q1xEOGXq?_r_W zT>Tq&?(_N-`Zzkvddf#emDv%e_3C)<8t=Tt7AN&8X=~DdU$vmySInv}2 zXRddv*&z4nch={5o^=`zeyQA+xZK=Wcd4TMivN!NPkakbrRhDBFPIx4=kzP9hD+*p zRNk}n{&$ntZu_|WMBA&gFaM?~s6BT}TVP|Id*jLD9F5bVo9&}h)K|<7t+=h6QSyCh zN6w=8^*g=>#_yZ{edf44wYpM$fhX{`9H+=Wp*my8YtkQ!hhb%-nI_RMN(Ocj4aa zF@fu6Ki}3~eb!?2opU8glaH_b_t|FMd(GKp(SNUfvcKA1J1g#IcIoS<$G^UP`gHk( zw^8TUeqHaIow|OHl{46~+{dwhM&CRz<64$e{S7V_GRwDOUzFl zFT1jG9o|%Oxq16H;dR>UH8!L(y*l}%EdSKgX9k{(GjAJjD{?HTdAB5=dH1=eyH?&= z=gYG6sa5=Ii4%&reT3 z{Pg>e^tq2d{joUs>uIjt=lx+~+uQ5kO_BLyy!~gO4*UA(<;MheWZT|9^16Ecxq0Hh zQ}(yLbzQmt+54Xhjri+VI2(ZBHk+7oy`)w^tbBw-suacuXwMm8(e5I{oawp z7jcp96WDtyS)SPn=ugsn8zQK3^v80I8Oj1pNg}QeE*!=tM@-y~Kha&O!NOfq$GvG! zb4R(r^9KGt6`Npy>2NBJl^)vA_I{9|Q!sr@i)Wd8r$7 ztbIpR+MY)90`d8W{oXTFaPayY^h}rdXl{7KT=4n(r1kQTh4>2(lz$Yc?|Z0}RIi`3 zoqbt0!|4u7?e873@9qTJ?A&#%#^cb=J?t@eI4?+i_;Ru7r@#V^fTwfM{SDJ#j(V?< zR4!z&GWgYw29AQ zxY}&A{!sr8+xHE;e;)i}SsVWB^y7KaO3{p_Eprui-7yGdK! z+u3YR`D#;n7W934YI|z_AL9duPG4TkDgR&5z*dG)XTpcz6F=53xXizxik~y}i&evZ z-rjh&4`t`x=Q7Oq{nNp)i}^!j#vh|c51C*55x8)C!b67GfBGH@pYOLGi)a2~sxskU zf3a-2$HJG_8UJMcx?+U22q~6dj@F?*?q@;P4;eF z;#4^Ol8AyXYm`pyoC^#B+$W|yJN3im_J;g}6V<{E6*$g56g{w`QJaHhQ_Rxy2jBUA zwVd57r^nH&DVHf*X?LydqQj-1^U^GhJuZAnteZ1`zh9{_!?P_Z4!@_o<7eBkWt-Ew z>5Z;DEt6BP&*6w=OwTGcwM}c7{^r6Qqj&y)bQ*5_$+^M!IQv2YfmdidpW(9BE%U^6#YCC`52~B#Yzdih-^(~u)bLR9cNx!pOS%_y@ubhMq+bd?aA6mIN4Uc&4WgRfLG57!c(`$8{)4IitrjHp@lN*g(0(P4u zoQkPSZWq<{IQh%$W1@P3@r8X2Q;x4v4lr51#JoX7`}VDNvp5T>aG$bB{iDr2OJ4PS z6wH}AP5b<>+)RIFzo+{v7}~tA1mDy3&9mNIpV;vB;iWH;44D;6H?G)tHcg);xBmH5 z#3!dt#3>mIN0@k@K1qL=ba z=APUp;&69G!}0ptCQZjqCMB<^XS%|+`h>7AT%xe&xJhqxclx>{G7}+^PSgG%d*f zecp5ygTEr{S6|zIW*g7+DeNa@6>Lo})GvASa)n6Z@6{U8`66W*kEM_7X|(x#uEyAN zZFQ#jQmYTOM<>SSF?>()Zkd1jzsO0u&upfxy6kiGq<`-?YURE>f5N|6yqTXi?t7e5 zrFs3d#^?0ekyA?8#J1ba`Ku`%zv1kuU%?C~W$ow9*Zp=WtSCy(;qv~?VnO|C0}~?oTq{v_Sye8ZR8F3^P8>4Pg-BZzQvq1;gnqrqy22& z)c@NSbDu~(zEkg>k-)x&V@1pJeBKqa{>pCFv{ufRo3`PtzV zmt@`B$)Atv_+FOVYdB-Ymy>b#A8q9GliT}cb*s(s+LtlbrGKB#J+WMO`k8Q(+FeVb zoxmt{sb%N<{%fuLuJyxn>h`ef&t;|T-!8neUv0lmrTMn-dzMv&ez)&TOI!PQY4Q8Y zl0@D6!KJ&_&I#Ug@7vwy8=oy(`|)b!+IM#KSyhMbTr#cwbiLZ@!RP4H%fr{zKHqcw z)^oGn2TJ;+Pvln5mbGZ#A6)Y@eCF0Kwy_UiUJm~A>)W<)vAp}iRW-AHEsvkm_*+?E zc3R(GRi^R$^-~sC%l*G<>fN@#e7V+d_pAqgf6ITBIz(wEoIm@e*2Ome;;AiHg^p=&|17oto6Yr;|Ek`;oBuUYicj}r z=3Cpj0are&X3ko>h137-y8y@Ucl3BHKVAMB6aKhy`PbUNYxP-vol~fr*Cnz`F2*V< zDxl$7*{|LCvu~U%FL-Ie8xu9H^<|C!^}Vt0Uz)c2Rpq`vwEk)2EI!+&?u|Y-?y+pq z4ypMiw?3|Y&Ht*I-;Tvjd$@Ar<$pKc{VcgN{oKY@8?zl3D!yCZ&)@s5us-SUi(dPC z_kJ3lJKgzv$9DF;R>il9zvku6dA;>^RP;w?#DH&DLe`A4ms6GsMlAcXW^Tp4-7I?Vm_9fDD+{$#X6QLGJ*2XV zvGizppYm6(7a{WdO)s9lusmdcbmfcKWv}hRGCr=~!SI>qjPQn(<;P2$-5TGRtX1Uc z+7Rp`r4TqdPESzLjb+J!{ccBFemndL)v)UpShqpCVMC3m(SIwkpIRa8C;l*8_}-Yv z-kYC1?|tGyX@Q>tLi?CG?GGC4X}tT-ur$6N7 z`Dp6EuF%J^$)Ee}wB-!<91pBle!#~xPvJrQ!l!QhBA(s*=A0&Z^A+;}9!|mE)+>Wo zGF|44zHgH`-@R9YooBaf%1#E68Oxc!L9*WZp`u;tqwm-8P_oPPSvEq&kdJs)p7tl#|8 zZ2QEsHirMx!v9Mw`15XJ;8UBMpZ(77yWO+kj@Y#{n;`y@v!5?soBi{L)gRC2arge@ z94U~CUu!`85!A%;O|g22MS&n#68PikB4&R2S4 z$FQy}Vw#QR;`}s$-?0wvDhYdi&%`PFgS(fB)3`yM<8keYiUuC*7b=n>3mUvE z4fp8P&1Z~Bw^Kd+z^Go1!G`gP+Vpz;>ABTM+&$d*HS&3N8dgo=thY<-5x*txI>+y9 zwZ^HFc^}nSW!|_vT^#HG)3|vNPe$tU1x^76pO+~aWi=c=mGVKm`I-$!o4@Um29`4q zUaaXpHTCi@3yaCmzdYi3Asqg{LCs>xtWOgfinUFtzQiPPYLQ_u2O+C-`wrpK#z6+mS0AFBIo%>|4Ne zcImzLC+WwyY8n?Y9x}U_`(#^(q|JQB2{l^E^Q~?&ELf78?s0YLQ?42F7tHIJ`~1%1 zn1j!kMekDC%X%q&kK){u3w9PvY+SwYit8JZI1QKF$x-i|JJqK$@RUgzpFH`@oA=C0 zVHLFld)l}i*fMT7wy{`T|5#_IDz_oHskQO&op5f8;ugMYhi?MblGhzr%9xUNteGuz z*xw1L~%^JKXG8_`%1FSMX&>Irp+pe`@{KcU5U^ zVJzdlGPj)l`cAgiZky?Mmh!l0hTfajmMecdesz1JlInUXP4ziJ2|I7xh^d#HaG?9j zJJty^&D%9e5IC=1&e#TxRlpC2{$g zl)x2UlQ(utIUQJ4KU*B$rTkWYzM1UvWCuf^D-%DR_}lZilIPX;w>h7}U3(KRMu=C& zJc*b*X^q9Zlt0H~R9|PaIi&A*WITD`)z%*t`3{HFADp^0?S4+jgq00eoCZ?rQ+o4% zSl;eP&dqsHxYzP&_}#y2cF+1P-@J3J&*f6>#T%oq?T-*xc3V;>OWOEG=8IX!HMXtX zv(PX3@maP&X{G#I7o#^^Y$){IKS@r!q4H)y%%s2ZpG?_2qNAg3E#f!b|8C_&r*G?~ z%zm{hm3fATmGigLr*bM%YsEHwKf>MrU%WS0 zu-)-Yp0-t4|B^=P@hj~;_uKrp<=ed592XHb(au_1=B%7)Req6kZJW5CskF_4Q_hW# zLwm#c*1Fi-I@0hfm^nwKT06#l?NjakRfa05Z~N?M%&C8@tNxTY-n_DCi}mYuD)a4| zZV6bd3tv&TYs>1#*Prk$*tj(H;jAsS8${Bo+}?G?U@ z|30_v^skAz9f{vMk5@k0xluAm{K>~-Mme9QYR{DRKGBxXl}nf{)KFnCm;IKR%0kTx zdDob(m_4uaD1CVT()OFvH)rpgZ*hO&%{?q@^-Q+eFUXMytqFU_-c`g^CHa5tIk#)( zR-sA%xZcOamu6Pok8iPfKkx8iBfITyrayftyzEn4!Z+S4>_zqO_F01uMEyHwqP$$) zypFpIi!bfvnJd*7r&j;}O_Zhm>oSX@%b&jv+5P27=_y|8<$H=>%GB;$tNVBJ-d}Sj zyX&9LHHw`qy!*-alf9SMZauI0>SOJ)+2uz4aW|LWQHg&aXBYEtr`6-vmmV(+cmHQ% z`TM2n%O%mLr>}24_f_tE_NIu-jay63C!f!od{(n|^KYA_7f(2FlE9??y)CrFFtL=8A z`-s1(%wO*l#(hbP_4MUsOzI&g`aT}b&H1|Eudlb<8THe5{g3N@N&mEESM`DovEOYL z6rVlxbK3ikT}G*E_xjf99G_=blyU6!EOmYHgxbTb@nZkC{mcDnc&4lK_WfmIf9K6# zvwO{99p~S{r&eF@|1opk+c&+Y%X22yM%C8N;MSXaveSvzSN^Gy&p#gj&wC2y?tEuE zTj=HG_SZAaw;hd9vwxf$>EE{R+&&rq?LY1QZB93?{&~ic=hHTqxOU1G@Lc;XxR-a5Vnf6mr{cJs&7LRTYC6OyeC93L#rSP{rtM{; zg$yq%nLjwRRr_AgTRQLaXU<8_U#E7zv(Rlgv94i1++J?@ zrtAi<@G*&CnS9O*hL2u#K1%DHk;imwZ-Nzz%|8t#9!B%?OnldwLLFn)h=0;}V!NuW zrSdKB!Lw5p+!~KHR6a@wlwHdg-c)GsaJAv(J@1#jCu;iLF9{yMcVm`%?!4vS1!}5( z8~?j`dh4dz16pPC9t+;Kk>Fc$dwH&IO6kkqs5eiUu10U&6xnvq_}iWWTOIz-KO)6+ zhAG5?lI!eVGs=$Ez&QcGxl+TUB|uK!-l=d1XUJG-T# z$7G$I%baz^yBHK+UEin4q7wf1&;K`W^Zxv7x2X9d$*`aIf$S3DLyQVZI~G^`y6gFG z|Nqy_mpbpC?cVq2q&@eqU+a5+ys1~av7a?&Kflc%vx2{I2kyp;+5G;;$T_3d{PPE% z1EoxdV;QE$*YNxATg(vWZ1wh!c+s!-%oVdvS1a4D7UQbndXfC%lcK_V=Q4Tc`5%{D zYAOl(WxQna-Tx-1pN1Dn3OCGuqE*8uHJ@n{!$+o$?+ZUNby%NRP#L)1DbVpnXS?&X z&po@;clkb(_@$-L>bkjKx!S|SW|h}0p1#bY#cVd0SbXyj+Uk47&pjMDv)%AR7poPQ z!7Z`-#Zj{+YdHjX9ar!;`?<30Q*rU6`%a8g7&6XjpYu>Zr<)<}Tdo|rPf0IUebs>n zwF?zEnI(BR6rgT+cg&dqG37 z*yMV)koH)nIlqJ15A#j1-74;C#@o{8&2Hh!w6KNMRn?T~^ui{+t0hX?vn_qY1N@ht zE!9nko5aeTt8>CMW&z{LD9aNJe#}429RzfLo-CUBBYIuXtRkhojIl*Kt(;p*&Y1b0 zIAFn>Y&+95KS`mmjg9@7o|W;kq7pBgGv^ruJF?DcGbOU~RwwM4ecLAN=F@*Glmu9& z_{#HGm^(Ac4eqL zix(tGrW^AwY5&&4xV-OJcTH7+!&_$_F}(zx$47fNrxkNM+&`w?w>rfj{)FVmcR$x~ z3vH4;^|<{;8v7i(`f0oY6|JJ5idA+WV^6R(x_O~ZW9j}GCsx*flHgy!*e*7)tYqTT z$cp7gxj9?Tx-3|`_u*M?sesiV9sUMd@-rWG7n!j9Nm)=-;q@OH+q5pnY}QFWX||I6 zkV!$+PuW+cjHl8xugTTyDn758Y@PLq*ICT=CbOOEwuZ)Jrdgk#2^o9w0aB3J44 z_G|kVJ~J=;8}K%{>a^m_reAxm+^^Z>veR85>Vk3VW449SdxSI>HDuPVi4x_^$xd|( zZ(F+D%G}}L!c_*xpI?1+J^MXllk)DT{y#O6g?pKGCO^_I*0H`GYx{ng`Iec1mybLC zy?&qH(@ijC`kh6R3~SfVJS{vaeB<+3Z;D^aS2A9oxHmbzv0~Hj)SNB8IUEgqulkP( z-}Yl%bwAlA`fpG9>f?8=HU9jxJbrr3-LCY@{H3K&zN)!P&zc!?c3x54o8K3ITv@aJ zLD7!=6Y{3C=E>T*2JqFq$n`n+$0#7)!!MOtO#AXGhupw>^=tfZ*-I;*RV%7DoOh$F zCCtrM_WdNoNz3)6_P4&C`Cjz*qm#Fe_D0t1|2_AodcAAIE=SIQ+Ni3yhD{HHlC^as zr$y!`&r<$Z^?lFXdeJMVFZXsj&ENIyOgyWR?3>&ZM{3zm+V|M3n?Lh^eB{lXEf?MD zQ(uP8o)_$V@qD!8xw$`&oU+{hMm)27>zDPbV$V-KxN_64^{1ZOZhux~>;Ln4!26%i zOIKg1{Z$gj_iy+4_hvWu_uT%jRZ`s>e}CJ*?e$wfR?eBV?8Qfgxg~MO_P*Y0^CRm0 z<@)zepZ<)UZD%ok&+ePr#cS;g_twtp_*#?y+TV6>ocHndn@xBNSQft!yr29}y!@>1 z^mWg+PK)n%r26gbXRk6$SY3baf0{+R?fxCFZI^8_9O0zcM$UNg}*|Can~>GC@3-$fXSdeZdu^|>+WUs&z2B_1?(l!MJ6u2h zU60r|(@VxOdarJ3*zeo8#%AqJ)^p3#&%d$S&gg3{|26TN{rcI@d$!)Ii+_r?EwzxVuBgjeF7x_j>)%E_-fe!l3a-&aoMeex{F z)u(HJHT8X6TcJ1k{dca9pMQxh=i7U5n#87`ualISvU)l$KV2Va{J+G%IHuF_Y*OXr zJ{2!XQ})aoseP$Wezi@w*8Jw%fgS$E%@Y zu9uDa#QCCz>(>PSwT=QVf@id5xPF=;xZw!n<24;zK8Z(UnABtiKC0;*itRBEN`GDUGrw4j|1mW+?A2&!pYb&Q;mxDv1~N=cafd5Dr^dXI zOKktXU^nw22?6(`|MCu8b!PBTpSS$q#s`nqJ$g2?a@MTtw{!$%ZaA~ec0#1Sbm;39 zWrgfJzPCMCtIuNdGvdPs=Y)9`OHyB3CD?s1b6`9^W9H0v-=`edbEt7%sro$=oBYB%$)eOIGnfW?Mzj*TeZR9tP2(fQ#Y_EULh*-yXyy)2% z_D2`@XKn~TJI_(~@sBH?@4dKHUA)Pc@6TM^c>cbwO<8NnqV2v#cNi*qHdrToKgPHFx^mp_S1tVi8!nz=l>c{d zsm-5n*%iO`rvJ+R|CCp*&icfciUS3j9qhAnPBr9Y=p`Tf<6>an`)lX=*wd5Wb2J>E z@WFP)Kh6eo#=qqZ|Ck&0H#W7p{C&#;H@1Ye?yRiy=kq5nFy13P^0%y@rD zIK5rxa_zs}!IwNaCO9&1ib||FA=ql=yvA}-fr!t;$hTX6F1=^#UwLTe^AodJU$F@l zHYnMxz3^r|MGmisbK zlMXo`tiZ}L#ov~NfpbEI1LLIWyu!z#{rne8-~*C1vv?YDwb5`?3N*hF6p7)fO zt;F+hpW{Xy_X@j~oak-rVfKdq&XgG*=n0!;uwWH~XXpNBU!pXvLVhy_G@KX9aAQky zW{_>zupp0PLS-lW6<;?}|*%vCv+=Rr*4IZg9zUpZROntuPCSP~R~x&HM9= z10Ol=Jz3DBtJuF^tX_G6uQA_5+t!qcSzK$fd}<@6-THUdbHO$CGj*vGDuUxz6>m)3 zW}&d)qHgx|XTM_V#T}9qD&4P4E^hoL5+vPUEXNr7J~IAL#PNiNWB%4pZ~uB1^mQL+ zT)Me#knQ6s|D+zI>aD)9n8)rrw`tG$qOP4U?fRu<-aAM8Z+6_{$$NTFkFgr}rhJ|i zItPBpyq+SHq5r`3a&4by(Hq{ieNi)~#S33A&dqsb8hvYt^HfP@KkxZo{Hr;ZFq&__ zZ~7*y+QcgRpPQUFm-ClB3vT@`Qrh@6dWqrcC*r~NR#8V1B4^7i-8;4NVvhDvhVG-+ zjz^_4S5N;n(`M7XDZY^w(=s1xHf}s^ap2pP9FKpwxd+tiiuY^S&HujqXZ4!tIU6Uk z1$D-pPiyYF@GO|&#+CE4d)*rzr8mE64)_DM^bt?vo6n9C<_DEnOZ;^g+(f0z7wciL>OzIy-UH5J9J&*oZuF50ql;)4@r zBKuGNsR_Av_2cRDV$n{uGtDc6tHnQN&th?Z^48JcE&XibnyHWHSI?_Cr};Sa>36M; z-}*mg%huQME{Xm&uPW`{ug@X(K?``+i`u>qDA1Z8?tA98`o#VEk3%o-{8<+BSbSOd z%9k zmBq)q(>>SkziYC6>(ku42bQ}YRKB?Sbz6=9*59|Lw64Fu^4qtkYd>C_yj1`E_1-x9 z{sk;QP50e-tjYD?Yfl)zeQ)8beaml`6#LeheSNen@y`_R>FWBE)9yWBS)ctW`tk1c z>RRc!i{+=KIYy}_Fg)XyVNR*8;ar-$H$waN>v`L=8AX?5SGG-k{>HlXkXPJZyUUZ; zU+r!DEy85`$acr;KQ^BqSAMCynLlqC+b@T**xGA#&Dk^OHKKN0d2s3Hubr9a-1b*?o%#`Z$Ml}hp;s4XhH2$K$&D_!e*M?$ z+$V3%g||yypMJS2@`qhcX7lfJe>WcAJvIAJrSzlupNlr$zqs`4zdPzr+h^HT8tto@ z{WaxS<=US?uE)Rr_!Sj*-dDE0#eC|P>ZNuwAF7E}b}v?S=nB5@d0Kj=b>Y|ZmHag; z8n121{+#JMr{hzQZ=rej>dutfZI(~|$XpNpw0YvQ_m6{43wXX}JH}%tzv*D~n|ngC6d`6k$3d~1!BBzar~+4OQey(A zwa(!N0X>7GwvTL*FK|ZW2|Si-FKATga?BGDP~^DLI^W@uyi(tPw%`hu6LMYG8(vOt z_{qo6`am$`p7Rm^jfWfV8YM}n@%%nMVfT4~!rrG*3qP`Pu-|F<&!8b9!>hoHkZ%>i0>}`k zK5wS{#~aG;D>Z6-?{0n*Sgn8Y$5*-btyf#b9L|3~ds=!$pIt-wDWflLhL5kW`})Il z-rnaaZ%;hES^8Mk;-1(mv-4lfm~XD$?*I7p;Xl!Gx&pWB>&ve?KYFi|{%xJm-rFxO ztX}BPeB$4pC;rv;-@kl^j^W&Tu``o-0c`oke*&mNn`@ZVObJsY7X>O~p!vbDs`i*E?7XLQn8`@NfklM1#^^@pUdb)8 z{GuAmqZ%6$&pg;$rnh!WKVuY^fytEx3`uPM(Q}Wpl<281UwpRNf7KL0iT4YdOh0{| z#hCJuEutv4{lY2N>AMUYVx`|~`KTjaAGLUE_MFe(ZC`1gEZe0pw{P_o*EZ|W|Bn{F zn!?!StLM!&-H`vQx`ESpc z<#*J5^mzrMp7mt@+t$FZqcHXMCBLk5zjSu~U)kqjT^xP;hSz+a6w|$ik<;uK?sJ_T z`-0~ML&w~fdC6)|Mcz98IIvSeUdL&fb#wx^qHKh{WsCvk!I!ZP)28I#uIy zK6AxWvxDdEge8Wjp5DFGcmiwWb1&H`x28I@sy$|UHjBY`l=NueBHR7%;IiWR_~q-hScpHpzxd7HV89tTr4waxOJo zsbjse|B0ba*w4>yrbpi=?0)pfm*-0MiFsQ;tv#!wVRzlgQZBW0%f3^yo zKXtB6yE47+(feaXOROw*niN*a+5d(>}J{TF98P`|9ad-)Cp@ z^i$ZBZf!j9F{Z{Z^RvdEnYl@KH*B2zXW6HHQdyxtV^^QJdF%8WrS&ft6z%;VX688I zRP|;@!55d;mA?6Yakt&+roSQ5-3^;gM&4v-{NwU?Ib)x-ZR$O#4?8}uUVC?s{qbL? zK4s6nddmBvCfoD!6SwCrHvD{o@lVQ%=;`}csf3pMshuvp_I%>Tmrpu>E&&&k``3N( zF<=blUFy*FW1gE`7Q6|H$ejbNPRNwSK+)e5z%6 zTt!s(au=Hu6JM{+SZ?y;=Ix4aRu{cr$KS2W%zItGFGhJazd!Fq?Tqg`Z&!Rv{q$Py zwEh~K&Bx5`oi8(~?tOp$=hZzYFUP&Ft^R5C+4$PNZ@ccUp0D5hdE*2j<{NAE7<+Q555G=)eYW)BALUg%nX`7R z)PDZ>xAAM^&zY$oLYBm)f7p4cIBZ(0Pwi}%Ej7h=E%cuq{jp)Gj87O_yJ3X7#+}M5 z=XBSsn|5{be%s5Nx#!hLotyo1o6*@TU-GwchQ-fMKOc9?H2?FW-RF1Rer^5FYWnTT zhiBDX`!o4=j_7HR7v=uTZRO{jTmG@^*S5klmvifmUQAo%V9bBYC}cs7U%g)<>kQf7 zHlOcoyij~L?eCnWOQ)XNJ^%ODjjsPt{}agUc&E^d0skP!A}(IY4Eo{k2WBZ^6a2bVOd z@?214aCVr({K&-dIqNPLnMDbb4Ta{)54Z%C8>}Us7#{i{A;{mD+Q4Id!oabNU*NfY z`;pg6st?as?z?}`z`dtCp&{W8YfpKa&u;b|la@!Q9kh#cVzVxN!pHJm@w2gxxOv5n z>Ylp~*)IqPIv+96TDBwMB5Rd#@=UD>l{Z*<7CUUZbU$XP-{v!2iRvrv$*@{;-&|qA zAobykV8IT?WwU4ah3nsbAW6R$JXEOyJ2HB`*>3Qvz2G3 zh*z8PY%-5?sJvDFxc|P*4!>JJKYx|GyV>FEgN87@JVED&{bH>$y7v-xR_tS4tA6~+ z)9ask_VCoCi|%^9ck;aB4^odW-n)MHcZ2Ialk$z?|3p6n^Gy>Ti9TB{$iIKC+M0QF*VS6qoawCl zu2%hy;fCY$_le)Xl^fbuO7Hq(C1mi|mf=5dgZV^1&HoGsl$RJh6BW8(&G19@#V2#c zhvf`=*si{JcwD=;Fq^TPEH9Vdv6kTxU+A>d=MQTZ{V1ATC%&L;-t4I}KAC(- zVl?pAP?yZ^JJK%LaV(oPCzPQx#bMK;c>>k3_0ijTtsQt6e9uSS{Kyrtj8Xg`rSi+n3fIFKZLfSuoPKGR&a|5Ro#%4(LXR0TSUEqMlWZE+FPXG_Ju~NlNQV+< zTUE1jmKKXcr~mj;z&v%vzv;n+!u*G%4GkKO&!3_hB1HZy9mahEH&2jS9MuVB} zqwOE;+Ht_RXv1|sna~hf&A(YIeq}Ixv3R;Ai23uiX*_XOlPW#l-f4KkAEJNd)2a*6 zyVrWlK2AANWM;4Ggr_=heao|>duRTN z-sqd}7$VDgdwh)^1s|LJQSZsRyt2E;&ThPQ?UMf1Q!9HcuUy|-H4tF(_LQFqBxV&j1-|M_-{~Jt>P32W6BgH(jN$GvOkPpL`mocsBhuGYyaYioMb{<7)0?%!S)&BI%6{@+yCaFc)a ztOfJjcuU0dKO9qAdVltwm3nE~QU=-gPH-Hv?|0oPKkX}Xh}e~@wM#>KUtPPw@o8?Qj6nGI;M!FT zbA0=mZq+{S`5y4|`j)a4JMZsFpLxE?On$Ox|J0?jJM1_9Py4#*eaQEOx9@A*>dt51 z>vYRt!R*NG_3iuHO`CgD4K-r*bGc=1^B(uU{`~lhl0%)+q>dt&BTQdpU;d-t*w*u*}3Dqod3J850{>@RJVWT z`SDTS$@8g%t6i}tLUdU!qe_NPy8Z@L~9bN^n*5#9C2(*ynMkN#b| zwOxO;v2M`1-`_r6_Oi8ln)dtkKDjSlRbka@PL}0zy{P=U?)dRr`S!d;>-gHw+2*s) zkUuZH_tZSq-KIBh{0*)>?(17V-%>UC^2V)Ja~8)>Yi|to-)g$|*!&#vZNWN=ZA4E8 z%v;Cf|1xU9^Xl(+uN)4X|M>p-WP8@PFHfqizOggy$mK&Z+Z=1&n0%1T++_%1ae`eR+^1d){XJ&x0y^{vxcy&tpL-7_(IW|<(kgxO4odu^syS(ga&*^T|G`OEGL8!`9xe+j;vdHrJ2 zyh#;2in5yuiv#`L&EsaK&t7e&u&d-%jY{|JcWalvjNPAmp_cE}#)9biuTn2;5r6%} z>+fveC)GuY$~V@$eZ0pywbVSq?J9fdl*?y%Tk;YZ386t;yc)FQ{ zH^{IkGFfZ9>+7;rGGXX;Ig{uZaL_ldVW~40&uJOK(t{@b9fikMnBO=p>@j1*3)>Yj zOdrJ!j_vQ4c(3rlFy+5Q;Sa?}KV(}@^Dk((KQ6M~;H}+(J-;~~n+N|Gct;ARn_|Gw%_i(5GtyZIq}W5Nvv6>Qfb;Y_7?Uif$hC7 zc>3N4p5O6FBmewmrk=KNwtLZXdmof7NY|Om{&sWup?l2wk6t`||M~UDhkGU7Csr%J zww*aI{ou>J?4>+&>b85nx7B$+G5p^>TdnZf=hrLGvp8!LYt4Jk&Q5WU?9=(zFI%ji z<3B%d`cde)!MR_8wlH3Rwo_g_ec>8^B=^&yZyxuUZ=Bx$FaGYqcfGdD+Lig_pL9a8469gIzNV+x&tbFFg1C6KlACc8|;iKimIy4fd=B ztsCmOchzw2s!@IZKhoh|)0=zjkN7&iFE}lC;JyRb|Gks{|Fh$oAuGlwmCjk;crwk+k!c0D)+C=`TUX=t$$p1j5;a6$+?i>j`Pu8zyMNxo|E`79 zNF{nEueq>wvFmHLBac?hDEYK{jS5%p&(o8b6|AeyFiASFo_wmnI)72rf%SQIm;F@J z4DJ-DGag&ayr4ToAfJ)>$>g5LqFNRT%q}TDdv1MyXvElA>U8V!fgfQa2O>E)JmH$Q zX<5{Lre&g9>I)by^A?B{&22l)(h*m*-LRnjoW=n~>$h_lZxs4HcyQ?{56g}#MZNo( zq|O~EXTD@q;5wbI^H znSEGIQu@ZyHzIqTt$yBQ*l?oC`GIANiam4Zu|3l38y`rDq%3!Cuidrpg6G!@x7v9A zoz7J>EYHl)O0JvrDn}vOI?*O(k*(m}XA5{`Hv4}~NzmJ}ZQ@tMt)Wse?Tk?e)-8Ly zV$Y|O+fVI^uu8nDd%?7u`v~V(m9G*1Pj#N%`F{q_+SnEHBHf5w|q?X7n8n{@xvSzCAJZg8x+^P=J7p|?)I7$+~jX@BnzLnzyutQ%}n zid+7=DYYiWSZ8m0ykVnuSgqE#X^%XT*72|E)vS41clfL393>u`#Q)aRTp;8@;S&Eu5r3iPYWPZ+iP^-R9o6 zEOT_Xo%my#T`g3quXlILY}GS=rfds!V4rf-#Z}@-wdtPHS3#Gg{LSjBrfKNc8*SdS z=jFpR<+i?DJ%zlZA0rfxmuCGE*z5meM#00ozgC{!wP*fI{zRkH0&os}r$>#MuE?jW)2=7#PRr{qIPS(!& zw6VAU%4vbnYs=c}7-deMkAMFCy=iUEwJwj@ZNGCr+r9tIbyweP`d``k?_6J=@F;tC zJL2P}%Kv*NY+GcnwC((P$5iHt;uU3(<$v?-cjb1(R6k>FpZHv<%=FriA4^WXJo(V9 zE^e8P@^drO>(@V7E-=2QAbM5k1&+kV6tC{z0 zdw5m+v)tVC-!r*VzE;-x-7!`B|7TX;`n#WV%l)K(Yx4chyWZ@5`}F0w{ck>-%|1}M z=IZg!6|?uPfBAZ4-OKfJcfCLTvF7`w-{IHg3>|JiIbQiaW$UrSxkt`_6uBNHyTjI2 zexKi+Z^ki>PbDX--|MZ?;D{X(D-DUrDzwBSb3G*t`Bsbo>Q5x-+xRAT8 zSF$oX>+SXndk@~-9%|!oTYisR$&UioTA?z^<}eCm(i_u3+6d3=9!`B%@> z$Nh(2eC5CYf5!B!9~WG&|Fe0UR93FkDs}nlGTr<4Dz17Lult{2Q{to;d;7)||4zT3 z0&&+EUM;&gw@6W=(01ZJog<$d&K|#{*HtoW$K&(O^;c6*6wiEm^WK7k{h3wEj^uc9 zsB*7NUAaikC+VZaqyHXdH$5~@EbQwDYJN>&saz2{#;%rC%sy z@3CIRtl7LaldJKRGF$l9HRcnf=Dx1j!!x&NgUr{GZ!h*Onz_Hvgkk0G>o(qV+a4F` zSS+k|Ki~A}`s4T07@sE^Zeg-GKmYU;$LCx8PG0MqdgGU)qOpL>>$HzEkH<2+YiZca z#LZ&P?Z|niPs|Gc zBu)NFD9UV*7XAD|ApD`N%~kfyJ6xPUYgZK8#dw&@ju)FL% z=6LUTaAni-4grp7hdVTc4P4%Y7~JPLq|@=aMfFa?fgV7yJ6kGeYC=(l)s;8#iV;%&Xll$XtxT_(MNRmokZ+N12O8;`Qw+c)1? zU!6$n7TZ()%H2~=GxxOQwhvpH&34E+&EIB_(W|2$Kaam_wt3P^%O58*tMBcuGzlwT zxBUG5dDf;txv z|H0?W_iT84(R%9kXIB~b@oCn|f4TR(wUlLN-aYNe&&TX4tKug7sC*ebYrd^O-D2>d zX79hn$V*$?ZRY;JqrdLg*8HxT*U|^xeYI^nUCq$&^J0rdZI9K#$LTJ)n@+27GYJV; zE6feBQ*J!1{EG9nIKw-}3fTktOcl}xm>J}sSMO(fu$}SG@}K`i8|s-Ka5j7w)cfYJ zr$H~C^~3xWyGt97ef*%<@SSll`-AI@HL9PB#Sctp{9`2a;IG#6a>f_Z4ttm%u&wH6 z*vlv&)DS!2vK?~?OM(0ZTNjp9Vt$)`r7~1)e*CC`?c>{i@y(Bqv+xEe-MuWsFmbWk z*8}QoQa6*nK6AO+kyco>xnPd^nw6EaYm5>WFm^n9&?Z$Owqp4$!}TotSTC%*@-XYk zbEZa-)DycuNZn9qURLV0+)VmK$-_$fE$6vU9(Z-~CDVmDF5NO`3_q-OQxHm+;~$~( z_3WodKSL$83&a(ln=8#-w#R*@w(fEV@47a>so_ix#xE}UUFX~V#e8v7SG%?3pR%c` zlO2EZ{AyV==hF=a&qgk<^9v-I51exS9mDwKX>geIhja#m*V;hcnXBFXnV# zWw|i@v{~)L^}>Ji4}?s*HP3NhuTGFbpyZOg2jOh*RxvphzxwCm*Q@IhwuV>dM9P9w zHC8nej61J?(vRHFb$~b2%(X0Xy_e}3zSgL4553EN%crmEPdwAOe$V3~MvE-HODQv- z|DL|*(J?<~v)Llbr`lMr@hRrp1peBWQmazg-W~S6d(B&yFKg^&rlfsX`BF>dsY>a_ zediYxy}ti*^+yp?|BccbS4s}N3CLT0X!_g>bANZY#2ml#ubIJc0h5KU|K^{|Rx94r zKDl=W*`JUx9voYO}*`UEUoL^fdlQQRVa!o^_`yU6^)?|J~#pvgB3K ziMKHor>(Z%SyEECCiz%VFO%JNU+YuPI3L|=yLIJ_?eQsX-kbW*Sf7y7o%-I$EUIu{n~R+CLdeF^g)l|ri%Ag--;mTEy+U6 ze5T8KADBMdG~sj4k^R?77^awC$T(Jc_I$PY4EyA#SATU(4P5uz@V|vvRH{erjW7A@ zjPHN?d-?YfJ2mN8*?{*`lm2o!sqOPC+caV8;Y-W5pY5~o{W=&QLdoW@?S8z%1eACFlXw&bT_e(^$pZITaN&B*=cY3nbZ?2omHQ!79 zjH`T~D&PDj%2;o~slAaQGbT@Wt?yS^i}ip=Iim&(Qe<8SdS@wr)$|N6s_l;a5JsPR%$P z_OmSi(yx85>(^i0`7-a}+t7f_`uuXM)YZRhC#~r{Azr=iIk;OEr}*{E?emk)n9SSN zAAM;~@UhcRKCU|R_4KpLh3s}$7cL3^_j$?w-s@X`ozVTBfBJXjPrIY%b8U($_h#3` zhFzL>`1q~tjpd%_r;6{NRXs0mS^d6_x^Hod&#gUutN7Kr&fjl7J~(abF8A+doZP;; z?026}Y5x=CxcNDCy>Fe@kq6v)yNag%pQkhPxarNG;Y&Z|-SB)p|MkglA^X37{qT0% zr>$%PQr`yB!eavtO$8voJ!5}ukw}hLl{1ZPlm9l)|GuZfgU9OnpOF2r z%U7;p%73J3_Di@^#kj>wVcBQw{uM z+Sc#)KmOIkRxXh7McB5+^Oe8mly)%w;IVsNQ~pI~yR`k`ug~m`8Ev)Nk@-R?`1I}D zQWxIe`&wM1v^#xIP{oQTj+gs-??qM3+x4k-*Y)c=bNEj@-?brcPICD5KU24Us_c2w zYrEI**7Mum`I+Z^>u2j%oZ@eO^1EtLujb=4*_NjZbtgjJarqRL7 zRbk9QJ&l(n&o|bw3oV*kb@r20%+g;ij7D!3>^{9GO_S*(Q>xrmh8I>#HdXpcZm-{7 zKj-n4KXWc<-e0J)VcQvV359d}Pj9|>@^p!NRISFw{|%dbCUEP2wEJDWQS`E@fc(X4 zYjrZu&iUWHg>U%>NmE$^p+*fRNzub{H*~uUmYb?Gvm{DfQe$IyW|7dOl+_|5=E9-I zD!{skvDxOJz`l0D`bGiPF8#yK64ubC!^x` zz6~xq-AQ&DDV-KR+y#s=_X1z!9sKu*tx!;>o$>UZ!w;hhcXW0bM?VZPk36#Py8hrmL}#Ov)Wz%`QgP~=950z%B}rr*PpSCm#^CP*zWHv?n}0=duA%Z@q5bj zH+!YNEvq=Pwd76ghxqf04J_{oDC~O9Th%}7bW&xs<+H$)$G3WZbf2F6dUrtFyzs~3 zXa7FFe6aFB;`_;al}bAjpc@8zAvw}SWB=c1r{4FyZOT zZ^zkHPFlR=>iXJX1{UxprNjRPE&hmf1UK+>{XEGcsc!RUn{UdMz02Sp+@`w|EJ>h%s*@{c|M6hF~7a$y(z=~E*72tXXl)s zVL#vDkgCcb*Lin-yQ&2IWO<;>;LrG1fHUG>nBHUEE1gU97tPyN$Na!B=abK4#>}9% z#+}b=maI7uydqAS@yYuGY64dSe3f?EadBo&3pc#%Q{dqE%W###c|${wCV#0u;|1Qc zA|AN@@!`Fo`#ki3=SMN$7cSFPQVMd}a^1R(v{g^PI;`-_;`z#zf~*Tz7c?a*X+1D; zcTaX;K9l7U;BS3C;X=@MMbYXcFPzdl#TGHm>ZRN>t{==s_CK$rTNmE(yDImd z@o_c-lfe2*nzwA+Gha%7m~+;XkMql&ITo{?ihbi$*%za_U_s;UpDu;W8{B4RvvEn3 zN;DMAELA;!nYTPhwvFe_=ABN=fwTKW3hbHfj1n#$=u(RO|0d;mtggOXgW|KQ8`u7( z1sSb4a6psQ=5*Hk=Z7}m%eofL?BBZZm6+10lW!7T7+a2O+GlTyZ`jbxS8m*q-zHK} z@T_u&1FMSCQ`yXSF%y6JF~0JewmeK$`@juJA!ZYgsmrr2xj*@Le75G3%Gj;JH~+fv z$ju0sNRqsrYHWDzefui=ZxIs34w|p8|6!RR?d4qjl^ER6q)N$^($;QTG zq4vnel)0njmlxylr~4xPLf@a6{CjfUY14&O3#PWSzl*TF8OK*{)NnONcI#Ay=Ah(j zrrn+q)~+D|vl|;9{1VTKJ6e`CEz-rd_g0%w)ta292~U-pxcJPz;Ue=iGX?q!tA5LtaTWclZ#-kmDh-A8Be zeb!nq@18_J-yONoC1(v~PRubc(Wsm)Yw)`zOPaK z*PZsJ$FJY8Se84Jb%q4P#^m-dF$RMg>~FFCe=o^rd3{@e4%&8y(QA8{+_AWXr<9LcSGG` z#;;3~&&@8K{3-Xz?DaPf&1CDzIWN?oI>+|hs*SpP9DOckpT7V5-JU?^ua4`y8SgTw zep?%&#@u;TOn9oRa->*T{bxsRX1}rn7k}_(MX&Dv?%p@Aar4QH`QbtHp6yk;lz-)$ z{ioUPxqTwDi9~Q4)U)TF$ zs%J0{Z~Ygqg0M^$_^!@c_o69{AnB01?YSWWHGvw>;O@E!5^fb!j_oPqByAv)S?>>Ef`rH2% zUCqDEKPP_uRBG_*X7IGVYb#_o-1DpBy80=BVb}ED#+yHP$;+>`liQb;d%)IZJri?yS2@xo?Cd0ylp~dv5HqDSNvf~^37aD#@4K%w&X!Q-w9&enni}x2R9E`#vznuvUo(=UPri0g;>wWm zcqz7hqBes}-lbWh-IDM1FaJ$tS|*)PuYTI-d1%9np!L&l9Lw!`%HCmGIzr2W>!8Yx}PnI)3 zS-w0~o8Mx0x$}i!fUo-G+s6(Vaee!}%S>BqLx)mJMzS z(Qa@1c{#Py+%KwSZ23D+zyA32e$Sh#Q?Fwm{eSH%{bf&=>8r}LnCtguxA50ofBn2+ zWBW-qcY`1ae!FQ2@8*PqYR@13j$W#Wv*z5k*vusOhP z*4*Zs6MpCPwH{nh=S>x1;n z?Rh`F@W0RYwJHwZkI$UWdB9lZz>jc-pHu(* z6}n(6G~>_dfWO>FW^Z3$D9_q0|15p|=lt1sHq~xlUo=zr(#z-hi{9PKNS(z~wqp5q z?L!r;oW>?@8F!q;onKsF>18l#;bHO8Zsgsn>{uM&aHr{`N#udXb|#U{mnXhWIq&f@ zr|4#bW}e}G#(OTsLFWFUY6o6cG4gYsdU^Zsz9w6dpOP!jO9=!|=ZOem5YH6c&r|uR zit&-D){WWChKv$S0?u=fuzid^;8FH!HLKsJJBt2aq&ZF>5M8zNYsI_s9>VrMWkNd{ zzo#&??LJV!F7bZ(<@kjTdsvR~9N21;lm1{+guKV{R(FvDTQ*c{iwYP&IZ-*We}U!7 zu<0TSMg=*HlF!S8wv?tlXxw_TXzr8j+-QdOCB;SzRn2MzqHDM#3UcH9L(>lg-bmf) zx$bp9D#yt^@rz|n3VhRGh+{02Y zUau1hC9@C91o)SpetT4*gXzb~Phrf7ZvuSe=en)oEl~fc^-;}#tF}o@$W2zeUhD1h zFSg{Z&R(L-+{d7Dg}<`7;aSMp39HQ+Cfz>F?jxCzQoE}`;Ov%aWv zDaFJqZYdbC%JT0O)+Wmf(YFr0GGTE1+$0or^x$ExX5F*reuT!cF33}ee0=g~8Q1Kc zZ%-eSO-c9lGn{X*e)p;MJSXF#Z%Rd5YfZY9yCdh9BkRXaHUU33e_Yy7yffEBji-%I zwpM%Bv7*i|F`gY4Oi86O2NTb!tE zcl;8IF5~ zu3EEW%_aWLyaD$loCA*iReSfQ)KxJ^$NAId>k_oL**g&AcYkZkflngU9wA zTc-WeJZsjY??!#mKex2`dm!so#-!lG?xJ~=kW4pJmdW0=%Qa8kAg)EO3p>E_}fz(_cs1k{lSUy0e_^b_ix@a zA$8hYzsLHU=U5$ioS0nvCj0n3xx3~&OXh8#-+SNpPf6pWvi<45cTH8eeOP*rL44%) zLl^F4&twT>y!7bS8<~AQ=BE$+x_^4jd5dthioTNb(fiKN{%zl{X?J#$(rvk!^=WpR zH}60?e|EB;4*%a-GJEB_r@PD6e&_mP^VB9^%KpsPHrw;Z)qQRLe7$3I{{Lsbsp~iO z-TGOVSN;9dhwJArPQLefuT|CduQEI5YEKrO{-ZUeW|iGPyZw6es@561UQ~T~C%k<9 z_qq1h=Y9XPZtB~gZ|}xG-W&c;b9Yg6^&K_!|5jfY<*oLO_VEyCXMVMM*IbjF3*2mN zMtePO+FIU8D}KArSN)dBrt61g9x)W~q@})k*$vUnHc*F9d^{q{R! zF30*E&ON{DP|@?3zUQ@1pLU8c4yxu5GPqNs^k@gqJ@*+4-Fd2mypI2rw&7Zld)}<) zcGGQ(OU814&X#WWXUp7uA-cTl`0aqpfxn;F9eCNJ-&W`OT#~Q%XVK4j*BNJ5nOe>~ z<8BhXiC6P(^3R*|uO9pnqcQhmLhAaL6PLdI`dv={4qwjuA2+vd+&X=EecSqh${k4oDWM_D_@I?df4rWzM}TwtGGZe>|eY0u7mM>d?T zjoPbwFU;jZO5m&Gr<`h{V`4hQSMO)i44d_{Ys&Jof<_VdPxu|3$Jb!Ps^V~n!N>f< zUDge^m;YA1H|goMHJnVZY<7i7Zark5*T1;h_VJ%hU*?>+gT@H4z9th?sYxqM`T0ZF;=xQvbTItZrRa(iixwnv+#R5$K&H2h76x?UwFEC!VlMuef%x<%#UJu zDtL|bXB_r7@bxcH7M!7WXYan|?jNTGL^;G(yfHkp{&CejLw{~Py>bbcg@sKmlF0#Q z{24C_e%|`1V5*pgUqnHzY4XlpZ81C-4mU9#xVz`=X;HP9L{I4tG7U=^BemID-aOZd znB^+B$9Yrlmpu%ps;_)|sau%OEwMQHec7G<9eczJzW?j^o&Vm@UwPept$DU#HorbJ zJQlp$FJt^_w%dy-iGMzdIb`3P_yy$d z_Eo<>MnwjozBk=83TpnZdceW{V=bvBRz5UAhiiaihRU-b*U;Rk_`J#UtPn0qJg08^1 z>xVd*#;!7G$%UV`OT<5BGhF|)Hs4|YpMH_}U$#f1_glYy{C|R)`o0hIr=Mi|d&^w$ z{x7z*H`qSxtrz@oET7fp*JkfC{reeu>!lCWx3PSQWB9|`@O|Qe`|J$&PhX$^Y`?b3 zgkL=+Mn7Hm{hLwI+hEgnBDm$Q@rri~+szqlm_Ep<*fbyWW|;5FRm;av$MWF*)0%ti z1@aSm%=A{Y_cS#vXgV)!6n2P-)A~dO;}OQH9cRAl)-$?rYpnC*U~ie5@}Ojv!o@wi zSGc`AcXf)e-sdMyFA=CAR*SaLOF zoh{y? z3}-wPyxDS(Th3>&V|aWwB<;k4#M$$=1P5?CC@*S=VV>Z}EUpmu{6N4xABLUh%+i;0 z3u&-vsNa)rsJgM(veWjS%08Yo;vTh%JOA(~#IM_&Q#8-;wM-IITifY7H6==wH}_h8 z&iuruvYLs>{>moZdh5=Zfm3o;IPg6?1M+PFdJOCrPHIKpw3*S zcRezWNm4w6G0R)i?5SnyzVe-Si(^$ob{08IJQ%qq{9@DEG;tY@d| z?-#kXELL$G9t&g(b86U^IQW-GljIJzh?GSzO$~^mloOaOI%6% zar4fnE(P0*oB}^TnB4C?Em9&o`oqf4iS3IgFY2~+y}FUf-)A4vy1umP;7;o;P1$b;({QbXlv<@)K-R)7SoG zdF#2|dukRj=z^=o`}WmnZc*w}Ww z%V^o=w;yXea_vsHr|z4yKYmTnr^2^Kze%4+zBK3etlrz}_Au!@D_d^(uS2(bzd_~E ztm&5glie*PPXXUi^_SnN6(+$#gu)1*Y%FgC$`^K zf4J<&byoAgTV_pre_!pl-1&b~uk1f%WPg70`|b<5Kkulq@4L2oa{bq@l|{GLoqXk5 z@yO(#=;hB3Q{Vkw{QvE;ygr9|+qi4DzJ}a?|M6har>`4VHqXnOcf0SM=%$$WPemtg z)2p9mFDYZK;M)B5%0urtY=QHfZSTGLp8I$DWvLBUPWuP?_lwD#zI|!V<@7Z&>y_j9 zKbiP32Y-BeQKX3Z#XjHnJ#S2}&i|M5{ms@n%jV58+o$_K`0x9W*htS2lO*; zC}OK}v%VgAz3TfPi!-?i*L}qZf4wlxrSf_D*T4Rl<-h!Z;Ep{y0jy=B|EqC zi{-woMBRwIKr7%!OX-3L{rDq}zDW526jkRD1R6N{qx}aA=f5GJr z$@PvK4=v;I6!9x2{BKy_#3YGl) zh7XyKeB^Z6(=Th+9NTkYx$?5~>ob%MUNbt@G4TEm*O>QEpuVH9l6igneb#SWJ1g3D zRCiSvJ3N*8e0ECh^oG|b#cUW4v`BJ)>)0W1(AcMfTlrm5zsR@#j*cA%ogOaAS}UF* zxBIUWvmEP>wTIlqzUet!uiD$?p7br}OvVzy`f|gB8@v^-KP%t+_ek~KJ^y=m&Ti)H zud_R5m7^Q~LUBg7zMQ8zoqUoPYJ)X(4ZExyg& zdpzpi?g*;~8TZ5PXGP38X-{X3=xEd28$zOUlLamLeMRi7;{zno(+PoeiUI|Kh`GE4f&Pi%Dj4i5-xwDT2PPu%l)a~Y6Gu?gXC$f6G7yG0Z z?qhTkQ!$v%UUb8l?MH0yw<|R~7fx`$`g`an6W58FBXi;z6C^(@Hf|T=&uIJ_X70$$ zrolM1p~NYF-s=iSdSG2W+3ZeBW*P z;iJgQBcC}r*X%pbP`d8{;On9u8(IGRzxjK5T=XOzTY=xxcD}DYS9_$lqb5ByETt@TqK@4a zAr(`FEe=~JT;RXpkkD^=Ax8Nx2czvp`4@()0s<@?RVE^f+1Q0VR=JAZbQRmJt$lyu z#~p?8&*$vjzFU{~jNRt*IlJE%zdPGe^NZ=5W%cgavvs4l<;>iv`#b0Ap6#g-}8$)%}m*=)+d&cv95|9)>Fmd^}O%qBR4`jKeT`SCDY11~D=-GWpXKm+q zyV*Ls9UAoCs{h=6P3ollO#6EtgsrKv24?Xdcl`eCq{)>1badFG^rq0uC z{0|qpTt1hayODoRb-|x+Ig69F2G5zSaJxMCz^Ze+7Tc3=vXrFV)pT*F-PE3X=Hyo+ zh7X$VQs>*97%Z%pEM^E>dVcmd_62S!(|#_oPSAAPC2s2^^*=)Y=8i|V!cYC3aoq0w z`BN2(pYXlT&C6WRcy`&eOWQ2_3qn_W->Y6wtSo+#SxIZ_?xlK3o4fY~h28zZyydYF ze`1D1UC{%c-`g19##k9&>F4HsP_pj(mk&Kf@lPU-Nv%(vQTp>~c6z&RhtJeg2Q_y2 zXn))IrM~3*#hbxrqmTK%oh}z_zq)mCpLu1EHoGy)&iT(1RE1cwkszai1cvGmF>^W zXSe%e^U2a_u|lcZ{9RAZ8_j6j^D?OaTI|6awZDVUO^N4U5?;<#zj@C-*)`R6I!i9| z&%e0QWBQU4;oIL_KjCvZOR{!;(7i3OzdlXfzHfbI)!OaTZtHHe4kY-|OF$+p7HHlHS&tr^++eyt({k z%N6yXsTc2AMg`;^kB{GOJg?^9I=3aZ41dm=a5IOO9I%;xcJAN1wRNwY4c$N1i`~5R ze)@Xrf^E|*C-Vy~h`bk^^w#zrbMr#RKK-jZ-yfbePod=WAA_?7OZ*E=9JwCMysr7Q z_)K-pGvy7t*`5jK%zIF5*7juX`H6yVP5SNczt8=!y>NR^aT^*lse>%E3DkS^6>aeiv zJ|v)IGq0dWou#M4F8PzT&qvJ%nTwkq8VWSr{dZhq{r~8eA50cC++y<&zL!%xmY;B} zT;T6+gF6S`KA&+&zi>|-r*%!+i}?x9{SE!%j|T5y-n{&S!NKqL$Io8fe`M}nhdr_z zXYXs=ThA<}cIKkMbKzr`m5?>O}PvT@DxSAsP~duGKy z70}JCCO3Ae(ttUW%R7X4;-rJ5}02VdUH9X?X~!Q&wHO~ z?b3Z`U*$Yu51P;KearOU@0*)H9olwr=KM+LtY(&%_G~-w%j-GAuX6^vmu~qinpVyE zpsw@W&k)&PpBx^2Z+=%_p4q)=ALJCm_l$^U+pk40Kkw)0XlML9SFc1S(8-$VXLXds z&c8b!e|sMD!Gk;1++Huk_y4_mxi`!IZam7_p!PR~{3&ZTy*B3E9kBGB-)jvz`lFM#KSw+RGfT#Iww^YYBTLn9 zEwzun7PxKtdCj%f0_z?ovUjr|c+T@?_JoEXyMOWYZK&|6>$6yH$E*^!qI>E7%-yMV z9CArVes$=q=4)9j82z2L955Bw`Rmp6`qtS4H$!X5!8O9uY7!EuQ z=yQ`_xqA1iYPFw^U-mFGe2%KJQHc)vb@#$2N&dNfo2?{8j(y_tu}smrdJuz${_^!-rg9uf?7+uxtyycrZp^&Szmezr`fKDcb~Q$MH3vSg=B_fbGhj z8SBsA4D)^dsaJ=6>z+yJU$<^yKcJC$yXefhzsnnDrtdu))OYc_R7SAi$$+J&B zRCJrY`~0_GEkzy&>=8ilIfjqVtH}?C^6AO$%enr6)2x z6S(=(W~$Xg1ExOF6)S%QUi!YR>DQcJiy~Xt-%SYl>Al8_CTCHK~zFL_*knLYK-m9uVoWsZ%PT<7oIyX@hDSsIs?pp&9;s zncZ^3#e3pA-uBHab^PUJsiD~K`E-H6+{GHD$&P}uZ|9x4_={P7i|^^({8_(U_O2^y zH1j!q@>_4R_VIt8Cfc$-4UoL*+BY|6anQs+g0?C*=6{|acaQh{r1o>Cx6IjOssI1_ zzjf@UI!*6xrcK&5#dBKn)78(_dqUsIEdNqFx9pLR+NAQ8&EGyxV(4CCHa}9#&ZX?> zgGB+i-GA#mb*pAPxmbo}^6@oM7mWOuR;^)QHK)q@@)_YLJBthiDxX#8C%YP_pZYny zcNzB|(?8#rSh4-A^OqI>{3F!k=MSY%)su^S|E*tQS$+Ox<)6~edqJh+7j}=kuaB;8 z)#K&2mH%t7!DQ~ncmFRHd%vu|TykHaeEytiFYI>i>wF`B>hMw%@1I|<`@Z}7a(bP< zulT#iPlN7#x7}Dp z{_#`ve{F;EmA%(XHtMH8{JP)s{QbW>v;Uk^Wp|2f;1XIE^HS{9&$mzKP45)@DHpJK zP5h(sm42tnU8Jwp_^SQgS{IqPGIyrmv`DGQuRmW2&EBCX703Ce{ABpFl-X4q&M5qh zef7U)+4JbnNp&m>Ci8zf@I3uW*>hXp#i!-Cb}g6rF*kQjYUbXV{_EZUyb$W}wi6Vs zQ(gCZSu~~}e`L4y4#_`*9 z>%Z?>nEG0>@4%*>--YpvpR|f6<;}fVo&9*rx3x>lE~HoP-~N8D?(@%A8h@YKXRABF27p+{p`V#y<1PX zRh~5B`k9=xXKH%fXGx1nra=GYEDrPh57-<`YH6R~@aFG6IpYK0R{UFd=b%*FyOpP> zJ866UQ()M2FWvfBm|6SnFPaBF-C(-lJ>^SqtzYd#!$Z%4`xfviuvjp@`2AXj_pg?` zj6p~we{x^Xx_!(YdENZ2>>H2I_@VIrvY>@r!{b<{`SbY>d|bwKpyylMfBBPViQH|Y>4A0aVmfP&2u@^pz2)OEuk)OD zi*?r9=XDt0cM0#Gtar5X*t;wTiAy?#63jX-Z`S+EJ->O(@LAp2vn^JeFMYCnd@*vG zTh)ave_pJKO_yDhKcR#r=X2bY-&WceZZ^x+o1ETk)%4}lWwT2&CkNSUUw=O*Hgnbu zSG(mkUtTOLTXu2T^Z(x0Hpxf+od0{~O}$%ce|6pj-8+4SX|?X>xb^=Rto)ri;X8lJ z|KbHdEaf%x&mCDcXG_ge{_Z!gk9EsG`R~o}t6e~O_5XcLXTTdf%x=BlZ!lwk%>&kM z+_Jg;bA1KNeD{{SoG*30YslLkmtCQ^;rP#goCi|Y*PHx4{y*oyS9A9__wPSE`F-8T zKk=?hM0Y*0n!~@I@edDYPT!p4GfvAe{Ly8&e=611JxX8)+XoS|8sWtMxh)@y75<1m zdMM2BpXWe*y9n!F)&%{AAG$v4?;oxC&SW>YNUomghI!&Q?;ZaoKK{tP^Y_vDhnHmq zzI!ly*RJ^U`pkQ6hW!j5^nyyhDmS=ih%edEHCt@joyw%djCbY_WIlH6I{rq0qhPz# zL!AYz)uoHVKP+DV=9r!XgO!@mgF{!Xw|&UqPtZAfS}I|3xCi&$&oQS14>12!`B1cD zl|rW57ac$8ra7M~FD2n+uSJTI*OnydVypE}D_wdQ z?K$oDO2$^oUBtoewd>9P{>G1))1((idG9tpWHe#^&S@(iI_FJi_HsFP>DuBeu8gn3 zmE0G+nCtd>UcT`C!^sH>JK`C1dva#ozP0T7S4oxwemiqr`~n>e6Q|!k7I@(Hl=W|K zZ9C<+m}!IZ|26x2Icx5HasK#9>qPrs%Qu_Wxd>c&qUbKa&Cu3Te$&5?9~vCz#Cf*o z&YRFM!?~(1Wv-;|96$Y+-3(kEn;C+CZ{s*r9k>2zqF~^cwI>o*)GlFM-kv4h)suR6 zH$(fLX}nfx%U6}R+Mm8VcYU2++1hQQ221yy-}bgKch%!Fv(H^++j1sx-ECXP=P@Vt zRQowUnD$)b1#5=#w|NRR*Sg;pi2c3uYIACf;C{xZ&c6d1PBZQ4Sza~2YI&+?!uEGQ z0Xtbl3MPDeoyN1!cv|fw-^sTf4^HBm681nOw^GvG;w;D2ZAIVv1No0-8GA|Ylw&<` z{#)S{P3}&cLK`XVdR7zv^!3;72Kvu(&s|*MRd%jY!R4!c*zzC%!~WCX6t`!dNM82+(;Sy;IqwzAX9wTj<{J{dtuU|t>(-w-v0lFoJby74 z#TQMR`}M;cff?tvrz+-iJp3DYEZUv%oOM>5>-k^2e3jJ8%a54`UEGUI7 zEPb}OIalfP{A2&R=3e=>Me()Y`s+VsSG}CgT^n=odEnCp#SXVZ&YgBqQ+;LgT*2s> z#(&lQap?`aBJ(DcC{5q@_w=2Xvgl9w&zSeleevlUZ{pvBhBE4pRJKj3(*EVUpvH2K z*K5sRJ1b5&toVFc<9AF+-~F5xlPzXy9Xb{J-#_Or)?S)qymbGxq9uA~A4>oE@_29Q ze(TvsHd)NSeAx8Hx^#96oexo;(qwMT^{+yu@_%H6gvO?>Pz2Se}e2UskV8)Esu|0z2@4oebY}xX+8J- z^88ZC55>26cmMych?sTi+h3RZ|Esn&8@-KPkX@y){%v}V)>G9BLT4jC*K+Ltz9(z$ z$DP;gxYq}-P7Pq=I`sDR^|HO^{fao37w=#9$|Zi@C$Wo76FDy`<{S>QJGJ}S*-tmk zYFTpJqto@)7VK;_;B#-?@MZnEy?=h2DV4PU{OU4~Q;_r1#i}n=o4)Nj^WHK-v*McN z)8&;K2^G`V7fY_s_pe>||J;|oI==6oE`6cqw)B~x%KD9`CmZM}d^LTx`gB+y7t{0i z3YEMbyM3?yn!WfHyXW-CE2SQ?hL!8ey&2c`v25A&QICIHGt;`pRn~tuJ81v6>pj)_ zCp#*(>g`*l^_lYnq)&aRinVV`m0h+s#eT*vn_tXIB5tCp>;Ek-z5Z!N`SzHwSLc3x z`8#uo)rw6QerManEV@^h86SA*myYe_(+!oc|Hrw1`F{Ic^Sjx>b9*KAo_0^LQ7@{! zu!Jwx&Aaw`!{@^Xci&HaTfVgL*K^(FTVp0Lr`p;@+|n0Nzo^XIw7h1~!gu_IA`kL! zZdR*XZd^T&f$gC={MvInZ!2RrY_0;rNW#e@!;@` zdAyapduo>7H~g*t%W>EHbnnvtPAA3do^4|c;1ju!-F>s;z1}gF2X?YSOMdK@e(yH82_j_b@AxudHov4TCAMzi!exkmu#qGy>BS=YsP^WEDQOaf8{3Se4TLT zk#yk{j@PU<^**ID{11F&u)a6-{mWt&Kg(UeOA_p+Rm_o5Jhnu=fTv?d?EytT19KK0 z1C}>}hUeRB?iXx2ZZJRbb5DZ%n>TEWm-6cM3C?Kz`Gv*oZ|srehTq`^k7pOy9DXC8 z@U8qo!H!;u_VgWc^ApAIGrnm!xL)8xx#7+K9D>Gazn{-I*d4OymH5kb{H3Xk;5PY0=T|byZZU@ojtCxKvo*7)>%#{r2^lk{$6F4!NPa$8 zSiIVpu}|S;#LPnR2OKl}9b_v@+HUrD{F$33Q#@1g-IL056`$Hz8J@fUSn}u8yr5#4 zJaw5k=H=zge(fEJJsgKGF1yV6+2--Pt=#$E%GnNc4PWwXzVC7<`&7SBdT^kfoUD&-wjq6BNJ25Mi>#;L3}qR);TtdviKsmgv$y_A#}qGgJ4= zMedfDJ^6iB@}BvYUydAR_+_Leue-me=3djO-$rs`l7II7zB2LmD~2tfa&CVNXPj{V z`~wSv^rtuZQ8@(J!xFGt5icx7W4HZQjH+ zsUKVPCznj^W0?1BPaMOJqsRZ}Y?&=@dGGIU#>=bIKm3&X{oU^P$DNPw?w9|&w_f1w z&;5Nn{@(1VxRY3Q^yrr34Br^+7(SRTIXZK?M|WztN4K4N%U#_=|D@8adBWc-^q4o; z9{=)+^^((J?H?ir_j?;;AAIDCN#uPjXLgU_qu`zW-1Fxj^6wYyXFsB;#CVpMljFb8 z0qdFidY5d^UEjoWCqeN*+m;>E&Hfj+mOD5df9g7y!)3koGuvfHBdw42#F{g@-7tEw zbTQMus3`N3*^w-p#2I|<9k|!PGRr4?-{c*7Gq10H#Q9qKBrmJQfsXTc9OS=oUXhWU z7;D4J%Cq#3vC*m}FB!iTI(4Q+I>_I(iao*JC8kgiH@_(M@|3NfO)_^bHcaSVtUcdF z+Nj=oV(!ffd0`7%Iqd?*Hm-HIuYQ{oc$@RY*S-T+Cr_!fThPGDk)zF^?_DG-|1{lL z;>zb)o0&iG1byOJQk+@eH2F3;w?WXtRnG(RoE zX4y7g=7eenMfc35d7XD&SSY_R?D?=D`^}0z+0s8Nn{_!XCZAJf<}zq|y`1aQ(wIYb zC-2|5#%0%;krMgKKkj$gt>(yIQ#@;r7)Cf)Olfvmm*4VGLm`}1T}Wg8>Z>(|3tUd* z@g+RH-f-;Wbqj6d{XIfwOaC&>`?T%std3WVrb0Vi>dY>#4k~9{V0ux-IKJo8S&dn| zFD_))hqEWx`6x6_3(RGAiZfgOH&|e8!%6R0wvGCcY%HhPmNoW>uXrkvC3loxQDNbR z)ip;ZzgWDjam{=4zs|=N2HBUEb?wy^wE4UvFeUHM;?iGgwWq$!`mjvU%JfrBCi_Rl zmyQgtj5(7Zt^P3K_7XbEA&V_8#`%Df*>z*cuw^M8Ynw<}+cx zvtX@hKYxAkEvbczvX%Om z8ZLjKk$Lj`jQNTY0uIFn9%pKT!j`_Pu=g6X_pJ{Kd!gYUI@{UmQhss!?1No(RkFLg z^3A?KW;=7DCbRt6o%JPig!XE_4CU*4Ccw_nHsj!HrNu^Z9{U6KuVXTiX81bE?q&Wb zjju)1PXBYVUOwCPhFO&Sm69xRo%|9@W}oQ2%O1QwWNvl)*vCuRv8Qdq=a-w5Y8hqf zUzIn^_nNfj%5$Unlbln|m3=EM()ea_d-8^*H&()Xq zUH#r4r)IRwAolXJOX4Cs_(~p!3w*QWd-ccn)iQ@~n+**XSzcK1M7=ck8^?xqe;MWG zyw8Y#Aamuyn|W7%O|zSwyYiLVZ^hHO&m!j3KeH-$d@oXV&8p1F(-%HmIOTQ5@ua)O zPLjobQ!9Id^`h^;|MhRe*Ha=jU(yr=RSaaXRFlWgp`tzR>mFbM*s_6|Mir{o1-s^*QH8$^3Kk#dlYg2^_zv zpmzTI-^7={Z+*^pj!%h$6@G17OhV$N)UL04Y3zOYU2SmF)<5^3{M4T`ZJF5qKBMcW zsx{>AZh6@|Z|{}1T08!^UTd#L z{S`R>-9n?-OH;isKWv}$>6h!x8C#!Euc*EKZ}*q1MMkgU?w^|%nN{6dxI+5kle!{h z+n)XV<}5Yay<~az-wMy`*WUHt-8waVBl~1McH5R|zcL)SZ=ZPQa%RN^vB-US4>Z5u zH^FX4O7#w#gI~PgYM#y)Pu;&n`tGL-kyWo&I@O;LF0aXm z4Vhj&FLe90H*Ml}5xB79j+fQnyY}aorn_HaojU#0ns~A2wbyJt>iz~vrwU$l z>x`eIUti45TX{M4`o6g^2_z>#~#)F37)6d%gisSKYd>8mbrJE*TskRtg*gu{ISNSC%<++ z)Olsu@Ti>Sl2t*>&hT$+9?DbK$aDnOe0K`n>~4C$o~0qr^V;L7FV-%%6Wn#s@${D&x9a^K z6e+*>Q?lZvMDN}c>ZiNDem^Oo)_hQ~DValPKq_+?J^Ge0EG8$RGW-?scf9lv}!OV5Yod{tg%HkFJzDZ%BF zvy}SRUc9NF&i;4BDrNB}yZhET$d+0je)N9Ivx;nsd&{1ehYQZXA^6)pPtN_#H{)Y} z1uuVWc{#;x$Lr<7Jbc^-&T_vExYhW3;@q~jJ(gMrqRj;-UP~*ksXKV^=84Lap3D6T zr}m%gDG57fZu@lS{D_|G!>MrQl~cgN^fz{Y~eMYwG5HuIgne@bAt${5AW{{c6td&p-U&c=ldl-aO`n zklcB-wd@a+k35$9@Sd^Y#s^`Z>;Jjz_PZRp&R8RVAi1K3y^ybgpWz;J!HGWxyMD_v z|1f5_?-1MK^z5yujnp0a!*96WS;|W%R*LUEzU9EPi?6+^zfJg&)3JQQ9FAlsfh8I_ z3)eO4u03F_wW6(ou`_AaIU$Q#Ck`!G%$&h6ZP$f$(pSIQ%UT##2bLyR3%?AtX+5)= zp&EL=vXwl>A?oLPV3!EK?^se4{;{M*O2<&ei3K@EodXPi%3 zYisv>Hz-PsJ-~CZvA~Hj;xiAE@si8E$xjy-Zi}26f9Cvg&C{*9hRn;SYo7N|u$%Np z#NePtZ{qywGoF{8Z{kdtpWpb=vnp?&tEI<*wj=rns}z|dR;t@E8_q8{z2ZBUhpNRg zhHCeO8Xoy|6P4yZJF&rz`Lp52Lo3cb4QNhYb^FJP%b5q-SF3ERIFsPYC}`y+D>LuX z$0{4I-<7MmeZ*g#6Xp-U^ik*YyhU8qjD4r1b|2-bE5Dd|rA~r><-Vs27&=|%HHOGt zsq|VN|8746*NHt_O!@U**uGp6@#NZ#9wr6(K!+O}cseXY0$$mK{}j3KN^uX6{Hb-9@)4FVp&qq6^^_1DZS>2a?ThPEyAZ%k~ zl|{>qBOFtNPfx6L&g&OSt#e{tv{|Nc-*^2Lf8UlaYmh4b&DzNjSJEDM)cD2e32h4+ zbC;S;u(`ZUI7a2u8++c0^~?qrukF63eENRbiiUrG)-ZkM(b%1Hj$x7I{|j3uUt9e1 ztexZB1-8?_=`6pL-cT;FNpgmkzpDI|GLwhP8RYgpOTW}VwMszghTlwgTbTwcHj{4) zz6GwXWb3v2yDjGJrgQ%{tu16ZnEgC^((>pPQcK^mcjUdWxt>+E^8@?NKfN@S zFR)q8*Cng<|0a9es_Ap$vv-ThO5EBs!+mCO`UtYQT-1gar74}?< z|GjA6@hN2&Duw2Y{?&aPW*%qx^n7K{Vi~Exy6(M??`&DgJ=^Kl<)uFTrSrmPc^^CM zW;aX!`IQ&*PJeyYXnJ&-m$j%gyJWtV)-$8+*8Hm$*-e=K$#2qeA>rL+W^M+_w<`5? zFQ|3w)h&8zQ{*!1J=4)Toxa~YW2K^(e0pM|^QcGtX>;ab>;3zWQwpU;c~RU1f9ryxwtY=iZ+7bzen(hkmhKzOqg9>bfj>A-grw zi?{yQzj@+W)Vcf0T^secr^aa2cIH}dpKX8s)A^U@_!3_{V@N+=TIP9QSG+R**T3C9 zx75wR2l4-EUb0=1>(|22<>}cf!7tc97s~s`UolWyzhrf4O<+mqbydr6FW*nTe`)LX zsr`QK*OmoOFIiY`d-ea{z2+;gtHuV!O{>`VzHYw$@`Hb~Pt?}voLstp-?7`ysT-GU zp1$nS-PLcjzV6wd8NGJu#|!E8p?hPquWvOnt*zUe&#-*kgs?c#*?-(r9vC(Da*1>N zymv`kE^J-wqq%Q?23YE!d^%~()_d8N>%UIjy6^Z>#l6=q&+>b{S~gZ=*0lYlKidmr zBctjAcGj%jKWWbvU(UW|`*gm}l#628@^;%5{~6n&t@1olYv$`z-;H}MK1DZ{@7MhA z%By%d4l42|D(=7c?#nl?X`1JL*CcqB_fLPOSG#Z1m-1ut?_D;0zVK;wW%lFM{mYUNq1i|5)J&H66;X9M#w*$und z%6@;DxjEjdBDej~_3Fu;7iV8+^*k`sZg0evlk}sOy*GBw~C`ssJNNPCWxB8-? z#DjMn?<@{JIJZ_oQ{wy^XQngJE*~VFXBZsgY@W~XMj*HUVtv<(@Q%%gYn(Pr-|)dQ zf%(}FIln@FNVAoOk(klQ%uY$A8|hiBn6Z zpWfT^sm5NrWXop06PtHQwp4yIc9)%7HB-;h%ye(xqP@vQnahrCsoKF%IcImeiTqsF zMUS`2AJq(5MY z!JG0-cJ;e6o_QM|?S+&Iw_aTLfN#OGSBZ-9sd!PmOSq}UEj zouQ8F!G6XM>ltm_qa-dCR`jzx`)Ae=%~0Q1@q^Q5U-!><)gA5bGxGC3KH9(c(95Y0 zU%hHsUT^jI`TuG?n-$!r1itA%ysZE5v-O7`azQ4at~2y)_{hhx-mpiXVR!3!<7d00 zeb&n{SG2K+{pV}wXZ-(MVx97{!*U(hKm25U^f6fB&v%DEA`UI*+2-3;a_983IMuhY zEURaEP|Hw1>vdV{E`={#2htmA`5s6eVEE4Xp>`#AWAew84>QV-R^M-%wz$k)VZI8d z{HJH{?k&9;#F%TrB@k-9w3=mt|6)~%5b-tA?apkv2CFhHUz+Dn(_dg=CG+V}RUwC9 zLIdk@$2Fmf6_wj~{HB#IpJD#kT=3x!d+X3S51L~95{^84Q~1sE$N7nloFX&wg@07- z@O$9%DM$Dg$3YeqVD>`W;oy1A*T1Pp*lTR)&pu-r+xbJBare1|FFZyI*GTjhDC`Jj5bxP#C4a#sT-`w1 z&q3e;Pw7&NcWpf@WwWAxYL?E9y~cmaOs-+Z;+@<-WFA_T&UvYN>X!c8V&^q`+O#cn z=IY4!hq7gP*(%A-kq$WUT=mq$38y~KaQNJFMXt;sf^FgZ)pgT29##I`!;rV;73*2{ z#=oxSZXydx7&jeQaQnAW~zH|vk7zuEXD6lR=gxW*qS#mu@vBp{ci)M>GWmO@YV zy`}P6@88IKlqP>k>h-(PeBOJB_sekJhBb?sRL=126LPI_VBBUh@y+Jg!j#!XtE{*> z)_#eS-#o|fO~2KwndP5rSGD*H)8d1-{>1)~c8l92<9*wsR_b}#^YsDj>Tg>%?tfmFkbHIa7XdAY>D$^b z^Q?@YSg+@OFe5#8`-9I5dY9;GtM?bT&wO5|%dR!WNbzTn!;DSEajz9~7e988)ZY8b z>jJZ&$K5=Y%RG%tNyW0=R+1*k8pk90e0Tl!c(eS|?VL|9YV9A{^X%r@kkhcK&t$Fg z2E#D9?!7O~Yd!WI+t+%kT)BSc{5iJ#n!%@Z*?XUu^-Wq|sr=|zdc+qGp&wJ82{W8K z(8DmRvi;P~6TW=54{a99_)YxX{=7y?V86>${cqYPn+l&CX5)IVmwGlye1-ib_Fa4S zUOc_@I=h>r`uZ)ObM9}IjbzZNywRInZCT=Yx=2$0m)VIwVjtG^Fji$WzRDHesPyE8 zK;>oEnYY*Z?`*A{QWtt)p%MQxMrpm=b?g?UMr*7N{p5Ttcd^Ga>vFe6MsVc)n#CLI z9cDhCYS=k{;kSo1VPQ|TKg*@WU0~=Ge{$%ohr!G6H@{OnpRjM`Uy;mb-ahqbmY=-D zwT{Qa_oGYBt$q6K>BLX3BRc;XEZ)bQv3ml)&h^`t&nNwhc((heJ%4h>Gs`EDw>+W-qQ^CT{f&e{%Ozct52rhc02IQ>i-qyPOs|c*-tk}ZxpT3*C`6G zp3LtVS+#z3&*H1~anqPNo8qRIM1`%)o?m-S_nh^tN|p;}l9RX3-fpSlaO~Q%0<%8R zh09)_)_)%`<>7=UGW;30E7sKRJK^=^56=aE$sJD?Z`-z6y|*Xh{f`}|0$yLa-u=1X zRC>XoP-{E=B`=?gB%MC@OL+2^vb`@^B4o1lrfr|%AK&l&y?*+O?+f`LqffODOI}`G zE^qZ~OZNGFp7ZjpZC;u@&s{lR>PyPq|K5A{`Pzyt%gUeoe3s3%TOTI<(YyOP?&N#j z{FgtyQzOgY@7uHI_u1z%{Ik`5dHq^ibuaw;yeC)p{E6H3eS(#~ZM7!v2EFU^?k$ne zo*ywIYW~%g(|^`h?OQfKd)xBqr)PiKedS&DmFu|o}Z3IZkt|U?^l=d+)o~iSXdq zO>aD>hxuI6?)R>>coY-oz3KVZtxpAG5520a@%X*wCP!`9^g}YDO0N5MTn|ar!s#u0w->&bu_GQ(2{@3R>ZSkp#m!5s?nZOh8&oz@(m#aqK zt2eoSuXkIDwp`Nd--eGD7B4jYxn^nZHQB~jlb=1!OS<|w`;*P}6Snt54pdzXUH?=> zZU*am)+>KGep)f!zhz(2JEe|o^O4{wUN5SamH#w-`}!*1oU^67p1=WYU2-S z=M(eqtV|Y}Y2CH|^pbxCS4!W-G@L&$<>1N6zqfS`l!qUU3yi<2|1ZP0(| zuHC?{R(GPMH9pqPuyGBiL%-FD%G~^ZA<3Fm4sT!1Xt;a)HVdEqQ;kQ{oh2@|F(4a*i1j&k4&59_l&B z+_r)JkL(Ux*DwAXrT=B$`SG92uAX(ncfmigGvb-Qu^dciu|LQxV5s~^^39j;57zH% z)!Z}NulvLK#ImOL`u>Nnj&JxVy6*iyv8KI8WbK@I^b51+KhFBcx9&r2!gtAKAG~EA zyLXfwdila)u9{69Q;aQd#jmT3?X!g+bt5GwF*8=BXUz}N`yehNwnn}s`kbB;nPc6L|dD(Tz%>Gl(=~c7#_Z`T7dgWj$@0S?I z7pFF#`xmfIpLy+X$GjI_flKaxZ#-kK^R-sE;d_-_)OG%)|7!1f8zt`g z%<*MUy?y`7pJ9B_Up_-yQopvs53_v1KlNV9%J@TP^mf^=W3*xXpzd+t^ZTd%We;z0 z{78Rky>5b1lfOr|H>2jI9}Exj8GrbH`u<)y=C6I?V?MK(q4p5L>V&ER00a@%U=Wj|PE%xC%$rT3WOf#$Ms<73C?KmN7*zrD};`44`aYeHJ;qINYN4U-6mt?+-3B9Ov-S7w})7;Ox@nSI7E5x?w-}1KA}S zFXG*qF59zy2vsq#x@-RG(5-`qL?1A|TWftrr&IrcKtJ=ImX_5W=cI04nQ*~+if7*Z zrKSc~vP&3#sBAAOwwNF6z_)A9jtluK668*EUzHRIVYnu%vFM}0HzkmJ_khS-4A9b=a2 zH}6pkOF|`2`jl!n{jX=z8UKF_c~FyL)p&t{%j1&mYZ=D#C6hL+d($21&z;bEK(|vP zro(9IW8Kr&Wj{Dy^R|lLv#n6zF2A)%z&V@4&z!S92?W)Dkz6-Xn0G7xjR~h8_%*C) zPUPq54`3*g+PTvr$@c2%FV^4K8Mm7};D5N#g0oWAQ@&=}J5`3?O4{##CFFe$N-KM^ za^5C>Q-?Eo;r()97aJxNNeep&_iJSTR(t!bO(=G1?Y-D(zpuu1@rfivY@5oZlX}~{ zVNXD%Zt2+?vy11BzN-$8dl>se>%lxl>s^_}OV&1qUGLp(yX3A;nVHug@$>`F7M|Vz zK_Ec(QQYtT(wA4;7eDyRbY;@Ek_D2|J|#01+?UHN{j0I4$fFl;3eu=={x38?< zUMlFzlJ|{!s%6pt%r`ODzHe}sU7XSrdc4-&-h%n=bE~2^sZy-R+&6wy{ba;1v?1ib zknGIQEbo7Dng^#yno7%liYP71X#U1L(e(`bodw_2x5sLiUu!OwxnF5)2k*wnjeGCiP&oIxXt(0`?xKhz4Qc1Xe_5Pf!n5?kzl4eRu1&3D zo>IAN;fpnj&mPa56thO=*<#-VW})|2zuGRRp!EIFjo9gBjtp-)tlA4UT3hu``!#)o z>4cK3)m!fevA2iGY1uPPJimyy{PX{`GmChqe$%YHEPifJ(&^c^V$Q8hsO(Z;*UC`g zY1*8dXYOy>uG{jiJp8F3$Cu zcXR&dMDM2ynuKS?E>U}%Fvy-n<82FEe`_57;~Kv| zbfTG{_lfo;x?ct6{o1Rwbp5G4{q1FpE7&bN*G<{E`%LzofM@)FZ(No?5%B6jVc4(q z`i4Np6WwPsG@f6Vky-w7$(m;yOiwL1@AoX@#pM?^$**#v^QHH!+I!CW*S-hYW{WpZ z<&E9sSam;a-~Vkv_s>Jd=6`JsGS96HxTU)5%b!ad%Hsd=d+wj|Zei-)Ov_ry{kmT+ zm{rcM+IMnu{1TsgChNUl>c2c(`!%Y{xAH{sEWgv&|4du9Ey9yq$A0^VtZiP|m(MQ! zWV(Or%Z&54ol9LV>)Bpj9{D)8_ujJi>$iTE`ubA;W9j|9zfbK{Y2T--ck-)Ut@4RE z{~OJcwmnSzqxW&~_v*+!Cx0xiT=VpD{N-Z(>Ib?{zR%uQ_Vw+rfW15(M$aaGi0RvL zN?wln{FZF*EZg-zr~cq!nHPWl{HqoFr|0xDE%?1uS~t9mb;^qSyG)Lh{C)j0>V9-~ z`_}N3$g+%*=F)5L|1Q^0Uil|(-XGh=wrd<2&%O!@{C;}Y-pfy`uDSB7MMxiiznXj3 zmXg^kW30mKgrg__|NV{i+|xrw5%cRLTjrm;yT3w!sb0IGW~GgtzvPReOP79}w9;RC z@wK=2F7KKn?|w~^xmwG+C3n@|Roh=~`*7!$%!2pndwsU9%hJ}nn?CDb-TLKE93M6o zPj7#?r_RfJ+e-a>&*RsRHN^Qv^|NmG3w|c0DPLBQe|34n_x##UT!s4#SN!usI#rJC&JU#59zck79Ju+;hu8z7##7$SFZX_) zS*Ngj%DaEwzOsxW0j7WV7J4nH`gC@0T20%7*Ou}=^2Q8*OMDbQUyfy4=*?2dbbIls zAX;~=CLowfx_vR7+3P1nzt#&+&JOR!DF%p&zL_hXD-;`dEn!O z+mk1rOI}m$6R};xj`P&26AHg2mdz;n_k{6sj)9i_caw;wl=lS(8lH35F@H0)_$I-e z@J}LG<{^i~UBjR3AAazqRomykspRB#zmd~W-=(;x`=(`dE!&Uzhy3Le4pldt<@h1; zVZK7k{)S%r7T&k5vz1r3cWy)PM=ejUF(tf~M#-KLGKso7vUB2C#x(Rj1)MuOSny9Goz)&u^ z-8QeVnbX{&f5KYXCFiB@?tSwmtM39s)P#xy57R15O3h{RF3mn)^5|>FuJRemR;M3C zAFXTjKX-4@pRz5+j&oHv+OQq(n#6wj)9!OcS9gZLWdHfA{VdOnpPE1BK=j@>`z~x|MYo%-dqbS$-@&m^K zp859eynH``EB^2a-T0gN?@d7L#l5dZSI+y!BNp_f_y)sfS(~<93cep0Cmehkvt{N5 zomVpt3p~*1bkz4`oGlQs&Ed`+-YtHDUu{GmtjgGVJ4u(9Lht zS8#G>3}_b?n(=nZtS$xfCbpd)=O3_kyIwZYobju$k%e`052w`^o)bJ=IsKYOyWM8> zulUZ(8DbN&kTIf7kR$x1RRfbo|8bF(F^&%!C(bC3yrQJvw8ok3;>Lf>4Ez0Tj&goj zyu$a|oDW6o|<75FnvS=^j|;j0UeW*O9a zZu*xu<+Z}ErMr2Hb{}PqGFo|^XNTL3kOsaidA%BzjfGPh8Dc99nk7#?6j^Fxxnt4K zl7*aAAF3@EG}~}noN(T1d4lic=Cad9hD*M%tew7M?u0t0y$)Ax&3p@wOx}KGx%?`= z@9f+ndl&0xOekttwpOG1J(y{W)P#^}!JS)nGpy43^xTbM zb&*lXKB7IQ3-3`Hxe+ZTQe~?bz8@{M;*M2OY7S#w)zykM;^V2W#<*n(^Ca-;oJ2 zEB-P&z{2c&klVUq;hm<>1ykw{RdO#6wmWIe_gQ7LmGF``p<8bKyW*Y4anm!ZPx7YO zabcZ#mmV4t>^E%eLH)M z#7Z7}@W;G;eeP$D<&j1A?;d|Ile|}CX2yxfyzBcz^{Ombp9b-5JN5Nd<6*sG0fwXR z-y|iU3Tb}2VV-)W-_uE{clU^U?tEJ3Q?_`fdxq52#8WQE4Y`&*Z!A;2Vsnm9^F&Ri zis;?l0cMk)mR+yp;6J5lH1TKr&1R>0)|DSVENb|&S4Ku?wT##A&b7<;iEJ=`o*Fgn z@tS;*pQq=nx>4qNzoE~y@02~iuvXE<=VD(LoanJJmVGX=A!lSQ0mlbN_tC(~;({8v8Eq~p`q83hTx zzLAk}?DjFXiTMxTzF`oaYWVt~ci<&&$yK11<|P04@9Wm|LPpbnDZMOD?fCev`g2_8 z)2chhXZ}UK=zjKa-=BNiY)$WP%{*OuzBcg7gl(Z!2d1p@tX_G>ZvH#drw4z2*sXu( z^VHYVUj$XT&raWeq)h&0N#yBEsm=OLRWofvrr%#udwpK~s?*M&u9&^~xg%u$);-fp zR!;vP^lw+mwrl&ct#0m(n^qE&RC#&d{t*9D5wWpa>$m6b-)gl{XI|l%DxJm)(|?@~ zs^i~i>Q%ch$KBF;55u|gii#zbd)F7mT$Y`ux%^XjZQ!G9)4Osd{8{^I;}_OkoxAnQ zHl6u3vuolvt45huit6v5?y$$Z>}$}zQ`(h*al4;3ed77*Jv}}7yUgb+|M%L4MZJE# zCi}&uyUQmhKCOik-M_x-;z%igE| zvMu?^lzaD=s_(SrrTg>s_AQgnKEM9#^oX+fkZNx2pU^Qt`Q~@;oh<$~{+0VDuqMbPE@%Ez!Tn}^ zaLK#E|7o8a^=E&1@Wt{sBZrnc$Lxs*(mx*FvHiNt%l|KDESl%9{-DHT;`!yl=airG zhSaJR%(hdr&AFz0jz9DLj}8VuL*{+X_wq%uu$t5=%;PR0W60)W zbI9aU5^xPk1a? z_uKTxm-!4I-zOa~Py8p57G5A@*#6vtcmDxF`NzlX4qlWsQh=7dijqDlZBY|{G3+}49!y~ZYgSWvPHuX&Vo{~bmBsZD zX6f2i&PgFN>sYeg+ir)eSD5tdX57A>Co_!iO5{$(vu--mtryQNT;cls>()S*xn+NO zo~o3lRGs*%7v()Ue<}azHyxR!ZcB|t&pr9EM^1M0miN2n@BLcS_HO$*g_Og-KV5ci zH|vUKUQs6zFuU|M<97xDV~hDBPv%|gyg&Vi)UM|t{0jHC&i!@s|LiNz%P0R@@k%;( z%SCWgX8m0FUbK3TFU$0A)EvC8xcA2ADVDojXR0sm-p}?y=zzP2;D!D3!UW%{dpLZt z&8gu@Xz&-*RQjVBESwH>!MtS#^)xzK2*Rv%Yc{tg9MxGpV1sC`ICf<6!AM6GH#U8|;v?)5cHohd7 z|2W5H_s;tH58oL~b~RytG)0X2)v=f7rao>^KJe*X@o5j<^Q-@|-k2pmPuy1V(7e1$ z&%U>*x^HHTZ7h2FC29d{oyG>Ctuk(P+6f0A)Wv-ha7 z!Tl`N==k~Cls6D^vZ0${!0M~#D%MXsHi$gvXKmV_> zVAZ+(&J(U5_{M!H?2s}4s|7Vum-adC?$3HI9V>k4u(-&VxQb^6ez7le_PuN4OqTk6 z?wIl0&0FlRIN!7l{!;Gq*hBL8nr&N;FX2CI_w}>t{3(mCE;nYF*7-Ix>Hd=$x3|8& z*(aB&JzaC5+zp3@J+F3tGkl&X8To8!z4WXV2dvHo$9b_Hkjbv?o|j^IJm+witZxkuDvN@jn{Kj#pW|5;@NowWLVLFLwdCX?lI>_5-{$<)udz39eLo2|OD)iR7v zq>Id5)H9>s`}Pu}xw|sg+AVjE`((3W$@?$-eN6kF)~x=p$1QT2+WC!fuKv?cTzE0{ zmTAeaWp7{1%ia3qwoJsN`I&DvpR>+n=lwd>`3+aD!s2<+C;Ge3NbhS%%X7UqJ>}Yq zwyl+4lEaPTUzdHI%3SDX5;%i9e$D2^`|P^*>Oa;h6_WK=+RU`)TBX-C_J%TZjo*@= zLw~P4|Kv-Rg6quNUhxjxH;gb$GyPg_A`xtUizV6biGV#(Im@2=f8iZ z{Csgxdd=b+cC41KA9_VySF)d2SS-;s_jJ#%dnKN$Q`r`{=xDyZc3!`7MaMVhllv?E zFC8u_nRo5#&Ls=qy@;52d&P^^t(7~Tt^Vu%?A)pKO)pFT)BI&Uqi_IRFfbXsO*SlvEJj=yUr71h4{=RD)D@5OxMd~h*X z&#>j2)Q4qT%u;G^rv1BA@FVr&Ed!sZ$*%L+FW1f7GoeoS@Z0HE`S#XKPucL{R7u(V z%D-BhUVe_7eQxc?jo)(qchzX#_pVjYTar0l;o3KE!i?tr7Iah2DyXN0`rRZPD;(pupHSZ?nUP!;W&$*mG zeLOgCg+sqzvZ_K*f%5ZWUtdtov-Vc?o&9OyVNf`S2}Q^ zo8ylsw%6M4Z{^W@ddc^Ysz~nndFFrDwyUh@TOqT>=4kLLy|p*j?#rFQ|M}GO?cx@b zZZXyNz4W~#AanP7^|FV?Pa>Zl-yl58?KFRET#R3mb)SS=-M0XRiEH{k+z)(fSnQbld&jm8M@eyqovr@lWsIbyr`f zpXm&kWs}@%!Ru|e_krexwx_>!te^ewDT(V^>iF>1%LXQuc4gOjY^N0OyM8bA-7oBC znPD@1d6U)Uj{){9=d>kuPj{`nmnFaCe%FELLC-Z^uiCv8lKB0ulxbeSb;5LJPm{V= z=1a|Mp81@Q`J!~a+-m8Hr`ZpR|1Fm{IQC7d^Stc4g!b7ojCSh}8#`63Yzn{mI`KBw zE4E4U%?TeWy%frQ4rrDii~MwHIgr zW0iCFe~rri*uP!y0ON9J{xkO;&skrWcCmkhxAMk?b3Yb5n`S->b zU^mIub!Rd!$cHp|0=;)JEWGZvg*)U`+heBdf(POme@K`L{SXye^jI*bqG!Ww!Efa= z;^ZG(mb;o;&Gcb9L)}EjetiS^y1wi7H8W4&WZdD_t5Uh)bNLGm%S0!ngl8b)LJz4#S?TJk)jHknA z9-knSVfgxV4SUn7Y?lwRTo>k*KI`0b+1Jb1?p*G~hSg^G)js_EqP5jfM)ZltzngM7 zlV>yv>%E;hKl#gn3AXPF+kEwn^CctNJGfr;d)^mlG+37LtY?ki&&~NF2EKXyY$cEwtX))Pta@$nD9(l4W^rwis;oJ=#MJDf4*1o*5 z-?@%m)A)5LWA(|0;tu=vuPzNxP-w4v6~vsiIcxc%6PqkmnyMHd1|PS&*!zq@>TSK$ zwC2z4JMCWY+^2ZE>&4c+vrasTJYR96bAABhgdFx;w|A~}H`Lye+Got5^qOyhTU`9- zWY62?Wj^M$XTBcZB`&8Cbj~rOJLZR8XMx%I%pC6(W?N3q|MYbE=j&#*f}ACDe-@tl zdFFY?t-6mK5$mM+(*zq9nAUQyNZ$C%RlKH;cmJk~ZnqCx$Cf;>Vd4Cpydrbfvygg? z<1(kq+uj^L|F}WUJFV^z1O}wd7Gu2aP z)x1|R7glvV&{!YTTVoN=@M?#f?c*J4xyy<|K2$Ter2o5==Gx|bcKOED5gxa13hZ+? zkY9WF=5LP6#d1=wBhD4>v#fAGHt~@BaWw{s&uOOHIy>_swq`#qU}MalzOUib@@>A0 zzXz3{onET<=Y_TA>o=7)3;(LxC!LOB>^}E3dG4o)^PkErI#c;`&$(bthKE zWAc23>(x6KKQ4SJ^>$hJtBUINo~v)(@R~X6{GOuV=Vq4gkEz+WY{`d~dKcF>)?H0} zzR>wjP~>;p+x*?$&Oc^Px&QpK|L18xs%QUsul?J18Qb)Xm2X4z;zKOsMZW&g@vVOM zxIFdNU$@{Dc5^>%op#*$$&KZam#)t%kKVEF{{1a~tLD~r*u_jbE)+X!-g@7y@3WsT zEy>;!mzDndUwoGT-tEi6XVtA-`|DFxoc_lRF5YkVUGx9-=WD6&W!8oPfXc*%1GgD+m7>bJEt5h{>+j7sIO zNRm~Knj5$?d!`n@-tBD3ji>o1^*?hp7uPJiKXcycZ#8bO7yZ0PHi{{J>x48P<12^F zE?(Q2aVs6Ba`R%S0?l%ZD^KZ^Ap%3 zSL7>S&#@?eX1nEYjfk+Goqv_20&M;YrIpUVbno&EEBAy?R`-g0W}h`^6+9?+P&eV& zghe}|8xs3tcQmoG=QzyyF7ej%+iv+}9{ZyS#*Z=`dhWM9^o|BCqZj(@iB(ue8y~NDrUOR5td>6D$=lFcA<^0#CN_QeD9c_ zb%uqRv+MRM$!xS@pH_2hZsHy3WtV$i&Zt1czxBqTQW&9PI@i%vc?&t24#fxEsv|BGB=Byg8_4Ua!xpLAba#r(1V#_H=I?%nUV z*t_pw`u`?wN9&O9rm<=64DS_OgZdf1-Pmia6k~t*<7C-C&w?xda5k)G-qFVEZ)jte zSW(jacek+I|BrlTHrsah?`yj~zmE0zdAmb3pA8TFV{Kc_`1#@8Bjt9DAK!^@x7hnb z_1JNJfwF!9|ML(2sVq*gZ@S6xoqvMT`u)mAFT;NPyvtbb?3!K6_Fy@~zctss>s*l) zf6!E+acRETjt8lQ66)Hn+AEf^pEtSql1J2Jw)j-jqKx36GN&)+wY5uT6>N+-xT;`^ z$GkoFC%Z9~Fb0||F!SfW=d+pR8;@nyn+^U89u`b(Nck*#>&3ashc-QuC-f3#K9YIJ zIJ1w*?^^Hw9)(;cmMa>ijG`q1k~b}vxc;zM$Z+;yC1>A*A|@sdt$9NKSser#XB_-q z$JDc1h(}eZ^2YUV7fjt))u+Dr5V_58b@7db4WF40ay&BWIKC=fbx}>3l7NlL{iVN~ z8%#JJC`?e2n`HCMTH)T(J

be6jgE-+01Z&Q1GQeRW`;@RehBo>BeIIR=MH?{0HZ zIqzqDx@zUDIgRzx7`5$E{%Q)YDz43&Unf^wXHC)V+sf1<$tdr7|Ap{^lO```U)k!jg|Vk-o#1k5YghMs zJU^y>Y29bXB~dK0V14fjb@$m<+W&Lh5VjUv^T}0mzU7Xq@efU78ACUEu&#btfBKQo z%1dP30l3CGkg8Y)*W^b~E&=@1C>%pv|FLrbkV(TEE;Rx#y=ccb{0#__D0nW%ldxd+%z`_Gx+d zue?`uqUrQuS3U0J`qRq4+jC9@>@Q-RtChbiJMit+I;+`tPOP0De|nB1|ICCbRd-WD zPi@m$%=TdZdUNSTC)j_7i~O8aJGa{*hvm1@amfXiQye=d+Cq4=>HFpQ`J-4(u;Q6My*rN5y@)OZztIa;|)G2;@ z-&O9@{`t>MjMDdKvTgBMc(2X-c69B&DHp#o%g&yiT@ycXlXq-Z{c85PFV4lx)h@7G z`n2U+{l%3lpIu)fsTH4kZ_?={vR8ll+t(|-@0D>8JKERXtN)of|Fa%D+lstbKfLBW zwY$CagK~SY={B{HxYNy7Oy@pdn7jGjx)+Yps=D_LcOT9_^(Rs2_qCVIpS5OR3drre zr=P^DUFkWmoBf&Y%WpwdwRvm(SJ1^$%q&V+AuS|X`mSnEle&l}8zrULfsK)(HmvhSAwEIi-%bTh*CH0>F z7m%%){qobKcWXa>y?lT^{bwni2 z*;Mv>@5#=sh__F+<8qiESe~`Qx_i&bPl<=WZ#i^4N?xU;W1XB{ytAW>-pd0Gsj*42 zzlsg3=U!E`z&L^IO!pOExLFayLKU zy&o@?zHtJ_rhi-$*>S zEwBGYo1k&h4z^>mHZh4k<~JS&ziAhjI4*vm#HlCVwWpr#yRyuGA;mx6Zye`jJTFk= z@FkzofJG+Zhe+FehC1Hu-yic+>K33piEtdm*pe59v?In6@J&xpILLn86$w!YsTFDnl1 zV869E-6HGDVuk21_tdQyN}p}7-*Wh>^5KsY4&1nG_^9MU&CD>zQ;ec5_xcx2D4A1Q z^licBn7*(loyODZmR!|%mc6<8o`pvIU%`+k_f>T-oLVLSvLtNrd5K%UUVmnM`)0NL z+t^Ev^Hg=uR>(XzdU3mKWlx>kh5oib=gsC9+?y9Qul&CA^nLopncJqU(`{b+dt236$^<14tG-apG`7Mk#Dx`*C5W}zK_OlxKd@W(svm?iMd z+#-IC6;ng~dwEuye+fr6?>D|}|Np*aUfq$STNIyvH~MV2z>RzV(W}?lYu?t^9jGZj zwEX{{mY*M(Hq1Z#d_MEPxVRm)JsWl(D=9wmaB{Xx-Oo~)_&>RG?EX&{nOgf#d&XZG zhX!8doC?b9vU$MG&9--NRj$Ets zriq{Y+EEx3r*nNp$5|_p_truuwAM!+_59TSA-7@vEhUa6oyX7o5BRL}RX)(+QDVE$ z-YL?rXKOTuz2?30Nkrt-i)Uh4`&e3((+a+9EM=OicE(6AFhg^CjGGOUVe@|7_1%-& zEuJntdS@BSZQ&)p?&oSe6y6>(Ui_3-qapgd;Dwhrf@aQMXlb5UGpG7BW5;q4*7M({ z^3OZ=T3LW4;m|fsh4dx6#1!(Tc}px=7g@%7#pK{4!M+KL=F882%yZ|0%Lm!4>frQ8 znlJO24|yNp+OB<|jYmQ~`VF^@gF>n0=?3ffi!09eJh->E@z#Wfx7)l0(?m5QPo1dO z(6(bf&@K5P$o_QTj=MZ3b5vwEGd=KKt~I;5>ztqM^UPx(IX-jBeOvM1Oio)@vB4>! z0=A{o>@MEycXE7XxX@)`j#Ag6+AzkMN0)g1v)Rz_U=>qBe`s9I+|6@$#8kXEIHB}T zz@qEBWx5zvu4d%@u!N!T<(bWIETpsV>zA2+&YI$UZgoTdk7~t7iX-Vy~g@Q#VSV|A4U&)xeFm>xh#r@B}UA_EH_K@}I~uukRb6OvcHGD^1x?{V|54IW!og>bi0+#Gj{D2-F;I=Cm~fw_bXe`FB@0gZw-Ij zKOb1~ej2~8r`Zzwa?VBfx12YcXTtFPUcOYooBYh_YvdL0n)g@gd=)vkw_(TCZ)N|A zxp#K3%Ef*S;xi7cj&Yc|@Rd{I{`d1QZF?G^I`QC5M-`vt+Z>Kxt2v+al(BEq%2kZ! z?N$3v+|0H-wb7qGnjCpd`3E7=I;<4B4uFFdVetE6(_NVfx^VVYjlDZSS9nM%ccT0#@ zY#+J#h#a^Z|a$t zC9l+XUZ;ODqf>9`>rMpEkYQz2}+U zso3dxd#dv~f4%npx?{n(l!>7?rP?oXxj*Ixd;*V^rC=(M`?pI)B6`rErGeA3fLp|ZPFp3htU&a`ae z{`M^^%^N?9sDyRygV*J`S(8ApL6OW;$vUEPCZ&Cp&~o~=E7sEQvNyQ+PCSxczx7H z;bmiSMDMBf``zS1mrqM+oSM!VmTo)syu$vSA>vPeHx$PP-F;j6{%82l@8^x*Z}_0| zB+C9=rgZTAUqw~Xm%q#As-O7Yu`PGz{?n$f`cL&$9j>X`@Hc2m#nOE~b?<-g_*5}} zZv5t}d;jiDQNH$!<<`9^txi9t{fLlST=jc%ntA2=;!u+%W+}bz>-a9d4mtmS*4jv~ z*9RiEe4IDy%e85NDXE7pHyMfS-M4(rvinbLnisFLkN#!1!hdR=MC!E*KQ`TcT|VQ4 zfqnQN|4rv^YcpQYlPry5e4c9Gztr@tf)R(}d;QMmxd{$dS0eR_^bgx?{S)oNXd+%v zbk3lK<-$Ba(?b=EMczBLo?jCA?tA50MxxNg^Z6owVwGn5%X0h;`0i=w^vfo6U+ucm zS^fssbXh7S64h6h_h=-Pvv=+9Z}>Lh?=@AX$~<#hn;C(p(?jZ382et``)hX7)524m zeZOwWE;dp~YmWKS-pFe6UePI6d%>&Pi<0h)d)z+?e-LI8V1F>-v$;iCq@^v>=2Yo< zqE{dBbg#T@!IUO%aF+SlN3rAz#vkeuZ-g28ewrM3lzrx-RPY}$rFRAiE(f@0)HgM7 zJP?#wpIFh@Aldf6;b2`~$NR)@wldZ{2MwO=HB9vI`(DBF;Jm?u{KpsnSjIj4-^}3s zvtQXj&hUNQW0Rvc`jUmMwmJ1JGapu@8(92V$+-TNj#a{eh6aY_#5P%Fwlg#O+V2$o zx^~$*Xz`zC8mA^s%nY_XoOd8^|M7pfHq^7U7(9OWRf-{2X7$tka)pOWiof%u+h4Jg z?fosu`uVZxxlc@4PfF)DZj7FRy+me_dSu|ISiD@2AdDS;i&T z8_dpEJgk~uKYw0j_v3vVOKPQGFJ$aBeRJxSd)k6iVfRaJ?3;Dmnc<@MPwlV9Tzj{f z9R79o@_KHTdrdDI@2g4XY=JE8c`pe+C8%zG=GmhkmK|xGCwqzMJRfJlKRuxxf5Z-K zXZ(}Tu!sG@f5r#S4D*#4kL}#?iRrUq(v0*s_x3Z|U1FUl$?!-1-{m9kSO1?dA>7>l zk(2Pyg&S!l73K>if9&Ob7 z!q0L){lXrmPUeHG#!(+)o^5uC;ptrd)9nAbxM=4`OB=HHTFE$F<9Aa||MH0Goow)K z5eIEX=_v;_uO{0u6*fgqJ6SXN^;e7M6B{e9T;AZ_P}vm9U2r)-S#49CguSh13 zZPKlp=?6*$Bki3heJ*J@ySN123$|;o?QOI z?up@c*RNXoH%u?ezVc-L#Mv3&`^uBSzqq4gv1RJrqh%TeUe~8`C(JnX>M!4luU8LS zNPU>KkWuaBl|#nlYQoMonc*IDc_2}AI`A1XQ`k1@%GU6H(H-H95S}n z&YJ&9qcS;q)7_$2%d!i6N0s+nS^O&6%6x&oj{V`!y{8_E6hGYj>4N?2gD+H9Yy3~W z)8g28{i)<>g#w2+jW4(xxMqdV?6{l$TYUDCx9wGTgZF>axg3 z?l7~}d}X@l@@=vAMURMm5K79NpC!Cgv$g8n@vSynR~yYU`K&58;lL-0vQ06cmL%I( zKCd{jsby9(!>*0%^S>*7f3rWIVaJ?yPrKGF?>qn0uKTv`#i=0ampjy_o9s_of5mO1 zyw6v~#eX-N$(PTO6$<-w{;y?EXj@}4>vNxL+uZAKxG^qx?(8ctF|Ids9pl=wg_7zs z&fmG(zU#D+)y;w!4fev0zgG=??sHbGU|7BWL2=%J$9LAvke~T_dfkfZ2!*#=f2XvI zy@&`cnO_}wMD0bQ^_Bdqrt>db7uIixv5(iTS@}0;QZ@gwILGPp#I5VY?m2sYj@z_6 z>YVfEm^U%`j=$c_K9vs{`nHeAdZxc$@zRf)bX>z`Fyw(a@gdb&*W zym#uC%bQwLTe>UtpQdtOzxE<``ON7*u4H@vyc^!GT4y4^Ho3mGcl*-J2SV`+cbCuC z)4Q6w_Fndt?cw#gYvca@{r#gVqv~nm+WR&w*S>76k9{$J;?m38tKKSpJw3J7PVeQe zr3*Hjs1#P3K&c$il4 z%#8cJT<owL39)YP}v^fkXHH*RZuHTTdS9^Lp|Z?4^*5NGz{lHS+<|8D-X z+&X#honIy1shj-%Xeb)Z$Mrn7(pxboQCn74biP-hbl%{!Y>Rro^Z@uZaMuRvy9W6gpX|R$_s4V z3XbO-cw>F$qhZ-){SET}nI!61y3ZT_P@YlWRaqr2x1ariFv}l~=K8(|@$Em$AMS8H za-LyNTVm7AWS)o54P2IVyyiR3b9e?{T7zXz%@uFv5AU#zz0%eRC7t%@JzpR1UeKL7Zo3_o_Y^m*2meV^V~^SS4- zp40BnIx+oTPRu&}vl734Y3+CZzI%S^3*&6J2~S_=+nrEx)O5tlGr(5<{AAU}DM3V{h}EJ7C6T>58L-`{dRJ+h9?@cV+z6(=?+Y`7EPnD@wKQOx1eRl%J}^Hwr^ zYhY`*#E^aUHs{LdXPpOJ8CWHxU*v96dH#}ZM%=Pb-`+Dn)N0)Mn8l^cSEbq zpENkSbmqx_wiKC?&bYz5Hpi!(*Wi&U!;FKuEf*sl6)INRSNi!)711@jdjBw=UD{+Z z^%=|itJ(FIeAYjGMATre(fV_9CfI(M=gY`%WpMGg+NL75Hv(t){7dx%uTEa$z2)}L z2_;r?iJuwdH^-&jE$Uy{H)XYC(36vA@+W9)Vg2LNp7Nge+pXnnA+j$PZ`kzzC(D_Q zw^(cwqh*75KWJUq@+RNzdQoFe-pN@Ef4b|=na+QtlPWKMJeK*_r!o_jc$T;339*IO z#NJ!J-SAA(wM|R^meQ?+TY05++&flG&o69KlWn+|m@`-B=>H{Oa~z(>t!E6iKeX=J zR*Tum)AcV$hv$dfmiVlAEY;@4@BS^l6T_SS>3+T{KjY%hiC+#(Nn0Lbu4cAi^||=N zhvoM8A9uEUk|21k`#~(L*Dbx<2me+^f0*f}?qv4ex^mg&n@mE_ZXB1H&fPbvkR3>{#WIX zX<5I0{pUV|k!8EnBuoCk0T1jZ@H=gsmCn3|J?cPB-<);DPPSVVUsWtk@Yu#(x$f^3 zsmMsS=Hhpj*Xu&RL?4e5FPu1?!Q5NnXVUho^H-m*($ataR*bb}-es``ngw=c3zlB` zp7gf4%HNamqw7Dx^j(*m^Jnj3`ubs7U5!Znx>s6nm&mNUoFlMFP`6<3sjV}Qn>=20 z?r`AOw6o{eHhkFZ?7S=dyoK`Ir>rLIn^hcBE`Hga=Ikf$y-CP4?zE-#1efEH;yV}o z%U{%1{+azr8N;shldliGH(0haKr?Mc*{Us_x9U!A-|{eKlg`&~o)r%xuEgfQQr)$@ z-9luyLaorM;wzPXtW_`iPWAomvrmq8Tl|0Fw2OQCE7nHOT)n~O;=!Q!1u`;WpQfCz zahRL_JjGXf;-9xkh?!^s39Vuj~5iTxw07Xgq1@&&|8CEp7X~*Sk#j zsC@M`x%0}^)ell)uf07Tf9c}yl+#aL^bEgcUg6z(ExvkJi232lB{`8&*-0XN7SluT z>%Z4tuYSsOLGPWjHB7Jc7=%*erk7~zta#pie|pYcIo%D>(>GuHVz8iTUS)pb&DA!S zKWBW3U!3>-?^Ussg?~Q$?AUd=<^K8>cis4N5juYyK1E$pzsh~J{@MD|>vC3`Mtk48 zn%2?1jB#ta_{Yc|A6w?Yr#r8t)!yt;JZ1G_=ItpDS8BiCx6%1_^2wu%e>qOrZFk&i z<9f}0pXFa)fAu*Ym8+fGKkvKU+`gN?s?X|u`}yV9z5B_#OY&Nm**#LT+q_UK`mfH` z%S#KB*8cPU8a?aqi?2%yfBHUO<^5;%KmAv6`^9!lD!+L6%#}+OmyOr|VXrLf&5S*- zYqi+t^k$ZG`X^^Ut#;{RIL8%nSNyR;Iz z(-q1uS0b@u@vjZ0_w6Kk8&6K#G^61LXcKs|ue*ig`EKS9(;d>4I=>1hv(6T-v739z zPVHAArsdqNZUutCXc)q!(j!)t3^OI+e@TAOt$uHPkB=(`<_1zUUKI$U% zS;Y($-&R*#g7%{v{eptbemk7bEPg4%F7y2Ojhpg`2ec*Z8Xp(mk@?S8_KjNeOr~S5WLVdI3 ze=)rLyR_t(tSK_Z`*=IigXR_~9^7pJZzqJ^6D*j#U5ucy2(<*pofbxuN+n7%=vo89? z&RRM%W&ZP98SQ#=KY7OaXFOfD+3ea{^L1LN$7#1*6he&W+<%!HFL0H&$c1%&^uK>HnT?NBFID^s zX82#e#N&Q_qlo0)iPN;@pZ?jgW66=DleZZE+x$PjOQi1aS?l^w$1mFHW!_``V5{=r zx9qz8g@+zqUeEZEx#Evr!}_FsyN^Bp|14j?f4;J7YI)0Dj@z|-4=i(j@ZYfgYgluS z`6HK^OG}~C9J|Kj{~2z`CfsNH!1$p2gXW<^-u~Y)*Yi{5lp4-6{L!gbYOrVepzbm8 z!Fu8ObzYkc=gm9ex=Zk>PWEZ;Ic2>?d(tObKi%ujY5Dey`sr5dR>8pz3O`ZQ_qE4RnEd6Zv~nam^-{vedJ_p{{6WQ$1N7e_OAwKxt2^ab#F?M z@m#}o>&dSGo2Ta$ZRLwX$|8QnFIu~cL0rQUpwe;rWTw*#8A{f0yHV8K= z%zV!jaQ49Dk0&h|mNHzBWf5Ec;!E%^`xxfkob~CIf>&g|tvti@Omu^Q@_J^ChKU=zZEo}VhWH+-d0+TTc3ptd za^wFGC!VlkUdmlCf1>i*Q#)Ri1A2ITXR=lz9QebPG(b{NPAM=_D{9*Z(W%jd@Q#~F=cOR z{gOUOgL5BVF8g*?X60VSgCY+!eSKUyb8a#`zVTdLq3ufAQA6zmiq5*{H`_N@xx{gQ zSp9n6(%wC3v+nUEE=U&|^Vdj{$^_iT+eH-QbryE7D z2p2Ayd1pO;c%<@m%V)6)(`vbE|L0T)-(I~t_*b*iiE_&yO?__P{@?h-7b1O!;o8#q z;uDl!SG>EUUp(sK^Y@M9dT*Q5guTyZ-vrTbn~^tw-Ji?%=ex--cBrFgnc!Jdmb z#qnL1zbb5&Sn(#czX-oncj{lK-?F3o&X?M3W{8k$@5;Sl9yQvhy@v$Ex1=zT{n7WS94( z>YP-&SFD6fcvN|8%lr}`u^ zzlYtEA(!RLW@kp9Gci_6mNwl|=2^VO_^r6)vfAib{$bV0>BS+ZF262jP4Q-^J91M^ z`PKG5-c;lE8)qiT2k`BdU|A8z=bNE&y-zp2A+;m-*>SD=XAgSsoGTf)^99>)#h)=& z5{~uXb{i>vda-V*rPZq$3o}nY6g+b~;NZL3-y7bqlvS6H`?~y$v`nT?!0n4ySHIxR zO@5KG{PB)2Z|$PICQdH>rTD+}OwO+jeeYL!TeY2<*JR}X;<@sgbeG`y#+UxR)lm4q zOe;%x&9czlw`92jkIU6wk6Q4_j?IL9!HPXM)Na+E{ z-H+SUuK#{<`q}UBxBgMrmWCTHtG#WcH?>;xecbo3xW{_WYUlUpUHxhIH)hr0S$XSE zI!-$t_VnKO@X62hCfYssuvX*|-LUt_b>}C`OHD!!=q}VvROJ0EdtuVG#nWT!Z5K4% zuI$|{bVc>%=_|XkYb9I03q;&`J@?Z?3-&u@&r9{@=3fsuzj)foez}|X?Y%9vQrs22 zR(bDYnLa&1Dq-{KdZweCE5c{$U0wOUJ*w}Y8gInA!!PE&_Dp?xx7})?9#dhe=>;RZ z^!$zO^J>ntqyNv$_CEDW>5+S>>)p+@_6MEf95%nXwne&JZKd40n+n%Lr{$kN z*7$GNHtFfb)1NGS>ab4#<>FHt^y6=5q-K7Ilip!=Oy}gT=tXwb%a*G~U%GvJUjMym zb3STuUOTqq_nZ2a)1Pi(oAYzZ7CG+kUHcb24y{bNSDSwA*VK*&ksIdao74$q7EIn% zEZ>lRf9)@2FG;T~dglpkB*b+PIFh_&Z zkIl7>mcEu(vIX@h8;9roFvi;PCMsTjdiE zwRCVC=Il3QINWmi1J^;OV?Vk4|H_{ErkS?q$V(AH!NRYvxE|*ndhN`0=*zjy4eIfd z1y)iGob&hYVk|h+VZG;=VEI|QV6R|zEm^~FK77fyT!d_7YpX8?fDb( zo$>XFZ6?t?3~4hg*U4GR*&A1w$mH>qua`Y;Eql=7x79QM_bcAX&a^sIFy-+@Uz=4c z?uQ(@8EapCVP^NUxxMOrD>n1ZRjr)f{>i!flsSv-EA=P$_gp)FV~Y6JF00#@X6mm0 zZv6h7VtiWhnZ@VhPlqqht$!o!$$mZ{5*|ygQ|9$#zkx*09 z`|#tN^Z&ld+Wl}BwEv?%ZT^3;pe>)zZ>avpH?QVDo7uago(Z|wiiz2{%zk(aIq{_Tx!`MbR1pF{_v-G2_be1<&?ADF~s zK0IfTW3Fpw+45gc=)xbZ>rZ13%wzmlyyV4;`#xX4+6GBHmlS)&S$|Jq9a96R*teZ^ z;VT{#AJEZ1(aIq0HiP%W3sH%=;WKrY9A%q-xvS(>M%-;f-BV?8?0P!c!pB*2qaygT z%L(FWv9Ntd~_o+Er^Ud+bLFd@h zThyx3@}#%rOH9sER*Rgv;@czEt1qs&$~#XzTQmKM^f!kEG75eir>xyQ(qlENxjoHT ze3?B3l{N*doK~1OiCN>x*EH`xmX80bb}%YwaZG%`{c;tHCXCa@0~Oi2OXeo8RDQS2)4SvH_B5Xc>tmr0OeqcupHKBE*j`z9!lwBd zr(4hlt%LD)3mF5VP6WPa6mt;CvTC|;x{)Vx|07M)w+;fkCS5JdP?}%0R{OWG&gyKt zghOc}53(f~lUZIeuHAfAyWZAguf;Qk>sJ3vCgpgFJ+=I0Z518u5HR8O8yN7X-aA4W2PH#%kG)@o!>gw@X_ajE5FUI7%pl!S|Z-| zh4)kFu~|Ex9efy~tYn_r`7Zmu9^bWq_oC{r0$f8GF849n&Hwz<=pmP?m!-@H!Q3mM z;yW37>!y5M@5erAPUdmdN2P@aynj!z)7hl^xOK6cmi#LTX6IrBM|swrG7*Y)8mx20 zH$`n{iZ~LPh5WJ;=Dh{7}mD)b^g!tw(QslsQ_KGCP>> z=YqV7-2AJqPnTP+P_|#5uumw}c2VA;6Hl|}YhA1^o_DK^_eSuWiE;t~ciQ*pxBp<+ z>3{y~zCP)*HT{p-O3kkA;kKW*+2=s~<&7L|B?jJSz9-FFxXHikuI97G(Rkf7&`>k)RKcXd0_OFsN)ct(1(tH1YM}FNz z>B`yRnaA%QUh!#lwz#FZ_BXe$EnF{6@2fd=d|L6c_^zPqdBxhe+lRC7 z&Th`&_|^BkY|{(L+y0eL9%^{om0XJ~y>#2`!eOCVhtq9tPCqtpv6Qs#{T#_?-M;Vr^TI7>7^vhqgXzH>g0gW|6` zf79Ih|H{O^{>^skKfiA)cl>&8rT>-N@9N}sEjb_dJ30CGiS;)7Z~Wh{^J~-R`x%f) zs{2Z>maFso{(rq->85=>D-Wnj&RLuLS1fRI+=W2`rJ%#NKG#O3-c5TNxp(`q;`wze=lp*4dqTF>c5kbd=WSigr@#8IX0`UIUCFEZ zl|B39ynhwVkA0MVtM=uL>r3k{tS|riR^jwY{%O(kp9{_ZwQ6nVm+kv*>F%9n*V4W; zd#~SX?blJ&QhKMW*YfVZzPEb*`)R?a+E3@^OwL>REXh7KDo&ll_Qd};+oG-%>Uuw2 znl~fPj``9%*1Ga7g8R4noyk7A_VLX7lmBd=^F2sDB1=2=(aWcsL+)KU=`@{3UGw$&^J&w9_Wb@JSvr3b`>B=F8+CfkpMJK#ylQvX zOXVybKie4#qS>*`GJXnadl6zx?VcylbILcif}1Puor@axmXpdU?Hf?jnXPhTi?2>!%)` zUtBdU^wZaA`p+C~`IQ2GO_y1*FU|e+&i=JzS+Kn0s^zbrA&oC?iTSMmEhX`G z&Ra322MgboW}oWGP+BQ|f7^*wKT4Zk%<_&4OYM}2wS7|3n_qjXT0TkYb^o2~qCzg^ zj}o`uTu|x4xK{gyOxu>@elTEG zrZ7YGKF1^-cjF!X7H8fc_9RjN_c2 z3l0>RCp0|Nt7#MFn~|1qK<@n`spXd$=RaoapWnOV9=nZP*^F;}kFRq6c0cfT?c@9p zQl(cOavY0v4q9et?$ER?_*3Y@Bstf+%3-^Ez6hxwXC%@{a0kF*M6RTe#Xa56Ut8KPd#chVehivAJ*9I zxBIo>zD4*6;|lq+rk^5}FE9R6r;&T{y!kC~o`2Dcn4Q|~lfU~>md84sHu-(b=a2lm zRWJ4Tq`Wo5cKLskm+pyNHcwnO(D8Xy)kB4+d)&Ib>aLvmQ~m#Eg8sk19f$SZYyOF6 z9!%UZ>#ewdgZuyK6XyTbYFMwZH{yOmjm(3Ooa^?L9eVjw@Z%Se1J#wRpI9DD{<2Y> z<9BvXf82wM+tqJ;5Ru!@o6vuGHFMkR=?;Ig&$RFPU{=q5z?@-D!r}7Uu7CI$ zd*rgdz;b(k?PnIts&4a%$sK;oSFot!^U6-U!-sk{cyl`z&Py=ZA$>+hGpMGamE*gj zK8JdF7}M0{tqV7p^Mtd_NKe>u@MWXMTfwfw3XKw%{?1sOw61cE&$Sb?R!pz-bw8+) zT5KsRV;jMeVLp>Nv)D#_$;^p5ZrLh3nRYx_RMM9e*Kq&P{-;~FPY{0~{UP_?+e*f} zYns@&6)prUN*8wVy%5l%^I)?0I!&dImhud{JrBGqn98ul_;hc>{DzlooHo5OwRf^A z84UKGV<=tVmddN)@Ze$KuCRv4ojF!a0zpzu51;M6bh+#&ff$Qihew<_XAXnk{3LX?o~ z^JT-7*-wvtTzVt+RpX0VW}m6MBP`Gx^A=5n#E1$y)C`1cZbMd=o4pUSpnKDZZKcma+d0G!^-sP;O`6@ zKVNc7-?eO?`6;*KwX9LAVn2k1@p9Y=;NyLGBU{P%lvbC%FMqm5yV!+){WH%hUiJSQ zEyX+Q-=#(3XC|k%%$onrpLN?sPQRHi5>2NaKPi#@TkyyV_R1;y7S*l{;me(pwk`I) z-j>iszt^~Lj#M~3Z+4``+VjPt(~bKsZ4Rq+l5*dB!~0anp3MK8?^ z%CgM=I_*j6DLk503tTgQPw;=c+4-%vm0sYp+TAmr+}^UY$KJKS>hI)@`(L!5*lNk+ zkg{fXjrZKfsu_)ai+}!IzUMW^gxxo5TxKtLJMr@Tv(H;{_iY!Q&AajBo9CC-clBl2 zCH2q#?zQ0M;wj-1^|NeG*Gw#qt-XHwtuKTg8yOyQ+<$w_e!UUk`^M;O{6DAR^Izi^ zmpJ=-?M}Lv`tr+Io?g9pbMM5qv>NOB2R84GpT3?S`#bmR;^fJz<-T3%U+Vo7wryQr zVJ+|7=_}@6ijlgfZ~Hs-Le#(X;(Pil=cvAlW7S`_JLFoBT>KQ9>8I*e z^QG5&%r&>qKeg8PZAjj%u-nO=<=6kc-t7J7OU)hgtFeyd7V9BcfD)>PQSHndgz;X zTW{aIyj3-zB>tUqMeM8Xf99W0(6-Tixk_(t%%Vy~Uw-kON337hw5F~6`R2@#dG}oS zqOPe*UkcXWZhHHqO$7g;z+biU&BzpOO(&q|Ny zk6S+P{HK?9f_w9X9{A0>`gVtzoc_y*{P618ORxX>b9G(i_ucJXU%fAQ7f)9Gy)t*N zi+9=cNxDgMf0+eJf0$tDcK^Dm{MDUx=bmQwFlPGh*3LOuR`K8G{Pxn)Q#@b(Zup^c zVd?cE>$+35ub)h<7s$wUVElf}aw)$<R1e_*K*Il>NU+);LqLlk&7pe(%LSyM#u?w*2{k1dxS7iWFnys*xt^X^xZY>PYRe!Q%o zZf3Tlf0DYp(Yc^6CuT3b7NQoG%1cT2;n zYL~g9pWZH=|8>U`<}LZcDq9zXZsXKBW3@?-<@Wbue(8a0y#HT&wnFgv)_;FjxJqj3 zo^|?tGjoyLl|PDacpJ`T8*}PzpP#CCmdkYiR>|{~Up|ECeZL%amm?;gX``|2{8*-) z@ocBR=j(bK+b+G)@U%X7!B6O(%wNolc^jb9+3&UXp7d6Z5BQmM?kLBulWHp8AM)w{ z|J0yfUvq%{|B1iN^(=qR{@1+0|DW@8bdl~OGvCY%?tiZKKReKA)UdF?Ze`j zbB{wl-z|PKZ*N;~{K1cx-zV&-lmEPy`G<_%f2I%T8Q(nkJfGo*Jo68;hI;-7$}NI7 z_Le(I)VDoOukSp({J-;$FR~2o2j(gF=wDj(@(XW;45Rv^=Nvb56WnhkY$)WP!*)bi zAcx_NVZ-qcl`IF}$ni7iFwZIb5S*pHnURByJMLggvFn8;uD^Hv2r+9qz3j*4XBX5? zzZO25mi_Fa>DNe>{p=O%IBGKUthsh5`g!J@nSH?R?uGY;x*@^6q74oL!k?Hd4wfEd zQJE=ztk~tnl>0ZHEncuu$kuRusNfNY14qATF~*j^S4sEiTrpkz8)%2Q65|0T<-GI< z#f*D|W$aIzo_aFnQ-S}2dlpY?zJ>(XhjXlbnt zoG(@}U;H0umvX?IA}uRN_LG_)8B!V&=A|7EzB<)l+5L|kKVGva@l<=tH&n3Cj(1*M zvD}%(XhFS%(FVIE8Q%m$mu(O^y4ND}*(vQ~mvSfBsGMn7D%>E;cbJ3UazD=oL!SbJ zONPINZfCD6EslJ=bf3Tq*>5kuuX*5H$WT@GY08NXWezocBaPQ@Ha$D<%&)_|N%}#O z+Nt&fSxs-a1D0*(XDKu;(q2+8GC66gJ-282^5{8hZ*S@`Shk1j#5VhP`$g`3+xg5P zeEPl_x!%Hw<mA6t@5k1+i-Z34P(fJXuszUj4!4q z9&)Wuy))5SVb+TWZQI^Y`NTRS`qb%M+2>k^4{iQ6bA|QXIP(W575)c)&UCmG_BL>3 z{e8cZXV09ayX<>zUW(MR;$F~qzQp8wXpD~fGke|xfhEU7*;edff5$ZWlZDze!_utJ z+6^U{yFbleV1H}+oAB&o3*P)MIu%qJn<2R3-PWA7?)y2J96l~D+_NF}s&22|gXL?~ z8Q)g8MZSNv_nE=Fd+(3G*L&=?J^0j%73a&s8<*v6wHIOEdnWYN%C{K}&$H4?$^&P5 z2gd)}I4i;N+SFY;RJ>PqztX%NwwOP|TJlI<_}q^MOm@pRnltB3_T-7R{$Q#iR=e?8 z0LRPuR?D@&2FzXe_h4`P)i2i1w{SiGoY=iQ%>9J1$dq-Dl}=y#$eY2(rLiEUub6Q| z?cCXd4^I8udT!#?yt!u|?%t+R%5+KF|NZH-I0suEuCM#HnOmrb$0pqJgAZA*V>_}#R9OZ+zBrJHlJ*p`2*?Y*+?=Bck+ z|4h3C+v1TwL(b^W-))!j4`2B8`q@L@+u50?+;;VUH`jdayF4~~&zI|ZzI(;u?u(y( z=~?-9y1}n(?;6_>J@20}ryd9G%r1)feQ$r?_e_oEeRrqTeZPPG%d%Lr%$JI9w`^!B zoTzv5yYGs4zK^Zhr!G6E?4I`D`R9w%v8VUHXXekGZ5lP%{&c|I3%Y;4>|>wvd2`sj zZMSR798X8?TK{qf%Lb9i9r@uW^7WoeL<#6lmt(qgu6e6j!oN*5m#6Ifk|;MNb^n>G z*Uziew;uoUvPyE{?rX0%Oww6wrV#!5-DbX7%hXRzeQUnxSZhk0_pe18Gp6MrtAEwI^>Tad2-Fu| zsv&=97?Wb+YzGLh<>5m+$8P-g>d*!tC_AY~HzP7XX&mX&? zS1G__%kX7~_CI!8>E^poX?b^(2|e&Cx=U54MK{a==aAGn&FP|w?Ad4ttB?_2YisV}WRN^1s8=ihI2DQ?vs z`^0&{Pd;B(Y}}syE}G+j-h25^5z33jAME|rwOJvK%ynYhlu=Ea8>Cz~ZS9c)gP2ohKzAlvNwVb9LAB87w_2PSLf zI2_^ltUZIjV0ZIx<%k-d`Q-+48h&y$?`Q6>Z+;;x6J9XqK?P?^zhS>|+MXua^#!HB ztR8*g61F=m$X?SDpD?eyqO6ABte<0dhk?|+`Tr!!Kbq!!u#9`i*4DvkoaQ3)zTvUS z;pT%*4i%;f_f$FW?)6*zM7UPd!ERIL`j`36}iqE zQYBPB*RdvIUgWIK7h9L|a(k_OC!ZD@$!5R$&$J(Lvl3seS#|Hf0B1t1a_#!5m2uzr z#ZLWi{1Eq5$?SXeuMIOD^@JPW%g_6G@b_tlf7{;ORY_D`|5Wnk?aTJ>*#7Gp{Q@80 z>?W;y34W^2_nA9(I81-rvZdn?tCXvW+LD_Og}2N96JFqE|NgF6b~p2`S*MF+HKi)| zU&^ld{+|C^{(o-v0v8*LoDXN7iw2bxe5!7K^6fY0p>rR<*jpu5ebx0@KR*d{I&(eq zgWv=EJ4H_Zeg1Q%d&B($&uyRWPXF*+K4ITq<%&OQI(HasXZ|7a@r&r3xP9FlxFz;kC4PUmd`8|s=`-f)6?YCE(q8g;Kd+eF!P9=fI39?l z%|CQV-Jyb!+dtv(?o7+{f*G}<@9w+X$T9ABb*gw5Ahz`p-#g9;^3NG9+#(nrE!q9M zbYh3@g99m*iq>l%-A-8gbJmLV80p95nM$v(d+*x1zbB^#1Abk}aPx>C9zgfn5x< zcdnRk{=!;FVEV*;oF05!S1y>IoKt@zymC$)!)5O&9N)~AXuLX{EaDKx=+h%9GEY`; z$LgPf$HXqpsuKRGf4$W1Nr}+K9al6zhdXGj_>{pgH}aSRQ_FetpZ7$$0uCP2VP5jB zTbXM^T@BNl`|bSwi67Tl88R`PUvNBe{^_}^oZVhO6l85My1$U&;Yx4C&&~;@jEm>5 zPp#U))HqG-^G^X)uOAVqjLw}N{tcEqFCAE4eGF)P;x>V&bXt|wwJMjUNZm%A_Sau> z7#$W{ZN8Ei&L@7Mv?L`~GP|Yn?c<|2Pj1a%JeyH19^jv6&8oiXt@nPrMQ->mcp^f`aH2m54|Mad3iLCj_@`+P^{M`16_xJGv-350S8B9&@-zmSU zzvY19mh%#|);oQr9!$7#%BV?i&06uD459+dj&khi{1p5N%&B=$xHXQf(Y=PJZ_#;gG>IUe>Vpl3$&FcV9IUc@cZeit+00 zhDQa*bnx-{1d@@oT%O!@roamF*0AwX14AEZ~vj3I5TYq0}|qW2bYj^sPk+ z9t_q~SJo`&WyxLeitl&F4TG)A5AVAb<>nuLSNqq|kMU0@eKqoHID0iRZ_cJk*W;$G zs9imCamw#dKJ5>uw4a`5=90Q#`8&ujoG&e66KCbTL;GTKHuW&FE;wn$Z(4hif9v;2 z^$%y7`POCIdQE;&WAJ+SaWRiP#yGy%3;P}@UEBH0_ow;ezE5ln!Po3>IlL6-C@_v- zTv)ctZRhH@sk1dcY>{02Osl_$|0-XWrH#sx6J5nV7bPdxMZWRZTfU|B+J5QVvzR$s z)<0XoeJfb5$Yrj}+2sxUHKXTFKQ+fI*TepP_7jC|floufO!=O|lNiUl(s$Xu)7D*) zvzOhRtxy_nd*!h1mfRQHbsuMhx5@cjJmH*k@#aFcxXGraR|a_Z0Iubsuunyv4Z_D!09xz6v^VouZC8@-Kx ze>I*vT~+(`_|{9ye-##XUNLh>xg2~xd(D0Qr+cAmhW7itTJE^N|BA2Rz6pQ!c~t89 zB+uG(ucdD4x0;Nd(@#}Q{&am=;q*)Td#>G`z3+MI+CAnIZ{GHKE@yEz=4rKV?tj_4 zrT_M+*jLu>pMHI7_&n2lCiam<7K^uPZvAxq^E2-2)9Sw0Xx2~vQs+B=`Yrd*`;I)n z^!lvS{rs%m?_O`u-c`TS{>%DfRsZeg?Yf>P@#-9dZTVJv`!ADtzJ8yj_wZ2Zz2sUE zsf%;#J3F4(^4~T76?kt8KkFR#P46yi>HpbxEqtc>hI`>v`(}Js_wh z{Be(k+72~r@tgI}Ztk?F8-=((ap~R&cYIX4Zx_$QL5ro5=>YxQi46SleH zx%^Yto?5e=eQ$T*{P#a!m--wpzH0t#;oB9ZA@io^+?{o1>a=49e>3(LKKvCmZ~C$G z?dSHsn;rl4*R{`Aw|M%!3A!*T)+qaF)V!CM#44YBIl4aodFe;iWmC+jos>Qp@K^pq zi-mm1o~xS=P5x1H+G@W>A7g5~k8t7LiGNJ9e*Cbh+?pD_HsRMMdDgixpIRT~Pp~X??j3GWYH7oE4J zlI(R$*Hg)VmGvJQJ* z?WopzJb{0HZ}F<9k?X`!fv(Wtr6^`Zyi>8#s>3==QH?6nvkstz6&@!{K6uI+o*t zAKVRW*lZXcathct9ACZX;Tgt1GVjVaNEF)KO`Nl@O)$LUpJ2|8qmzHu#ypIb`6#q~ z$HA*Lt&IH!k2Jr14j1ef&iSXQ_D4X!@W^YSg|`ZJ7~1Ubnz2loZBD^1%R{GL%;{tJ zG{fp=iI?$2j(Jt@Zu(u|SQ2?;1M@r^<2!q|Nio_=cP>eOl%hR*cFB|L^A;|Sv!8vX z$oEpQ+wq%orX8HPUOu;!P1$eHr2cEcQ~QsryzFtEJ9pN!uh#_UrDm|Of7-d>BcJ+} zzt?v6-A_K}o_@-C`tozDatw{ip4PrJPt{>tcIHmWl?88tXURWV%w=aYd*`bM!n^P5 zte;lPckErd?hA(NTL0^wEi%4W=eGNSiFi`V$J2pFrm{aP*3?anJbn4k?QK^3*Oz8r zUNvv+*6%@2KC4~|jQYGgKkaMUm-t=j0#&E}%im^mf=#xw-ePzGS(Nm5pRnWIKB-2V zMYi=)E1p|1U*%oIEqUPQ>DvEFr;jqY8TVVp>;2krhH?J?qsm*j&10@eG1kZ)5N24< zSkuCyRo_`LtMKz=?IVvlKYkJV_`zy;z3 z`|!i`!1`j_Pqi!uE;&s--k+G*bkkZg;Dxd489_^^AYUFAVaByXGK0V9VM$y%0+myVTNsJYiTm?3&4#wh- zPkU|--gWNzsbjVN4Cg9NE!ZS1eyEsRC}8qjp^q~v^ma@Teo%RK(t<4;{MFCBDrUW7 zyu{=AI;iF+q4O>gB)$N6y*L(wx&bZZ?Fk!~osZEW`ZXfwvGyC(j zjHmMsSc&-;d=80kx?uZS#c08PmoLk98YO(!`RH{)C23u9obxwLOLGa<=?Oke-W*(d z^WVg9Mc%hPUAoKnXCS{b+r4CuO=VRtPtLk(^gyFw9@DIkZ{D1o`0Q%}d(++6Yo#~8 z&)CMeY2ml^o5XZpALQlOw^@|si)cbOQ+i77?uOZ}`wxds`>65l?CQUoR)_wt@jj>R zXKGb_Bej+{LuR@hqy3_WOzCRz)jFERr#AfYu3PuWn8PN-A?K`+#Tv#foDtEC+ua&$ zK2JO@Y7&0nXwvi3$wno+Kk0v6q}Tkd^5n+T->%dY+0NMRd27+@o6A04=&37jW$^4i zeCzp@yr&I3JKqUDeZX*P{|)A*y`?&no#m<&(itXne`1PCsh3~HyHa$;W5IgnjAdm@->mFg&nH=a z^Zm*Hn!9b-P8z+|zrE%K``jC~TS~ts&%C01pF4S~@59M|`Pcd`@`w^~}FnTq?N?`$WD(?03JI&$LW* z$BAtQefek9%PO^2uIu1mbHeny{OzrOUEd^iI`O4^*!f}2#8s=l?Z4)H?2MC) z{@Ts2@BZ0k`N!q>0*$KzAO0%|1ix{voK|~z*Keb9X5TgJuS);zU!~0DptnhMc7lWC zvKtmoMMX%fI)*W3Sk%$O-x{zxU?Pe!6b&_YHbG*Ztj*5*s_qvin@)r&8M) z3pVl_`LUf>TV{R6k-v8lkJs%^o+-xdcRHA+Au$-eYWM7-?w>nW4u zUwoIF!tAzUdX@2O?$nbU>PtV=&Dj-Dw*TVVpZgt-wv|2={e8;5wA&`Z3U z7n@5m>G{V0%FM2Rzwi0}oL@?9yY!1zTzPqLQp}gC_;*piwm!e#w*KEu@1I}SYw!27 z{Q7c={L|Ez|CZL6^m|v`z5YGu@9%2w^;O<~bf>Q0RTw{WddK-wMu+zP{km}1)#uy4 z-MRIps_^YH@6Q5Jr}EeC*V&rxpC9ynY5JD4(<-7?e^<5Lz20}(<^){CqA9Q zRCM)e-@nlK`H6L>c9(vy-uKHarm8l$f;02Qr8TwJe+gb&l&8~Mw)e>4NwJZawzuE1 zU3M|tPuH1oy zMbCM9Rot~{Y$9=&_3wV&^X1pdzcrqES7yGsls7H@irUks4~9k*9jU1Y8Q`ai+jb}jL* zcAfd<*Xoxyj#up4vexGE_lu^{Wh?i8Eq%|w>&0)D)V*o_(>@h#c`GA6FM6|o)U;Rc zR9`*aWwtLy>VNg`U00@0f3n5wdj*GOz~B9Mzb?B|troKS@l4&GzxUEYuigG^`(A2R z;GVM+YVJE&YDBP}+BM}G2pK1HIP3MAMvbp4O*B*-A zyUWEdUh=lvk2j~yRV3T?ob&%+bo~!!#lGzUXMZRaf4~2n@onKMheD?F%Y#`{&RbqM z^-}M4J7?Lc>Lasua{s+tTvc}JK=Hryxl>)&&8%i?Vh&Yfna%&mSU=(Co9psyBK3X@ ztMV1=`x&0;gtIqr$na$0CVGu#M5M zj_-Sa!oN_3IAzNkdF5mKS-)#b*ts5f-f`pLbK!Mw`UO9TGHfr{e^`{Q#el(Z>PHS{ z1A8Zv2QASNdmLxnJJ^t))c<_PvEnlpNr!qK3Kr~;O=v&9<1nB49D~CGscr`Ebh>j7 zY>+mXzbdVDj^2}r`e_&bmh@QMb3HS;X~*xGGy4RryuQeKq}x=j+SS*x=Xi3{jVi0| z6glN{ix(^>O^W5u4Ax0ydntNyQh68Kn939ETRJhzavfSuZ zy4Id`#+-BiZp^#o=MdfZ>}1I=wFSmXbKicg)Lm=w<=93^N3I*cWMcNZSnYoOIwRwD z`N^NltgfBk<@8KhkLkj6$G^|_%(tJNvYRby{lrW9cVC++&e>YOx12BU`prkGL3b}_ zhc*0+*ZIk22W$JJBHBK76ZW0?W}Q{Jzr6DT>q+5XX-irsE)@@3>b-kHW0l-DIZY>v z)6bobJ67CTtj7_{{6nnaKgR)i#vc*~mRs`ceLG`OSHZ~OTz zyF=YwqW?n$`}x(M->D~*?dWfK{_9qU$fipE8^QV@9w|p*2_t=Nt<5=`XQsSA++B<=bZ!2XB&NWms?T_r^m2^4B@t|_; zS%1kD2I}o+eu&t;NlfIw^Ot8v-lpUR^{4NOcTOr7@_05iq0935Tt}`G=UACfSuL60 zP%*u(eXfNquj(b6#eVIpS?tscbl)&k^F*8oJX-vl=jV?<25KLoZXABb?A21pT2fK= zWykV8?XN?=%~>3CzC84Q)0>_S^#f`Wd=7UG9(T`Jl-jOsGVzSygDL%QSNVx5IIXFA zVQBv-^g5S-_3M;5tNtifc{TW4%q%s~>`+}lU)*-)=5y}@_=++ZdUcKmFicgIXRug0 zc}8ZKSBm#(qr0k=BFEK#my`*K9@xpWX@}max(UB$wtm^m_&8|4nx=dZ+fPLX%h`W| z)aFiSnxr1EjX^<^|9tN3&q@Ubek=UaRdxq2^6S!H{N(QMpp5DnQx2#_Mu%-!IPY6- z8`CdkkJ;>nA_}^%m-8i@>Z^Ql%X)6<3ad)CGY`vG{}d5;&%v{6^D_3v)JTyD!b{#p zZ2wbRxJJ;n#ryBxTN1aGZz|f##%O*PQ$OH$vXRT~^kIi3Yju{?N%C@roGWxH`NzZY zsx+q~_|nQt_nWrJzE+>jzT@ywr*-VN+x`|z_;h4{DBq-n>L<*MToyGa{u(~pXk-8X zfBO6Tvvh7x{9^Ed`Px0fiPMW$7r(l8_YHS+%H%~e)7;EvwO2~a*4%7(bI+O8^M0QG zu_k`O_GB|P<7c#c&+DRZmbu&F66$B?80Ajc64}^k zQ!#PL-@3r|t<4O(iiCb^iC0#H{M!2YK&tTbSzHrWKK0H%?|*lNS^mXujunX}OzeV} z!d9NUkQY4trry5b-%fko*ROweEPSG&Z{#nVgU#%>>UEUAzmsd2u<~rGo&QAnTYg)a zmxQ^mTB>?}_r3XtZ?OJhl4X~8ck8KM)c((LyZ5f>nI`ASFVDeS7BOG7yGqaKVWZgE z>z~y$y?-C&vx|@pI=f;8+luh|t!EZLs8LAOxKQ~^)OEJ-aY5nLwvLy(*Oq=MxY=5F zt5f%4Az#T}DWADDelKPva@W{37^iP@xb@g<{{tQ$8;12;JB4dmoQa zd%l&;x%q2CTSsb~-?)9&zuV*5|V;@yK zS5>~UQYz(G+BQQwmwDg6Hr4oB^-I6zKev%{@BZ`G4$bmE-Ba9j(k<1jXK8?2Of|1n z&S(7#&n?a$-pYD?{?5;f#95A%@n@T+y64(_{xJ7NfXe=u!#~3JN*?&Uab7}xT6W<- z*`Jb<{69;4H1eZs&R<)+KeMZJN$>OUU6-b=D_MHq^VhO7|8gonntOgM*2t0fz3jJt z<3F|+ufKRsz3=~$J9o3*=X9GKUCDcG_ri|#Z&m*GIV?8%W!fK`rRUa`Mgtf=?7t||a{8~&K|iCHe7bwfu39Jl z)(`7XA4RG+q{=V$y>V*wZ4JrAaks_3eKBFYeSUXUvb@XAm`Bd9=WT6#s=3DbUAs)( zqvZu>)!L1>lp81@hF^~mnJ{c zeDU0v4Z5QG)~`Bq&d)h%a;jsGtm@jl+^qY@>w@J%r%f>N{;~g+hmP{Uvy*k77@yLA zmAFQk=}=@^%fgIVEpq!DpGI8p+ka>A=^tUAv})8(8@KA5ymnvYn{cV&Hsgmfd`pZj ztTj-bw)E-iX~M6s3G2T}-zyzc+4r*~+vXPI)!x#exPw1c*)k`&-QHvBHf38$srP@q zyTuZv+OOv1%{-g)_e|W8O67Hj)4$x!&G|1o z&+J%lC2?=cZArfGyy07lIi~Gry4$Yv)bD)K%eqzX9!5XrexOjopzIKF$|~CVMm6iX z@XY=5^BIo)y`AvoE7LcRLYb7wz412lqHewxw2-@%f2#je#gu!YE15zMFuqvr!Vtb; zhr51$y?WD@m&-58Z`hOc)FV=-x#;?5r#&0C&4_t%`pl(s!WU{^y<%S1o4@yi?fZtg zKRvv*T3Rlg`*h{8`x`&c@s*HtSbG2NAA#;Utqc9$eEYzi9{zaalrZ-z_Rk`Hw+F0^ zJ(*LGYcr`maxC#U9BwvP1}Uz%Utz)Y zRZLPoVeR~dSM(>o3U{!RI;_ulM{z0ZN|(+}9VXiC}B^Ict{qSk9xR2;Ci zGmd;y5b>_?#@>U651-$-{{3S%`4cf=6DJk~8|Q5}Tx@f=t4Eki?#Zi}ckL3(ndk5= zK6?LcW0B8|#Dkd|_PkX%T(xFL{oNiHY47OO$1Nr^J$^M`d(!cS=M%mZx*nO@yUyTi zWQ^)&o@=Y$Ufv>_T>E5d&C#pAD!Im=R|P6BuoDVD_GkB^=JWlE=Vxv`x|650b@8V8 zALYVBvvM@MZ+6){y!sBX*4+B|i>zua12-`|OR!zXeyE z{qCC=t?;Gz-y^T>%r~Sf_FPO()#Ugq!R8I>&!9+VJ{TbwZp;<6MiW8-~6B+kW%|X z!HU6RDci5uyod9iJYCnkpQCG?`h$$$?tF2I6^AYf`h;I+J7%{xPw+dmeR1y8W#J3n8CxaZcwVMHtK#-&zaPuW zRf6BPo@;gNe=q5AB%Dh1V^F)DR&>{P`nSz*xURIv&1grp*`cF*}zO$rf*EoeeKaOYo9(runsmc95Vq220mar8yvNfKmoMXw4doE}QzulYY4&vU(&%k;vibZ<%>Q?+TV?9&(9w6{cFPJOog&laAqxi9x@ z`6hp4pGVq#-|wqqeT+_Ml}1iH&p0QWq3RoNWqT}>LxJ7%{5YP6ew8aPzm3>rdF@o# z%n8qrq>8%j%W90j_2}n{+dAFZf|BP~dRRB_WuEm}#$7U6?RLdy>!<54R?am)psaFv zo8hCq=PJ(`Kh00JjLUfNP4U&XZ?ebAmxasu&dFZ>)bEYd(@D1^ie{&pU2psm6fd-Q z-a1QTs|7*)cYS^=os(0uY*lIKj~MGO!nwQ^kSM&~hI@Gg!$U5|k z9js(Z{(tV;^P_erYtGH8Et(m7Q{|lJpDSF&g3sgjFKM+Bd-8JAWUI$kuiu1ZJyG8B zlV`%(mlpglZ^ixgs^22DcSduutC(DB-;JIo$G=xi+kZU#`>4Ikc*EN5?m0gTCOSX3 z{`|rO%c4E_g%KaN^)Xuo!-_?>G3d|RZine}rpuROd@b?3aoyW9UfO}V@5d3b}J_~+X_ zUpKFfYCkvE=WzZh=0DPo*E2mP>CR*4G|Pzi{Z?h|mG`wfUAOe+s9%2(GkN+(x#z{s z&)dDN3-Yel%vH-~)OUNk_wRo3JEsfoE`96u{NNg`T_K=^FR8 z?pxWr1KgI;j(wTmux;9j{kmUnA3B}$>fh{XcXKp1ZoTsB^&;=L_0e_Po~%CoeEE{A zzvkbvKeO8V--f+R4+<47znL8H`ojH>KYQ-qd|r4bsme!x+pDgZ=`}WLpCf0jEi`^y zer@~aJ<(tE9{ZPiWtvSh+ooprGAKSLSMtcG``dh@>i*Pv$}i^G^rz3p_-*p8YESn? z|Bm@T61lXpJ$}3Iqq5z3;khT1j_KD=<9_McGJC@G9kyjF|39io{dKc=TfW-q6_cZ* zOLVN0duG{WTi-tRCHn27d{*Q258bzQ+blAxPZQ_(Ao(RBQ zQ$3$JZ?`&<`l2YncBjd*`B{fU#7<=&l#q?xeo^847MV|*y{h(I{vTYQw(IEqTl`*D zdZFhZO{<)e&iOOsd5C|J$MTx|lS+wiP78f-M#K-fzmA@p8tpxmT;d`LIp-Ei(CKf~);(R)wi$^OW1U{_YR@G1GRkpU;c0Kkivy zaJapdv1#I&RHe2iJJYYSAqQ#&cD;X@dBi?Y>(8dVy)5O=x-Gkx@qIbHeQEC1Tgx`B z-paU%|NDW5zRU}Sm&pEov|qF6f62>w;Xiw$T=M5F)+*chqsr-1dG>Ti*XOhArfo6{ z_;JzU#Tnz606)91%JdqMcVAb(Ia(g<8eVacN&j~GPKF8I_4AE3L`3%N*ym-y`|a~2 zX@1MY%9lQGYCh$)*zUrA@Be(4rx~m}GoeZ<(nQSU@8W;T2bE?mKek_W-PT1*Sk?C& z=n`cWRb3nLT9B31QZ_KCd6Ba0gdj)V?H;A=UC%R&FK#X?Gfq`W(XmMI{C?u4oaWvG zoct9l<}covZhzRWzG-P)!<4whqta`BaIODnd1>E+cYB%pR#-gZm6PMTcU=4j!}`Xj z+)JLy{oL?~_1%Y@y+>^ucG++9W(z3TeBMHK@|jvz5AC4X+filrt@r)i?JODQ%c*Y7 zZy6-xFvs;#&Z$tz`q!^!8kbGHull5Ob@kfCpKpXS>{^xl_tlHpYo|Qs@n+buZpsh8 z^xqcJuTOcOURJY1YKwDQ+_$((n`Hz0)W1wMOcf4ay<~?|4_m+X9FIV|jWV%U&xf@Z zx{8ON_{F+0w7j4qYUg~W#^)BFUv(9+lxe#Pl(KivU;kyh(){`EdG_;t?y;@0_5XcE z^kYv+>JQ&3%rSNupGtN$onK$FR6F*iSNJZEaE4!?u84N*%koB%hI1<(RNcOR@X{U7 zxX$;tKc{C%t8i|RmYlz@+PZk}hJDrguP6UcKK9o?Kfqsq!@c(b{rnN~Gy0^B&iAaB zZIEaBQO;18bw2*adEKax&*v{HFILa~ymo7T{{R2N4D}6SoPU)U)TN}_Ggv6-a#ntq z`uT0T$4}mXya}HKHTOE5QeSe1;eDws!%O2Qv22&*BJu-eFK%>>n`g9WqM1e};& z8E)-$shW_=@2>py?18eX9n}hVH?O+)M(pb?hbNlvlCQk0`S6K%fdhlCquA0z$`fDL zaXGR{`CdAz;$Y9tzvSP%*)MuZ=7?9Mye?{Lt~b!5tNNx*{>dq~Xx)R)L;{Tw?Z`tIv zYpOmc{=VIKLcKdIYJ%6shWbn8DsHv@oT4ikA6@$$w%+;{&l^91qI-+4HEppm54G89 zG;Q}fcY}X1|M}Kl+mijZeCzTamMw)Nl!;xwtaTv{mi%|p8Z3a1ap<3V~^A9MQ?88P4kwYSr#o6ebDmCKR@dQTn6W#A9J3( z`+9cZOH(V|#*};FO68vlkL|w|VJoxnpV2Fqm%mO|WjDF+xmK5aYt94pEvK?FD<87y zTUc(HA9K-h%8R1K%6Fb|_gnN`$vwjmCVGFt-OG;;8d9glqVnf84x*?MLVBsteh&wEk7mWp2ZmcIW%d zE8ZC2^4sbzr8+O$k@eHDe}%hmm2SPY!>+$&-RHm!3)ivNoMkq6qHq)aIN{eHFb-@9aJAomDR~UfGM-e*L%T z&5>!V<8R!YYWVo=bNJDv$>DCSITgW{L}pFA1fS1 z8P;rb5tv`?l)wJ<^bh7SM-pnEW^0~`ICeGCrSO(a&x)?{``WVY8?#&W zl1*3GHwyYzS;-#VqI z{v%bvnWgw5`~3eq^_2XV%JzIR4UoG1^fgn0-MpUjj?XRRKM3%Depz$s+tJdw>zt4L zJMuO9Pn`U*`Df-{^Y+Xq=DKe9o28v` zzI5NxzkP4}a@vY4_=0_Yh)gmx`ctp{c3SMdOCHg?pao)8dYAX}?Pq^)pZQPi$Na03 z_LcXx-q{`*bmY8h?Z48JN3$0#*I9UP>bYwTpQ^*=pDOE~uW{b$=gg~T(>LyouHAX` zci7C$YZ-sKR2#)!T6SsRKTr*v*e9C^>(#rHdb+WNt-oGPnp1Oa#XMOor zXa9>wx1U}8UcZ-J_p#wWQLcr%j<0Rho&7^ZZt-i)o2quHM?Nq5>b+rmd>bEZi)J~cjIf0}>YMqh(Hcivi_vFAQl zdA;h&R3^{mnI3`sGr~?=dCuPc%>AkAtE4yLm;62z)|~$(d`V8%{do7?u266{+VC8Y3;8(v;EoeM~c$EHGaABKmVijeA}h-yvxd` zRfOHkdABR%c<}YAe|JP4=JbX>+!ynXv3gd^yL{2cs}tO`zt-kghq^ReZQ{Lg?cdF% zT4a`V3{eAAl!d-BrnHkba_{mXm%_RF6y!3+T( zcCsmd$XoGkUb6G4^aV1kE3Px8a9agTXso$@to10Xd+h-|Q5_4VrCob;B6!a1y{4R{ zd$w$u^^{+-A#WxGZd`KfT;{d&6EEopd|uypm-FYt+9#iE*ZjPn7-*#3npweohzS!GW)z`>zSsmF5yiKS4vyY-<)!A z%?-(#b=vB&PmfL&OE-Lbrl-zSFueZa#S@~6=YMD&y*Xub*qnu>VyTrvxycKp>Q*Zz z&MqxoRQht&+ZN>Nk&k_9yL*oogcWGgWI|otuAW$G>eC51PLEsl!yI^FPM?*#7;J0>7`%=J~%; z@}c&LKae4qlBMO#kjG<0bERJ~%KllqJJa_0HJx`)>wmnu-*#cH%H5m%%CrAhn>_d_y~XmEWz>;x-x+I;|NEb8^59SS zv3$4wMgI(?1pb`Apft&N(+}+}CqC%9MB0X~XimL@E(--%V0UpABK z=MHG7`K+xlH-PUw<8q!W=Nn2~*6KHWs$-sW{Z`q&K!!bTYxlElishQnpRw+;^pz|P z&4i9=(bst%9OL`1zGUgtNN?BJ?%W4yOJXJ#WgU1i-FDOaUu-MZACr?(dKhWT%y4Pm z^3;+hi-IQGy@w03war(Hh8)Ox5wap^`D*S92g7!~PrGZu@bK`wxT#y@_TK#Vp>4(C zuy*DP-)og^-hH%qapu4ozJiCm+gQE}o%qMl-x94Iz?;y1WuCh`_tUr1zn90E-%n+( zdK<^^`}^(pNejM3U0@VFeoz1O+?7&Q_92XI##x%*&HdL)T`2o6*QT+QMR93M2zORg zz-KwmlOb0cxK?l7DZ{fNS|`Z*L4u^)%G!tnVtU#U(!YYu$M;QkN(g&&@t-*jN(Y>u>u>*aa$calu%q9t`BjJ7lV7Wx zo3dotR26uZDYu@d9?TjE30JqS4j?q>W)W|sk`ST>weE+xgykX?tk&0 zovR-!?73la{+0TIdukIWZ=3A1=75*`lXbUw7~~Rnhgo!-RyJUNaGs&%WYX>)arLk4 zS1yDvYi2G`zx9lVeS&}EvR5i9`ERs;xqORF(~J&3l`7m>sx6;&Idogj`kw(m>hrbh z*_XeV64HOtxbfJT-Cs5?GFlpY`MKQ9dy7{7wm7wyk3FHYzN>19;C|UDK1vR{-=9kz zw7&n%PU6^vhW%US?wO$Y)@lE(A1CG%pE-7&xuB}~-4j)gh(D%$zwB5m7k&oIP``_#f;@h~$**;4Yaj`Rm8$+o!*ZmCm-m$;X;3^kDu?aWnHUX?13gb23lA zYNWnhvi|zH>QmR$7Q|;Mmqq^eIaq%xKHP}MZ27tazZ&*EJ8@}#*!sTz#tkV)cgS@= zo}aA$%HGA^sqWk4{_j_ApZIh5?XyYezs~!$lVR&x-c{?WZ}9C8omb;>*Z!a~L-v+} zY3I4)EUr&Wp8Wic5d%wXx@FGg2d|&T2^0lxUaFF8?lNp&KK|*# z6XY##962rig~u`V{|w#_8&khovF%_><$@>)q*JqBnU} zJ@>yZx5f8Z_)3ZA%-iZGZj)Xw`eNc;_2PNw+pjbp*xzqxVykI$ezBF$%%}hESFD`* z>DAki*s1R;o{N6qUVM(>QId1)xi#L`GbU8}=FIE=Sad9`+BWhs-(THtRWs%%|6a51 zW!2>D>Brx&wtScL7yo3Vc{lhI^WwL)TKtB0mzsXRuhJ#k-KM-=*7uF>!xN zF9a{&xP02j+ZL^RyJL3t{I~kL*VlHl&BveDuXgWWnQ2usZJzGlOUf_PHr<>w{ol3c zzl2|3d)q#9ox$C({c&0Md(!qC`5tZZIQd)sG{c*I7OP)R($U}gbLAiR-wM$gmy4A1 zr(Zh%YG=s0zU`5>^?Ti)J`I{1Shm?;`d?kw+KN{@daEild7qxt-9F>FrdjRk`RTv* zF5SK>bkX~-kzASSM$gmB)_C8R{vB4Svd6{#v+~&zd!{ap*4fCTT6#Qp z>CBf+-+rc8Khxo@zmayRm7{6eZt3%HdY`pEP0V1)6MnrT?N-mmx|>Cxc8BjY72B?m zURJd%_)qljlzjUZ@0Vp<+Z|8d_Idwh`?TGu(V^|XU(QlnF8$awb>&m7IUVm`8eOsU z`R(yL_O{@{aO0mxH%>nEKmBc2s;J41=qH`EQrl|UYn}xEc1>Mdnq~Q_F3|Sb`yH_> z16H2+eXUq_xA9MfC5{!#vimLGrGIYzcK6yHi^->R{&kxrm@Pk_v-DEfFK?0S$(L<} z)6%|i9oVt_+?q_CG_&ozPnXPdJ0Cj5(DU^4s<}%OSc=1c&aPf}%*CtG{M~-uQoGk@$cu{xBk49v!+oy}2TDf0b(9YGKUqyW5{_z*gfK=5P3> z#FEK7&uiDU7SVEszKB~+9P6cBO{|)= ztXJkQdbEDRDepVW`Wg2e;k9$#^^?i+uf)qMi&-Mua`qtmU$Joo?Cu`n!U8_IggKA#(v8vzMG9MehUhV4X>1k;aJ1Y}0A$Q6Y z=a{J%E3b!hNlI4hSS&IN*mHiyoYI{^5leOW1kN=)+F&(1bM=yopDYd+E}ed{@!^`) zNqf@V!|R_knlSInzETp)TD+{^xGQVYx;l?&;}z?+q-{Qzvus}N(G4|^Ca2j?$w$p7k_#^30C>TaFy}ibcRRo z`E0`N=KIY*rS&p6;m2?G^tbZiX31Z^?mGBC21?uqio{9`&`ZxXr3t$R{kH`|WqX=l5lv|m*@?c9G{Fkb1so%5;v$EyA}RNYd% z|7PQzTKTPiBwzjFJoQWHX^B&;ah7GoP4+8aRRiuZe_+~bmwh(Af9>0^yc76VEKk?a zD0{H`#={qNn{3{$a_81-Z>jR~@HTx=Vss&xc_H(&h7&6rFXizzoLg~Cd&0YizoWQr zls#%&XQ4FV!GR5*8rUX1P^|Kv{@r)Yn)IzzB6l8?E}A;k_?*LaxtBVn4)d8zcAn(1 z3aHrd|Crh2{!2W!y-OctII&L;`N8|5xe(f*%$_We;3IfXwfl$LH%pvrnH*wEexKG zv76j2U0y7C?D+c*gYD024Ku4ln!ephoR+)WbY}6heW%s8XS_1K&vf#@+hyS^Z5W=4 zW*I)%(_GZ&aqYdPWP|gfPs@rJ8sFYK!8jwU=*TU{3Z^UhDhW!TcD<>pYWiQh=hi-> z#h-Rvp2Seml%%t_saE>}GF)2j@9YWi2wPsJa*kPv*- z{Al6gPaf69!83(-i)jZRbbcMt&iwCYe_(#fnqob@;{^qQf2P>!XUFUBwPD|OGyl`` z2X2-O0a^{h0W0Jebsy&ay689GiTkDVCR=WtJAdw)NR8@D>!+{&uKe}-l;ZhC{9HzH zsc)a!#jV?FqW^Qcse5drQ*^Mwtp>I8Dc=_VV&yYx)5;Ct`_#N;=3|#q-hVbbYrR&S z%<Z2!sMUNw98&MdX- z=G)x==&9gSm2Dw^mndmJJ}K2cgV z>wn?gSH)9LE$+BC`>%|i=8T^^H7EbLV_mpKGn0LZsIJncGwF8g7d^kc|9s8TMYprg zZ_)KUw&&E_HJqNa9HckS=m=@65@S~4kDkB7?&X}gs+l)R=S9q0FM2fYhfMquxi3X0 zbDXv>wo{*UzUQFYyx1tU_d&-ZLn{8i6N(6E%N!Ml5X5J|3h@9 z{>g;Z|7OJh_MLzJQr6Dsx3yh8k1ayt(n?=dPd&aScKWXpvuEiwFE&g1Z{Bk1v`^hc z{`z*bjZYve7SDpo@cjQblf9h%9J~OO7ea>m`-_c*^GyISK@?+s^75SeRjHZ;_ z4%j~7<~@tH66wN;CR)dJcQ39L{@PKycGsFu%*X5$GwqLUTpYbI@Y|{EsU@2~p8P-A z{4KMt_rXsbm7kyN+?JTe{WyQGPlB2M5hFuS;jh8<$182N#lOCD>skG&KMP82OY3UZ zY|!1AebYF4!&LX@9XrCL-XtFV!t_mvRoyfC!a1QMwf1-ORpaB*oj#kVJl_7rYD>J( z>CWam-`>{Fx4f2_$-z?|u=T3z{sq6zWee$&^?>r4NhTf*}x(zG&aE*F!% zY?RBF%ZwIx8BXupsyw?!*noZEd6B$HDSw#L7ZmkJ#2xalo@djwlj&LIv*V|fC){Ct zp}4Br@@v)Puc=da1wM56$Td-Lmdv-^b;p_#iVysnU0e66RP3d3oWz3k^s;ZW|M9YE zMqd1Ca$9nHm!AA9rl-yy_QXwFTV?m6@9XsV9|5!0TZft$?09-!({jFLZ}IhYi!4`U zJDPd#d(hA#y7ZlI+4mJsc~4c{SK2(qdP&s*y}ul$wuhs>M-;XPdo2?aef#I-Z;u~L zD{DG>nr6i*>uX<|9sj7{d-9vU?HcpnPn=lL9If)^!2vg* zCFvD^v)Wr&EyJg5O0cZy*d5IDLGsw9V*?NnorFyFcH;{P`|ci(Sw$j zuDxdiwY$z26n+a|9oHUoZ0g2yPhw)f}Rk#(o@sS8%!PoJ)G4*xk}Q_0dJ z&BfK4+Mbfp3kr4pPxop&EK81@P@=+Tl*|6J|7p0UfB5{sZ@ZWRyR?^VzUg%;JktGn z;hXsi+KF8BDE&LEUk*(@gck5BV$;C1#jUwKbeF>PQz zRjqMcHt3(|t6yASOPnnKD!%$<*wC}fETD4j{Kbk%^O?WiUh%b7!8YIe^N&+c3h)10 z$N6-N`zr2BFU7X%tXQ49MYTfYNe%NAQ^lt#)rof!r_0`BS#qT;SUSTt@xR=L-ObFM zFBh!XwSH+V|4(1{rZ?G@D(PYMn{q{%+7!;UYwb_XKgs_n`gT@kU`MI_G38!nS&L)M z&mC)DuK8e;sBny_-(&`FK`+;wxWkOD+KbmqO)y`|R+7x}*|;E%lUIG;h>u#tDtGdGT!G?mJOS&)e$%vT1fr@wu(>lvkX&L#Ec}nqh40L&3#!-(RW!T@f;0 z#Azny+eeLePBZVC$Is3X^gQ%<-Ko19-z%iN%6eBT$8UOMlT3qpvV>avxuaK~t*dy^ z)UacXL+!0uS!b`?u+}M^ea`f1(hI}q_Z}Wuct-!p&BbTZ7tHFjdN9YTMEh~{vHoAG zvEmH#vnTgef9srg%W3=6JsB>)?|g0CAA0=FcLt5tn=3BQ5ZiioXZpn|hnLw+C)ry8I(XRPUPv z!|pKg+^R_DnWbxPSF*VM)=6cEUH&-LcjI}sf_c4)+v9b%ckrAL%kA7+X>mp6)ARrB zTemZ{C+^C6&Cd}K)p%ixY88j()s6iT{-*OPIT?SuJU4%SIptBpL!H!Be-BmG+0J-e zt7&B$W9MYK(YH{?`HA{3N88KqS#Jr&hVy*eoiu~}>T>%tOLhF8%`0k(-*T{9>73qt z#ps8rp7;8f%k%xIQ`T+^ z*SEY-_%K`K)tpmKZ}#;oZ+^HZ=iv1aqy4{c9jaLV_KT%kiNja#ueVbZzkX`cn{N7f z#otqh+9%w$Dv8{^*K6;&%{5ljTfT1lbnwKRr&m7zsu3zVxjLY7<=umBRUZEXuUm#G zroPx?n$2Bh{rIRtu$T1t|I0eFo#tBKH~XJ&{PNHF(mQSQVj%s%d-L|ae3`p?&xXTYZ|Pw9We_PS4QGmjZI6tm)J`_tfU~WXZFycA2#4Kka>*asSM*3a(7OslkW)bIjwOxPN|a zoS;*#eLrlc;rlgnr=NPNzUQuCyXe~|&AIjVUYobAeiwVGUiI#z-6nk7o(R6~3jc9@ zqu9?Cin8-r#UF0bjZS_xiMKPlWK}S$?7qXfWreaow(Xu)c=FrR4|AS=4B>n-lj+d( z57FBg&!4*YYVz?MtDiG%!!Nz%-Wy!rAK3Qi?3a?~$IPbm&hO&;uso;h$>SN~X=*8NXz!d@ik+Y;1dN(+cTZZcnERo;J;$vv>>tmbq5b4sYAJ-SGxar-JGTK z$yRx5zj16=sq&utvv#MIWY)4RXrA1fd3E{AUjdgkE-;oB(vp4iwbfPbb5(TYz8^;e z41c7}=sS>cfAaR{hwXB6+;jJRKYDLDk51?%6`tqLd-ArFoYHD+CfZ*23cI`;Pcb%(EsYclSR zWq-B%{Z5ANkGpQ&WMQ8dy|ej-(4Bk+25-aJQs)kAILBhm-JqxZ{pQ7tS^qA&KcAl3 z&9{`t{`Vy931`A*XXmE(b2ZG0x*%!IK1J*K{xHWwg1>)piSl;Dy_Pk~3k(c+yCCS0 zxW-pL)%P0`+J*laulcGfloznUU02lGD)FFp$ev@f!j}AEljQdLDR}QneXstj^Aj&| z{+>0_fBi?9`v;qz-$-nK{E02|JCFJH_laxs3;z6ZU-4tR#UtZ8)2pX^;mM!CP}7)t za>a@WKXZ@Q#wm9cADVLYMNBB@Zn4eVsFc_)9U>yKMk8Y4#G1L0d%n*SwO{zCg;laz z<^4%f2_593f%VR z;?$;T3!96l>9yMI+SOB2@`~Y2fk2vu@u!=ot94%eGrbl+bO>m&7+^#0rub8qV& z_ucuw*m&Rk-TCp*iYMGrS3Ygq8GQXe!xh_8n%gxVZ)bh_uz1VaDRKx>~2@h>wo3#8T6{f1y2NqFR(e_sMJ%zyP&a9O>3f&jEn$(fUr&spY8dg z>q_3jFZ>*un1$7U8}2)pn_!T4Yxz<}w{rc4n(MEUV_6Ociv3}{aPW*0H!I7o;J%4_ zR)0*tc>eXuj}vvZEEw3O!l!CKNYL&V`?u-uy6o5b415miKh_FJIEvn6e96Xl>%6(x zM#;6cM;$6EnZoqc6Kd}|d@j`QPw1KwwO@Vr(rLNUO5FMd0>93>OE_q6-Lh*s+p_h7 zJ7VrFc&{3D_cU+7rlq16HgU`U{m=Cyf`eg=+TrTr4H6&b{=O(@E5Z9>R{pKem!-uW zSE=uoSh!#tw}Qc&#a=FVk8JvsD=*FWVWVw+`MJRVLQyKmw#F`)?Zvz(us_y~ZJFAN zSqrqALL_4EHNNTj5)rlkYSIHw#%Nt`nLY1}+Fm?ox$)R4`I+@*z0$aq!4szk2doXs zFLz?L2<-oQET??VES{Nujoa+RdZ#Pi+Vt`e!xp{0_FA*#F5Jr$3EZ|>&LCjd%c4&v z+3(NKlT^MDmFj*k{oFapms?KlS$h4gcvr`KCC0ms%he@4rl~P?v~{ys9P`QR*|*wn zKgS={{dVmevQ9DEuD2Fe{92UbVLQ=+?aKKF3NDr_7cSUzP&59*+}kU^?|hvyZGY%I zhy4Xh7P;@ZR<X3MxwupLZiYN}*KET5nlBqwkkI z&+qJGS5f*9cl+chi_c@xrAl+8>9TdvyXK@ z?GR&Ol+OEFI`VsUbZ*U6(G%I58CRXoioeU(Rac@|_HPRRT<29wT+OVLdZisc%J2v6 zU$5@9omb0yt8h9))T;}8aYg#Xzew&%^R`|ToW0Oly-u&63vMu|1Y54UuaobMK z%D!t5Ur~S2?^r(5ss3*hiWH(3N#FRog`q~TgQ0GF?8ca<-&@Ked%i5)?)fy{nt$r+ z>mSz6Jrt2r-EQi4bVnT5U-#YNtM**~DzX2n0X`5<=7=7qsio#Nv? zY;qdfueRL^@cqtV%at*$@L<(^o`!inv%O1mmd)*v{$D+#p{_l{?E19r6aGRMKW^{Z zcQW(U#>~&Tm;Ww%d8tU@-Od=V>Xo(|=PdtV?EQb+CMo;*$J3`*{PNY0FX{Z^du8z- zH_4;_?Mr_i-=gz4_V?nXocFh1HGQgHIXC)GOjOzHO*Y@$V=mcEP1|$yS9+m5u#HLX7w{;qlS|ML^c%ddCq&OGx=<QPX~E+&+t>uRmDv2{xh3>EbZ^ql8u>)G zU3;ZoE8l-sCh^7MmC}9J+AukV|LHS7p8I&BKTq^%+2*-63lE?8V*Jxke#tx0zmpnu zYBZL3-nNm}Hr{tq{&eSUchOjWhWpoUU&;Pkf5rLkrb~sw+dm~)r`5R1cKuBMwQs5Y z=0d@@AAI_!p0_ZYvVUf8SM-I#H?GmlbEX?^Zr#{-{MwG_&p*TNyUn(qY~Ap%=fKfY zXQ9YzJI|f_(e+k!!JcKgzwPH*>ooqhUowwn&fC|&j-J@M{p@KG#vgLkPVD^YU%Z3Y z8twhE??%hSAn$l*_OP?Tzl_&UtK8~4?cU$0%$#DD3!itMx~W`~zHx3gbB_GGiSPD1 z?cK?oH_vo~xpLoTUcL1u7cX-QFJL;tUa<4$bV=2?gU=0QjpCi7crVlnG3@#kF|*&{ z>*bBx8{bsQy<*ta6PtJR$&_1583f`2q!-9+W&FJPug>nWxDG3^#q-vuRZKs6DVKN2 zl~cPmmdX3NS(HjvZYlpLu7A_vgLn4*sx2j=hf_bTFUnH|?TQ9$C*nK|!QR+YDH>bZ(xXvnS?-(mLVLH>D z+P+=UfqkOwPkH0k?mu?;SHo{ni-&BxQyt^(CG50ToU3)|ux{B6W#z{ytEb2cebex; zNN{y^bKT^3_S^1XS(^X0Ty?PAy-hVLD#0$Iq||VB;rlo0i`Uxi`1D|vQ+QROT4;k& zdeYkLW89Yw?H!*f9-8Et-qUcd?6p?`?@ME=8F6!8XGNOWUtXCUSE*{BePZ=Ri78v= z?Km{&>@}U)MRDqx9>&jQpUOA>6tp?F>&CsrG8O~3pLXYke_sDpY8s{2bY9ftU#Y{Z zd}h0Th2o_*H+#RFKk5J7jBQTRY40`vZjM^702>0Dx=#|R#dEv!M6b8}sy{z^G9Q`Q z1zOY`_igWC)A(PVvEY6G1%|7lyf^-?XZ%xr`u3uE-+7le75!l4Yj2vJzqh|=mviL~ z_uZU@{c<~N`5#y_{4;E*@2UA5tMFgI@-OSP-})CE-hKBtt$XSr^OVE)jqCQYKj>$u z5$DbLS6mYC=QzW^iCdq?GyZU1Qq#WW57*N##thn@-Wp%I+@5jbXxEf`3}5{jYI>r? zO^!Uu-oo*G`?1I64JFM};+bEH283JRsOx6)tIsXE$;mK*L%(}hT(rxVSwdMS*`j^cs|TL{zo94k$=;3 zR*&s({~z6DA!oIIDf6Si+{3@G9k^Eg*x0S!)FEi1(F7|8p09gsSXsrp|Gn}PSkTCp zdN`W@^6VAWQ*xWUE|`6n<#9@PY;8Wtsp4O~<-`kqiN^nuHzKFRpZ~n3@q%c>3!`m& zZSFIfxd+}W{kfdyiEP%btr-j7g=l`z*vo9tpU};>Ebr5nzt^~!C*Iw?`N-m8eKx1{ zVekL_W&3u2uZg5&!;D`O%Xm-dGR#U5JR0b~;Vur~YEk#{Ql0YZGoH+Fw7RySIV; zrhHXnOOrtGwvWfptCl7dy`N_!`k=?nWJ!+fpVVE?lY>&a?;KdvYPGA+=;@4ty^0<_ zevUlbRZsuh%e1P&jF02T(;JO9nWy`|EqxMQVUo(u(e|(KxX#nXbxg~ICy1_`@%Q7l z3*|x?4Eg%X{5j4ncT>CPaIr4)+HJG8;e+g%e4F`=YMJgTvzBiwEU=mF`)T$jQI0s@ z>tPl%ZaVINWT7_UrhdLaWOa4UpUfvI+s(IxR#mpWVEXM`diM6wjp5bup_5m~?+84r zx$Dq#)4sVCfkz88x!$_HvTD8ZM*qSyllk8Mch_y06LLG^WD%3AzLdm)RM%TMUxh;M zw<>IEnzFQb#S7M_ZuW6rwSO3V-S2Sblui$R@4i2wt<1GVGxL8zOy>XFKfZMHGg;ox zULXA1t}u7w`(2S2f3}?UWSMp?xV&$7-{R{JtxkVbPsrUKy7jjG)P%E{?$t3GdCyY{@sb4`cI z*$TJ#F1}>UIrA$cztrZm#piFEdAU9;jqMZXxUuK(PRn9Beyf+C9?zO#mH)nU?UPLx z{7<#;Sxo)*@lyAuzPA#WUfenM$F;5VtgPul`^_8?@_H_Tv(MGYi0k&@W}ViMXSkp(e9)4!PJCS8!$kJq#QSfo~VuySq2f}**PQ_p?bc<}3j zbyL4sTb9O6`cf!b{mSfn%GbB5`@58G=>!EVG#Ng^zbkDQ8+Z1y+_NuC%y=&T z)Ar^!+s(>>>Y@DGQUX)*IbXT^VlpywiTuRO2nFX77?}FP=MlDSnae z-wQ@BHYt>JL@RQxz0a5Nw`li8zne-@j{=U_iIqQOSod^p+br`OW8SwXKGmJ>%ZmLq zXU~~8eq8T0q??ZHJi1|Wjq9b2yixvds;@d0e&#cq|I2^6V*Qr0C6}}2iF`W$%wui% z&+CPru>pIhRr9w$uY8<8m0xombJvsIQ}@r*cUruqZkq7vXT@752Ig@-ua*5df9mS0 z6(+NjmF=Uqb?!Q|YjJGHuXCG{XXZq&(SH^9ME}+Qp86J(%|_{O@4s3eIXAlIh*9K= zX}ohq19ajyl}mm;EqU%0)3NSNz8f@EiXv}z&)CN{FFE?q@n2$oYNu z^-5Q}`p>Hx&*#r)Jf42w?<~40esZ>Pz@!&zPbxD;+cjAP` zOKq9*_y-TK@~PiZcq|$BXm>Hs73`hhfBB`4v~Fa~ z(-&UxN@+j%m1n$e)C}Dvdux?q-Ohpy1z}HLwT0QsERzlM&pEHTqRuvz!1Ld{t4mkASWZybqc!1I@cMps&(gAI zPgy3U*QS0paVXnVwa=5``y7!K|3nggUVr{P_H({(UH|DX^JDXS_d({pV_(ij+P1!Z zZqkk;x5C8S>Zk*h(erUeI``KcgXU0pqFvEC>Ee9;jz}@H>Oy3vMNeI2E;E|cRs-X>L-;c zhxu~<{WEL${^sZUHGS6^{++t@V|my;dne|_|68{kzun(`_pb4i+4_yYgq{{S>E360 zWjy7w?W?Ezl`qMy zoW}YzWA|#yh1ae)D(vN*Q?VhwJAC^>S z-Z9x$Yr$SDd&|v2)=c0zLjzyX(#6SdXPubMljM>A%e$e>T!%dqr?w2i0yT|yH@5J{q#)cDlm3@3J zd=ppPEN9uaYfX{&>xS~*_P6_Wc6*d)$nO4}!621dVe;9l{p7`z6!TlxL@h+C^A1ll zDr|7ddK;6M`*@zu+#e&pdVVms6t? zLq(=@xc|n+%KRFRfGbb^>N1sc{#P?3xP8!j^1o!uO$)D8zqgogdVbC@z?Z!;u+chA zyY0m*J2##Ex637epKG_`y?M;&l+vg7$ya2`U-^`^f8pb+DPv!A#+WN=*&driW$(W3 zkU81@v(ci@Lfz=m_P7osmxAeqi$1Nr>LU3kJ3T>jYB|>@*K)aF{vff7QMD&Ry)rabnK}>n%5b z2j*NXSmbxi;zavRg>y4!nz=uJ#j@X|wdm19{srHkGA#2?i!bGiIBcV0^;~>Y$VSnN z`^A4-Qo3zlzp{2A^Cp6_e(QgXg^b%A+$X<(S;l!M`wXS{7McU<(mt@T>& zTep0~qd6)H3342>KE8am{@W%t`E8$k=RUVle7&Y6Z@cIn$&>p{iz=4=H{ThyAbyfk zHfw%U&+dvuzc;TF{k9aD9i0D0+WN{OhyS115@(#Q{26NdGhJr21mBXKInDpFquGDQ zGs|b?|EPZ{K4Yz{p0HM0a%kU{r!o6aMTOiJtG&9fZSlLAx{}w#{y0D1)nsh7+eP8b z-#6^+3!kscuaoS!5wyR=;aY(W%hJCmerj}{<6+48=6hl7!%b?^-TS8X|2B%g-YIg<07Sg|5FL4_^E1e{tlW{f*BHrpLWw4Z5&vz5C-I^Ly8uRMvOSo5U9T zPVeyj)L*gr_rU`~e{~o2W`5b;r*=EY|55bv5BW-WZ(j<2@_Sva!Q_)~?uPCAVfiuQ z-Vd9^+3nu-_FMmKuM~S-nKdu+p2qYOpMChI&)eLy_S3c>9VVAA&ioTu7qhDE?Mlu4 z4?n+t^MBTR&0prxdgrIz*}UiDf9d&OgKypVCV6V+)4d_nr&%lKZqDO%-M4Mt(T^gR zH|VF$SN|xS8g~8K=k>6K4Gh%1eWv|(=M)sK9)uNNzzrD?QZIa95~M-=Y|LY551?+hV`nOC3*l<@P;}{Jd&T+WGDGj_;b< zzILac|Ge|huCLht=kJWWHLrGiKeaJ4)4!Pf`DxBN=BoSEl9@H}U+pdGw?BMTz-VtK zU-hYFpSzURsq>W!{`3BgZSGq#?|k>kOWVI}G?J~I+3;KPrFQGpNSy%YzqkMR22^Q& z@J_mWJu8*Zu3v#U_r1ciE4L>x^sCgXJ!4^?FB}ucRZznqcTZvOMvWK0Z`ZM%{ki;% z_y6C4vC8YOZDXv_t4nLT!0Gb*|8-H%#T$+PpFH>c!u(BL`bivI306;^cI|PnU9jfz ziEmo}CZ4e~lo$Q`^7KAeuji>ODufrzCht&h>_4YyD~4W6Dt$uOI_Kc zz+8H8rC!9uw>+Mv(vv0#6-;lG^}BKX{Kjdb2i!fL$}_%vY*k20Q12g4Q+czkdmR{TlzE_z!DC^qLC(^B?>-9G?G>Ek5Dk{Ksd16|Z?J z_xf9FV(Pgx(|^xS*{@T0tb4=Ie~#(SE`FGbY2kz&yi-hm& zt=Z$d<@53nU(6=nlwYoP+kax+V~4-c?#|S8C5T1RewX-kgT8y46nveYq43%N&ENHm zHH;5-{{6$u@L!zazq*OSul8wmTTA{Qx%7wIWWo3UU1FVo98c}o_{+}ex5xjbSN}2{ zc)!rqpkDrfe&F@}PL?)X?jHSQDdk}odG9^r4+dTxev=Eo`7fG9@?}VS=`;LMlw$a+ zoPEETVgBNEoCn$?^8QQwRAYQ8dg-0_l*8WxuitmpV!twVwtY|CKh;~uE_rMJ7F$t$ zrK(+wZ;ti8J1RFBE95ozyPYy$@%7rgufG>(M@~4EG%-h*<3Wz}j*G1q|9v}Kce`J4 zg2*!$i|$_%-wWSNZ}v>NucOO*qU)0R(W{zF&lW#!n|*xS^BG1`4bh7;rTU*ofU~#YYj?>>hyyDuh`t(Z1 zJFnJ#p80K4>$2H@)PMZD_0E#bV3pf)pPL5?r#=6&%GKL`Z)WZZ^Sdu6c2@$^@MA$c0ZP9(hvCi8fZPVGO*W9l2pF3}4 ze)-xbqo$f}!&&(=^jB!dOy>Ew;L7bYzviyd*>;d|$D(w;b7DWOJI>#l>6#yz&h}>$ z|Jw7v*UjoZV|$*V;#z6{7R&dyV>aE{`hR-!%LWnShNG#zlUG<@Q-AIJ++E*rJ?jeo z#XOuF^siX%G*Q-9o_}xq?!5bdlNu8Kv)3>E*1ImVWZwnD*}nB$LP__HbaPcp1E=4} zeB!FVy5sXF$sJ*8{VIR773@#7{ET_F^n388U+q>aCZAblwf1ppTJu^zH>Ybhn&rEf zyq3IL-}ir(FAvMfpgPC(Uzzw>*{iEICa-&aXn*tKo9rv6+cqS6Z?|qf!+PSanQ8B) zkKbn2Ugy?lOW4wJLAm(yx*79AAIqu>=U=dWuRfPqu{Qqc+%?Um_nt+3%eR@kyXXE< zC+5nXQv|Pz?%ZEKTkgQ~t2wV1$iI>Q)_78s)%KT7<<+hJIn6hG=6}91UHI-d%dT4K zoYhUo_pUy*M~2}pAK%?*%fl__9r9l=Y}`0e)t`9^H*hg=k`Ondbbk7$)7MUX*nISQa!vk6iPXIxXVx4m|6>vuCs=2{EIazklzqAn z@A};H-)b54{*CYx&ByMq>t-7oWGCOr>NMHxy)i%e|FKVL^J8n4Z3>;<`AYe6$L+#X z_f>bsNcBhmHCyc-!=HY@<&#&2w;Oxb`B$@E3V7c2m{oVJ??n4F!P|@KSJ!OqInn>^ z;~V2y@7VGbkC&Yco4h~SD)04*-!9v4a#TIPrdPj0TWj&!GPka`0UTGu=DYt>sN|fW z|6;jKiMCvZ+cxJn&o;$x z&Ud1&7W)3Z_>bXS>Y?1_H}{vy`%*-vM0)n?Z9R|$MqdOYvx z&8Un=t2^IniRS({W{i~hdVn{o>}~3b|Erkt?j+CU5-Gng`+wp36-gG~O{dIuF*kB(;rGRKV^~OKTyPPv&XIKuj;FFdKv!D`c)%h^;foS&2&r8ZtG&q zS@&Q4!<>ny{g2DNoO7VKzb3CfoNhz zlz+VM_Ww}r`(c{*fwAnR^@*=yUq1+Kf6W`WlwD=d5x)8k*8he^b-mMn2&w;J+F$XP zHE-jC+C2w&|H*}g+*&5XO=%lk!aIIR1w!0Fh*^zCLFx>;A9y0LJFL-^0! zxv%%{>eyN?a^YN+mkAlB=-2U_T<%RW6y4gj4tb6^!(qq?k)20Ud(20&p-Kk z`^63h4^9CEtoe(xoE?LBNi>ewELzmT@to*{UcKjXpM|GEwTWe)ro z<^8j_eeuKs?kmLTE6+RkhcLtcgFotfx4rzjoMB&bz5Loe=3&R5JNy+Y-RrK)xwWQg zir9ibJYT=)Ub$Qz*e7qwP!-$wMYKxg`}+uM?gssfer5U|mF!n!waT*_w@G)UuXsIu z?VqaKKUVUXo(lf=!g?+9fd=bm1?|lLpEdrRa)I&1%F=cwokm{u_FO6Bz0GH5&YOLF zlf9u!?3x$s?&|r3c!I{NE=4ZcNl$HW9Q(n? zn_yMZe4(-VSyarXQ_!}qS)#PIaqJk^BCw916@Db9Oe%+vVY!4Nh1@5|81?rJ}D z%q6F^v;A-~a*%zxwz}Yez}4vQ!kXGm$)Z;tO=paV?0L27K&IPS*SrN&?{YKfOUEDA zzsQg-(BA%Wo864X4Gx=4UZnMZ+3W7hsZqit>5$i~zO_vojgo(qmrQRJ&Ze^7O=uV}br`4r?sx*&0kfYjg&$oa0j` zqt23bJwPqBIO~^7KzdY)^{p?{4wSLZUM_8sargI}-)EPxuZ#D5HEomWE{)@rzK!lp zvx6TSGS=$6ytjKs47+&en~3@Rl~$*Z#0dp>JqYL8Gf~N4iZdf_iNR}Qvqu3e_QwI_L1 zn1XEe-1I3+cshJmbSEj7-1&J&$nQR{V4twtUu}sm0gbns`9t5VUvHXsODc8eTVH>E z$M+YWK4AD+5NUC|YU|f2abFH}i+6nptYB<-DXV`?TQwQO0= zq||sf`(I}+G4EN#<>&FPwm;^aIJ;!&b+nvx7ziUKaJLJdQk2Wp?~n7->S(Q^(S5FpU2K| z{$}{1bSt%x_qP47rY!AV@GH?av-m@Td`jP^!cD2{8s@j$Ee6tX{Te?iTyfuKvgQKjac+wcVuKCb0dT zyKZVw#N^*Mddj@7txRV>R$?m^zw(a4ri)v7Z!a(Id$H>FtsT!CrdRLF&9wN>_x1Gs ze{T=x8&}6Q=Uq!W9DIGb(sYY+tCq?(yia_)oc-XJM@zVPw*AYgJ)W;^-T5Z;^!L{K zbpAurKZUeMyvx~>Ss%b3T+jM*e|n&`b*25<$16)#u8HvbQ-7->-0;P#o4=f&@7n(G zs~5E7 z)%e+;3SaYlyd|S)y^+}Hota~?b1Cn^iO4bPuuuM zWApM8HP^n)oOkZhd5^F8uP;AdS!+6Z`Kb)EwzRi9Rrc#vNlRCF)~9`qlRCe->hQG# z(Zcq-ljm|i58U(fq}Aot>v!rIHYPjD$5H&AHH>YpD#`hU!*91#LxAz+S z)XkfqShZza=lmr#;`Z0S{^#=4nlvxEgLB5+|1UFl)Vh7QOg$-Y7kqPe_Y)q0v!6IP zyY?_Y-f@4E{1irgo`5)0+wCD&uLfLX{KWO})@}bc{JO#KUVSYqxNX19`RSQGuf!f( z7y9!s{Aenk+wv#AbjJz)%+q}NCu6o38=d>w@lq*X=KscdQva^iU3xyncZ=$yL$a@u zsw>-9<_T-hKlMMSCT|D-rOZ;wfN{>k@ibU7E-TZ+g%-Fx-e4$-p;jE8qA9Qe34{B!4^G}soP9$)G^L$u zjp>W}0K2Ariyd^itjf#}B-NcrW&CEY8*q42_D_iejt74~Vb|IAZP%6cV)bkvb}~Nf z=Vx;gSEyoHY+Z5pRKn52n{Umpy!~=^=)U4?|81VnT@oyr`#RpIp4{7)(okuCd}`Fs zCqGNxJZI`ZlmC35(S`Fdp7MrHJAVfRJ>Pw0!E7@<3EzEdV&~tTf1u`A^d_?(61ryX zVGlxf-+dml?6aSnw6*5;Ev#?LS))QKRMtdn@aJuq7f=`@J}1l7OO%sUbFIh9M`@8C z-#pX4b8nB+I`fE+asm6AXYF%Zxu4|&XV@P@zpt&nA^ZDT*9TmRf3)Kdlj!$|SKlYT z;#2)AqPq9kx;_0{>RMU#FN87XPx!zl$(|CTbHZZbBS!Z-541z>EO^8wSv`l3-{NN0 z8$RmyQFWK^veS>#in5oF+*CMsAx8G&-gQk^AFf=@yUo3FR&2NEZSl$n{+usM zLQS-@%_gt=WYgEs_4#V(oR?esc6{nJigvQHyDmC)-LevuG6Aa#4fp5ITl*o*|NF}6 zvc3O$j(xJ9`;GmO^}hJ!FV9_mJkjddx7y1kD}D3*Yp2%t*44q9H1XVsCe8iQQxEg= zcGdK;t@tN!VEcu|?ez)o?=$@P&G0Xn;lH%^@!M>v&5Dc%_*R@>`zJg@@XGxMPv@tt z$?voHQ`GaVRZ)c>R1!nqv95?Wg6G`3 z!}Rt0+MaZVeN3;Ohw+;q*~em@BIWQ|QfOaq)I3Jj#nV#ac)P#F**izZGdyJti0^oF zt1WPCW{1t%_NzO~O&ThNtTse{=6DgzsKR$@a&IDoZIt%0Dz5b(_^M@?E0&Z!XrG>$ zFhR#*ZI#dlKJzR7cR8Jovme|Vxp?)W#?_ZD@qHI(&JkYV_wQBK>?>RC%N(<;@9qMd@r>4FOx#VnrE^> z+d7`Jxvdh@z3c5Sd6lvF?Y1YoM3!taarl+QP%?FUzrVCO*AK;jVEz0Lzsen=CSGHI z+&Xdpb-n#Q47(Uov!8GMTc*$DW-#BPe@X4V_BzW}F9!z)<^$KCMDP_j)ZHuH8yK)X zUM_IA-{M*80?fAXmn>@E=J{4UVwGfx<(+tb>6*q-YUiZQr< zIc@Pph*eCz>iy%^PpPr$g}$9Vmi}obl~+aio}Du6F`*XIR_V3c&%N=q(SYq<)Ten|)z7==LNdMQLcN1$OpEK=0vBN3l z(08-EZpI|h56d4h&MeVbClI(xylW0egznHjHbnrpZIl~v2H`0BkOuG=|(?fFvn zI#qGi?teZdd%f&`MX62kjb1cyA*02Ny2>=8n~U8y#O;dxepunE&-$~OQ>KRd&Q5>p zDR7gqZee?~PHd+R@9`NYme_dIN83*g&QD&ed-kR8@7zu6SCl1o-(sH188uUGrR+gH z^`8@WDy8n`X)6{u_&)NQdX4+<<=YN0%&@!uGKSw`Lpzx1I+$*{L27N1xX3-BXb?_3w0*wYT3J zO#7O|w!QnzVl&I+E6$gHvrKe+@IU8`W6JXT3~A<{&Xpvor#hVy-T8ZIR#m09<8GFo zO^fqxHJZ+6%F>vg+HSV{&8Zpg-$mIhPsNObqON%WtWzt{S|U0V~KnVzY4GH)4s)UmMn`Cl`CEV=b0 zxjRJ9Ka%ZumGaWwl24Ikg)y0bH`mSnX#V>2@)uXu*#9WMqt*HK%&qk`$90$K&P%Ua z86D_amr|Xw!uZDg(#D_$H(%L~<#zo@$W@3Csz?@G;U4S$J9AIZ)5x3*S1ws>Pqt$XA~dz14#T}vKM zOpV*b9QEGkUrX9iyGz^VsOWy}{~PNRbvH}PqJ2~5F4ZTYf3+n}U*Dhp*nRtgFZoxU zx5Zw5Z9KKqXM1XR^3GrNvdgFcN(l3tBfPlx=B8e&_EmjJm(0#iS3SGN)>v+P#l9*3 zeV(117dm;h&n;7t60_x@JO^^Ox;M+&BrfvVIDvD0&2)zQ(rd1@&G}WFw#+|i$C{A; z`R8BUj$n%C{P4G?Un#e;d+Fuc4AyzY{l@7$yH5SmdSK_T`mTCj?1rp8uJeOMGFRo+ z*Tnj+f3xR!6%*h019|;Z#IK}YKk(fAe8b;d`|d3sKb>!W{quioLPv<-0+ZM33;vX_ z__cp4t|<_xN;*>9v`f?eZ)cI@pX)c@BuZAEdKA29PQ}R@J)>h9w>vjR_8YlnX>SgD z7=B)LieC3$x#oPg-xG@z1!{Yz3olq&!|b{lI$#auYc^q3But68^{fxqmZ ze++;6w%)n17Zxo@KfU|Vv9Q%l$0tqr+!S?9?eLTdLIusD-dbhzQjg|+_r7!YpK94} z(XU_RUVUl^{wI0uE8_u1N&ACA|0R~*OR}B&A%NfGxU@_`d-!Wk{ptN1z4x;(dB1QP z>+(;*HV+scNb*@cWV3fYnjP{-O1rL6e8=IY=|6^?gy zzu>^h^ex*~-Mnk^_f3~TxW}BcC0m7MU(Y%FlHt0IkMZwS2|pt*1?*fDT(R{NXHj@u zso432HnEmRM0uasuIIXRHQM0Jyt)lJFSJG3u3m~v*tRM-?y(Pl4@3Fc#q2^`eCB>F z6;sQ+@ik)fucwODnl|Tvlbj@BX^yr!LlKFqH ziyqhicHr>y48e2u3?JSz{*k$J#^dz)iRJMNWXe|DSnTS3e<9=J{keO#^4dL6clgWX z;HJCZWS*Vjy!RIvzpy|4$tuP0clx(Cs;^#J`W?UT?sea}bjl}v#u~mQ%t5=H*Sa%& zf6I2}F5?P&N8R}g*Og~5e4ZT^9yj5GV%ARA{ia6D6^&8X4g*;l8a${-22RiRD#E`CZDlkLg(Rbg((QgHkOUoJ5qvG5qvqnjO;FjoLa#WtzRyo)N@^U0>_8j3*Sk6y^#_wCnaI`HemYmy|q0pdA}kn z7cvH2=4L9D;aRUP^X7@?Ba21*qGoXwU(t!%C(8C+R%3=%YKejQSBp6U3m5BJt*Pm` z%y{yjph19TY2-XcgQE+VT@*8|T0UJrp)8`B{jcJFCbmU;Zp`mlu~y-{)G@uMc3T2- zT^!51gdFttT-x~b?&{^rdoC4Q2CVrvukQ$tj`^i&HFj}rMv(%tH7~v$eLBTu-x<9H zHQ!_}JHGW^;4+hCrrNEA7jn|9m|2$PEoKjpF|bOE)SQ2@vtmM_@}|cz6W&xly&+(| zy!h_TRGmaUrU&9PCj5_@UAv;lvC;a+>JydM-}ZDz{p$V9yUL<+=CNZ5&m<=NJTrG? z47bF3Nro3cmQJ4dcIla)|5;^Qrn>!pliBQB$guy^++Fd%jcwl?IIYU@#C^i{*R%U_ z-->_iuDrX*`>?C%73Q|ojT^0FsuZfse%xuQTjj@h;E!ub>~Zxb-zy*Vt@;_|_R40Y zF3qXZ`X(sK*Yk|`&8JvUPG3(7lsLv8ZJ+nLdqtK;k@Z<_Svd*!K5R}Ip> zFfD%=#9LzdtGw;o{2MI`@10;z)!uVK?xiXx*NIfwdDE?ye0F>L$s&6G#`l`mZ`Z4Q zTD14NrAx}XUqQXc_i$(a*nT2Ze~07C_DO9ozV7~b^X4Ays#z`554KG)3p;mg@y!;M z>7{dC<{n*ezAm%r>t_4yhXb5tFKw@5Shc0lAZC)o--(s>eb(%q?2^0IE%{v2Jn!gc zfsJs7CSg1^d?iTC4r~$)4Ar75A6l zIG3~El!+&I`RoSH^%u(j1V0r!KI>+d-RGP?Y>W9?4BsqYwKebDN2~ac3nWj6#BzPs zD6rFS{={3F6I3JqjP1YP!4=YZ-81Kvx%~*OHo0OvJAPY5LT%RfMKYiJo?F&D=G}iH~5B{<)^>zB} ze}C7do=>re<~#e!YjTOP-TbI}ooel~Pc|nR|9>*MroukjFZR)2%}?`}GV5*k{JAT| zJ4rJ7?Io+E+uJVXU$tF){MZSx{n0gNDk@H;A5^V;p?+X#`Np^hbN=7Fv13Vd{%6aL zU*F^&`{pD5qtZ@V-~Zy#<=13?``G&{|FHOU>g}Sn-{PenZ~m6IboSCv*^cC?(KlI> zx4eqrKh1Ib74yk&Hzd~w_CJ1}{bSCxwaotOH=UiNzbpCCG{(wk=cvEA(cgpPw)Cy7 zbg2w0DADoX?)bJZ^gx~VhRS8xTFg&tPqV3NPX2r9AKS0Yz<<+n{q^;aaX#&rO_X?Y zFn!lmxjP%v_k6OwZO+U)Ip5=FiRT@!zsAxlN?%FLxhkkHogjDZ^e1Ho+iT*_PfOKJ zIWD@_e#W+hE0S9crF`v9*nCrCMHY_VAxuz3oJ)TJDtafZNpwH(U{)O zarn54kR*HJ+}N_rmpjr|Dtx$^y78T}8vm>HCi5?y+WWh!u5xYYl5|z3-}l<0q9yOO zpK=$nYcO17o|BU{(N*rhJ;M_9Q)WM6Bi1ijpJ5c0wfcJr!@GD!O~tq0R+yI`cw7A7 z**aIp^y+M@_g-(CjX&)Cb1mc9@?`e;^72v)|2`c1SC=7pQM4iM&73p4`o5YxEV28< z#NHyl;CB~i()KSOlVYAM%eTCJ$6@ZN*yTd6*E-lTu|IBntAF&Iv}-dPgZt(5S6i;u zZ_0RISGf1&N&SLl{^vxd?wc^@;^JlEJp1O%d7Cr$7t7kamdvGwJEhKF3E%G$^~GE? zVQuU(?@fOgidNm2I_+6Yi*sbagxK?947;ZUW;vBIz6Xrr zq^z>$#^d`;U&U6~A58o!Zt>*5;P;p65gVP4zF+w4zs$-SZjbs_Tf1X+e+AZG-ha^l zvj4|LYgYW=S^kOp&4ve-|0MK3vX%c(tZR*b$Q!qC=UlNj0Uu?o-)va0V3EROmIqIy z_9c}ws}$du%eKM5{c8@})kwv2E-|ue?9K~avt8D`xp+?R&uIQRFLI65T7<7uzcT{RF>N#;d-!1inzGZn~$r zbxCsLyUF1h3qIK1nv*ec|HKOoxAhroSlr~~S1@^8HPaTB`tW-c7U{ zO{o3M^!3NY)F0v*6VKOkJ~;mEP3@JhwNr|mEYnu^fBwwPaDV%k|6IC7zqqe#a%Y}% ze?jB3`O(okKYnW6`aU{C@a%rp2mBWt-v3w5I?1rFH!40#x_RbN>DC`I0Q> zu9ver6YXa{R=T>)v)Y5nj=kg22j7&t8?M(1uWI}{Ti!(9R{#5ga}CCu_fC9}`si4h zrR4ct(@UROZgiLAV=CNWd0#)dt~cRy^M96bjS6Ye8@A1-Qy3&KKHTVKduK_!)rFg~ zGHhGqzs(l?p?Kc`hMJH4*)eEECRIB~Z!UEB4|_fFMD#E?NQnif2QXqNoAH>|NK!D*z_W9 z<%{^9OLi|TO5;nWEGS{!!F#x4S3vdLOh=`RPKFOvP4`#K{+_`gKP`0kn!t<7BCq1q z-|XbM&(Pv`RmRNo*eL@y&Fiz}wuUi&oB96xLcZN^7|qtrY!~cb?Y6~rz4X?lfePjZ z+jd_l&O1Lx-b&}_PS*lUMxPZQyp3&m4}N?0VBzt)4hemQuyG3c!QYF6w`}qM{zf$B zsoC^%u2-!uA3bPh6t&0FShgm9?OW@a-CbAQ?;X0c@NH7iddP7BN|)bm+bvrY51QRA-Hn;027zuCGhG8I_g%$mz{X4`Ms8*A$%a<|`%@4L$Q zA!cbD|W2R2^!ZZCe?xkk8+n?* zon-Oq?w3COudlFe0m#n+n zU~(h$8>jxPjayDWyEo_73~9YcuTRQmnwh&#)=xF$m>Ip}+QjE}`^9)ZPnO&B;e|kI zl9}pW<~y!x`_dl9NTe{FD-SK1`IIg0N6m}L7WpeaDm`&JYbZud7_v@7>Yu0`J zJ>P2o_F|zt@vobvarE>)5$Eo>cl5NH)`Qn9@$Szy*4REUj@hJ``}nDzUht{Kr)F7w zTK#u*^6tL#=aep;zH_ul=FGX882Q)RW!!3e_WY<(_&ZmqP53$2u`tOWGdBG^d)$NJ zD*tQ7AUFA6o5DVD-?@-#CsVap=FBl`j=RrN&YH`zf9qw7oV|NaQ|`se5Pe3)^)ah= z>k8Wa{V?NY+xd%Aqz%@TfBk+_O7HuYeQM_|E_+7EuE}O-X|G&-YL>F&so=k2mrS>O zd&!7J+hzTY z_uV*l;&@nnRwd{2PnZ5|F5moV{-wT|`&{-V-<*D`x3+qvPm4+P`FqRkOR6)%@~&K7 zyKnx>=Q(%I+NmeW{hb}%9sSa<((LCJn`ZwbUtH@V{P{As?7LylIlcen`4r**`>(d& z`WEqg+PpKD&fbgP1}s0W&U%ZIn4wbYgp+^2WHPE!@WTS^b~)4#^>0kyYK%V|MtSHY{^{ZfDR`C63bC*x@Sqx_aqaZCoZ$0X zRvdd5%?)4qtzOgTZ&0Bv!|Cp>hfF_0*8bOS`+HN@!P;?W&A~++T=IXEPfdS%I?-Xd z$*;1TW?D&`j3yfVcqox8D|)y6^z#{CQfD}5Kb`pCz^|e=2B%Zf4f5VKr0X|c?q&;% zE8|@wqkqqidH(5s=HqAo*I8|Q@$faL#ay16y8H*lzb)@6%gR-meEE9i)0{WoclCXp zn4Z5(qnag+ze*!@%@xDb^NsHKpV<3p%B-HhGBda4+aA)l_6Q2sd@=D<@9`+!lKkhZ zvbL7VTFt-mbxz|cW3H_y8=t;*WyuWK@y|ftC~S$pA7^v@<*$=|x$e9+FU{imX69)} z{ko=g{jGAcd{>~wneBUmH6lP~S4FbP+-=wED-m>Y14@B9bZJ4@a_P^;zUtZ$hWe`Dvx^MS9Qd+azYJ1_BQxWm1~o9S=- z=O=9cmz?tEgWNZZ2lWS}WdhzZD8tm69c=kmh$ z>8m&2e5E{T+t#mNgB{=h4-wP)|K`!z2l?(g-)HN5hD}!AFG6fr-~alE@bc;{y^YMj zjve4UF#X$|L%$x0HdJrvU7&yQ!1I#$)_&Kv-c{NS@ytK88Tc(~zt&ZKoxc9VoA2`< zp6#Fi@Jkk>93R6!*@o+3?`<1cf2J{hV7wF*wd2v(YZZS?8|E)+z8}A6C&%QE#m(Og zYy012RcG#>zp(N8{DqC@?VXrs{HuC1;0*2yOdo&!5I&!??opAWS9AnY-|KE&K zoMl)354#{CWaV*|?=QdLuGIC0cRL=RZ#X~oK*rthwY9-kYsGvcLQ2`}KCgK9q?BDH zt}s42_NG#=)r5zMIma2+-8D5>?E0<5!74SP?*qrapUWE0f6hH^-q0K!k~^ijv3~7; zp$iOGtrhN;-8;?6CszLa{JPJs3pO{&lDJvb)!Bb*UVOE-P?&MUMM37L z{Ws|;Q@86`RIC4b!ng8;(G4mG{_K#qxnZ|ewscB=^Me%re>wMqb8{wbI+MrKpqp71|p+3#V|uNS?f|InQ$Mah3x&u*I6m+aASf$xLP*)$7_ zDWBHAP}pe&bx@+!~qri~2ae7M17aN0L%)(%wzmR?nLF_t4hvc|yrMpYK`n>B18ehN)X) zN_PI({NVlExULJwBYY)K-kRA~sIcd$?W))fle=Vf5`UV0{rL9LilPZVQqK+qE@%!+ z)ytAx(tq*o;Q~qbSC41E7Myx=fwOb+k~yVslx^=k`RptDFEqS0o&DnVy!#A4mRcO% z&i-4ew=^yCF@Leh>vKug7UvX7eSh(0yv*p{$(LR&I%D1%`Q`i4W&J1o@AeVeHD`)C ztFv~&9mcgAbvj~h*t^cVZOrOiT|Mc>#R>(_dFM|&Py1ro(|+U!?~8=@T=D8Il`kDl zSc8-gJHATaWve)U@uD-Ae=N>c)DJ)J!PC3t_$IfDC+_(O-*&Q-oEdXH=hs~839mLU zmEAR~Xy%QCecyM^{~XUMq;Fzz^NV`X!niA0-%h;wXkefC=JmtbhfY0|nUiW$A-7d{ z&HTq%r=MLpS*&^d`t)0MZ`14cAI(*Lt9-He#r(-%pA>L5PZK?UY>lDWwY~3?Ehm2w zzi&VB-p@Bj!|bL`?Fs(>?cu(oOO2pwj`s&%QhjmXtm^j4$FsAZPdl^kT*)7id-s;T z+3}=CEA~=*Z|eKVx&0S?{5}eQ4!Wfqcdzw}aKdWcLe3pWgCo@JX6n7{-FJC^`lsqu z|IXT(-fvTz|0Z}|(k$;k_O07*s(;aWzvfI!;CA`d^={FhZfSkqxb560yJgPPf7G3d z;JN)II8N{H+OJDL*nRV@@$Z`dG;sg+SIJg|hJKo-V(+fwD(#$~wePvyz4%MJkAJD} zHvhLaw}1YE%^T-m^plxzUw7u&6#3(cfA(C}Juow8F?Z_f`DwY`R?Bl|=dPR}|J3wZ zck1!)(<>e<-=9x!M9*R1*R zUqxT(MYTu%`M*D+XPvk$G3V{Zu;1-zCoL^FzMpcQ5?zGfH=PC$V=vzp55R<)EE4XO?mDa4O>D(zoe>1)aT7THTfZh4TU(3aF*QZVi{L=bWymrr< zpvUs&4!6uDQy9D%rv)F1Vw4dw;+j@;s7bgXr)u_uprcK<`nFt2k2ozmEo$N`cZa`b zMs;m1{}~>LYT2<};#T-8ASwTl&3(x)L9Tu6G5>|1{1Ot?XV`P7>wMsA+Xm@3uiihd zwK?2Xy=Fzkw631#9xs!xR5iD}zZJ7b>dKxZ)(_8SOvp8}Qe5ccaP2tzTuX)hkGUF* zOKn2TGNdiM*RQB>*k&1#e#PSTr#FU|Uvf=&*_WZMzWZur#K%mz1IlwAX#9C~Mm*hF zZd${K&ib@Zp!9g>I=EJUg?onQ_T@kw)sc@%(Y^uOgmZX>Rwlx%D%$y z%>Ja3P(DrNbzxJJZtgm?P9inp$2P)lO5fjH0w2furx#H2 z@AkiYlf^#7;&AOFqYdvNpnv?q79 z@BDva+86)t)}^nzE`O3*5zl0yq`N*aoauqR`MiCtVo&cJa(FDJ`|IcNY0r$e@UF|h z`M#Q=zGX`dyY8=_##e$Gf3bPYSG@m+HQ=7J?)JBq<*IL&9o}Vhr;O3*JslLbd=4>u<;#qG3Wu>NVy@Pgs?4BL?VXLF@@*I4FFn_pS8 z!!iDW!(BzCnK>rHC+eQHPCI)?anY(b_m|#rIrd`OhBT#x%=W39Z~hFj(~{|#EB0kY z(@_~?HZ5=K1$Gfr^6zaq#hYuTc8xD1N>lya%+%W*+j{fZ|3$D|{B)r*(Ik7xF>%KY zHXZSOvS*%cGEk_tHC^sp`C^gEhIzG*{ze-#$c5;?(!7#QzsVk zmOOWOekpHx>MhgqdD6{nUN^UY3eI{um070X+}|)OpBw3?bKhH^Iv?7x$$#%&W{W)6 z;-tvghh68_&17h7V>!9m-j_Y=-r@B##4orgSs0!4WW6_~=kd-vvFB4|t}rbL&c42> zWbS8;SJ(Xdg)&n``X(=BblViO$-pJD{pFUKw|2d^vc1!zV?TA%!~U6XIA)yqZ8uM( z=Uhp;;H=*NiP|+UpNfC6>uWHYG0#Gw^IJNTPUm!oiX#t}KEM8C%JT$ogKw?&`bNhx z%x~sD;Y|}aX1fs9bb>{x{($TS<_WIf-mq_&dgBRWO{P)d^W`7Ay9}K)P6r&zdhV`Y z@WDosucGAN%w-1}51w$?bSENTFJ{w>K+uU zpF458;?>cO^CSHxo)+4|zeRRM!G(41S*GpT`~NI`Em(Rvb>;raydHBm@J z$NEmreW8ReKLfU}+`Z6#!bLrk3q@zQ@jr0rv%gg`c{0->+xK-j?cZ*0Xju|-qh2ST zPo2kV#Xp_c$sM`rwmHcQ&#zh#e;Mn)cSq=8JBYYtIyMFvjew0 zXTL~2z3cSb!imk&kIHp)oS)Cq@P4H+>(7;Szbz~!tT#P*@>Ip@_^&-#Pd-0SS$pDZ zZ@=}v{wmMeX@9PFnb`-dUy*%q*^h%_w<2!oZd&s7#hf)&^M36t(|Yu8RyTBeG;-;N9N3|-De{BbN!ypdSvm* ze9Pj#^9&^uHs2~Z74YUYm}j{c1FM}>9<~jfgzRa|N7Qhnlm4sWp%11;&@wKfo+_V z*|z0vHlcCdXYSMmJSpnz5C+|k%ePE@m;1W=i|_Q`>z>+fwg0;LW2~m0 zww(9&qsMRC%%57WxprG|Hs@y5?(J{;Kg_J3IDLlRwf_?K{TFjGC0^HM{XR79z~UwI zZ9Z|@KbfmroIc-cV*hfR>Qlv6?=GM6`^vxjQo@t{4|M-bUy^FCwp{n0xt;E^J!dNX zEZ*-v?(sSIVp!$ow|Bg2J_j2<%(PniHT~z>`BQhzHN5=T`?1EUSGmUva@_Bn>b1$J zzN&iAg!Q@2xhI>y=4^{KS{%9mrFCAU>kppoX`+i3+q<6X_`9I~d`|Z^?Y#9lCj)-Z ze(*---e%j)hR4fa?MkuIb+7Dnmr43PWzihb2Qe3t^FCERaeXTJ+qCa1tL%++sSM9+ zMc+G%l=prvogy#0d6Tb=jkknifU#{~a)dvZt8C(Zjd&}&5W9=KR+sbhzUxRhepnNI z+ILc3*?HBcn(yrOm0$HvTlzDtGUUDYkNP>ggDT{XZwR__)8gEg|LX6yDDr0>JAY6g07W`B#bg;`F2E0OWzT za8&o&7Wbyc^Trd3+|Eia4|ZC4Am}}Vjr$=+&izaU-Cg_vuecTdCa0)`>~T1BoZ+7U zYkgaAW#6oQOdsSoT>CG1fYbVqWZ94V$^H8e+5XG6St74Ex6Gr$;i$OAjl`qcIwyWG zSj#Z%Io8F_AZZHP1Nk zzV^iNjA!Ny{}`jTe6&CM@%n$E_5VM`KYBX<50C!;FWyrQGxx=-F_cf+o}2b|-u`1R zub$tyPcuV0VEuvK6|?!vS3I4*;wf)H+`})wL>uyNpKmhjf4}ye{g$F~hJEZ0`X_#3 zKX#wL@t63Dul25{-ZTCX%c{J8ueMd}Ve7uUgjoAKdF)>~Kj^i;`{S_nzqExKr^hahA2ZHz-CHa0ZQ-ed?^f05Zb}i! zyM0@6gT;HP3)QuEPn}x!DD->K>MfTY_!_>}zpANb$-6DDyx^Sq^ZvayaZC@4Hgaq} zE&J+|jDypuuzOYc=NP*$txMSObeko6kP&HT9r(^@d;ZMsvqx5*R!h8M`^q=2p^96_e8p*9s~NkLt_Cx6s4*|t$+_8| zsVUI(lWJ<5@9`V|f3ls}zCtSZLZkT3ul$V9nJqeZ<^Q=Ry25<%nV7O1>qY|^0j*%CAo=36@RN;s5F6|9ql%X-u$wd4ak%<6CEG zughz5YAWSt?_u8{{?ubZf6vK8^`n6ML<`w|$vlro!WA z$bO4+z4O*9Z&gx1%6=A@F!_OCAp7#@cQx~-DsL*4oc;J_?&dwr4-Tm4TI)WHeVfYn zP4ArioXa|~uGeGPpE*7g{pR~&p}>*X2??iWK5*E)d(VZ$8T_ezA3bh)Z&#hOTx))D zT~hR-+{Jw>d)oViZ67MXoh*}*{AZcx{hhH3&nny3oZmO`XM_3C>d3IVvl-K8b;$jS z*vRd-=zV*tw#ED+*%SZfi*GsY`$RYP)IEtp!bH z_0sDj{Y0k)Ur&D~tygv;*;Z=l>}}d^->;TFSfG6Ac~xM~XZ@!yJUw>rS*mCL;FihN zuB>F`m#VTc;yWx?O0-Y=lves{;he3{6Q$TE&U)8<*Kf+&co)Wt+^<%gnY%7}<>}c6 z{+1ltu+1^ETS~uqUW-UGXJ3%Nq~+m}M+Wh!nbGf_R@$BNo);Wm z(-(Z(#qN@2{$W)eEB5Pp(x-}ca5ScDQn!efv(||IedfCTWXt|dmn$P1m)zs8QkqYq4)aR<9S`(RQiQ_57*{UiHfsq@MdMsA4}iJmsG36NzgRYhK=;weopr z<*$W0k*9xupUH4@>Yq(rHzum7_x)e>ROE+L)A_&oQ#~iWx0!kT@9snUrk2d>O!(Th zG4`C=@8Fch4)2VkHEVXpOunIYabjZa^y7c5)PEb7{I!W@el5|NE%{bHw*T1HuqB@L zynl5+?Vs}8Q>9GSarxeit8Y1H{F}XG^WH^T_R!Ti+N@PMRX1kb`g1cm_|x@;Yd7sb zH$`neLwtAt$>pEY_Vuc!{8=*hTKPBG!iD>m@2Q{tW!Id#Xxo{(wsNbrFHO5M@76Ky z)8D(_-mLn*ZBuA$^=+fWVi(ga-&_4#)E6stI@;(;`A1=!XO*`4KTdx&O}3+Ec3;g8NDezQ~vSf^TxkA-KKe3_#fr?(x)>2 z+Q0u6;%>wZ%xmmT~x$Vqb3)rzqGZLag*8XVi&^Eh(5LW%ag=xi+`>h zOBHOcf7`$#o6mKtzpOw_xOQ1h&eMxErzU?3p2M70roT=1mdn$LMLmx{ZYzI1A6-v{q5&QIk# zXTINPhKU7dV&g?{-meVSD0<#1M1w<2)1s$WH8i#XfB)PTa{^pzN-m{c4zc?H?bLmy_rwLAyPh6Ew|L9U*ck4tk-^&uVer>0v zJESfZeXUwzVZ2hc&v=8B&MD9EoHfShmLz|9Q+Rd3*VSuogjupYs@$5NUL($E%`Drn zzI5f9uRpb(K3RCCFjSviW1frg^G%nM&&$tlZS+rl^z-1&85Xl!@6U3ZY1ev)CH?#} z!3WZ3^)!Cuc2>c+T-`53Oi9&?Yb?xly1TG;O`faC_1^xTzrW`v*Z# zSH)Xuhr=1T=GEpO{I{63@;lq>!<@_4?{nH$*?f5Ye8!62J@$)a_HX)P{_Qv40dEG; zty|9aPpNO)@@IeJuk```l21R(XZ)d_A$X;pwc+8pyo-K6{&TI6+RynOd>UWw?_q6Z{HZ|&O&kq&ssGC}z=)dOFzMBkOo6g=f zK9Klfg;j*N*>p)>tGuM&_qRSj`OWY3x~nq0V!5*$wiY?{AK{$SC>s8eLyBX^)TIl8 zn3DP(elD6C&QZpHK!E9EkQ;MF=oa64rW@Z56kR^Bqo?e3kv0}@LyM|t}zbk4P`r?^(KaVZD`Xroh?Y^33IosO}6Q4Hl z9WiDP_tIVaS)+Qr=0d3km8ri2+qE8CTxvUORqEIM)33R)pWc(X>s3OAmD7@Uj3Mre zjQvWd`mMPl!^F2r#o}m64EF?O1(oXGx6W>>zHHykHvj!CW9E+So231>s(i`V+ubAh zjqyz7ruVr|p0e|qB&Y08`I}!mecHGB=hh4=n)>W5nhP#5l;~XlJ<(y>rQ;$8pNHzz zD>R(W4>5aifuV27=HuVib23ONDRBkZz4qi1Q-0i5J;%L<$%qY3&tNMcfYroyr&!5npnayi-YH!~8?LFVjtWL$Y z2VH;YST8zd)!zw*E(_(9($h9e7cKm_p!`+(s@i)EXMKH^i?8PS=Kj^?>(O5=b3 zyyv3I+iRs>Zy(=wTz~aVTVL|BaNAA4xOT~$;yhu+9(>PHp7Be!(S@AqhpIMNr_XF( zY4huj%BK@)?tg^%zxf;8lEf%9Dv)+uYTjz7;b}a^xB}GOLw*Ok4!lQkEtHM>$sb&suTN^%z`rMnp z`ft)j^Ss-unJ;pF(#8W~A6IDywAM$A0_Du`plB&gm*Ity*6@ z%}J3t@uOsJLj3b(?^kbm>LY%_;_JOuqf^}6$3BYw?yP*8aPi7@uUgUQxXEh^b=Jq< zW8qOqzpg&>ep_0=_8$u0_Z8l4{cy_C_l@D{@66VrKG|=LByzS~aliRu*XFJskvZ$K zE9UawSvS#M`*f*i>E<@Or?VPfGe5rhwy{t2z;mP6%e_uKxu=8Va@Wf|__&Y3t#-;! zXZ{jig``+^@B0Da8PS^Co93~F^4WgE>AV*GdsI%IJN83WT64+rb1N%m_+8@B znt6fWzjGeX{WDLdrf#^;{4!>V)k5(LJO{G2>Ru7Ql^y-~WmHeYt3~Pl7XO`2UD_5M zdr$6S`d)>@&zY}&R`6cR@o9OS*j43gs=wK@gll!#HVP-L|Fd9b-^v|o;gL+WyhpxH zStDv=`8vIJW1jBxO%HcmFP*exeq5cv)1{kwLs@HYKY2NOnWt@Z?hZ)rFZN|@W_H(K z-zj@t^Mli8Jlik!^3ubVPmh;NpKe#5`rUWS7(Y;BfI7+ZQedLn`?jaT;r}!y}3!&^ADX~vwqt)iKKle(+@;nT%#{{d9AnE%h!5` z4{tjbz5TW3udfmDne$IAe;N6!%g`@&)|Aqf_axu{vVOMr!_Kc^r3KzC^Pd&odG$VW zxBP1LzRS9EZ~U6l^E3UW-c2bxVetc#k0<_l((^SVgE65e)br-E3GSyC>~q#-HkYcW?%)2Vf1AAY%g1KkR~G-6 zy{GH+d3~(~wGZyIEM0x~f-ZmSoR|Ek=ijlmJMb(mx!9X6>R8yV2fM7a!%v@-*v5AL zM^EwW9V+Keb?=gUzClv{Vpz`A<)6KBeyh&jnEKsBK2_lO^W;>UZ+%Z5YjDmF{rBvB z%3JSC&rAQn1ul?)fbryxCR}MU}G_B7*XEC*GL5^v9 zzNW*$rmfe^>;f7>0*YKs6W3HQCO96;7D*Agv+#Ob9kho|p2Sia!_>#wZTgPiVnrt44q;5_F;gR=iv9G6>t@EpIzq6Zz; zAt@?z3Jx6%W0u_RaUYaRZr-`u)x(Ic(EaH~DDmY_|nIuWtI3B^8@^{HpYNo35hN zy-xxwumAaFvv_X)wOw2MPt0B?b^XKky3mP!GtO_Qbuc|(@>}16i+$f#`Nn;RF8vbw z!p(m|x_-NrHG|D5msDe>4b?55CRz#XuG(dJHasQy$VZFQ`BT4I?DZA-B)=o(*M0x< z|KHify@W5h;XrID-_L!dKO;}&jNQAPp2bW7ujT)WdmPuVZw_}>|lO1_v%N^Yro$={@Oq9@x$rd*M18(h-WZ-WsbV?as35z z&uMqh6~3IIG3@5IM;tW_2Zc;6 z%uRMJbqRi+_*e1N!mHcwm@?d`>K9vi^VQYE5BVCV?sc+H$$!sT!f@C?~lGz+oraa>TjZSTILuU4|~F8sVTYD(tx<`bsT;?E{G++pcCS9j`;^fum_ev!Rj zHkn+qO5J+r(03){%9x7`4G#Nx8fujmOnADjapmWIOYINJFkd?U^O(bV@ALcZOdQ0& zdtPS_;Bh%yc11XV|E%Q%U9TD=hR}VPM)&s`Fl>+GDQI9eEv>)xyZYeHe4bCYO(NN+XP2#Dd7>Slaes@Q_HVu9>x-E${bEosjc;kPT-`hU z(}f?AJGOUC>kE7?{PhIGqNg`1WxnmwcAGH4RrB2Md+Z*|rk^~JvuB3Gv9kes$3D${ zaYj>7ewN+En&Hp?4+Jm9=I7>LbNuFdi-qUn4A}q^>&z(zZcjxP zNM1NT+e#Nv(8U%{QMk$t!>k+;`n1Tnv*mq z-TD9iwdl*+j88JWPb_-PZac@}XXoOZ*Tt_m7N62~I4`-r=!c`;`w!eQN`*NuEv}jN zUyC-3S@Bq~_N?W(ZAChK3ND*(?px;}q3?U)+p8O*)zAM#MZOC7Zk6-La>BftnKgeG ziF}*-;y%L;o3Fd3*fZOxO|IOu@0CNzsjmN5H^$yteCg8Cr~uAc{?#T1KUdz4$X|bR zdZMq#UWQwD4m(S+EW32AO*s1Ay#;KdAG!-|Vr9O2KfYd3es?u%M4lAK-0bO7a(Nk- zY?)=VMmKtT^OWWrYZkPNZaB>S;?P;6Z7$-Qrkp?BF`?mzcUzNgiR|({OU|yCoBw@g zIL~LHrzdw-GQ9s>Yt!v8bJ@a~>9WobOoH-v-(qCnCAQIaYp?sW@8#cm7f=8Hp-Cog z%Y*w~r@X)Ce>YSr-8sj?o=x)1yh?j!xt}r5vv0MBRNMYroAUU^bEjJyHY~Gd?wVYm z7wdj|X2CwYOV1Dfd;MK%zw95TbtV1dXe<1?DXYhTbY_l_=t?dH3u_4MS82iq-g&s($J`|aDV;&%$tYn@VFZJJW1 zA+IMrBleQ9nbq+PcOOR9@0{5GIA@yrv+#Rg%9rTMsr28Tyw+%+-rr@X_Ci`Yf6raI zKG#ZawwM0X-6o~yUd*2HEbGVb+@JQ*{P7;8!cX#`?;`d3D@0YH5 zeXZ`EU)?nGZ7($+=XD=Hss1tTCg*d9Co}JzId&@esnuro&6Y~H1fJF(+x;ovf`6OK zfz5UIj{n=6aymrrl=9v6g*h7eh0?+jcSHKmI!Eo#JA1S$GEZi8V4l~T;?`3ythc#t z4>-Ei>hHyGAIqoS_dIpsd6a*S{eSuU+Vc}%r)ibz_Sf8bv`7AH{_SN}-B#hUHJ>YO9)jMNn!&(ybrm zvX$$C50)9}o-9yT3WrHZrIA z@4?fXY-5i-koG$8qItr$l&Owy-^a#XQn+v3`oY_B_QxySx$Sim`lSBc3X6-ZX8C;B znR&{3v9ouS7s%g=Tovp+T|%|iRQ_3(U6NZ&`G&H$Hos)TcGW0UEqbdtp*T(La?U5! zpE8F(`+U3b{W;^B#D)#?{naG5Qn*n^Z$7e808c+se{W$w3NuBaoGpI?9Q znK0jZe2K6c(&X1`st+>iM&^m$)Csk;6CaTC6^EiFN!esd-U zxt?=ybM-rrWFzCZVKWo&slAVQ%U)i;@lZ^ZTkBomhQplOEv`zxVbpoat@GpkgpZ63 z_O7d}Q~pRWd=Pqn^Vdi3kUtWZqF1&g9W2&)ty}g(LX`6WGoQtyj_NlbWOhGgjeAi0 z9kbamMlqskN0PMwyY+qf;v zVZxp#PuZG{{qo%~c0_g7OlY_Lbu;I!{NIP-^Ve-s$}fBtZTQXc zaV?8wxTiN4`{HwHuSNc)?Ybdfc+{lY|5g2QjYqc^yfNAG+@{Os^`V>hpQo;hS>15C z+A^P6uU>TpL4%@xqHQO`$I3UdaudvTk*R8Lc_E7 zj60lT(G6v+HC|UpywYHPx5}2uMru6>cZZ0XdQ zWe&Be4b$#0{E&Ni_f_cwDdmaLyD#y1FsYQMpJD1Zo0$_|yfgPe9_zbhvQi$CH*NeI zy?^GlhI6LnGlR@I*w$t5)=8*Mp15%5!+eM0YqK};UcDrv#ZkL4e}DF^o12$5-g+tV zd3FY8k;aRQmBr7sUl}pZ;c{BB^z;O)(rw`~4wJmN4oxnS4BVPHGq1}2`O@Zjr#Szz zWiY*RdCpb!pXY&E@rMOn!AHLpoz9BBzw)$NH|2Wm@`K0lJs`#eYdi;?Z2l?`84e+`XYa?e2jf>_9cX6D02 z-3J_5e;2Mj$Slq0mOgWf=M+|_y{bzV>!#m7^Cw5A@0+5e^%wJJcKsjz*RAB8K2az7 zxWe0nSN5H?slOOKyOTaI`jjHR`}b3+PmgWVuk6VdJiOLccFQ?t`DYKxrH^l1VHIJm z&v%S9$TEo`y7`wvw(r#E2kbAOuHHVoR`zM}Zsr2UraobPu?rfv?2ezD@%^;!46_%l z_k&emPfd&su9_JWZn;C~?la!1>{Om2hyS;Khh6*SJojK)@wwij;-8Fpr?=>x(|7(| zq*1@gts~jN|IksZwmqS5xD3v$&+DG4|MmIDM96Zf&D?)}ANSg`cH+u6gqKFfcg*cs zcKl|4shwNk`JX+t3zDI|zc1F#^|#Od%K7!{^@(cD`nh|m!!2JI{ah(>IsfC&ZRhnb zs{T{5541CUuX^vP@pql`!9TD0e_sBC^EMlE|LoTrJSC%zeyJUQ5d16d=bcB>Gn01B zi2v+or?~9pB0Za_+g{DxTE04edy4Vz>ac6KzdfGz@7%rf+m!V_N?x{o8vIDp#%^kw zRb8jti(nDWs^7Btu^`E#cN!IJYA3ru)Ct-^Xry-U!K&fA14ow{`us32v`16g@I?-Lkd+ zZ$SG|U6U_gh5oI-9k8oa;^&0j>jk%Kn+mOE`gOQ$@qb^r@`pS782`-|*rCz94&(@LqY*|>U=!8=o?#rD=gtX`A8m%iD3BU11BuDktLe>hnE z|3B%0_=DB|8-5>ub^iOds~_DjS5GO^)}A-tbK3lL&n(ecp~X`aey%Of%6*<0(f9l6 z5pe^JxhGP*rnG;Y)sUEPsi(owr>0w0nG-g@YU&!xDefDmJmZd&eEDagyQTVpKP5T8 z-?HiW%e{>G^H1()4Vz88uI>fpUDEk=*V@kd*yeBiKGSaRt)E|Q?w+@N<^AgK+ihOw zR$aMti+y!=eB-X|NiF$%EyBKbA9%MgKS;lS-@2`*A|<|T4nCZ^_eD)=!j2s~Jmk;k zB*it{mAmoW%-&xAKv0zJ(rr7RC%S&$?sR9*)eQHp-ZngN+PGfcc6ECwmv`uuay(=ePzp1mTh?6fe{_BhL zjLES^FZTXFksgzpF?;)yOaI>qp1l2;FVC+0SnvBA-)_wBKYK@czP&`n%~^l7?Ob{`zIk_~o9~eXf3~k!{(Ym}9)6jBjITc0yIIyXMAh|0?c;sm&nOdc zx+#bx>#u4+{MNFo{tYGE58RKP-p;TmfB(+NO-w(S zcs2gB9nkMR{yp%z^_8u6yXSn8v#rs3dh+Z7-RrN|d?#rvXjb_A^xE#F`BKx_?(8fH zxaG*tQlah{e>?HF$oDdn{fzSiqb09ivRrU{o@Rrtu53!Uwv5i%7i;;P))X*IZ4S?O zlM8a|m#BIr{g`>hu~#e?93vZ=g+xuZ+2mJtGx_+OJ01I6`)$KrKP zGfPV|LhU_oN~U18|N7`zm$fZ8?B3sYvub?EydiO_QSo%eN(a}oZzr8`Q4nuj_4G#S z9A2N7;^G2VHXNFMq_Tfk^}T!C8U`O1HEwa=Z*o9}`^%(o=E5aQmtNi*%O1P*9$RnQ zzM$)@R~{rtoN82xb>C}ub17r%#CMVhL%v-3+M*!5TkM*Q=2hi$#;dk7*3US{BN(#SP-8QP<>y0b-3(g&pQ4G6$u4qo942(ZR~q!#KQDRVbf}fgHCUx znd(Fsl%^kew%26#@4qj8DqRToY}AmNc&Xjy`<9P8MceQTK z%RRaF*#|B31J&O$NzGYP_tgA{`_fq<+^fDvPuq6lPh9nr;{5GXV}oZ+S(}@2KHG*z zsIk3S)@tG1y&={AkCzB`9 zzM;Q#`$YC^wt}^{WVYDE+!tYPuU6sMB+2*2;{BDt$GZA^*Dz*y?+gz4bXJ(3X>O?- zSFz&@jrHx**-UyH56Pntsld^gnMOi+?IVwBem>&IgtG;iA`^bGqxh(@w6gxgh4b`+UyQ zXA{4+ylT50bS~BO#H7-b<-aeu&0PNHg3?=quTzbBU+X^AzELb&U+3sO_j&)eSp933 zn`4cxwVN{jyt=hZ>Pq>-6YukzTK?aEWdvJMxXWRe&y3pSoSJn$%U4J@Ve#UwSWp zFRgp>>0i)14dJt!r<%9!KfL^DiRbR4|HJ-mNG*2zRTuV5=X`RN!R4vCH(!Q*^9c() z=D$_>y;uLsfSUCm`i~#GwI+7@z4%LCy9B>jyne6r@`WM4-lojE8~+`@^-03^+Pm$V z$=>~GTb6o9rO8P9Z_Gb+x~Yt-xjufAx1{Z&uh+~@1pi7ko3{1;Vp)b=dK&dn>9>B& z&U{(7`EA>luO45s=*TO$`!6{5lw$v< zRo^TUuPoJ#mi}6p-IMoq>8rVup6%aaRv{f^r}bdpRQKmcCM;;#-+o>5Pkr~x1sb6h zD;wBXoe-5hu;!=nxl?*qFLgU)&wSA|*ZraETGN^5T~DnR<*QTQFlT!6F1aYF+{tkz zYo@EJpFVG8Gv72y|7)-KAHSzkE;DD`n{tP_Hs(dl{mIY%pAC0l_*Ip2;PYYIf~t%I z#cq!J&-}|KSf=jvT2jKi>TpV!w$+b2DX;&!?7Z=>!gp`~r=-$#m*#QpH`%-B`{d@! zFORR;tN-G77Gn|tf$x)iog6)(z`>p7g|wU{5+ZmcX*ESc-GP;TNS z!L4a)%%sgiz264Stm&TgkL5sdh{}S0Jl20$8^R+#EO+?jKkN$(;&*e<_8bw0o{H5{U5p4oT%{Fe}L27<^i|N zg>&2M8k@u`4#<{8Y-BD-KNJ;M@ZswTPF7Y{$*T@8gkCbfQ4y_+@jWW(oSyiM{nu3E z7}p~+<3&5Zw%*>v*z-K=>o3V`(&>`tx;BT-J=ayZEbzFP^49F?8EM-l&0Wi4l7B|H zGEj2;!%D8qAKTZ-aUZ+-;)vy|^N-KShR^5vcJJYy^PFw#=Dm}dvUaug)XsnN_sqHO z|L>ggwDVyuS1ax@EzI8XX`)Du-TBo;@gJKzW0G&~=e>9=Ipy2>{aujz6+jJ>`wU2< zDyp}BU3kLQ*IG7jS--SOuJE(X|HUk7w<_qWZ}GS<%6sH*w#f%`hCjt720w}!CEo!C1m zzxf*MH~*10k-N0~YpGkrt z@X-kcju{D?TiA}AGS65LIZeH~k$J(R8wXQQ=Q3ALZx>s-TP&e=!@E;!_dH$q*Ox)} z^P-3?d5?P?GFaITA9>G^n5T1Ft?piA$mjIl^_ORV+wHYG_+7(;n(P1c+_!jKV%eax zR)^`sbtZOu;S=ksSMaUz>s?=z@s@p-PnrJ1i)E9aeqK?=_Tp>D>*MFt8y+sOUG*_- z-mS0uUi+V7o3^nwX4&#Nr#5aCU+HS4dgF@Yjb*cUKM%93n*X_6(_wFBZqS1rudWrW z-dr_*rTHVC4#9<{S&OY)-b`u^>2uKK?RkIkcJXg(K38_@WpV!dGINVR{5)cK?3;^$ z(rJl?s}AfvQVuI`EM1#r`sHz0F(u z?A!crk;f*uU+!I?z0Lpk!CUJNxYqmaZ#z-Xz*cleXYK#sm!+5MLLa9yFs|I+mb>U| z==|rowug+eMyNqv-0YDwimf{ zPsu6$5z#Gfc4E%F9>=|3nhsQiJD+>ZQoDNI%R72?TNx#Eau@Oz?G^mnC!V!L=dR{g zrVrc(5_|79UURM3ywT_HMQ?M9>8tk_pIANpT*%|e+istF%Bu5*ohi;zPv!>S#L2y! zy&bkO4o(+LcF8bgs;91IXG(dK#{B%Z#j~oTUoOvAzbLzqafN%rj-GVZqpw@JlNB9K z$)@m5tlnx>bB9fSVSL@=zKpz5c5&(id#P~Yza!&xqbFw&dS*1Thi-4 z3qE(B$$X0OWscnCn$)1a8(dRo-|~(3mvNuAqm222zTAnR^S9<3-!f~k)92Jbd{ka$ zzUwpQTi0(|HmuO#O#fzZEC26%gXx>zzc~Lq!ejEzXaCRN+yC{}HkFr&H>O)Yi^;x! zZf)M((5taW^MaOnL@rBlX47eIxLDuV@H6AXdx;O5<-htc{$Z@LG;?sS6I9vi)4Alv zn|E4e*ZyC*ADoX(|CxG5rg&}bxs|V8y^}m}t9q^BCm~5mNl9hp{XP$~ zE#9=5XLB$=_IAwokV^?h^2+z=5~aL8SJ> z%%j(if_ea&A zei3`NV$QF9UR{@;#*6=2bot!Um;cNU9@nY;v&BpNQrxNEdMfMgOkWgnOzix|c{695 zzn(o)NAB?VGk-4^$=!Z;Ga__fkcW8eG5uTZ)91OGS9vej*Gcusoc1ipF896I{)xvQ z^zmn=7tMZo()sb@*ju}LxhG?G$w~85 zycXA&N7y;-61gS*bJk1K&#ykI)-U4AvNVp{mJ=l-&+$?@_LHET*Y^u^78cF;TOU>? zRl0L(@+7<7%=Dg>d>>|>I+gUaZQHte#;+Rpgnhr7@$bfls~3{|JX@#F`Oox5MQ!Qp z9hRQ6muy^p{B_Z)pPP=D`aWrHsoRjl^)X*_`p3OV65n+^bzb|ZojG3S5%+fW9){o2 zS89V^H01B|m*frbuY4Auetq|C-52F`+`j}ZWG7x*%y82CZ~VcREc55{NnE?vKBMXL z-ADJX{mgm&@1OO-UtCYxzV5nhed^w8Eg@l#TmJLb%j!KaN{w7SeWUS#Z*%RN9^8C) zZ1v~O^HkinSNwk-r+1&XR_nJ}k(<5EtWO`~OV0adxA!rh-+!OcoU>w5qx#Zw1e_jpe7MO@Nm$WO?0JX9>Q+wt4XFCF|FZ&gQ}+CEW-@hP8V z{)QX#7q_wZTO_d`4xaILLW0H)*F(WN22;Ms9OcpWyRq^%7DXc{4gTGp~KKCU0N( zKK;rTu4(Ca&p3OZ<8^3zxA3BJ=hOVNDOQ^UG-qy4VA-|#tnqu7*IjSB9N$|^-emvy z7?*E++m}6-a~yJ-)}KFk_u}jeMPFY}$?Y^3IP=4E^86F;_w)!(SZlLrt8!58Z3{>D z1GPEjI_~%F#islVZMgpU?3?uZ{)K3-_Njz?Sqi$f`7vQD_>{c z|Gw)U^9Nss{{kEOH^}|t4f@9&@w50qMfWd##y=N6zh(Gi*I>`^A$I+1>8*Rdh-k`B z{KU0{Df&LckG{`^?OZzh-S_U5mGBRJa)00MTXmgvb)RLmX8hIFN_rK^+OO;KT~A{< zYnV-u!_D)H45E)5O^IC4TKb@==~`Rwr3=y- z_-kcU?Q~>*w?%pdXM`z_x$Sl%jy*9K^3HF2^5DyDF244Kcb9PSI($gExs*w4`tq;; z8AT2&wCcrGmp_}WwfnAd{2F_vhVb&~w?8dm+H=^qLiSJX8>{6B0t~VoxpU>$`ETyOb@r~Dz=K<+ zjh5RMHJ$bUdhOGm{HGCYL6%o#UQ==V>q$Qezx+J& zHC6{^H*RFp2w$+s<)-f|Nrvhx;qmo)ZHzgGqHkN)-H`Vz+0eM>!e^bhV^#XUmL4>G zz31rGH*7(gd-K0sOEp-a?6`rgFL3t}GkN#OfN6zyD;VZ$>&xjZijjKHH^cpt;Y-GC zj1{UMJ2VYiOFQm*DEe~m3as0*RP2ezUB8UwlZ+QEOI~#M%iO@@tjvd(eqNXG@?hTc zf91@6Sv4NNoIW$Wc>Pz%C8y|wUX$m|UjFBr@2hrZva2w@-o~(n-R1V$OioynXMy6K#|^nXRMMX8zs{*5QMu*R|h1 zay8uZ#df>m%}mepZKa)^$Fg|M_yhoiMdbqv6ZaN?C`iw$@zrN>+W- zL#k$;&C7n{^JIGdtIbNEqdw2w@_vtAsW;pIBhNe7%Jv;kV87ic(Dv~G>xt@f+`oUV zlew6*^-jWt8oRB>pG-{cip?^MfAh(}Zg-rjafEfrp(Xqc7wdYav^nc6iQO{sNn@25 zzh{QRe+hHZnt4O?^EOcXdmJB$1l@} z^IyN*1&7E@>sLy@Ens`rTcc9xH@9Twc4@_c`>)SF`*K{U)^oeI=U10w&kKYta~nRL zH)}uthC?U6D1P_fu;^tCRrgfx)`We0AHCOW%Eo`Pf94y{cCYO0H9O_?%kk-rW1Bx% zznFgFXp_v>1*;kFoO|ELkr(f3cKWCF*TZc0JrDkxQYmryiThXfH{4VEzeW3qAJ3b% z>2ZWW?1`A72Q_Nf19;nwUr1bj7U5t2%sFG0#k0r>HHS^&o2}OV+w&x|F8;&p_Md4^ z#tDBP{Lijl)Gzh(n9K7+dlr?xcqoy6UvXi~*J}1+%gukMzgX?}JwWmY*QuSCrmh2D zkhy-wwwT*D)i0>tniVG>9p+N$36-Mti!Yg-+i+wfg+x*I!*GcU&l|RZ(Fiq>luT`$*=z|wbEaDH)3AJgh%QQ zS9V6U=`|bHPI~msd0TC{dd=JD>HE#!r@uLv{G)eU z)+QILKem&@b@H{}JKMP2`o(kg%c=YyKJ#xqT>De`RPWmf=YJUAy_fYm`HkjfkuP`U zqVf)=+U^SZHf`;b&l_|uS6tg>bXMxqsZU=MxOs~I21-miG;zzBnLIm>%yzmrb8Tvs z?)H{H8}F;;T>F$-A~7ZI{DJ2!^)HPUwq1X8X~wjb+m|_i(%8T8Z<}7d-oaq8T{5!{ zozL0x!f)x~DT_DFx|#CS@Y_ba_AP-=719~^Il` z`Fm-P>{p9_8M}V`p7!tjvl-r>y3TL=cW=_}efL*oPkT1WR`%BHXPMDC>P8g{@4b1- zIOEugnKu}oC@pv_Q{kV%zRUcc&J@k}(f>@Ixj#tFSUf%b*>8W7YZIz}x*F-3xQVnc zT)(rsVn^Gorlgm@&t8`EDe2j>G)}DkypaFZug_Cg+8gfmef3E9#qsI~|8iL;&+qeC zp1fDG_Uqmdmd5q_)VtsNxAQqH*NL_-)c0kY7W;I1`(Gp7$~=W~XKRLrzt@hf-nmyJ zGr<{ParuJn)X?j#xr`Lk-I(&WfZ1Crh6_d3*leHfOd^dRzB4ojk)o z!=v=vM&Y8W-qcF&!%R1L`CjuTNVc&!w?(e1&0^gUE%8r)(|_VeF;@8p3GxXCIl13W z{HU#9>*~Z*(C|=rjfR0u<3mXv`9(K$H`Mis&QCa+E%W)g#ggee;@=k@VPt18e=V%@ zgYTPxgpr>{MR)a{_UJcd+G_3ihq*5qG+!vzl1RVK zRONEhcGe{;@ANrqB^}diYqvj@%sYFn@O;r6%dcN@S&zPdGPi2oE7y-KpQ6t&UQ(;v zde`s+cL_glP+!&3kK7tnrG^E|r1KgA**@lfI&wc*>MPUswEG&#Pd9%0ZrHH)_5ntV zACbQsQdgV_s#soXZ?ZVPu8yxGd?&+mqkBqkU-Rv-*WZ2m@%D#oB@ebUm;5`Qa_Im1 zb7pa{B`;sL_pM|20&T41TgP&x?(vqC{92a3)2%9k<3d2&q=#?)`BpHznLh8^+W-H& zzpze{4q5QyJ@XHH#vkVc9Pdere)+qe;ZODd%Ew>#w(pzph3UY1h93eO{&Q~o$Jr3C zq`OxO&CMT&-urO%-traZJMBM~2`h%Iuk+4yy|t7};NJWR({^Ro?5*zm`tD{y^Zcfp za?ZgMm@b&zNMCTbqgJeu`B&3+7L|le7C!S*94(s!wwx>KXPcqov0V4Z>D<*C=lov2 z4J~j?ZD=&-t zhm%#;Uq4*?n%CjnSJ!E8Q$;LaPTQZ(#OjkGu;@1LiPx_eoV;C76)b*kx;jIi_WsIn z{`g!6w|ry97kloO+A_Sn@jJ6Js9EOZ?=T$*d|jJw$dE6#KXdn;#rH3~HQFeu z@q1(Ju8I5SG!(U`R7;#b{U}YlA@pk=!>OwKYrfn1n=v|u*D6Y{8InPk z3TwX`$X&be!{5ui*{q`Savqdjuj~OW{>AYe7v}B`liS_v^-qN@S zcgn=lFYHUSduh(9{;{ET$|}FxQlDHEX7uzf6l^P7Wq$hUOp~J*VwR;bTj~djP0{`B z^Td0fl!bo=Ls#|f+cs+rlw%Ip3M*RU(9pvU!Tfjqm{DLKZ^1PW|;Nm2Fkk}lWW{w_9|I(X;r{q1^$_@ zXM{hw{N(DdS*ewGIg-O1S7n{PeMhf&!b+YQeeJ3qcgjCp73V3+t~6XGzfby+&94CY ziSDlitn59X)%-mt@$2kQi7sJF(+@k}scST@?Qv9(npN?lLGIO(zY33+zvSB`XTD!f zqT#OLKie1gnU>79Q!Dwi{XNr;-phZbMVfm5EbrM?*zs#!joD12+#7p6qfMog)Jk)k za*O9nE7UIfB>n7`!FIJ1X-ZR>k5Bj!k*-pf{$c(l4gXK8@5}r#%WhxWQGdB4D0Ru> zh<)C-6?G<*`PQ6k%+=-2sN3DN*Ee^=Z}qJ3*?g~VaNh4d{Jl`_w0w>7d*Qsa>|*yB z{!zET&UXH_b;Z7bd7peIx!jMoKBVZs_ODsJnarJqe~)bO%xO7u{?@g!is1RpdXqh^ z&i)p#4SARR!tiU&RF$%K2fr>`zo-`64J%oy@3O!1_G~b=Q}g#IxEStNpP_ zBxZ*D(*KJpr#@PKFZtB0z5kVLV!ZyZOFim;)%$(=`Ly}_qRu7X-gET3&$(YUuP0X@ zd%fn(hfI^TuZ8NP&M&R{DqNTybEe{9dSjiH{kGbu@;|?WZm0dVKK(sluDG3d`~Apw z&dHwl+n>(cyeU2Rga7u;-;L#_vaij*#-919uKRstY*gE`ogw#|CN8>n=GalyTVCa! z-|sE`qg&gNns@Tmq`7lG9y$MU!=0*WajBNSpM+YTn)Gl&-m>Y@PcwH#9QT=?Y@HOX z6f3oOvsLL%r)l}OA`+v;uiTZ7c@!WK>c*b9dY*)vh2I+MZOVN+Z~mC~*I@6pt^AdX z@4Z2mS@irtL`Xubckj zjNS_&t@*`2OE@!4^-tS#%I8=coU(3vD{(E%miOU_Z+dOsO0KoN@3*{9&R~65`NmoI zxXM{)v$)#}&gIrlXBubFiJ^b-wrpLa}| z`>5H|$}ao!A+5|m_1@3zJalGNAD+-4aXq`P_1(t_P9|;>CVfaQ&8SbB%syZKz2Um#-E*etY<%!Up(H>2Na3 zgb4JoudOR|eC@2+|LEE#33iPs`;Yr~m)2hWVK3D7H;Sw6dh;7^$=7D9s~1g+&9}es zUG+sH*RK0Zd;OnpK6-n5$JhBsZSf^=8A6qV`rVD{%!KPV_BY8cL(=3xc_t!*y<_A z{Zf0yugBN=C2zSa3+(>)Z{z=~`TXh|;xC^~3*T1#Meq3RJ;}c^WYRY;dbPaOCi-5G z%GAHR8F$x9J3N5qX6@LQ+uM+vE-#(VivL~kbn3Ji0mX>fiVIjpcgXrn+AL_Vjbr*z z&M@!i{XMs4z4woM_kMBH`Txct3g6{KJO1t5U(fmA`HBPY`2XCz9>Dm5RrJa~wgcWe z{&7n8-vzvTAK)ihR>k+gvSB~>gZ~T<>bW1>Ua|W{_OZ&o4+sRG zT0dc0Ji|-dC7weJXk)sCNS<=YI`f{ zMiu{(>keuO3mKm7yRWl$`%TS=qkRr1B^;(O7nHL*LXXUvqV5 zGaP#AHtjWsNYR52FMD;G=F6x|yU;L|%OUoCwk>agrupZOY4^7^Q{EV~r+zn-H-FezA{{frI zi2$t$`(&2X-jmhb`7e;QCU>Iwk?n>Dx9t2B{I0Pm*xx}dqCNN2JbT>-2iaE2Xlb7| zF8R>4v(Ib8>bnu|8<*~3pB7!RU^#Qeq|ll6hov z?^xR7HMb_0z25odVdRFIr0+Mwn&e8?nB6U%y*Bsi;q)zi*F-LsvPyqu5PGv)r@dGF z(zCRD<6E7dbTjN2OVVZiU0>V{HrCWoW6#pzL+ibrX|pQ zP4E7y?w<)Oj+HRn+Ee*$&-JMy2Y3(M+H<~c?$1RRkDXp;WV>g{(&;<&avfGXm-@eH zKc}iz`r;XRX&Se|%?Hwe8>bzV!#~lYXj9T(l$tS8U76F7W&`-{mDB$mgE8QkNk29`acb18G9`_AN#g?@h@$fWH(XFNaI{1&h63CG;S z3!Z27D}J8(;`#>j##)VCcb}}OY_j*T@2~q@u!1x7rOlR&iu<>3dSv5Ln_B-g&hBT% zCMW&wsuTGe4(gqpbE!sRZ>{ytu9F9uwES(4xaIzMVBWT~=7aK|_U-Fk<_9$HuiDVH zI`Qwj#djCYz4ktLqUP7=uggweH+Z${_W!ioPa-GJ{StWD*39v^)>Ea={?gWU4SjN- z7JQzv&G~oAjC%D_N2M#1YbSqdGr6*U z=G{FZc^UU-&M)uW5AC{z`xytXe_uDb=8x~f<36cYbM2<3=^b8reuj5y#{Sz+Zi>zQ zY1zNR{+g-x?$CG6sr$LlzN!oV8T;t-LYvKIN7KdT*@neMJzHABzt#BK|A5HoPd!hM zmbt{vKACo!ckWf|$L9@}P519UyQjZ!a(Yev$XG_!o!l!EGqTglo=@^I+V=I+!aZJr*Qd_^5h-$f@2l5KKbEevou2Yd zZ%Ng`jf)q~IC0*2{-n)@wy%%RNMB~WYmLcc_tNO|mVMqn8_%sZJNwJ;sZ65BEWe*; zRw(8<)%LyE9n7I|FY$@{=@SyE%ieE&Cm|MTke{5>zfHOQi))>eM*fENzw~Zx>fw9w zY%k09Pd&RM6@DgZOf#A^;jcm859hc@w$ueiSBgU0Zk4r4pMCYg_-uRCkIj?!Sp8qI zC)wU@_ZcJ8^{1jf=bqiZQGd(X%|G?G1)tVG>ok^+rX4sM_PZmGVhh2LxVUtd)LyAYt3(pE;$AZa*wd7LZQO zDzz6r9<=dZ&tJZZy6CSD9~4E0-+y23boV(+b7h0JWWa=ierc7Oj;#_CjQCDySSIGH z>%5dxeH-wGZMEumLmpL0E+e75fDO)j-~QqB`(Y+l)70~ybwj$w53{g8wO4ju`7d!` z{-UPy^*zFMjZIC_HOw~~WaAW;+V*`D;?Dc1^4FHZddeU19mk(rtYJGWr=2&Uz-eFP zhcA1Vd%U!KQ*t2c-h+3d1alX-B^g{8)vL24GaD9!ciYdKSl~26Q<5#lp^r+Ob-fK3bKiki-z5tTAD%lM%~-=+dhyx0%LXmwENw?M^~6N3L?3A6@_PPf=VTLi z{okBg4}RBX9xG;$XZ&H6pwCeAs`7n+nL|JU<95MJ_!^U}EqW!4AsCVp3En4fIB zmf_!bhJV2!0>8`;Tu3^_8J3s*a~tz1zP7pRWpy@uQq&UIr?+GYkIwe_Og|;xY*`>9 zmS7sO^ZPcNk7joio~C_m$Td{rh{RMBE=DTD~S|jZG zfm!^8GRML>DhUn&Jqz>0*njEfZ@PCm&vP1UQIloiA&(gI$4#5}o9Ew}bs=9P*7}D` z8{3X^H^rM-Q%+h*7dV@piQenFyYZ6Lgc;jcs#WegrDQJt#P(ARU+uxWJR6*Ar{`DM zvb3872ws(WvE4~K!#wnYZvOXYZ$F%nMB zanBv*<>3xx59&@iSSoyccD05(dfqjg)52eFi>d~M{z{xPb$#&lmqq<-cKO={yU#tT zI3!9YkSi+&1N>6ufJBv>qfZz{P{zw@Y@N|t2#ShO7U@ee6p^(s~hp` z@!_E9!fX1je`Q#Cq4Z5l8HW?MhM0-Nl6&|3W@=wBXXCD9aCW+GtG)FdBa2UL@@$DK zNen@!`?9Z`dCa(JNoL90sFT<4vq#I`&)j#V^7_vQJQLI%kBhBHl|Q=E=~X;2LFZf27SH-;xW9k? zSGnAIp^8E~rrNMgpLAw&T-xqNnDMDyonO`(A2=kKnVuC{%C@xQAL zX3h5;bT^C4_tp%*_}5YIV0?zrwUWU9OXtpE&Zxf~qhkG%$CQ_!t>JZYH$;`!gK;P$$0 z5xFAW6u=5*=FJ?`saSD zY?hfDz2?8)y<3a|M&X4%eC^W<_NB;QIzF@4a@y&ilXI7@@v|#$o3T&UuqGD@=drx0Hb=CQ|4*bh}CCr)F zY8TpH-naA7cirEiZ?)bUANyt&`LcY|Z+#Kt{kNm6tp9J^x_(Im`?7%Ti+M%mChp17 zGmUurnvG|=Z(L@3*$hdAV(I(pSAOpNp?*y3{LOnm{wnR8$n^T^{?MJr_vNy;e#q~0 z{b+gal5)?>wU(VXYvrUXWyVm4j>$#7%*;TVIDs%Ebr@7~NL|M5+uS-#NmnK!oj zhFpM7DqZ)QoH}Ly*DZ!u&2CkdXRg{ir7rCLH}#z5$3OfOu#aDIPyf*Ar8V)PJL6sI z_iLR0_49*({^ZoQZ@=FZt1sL8WSQi#wLdn0_bS}uZg)SlZPOaVwZDU^x7|Dc<7xV} zl$k|8eowN?fBEgrPh?epuC$aHH=$1RKMKb zu>IIgAHU5@bIx&l{tJ(HPECFxpqX&x;Ep{Gahw~%cDjG4l1bKFa{k44Kdt_6sgn|^xk#`7ApZw5{Lbgb^`HLI{ME#zv$UL zRIUECZr{`7=j*=xo~B%+_?ba(x)ry%Fdz$^#Y3f?cv!m`7 zpYGOq`5RJ$)F-`gTv<5vOvTY9vQo{N`mKWRLM6W#{Jdpvyx#5hfO!{=in5`NS6XkK%8!G1G%=i#o}UB{ckPiQ_)c>lOXT1Dhd z!I36WRmn+=++0F=6E`Gy`ZLyW9Bz;JXm{-k&jDQ?bB%Ac4BSTdn0{Ca-8;?~&pt`< zsj}Fe1E-o~=P5kqoK(xPgmw8J^&creHThn){Cz2Qz*bD;4nswdm_(V!?yJvdas}Rh z+_C+w#Vm_v?H}RkLC#v}FZT$T5?O*-YbSK`x-wlC59&xb{2-IP~0UtoEm@u6}oQ|;<~M?Sg#s`!+% z+pqTjYtC)127iwGsx4;!cALv%f75x`(tWGN+6;do=gNG!?Zb0=kM_~l-pCmT0>ne! zHIx}WEG|(o5|0o2a{FTZ0;bK9ZM(kSf4^r3{ldxkhDsQ5EBq>kM^mRj+@3pI8%~e^1xpoM=KGt7iI=S~j5s z)q{SL8*EQ${%op=Z{4cIZMh##u#N z3Du_$yp!Bez5bcyUYXQ|%hwBia5x~HKV8mY!!>3J<`W7F8}rKi8*8HTWAhJG2;ZD+ zK0Puj>(`$nzn{p-_Ds9rpv$7HwPBe|!=neLO;y*;P2=xfFS;qu!!kv9!@gBHy8e57 zD(cwF%{Oo~3-aB{Z*YrmK4TqmOZnltrd#3mhm+WsT)vdwQ68{#;_^N3|N7VFJV>+m zykR3?z~FWxoQ2_4;hQjK?FWiX*XEn=H4Aar%PzZOc5lt(eQbMv*t}1ai4N1+P^B?n zO+U23w!M^jt?-h=3+AoiHa}oknz_;_X@0;xt7k^XV_rTrt(>5~QTpcFhI=Zj)9kOB zT|2IR(KkL_zCrn(x@-C34-+D zwfDV@xR&{3`&7+ZTZR`F`wjLv$1UB45?w-w9yrnGg%!W*yd{Ld>A zjy!4>Q8@c~yT}vPx6jTl`@hIocl9}Ecb=+63`M@{uQYUi`hLOu&cQ9ObG=^VN}f`l z|K{@6&)4`mChlB+vgGBfg{M!FFK2G?hDt6M&cmezW*7+=7Zg05y%wYa)R@)DW6FP4w zocsEgE#v*`=aS?){rW=ZQBthFo5aaXfX{MYnp z{jS57YQK!0X!nFO-*TJoD6T2~oxAOyhF#qewJrZX?p%4(t)lLijAU(c_mt&D0rBg8 zT7IaC{@>XKGF4Z8r5?_I;QP^P|HtT!FS(w})-ikjj=KNSc%RVy zK>mh|Z>7AIUy7wCx&P^{SirYrZ}0pK<&NgPyx&fps|?wjc>CP5WZCT}OB?^Ry^mW{ z`#3_{*{<)a!eTRi)h+p-j>Ufn4GCMjO6R>Le}LS%^50=Rn-=)6@76w>VYlH&eD1kI zOCD*Zm(ed`j+7hm-LhiVzOvK(?TlaD6HFedZ+Nrzc4f(B>4t-4+jlCR8+Bh`JS4&I_K2w=MB(tnt0ozn$Pl$&n~-j{7L1D%3BrtTwgKm@&5br z(EIq(y&L=5@9pirUAXej@m*%|F6)zjf8CrHHm`1y{jz;OJlB?<{n4-_a9)z7*rmLS zI_Fso|d)MtVCBZ%%)BxpGDR zYMo|!pSKK9>Z zf5*GNMGkj;7g-1L$m%WmX|iXrji~12hBp=Ns+Z5^H0#|yld|l6NVsNpu6xnF@6vDQ zUA6tar2nTBCwBC!_LnVqLW>b?V{(rjW(Zji?jM_ek z%vtwvwalpt-;O?24c!PB)2&rfLBmw#G%^VRDoYx)NxPw={kSe&UQs*kS0riOYgL$T~uWF~a-#+H;4$ zmVNGFU3q8mf&^E`V~o}{d@~Y{@`}CrGv{kdPfH8W18I$K`~d~+J=Q8UOoxRf<|QAM zXZRt*`TfMph8AX_GL5I=8@@<3sBft0kBL(_$o%4|wW8?08=5FJ9@cgoQyy=EF=Wr~jGBVV7)+AT=05I0=Va#|5Fo zEMD^;p4?t`WAFA`_5bSQFYo`O?l4!_-eK?DKTr18^NPmQy-%&>7B%^2sipB(QcL5n zc*Uo+@{iu7&u9Aap0P&UqrPE^or~?sk9-Hb8QgFDQq;Qe_cz18#^?3&xqg28xwY#% zr}S_5lsx6@^Ajf`^2BWZ-{Zaa?}zEBj~!iEc3-dl-?nNdqq5MH#Dy(&w|})e+&X+s z_}XseH(zAResPpp9XciG!5viBHAQ=ucB=C&)sP9*u1A)tChlDOaPil=R$1dSVh4nR z>=d6i740gWCbN+tVOPSF?sHswq^8Y~nKH3VxnaxQma_{w^goH)Zn9j}x;}FY@0Xqb z_KB4=!;UWutd1wO`;VsW zu6b;muh2f_XxS6l4K}YCTt3}(5E3abd?41iv5k#yi>ULI=*Aoa_Mg8BSN~l0js4*5 zx67PXXPtELWlmiDJ#n|EV65qnb&Wi=muoDqIRx%w{j_o37jEGL`jzRo`7*YzYwrG$ zJvBSJ>+)8M{O>PKh1N{Fc_7H)Q0;Wzj}N>G?Kqht=N+7;{`cDFZ4c)&^4iucU|7Cg zf=@DFf`a4Mne5p{Clq&e^l>^j2>Z zugAaZt>GBJ16~#sQnx2QB-w!lClkZ$^n1pClbx@;exIzNBY?IxYSCl8q9?l|wvt8h$0`1Z72J|TTs(NYcpNhw+VYzeaQ)AW8bKB>R_ zba_JZ-j_2U@93QNH2TLvo6P^Ud~K!De*fB?IlSJppKBJV&2B$%XV)8x?Ll@ducP(X z%UsBtoSWeN)}%8#(s8eEWbUNnPrnqf6wekuSkPP>7WrctYs!3Mkv;EHw-l;B-rShy zdOf{8a!FHNl5K8)#C+f5N91$1MJMgPJo(Seu-nl;vmSh|nBj2R>*vDfvJQ=lef?}~ z9_wt=dz^Sd{FKVC?MC*6aZ+!ZZ{3*b6Uz51?pFHA=ZZ7g&y^kVv}53P@%qQRQ0|kT z{j@(~6AL$3`<7drpIm=UaUa{yoNX%;<^=y({cYj7^}lC1hm`~JoC8M!s}@oy}ae}9%=^U$)s`w!$-t~X#< zdNf?d?&sFLp41P!7vwfgdcX7F_6zS>>bifOd%EZIy9tJkqJJCMm$iObKYjL=`jT^p zGP2L}?eS0&uTyr9cYe}7!+ag%hTaeV7t5=CO0(X=d&~Y+wYi;o@}{TX?R3svmz0p% ztDhVjQ0aDCs$cZldG}I}t*fK|eV<~MbAJ8YBk3DY+EjrzC57+0ls_r$ z@`ESEFC8cOuPa~oSy3+O=0Vx|4K=#&h2|eTTV+zuKe5g!M(ca`iNCR#t9y-isjL?H zSHI#+`=$Ne(PH+TkBoh{hyI(kdROTDX@WmDct)K){B(+>KmXPB^C$H`{5k2}xnJs^ zDp#KI{&eTn{^MKp|J8N!|5d5y`B`)&m6)2H(@$YJ1IDwlZ8g;o)<` z_H^WZSG#S`{A$lhADlUTx53UkTNk}EQ7ni)=b8VK<4M~7 zrWl zHh(*tl0Io!!j#M@%a>i>D0E!;cjWZJ;q{~~;+x(d*~1&+;mmyQ zc=L4jolBzpzm?{`b3b`{#_=`VnE%wi-9BCZUBlzpy_|C$K7}T2J+phAZM>#(MXl{3 z#&xCoyh0l~?j*9@<=^II{VWSUyZuV#w0f~8SgctuaGl+YsJ)(bM#oGm zrB5&2H?Q$|q}*q*EzZIwX3RggcI0h&+hKR@Mwm+b^RB+>Z|v{sz0&$x7yG(eO6Jvh zxwdGDNlTy2meAt3JL$tao@>&V$~|6M3e9`aAe|CD@k21f`otd`CwVy4bvAI>`LjLX zW3_L7$j;~S|HSPrNk?^g&Ieo)PBA`Ucd)CzyY`oCN==98{KqNtA7#u}ddxX*!Gefm ziGK~_)~_#cI>=XTbM$w`#(#2ezH0BW{mZic`~1gSn3n$*-5#;wu-y5=?p@{I`Tn{U z&$YbRGG$`moyV&_Z)4vxp`h6|OyXLZarqV($3XUc*M8=p?Dd#bnsb2ZtouQ0U`Pm_IDMUg)y-;Gf+LaZ301xLW=Zsy+CCnPETk1Lr4yy={Kqi%+Qi zEBEQ2<*AS5jbC_|)HF|d&E#>3u1~?(NFH0 zPyDpMdFuI%clI6Ge80Z&cD@bkhDSeM*+2Mklb_*_UV=Wuoda(?C!Ck7?R&0t##rI5 z)q;ntXXY)G5xY_NJoSUlGj)e5wk6X0SKg4hGI@emtjvk+2i{pGWII{vlpfs7kU4!q z(aOxvOxi2g%W-R-n2;kabLCWYnDDLM#U7#$c2pRL?=RT5M#8*=S+-%xQGW+?d#Kannp90y)9p#z1NvtzT@<(hL6|I-@HEQY}PK@#s_t`A8E0RMTl7% zyeRpU8r<(;&T#HgJNpiq)3UdACG2CI7Q@edV!Pvg9?_Qif}fwReR^bm{QmAd38@T$ zb?MxUy)n_-=57CX>9^N!&JPPFpYAl*)Ze~0UTOm0ULB@+##J9y{E#YQ4iVb0@F$Z+ zE!(H81K!ssmR&M&tY=yKW7oEw|2D08nt6Sv8CwIJoP0*i_ME>LQnVkdp4v2b%38)* zS4yvQNiCRLd)aUEw0+*y{1U$u1(_>yU)FjR%#^*zzpvqj%+ve)8@C>vt|X~ zRj$zj`2YpS3vBQFUzpFhbdB+F=jFAlW7S0pJQ4z!qzG3d)9f01$niiWvgB>icR?{aNpyv{bw@;>+^QzPouXu z7l!obu6*3jo;+oTw?~q*)pY)i7Sq((3k%LjpDT6X=eX!>KFcqY;nr<_TZM*iEuRxP zOIPY`d~@yP-aW-x@K2!G?g^cnM#EPuzJ7xWw|H1D!Kjs3p6Dp5&!qhW%iq^{lV zFOBT2Z(QV7pHIG*cI%@{-OYH`lLzM=`*r(I-a6r|_Lae&ISx+jTb~t6@;5|%xj*^y zMZR+|1TDbrA%D(?&QB_HjQ)1zn0bidZQ@seCs-2 zvP1si1dmt; z0he^7vawx7eqr2z=G6<6E8Q@^}8!&k>U6 zUxnODmYl4*X!G;U_h+iW+sb(#I&xh&Wd-imn4Ucr$dB#qCs{db3ZB^aBgsd*ybH49;Y|kWz z+b5nnzPgq(Z_Zif&1FXY+d^+I3|JYl?$xSKPI8+1df7iGUAbUx9D8YLrN=L!Q6D#E?uI+!Yw|5~L@ozK$a5T;g^rel!%t3D-8%g-UYna$wHCe!?CzLlr{Ysg)f zwWpia0SIfpZXR3-=6W)LO z+J3%$YnA@;#`FB5C3Sn)`N}$uJf6IObzua^#@>b9V zhMPIwk43l6-J?49y!3~8?+>*Eg>6@~)@(0&G>`Gy?yn|$Uhe)NZ|;(-FSCp1fY#eX z)|Ka^AD%S7>=OI@X^+43m;(=-0W0nV;yWE9z)5<?wS;H+I)3k&QZ8rfa^Cay!N_=XiA{dIDO&lPZ%)fiirn=-lKJ7O z?bF1~%q?E#-mfpY*gW^IUzf4jZ~b%g{@7Mcx&5c!#>RSm^`4!wyccRYWBz@-c|VYC zzu&7(7j{`)kV`+0)Ux45YT3;7I4obt*s%Or;l$@`e?|60xV6pY>YFcF_ak2YPR(1k zcK`Vc@8$iA_5WPW@Q>j@_KlaU4fVZN`Tt}Y{u?%|XTEXplz+kZ%lv_S>^FX0x&QY$ zgB{ZbrKdexQkHBvaEfn(?WvF14S!=9>iI<*{!MrIr5f~4^pmgCy?W-SAC#vYu0CPT zscC!gQ%U=jctzd)4O8bUKmC6-Tva&Xeo5trJ8w>2>ttD?s`yknfqTO~cJ1vOwiWGS z-@yLno}(UXWqJRW&05~4PyF81H0OKUmhX3OYaTokZg!U8&8s5UXIy)A_MCP)_R}r< zv+wVf_YYjV=UK*UF~=z(dE2+gKTAJb99&b$|7PC8rjy16B>@(V58t}I=e*FeAXP6! zIKkbZ#PWxde$|CVPjwr9^4@sMmcM>_b_bh@feW*!aYv#=UQ0Z`!_M#9?)Lpz!n(nB zf^5Xjpm{5&w}zxLEMV+DdH#a`a;^n_yY;pgu>`IB`flD;Bmev*G3+k|XY9XICb_nJ z>ie$@Q+7v*Jx$H74c{|w&c!@)ef5Oe*r&6C=*bd#lw-=UiaOd9t{oIw8Zn zo%vk<>7t#iIqhXL4!qjFP`Dw^IK*z&pUUp7r_ECp#Py%EtjRxCX0~AVcWy>Y<{j=| z)-$eCk#IJM-Q9Zo^M|_(IZ6g;FKd18p1E>Sq@?hz&BXR&`8^9hhrX;lz4Da%!G^aF znsgL?vWliSC;ZM`pB^#&>wVp?-wy4O_fwL8uD_7&ThX^V`$fIITcmGa_4C?xj-5F! z*XFlW`K|9oYzDGl7k#ne5!=?R^JfBE^Og4s-`TQKt!;VVx_a6kaQPjmqOiPS=jPA$ zd-gECFpl2s_xQiy0dtwCg&Ub~G8TwcaHpEx)qDJTVa~Iovw1dPVI(<@EP|? zpKH&hHGE1|hfcKmzgCaiD&$xhUzuZa z#zu*W@$o}Rn=?;%KAhTiQf4i?c>!PEw+p$aFC4%3jOQVHlKT^eKDIp9t(BGf#iuV- zsx@q?$mv%&!r?W)mp#I_UwFf%v!A~miM}Ge;{5BJ_FR>d)2lwlF4*BStKaIm{mKQ$ z=9gZd_+0W<%HF+K)VHd#%)cx@Q|_F=vn!h;)=as6Y}@O6>GhYc?J2+M70VJJ_3GgJ z%$1&PvAO5E@BJ{ac5!~&EO%(ZF87&gFZH{P=1kAlyPvXrU*Y19#XLW4{@ttzT5tVZ z&%JwF*T1Dr|H~I?-Fr6YNW75XMe_jZWp%uc$8>{#?9QFF;QpgeVGJ2P*UhBW_FWTu zuv75$(>*Fy%i2|V+Ambh|KPB~OuvKwhMDO}n-k@$R(H#J&A)!1`Y3IN z+5JfU)vBCjEF9$=bm{Z=>Km} zw+^&uX8oiqdn=}AzCZ0Z(eVH7YkzNO2Ht&BUdX-Z^}3h$w!YoZSN>?@-%`)8UwPBq zUU$5Iy!`o_xiwb#pFUjp+G*}d%*cP70|F3HpWdu_(7sXrs6%QWvM zmpt9LP5acJOLq!Z-j~-3|El0yx9yh5^!~K3F{{GACU)0HRxvb4_+?rhU;4F0imT$) z`=@(uIMx+`lJTs@{jN_#vA5YKq+GVr8p^EAI%`n;5 zk(aV&Mos&-_NUn)S!cPaocy{SMLefFdFz(#68;_eTT}0O=FO<^oXMxm`!3Hs+h-+J z+4Fw*{F37y+uxIXyK~`jO(C=E z_LD`X73Gg7xO2?lH{yY0w`SM@uzF6KI zf8(Kjuljvv=L?n0D_xtlTwn3|huncjt?Sw5)ZCAM*s2uQzV^Uv)2p@;9&bO)zBRRt$Jwb#ap3`e zQIED9Hf>H--E+VBj@ljRVmaJo3)*7cB(Hcd;0=Gk2S&e_vm0!WHt`$|4&mRxG?|xE zGJoTPbdQSOlz8^C{0U|2H%_sha+#BL`-vT2Yt+|7e2{tnSnNLI2i}yLhMshf8;Sk4 ze#gxgK@DCn8>PE@oeJoU@aO=lJ6l>Pn4=r)_&sk3o`BT@*O+NRcu&h6GOWfSVO@CH=-?HG{^)#z#%Zo02%RT3`(D!2UrSu8=AM?cg z|7UUK^T!KvbKg!~E+At6So_lwqh2}n1x2>|-_H4S%<7mz)}Ebvw=3sOdHM4EYsczu zuNmq#-#PUt>U`Y7x}196uirj}uh`zX zeW}HlfWA5(`47L?mw#FRUtW9P$9TOB!v1HX8EWJY)VFZi{g-M8-|$K1>$T6!4gZA> z*t@az%};p!++y!Pd!`?P3Hb~){2SgMJT>`Lv>Ai@l06n1zL^%(wC+mzQOuyv_=n}d z`d9C_wa?wx_w}Frp;N+Z^6ie_o-a1#ayA3&@$>unZoIFs{?B`+?1ef{U6a(gCr)>R zuUwWBzQx&=$=H*ds-dGZ?}qG}J&kKiTQ8pyUh+l6!#dt3F7REyLHtF(O7_jRYf?f? zLSJ!zHI!;GxvRpzppofT?%horXD|4`#xjBR9><2OTh;ES_!^YgU1Ib;9n3ggb&GVt z_3aINry5;s7GQC|{i-4Bo`qibc};7N$b+hv{FtUmZ_v2X_~g&M6Lt0Z+6OJyte;!3 z``Xc8QyCUYmn<-8c(i@5c+;<#byIwIXIgz-y5ULow8OcLEXyaSvwzY*UtModF)=^J zjnBlpZnEt`_2Z%*a$h3uUn{CiuGqOg;nSPODa+xs9Rm8#oo_9r-0AN!=WfZ^ywu&@g0JHo3~tadG{up z*J-Cs4*P=#Mamh0zm}!F$aQqve{lBGA5j&|>7N*w*ez}?{B%E$Q^bhTE6v%|Rqyhl z!!j}rem{$4_sCpe_+iQYpC!qvzFBv}KXaF3WhFo53>j8PS=59#2XZ<@x_tBIjR|Cz zits(A9Ps;uU-I2b#!0WrCfP`uemL>T$xzpL%J*<;;(k((9 zlXa#nKl4$Oahp4HndXeH2gT7OfUQPW!MR=9> znYw@n8;-F_dZ*ZKs?K8g^t(dtz~VE@{_5`T{j!1QldCNAv5n{31WZ=5uiCODN%|6B zuAh9;wn@`=ojsh=*2|Km?;1Y)!{7I6{~yhkbmB4Bt+iWt?vk3;c^ekD{3UO>1fJ-> z&8snNd--W`&f{F(^!?#8Z(YcjF^;To+OE5{UnAJI$NAaSa|>=%bMNxDjM`d$c#fMS zBlG=Vyn=scl?j(PUcWt)N7MXj=B+DB({Jus*!0Uw^2kotTb-$AuJc7t*m!C`yPd1q zslx%&``jODHyv!Rxwrmoo``1jm%V2*x7=T}yx09M|ACz`&$d3C#{cV@Rb;YE|AZP{ z{~zy??*`su-cY}Kzoz@l#cj>zUe`Z=n|I#A?#JAeOZL|;uhLE7Go7EfVrng^NF)w4{o8nhxFEiUsbdDLkn;tlCi@#I+woNCyzg#qs zzc`(v?!ZjmaO=FFb-y?!#Wg-;wwUucE+@oGB5#dh#q3(Sfcr1rEMRzT*7*69!f}KD zCNq!iyK0lOzmNTDXu_=e3Gow7svX_Ox98u~3)9#BUq9==b}aZdgZoyuW?cIpHAVjJ z>GFjqu1|kh{3tAcTIIp1RU7!8{a4D}H|2TvCll@88=oGrdF7TRHTCJ6;>U)1kDb4s zzt?)6jp2F1L682cE04cA6*h0Jm0a|+W&Kaj-ID$NpnH;@`9>SvV0%Wrk4vAPo#$?+ z|Izk$%Z*pZb@$Gg`dy;y)7`Ak$*1o;N}m@0yWxFm=c>SnwE1<9+-JsIs^)&VujlQ< z<^PgTCGA#HaXEeIf3oew6v>i?;FO*RcOxbFzdm=~=BcUEzvXFA?5@P!oXhMM=)IS@ zu%2(m)q|V-g8EvPNB{k``1DWppK~9s)_J;4;^))6NfGPxZhn~iN$O|hllo8DpB9&H zuG#wb*7jf4|HE!7O_7~GDY;%l#`|@0)ivjT4IB9{v)-G^|H^WDe33`I)6HE=-0zi5 znzy?wjp4V2*rA}c3_R{#Mzx-jb8k z@<0B%AhY!8k@Ab%K1F_6oisPFKi%Z>NxhplCHHT(+IGvR`uaR|lZ4M}{3e?i-VbnJ zwQcb9658kcrw4I)ZyKM4fE7avsh1=`D*u?9YOxVDtun|+O`IS`{lmA z$>I{{bX>yi-`U%O5w|4*-Iby z{ab53H`pz8?Sl800~wy$Rh;DBbYCs+>)d<$&P5+@pHchn?eq6xS@*WB%eV7;nNT6Q z$2Ru+q%AvaQdMdXnaw#m^J1k>QbTl2-Eso;`V4$KZ}$TdbBwnuTS?o>Q5O zr-avpCBEk5*6R7KZm`F3TlJb7iN5a-f4FmV{qNlHH;ERCxAiw3?%(j>Ji{7;8h%Ot ziPxBJ@F)HVw|J0lu;xSspSF2K;*E!zVt-^A&L>p#iq?0vh;noNW4P~jEO^gR&izN$ ze~@B(z?rw<`1KEV^B%GCxbHct|55UugKa-6_q@b*@f(lXB<&CCe-Kl*IUH` z5$ENVE{tZl&-`J(V{E`r$%g-|Ul0GcXaDeEW-!=_O#jgRf7^qT z+xs-yuSdME>#5@Y^`7a+?|I)XUnw1K|M%U#$ZlShcc?>VX$+f*k1hXY zFE>lI1AQAxqVG>_`I@rfa@UqSic5tr6)|g{Zz$?c;?(@jwL$-t*@55~_r$ONyqRbF zF>K-8GPj`4*xca$i}&X}Pv^4E(Lb-nVRe5&W5lVG`Iqz@K1z3R|5S+Jd9i)D(1h0u z{O>LD`w-9V^&y zH@H72;lHu>`u_EQr+(98=UirTq4&FN>9Ps&J2`jXwK@5qWgV+fhte<42{D2fqHZzo z7B{{9Zs&c5_s)lyg)$>7J`*-*JY%_xI zY?-<9Paazxn?QPW`;-6o^u5_m1${mAWLX~5p~>GHMMDa9{f{-8koT+NQSUvLzcZVy zKJ)SVTugDZ+_lm#X7+N0zjJS~vp)TFB&|v2>$NPl#S;PejQu8Z3FL%ub(Hh zJ#=VZ!GCjg*Xvsg`6n!SzjW=dx(@3C8^aabzZ{=4Nx8yw;pxdwT?Fjjo=xDF;85vb zd*R+Uv%Rfmyl+oS@Ci%im4C64^3d;7?o2lMtzUb*gzHQ$<6EU&2RHgfYZ~Q#+GuC5 z`h4kBZNo`v?pt_`n3J`4*XHGC=k6&wbUJ$%>lTI&3{k;9r{#UW)q6?qztPRP zi;EvVV3+xAyltaw-orglVrA#&zWF8Lw9+wZ>)g!uTC-f^UP-kX-gtGlch`hf-Qlkv z#VG&n+xnVIs7>2@)?SajdcFP|ef9PobARn5IX&xn#_~zmuk)?8DBZdKyF*yRhFdIs z!KYl_$ehmqy4v^ZSvkepZ1ZBA3JnYu21!<<<;ux zu3f(l+`qbg;#u7?q1$`K7ii?}`o8d6u(gKEQ_-hq;@AGSYgkw+C-~D$a%zCy@A;n= z&P(kn>nJ)kY2L0in>aU?Jl%S7vdw0hxy*Zb?rB{5<@l%f+uz`t!-1Ts&*!a^RS9yt z_u}x}&aRpX^;gZ$t*lXBkka=sQSO?d-s82V-p_S5dfq7zfztIpN;2ew1)cEI*GD!FZ)%z7n+lz_OFQ98gun@XhnDO)Ne;FZ(%-i;kVQO zd?TUVH}>td)GMjydfVE6^WZ$L{k|^Q&t2b!NniI_|9DF7ga5Ag*kxs&1?2gimUwpl zA%pH*Z;OA;x|JPlm9O>~ZB{>!aQ*SK)0?Z7{(nBTJ1=Vo zR?~V{NAwrhWgm_|xw*=I$NqTEmA|K%%{%^UTZ(b<A7Epe@)8KyD44QXI!(~`)i%6m~E2ln}jNix?Yc%8Oby+^Ed)scEI{#Zh>GqTG|9z*~ zcd49t$}PnB;tKn#+sPFSP7jP(yvB29CJ?pyR@UbmQ_>v)(Q>b2Yc$1 ztGB&rTGs#V@y2ftH}1QfT(i-{(|mL5FTG{Er>LFE{pOc@H1cmO%uk$`xxJO?=;z7yua(1;jMX6VcP>4u6u5lQ0o;ny1%O|;CDg8<}Jz} z=c}ZiC|<`b&RxWCEAd-&;gT&^W*_@*e&DQb!S5|h7e4zrJcx_wK0k#|!(R6F+vmrB zS20^1eExdn=P0lJfA`FBlHQ?y;%QNl^QIklydp?W#F1c@4gOpEfB=CcliK`KP_j z6SIY0j?&EsCU8m~A+8G+pqZ6X4PR8F{+mn8N|M9NbMJz%A8=Sp3ZwiS?7)d;c z3&=SrXm0R^agWoc=?42V_ry&}F%S`9Uv)ii*YPHKrHAzn2eTQfmwd6i_BH#&58EeS zcp2)OtZUkY`EEQ^$GK}-_&@l*`N+ds-y{Fv`MKA^DSP-2 zGfLik9_8hi?zz7+&BAV3)t~J*9zNOpsj4g|=!?~s>k6qs+Lqa`b)VF%yT@lPzT*1I zDCVBcl^iFwmPF}&Ud^L4Va}h+pC1}pIIz#VtR1qiNb zrp42xp348U^qN(%X5zoIHrX1>A?+-k>^WW_MQGf4o`~R={m-zqv6cjD^m%sPU`o(&Dd)jx+ z_`rKb`qKQx`UV9PpRm4K`z*ili`}hBshS$cnXLaZWq#*O*#E(%{Ko$8mY3d@CoIoT z-20#H%@3Y!brA>e{E+cDKcUFY(v~@gKf(2$z4NWL9zT_*T%Ld6+JDId`T>le-Y;gl zVE^@-yq0|hqh8F-UpxnRf0@o)B6?u%|0}F&(d8Q7MPqZd#rHBqG_95VnfCFMagbJR zV%VaVn3QcjTxyd`W%hpDa5qij;PjRHd(0D>p7$nry?w@3qR@~d&+wwI*z)Ju7u}yF z9qbspnIBwZ{-wK@<(H%u2d{(Wm74DRYx-3`Y*P($6lqb-1MyXT-mC>$*ZsLWm+EowLJP_-nqPkhWW+T91RU$ zlmp&n%dg9y%eueR=Ke0fNzbpJo4wueXCr&%%7)Kh7MXe7Bh3G*}p0tl; z(F==Qm_JT+e!Bf`kk$f$ZR(fOfofaPA_yVoal zGp1<2uT;;qW-NP=8o_ueS~8sJTH9B%rLwo)KImnak7qMEVA5=Fr5BOLyqQ^c!|Dao zuQ<-(HJJNK;_8V!X8WbW%l{ynGq59{fn!TUsT=cRgRH9Cob?=JrMCapmuzb<$LG-#}BN$(Zm*D z!o#?8+La3o_jw(T>}-CVee{IE?S+gE`z}=~f8AtaF{>=E|3=$}&prned--Kwiv?{a;@PJ*u&%tjFWS+1iDPMpAup?fUck-^#ZI$h1NfonCN18A; zIrdEnj#|AY_=@^6?$6P)5AXH0nV_`r`r-qBr^!jwE_$K7a^9pT@6F2J?}}Sj?qKCv z|2t7N;BT<(6sy~cmaA^xV@ui6E4YB?vBVPnAeWT9@+i9k1Np)jDNJ})~idKPDDF?VondT{Q33? zXB%s#L~vkT;hmGauenc2yc#{(QgbV_RE=M5@#JZmlRYLYUf>s;WXUIy+jVNq%||B| zKgpi@+h*mI@{5QKwKHskH5-pP|pY&il8 zBk8j*Q}o5%ed_*`!hiZdH%qg~alPeu_cW7L{{5xV#rtkwd>9~5>tC7L!>-<9rnb%d z%ifnWe@{L;k0IT9t;N1ue|R;$Uu8bXUnhHE`^A0E61R=|*rU~+G6n5h6Mi9V?G(e! zxnFX{`DD4ubp{I}VQ_IFu9 zmniNR{c<3rW}4ov7w?_;eN8tPU2Xlj>1qDc%AA{urwz;h$RWxj*f^{>xeW=3mUw$z6I=ioL&dviz&(-sk0lpNns7 zo_?yM)OOk5U-pTbTw!;!^4Dzkxo7)qbMERr-l+4IATEcOC^wW<&r~P|v)HiLd z(UhgHH`holySOQ>R`50Bx!$`X+HsIWPCYCr-`9%ojAfXFOYIIkooep6=_iie9^(oZWD7jo#Cl zH7_MEMU^|X_nrLoV}bO>T%mJvCFh^aZDDV_ulT-^Px`W~Ta^9n)6SeBeBFEeKUK@f zN6EeJ%T>+kDP6fPvsNd1`i>uQ(+@3{+4;t9bGGs9WQ1_+NWwyxt-uzhvL$J7o%An#zRD_4jx*8@zgN z7&dRx`^6kKCUL^Iq$;1-9^;;nrIWpV{r36yZCLZ>g&6$GE1wtlU31D-rgQz@zkd7t zd%I{$osEUT-0Ivtx=&l`taq)cWX|}=Ff}pKu;F`qbJbG$vsu!!YKvkswqIg*H>8K^Y0hC?&6>KPTxs%)l;9dVZFoKlpUT9O$(>=h??86 z8Hc4vokvDID-+0U%QN_49-Qt$_ zo+H|Oj>+=)^{F7-+26u-Ei?{J8d)m`KdYhOk0 z#~WhjGTJ_-<(x8lY?)VhsHwSm`t@(656n+J(EOF7t$x?s&e*DA_HoIN9?EYMr|nK) zss227n&szJCDZ&Lw*O3PEEcjgS{BaVd{4ZR<(IfnWy0@AJlvJ%<*zMgC~v9hs_xpX zVyiMue6QF)Ia}{-_SaU=TUr&jO8(cLOUKhcwe7j?xhRGu&fVd=Ja6sYm&y6(kAIq% z`L+Jq$B$Fi-`6=>X20z3^cUA_7ypJ02Zb{gz#B$xQqvCq>(cx*Dd6DM`W~)H|BM;t zFK#+ApW%nuE8Zvm7Y~QD2dIg2>^Kqd=J)?ChZfoWe80n@nB{|aNWpLEm9x3IY&;Fx z1m-dQVEpuUzT(sQhfkF!E@$1aeZyCdC-%(Oq9cChvEH%!%lb`TW9#4&z{IOh9!+xN=VT=2z z^$AZ!6Z*CtwVhzc^hPql-*Dcn72HznAq;;xJ=mAjFn!<&vvY~l%G#Ew6`+q4!=hZiw%k^Kg%##ap zUFP(v4u{>Iw_l&FJ8DPYv}D0b52JzE=t>COlrusxS6M+A;8HC#wca^Bfh2$41H< zR5>LMv&bx7(6yyx?xw4$;!G)3w+%{S*DxwAb` zOBHPhajRSDp0xbSghnxkkPm^cK6w`GKC;JXs>y8)Ye%*X;g0O57A-%&ZaK?Wvwuz> zR=>=Cmz>AOm0X}VY3>ES-V#=-RJ#}!!-&o|4P z&9hAtqxue%FJ7~DzkGxHfd&0l(nd}D1Ojd~9Z}kS?fkmmhkLgcs;ktuUzzF@wavF| z=N7{Q+n&X_v78pXFjwf8@56P|b7N$7pHtheeAuY*R?5`!N%xI^t-Z(e?~>i(wRwdz z<6I_dKQ`GS`N48}na+EgmgIX==k3dg_q08E@ZBEUSkL2a?;coi|68@Yqj{9&C=k`2#YQ#7yC%&paLw!3&Uk=f{-&#^FTfrbN)tZb{J+qFIy z9pZ2kn|;V^%fI58nl~aJSLZHn?rEK}dhNBtXp@rcp|*^ z_ee}iY=eB&}_ z_L8@`Z`h;HGtZfIHX+vam~y4T7Uo%O3_H&JK6^b_RzEh+D*Rxjl$pfRd-}fmMbBez zmp$VSU~|3oV%HJNsv8ZW&m%LfQ%^Ooyk!wCcOv`3#vR`i9{7Ilo`1ybvj3HxVf-GM zZ&{Bqzc|T%+&EQlUuZDP)P;ST(|qS&`22M5?b|z;uO2V@Y#1@`o%@M}e^=Cev_8c1 zmWd^=%=qEjmzOU+z4Auy=~0`5;Yz&4`@fc-{TFcUz=PYL1SXlKZJB2gR+<<7=*Bf$ zZL9ODFP#_{^8Y%$b7M={Cf|ehlCS!9dCp${*6`wQqh(Kbn_c-??qs{d;p_Zu8ox3M z?%lNe)_88V!}tGxzgzTg`=-?6yiNJjq4=r%J@0k@*xsC9`13C7E{?YOdxfiiO`Uk= zczotg{)_pW)Wc+G4#z4%$X>XsY(H=a4M zILPttQm5JnlYTYv30yZ2zP&I}{8UJ4O>^D$W!IuFOs`5iofpMF|MPdz!<&vrRxj>R zeEH~)`^>~oF~{Aw>?dxyJN=mD{nuw-*OVpxeCksdbLq~)!~Gh;uN-)M1@x8~X-#rF zJ)<|9w{^9SvD?l`JEB)T*rUJIZozAYuR6ap0=ES&+gS70{?pOtxA>mUuU%MMl({cp z_aycAi{xGu^X@*nQTpYi|CZI?W^CH_M@F|iyJpjznSb}G=rbI4-21ru-}gw#w#5Gq zlb&zvP^>%neC2=p7tKdP+ajb-^SIsl(Ud7v)uXd1XYZM9e&;2;R(%y{=?nR8pR#V{ z=2JRJh6f0unOl}$bLqfJi9!7|_=PhGXuJYBJuO|4eQ@NtLXW&>eI#;)_M7|Og25L`Pr|#Y?jG>tI60u{oLW4`cpUGo1H68 zZ&&b6dKF-uaPaq%9dhfJPM{s*!A4~+K?H%&kBEt%mz zqx+sC-gg%65Ix5*FS$KEqM(_zx<=Oghn!eV2dn>tf@abA4_e|GJu15RCrm6n^!$g+ z`hr7@+I$`roy_+huvvfEdx(`=Od{^!hhPamkBZ*!8xODlAa(xZ@rpM2MF&2J&3_bL z!Fuixw^8224Tt6OH#{(@NGfHkZIjL0lk69G72 z`B;4NxtfcoBh)ireYQVzvhkMSk@Nc&lq;F1C@!q_(Bdw3*ghxd-FthvTf&~U6K}qm zx`fBW_W6TX{p^y*)^Bg>XT4*$y7}+l+w8a2{rP+G*%E_EO)nSUSyuvEFBI+vza-rA zWvu<4M^4AqPo920FyG=o_xktK8QwAexiep%;a_^lgB^?YvLg=t`?%lZW&A(k1?}Ot zEcd-U{{L+7pC9`f`Su%q5x5xt>%V{C!MFEWKggb${(omcAmbg)zu9l*{nxy<)1V9!0VHBTR$+!7-2+R1;#%KzQv6Fc$ZL0OYh`Mh}wrR>M_&o}(#E@|L!tY!T> z?W~I91ePhvLAMT;neY9_xWUVA#(b*~#)p}EotdAxZ}8=gayX?WT5(SL;Yw*PyIeHg9KNE<0gmz4v?huxXXQ*St=C$hef}z|V(#f&zC+t}>_X**MX>-8p~J6^BW) z->@ySyyg)4x;|I>c9xRyt0mjpx1Ux2i(O}iN0|^ zS=vnRu@x28rc4OBevw^Z5s^qKpuiCG6#9DJ3T#nmVe<#iLK^e2(YW>aMs&x5}nl-4uWy?+W zZ>W3Fy*&5r;0VHA%4$l)K>pmXzo0xHd}*=3HGw(PsS&GWbAvU7Z_ z7b|tY|7Wke!uI30&&~O}&L)|!SZ6x(^`0X}mir#nILI?!s(Na)jxj=NI!gk zn$zRYGLdQL_(BtYo;@ijE%U~%^73K3M|#&8edL}ls++tlSnkQpZS8iKC70g&Cpn?^ z)-g%f-+QL|z2+)@5bl)4uK%F`Rz$|D9?guKpZxf4m}NZc**ksZy7k&`cl&)dE>C{_ z-h182HMY}V?fLRuY;X46=)dPm+D_;0nv#C(a#(Et#mztb?tJ?8ea+lQRr989zPimj z@2$@LH91q~K8)ehTynUzB>K~wk2c!n)9P2(t*yTHKYG{7mnQeG{pc*st7*z#*7?*v zt>?^-T_$O1xy;Xs?yl1Rch2hZ^Jtyw*ZG%p?tBdR+q1~HMeOnhyShWKjZ&X1U+_*% z!K680^39@C$#2`gvD;r)tT}VZ-ImKca_t$5XL3^R(Pnn1N|qhpT)4WjdCM;FIfKM?nBuj`aY)u?_T_N zVp6Jd>$5YrR{dR?d1%tf1*`Au^sKwM**6FWz|2sj~BAua5 z_PEwzN!Py}x!32f{aKJLckIdgnK_~IVL7k;*N98pUT5dccV2#zZ1kS7Pl-Z(-DpJJ6i9a)wpfmYh=;c;1>7^fngwTI-88oST1lU!2FL zH!Kq8K6yXQwYB{5NB7cS=?DLK3o4@PMP&B1{jE;ho9n#4LZ_Xf@bZn?q6<4dN89KH z9x*VTQ1&ucb-!A!Z_u=bObgq8_&DuWl%4Qg;%DahJ@?MoaaH>?XvItXddM6l@%474 z)~4wjUQR!~w4lEsk>&W~IYPG&nJv1uU+ce_xD!bg$nHyaNdr^p0;5Mq~kvSKE4n8dq{N&Sn< zA~rLb@UWz-hrFNvRmR|6SKbTbOF3yz?pJ-T;K~%0ShvJ$p82QM=_}-XWHeGgEl#~C z9PnPD%E;J1%k_KP;_urgr~k6)+tKt{xmu(D(SsEJJU)gJU;lY&i!JK{*YWY)|5TM0 zC;M~FTbX>u`IQ2k^6f##Z=XJS{f*=Y!yJa9*Sar${qEWKruRwz(qc)K|GU3^44Z3M z`{j?_KhuxZutMN|5n>lv{FF!Tch=8-$5_MkApD=XKVuE&ga51#{`Xcje~%!;SE36CdGk%bHeEc8RlIjC?<@bcv ztl4lm{*a$`f`7pDUv^AyUNhJ+Y-pbP_)8`+iW z-M@KTCSAxkD*e7xhJ|5OtoCcuJ8R~NDcrqs^vR>wxy%!s8$ILpuXT8IYRxA-`yLfl z%Qr;~#zn!qnjeH8F3^^_q1WWMc3bAt#%T`hf(t%7G3;8)r=hmPt;}A)WKMa;_I1;n zzi?K~t?Vyz{>fm~c{rL$WtmZNK=QqXOn)ae&-GuieS-0h2ek`kKfnI_SKjwE`{HBl zPH)ySR@pN94d;;)bqfxhYfrJfQgn@ZLb%C=ihJR9Gx`%um_$ykeC2Fu#bH?f!05mG zs>-hQ50|ZKo>t~ywB%~T<=a}5pL$N$k9c=o={{!OSjp&cZQjW*D}LQ^IKjYXdojAEHYW1U z-jqD|J$v5<2tVKGd)BpLIbX(HrQ1oizT7W<+rJfH(cjGa?s1~=wbW~TI|TM-oNo#; zZ;;GSz5n&okNRg1&wCy-%C&x~tl-G-_khSm`Ge1Sc}{;@cshXb#M<~=nRw<5gP$_X zb0=3$W(eG&o2fUIY0AsV1^+aa^KZqg{av+5;ez#Bn*)CGipe$>DPn;|Vrmf6;@?PYrTYQ%2&v(_oIW<%~HlHo8`ryg5;WIDmyZ=1N@pYZ- zf*Cy_DXE%@bB~H=8qZk&L-&Qa2rTW2k!L0-bbeJy7V z1RJ_r*ev8;ZJzl5q1cB6|5^O!e&qJd+}`6Tr}lKpKl`%1`^qw!elS^y&5kwbF;``l zeW2&GHPr0*4qczDc9*)h3Jl++qi$>Fvs5dYHO`Lxa-k>DJ!69BW=59q<%MUW4;BQo z{GEKw=9j~h=;w;M*)wmnTzOmZ`6KUP8Ou8v^2fJ)n|qGC@=56i^EJk&nx4-55Pz)f zQh1lbYql9;``QfqKHr~wyZ2l9gr5tZPx!}Iw)^IP*2T3c(Tpm6wdWXLWf$p*-M&!~ zaI-^ywoR;M-!6*}dcRigH@_>kd(pQOMs0^Dm#mZJdp7ag3q@0AkI1J7<1_m; zuYKLEvR>q0_&vFz*!1}&8~0eaZO`z|+gxRO-p4LF@4ML1FQ7e2{(eGZ7cHP3=i=-Gof)wPdXq&~(6Du0%I zyl$^<-J+Onc1NciKfdL2ki7l1ea3IESv;wZ?6b)}pCVZ@;kVX#C0E&?Tbs5fR(^Y9 z`Zmw#vG)-yBta&A7;o%yk(|lDcdpqr*=Wjl0l&G|eD^KhJMSgq(XR`sU$>wCC$jX1#s?`O@p?)C&gZ?%vYQ&35>?LS1-iZtb&AnO`gS zU6WgWXs?Y?#cZi=Io{-c8@;a%4O6OZ>YmmKrFwm7_eo>0{=Ap*39It_+&Q~0nf-m8 zw0hS|d+t|y=hNA2d=ISqQsQ0_t9ShwU%#c0&8wdh8tzl_ym29hPgWXJ3%e&cE>it6#*#kD5IB2|Er)%M={Z z-|$E@?$K7}gT{Rp3lm(KJ_yZEKFZ1Yy`ojL+)n%6;R1V>tJMp7CVW))sOYi{Tcfe# z@WE^bo^p*HhdH^+BG~i2(-$$ns(YgR>tpby%mrts{rRs^znb;h<3x#wD~qcq*<8Nq zpPxAYY}Ccy9F6uTa=p$THprwWDN|x$7?|;c}7I)Cwiy>~|y|%g! z>3i6+w>_8`;P~YHMdv-7U#ETCzGC~D`o3L1ia-33|M{L%bj7@e5~ov~8<@}3aXz@u z_+vXm*p$Q93oRsq{_(A`VZOwtxwqkAHiMnhsq+&*1uLkoX&1Ms`zHKkwtvF$|MF}8 zurK)%JEK;3!~Db7&hL?B*|fi5?R~~KnrGq`Fx{``c;L>*@?URF4fla|kC(g?xX%1J z^*)55`r)UCUsuKKxahia*MrpTrbI_C?o*n)4XaXEBe*UVx$LxOd}+Dn$D-z?iJ!j| zHFL$p3v)H@cVKPt*v`|y{&L%nhx-`gE;>fXd``&UVh-6>)Gl*JUjkx zVHc7*aHHW#=|RTiO7#bMtR~T{nV*;CJ~i%st60w#@v}tj|dfT3;W8dRyQ4 zB%+xrpm8VKWi5%>`(E0? z?zBYZ#BV{C_w>VtqEl)@S#Qzqx+)cF0Y(?ae&5UiB`0 zvYb)U^7^GxMSB_PGxH5uVsFMR)4%pQ`>kfs@vb^$Z#^cbUvS~u>m7x&{Xg8g`SyC&`MrG4^q1dT*XaLU@YX}EdDF}fY~R=X zTlr*UnSEM7@JCOM1G+}{w$@nBJw5Z^ok*FEPb{+);7VU`FrA@8cck$U35mza}x%mliN@AB_Ca~mXniH?VI7tWxZ~$X2~qo!se@0 z@=hqMUHmrPYMOWK%)C<{D*L2)ZarjO_y455uu#e!kJ;^Koz^IydG4E^+B5%b;>0V< zKIETUpLE*y81unrv;Ol`c*{5YUNHI+ps+UlyKIKtg4^Y{62Hwpe?Rx!;&+|@>#x~d z)vY}E@vw9ErKVqR74~eOQ8~ky=g|DG<>~A>E9T5N_xjS|aG?wQ!3n>Tr`PMoXt5vj z|8Dc|LfY%MC(q^w-@o*C9pi_y|9m8JgI*Rp+bl`>P}p=gxIW{<(H~yNr=8(WZ+}v7 z?|P-w;kpS^GaT5hH)Zk-&JMc>jp&-`&#F&uHcoAsBK&kSOI^saSKo7c zD;LzW2ZS9|TahVSBk)!_bNVlVhWh-1b;UDHey;9UZGQU3U|L4A!dsR3TF$3bZm3>u ze0Kcv`H1#us#a$Y3tuspy2SX{X4zlgXwln7n|E*gYwY!K?#cPlm2z5-7e2Wqm$T(L zY(xK=Uiy5W=`UpO_LZ;tZTPmX zqd($anEcs_&i|(;9Z#EWdUyAQGr6_mH|r)^&3wPmXz{soKQ5*7f82Cc@2vUH9QnHE zMklVRU)Pa8z1Ku-KUcL-X?pi`?@IYg&o%nnzXbm8JDnSC)c@5*Zi;x_GJBQ%?Il&& zlEI(#ALcJz>%Xa~?)?2}b1Qky=KOOut2Ilv3HjHf*SlMz`t4+ydCa$~mb_2#dF8Yo9;yJ50sxVPvMo)&l8tLw3_dZv;NG_5H*7ySX9OOKxZhRhu32eR zB2c9>y=KL^=M(z2Io}Ty3*1-u=Y#uOcOCf`yN>L-66Sh0_~zuYNp1g+7q0nxv??h+ zHY%%YQ`o;PZw=)y$4C|5+PBsu@cqi&{5S31&OUM2xo++@-Ak&GFW*mj?OgYNS}n`7 zqOBhm*lsqwyQayv-njLfKhIvqXWX23=k}E(o*qSsbC29xn{CT0g(l>8zu#)e_`3S%&BuFsy2U438T~r@ zlzT(PnJItmWVH15Y_sE?TyK5m+U1lh7TdNdH=S>nl$pEzWccUUHTxg)UD&(lzURKCDF4P2Zcie4EEEnN*u9+B z@~V-TNQ!mEFIld(?e6l#@?zbURe-QPIkCnDf7&*DsFUU)VUmM|`%m zJ9Yn<@o%#{&GHn6ra3&klvU9ZyZY zi1yl36Xu5pzq6%9gVg z+n0XX^JvYvOOdWY?EWWn#rUQuivyTyEb~Z&NiD>y6;zhuIDRQZs)Q-{m@<8S2?lH{%`ln z_qqLt|MwT@mEHOIJ|;pb;IC>GhqmI<=Ji5y48K_p)bl_1&;5Y4A)l!t?BMeX?i>0I ze*_cGPrSrgS|M0cw8=38wSBryotKGkDbxB@H_rLXxtQ8ABvpg_X_?rE9%^mCh z`i5O6zHx2HUwrS{KV63R2hRkof1kFZ$NEbC!KH_Ow(oea^?lnc$pp@$XUwhB;|p{> zcIuf#c6NK+Q zp9YA(l5WU+`IP6ib4*J4gW|G+u!mL&FMsa%Id{+WUw*?bHE0h*4f)3U0x5Bw72-Qh0#fcNgn{4ajXtBMNl zT~Fr?={R-&m)Kvi&%z1!-u!GaXlHQO45K3gbkWc8OhlPnh!B)ld;oq@M!=_a-d zd6sexPI5k3jmnJ6max7p``p+*c}rkJe^zkX0qa{#|MJ}DFgxz;m%cE)@nDZsb%L~o zS;pl8z0+#qO(_w65&z}hOy9my=3?Gs8HRI7{pXaU;`HUad8B4|^S#d4Zf5jCWw#ug z^;y$u&Dmdhe>RGVd#u=1#C9(1Mao& zGP}=^`lP#<`8m_f&%wKA{a#A2CU zYl`kn6*`&h`%yrW*JA$BIW;n-8!X>SF-A+|GUQi=3q&zl9q27Bw)uSRvC*}7zgjzK zz9z@*6LqAMq@_MgmS*wGXy<(KP;%R%d&l-V&(@#ne#@$9eJ<;zmA^H#7Bfb88&s~? zEbEtaw~Y7i0lTlgTtAonJO3~5U&pa?E8?xUOI8`{&k>)t@M}g-@R#i}dvlGc{sy+?d^?e z`%}ti%0(SCVxKwhRokS^mU?wf3%);25D#5{WSiN{%IL*)krMxp-7u??oOZlOX~yQK zt@ZUQYPQxr)6Mu?GW&f{e(@I8TRzOQ^!sPTG2S~@A6VaG^|sbF=Y-(>w{H}9zIlGw zJ}d9VJeGtP*0&m$C`8}#)LehIeaqS{mW!rmw%1Lz*)M*huj$}>0YRRB+6@l{81J?$ zWmk8(u;JD^wr%{yX>%rJrz(Zlt~q~Xok+=V>o1Yh{{P(lN~hH7#&xyF3H(04c76@K zvG^jNDzn>!ij0Ce$|sl0`CU0Rv2urOm_jL^*-Z95m47W3%GNFXdek?3&h$r$N>+U5 z{`h>F`Aeoy&A)H^rQ6q^Nl#sUW4+41-dk0#X0;Yx{PAG3!sEoliu+An&gu3i2JHM% zEBv*khIdm#&;Q>1CFP6sXa5)4__s~dyU`TfA?PX-+X?}S}Wz;lcoK9lAU{2Q?u$-3qzH|${Yl|~~a-Q?QCv)jcPS3QZ=SzMTO`NZ5JLBet znSJ@a&c3I&y}S5OZnJ;wC(FsK|EHsfP2Xo!qtKi1_L0sqMzU*DQJ4 z=l%4SA8Y3MUxCy9w41%!c}8=}!J1oUdJ7F@e?I=Cvi@X8@;RqpJ%#G)uKDf@2|JZN z<>NH{10}{Cvz|@XWymeRpmN0UM9^yk&-Jxy+nLsUlKWJ5`h3T~h1(*3-v3m-MZVah zxN}BbHlNQ5qeV8`--KMb94Ym;I-Bp-CttmbXTtJ+CPn`_UN_^c@bpuiGlecB-<|wP z$bhLp{>2KGFE<)Oj?ZxSk~_`RHlwBKP^5a!6#dFnShLkT-R&m4n5A}f0LhZdf)rQ7i~2>9QW_>`;>gN(qQA~d)KaB z7LDh>U+7z7olH^|f==nLkXuSsKaDP$3_{yG3u~navd& zJ|CWuHhKA*RLy(wmS2C(mh-T;aY=vu?qTfh`vC?^H~(-;-+4~+<(+kWUs)C#^u)gm zzMB6xdcJ6d&Be;|4%TlLo|ixQbEWy>_X#%^-##lF_NL$f=lQ||a_%WIN1ZE~6I_o4 zzbS0~KB2I`XTIX&fV#&I2J1cTw)>h{^JO3W)BYo}o>4@H!R}D?jmNe!g@ZL{fn;^@pCGjjdN3^pNf1rXdSmyX70?bIUd#hpL|~5n{{-txlp?ISGyZ* ztP7k!ZMYwFqIy#Kfr@CG%V*u9o>%e}T-)_5;S-;Ne46G;bGfn)0=bggZ?MI%bk*B@ z-IpH6vhwtk;E8~7}o4^^a2k9#we5h~W3a~%)rX^(3|G&lz|Fs+bbBf;iSH8E;p7{f3 z!}EPyKfM+74Sq`%RPkz8NBm^jcJG?W4dwfLT%+O+`S}MPe8N!h-n`}R!BfjOe3IJ0 zKX?Co<{#B7xJ~2PKghjmnsNG&%+_w{C103gt{5pFh_gS$YU(7(6?M_8=zvQ2ZQ~r% zc#E^OuCxBDo;ddYN<+r8?84V6#%2w5)oBsOGo%mtmj=o>|D61X??Co}Qbq?&iCNs2 znRi?{dNHr@PN<<8o2g&MgROhYCv0f0pD1(Zne*($IbN81O?{evozA$6EPxVb+fd}00csueh$=>mak4a-u)0olq_eJhm^9=L3 zLI(Tl_fI<Cp#_##B>%$*!VJv$e!u-N{QBZgVg~y+)`nNbKebizI6v+7s)bMYZJY0~^~~2D zT35JIqO0fbk(|!BZjW%RZHeWf32#`mFNNy{OmBS3sdGO>a^rew1w*z@p=wMN^FLyohiSU-_TsM8=0>Pv-^83iDWP)Ni~e z#yTZfe^y@B-xs;^d|d^9jo&duRn0$IIPLD2xs0xR`X4N~$Y%5T&stxr+{%A!8bSu5 z`Qo_^3pdEEaojAH&}+!1U(9g-$1KBxTbpAn`ji^f|Hy~3nVnjA^QMk;os*4AV^8p+ z+Dj76cIlRxHTMtfn{z8^!-P-Q>bhV5*fR4<=7QrvYffizMfGnKotxhv_+sT}{>rkw zMjde{BBU6W=4d}R-~O66;briyrhCEfO0PIwsWo5Fu$k<+iy6tdI$UQn^EU0hyFfObE!Bm%_8c zj(1O?&-$cU8Qm`Dww-nN%}Zpt+Ik+xH@3bFV4W|W;PA;;(AWR6rM``Z z!ovO8#XV;<*UH`Eop;lvmd9+@#}#ExuV1}2j_AE6%#wFB-_d`=mWrU8tyj%*SZbI5 zm;U?6EvRzy-<;*AyLb6oTQ#iS`u~Rc-1nP5n%XSy{bb_$JaTKVc0h)33i}ZTfoGqK z(pI&9v{3z|w{2~&@7B!|_FLB7sGIw~t#j#ZnSW;2!^|Q_;-5rsF~0ix`eFB5HacdLc3pqvB~kHo`>UJp0zSGvN|brK zfZ=Cdp4Oql-IKrEyI??%f3?@*CXP# z9MAPxd+52!-3umty*IW;vFC<4g`ECu^=OaiX~*~G-?X1vt_^?PdH!DOlx{Mci8dh=1|l4ki=#y_vz z^7%aD`R2OaSJK_Luto=;XITv8z4{&fk~5>HaBe?dYF( zlcWE!#!ic@OM7hc$$0hr^E*R?rh9LDv$W+}+ponu>3bYrDf@U%*G!xLD*ElC|CUd> zKbiMjST1vK;tKDH^1jly&lYX};(qyKWyGb-qU+hBKl)DlX--*~`f;A`Gxhq7db-8e zwzDcb#N0kRf$6g0SzfofQ&TTH-m58_w5ekCuN+I2SKTdp+baEDKS*S2x+(K3*twxl zM)SNDv#z)2?d3&XnW60>XY90s;XLDva$u4YS>2XM{?d!awbH#k-9^Zd`*-K)IpGrJhdowL#!L2zp z{GCUZ1{GS)nttA5cJ7&lE2l60?aRf_*>>E=M)v!z%$RAZtM5dFbN=RU`^zNv*<#U69MhhMq7h`nS-(Wm`iFHDix zq+vGaW^aqihV=a_G#HN>h243;#wyuXwceum%g)CwEy6-&Cp z;Hl>xKV**bcvtb=Xy5Q9cSfx=>wTAl#wvH1D|%b@yBwT<=!1}UUDNg-lJ7oPmfd(L zw*AJ#_lG~QwK3;?H0zMO%ldXHqEFDK*wmFZ#i z_qIH@_7qRQ_hP2ZQuiCyw}c($e=M$W?-#JRF7jzv)WXJBDwUik^j;XR`*ifbvV+_w z>)Y=Bu6y@bTwXSz|9x5#{yE%*?#uif@U0 zGWV4KR|BViKT|DVn&9^TjQWKCue|49sD%x{+>b&uTlTL#(%Nmjss4|?5W|nP&kp=- z|El^+^i>m=xamCR3f>1>YyZ!m_NBRg9k=QH%3nMW{26MtKie8TBUNE9%Nzdy#~18Z zW}o?)_*b6c57+MJ_uVY-F#XU>Xe;_5;9>8yH}r3<{^#$Ea}t)%XMCA$@LR0m|Bg@7 z?kOy7+Va~_sIIZ7f=&BA>zmyx5{lc-&0Ea$YUhNnY@%1^Oq?d}@v?Twp4Hr~eA{F^ z4@q$zetUu?c>9!{%Y8NHGX7|jX1-oE+t_?%I-}qAEe`QDri>@6{xRApu3mCj$z1$c zF{_1s-(mF`)3+~R&e$%=FMZ?bH*@Q2xA%9i-_4uAtG~SQa_wI=YlB%&*Ob>a?>JFa z*~C^M(QtjWezB&)>C_qD_UemR+&^$e@`mm7qKd;cjHhB_51i`>`LvUPaeDNDqF9M= z10nHa!QT!zIk7iRy|DgVJaegV&Oeu5f0s2K{QjO%Q+e*aYhPZ=He5;#%xn1MeNp}D zYStUJuZ`m0|F-_*xZze2_wD@*d3LMb`{!R^yuMohM=`Hu>D?!94?bmi;LFaR#(s7C z{qnVUw=HNo9sF^BWww<|xtN5|BufU{w+*T6kJqk!`rv^h(~bFCta=~J7u%zB;(17Z z)Lq;1pPmM7RxSs)4xawG?DQJek14#R5wku&7u?_y@Sq@AwX~dH=OnYbp}~^u`jz&| z9led)-|Wtp*pk&KCcixUWzFpMtlOin9`5T4+jd{iXT$X(ZL?)xHr@6-!SiZHciXPT z<|V)Ee=a-ibpR(T>VM>d-YG8X0W**Wi4ix z$WZ1W7QM>Rnl+DafwQh(nT1Kf-YZxCrT?$kds%p)KFgOyYvr3RWY*mOk+NGwcE0wH z8jI3eG5O9?4SPeq1s^$l)l)a@FS)a_M)HH~ufQ)et@y9(xBMb)SRkF0!fX+HFifr3 zx#zluyw+`{Pwx4`{$k-bXRyy~H}txz7vylo*V)>~E%h>=Yh?AmYxh_73-5@LoN&Ex zj`#f;3+()V&t72liuj$+5B&@AvS?`+n_)K1SufykOw$#@1HZJbJ zc5DqS4S24QAAEbpLaQ0a|E#qSDPJ0ErM}gfB_iT(M&g(181+j9&iPWQsi%*$sMd$2 zPVHjU{JlpnbxY5t?AK@9j?Gxmr(Bs=RN-*h_*BSo>DOAD9Q7C9-8CV`U;0N>4(GvD zzQ@+>k9@B1t~@zwseRJ=>sqFjwmI9be%|8i zw{G^SYH9N~()a54e4ZNCDDTuatTEoW$7b2m_1vq?l&8P?&HI-{Q~gK(#|;Y~7ASuI zJeyzqSjFYzH*5OWeg0@|TzF>1`-lG`y%)Dv{ahH5yH8-j=LL^BYV;&Zr`b6PevH3m ztx$V-Q~TMZ2_{e8io99Y`)%S^)BE1vr9JK*eyb?czvc9$eR~e?ytj&X@%&}g)&~3J zpVi-GKWw)7|5mwEH|xI?m^yElU3>PG`>BeoePv55+zS3}zgB3r?qcq%4JV7jt{?jx zwyg6;+Rv+I0dmt{RdtB#em8uXG;i$}NA|}%Y`n`MCE~10S9AVVWn_2#U3JP^`oDc! zfBOre`Td&j4cDD={+jc2?$p1oKWeYDyV{2KnwkRBASyyD`nXX32-&yI)+`-P0OrpZjr}YV+|c+m}9mD4aa&-=R;3X4=SG z^X>20n;^-5RrqD>>#kp-KkLqf&yGJ<$|V9OZFISvCqEjyv?F5CV6*c-=Qmyex%gJ7Ntd} z)yn?%-d4KhPjuPiN#~vF9^c9PRF_ttR;f_W{JiMSqT{~;4d1Srr(50fVcpaE>794a zJ zebVQ$R`9vUk`Hb?JzzC?3j607TNbWAp0(R+ZT-jQ#&YZZp?B&vW(U3MKX!J_mFVN) z{hlH}=YC9%cIoGQJeU)9TJoEm=Nx6nKUlf=D*E_0o<6@}TD-zzc7`|x4~>X`_u1>s=dQOPk@fr<_2fPi_cN`XEW$)Q68I$z=-Zpj`eGouTi8r#%gx^{?^eEe!&%ujA$+gnxig;gR!%=s^}hLK`ZmqMeLBf}^7qY=_g=v?nUj3K#h@D?sW43$qT8{HK%fB2-+F)?X+H}E>h5p4F7E#>|OVI%C3;# zw4EVN;l7?j72A^O4!_Qrd+h&OWAD88;GfqHzt|X>r#@$}bK>=7Dt-RHov&zx#_=ij zeA@C0^;XC-{yB8}124mUmP^7{TsO)l%uBCq+jC#>y-<#C#Cx#_Pa)n5S8JOV2Q%*w z%*atyO#R&Ze4oh5?mICXu6>;t9Dl-Zlibqojk_}LI`H%Tar(HbrnZ@ZHCVy@-RzsU zd)LP3e0LUjdxi0|XNZ>SmfII^=iXw!BE6Qs^y7@DAK2b7-f$FX$?H)|m@oZ8*sWl8 zxo)G>({ql|K@wR_Efo_)n5vC?moUel4v z$*KDoFEyoTzxl$I>pOM(+qKpTvRV(8HtyQ%U#1_E8~@d8IqQk->%u4PYxIoq|ID|| z=BxDWmE}S$CnejOo_yL|6MWkD zoT#uxb!LKYr@PA3=5ON6;Ys0BzccQ6UVGJHW!$q#N4Euvy{Ns(J;BN)kGG^GQ8ud4 zlX-(tXU|WMYg^hGl&hj_kM8-n=5yzD^SxIuIYmdREwP!p{#@o7_csr3uAMW>e#`#G z-br6HU-!N1yC!)mt7dm!x@ClGrB!tP^s4SHtG5O=ZB8%L-uk$0pLT22dCT4dk7_f# zCGtCWt*(8x>4A~!>-6jApILX<8ZBUSwhR}#v*N3H!u4~9)lO>|e|C-yDL@HVA`#td~ZyD}=-lopJ@>9d~GG(h;-cysxJU?yrKY!q^XWjI| z3vbS*n8zl~URt|qeY5_G&vtJG|DU(@-90n>am2kmxhcuZ1N|-kNoCC6cImm$t@vN< zudeg_dR}O2yC%UZOh`&YzG3MTxy{Q&?{2br(Y-Y0`JZRpA_{L`FEnK-`1~yQ?v#WV zf6L6|w%$va{#9V=mMgq+x@(UVSejqDp8P+}HlgwJoJ5-$4Sx?=Y|roT5Gu zwvyHDoZfAxkF0wdw_UDdky+gZ{hlhDGwQ~_dpE9Av;XKVl^JRIVOr`Q&)IF2*K70s z}5VJj(w}9$vR%Ra`s?+$KQ3e zlb?it^=)3;^-J#Wd*l0Dm&~q7Yq(0*hE6&3e)_3-XSR!9UM*X>V$J$ZzTndDi+Mv@ zTA@+xpS4T$m7Cj_tt(&JS#A6G@4}k>Z@=jMu~W zzjB|Q+tXc_x3qQz&(r@ww|;aQ{`@mXZ*`0Rzq6mx{`lE-%AXOQ?{2BRzyIp`<5R33 zr)uBb{mL|T_5atO*Z$J~_(S0T!^s5`>V29$ceS6|_vKypjooWMe$kt++^_jwNWOog z?q+{W=iYb4JGU%&7Zh+IGv-{)nTW2;WT|O8mpUiTeB6_-8(*q=NImV(nKy+x#cuqy zT%W$DKCabytay8Qm9NIRrH1COtC{AOulQT@-u|_U{Oenb-|_5pWuJfC(CoE%EJ0Dv3{G0bu{L;eTK}4nQD^c(!DUzNLc6Talm(ujB0o+3=L3Fz*BKud zHIzN|obPIvwoOs*>54at-wTxL*m*1Z=gj}M+;^UK{KVxP{f~BQoId_b#@OC-e*V+m zKlxXe=gz&k^Z1X}Wj(e{ZANeZTt9whs?T(l!#q89%$$dpoN3{k_N~PCT3a1Qxl{jd zugLU|Le|f_Wdj@3K8PJR>3Mx9$lmc`{aCj~ zRN!1h$>r@^_dPzptIXk7=34u=ZF%AEl$vjQ?Ohx5-PiPIRaA6fa$n>d|CrtP7s^-c zKlRUHI(xFQ!(ZFZITgxQ$+N09tUJc}_#V6P-h?~q`g6ZK%0F(9?Y633|M*hFzT>@| zr#{51PyVvGJn=$+Kg0H^6W`A(J@ee^(l?U@_bb*_cFnzg+Z6Bm!h*0xEz>UW=ZxOF#a`+uubpG1EDG1mDZ==VeO-aGrF%jf^) z^1mMcNb{eN|A+Zj`up2k&If#8p7Wu2&Ih*qkD6j@D&+4Ul%L6 z`48pt3%)Q`9}u)ZbpE6ApY0V*wsqq24>-l{Jg_YLQM>2pd}YPQ#Wj7_S7zVgKfEU5 z!ouIxZwk6?^BC_uxX~xVbS(0&K@|_z6tx1IJNFDK7|*QU{A8N>(rb2AzMCaGJUy%NtbN(f`j59SrN^Jy=zH5mz^WcTxa#%Z1-?1_<@SkZ_Wk$g z-uJ!UwCVU%rXPErPQ0Ig;c#xuoCn8E4)5GQ>5IEd)cbjhW%jpj*~1@Qx%+4O3iE~g z89uE1|Bve{TdDKDO1=mu%X^GB7T($4F!!576?gRe3Dcf?{A78+mzJNnJf87K=jYSf zTkP3CI5WIw+{S*1y&?6+%bE7SS1wPSU4QSDyO+mL$)GxJ?emGR-93J4e%j=`&r;z% z*QrAOy$5SzLciXh#&xzsuW#Sm-|3)KC>ZRvdv3J(tK~62Z`WV=U9@yw#M6vr>Jk4ZN2u2nT~(n3ZTpG$Z`=H*O+Lz} zBG|ZYc^doElTw@HbS7vR#|O*uO}Y?m(O4I}?zHv$YRkh?n?0jhN{;;NH)r8*NO+x_ zyw(@|>)bO8x32H1 zIk!+Z=humk&vP@Yyk#d<#@;^HEZ1NqSGjqs=$GJUTmLuBnH^!WBev>ibI+3b3O|D- ze>1+=v;DA}SfzjU$wJ@V4wbJJPu<#Xl@?pJ`GM*0#aGXpO-z3kbmQWo*|%;hN-=%g z-oy7KG_pu$)w{#y%1`3lcOQ*@To5GoyxjZlwJitgB#v{b$(0zNS^MVnLA%chvL7D{ zW$oQlyW7Bw`(^pznY=EJ*1Y%pJf5;hJMAcA*UZoDAXTbHY2i9uwg!n$@=85J_t5^A^blN!o5?^#Vsrcsh$v3jk2e*h{Q?+J2|4jHNo5KDr$sZR? zT&T~Jo9wo^-)h+k{(IjK#~fc`G;Q08o38%nn_Ej_w!PPWHRtw+kN|t*qiipK_&P{; z|MAPJ3*WN8d&A3QmKSdW8;XSPuUsm=J6Wmy+3l5YzgO;;{pK2d%53x9&DzqFrsVFG zH}RaaKKkaqlnHBY7d~D7@qF8^x{Lex7W~N24#{8pJ#u$tOs)C*$IGIP_O&_RX((I4 z_V$j!de>V2Aa_Bzlrv`0eFkjJycxAm-rC%bSh`K+%Iz-!xqQd=SIFF#p6ZiyK}Kw^E7MJd&6>rVrhLd= zsvmtl?4Lnzy=H8+#``n6Gp=S&zCU@%?ML66q{}lajdw-xPpa!Xe`n6k&)$_uv%F1y zZ@KSfUM+8Ta@qSIzn=u>&Qia&y4KX&zPc_m#%|f!>A%dT)vnCnc52p+7ngr+|1s;M zXQYel_3s?-w_S3R%)Pm0?Iz{^Sz*%@&dtl7EvG#>a^CSey)&;W!gp`oc*gK)=IS@G z9*0u{cwJrP(*J0m{qnxM?_m3j*k_w1s_sbX$5i=FN?)dYG41nQz2Dh#33dCEmfYOY zr?@=wmqnS;FWcTXr$s+Ud(8ZHtzP0&U(J!Kl9QSXna>GX?a}a_C-g7eQtfA;q^q3V zEat_si9d6!f8K2UzR^~OfBLcDDb6|k7xEYRJIbxz+|^<(GS*y=Sd{4-2fZ*+QBn7QX> zYvqNS`4c!6ua(|?V8{G5vI1)jIsLsSm^a>J&W{fLE%oJ;MbCQm&t~t+KsRCU+`oLm zT@JbHKPoFdH8Zwvm>s%v%MOOh_TzJE?Iijxv@XV;nwFj zhOwQyg(U8OVt2msYfneiGClp5erb}wL++XX^;xu7SXT0wmx*3n-Xt$yW7fKJUld;K zJ}1v9%XQYmGIh45^S6cnpSaW?+_0cRl2bKxO`3+sVT%(UXWj269^}*35j{UM!DH*m zXT|$of6Y5-vD7xGu5tEV^&88hAN+H+v9vpS`R@4*(f1SDZH4Z+A2MG5R8`3D#zR(~ z`-kMpJ$~?TTBp28jM%W~f$Be5JEvo}Y}{|wJlt>Z_(?>4&(ZjVgUb!BL|?Q&^n1r~ z-g{O#|3g$CJS|*i^RRYL|MDMVagU~3Jm9-~JH@{+?Q(8E<7p0wn7h9|EUX8v1ibyYZEearEjLb1S^M`lKyzEE^!b>hE@ zm?@vmRpl?JGThfcZ^1Rm+b;K>A6I(0_Ky7T%^Xete)!CbdT*KW>+xp0@PJ=;q^0x4 zSZ-9l`q4OUwd=y>DQwUFD^Q-{`*HSHMa3NxD!&cRJ%42KC6_k z9{cOW@3#xy|BdHvNcsOGK8Nw#_73@JoTgizWQ5&WF8`;P;fK{L-N)+#4&MGQAs);)U`Bx%--o69BzG-S%+zoJi$hl2y$z9IO z?aue?8BeXtONpPq_+Hb$PwcKg@!(VR}Ju&}^)!X1JKY#Q6 zjd?77?y|7L-K(K4Iu1o4MRp2LmDi-)n3Z^}wKCjXX=1uK!_{5OpKru8Ukp zLqJo%bVulQNrnHG=liLzXxYwp zns<|j-mbaK{9*BZkF1}i-uCj3erMQ_vUB46PZ@uTF7COX73=zNfyT5_rVZ2I<-AUC z*uB^GZKLYfeW(4c66PDJ@2Icko>TO+&^9F0C_eej_6+j~Gt1R7vL<{XanqI``1kkM zzaLx{d)K_2uAb5G;A`HMxlb6re7$h{ex9NFgsuaP%mq8%m+J2FKJayF?TqQO^i}8F zePh+I?&9xOhAo$8^JV#4KX`Wd*Z+Ua(>pEC=V$N#u&k)*WKf&tiDec7n`Nx)bIf@* zh@SK_*k*Z0Afqy#UoK)^g2jRch4WK>Su@#irX|@YGK%d#8Pu$sws(JfsoPZX*Pj&5 z6?|UCw!)_4Dxc7Uv+s-c=zVQ{tPyxTwRdOZOU{Z%QCq%tgCTl+t%UC+3Dv#!_eqSyttE}nLUn>lx*>h&$UeR&*|Gv~j0 zF7U)hNqHuB!d(4nmn%MgZ#CrH{y15Ak4~rHR@I*d;--}hU;jw7{Bq$t`>)`Q$G?hG zyPJNs&tC1ifA*QO*!=G4{s%H`zAPzCKgi&aXO(z&Uc)z!=ZuUgR1$X%Ix#9Pa-QObbd}=zUqGSezV&t{l5spsl6uxZU$Ma`JpnS!Lvz$v6MCH_!*gtM5*`jKBeIw`1Ru zQ|+7%X1rwqZ)9J4EqWYv{QvyD_Su_qEkFI)5P#&Bb$jtUmIp~13mR5Am7DHfb#k7{ zr4!3eX0*JN4v=rS-+14l-{^Arg~f4Smbu?tsv@PHEwww^R%G?+Y?n|*4Tf@y;Iwyp z!*<9i**ucpc>UJQ=l8fvN|Sfrw4Av!j7LsRPHvylBl&gP_RFPBwA}m5@Yrd^T`%6u z{k!yUtp1t6-HzYvWBRHBU1W{76p37@Wzq?keD&u=vfr~itNyRstfzHx^5pJdC-30n z*{?3|?tiQ<=>JVVHBVOmNkHvtyBSaabse47`}ti3r)#)atG}he;_1aD;-{v33G@pM zn=Q4;|B2Z`KHm4r@26jwzJB?t*Qrv<8)|;otxonzSuSq3~`X}xGw*K10qFpmiNpK~}?|JWgO632hxCu;W+r5>fH!h$0-l2TM+E2Q_ z;-BkZ|E{ua*NYv$Bsu2KtvP-_cAr)F?wri3b+z|z_Um`MRqy=zrZaWspSp$Iu`is& ztE{DBr*hZs{IV_h#m>42?bk6s>*xM1DT&;d6aF~&=MUGV@|iiy*V)j- z{(EC6d-KubJ3>dp<}KgybB^}^ZNL7^h>iZe=H{j4rjqt%YTHW6dhadEJ$HUXN>z{> zE7Qr}8*BHKOnx%IsblZH;yr6#+8q9DdiS%5vj6i}m(Twz%;~E%y}KjFw$9CZCy&e} z!;Nc&9~WKOv1EZwg%$gKt3R&xZ_j_+8g_5moNFbAG8BcCe9ia#m(i&U{r7UxZ2fkh zN$#(&r5fc=pZ+{rJ+5Ex`P#3w6N>iuut)yhym7A9`s2?yWAiTRKKNJ{l0SXg%D>jv zc3+!jvBdaSH$%+vJ-O#5=hR;_;-3_+e7t&BVJFAWyT1+A?Fqkkb)LbKuXY!crTzZJ z+?IY(>izSxp~1Apr7!<1i*8x`H>_4Bb>Xk|?pE7=asM*hxb3Rxw1?-nJ!@Z^x<$9T zKCe#pa*l2M>+4&Mw)Px<_RiGqxQ%lBuNrSV|C!&Lc>jueRhHHDRbAP>@n8D!3g41_ z7v3Fud9WZ_>z9c{Y5&T({=pwY^-i|J(9} zIu$?HJksWEUThb=aBI2RpVt+MKGJRRtrJcD*e@%9zPW4^O`Iu?Rs4ONe z<25Tlzog;WYP0{U28l~bQrzwKYzbLEjmu>|Zy#rwrcm$$i~89n@yXxM-;{s2`gpp) zKCcb+Egxea$TA(jv?pI+$I%~xH?4muc8crNaQ%_`Anj9g$hK3NeVSFUb%z!IDQ5mX zYJwhn9v(P!+$Q1ZH-;xmo<+z#;8VKOeT*PP7%Cc;JX>_<_dOrMu_3 z^3|1u-`O$!ar)H96YBmnU5LEEZ}9VaV_oQqcJp&DUPYc{6Ks5T)M59t3dmeu5~qt&yLqim#tY>x_;_aHEY&o^)75B{~5FcZ*1+K5?=eP*4(cy`S!Mq zH}%&i7hgPaHM?rfAGe*c%JJVkV#Rk|Xw@qLWn%AT+zfx6!2B;7H~&BUKQVm4JwA?q zt*cXiD@XlryUhQzmFL7iuAj+Yg+CoSe7$i$f6a86i+}2M?Q0DWZT~Lx@(0@w$q%6q zm>+ESs(n96JT9;Cdt-IkdzVWOBRzk=K45ILI`()kj$Ip1^nRMDYzz8E3~&NMlZO`lEg5OYjEempj<2`)*bz#B1jM%X)Ua@5ZDJ zTMi#~zg44P%W`Jj2Fq!z??N1sCK|Nz$)puqZi%}#Rcpc4b#ZNMI#GwrG?W7toBzJ$ zX|yY&#DR6yl2$vRl}vInXI>u=j$a`5z*YRD&Xco(?99m~8&+*C5|N4Fuh3t<=jzt^ zH_W(X{v>n0kqgTC8oEztgMRm;-8^Z03mZzNWvSq9c&x*9# zzh9onH^(6MxyQY_!iGrZH&!o-cIN*LIGDpUYsJ&)t4~@NPh4jV^1S9?Jt6s} zem|4^`l86)&t0#DtDdd(d;IsIxWEyI-Y?!Ka((z`9$(e(t+%^r|Fp3DS=se%UmRGs zhktmnZu<81H?N*J7F_*Yn(O6-TkisO=I&Qe7hToIC7>>9u(Mw`Xyvvw_OFACrxZr& z3C&or?z7g54NPS!T#4z%r*>uB*t)Tl>Bxp<;ZwZXV)!Or+P`kHoaH@7_f#8(B`dE! z&0fxT;+>MMn55>5<;+Fg?@Mc@J_}_CpBP=f@~Faly{I=FIakgu6y$mGH{Q(T>!AiN zuVqiyGicv;m~;A4zR=H0Ki*}$IKJ`z87}!vcJa%(H2oRdEaL6_HEtYxVb*4SVbi|! z37bv#HiS)Y@|pa4(aGY>{wAH~H=!CG$5Ssh{+s-wW!lnQkpm0ecC6VXldAojVQYTu z`{RGCU;0PYa$Pc7GQV%Ftc0jZ*Q*()j69;5UsnY^+mW?gU6Xskjnf}5wdCmqUb2iCP$>afP1us3lhuQ4(?Uk-fF9~?X7{^I@3dF$8x@=pENn`*auLB;yZf4SuC z*Il=}=epndru0?ryjOd2lHRY`x_r`h*IzcWo6dy?d{Ft*nKyTi(xr`W-hVY>o;dOK z+~>x>_Q@VxUAktsuk3AwUva-9OA@y1y}LuyGUwmhw^Iyx*38S`x%S2B_3G-h4&7O| z?jJPjm>qE7`J?mK3^_z?^ok6A?sbcPugA{OeCN)+HnVRF&n#VdlVvZ<;$JJ~-7CG- zIIB6wuf+FQ`Q8@`f4ns4QIvl2#!A5|_;v8@H}@r0&9?ftH@-Gc_uKKmyR5$L;oErh zUOn5@>+6)h7Cl~hXH~^kex|#79ttw9;$QxBSMA5{6tj|u)7SQhtqkN6nCJds=c#3r z+1JM9X7AnNQkpoYf5F+WTG4;`H0^ZXC0EP$+2!P};CXAb&X3{M)0;1ZH<iQu-8t!-f#YD-!(SneUbk+e|p}?b0|}CE5D0a zVR%S!=AP^MHx(+c#!FPJo#^%_Y0=yl>u*^;jD5Q)Zo$=?u3t}25nt@4`aS>Qx%n42 zF5I-ruk7*q-|xQ9f2!lpe#>v`t9OSwt+reB$MyfPv(nr3{(j+_9d{Rf5L>$6>uId~ zj=JCTt>jYYta#z~Y`1&Ho|@b}Z@ju}H*zm;wf!_teP2D-+NmE?r&KQlH)(cVh*y@n zn_Mcq{nGquvmH0T-VI*tFqq zzQO(MwN3j@M1a6rnE!Ow^;je%F>!I6AZl~-z^2(^--jW`Q-hTRLSjMciQy%AjSi3CHe9j)&f1X@<<^0x9Q}^_r zyLr0!-coPI&!{I9IPEetRDGxnD|$Pro~q_~O9bUw1D5 zYEH2{;oifXvFk(FcWbY?To&f1)2F^l{p_~gUCK!>zVhndz{MXWTA#0A-fJU$z3Oj# z)Psta$F?%>IKHoc_|Md4Put;Iw&rTvxRviWXYT*;dGXfIR+^r+o7x|yR$lq)`hCCc z+U@%-T(6c*uZlG@UE6SLZ;!wV@x{v*RZp#du6uINOB<)Vzm22*U)fh)w)SP$#Dlj? zYZu&3UwPL;>U&hd%hi{Tw|#h)+H%kSMb6Bg}Pf+9Cl6b#!kA2?Htf-s5J&xn=?v{q0`Tz6MRDF#TUP>3l5^ETb<)7WH zcE97t_lEmw?sESnKd|jkuJ@^5yQJ2&FX7+sr+@D=?u)%7lNoqnKl>gf+dIk68ouN+ z+*fJ7^PlI9)TJKX_`{dJZ~QVj=sRPDTgUxFm$n~FJ0thWciHd!LwsU!LP2pmI3Kp{ z_-%UT9mlrg&(=5A2BZ|K9Em>kPV9|XbYDw_!s0dDH&SjUzvSwO(BhU>oO<+5(c-6b z#6@x%pZc=tYckyBZ$3VO!*Cn(i`erQn0P>3vE!B_*A~{~*v%`uPsn{OmOC|> zHFE)bDd&en;=8mLY`k*aRaE!9>;~>Fvr}1FZsq#OyihLXJG_!9nM=STPJHX6s@I3A zBC~yz-rxGRsWGrojy>zkR{_PNYTmsMo(pdNsHJ+h#F@=oK5<`m>aIIkS3V!w{e9x( z&tl&Nh&m~L`?6?@Tf)+O|Z|8Ziu0d_Zf{q=^?xp$*el2E>UDMF3 zo_U(7o9V*d_fJjStwau-np5e;Z&`aMT_ACf=B`H*&$QkbI2m|*{ffZ1+!J(`)X467 z`(#RoZsaz{>+!;(ciunvU$Vr_$N#sEwf5_)q7gDH16x5{287ybVFsVlN%)r}Q(&%0Lnm-?)~Q5~HjoqTPtRNccj zCnpBnoA1(l5dmtLT}r+xr^IxyrKSDZ{7uewfygM{Dn#m)U9{s%f9ley{xQQ`|ST!MTOQX z`^s1w`tGwoQod5}`DfaNPgnC9<+HQ;+bZoNKHt=e|5vvoW7)U<8&P{TmdUXc&E>n& ztp0W8dD*;R@mHyGbNQdtR8`l+tnL$?d-dnCYYTsA?Q`7w=fLTShRnX(;_8~}`lP5L((VIMwX*WJ{I!DXpFWm-rOKdwzpwTD3r6-UbzCd+?bh*! zNGc{@|63%RzchEMdA{^s|AL~E#}{li-Fw~g$IV;$iqj5fDb2592>N^K;`FahSL`l+ zvhTd&FZcVcjP2Gx8`qtm{N4%Djq_e!sQKLKf7y%N<>#jQe>nTSUiMc-?{R}Y_a6nP zZhmwwXBq$D&BuR4uTJkiw={P3|L#j+m5)DPR1KRar(Li8e&-ft{>Art|C*etTwSA^ zyjFkyhm}=M*}E3cPmO*lS8adIe%gQ67cq5zLq2Vhp6?gm(H~eo?^bz!^!McCDxczW z$JTzmd8@+qx_@@^yE!qYdv#<>OV>?(?rrn@m#|b!ijVoXo&R)CoAzH?VV}G++bnhM z9fLjhrR=lo?Oo@`#$~7eoOH^m&-WG_Fc}+#Q&1*&y(ez z+ODzrY_lu%Rc=wimRDy?o=Cs`vhCNk?|pIM*N!pI$^X5>XWi{JQU7nk-8G_DY_}O-{Jf@ifz6Mi4ch{5o1VIx5%_X0d+zLK z-*cmGu8UcF`DfwZ$jGF3)0Es-%*>1Tb*_v$7bR^w_nY9HZ!=F-Mku|nh`7wZb+*?3 ziEeXy=6pMxvH$B$i)YuToxXmlciZPXKctQyj*_-n%WHpp({Zz$z4zycpXx4LTd?|_ z?xlTq9-Y6x_MENrvUTUCmbV<5J#|;_Kc)KzPp-)RxA5;f!A+B=Coj*Gm5HysQu=Js zjDwY)Yv(YO%AY#5`&86|_+&n#G#;l#u~xga&D4XGd#=}Ps!u~gVt!qbr4g)e@-IIMGR){G_h8Vm)sLatZN>u&jEvoYEK zjC!f=qrfYv(Yl{4o>z%IubsIg$}S;)|53dqH5VD;l|Siy&@4EzL%HzCkCr3nBY$YF z|0!rZ|3hfmn;TPqebO=BTyXYx%tzn8KP|HM4{giN$m~#^Wbkh0>AOcQ&ua_KpK83{ z+~*F%F`tCQ<9+2nCrB$Dvt7UQG4J{YZLwucPS=_3>U1Yn1t{-`OxLhCSRr>TV`u4N zzrAgOciwJZ9#wF2%3GTzQ~!|H)6eEDh@HPgZpyhw3qM%q>z~EPw@pin-6tjahdoyM_?~#X-iZ(DFMNIYd^www{l*92j0+x*5%(8o_yr!D z`I|LKkMDr8`JUGQ@Aez@H~nMbdh&MP?Vxwr`);&9_SMv$vdOFB{x89G(YpHzHZtgE zaw~pMVfYoR`FMSU{N%=G`#3i1m;P+(xW8$KI`ifI%r#Ck>=b=|y1CEZ-?}vV(#Q6e zm-BYiADHI9;Y(=IkuUd;Trw?Ck+p01z^n6@^Mih)ywI}zCq;*^8~o;(Cav>!!%yZz zCc=jrWo~_zJ+rUv=JtbePF22r1@E*Qs}H^Fsu0~!bTp%*bHn}A2S4{5p0=9HA%FG4 zwxxTDX7e{iM_TYoa@0gbw&-@>W;tBLx?>9K!v2izhMC@F{Q)l=rao|xn0&u>t_Oea z>%_`muHSboZ%Pogc$&4G!S(b0)ZVqsGosis-p)(?ckIL?Dc@VqgsxVL?NpFvej2~0 z>R^-?a;0*9M6FQMJlZpU(36bWFX~Gj677)tyQ2ipnSaX%t(z`$L{v-<7yUCxtiN zd1M;V$?$&SQQNFaR>2ciOXRLxuUlDbuzio?qO@{_sZ1)7?^ZGtPv7qzRBpFd_VQL2 zpYL`HUk2VtJs>_&hIRJ|rW4XuyN^9C;@@+!`=96)-ItLWfzrt@_h0z@$SUNQNlC&r zws%~70R;=TuKQ4)Ae&XGDEmoZeXaTQeY-Rr4s5cUmD2O##%9aY*0PFLCoW#ENcN5| zy>H%nYDb|$GV7G7RWb*jX1Az6xE+*t!?B=N&q`#m&h=^K^Hwr*{c`gWkV{@|{o?lWyN$uxwNHvx{6E4L8tE;p zIXh=+{?`1fdY7;Ld3_-J(^iGD5IxZknh&3_<>oJ2mtI{R;+!tK*K?+8K3-cL_bE(Z;f+dv@vh$nO%G$%*)7#%SbOdH-`9VYQ!7NS@jX!4 zcIS0q?YbhlJ4@a*O)u;}aQs+;^(q;+^0gl#e-EgE>2v;>{oqL)Z*>a%=s$2GM>wxi2a@tBEENj(Cg&f z_WrviIiId?J1#pT&OxaAR!h-~gSBlJPOaRe`SyFa*O|tNmyU;--CF#5$&Md#rhDV& z1nFhIJTP@4+mrc;JGI3(i^vGE4p+O(~p$8!oqny?{~_q5}1EffBVYnnaoRF zzhqBOOLY#lyM@hR?0E9!GbrdRqE9_2SQW8{D&M zV{-#4*FQKl*<-g=`}E2cOj)&jQ=GL#x8&I7-!<>_l=|9wr>t_iXl(aWC5;8KHII|+ zF5H}8sI+NT66=+4hxI?coU1qYyUM2dp68SHANRdy4%d7AUfsv{Iq3QM9~EbE4W8c> z>+?>rXPhQA?HW^O1hZFzq5jRhw@r6Gi=9Z`ajWuw-o%|t%?tzeF9rVJ*r)iu{A2E} zN{<5ysPr|&j~*rYv&06^p5>{^TGTb z^8@uIyOf04Y~@pxOC^2RZJYAb^Vz3cX8Oik=WA`h#rD_E@6z0B(;pVSVR)!r=YG{W zclVj!>Xm!q_AfY68gsmByMOJHsq<6F5i_H+01 z8qHO|BEEdh{$KW>>?32A@sVd&zVX%cq|UqWBE0YYwoh}lU*~?Vl{D#D$qkx{+I6Az zU+m)TGf#!trJG;=vBhRr)rCyZrO2c8{;v zR(0+ER2d`nG_|Dj`X$?I?$NbI&q6D0)Y`Y#miJBHYGyMn{q5fq-#?t(I?Jsx;`ROF zciVaYpPPF6*zb)t@z*3@$G(1TT5VhxHb?pCTg`8;=E&aKl-~dH{jKVHyFA&R_UoC~<$l(#%Tb*`I5-1mDp5 z@>cro`g70crE8i>RrjR3hzVKuTyX3uKX6WAm)(z@9V}^_kJ&cAPkPfZJLsNnLH|en z$RC34b?45c%lvGaSrh$Fy6zM&zfVoa$2BqQid6FR&$)=*dpb*6X=1jLd*7Ki9zGJ> z)(Pj8)}A#wTX;#>y^Lkwq3=7Ny*~4&!~74YyIjV-Q?s7EG}YHK^nZR`Uh;3L^Wx)+ zj7uif%u1X1-LBcn|DRvF%zh^Ky{v7&?ykO8_G2Nh={qao--#^i?|;r*^11NX_fJ>6 z1B2Et%-XUg-KSpT>*{cGUZack$}{e@?YVdE&%ed*W^UL2d_k!*KX9FX^MmcS)9j*t zReZe?HPdTx`_m=o&D2g^-L(4XjT6@24o(xjck1>F<&d_8%*XfZnhHP~G@xwyOZ75q z17!Ai|E?vczo#?4XmD4l=X%??pYuknVf;r9pT<-I%bkF(|f%$LvnclpGUo zGlxf1@xPhIQ}(~5WY6(w`2uCaX73ei8*cs`x&LvcTF?(Ufhzpb@kJuZx>H7rN_yhZC~}7YdJ4Bqv@=8uF{1&?%uf-mTr2< zXyx5CQtLAwG_Pcsm&9hR$*@rFL_6PxiDIAD&SlkEi*i^Q!5%i?^wKRez$vc{}aVEf&vR0)mS>@%Xhx9cv{yLF1bN&eS?tg zmDh!}#Q`xLH%fSqYcz(c6(JPZqdE zN7-$)4@fb++_?AkvHtwFo&S~|YksZ#WTUJr-@WooyS49A_C{Pwbv9h6XFq+b<9

O&ilifq^c>j6VPxrX`1AlM_=^dSR#Zas0O1fx*|7HH(579pt-VECRW?|FmzfL0W zXBXBxmI+ulXg2eH+qNtA>&B2ztE@^sU8oAX_A9$OXF}`#>$Oua9E%l*4Y{zJ>E`O3 zKlU$o3%oQ7fBob7W$Rb|FMfR8sQ$j@vyltO<`c(D_k2ikwX1XNbc=hh*Jd%Ta?_ho z%l&zWv-bNuS@9)Uy1De9nWV7Vw_+i?x%(f*7v|W6%|Gm~^7A13#NN1?htp4lR10^> zPT9MY>&sW85;?6ajkRm1#%D^bUS*!O`1SpbAK&h4WPLe(#__5tw#Ta+16jKMD@;Ed zQk{AF)NxmVohPHc|JsCpHQN9Abdrzr(GrKh7oIb&%GKR({-9dAex8-c?cmE-s*c`U z;d?maqCk8&> z(0Yg4s|8Q&jnB=j3BMhGEN-j1m4DmA{ObpcZmo9dt@JQCtNKbG|Ewhq!8Lk* zC02}U>#m2}tAy67JulqRpzLESZ+fcrcIc67Ki=yl&u^}s!{M;!RmQ{f`YIb*md=#u zSv}$Qgfnmb>|~8v@5H<96Upi-a&)ji$zvbufAm_P(VEZmZ*_?7yz(bl)b+BkWV`zG zNxZc;UAGBHmrp7?J74nIvUBGu<)W%sCthE4S6<>+$@G4szOFaB@(*8pE*z(|f8FV) zdp`%(GE1$$`p!F6UA*f;-St(k%YPOm9;t|IJ9qXT-*)Fy^;=`3mfyI;wPgCw!1J@O z?CcMl|2=za;-zV?mhV_IHGjVJ^lyLH)~)$vY?q(;`|G2gEcrjP&*-lau3cZW;AU^A zkZs)Fh>YI0viUzsvNQksZ(KdU+im85p%>hrYhdHx`ZMKbZ@W?}d)dD9l=SHWtLI*S zl$KxK823};uhY}oNSpq={~n92-@Od8lQ%zo&+EI{dHKnY!}iaAT)6hktN-&?=C3|u zcz@@r-rrguW@j6gxh7lt z?W~;hCo^mI9i6@Z{-yTgC3ozFYgeiia9s(toOAj7@)z%dk2UU({=MY>rMYYW_|N6v z_T}g2Gm8F-`rg|`?ce{XePbM+YIZ9wlJ9+j?nI`FMK2Fq#JNRpPkViR-qMG2KU+-O ze69ZRj+o0Y9r*b#?eU*^+x>4y-JhBI8#DfG^sl{{v$~)8bdIL&NI@wxEZ zvx?nnZ=G6xTl@5>>Zi%MbE@u{+R4w}zQ4nE{kH>B`d?!gFfYuzIel}PboW6d$&cEA#eC0>y6RE#$m3sYL6C0&)QgX*nj?;$BXYbdzRs7Ywv$x^* z^nx9yE9dwdTN&&+efajxuZ<;D0sCAxUcU4sR9|7)$9JBu|2@9(y}9OZ{{6$epY}Yv zZqs@*arUP*{5R*G7r1-i#kB{`R}w$%v+MI^&%Qpb%)k1^+u1!?Uw-PcdE0J%pZV5m zqwlr!UdCmIyl;L!J^gC?wdr~J$1FLkc77FkRlW9p{dt3@2M&quX7bz~boyjX_OU5N zGX)QbsmXPmd2+b%=YzOI9ukf7H+-=F*k%8`k(pnnqJ8}b(SLHnZV!@`tkwRhb@E64 zP;5Nkv4<_KY|q2mb*Bw?${uSxz-%Cxt^G-{K~{LT(Qca$U7aqE8m%96*$SKMyt%pg zdF--B>sy#YzDGLnyR1qrf4Q>#!No(h-#DD@R9PqW-GiY?ijsYk+070 zJ$F&K`Eu1~>;4ye`R3f4F~@I@R_(g~*IvoZH=SAM(zj$@)~OspLcSz zTO*I&f3*+gC%NV8J=vOnI~_3nU{~4r>aybcx&`d(_DMBLJN=oln*ZOOeP8Qq9B;gJ z+GFS$4AMoBV{YFu{u5sc|xwQSf-%Mp%CqA39 zc*b<8#UroTgtj`&P*QxeK}1qqZ%xc=$wkfQEg5H*bgxq^ z3FI)&IQ{9fVbFCKHtpBD`tA2?HQe3Qw9Dg2ZhTGr?T!@;A13_tarfZ=l3jhlRACCo zOTHuP95hyBNq*l@ExzvF`Gl1IsBJO_xMoCn^3Q!8<#Q)}!nUSI91k8OvwLK>Y~HYG z-W6AO?bnHXJz)WlO1xPUtuypwH|I=SVlI@#@U2XS?}2VxCCvndi`ZWW@sW z>HSODDn2)V;j(Cpc^>rZL}PN|slcP!78UxHe?IL099MGesW6kJ&=1}>dBrpDE#Eqy zsYTXo>bC3uP9-pRS2wvY*h7Yp6b#b#Mf==%3&!;3x3u9>}Go}p`1_44o; z=OdE@FG)vDiCJIYwBz(e@5eiy?VO;jpY_C#b%E=vR-Or`ecSJ}alNv8*1NGlz;^Lh zXV&Er|9!q1P5Ju#ftBWa?FUDWU-MzTQj)MoX>!6^-J9RG82Nm?;CSZntaR4eD|c<8 zmVDjBn9i-zACY-L?$Fc^DhiU?3IV;--oAY0UoUp+{=UQr$B9bESJ_`Xefmjlc7eBW zx%T6YCl)jnJ5T2Au)Vpp$fi1--TB@DAJ??0`FjslB(MFQB7D8{(EXEf$E5O=Ph53u z5nZw*!BqC}VXMNqi<7GFH>#!HyKvfR*NQtq>pbngl>gT(?wXjJR_=A^ZE4p3Dc__1 zDcoMgY&T6*AFq(ofYn<*_jKhbz9P=bl&w9_uHSVQ%W*bPw zKhJ&iC84WMzqcWCuJE3C=DGZ=A+@XiDsS_6ey!@pa+N}doK6L~J-0-5Z&Twoy=`*P z@TvbT2|k~@SJoTNcIkV?pHfaRO22piJ5BBX+vz$tgZOUoK3?AEc=dL`v!v(IKfZTM%@SBy z`~1FOoSV6RcaPJ8IG5#iPJhEB-mdy_`Rm?``|OwAduPPtX?-sG>+QpzU+)Qg(-r4- z`6i#__H&Elj0%f>9?8g$`2SnyMa(U;Wm`A?S^MkDU4_T-W)gpx?Dk&(6{(*uA8!5k z>(b1XdnWm9_n-TzChMC2=jES1yDkr1n_V#b+%jADY@6CRyQ{MGw~e;l+8lZ<>VMz5 z_hS9e@2&6sUcAfX)wv&%*3&j#bvysr%q-34cf{w6H)ntC{q!aMqt86keQs9I=k;gWy{{?oW52hIZ|dQlh2?(V|NIOt_5WS8wy*f> zeCgus$4}<;^_}1I{`!*@zbvCx#m zB{47eZ(XZ5_4$nax0B0r=j5I(O|5+TWaqNj$ilyeb&F_I@Fw}Ty42e)Y!W&UdeyW=^K?-e;qGZo?qp^b6cg%a?iS7`!y<=YUiIQ ziw?hc+?y^10}*X?$4W8K^7f6fV)EBu($?hx%P_H1|A4X^5M zfxSHe^R9lD*yJDZIw^ME>hw!YcW32mo!?~~7t8i3YU>)&*{KXWnWqR^?p$-`#rKvu z@_`cGJLiO)JE&9quY5;yyLroX{Ri(-`&#Vem*y_z&0g@i@#~)HA#C2;zboy(^11q2 zipUnn zC?4N=q5G63&pQ6K?DWM#t*5Uf&)%v}-;`;4Zrv^E{Qc*c=kjtUHLtzBYVDKH8-Lj> zydu=WDk0Y)F)`rz0gqMhby&rEPBeWyaA@I;uRO2)-f;e5{h(j@K)C0?JlpMi&hzd+ zedNBT*?;|+21@&VA6)OKncdmnX#Z%I_5;gK_PCF2%$=RmO4koCK6cPaDEFwDy1t0l z=7Z$?4^7J4-i_<-e?ERhsPgZ$@0I67zuOcXXD*kqxYF@ZPm;Y{y>i{=73Xfe+SxPj z=)@Ycp9_~r?sa*aI)CND#(h^`U#x#RA?JDQkDR?zs!WS27gQ!ZeipBD{=4d2cFy2= zYi!I<8gGlf&3%?RME~GkP4?rb8D|Mw$!f}%)*4ia#r0Lq%U-hB>ooV$z9alx@p31l z|G%pY2=YI1^7i!K!HqZNOWjg(oU4}y9-Vvb;PYscSJUi2&wu`@Z}XdJ?kVwHFKU*= zyUavPYw5%?ya4mQtoGgC(Z8YTz(d}j$$zKuTxh#2{q)?#iQ?gQ%yE;%4cDFaKT&+c zG?y`%_rbfba+WnU$Iov6H>YHWn(p_9lmExZaa4VKdt`I|{h}XFV&B={nAkU8@cZ{O z>uV)-MeY6>=)aS@|KY>s^oS~UZ+qrC9+n)-q|?_qcfWW3A>H!BZd(o4AJ!Irj)%`% zUaAY&9eoz<^v5jiz2GBJ#eX8+^^LmL59}L0%+@V_>w<4BBGb6Whqg#V$XX}*7E|IG*uwI_reD*0z{q~4AI^r9WC9bO< zJN%b5=JjkQ&+CV6BF{Wn_tK1+RVL+-58Ldj$RfqX^2_)QnYVm@|Lp#BXSTJ=Ya?gO zGn!EO-KP2c^4oLtWEIcMoUf5^qvVXj{hz*kIqxqj)Goa3I7M^fdxa0CZj0FiEzY;* zv$OgHGYT$OoBy(lYl~liW7=h3Hk;#2mm*jmOnUaGXZlh-Ms?roszpEcojh~!fpW#+ zp9Qs?PrrwlX;0h4CdDW4&9bUSN6ST*>Dik0eGdZ}p9M!+mHhoIn|L$jW3L=*rN#@-#p-P{etNIFzp-bw&|N#1 zESB$5ku$dK3_M+a;EG>GM3L30r<`9maWT%n`Z4K?!uFLP4BwUYH%xUZJzR9Xq@+~0 zl;NSpRbPF^z|are%O9_PoIW9a`$N@SyU6cf?WTXtE|%LGt9W|Ry6f5XeYq1&A4%O5 zlw{uWFDiQa`vz;rXN?ZqCC$zmUpTfsuc++6pM`sFCET=Lu|1dH*P5|-bxm8Pj>FxW zH4N5wEm9s>d)@lA;pSPtW$scORvxo^^-g8vF50q_>E4ufQM+B`E6*2S5?i02v;6zw z^SKx1^IVMep7@fZZS4c^iH>_0EIQ*^chlV}Mf!!p6N{}@uN7J3x$m8yd?I^Nec-Kv zoNp`RQWXEpWPWs1&*H@HKKJ(m7oGRJENxoNU2hg_KCO0MLG-EzA6MyRsdw#u!w^xt zx8U!$eIfF?+e)rJ{cKWX$-eQ-%Ez2HE=`NLHAzWyja}bO;r-|8eUsj^S(g2*iP=3j zMnOz|!>_#Xv+H!rjgEv)zx#hma8RgR^S-$sp4F&q2w-^RQJs15tXS!g!5JpmdQUTwEgg2;=AacT&weZW$&L9^q$}QXm$0k zy!T;$m2VlB1-0$hs=9kNQLnvd)1~9PZnJI|&fX^Uw)xTZo`2qYOSTzC@--Oxc1qm7 zGec)SW2fRoFWX=bmD|M@&o+H8RBBURxciITGZVw36Br*n);#FPf8^Vab4y)5`+Lt1 z-8uE=60_sK6+6y7v*Wz@N#gP^>%bR#d{0Yv-Pzsk=QP`YPrp^Y_pkWlMQ@jX+J4@0 zF8}i~=i_#3*S$01$*5cPD|+G5^^XJpD$C!`DxP{gu|_-L4%^LLZ%yUfC+$0R;QWOb z+Z(>OPPn!2mfU-3+13AYByYW_yX>JSpL<{Bev)f`({#}j$?oS?Ua3loES~T!tSENM zE~lJ7s^2BUYSN`EznHDtdVIEO@%LHrdps|#kNvgwXH-tY^2O3mUs+gIx>uJoP5Q62 zCGGmQ7pGT!hO7W8Ss2eWw~*B;DExEo@?C|u;tE6MmVOj|mHTq#&-q&Y+f@sjU)^7< zopyM4@s_LewomNeWxlJ#;M&G%Wv5l+PH%U6{Ha)?E^q2zkt#3w+aHSme82MP{L8P& zHN93FLf_x+3;bVu_HBH$*@dTly5fI6_sw4Z?5Cdj~{xT8~*c7 z^=d=IPn$yD?JT-h5%)W1R@l7TAI@jS#QA*sGe_ro#_4bUHukA9S+^23Q$pYMe|+$M z%e$@Hddz}vKPV8N`cUb7yZ?i;_s?J5?Y3Cv`j^UVp311FzSB1CE^68{J@uvV&g`4} z<}8SwyUBI;t?yCmboA$bSiI-g`^RC6^xkV^-u$;+f9J1FX;bE3o)C6gqEhO2@a>hS z|K0N6^=8%SRg3jb8$Ioe`Lp-XnWiQ2kB{Hh^}ZR}_IQWf?G?4JQZ@XQ|10Y+e)n?5 z$4?>g*Pa<%U2OO_V*Tfpe==`*ep(^3Xpi$H3;x4pj?2xX&BC5q*vTLNcq?XIsqr7% zX)C|3?cKTcZurXaW1#-^Q|E0=}=ilu+Vsu;qENf>k3A zmtV7w?())xo$ptMeE1R6)E{v#*y_&VhkYNOrLxVp-_w|E87*>po|BPQMy%tdTk>)n zT)w9Z2W>ySbkF)t(>Gmncy}vx#+JMCFYg_(VC3B-|NW`Ysnx0cS5hT!8@_0NJ?VXJ zrgT>2t$znERP8^j_kZQw+upm@A707Fw#lyKbN}g6KO;{zr_PmlYnWQ&_EOuvTC#nM zow{Gdx#Yysdttw)Y(KchhCijFvM#=F_0;{nC(a}Zb5B%#(($6R;UmwE#H1u8!Bdv^ zPn1_2V-A;TlzyPiQYZWPwhoKhJ>?Hfk7w1G{gC#FF)Z|ca(#wn(F0TWw7AU^X6#IT zWcmK1o_pNKS<2kkV~S7zjww7l?|^jNN3Q+|Ci{oa?-+fy+kdXOZt@$~KNDKTWhxJz z*?2F&OGZ}B4c`dmAuJFgrXI4Hbbl4WR|M6atr8;ftsm{B+?%)5p(BQ4_ z{V%4KcJm%yTR(B`l!-6a-IZWqp5GU;>|MRiR_a^Kg!l8Vtz=jB z&t7ux;;iGJO{~OI?;ZRX{ZlXD3vBATPP2p&x`erPU(PP(e>3*%cx3)%uYX_KKjR0J z-9NoH`oZ%@BVBU%_8-(P+Bta*NfT-n2Kk2|0KvpgO9;4DA?5`OV%)-&ScryJQFdDilg=|`C6?_i@t z-x({!qxX5u*vI~d?E}}3^p=bxcbPxF>bRLd=}`NPKiNlKN+0>Fd&GakWAn&Mx*tTH zYS`bz^0@EPn_)X;S6x_2;JoD>XU!+5<-~26;vc(Qxg}NaKpUsAdytr>ctiT0MY;iE z2Rut0Ht73JUvc+@Q-QWdNMU+k%;EDosk*6D58|wy^Ekv}oVPh7IdiT%7gyLp5vK^toRp4tz@yaO(7%@y_VM zy;Q01k{4naA8g8d!v4egCd)x{DX&Vdu2q|Y7|t>o9u(@1Q=ReNXoj`zmVZ3K?{*7G z{!uBK*ZiOJr&Gg@^Dn!3a(1!Zex9-5UihxnPfEidcx6aCFMBXuR!o`q$Ns|}Ebp(E zwEXPj3EHoFbo$ni>yPgibG)Bk_=!Q}K{ac^iB^V0ty)!SS3a9tmGx7m{(S7+v{dHi zmRFzFiG+T7k=FD7ZSrZx>x$3HUp8`0=={AXc$3|nQ?t@E9v?725mP_?chI|eyA(ss zZ=9;ie%rt3H=~xr3Z^+r?~2s@d3Kj8MX;cl{h#)14OxM(#%HWP!N)hRm)w2s?F&YI z*W-)b-O7WX&Gy^3)3_n)RdJ^G-8(av$e!Du&$pAebu)wX)b&m2+PtrK$A0njJ$&l^ zu0+JKb7kgjuzf%$~8)ok+SA4n3&)+q^&9q#8_PN)b3O?VB=h)xPkDOR}-E3p~ z)pgFce=~yGno4$Wa;<-@wvu_9=$)tk8ki2mnl;O{$KGT3`Y}rX`-Hu7rDkqBvFw+k zYo1`#lZVNhZPzk;RhOSlkKj9-7XDzN`+v7zPC22u%j4x1RYm{W8#hm>^!l@DWlJM( zF}!7(x9IlQfCC#pJbzHWz46}m%UyBo8(&}R=al|s`R-Sl)o#W6@gaWXE4Iw0sr#Z+fk;Z1@8!u^HKSZ5iY= zr-%9L#{cE}9$R~E){#9sdcB;bQ}tf|2$KEa?)ggo*{8nkh3^fwSY?Mx-TeM-i{0~A zHVUaB)sZD@ds?S3b#}(;)IJWpb9WhQ|GBq+HwjBx@D|6+om|ovD!GGqVwImqsyV~o zY@vMrhq2Gkzl%Ql`rO~`I*k(iEO+crl`a+WO6WbX=Sb1|kZa9HmCAf#;%zS+c>bXH zy^GSCZOzA$zw17$eel=p^4ZL*X;XGC+HG>=`^DJ$81`=6&Q-;yve!J$i(@*-=M(sL z>F1|h3cqH3S+rcKy7$Msf6LD~f3-g8Z1(c|rx&+d!lu=wSKi86y?3wn=l>P&4j%Wo zzHI9kCF`%IOIPIST;2clcKH5GKaU!z7o|H-UEII;iu>gE?N)L}*vkHG*>?H#wS3<9 z;+p=IE7+BtCzlHRi1cqZETKxf4*?}mWMI3F5ce*9y;QVeR1FMlK&F@pteibw%9JSeq6RklvnTd z;+h^Co2NI!A|Lw9(!aHB`KjkCUmi>C-ahsJ&Tn%g#cnPsuKGU1Z*7fO`MOR2qP_Po z>;CmS?Dn~jn~t52+E-i@A6XXhwEXo?jb_v7zvpoO-d0%i z;Uxe1SC_V5kDV6j@g&%I-%{gOufpzEM8!r;S^H~p$@855x4u1@b>{fL*xCGB__x&k z-JYs$HZ57JCF_mx)YYe=Qa7cY-Zt&cm-*8TuPwZw+gfYcpImJ+_w&NPA{MMySNEix zT=Uz~PWpDsp6lN<_FFx>c5Ldi@}IieFaQ4N{C0oV9e2s~Kb;oKOu6>&-lfMA^ZnQF zvUwK!*z*foTc;g& ze398$sTLnG&+E(Q>O+5L^VrzmIrvd=`DUf&6x#`RPhT%KO}>Bi+v}f<*?+=5Yk(VdFvhQi;46};+8q{R;d zAGQ6f+l#z(Z*2?Y-+wLeLAZzF9<8-!pZ)qh^-1}@J@!|aB~O=1zMSfG&wX+Dk{XSb z)0e)y=CQZgaP9Z#x_zv3&N=+kJ+Jb=R_f*-8T)^im;5n2zf-ctTW;H@_gi%PFHW0-_PbiD(4fYr8gWiF+0EAHfgGw+-?)Av;}fXW)+i-On5zzf(?)aeB5@f~%F;)^Fb`cWXNw zY9do{hQZu`yAd*kK_CFee33`>Z~Pkat8NBEst~Ed)HX1xq7wR{i`n;6sMiI zt@>z3^Tf+{96p|FX1aW7BjfIA<~#FcjywxoT7KSWhYgF?jgvn;o*MaCi*5K)Y_(ur zB-?!JhEu70El>I4-Fa5#9O0PB{9b#;{x8i8{JB-rKL1i>J{`+=`^Yz)r{1hN-}&C$ zKfOmbUhtBwZNSpCSEF7|-ym|=h{JoI#Iz?2UpA>pt=|ygGo#;GZi&z0$OL9S-~BQY z%O?u#wNGN)c>TAA&jGX4wKxAXT@RWbKck`Nyi{t;y59B4y$k;_9l9hNp>M7d`RS|d zr^X!3Z|QngQc-uM&faEpU)WRF@4>S+Zm)?VcU#`{eeY5&Uj&tfyh`PfI(g&vQ&)?8 zRtd2+FSj%0X<0~|d|x|Ds$X_NP>PkCaZIH8y00bM%c?Dx>VK)-dVQbf(oFCFSC(zt zc;n{FiPy8fch|1izDU_d<3?7_<}Jx@zu!uCJzpZb`&Qh2mn(OT)@N70-MzJ0O`El= zlwrkzPTuvdUUJVDM$h{G^HSB%Yx{0_N@_n&{yM4QikXGAb<2(F{Q5IhR&hLU9I~HV zPA$K6?p<0DyUeb&Wz`}pCazfBH}%&ezh7*-xMg3tDms2rv3d|L+rRLp!Fl=AITf@2 z3Uxh@es`2@=l_eY)534^Dr~K|dh2QJjJAzjTTTnb++%fEn=5zl#n+@6yN#~fbj-c5 zanq&ubq70`Z&+LJ>99HS{q?sCG3QUorTA3lgi43qTAg6qR>;_U{MP)UkH;A#-swdp zPIH!0{I2L+Ejyu#iAztMrS!moh5A?8y55WAoV3Z9?Pl%8SiRam^7h3a2H!)OeC=P` zXeOiteM`RLHnsA~qqrKghu3d!ONreqd|{Dj{0EKPl23KAxhHP;%@uav9sF!FAJ1M# z*&laTz6ky+CUNX^gyL$S{|HORJa@JI z%6-*;Rb=>|a~Jnt={}kzm4A8G{adPcD(rr>Sk3pWU;A{m{q|FG&*!d9-|r#y<~(TP z4AkHJzwY96)7swo+WUR1p6l66dw+VxZ_O`e>zZ=^{F`EOlu=EZr#yW&$HOHMB^ zJ^RAzw%4zT*QU9-$yRX5M?bane;#w8xYTCpy6v9E`=l#xPkL)PSNihWlOZoZ_ldr} zy|&Ie{Cd=Vo2lEUp5HS0{`^lltNU}FJ`es;#bv9uIFNmQlCj+HC7;e8FO5KVPl$dd?HcY5V=&9FKT@>qf-p+PL^9TjqFlm&s)&a+omvin^QqEpsiu z{AT`WtCgFI?2ea2%|CVaa<7r>=RT`tU)SpX&HCH_wO;DqH?y9vIWMXMQ>9 z^DLP^%fDT`HA7W^vfkOEL9oP>}RiVxBrl=x{pQl z#qF1+Kfmq$*8OSqCaKdB$FFSYtx`H3_`GCh_33ZwmG-ASw>L=-Hy1z3*DsZj-ZNJ7?v+{u}&f?N+12yZ`o`ol}*h%)YEy zt)}bp*Op&aak(e-p3X>%N-nG6&#k@v;@rB@=h8l}WYx}BmFZnrJAM7B?R$(r&AU-_ z=0WlD)V7}<7IzLGj{R3|^Q3;>wZ`Wf{zpArZ~k8Yd*`)(+m^0n$?tF)VX`laS3kGS>gyN~~|o64E2d&1%S>sf-_e;4QJ+{(QEdbh4ocDnwq z298zeK<)&TT&1O8@8c z|JY1eJXgJ^^+?~+Gjk>$>DzNuqQggqbB{`)|D#z4*2(l5KadrAFZ4sK@w~x0P9GLK z);f-wo{y81>yO#)KQH~S%Y4t1dDm;^hTr)hSuV5V@rfX*+M}Z9f0$kWV^-j zBj5hRy!Vg&aE|-P$**pl&UW$sXW?&uR&Uz+qv?ciFZ;U8;`2YH?XN7~yj_0Z<=0_+ zs{ciGS6p|zwC?PMIPoumS2th(6UaI*e&Tt}-EL%XO&@yhGK^Y8C; z_&DEE+bwUCsiM7>`I^1duaAWvN8=Kj}*PFudR-%~uL*nJw?r$?t}Pb$+(wP(Jk`9AKV zfW)pDg$`m8Z}#5z^x59|bL&LAnTOB+|7faT_kOob{2!~AiU}{z-`M|u`jOYR?f#6j z8}ctNS`{z6Y{J1izimIhn)mapbk0x18{fTVtrt9$?sGm~_{Z&*m*$+i`8ju6U;3!; z`B`4zkokt6*AMLT>sZf`c<_;PWaQl9+lP<0d@x#{)y5vVv4(wf`N6zToYlJ-XKy$f zUirDngTwvIJes&<`wP|VKW&LlElIM$^oHbecwqQc`$4t7(Pvf1BQ z-~FX%#eK&v*&SQf$c7xKusjiaFo;itLo!EnA=5e;g*R_MMyGf_Is7rMtkdXTqf3A4 z&6PT*qC3~*ah_S+VcihPux@HSyWCoa%-!4GY?>ph5O{fdZ<|2TO_2>TR?m2ur-$3_ z*e_BrD@W{S~z~sW;&wpaPsA@J6|7E?HB4be3MdW zzkWAs^oEi%6CcZ}yksz8Kk@kS`kXx_vt!N$Uz~kQzmrREyXE!A6LWLhLJru+PC2(& zr@tz8ozT+yLsNcVIrulvFXouq>pfvV_%y#)vW8DG&&-i%jy^E=*P0xzqe|*`TR8>Q z_GUPmf2^5nd}`S==CI(2yPtEq%AUTp+mU&j^^5>Vsl4qqIaU>HFVz{7!UQ5ax4p`J zC4KkTw%tz-=XT`Vz0%uN9(}WiyOZnN=YJsvB~S0q;@cskT~M(i`fDDGPxy!PGuE$- zzy5R4x8AO3>RvPH|v~nPpq6mw#IJca7OvhCQ5LPRp?Fn0Dv+#oolbJbX#^ciK7r&Us=M zqJMT}T~ogz>zSW5b6*_W(sb`^*WI$6BKH;Eo|w3Q?){|f*RB>5%OVmt_%DpH6Yh$? z=2{_tEP%Z$bmr~|nLBUAy+mdnTlup#_DaZ0@Ac+WY@U66+psgd|DxQ|Me?4{E^*mS z|M;$Ecjd?V>y)?pU7Wkhe`imEnnKB|;$ZpZ%=5YVxr*!<*YGhPaJ;vwJ8Yii{KWas zPe+A4+@JRgg<+F?$}EUZk6sQ+3jrg2lYR^C|P~|qVUXF6ZQY;mvL`YcipetnIf#Xb3W^| zX@BMj{jBNI@sXMCz~k1_`FD#*9dqLv_OPc(hpt~puX@=z@p%2$i(b}WH}$_WV&1+} z`0XR^okv#x@-zEjaB8>A9nDR1mf6gYVtpwtE0K~d7NN7Ld+EN(r^Bv2+bp{O!JDII z^L)=su2IX_UslsqH%I1t?JQ9n4^@J8VO$o;ot7=grS6<{Tw;)0j?)K8VZB z+4*AiFBP88hcn(kIMV<5(>1=AYj3iCzaCbazvc8J|Cf%Q_A2GmLgY&i$)0>__AK&o zz4HIbmq3dxcU@R-kUR4M_u9)AvVWCM{Wm&gXa0BZ*^pN+w^dZF={dga(eYcmrk3|E z-#+ux_8(Qz+aJ!++1j`D*D*7jt?!Q)eSQAp_s(y7*6uNx|LaJ0=CxDtk6&y4t=BvI zBq0#+Vxdu)4J)8e|+Cxd(-3Hir1HZ8b3E&H|5|2_v2IQ{^dQ5%zk`h zo$k-dYGK}M#j5A0Jl|@#;xr@I%E-sLtNSl`-8)hi-~VUL)^y)*`=&hpyEJpJ9cw*% zRqcf`r}+L`uN?HvYu6V^oR&Xb7%_?Y*xo$<^}9^^zN`GVSv!A%)WRSw>9@t}wNDnW z^`5pRYiHcGsM**5^le=mR{yT@xS{E((E7e#>%R7Shd(dLc@kdgciZ;aN7YBBatV8L zuBywk-#VWCXYS_n+1{1&ruUZne`R)$`aJjAnBootlfFJp{;Txb4`Ess zHl7JzVwQOmsMt(UU%mjyf}BDLblG# z?Y3k_<^-#=36UJ11-rjjo|j0N$9bIH;@;thcJ6leHX;I5mciFzXXzDn@cnC>{JC1T zf2Cbk^&>a&*n77pmDI{i>=lpxr7v;h%IVOjOKL(6@>nfRZ@YJFJNFl(`ctgy=l=7S zFH6r4%UGRbo4l}ip?!px-Tig3JdcVl^)7$9$!K41-JLJKub+w6oAKH|)yrUdTaqv4 zs!?XyeE#!(o95rMT~0_()Oj=Gw9VI9C*CLjVRWCD_(w`OUa^RE&*?+q3^RUcHqK|# z=lIjoTJPLf^KTZj{gV^kX>r9*8XcaP=5y${C|#F{^l<5MNjc9uF`tor-HwM{X@T2#8sIsd3rDL*Zn?w79 zdUsw+RkCh-{_1PS?CmE`fBF*D*4GnQrWLGz+;;0kb;~7}E6eVk`#j~~Bd_G@`+O01 zPt{82KRm6nRVw?+uMejm751e4n|R{yTgE@&#XjI2?cPfeCk%G0{1^By`9b)>`Uh{^ zAM9}1_U)cUY{Sioj4$hq6PVQO{c~$OUp{Ew`5(Gr_4jnX`FC3V z{~tBJ_vdE0#lAoK4gWcIsQdh%^YmT3;4)=JxeZUBr!4qg{Y2w6QI%AU6zAH#d_q^Yz6fY2H}!hI!R&r+)6Zo$PW@WlbYkmz z?Hy_y_vbDDV8NsrE8g_Mh$+>ko;~c!*4pighwjg~Zhkv!<4PZ4zJDPzXG}4Ep?#|P zYi(3%=F*dXb5IKb09# zx3cWcY3-u5;>j^5Z+x-q$hF(5eaq(I4` zc5hHRzGz*M$HCkwpVPFQ*T?yBgf^7zWLU7zJ>`wr#pj1EJr^sg?%h{^<=NCvKL5Wx zsallTlMwLLKIHG2;@XSRTif~G#chq-SM8{iT|H} z5)jyO`utzP%XV_Py%(QdS+oD78j~AG>YkD^&toSn;!m`Sx_z5lWZbrm?eG}`Aw!9u zv;GH6I{7cB{9?nE#O8Uu;zC#Sctg#m357X4Ry?rrj_b4_1)mMG`({W^Y?bIa`c38b zMjhdkJspW`@9*C$G?n$pJf3({aM=mFsGmK7_2DVfUh)jncyjdKUio)n=ZW9yU+RBL zcv$^&^3GdVZnrP$zC^Xc)4;$|lh;KD6rTRRQf4@%a?#7hM?Ji(XPhc;JbI?S+*7#L ze$I1%exJk>iOJU?TDz54W= zmT$Yu`{S1^y#M!H@YdNEZo93&{9N>F_?EhvyI+|v`R!~Kzf%9_kDdL;wtwC-;d#c( z{p)yVU4I*=(av}Jdt}EJ4x^%8y@Dj zpO!Db^um4p&#S-Qe%Mx5e)50V&s9!!eY+q>xjKpe`rdG_%^0u>vv{tm{{j+_Uq3Xp@&&BqiwR}{@xC|m;3Q+W$d1{-)xSu%DldRD*4m- z=@RYdC%xM{-TYIj-?YUt*MCUeeLnFGXXd=1b5VDH<@~X^SFqlH+T!Cj$v+qKt)2Q^ zM7(Nst@eERsU?zruVa4yjJO+JTj}Q){eFJX{U6_hkG-DpFZbB|Y4bBKOmJxKU-R|r ziR06+#{IRtHDlvF3mg08!XCGdr|epGTKlwz=n+h63i~kmX zdd$LoSN2$}G}H12*S3CJ+dH%PTl$vcr(WNXpXc`a!_%i4@0DyrGS%OQPfN;<+;lhS z|I2A}?tk2yDt;_|)#XhlcduIBs=BWG|9R%q2&eFEpI$x9xV5!t%i3M3_By{y4b~|9 zJhoA*eE#}V2OZxhN4rO6*;nmdoRebtcFDZ0zmEUBeY#-Ywo{$Xa@Sh}_2p-WfBnAI zaG_ntC*xZ(xz}geek$KKF|B)B&AP3Ye>N7$f9~8?QI};oTSc-&fB&bf=g&X9J5+7h zm-*ts@*7dH{_D@D@PCxC+_CdE`_-?17tTG`ysbPY{9F3JJIWc?i`5rC?RPDcT6kyi zT<1!;Pn#b*_tm^(_>%n7()veC#fABgRqu*s$hV4XKi_1h$BJalb zm#?-@QC?DTj;;A0Cl9X4J7Mrmnn|DY&x`}|$$zG_&foBX zX-0=j-Vd?uHNCC=mGk{O?`(K3S@587{-?HTwVw1lALQN}33Ak&In;Qd-Q}M!(|v`H z$zu0XkN=MOI7zz9=CN#_PR%h{_a64NJ{=qVyR!2Of`WAekk2XCj(=|2$9V6R_qT~M#gghb^b2bDc|pT z#Brn7HgllHCfVf)s2OJV=FsNKD>^Zwn9$fp6P+D z+Yi3}(E5Doo%jb6U1U3!IW+QB2xcsZVgE3N`BP?I_YJODTniZwm$I*An#lh)c1G8k zvJF2TR!raC{KK2&%gbdS_Dt_(>Mzi9C_k}BZSUcQE+YPXUpD>u{m1J6yPuCk` ze7bIGchlhFi3xQ(?mM!kSuWbad?R+5+*@1Ot}d<_jQ782R7sVa9N6Msbv9uK7mxlX zKDE*%%yNom90%+YBEDolJ$=l*muc1YiPQhBmNsaO&tQ0673g?m&U=HClVWllOL<;j`6?yjZ=}3bxK$)1=RDs$R<_4S%Je~g&b+^J_5YE9p?(Ud9MY7^7CkG!gp)^W`9=Q6~! z|GHjs#GLK;i$2r&n}W?gpIP2_p(LL-!T!_Zx8Jm06=!df_n*=-QT(R(1>U=S8jGu~ zcz(LbyC?khko~W>U*UYl+pvbxTJyLgud7}q`sq2-^&pIm*tQOVYG|No0qZ!=!}lV895@$I*T0+tt_1m;#Q zh%2~!Qy}|osKRXK6{~MAG1B1|8-_4XUDRySnXHipa- zy^xkJzw2~u*Pm5y^{iNP->pk{v{g7num0laTg(5Q|Ldfm-aBc@RimrlZ>P={EMGK# z(Q@SzyEcWt$=mw))NO-pC3Rl+;<*n_<9QNx;2&ov@76%GbK#ThuKo30+?3F*pQiP^ zD&p8vja{XWR-ZaJHS2dw{?zx0HQw{jg;~i_n$tqc&W>Z`AauWt=;rKdfwHJTUq^6`*%Lo zO}3pGe|Y^jzvq{7oY#Iy*Vw;(vS?f6j@;3scvHf65o!E~s4j zdzt3>`o~L^Tz+{!O*!{2XMMm|%i#NIYuDep5qRz0@@ZvNKd0!tu4+~NLy$HG=eEO!>@^#zm^wwWpUYfTx_w-Wf%5CaPVprFzl=^PHGx2%x z)0-cPp9J6UJw4LcCYl$imvLtYR>g` zuWp6y+q&!A*O$}IZ2OhGI&SJk@vWZGKac-9mHr?rdaM8aHld#^M`d{%>b#jXdu`U~ zOsvhDq}mrX?bQ-JQ{yF)&$~9tZ~GDb`uW^M`m=#a=do44+_jAMH-N(MYxWCR=ui5m)l^N|1mouH%t8?|_)}okqyJDXHKV|zS z_TEJQ=e0M4>|X}I?=Jk;{pIcT=g*&A3Y6cTv-kSz+Sg`hf0xFsJYFAedv%lhzXa)5 z%bxa@X3R3J-sTq9er>2A)6VLN=*-bydn`~QJ-!y669&>YsR9@R@4afLSeBZNeOEF)a z;*NK@KYxAqly=rM5BOdjeB!OtdF!i|J}vRzjoM0HGrjpcL3lyg!>1{0V@_QxSuC^t zSo5{ovV=8TOs8701wPreX6wP*@$>UHU;GvJNmBB{JHb26J*;z`(|%c8F#EHvnDc?o4N?IziyIW-1Fq!y^d`s)05^NoNNB|%7Xrgb@y6NA2U6D+axaWNxPA% zk?VCg*~Y31$8PV6pV%vtma;P8DUZ|jU00Pqec^ff(tfVuo_QC4FS&B{z{9t9cbR_@ zwEgjG@w$D-&bt>auFSq1oc1^P-|rf$-?_D^Yo~Iq_4mJAYx3pvjdR6Qo|@-X^`+YH z-2<9%1`h>&S$dJR0ebMyttH*8k2hVL?%26!!9)4~yN*8LR*PD%FO#E~F2ZP}*Oc+^ zz`MEH>-Nu^=z2Zg`1ig4F9qJ!7ad(~U$gy5_2ECC4!pLXSMlSg?#l}2xDTEw4|dEq z`!BVvW-^c2f9(hU4feYB|Mj-jNPC|*v=(^le!yGDR$c#54cEik2eW6?iayIebI+lQ z*-&8pJ>|Ine3!rOKJquD!GvAstj>4+nep#A9!gHTmsmMtLn^!CV)ty84VEbn0#D_h zZ&uBxlifAS z?>RFIUO#a?d_(m-agG>M*@IHjAew z;+Ed^{Nrn!x24FvjhJRD+){g<`AIt8i^U8LuXl5H@2Q{~H2_sGnex5F>M%*3gsqWPl( zt8|;t+Iayfste3}jpVo1Ob^Z2W67{LE@VUYwJoo{>|_7&QdNX&!fUhhPQPD1=FAM2 zl~#Lv;rLGG!!kNkT=;f}#ciKy67%U+Ub6Qa?^+(#;IPUi-&Xr=XVmmQ=F57m$2wx4V%p)|5%JqMM!Z`4Aa)_&8RI`8 z4b|W8o$hwFb;}q3`+SFW+Vadj`mb3z`PyWz-}@WxuP&V>yCCX!kbl66-2u<{PTj^| zEf_sf!CK*;()lfWO$)Uz2fZ%7&U)SYuEclW^Y5A(FWky{x?gYpmFu}pr!3z5y7qlm zicD23SJ?VmlW!aU*u^C+d@steYR}c8-mL0t$Fj>E&t;@9(OuZH(BPs{4ZoGmt*#CE zpJz1vE7`Zb@%bxrU4c_J3(L&jtgs6)+L)NM-|Ft?e}yxrR&J2{G;@jUB4*Q_KVqh) zGk(45oBTZb`4k1C&MUPZ_3s#dPqx*Kn*SiRN8J1L4?aPS&%B*dwf9afb-TK)B0f@k z_c{NCG8r9@+NfXLV^3f)!wXs ztLGeW+aQiF?ic%2?~B*Zsr{UDSMQyt*v1Jn4sk4*Y8b;GvtzB`yw@?F-su7Mj=HxG z#FjhweqF!)WR_pnhn`FGVq8_G?E8?wYq;do`2?;6>#~CpIqp0^YmJm66R!VcbgVeJ zYevW0IYA6(Zaoi|{oT1!M&{f{`{S7^A@lE z{ruM{^*YVlI{kkG^i3yRz8dz$K1M* zzi@Tc<-GgBlYfh=eU&WP7ya<w&mXvt8JfdebC9V zsh9rc>U%soSK_wCrKn#UYoAwyiKi6A?)nq`bnQ+9>Abs|b~FaSfmM{`AW4 z^N&?oe|a8eU3#;0P5K|7DDCje`6u6M?&+!Be(e0M_t93{m-0Wpe~Ul*SApJtjors@ z?K<{4`TVww)o)B|KWy55Z|>s6&Wy?Yvitor_dl2XdHH$vuWe!PEbmrDM_vAT{8Z%T z*b9EaFHHYg|FQb}b>q^fFF%_`n?H-a9Jzf^SrEVYlx$F9m_|2MH^G)k)&+d@j zzRdsmm!#8j**BH#vwyn9%H7w@J-J3_>2IOqCnapscgub<`eboR=i=ecJ^N(eemUpy z&u9Dp(nw8@zlX)#o;p4ZI{Znz{nNea=SydXOq-&8qul#k;)&;POYOver7qc88CaV3 zrg`lbt@(x7mnyHR>a=E8R{mNq^K`|}YYS|&UI)s}liOqyyX@5MTQ+N|zRlphYPNQ3 zV)nXbHvMkx%446l@=x8q(f-<-tFwG<()q8Ke7>{C^3~xN{gqb!n@#m|e(EUO9^Iy4 z|NPV1sUL6b`D^w$S!1S5z`EbRR;T9f-7;@`;QE;LrhhwqxcI-mIdLPp43i7@TqE!IZJg`hxaa2+M}HfpUmq{H+s*H1U1L}B zrh@VJ4)%AOxZSKTn{X)gJmr1z{Nk?7451xc9G9gt#H?$)?9H;~n z_Uom~e>Pcb>ytcNtm4k|KI*$^rmw5&U-U0}(!M)~!jEe&e|fbo?^pG;S&`4fUjHn* zq&urnN6ph(c&E~DQQ=LEToR3~E>CzHr$5nnUf+CRJ_EnRc8U8(EBHB7>~!o-s<*al zfBNe4pKFHUKev@9Io=r7$tL%ItaiCq;QZu3y3ZcwJG1j-oxDj^({J96>yO*_^y^;Tn;$;IRseDTjYdp^ndse|x43ZY zhm}vOJ>2(SeINU2ZR_^~+_&c5yI@zPDpR<3w#9_^f9yQ0_Rn0e8?fiIx!9$L^Z5V0 zW4W{8&ijt*+=b>-f6ZsC?$ftR`~Oe&^XrDQ@?7!rnfCkl75$5SP~EcQ_#2OodXGE* zdraz?XYXg;Gg(~!u|LP<_$eGy?lZpQ{K%VlYr2)}TJDwuC7*l#R-5~nUqAA9-iG3t zX(~rcW{Ve3GZ&2hbi885nzmEi!JhJyWGwnxG@mtp>#Uh{|Nqp>w+iQXgzubJ!lC0G zd1BtD>S(5EPOO#f5eL>?6Wi;*Xc{krFzW{2^9ld`{FYBtSg5niTHsCB8YVqf%2@f?Aj6ZKRXBAc4^Zv6^_MNX^Uy5G7%jTN%mP>U~R&T;v zg(p*#!?jYjW7OfRLwDyEqz`;prAqA7}cf58e$cwfY?256; z+8wxfsYuIJ-A6XKMyac;ryK4bT(o}!t!6yw|e?@@1N;Ry?M4?f3~-2 zQrXGy#c$tbMH@Nj2P&6EYyI81*zNDNqE{b2nc6XCIY{sScuH8z&ij|(l&FIZotMA9 zGctSZcivO9=OeQ9@MeyxLcn>qXgY;h4U!aRtNdLfh*u{}O-9eVCrPxY=X3ubt-V zYOz@|4ci>Wm-sK)_wHNP#N(V6$5J1f)o0a*KRCT0Ue@5)>Feo-pRz1|SN6_x!Z&rP z6?dY3t`>ATUdyTbujjY%sj6J#-S75uV5gIZcoU9TREBSZdU80pQ+v|V{PmHyE@SS zXxI+fwMLh!{x(T}biPv-c46-8%#Vq?y8Z9SP5rs;^5QF>!X4)PP%wL5mJxeZ{KK~u zJhhAO)%JbbY<)!GTPR~OSHcxTi*wBP{IhGPr9EH>&M~|6^D{F~-f!Khc9V?4-oBjp z=HKqMnzgfazUSL&Jo>2+_-D|Lo{-jyx-5cs!#LrTkv z>MsSWx{d6zKS%%WaZs3AuNr%C<)7*240rPc@e9aK$qi}vJV|ZYjN?}h7rOT})|TvS zJG3zF!n?rtf2(z#-}P7RXI&;cVc8$nj*auvmwUer znG4?SGrsm5Wb)abx1n;}J8Ry?5POnO$6|_c?Ljp`7EP zd(_*md?|R#G-I-}@2z!<{J&Oj`g1on>WR(rI=fX4nU?Ddie|RlSoq-U$rLpj|6Mw@=K^#Y^mLz3oj<%+dS}k@y07*=%5wjTvYz=J$$R&E zh$ocv9y+yq?U(02;(i}VQ9hfTdB1I&o%gl6>-)QJ*IZh+{KAa%HOV#Rda^e@Vh_n!o*$_WpIrT)t78H!sd{x76m(F3paLzjf(?$St>6Kgr`) zf7Ipl@1LG~K-g}t-Ce7I1An6`f7QsWPp(>j_;<)O2JN3azLo6jF=o27wXcwy|KxG6 zeH(S-u20L$ip_r7vw!`|!UtQ<&pE!)eyjZDQ}&NT+LGsH|5}!rBDvKr{`R(emu?sT zQ#xFHwYB(Z&e`j$;{6xu#%=qwerx60HO2oom%}`Tl(Hf`B>SY1(mx*+nBc4 zE}r@;E3P(e?Hyq|^C|T@yVtc|{wAL!lkzGvOl=d(TcPawdAn4m&fgUlTjzE&`Eu>` zpB$eV#Te)6dp|qhJi%f?t%-*BO=<5#`RcPBxL+8a(4O|S_`bczCjQGOPrp!Fy4pc^ zYHsZP^Ny#sgt0yO=cBdc!lkglsQdh~m#d`@cCy4r#|te!s?y?~KZ`qNJOSS2|l;XSQm8vq^r$>)5BY zljW1|y~^$zjt?e2`zhnvRQI&+a?q>Kn=ie)y5{T>o=ltlaiNRZi}u=m|Mq9XK_z?f zlZzWFm&_@WIG%s&ecC&Pr<(7%UVYm%!Dgb|nsp{w+nQefE`C^RWjjMyr8n;U=1n{A zRQla4ez7=j_7YiJxwE^sy)p>8e=p|zhQNwRbzk!K>P38RuvZEZ_)%5z!K}#t{_Z_< zw(W6$${us9-(B(i(>=LcKJoP3pY~Su*H389bNV0l0yZrcpDQKKF>g{`%&hGXpG&zK zEqbDTAfItR?;iI!hhNtZ$TQi?pSp3e{!Dh{^%9M>dD3FPZ~eb_DE@E#JiTO;uaK+(2&l<(||DUy^p8rrjW4-*3=+^c2tp6lGqzlxs zJ+w~v9#Q3H^+#`7Uc-9F9qMtCzsuj>-2Yp%-M?Ii|M~%!8Sgs7-5>ok&8+MH@H}|Y@cJ? zEHtT)N#T6=-A{^nJ8SCSIry^AN&jH^^})WAQoZgB#}r%_xYpY-vW87~XDa%~cL9^$ z+(RsrT{5;_xqs#r!`GK=k9glsyDr;eYkFwM+0>0!_`irRm^R%}F4bJD^UeRd$NZHS^tU!=PW%N>=~`xcZp%@wh8(y8V_DQ*iwS&iUW?f-zK>0Jw(m-Y*IET%R&Blh+V!>1+FH+B zVfUy1b9v)XP_VE0hnJ-25BZD+i@P^Hm2M~QwVm>@I?35)<@fDtc&~fgq{usVulSa< zWYKPAj~&khe_rcWJGS-D*00qY-<#fAntrjgafN;_s(4T^m^ZfZ<(w|e#&H>mD4Klbu3eVQ2Tu8i3QynuRh&+ z<-Xn7@zS)PSG)dl)vW{_6ysmE7Uejd1-c5{rjWizgk({ z7&F?XEN$J3zuCoXW=>M)`BfYHGxBNZzts#!7&|()Exq!-dUM@Ezq#tune4u;y7ubp zuQq3;#q)kXSxn8$<&-!J|Zbvv;1dQ|m;J|= zv%2r^-6`H&Zaq6<+KIb~$A544He7nszRQtMLC{O2e0%%M_R5>WNh#u~`Fs1mUNZkz z`$Bwe#q7yXtycB@GS8jn@osXCynNqH{{1)gm-Z`8>WWIQmfUsNy)%~a3;Uk9x$3Dg zA?ByQ`aVzoFJ`D2{l{X0<$>c{UvE3J-0yD9!s4_QI!{-H|GEB=A^f=c^3*cD#XlyM z=4n*T`;;oRv;L^rj{bn!lIhK7EPwrt*Y_*>{ld;|!CLt#_jh*~>y>}+?tbI8J7{`W zlK$j#>5KmFJvZ}`+4}9jK4_PHTXO!%d*KTena<1kPuSefIW>9Zw3q1tciM8ND%;H8 zo#Od*!SCqF9rp_+)pZ{dzLfK^06O1xLBAtx+0Ol9U$zB5OMY81JM+iNFRrJh?O)1! z|2C`L`t(@KR1<&A^tEf2KaqTGaoqp;^Yu$)%hR|2s_Q+!^`HFf=+logk11bBt~|W_ z=i(*n?gjr!?7qJBPj=DGSCg0bNdL|Jvfxi~iQl&8udZ7iuR3ORygX|8zj;r}&n}N< z%-&E4b{K8`Qu+4EG|&c9}SOKWZP z>+jv#TWbIPUQwQGd*S>2TkoUReX_sB_x$K(tDG~x>))&nyuL;5X{oRJ@ogFMM-=a7 zJiqql$~BwaX2-5QTcNw#W?KEZe2M3s8+oIPA1B+L+4(c&%>FQcjsK^u>4lrbb$h?;-SRP~;pgU0>)*|7kD0eV*?onh zx{j!px>QOKK`Aua*m^?(FUJa>lbOr&X^{*V_(%g z$GUiH{e|NH$`2LU<=DzQJ~6WSUdP|OZpWH0?>Fzcc->H~aPQ~td)JR0kG|X{ylhw0 z?P7}LY6`tEOC<^pXnRSV-EM(qsYE_mdBoBKMu#RyZ2=Gtlw1N{GdzL z`r92N&^bYyKTK-npZUZ3O@;3xf6qVJeS02>&MypSI9-`%q^5T7scnz#`ig_H><CS<%8xE9dB%Zn!ndH-dx37WXZWlPWIZb zd)Ak-oQ&qXWN^8fJ!-j|`u9!WH8lQTxgEKAi=FUk$3?>L57=7R>MXc7b^5}%#3?n4 z*)9661oFLFyF+JA)%u5vqtf)yz=NzS(a%zu8bo3|NW>*nhg8D(T9ya_J& zX))_|_&s;kSmqG2&-q9EfV~3qrFiE1O8OChxQm_?o`0OtJd^)_ z;G^{a&J&&opR5mkRU28cgRSqO{=fO>JwD%8XxV?T|9^b_neYE!|5yF<^8er0GIo0z z?O5veUimB(vEfU!z(2*rU+fXT>^@9SIDc}x&OgB$^PB(j-PqocpYUz%oqYl`^XiUW z4Yzyxs+m1+|L3;p|9?py7iW+cUN3iJFZb{Adj|WfrXT)O-VtMXx32Z>W{*8yEt#5o z(r316&R@Xyu5 zyV;27_*7ZB6XGa(Mvu;;z|7R`G_&ruBe!_yPkZUgD{a)*>=Sgmu+->Akb>QIF zX9t{SpMLfEN=3+qA}ztkoWAF7o%34ve`&6$OUx~4ulS@${zswr*G=g9=UvHlXZy~a zd*X9fOS`1532R7w@mbs8()#`1eP?i;D-Y<(zjcLMXV#zNrTN=AOAn_^aee7*{p_^N z8HFhuUr(35QfTw%wNlsXwke;VKfabK^?6w&>)ok)?D)(ZwcU1$-ZbZneO4{yF?-tc z6xj%~o-qGqOYFMet$V#JNW+NN`eplC;pBhI`zAiz62QuEQay2ctof&7m-&~!exY9M zch@9TQn@nL|8MPr`vPA+DcefKUApSAW7oaE+m^hIxos`+U+%8j`s%ZDiz0X0e(CnO zcFaX{b<_4OdkXE{zt-JgSZ5^v+vCT|i;I~5w&mV@zER_5ie7QtuEO_~!e5hSl;nKw zjrZHQa=rG`irsD#;_g~ZFS4p%_96PTP-W@Gb8G9Q@a;wt4FB#-dsZ(J-uf1Y+L+H+_g%3(i5~w z`}X90#t*ZMrm+NjM0B+% ziZ}a5PD`B5_&p^&J5p`h(>4L2>z8|49XeE5oH%B&&m!{NOT(7_S z@zdONu`YG(e;rRh>mJP2c=A!SXNu7U`)k}>w{Es~KKdON`>Aen;Z^=A-xf2iNq(xm zI{nOBoyW&?4D>f}cOE#DbJOnaBa8VbDn5N|`klY<>g)Hb-oML@`=km`di66IqIB#6<3{BzqDTAcRQZ< zUuW(}&OduSYM$x#XB)SznYwvedQ6nW<-DuXVV82I9z6E@_>&#S-p}IR{!A}_>(`k1 zFMbz)s$2Ei;?u@&CyUqZGyQ3^EIc=Jh5z=e;@O!~wp;AE{O4Gv^_RP0(r!|ATm3HC zrpm0{ntFCwZtrZQ zZT_rqI#<2)rP$dWst>=2ME{y$x3+CgGms;)mR{7rkY2D{pez`sStuH-! zQj=vR8*Z#SZH4~z-qTM5@AW2MvWSdYU#fEJ*3y7Woyn&{hBw?w{5Zq2m{JNDLdZT1z%t(@yt-*cZ(dcfak?Z>ydQqLC# zP7je=H(hA|Ll^#ekKFTq>SPzco>jO0=Fj8L8n)JC+vNQW@4q-pexsS&ahvS7){3{k zaew{3{L`+m6F2l{t8~h2h49h-PtXyqR+=CYdZ z1Itkp^>;pY5wK28wwsXJ{In|&XT59*Yq)6;`#w?rv0w-O7lARM1PW> z@q^)UdE}4&&YGT&%4v3w`}!?E1l*dO{*<{*@W#X$Gj1m9=*TpfyUZ(gebUzH@+z(3 z|MVS7o01msc`RB{MmwbjTUiudWU%Mn;B|R&H;obU4;vWBmei;Aa&;9=*UxPP# zp765!Y`@tfe#zdN7No#@(0*Ct&ETJz4L9HaG5@gnzfPO{|LxXxKjZ(Z9Z)X(Kd0nR z>4WB=_t_85N66)M?7rXh;roWCvmfsNy%_E0HnGrQD+lczRwTsBn`v~NB;Z|Cy>?dUoi$b&*v@AUC3Hel?jCN4bV~^&LOP$vsYj<-0@ocFdoH}vhceVBi zMcE%oEZwJfKJ$zF^vU0+y5CuLU7j`J$fx+V;SG~Zoi(=3ui9PAI-MhatK9tuleW6< zZ#cj;U#`|-OX+1cr|(5xH}4+vpHRMW>)uKEeLtVw+z@>~_JqMiM;*1Fduq?k|2#)U zKKIP3wJZMUHtWdjSUWo}+d7cXNAmiAc7vs-mp1KqeQy4jjn{W?Tm1NZ(&XbiK3`_^ zTl;_SE9Ob>?^x}f7XB~H;F(s$F_&lAuivfHw>y4fS1EhW7enJS&JO$M**^*V@X_=4 zwQKM9%3Tj%SL$}M%Z+qT86|E!Zxp;I{R1KKS<3GDNKGbe{0d6*reUr^=ogOj5>1Z8PoIIrJK(EHu`sW+m1b4 z3R~G{OtoAb#~{3N`VEK2E8|oWdi(htyt9L4k1sqCJxNuU<2X zZ&Y2_dwD|NjN8vwoi|RbWUw}~UHiG`hnVt-jb*)OVz<`2@4xez^S_<@l}$dU!f)&R z^ZUzp;p42ObC|WCc%0qMaq`cjMj1_+?jwg@O>(l_ExbxvdIQspa|&-A9-aLw%75JU z_v$<4nkq`2zYn`86c$e{y?W_POwIMjGM&LGx1M&h1)ci4aeff1#_x;{#ZGd4?fw3Tm$(6r*#t!Q^;YWS5U$2or&T^bpVPijMl1`dNy}x9mrW)UA zxn(m|U6ncoicHF!9&LEDd0jYJ#(!^rj`9OK;p0U^Zk;n!#z5 z-(FN0wc=mjZ^_Cvb~@p29#1^c6q)2H;H+}&4fl+#cCU_0%S`v+iJUfbHA7j-Hd(in zB*hu2KOc%asP<(Z(lKz||Kx1tn;!*d{JwHM{QoBNOSye-?;Hrc?`B{BW#yW`(){A< ze(p1y_K`K?>hsq^HI`pvUO0jK*k9gTt<@lDJy_@68P^mDBX&&q;6e=)b9@ zYt4Ip-Xi_SMZ0+4A4|_Jx}o*ku=;mIWWICu-#ypXt=*>)eM|I!WghE{J@=)!A3y&f zrJub^%;Ku>)rp^O_SUf3TRl7fcki+9Cmu_!%K*`TKXhA_vOjk zum8CE-F{Rh@$&YhjE35s-}gQ~emcNo>Zv2I<+r!T@+HeX^}Ky@f*o(=RkOaQnYTQ+ zT_5Jg-4^>ee_q)1J6mpwHSlwtno z+y{Gn{JS=Ps;;QfvvS`$r+5EfrSnxkD<5uVo;AHB`t9oCjI2s4fv*pa{FL1Al;ik} z&r@wB73M#UN}JLDH2$Ww-!A>ve=g6n-IW$y5%6H&sm4of>w1??tb4g~p5vUstj} ze-1u2A$>*aja_$T-|lSgfpVk@}BH?cT>CYJWG^F$z7IU|1*o{yneGRuHmxN;a@7BDxYn%dGGpFMkFKe z)9xzAxPA9p-v8+dSL~g4;6>t!^vCD-^2|M%?)m(u#HmZ)U;XTpdz_$>RrO-;#B1B+ zCveTEKI^e9@WO%T(Qj>KXUYryJm|So>+`Ym?w9mfC*}t-mu~-Mul2Mx#O+grTi)ub z^U-a~uQKwv{Rlk2`I8Xn;M|i7iFMP#RUFl1)igp|EJC_gKkA5P*{yxh;JIRKB z$wgN_ZQXMC_?EZcwX8FvoL%dePIHYn}4Or~i(h(f`l!hF`I! zZK>?b54L^!b=@U@_!R4yH>bB~D6UD?x&OtT<6c=qJ5yRc`=js!d=Z~o7j*_Wb#AaIYkY&rWbOq_nK-&C2(K4c)*YK%^N|-Y>|-o z#Zm{FwjKDx_H4T37Z(kNM@;9|ai83jkmubuCFbCfR9&@SivI#`eQINCn0B<9eV=~* z3I<*FwPmkWRC8HnPD)MCwVYJetMsg4{iJ)27Zg+E%FY+36gfSc%MtugS(dvXdr|k9 zH-RUoTSslleP7q9_xk^(IgNjgi@%jE?$nA+ku2ZhahyN3<(E=%=Jf9~uLUYKq}SQL z$_|Xyo_IU^$y=tB8S^eTOgO$rGH6wEtY)>?KkwgXR&XdJv1V9CT*~p^Fq4Z-Y%Z^1 z!kd>4ej8nS*f&&9T==ChRmZHB!}^T!K4t^+4-scyGyIYXynJY#j;!?w%OHJ6hL_D@ z?#yOCmicA|v;LmiEt8XH^og5ACgFWxdSUHUtDuQfKd;Hz|$^7|-p1w>ezVHtfz^2qhP&n)kMo}Swfoh{54&zD-jsi(wBXmWb*D5t{CJ;g zTUuD3*dwH5D)iO!NO7}5*$$@NwP!kHSN_$pp2@|>ue7@=vik9{d0ziS0-w@K41_WZbCW19m%_l~m#^64_u&&_ZCxw}xviTgaVWZr`M=>F=0!UY~E9^tultRpc^{O)|Sckk3M)g0AzOG)!QCc@iY5USMqI>JE7TPtvr zGuuk}>7DI|=c)Q0x$E?$n=k0mJA>2>fA8AE({p?E%+)VB!jI*NM+BvK3U20E z;V(Axa^K^k=18SB+1;6m@mLCe3IPbV{;cx~O}i<~g6hTIadjZ*LFWJ?F^r zpD&iXUh@wx{lDSjPe9c@Io1pr6>F2<=)0Y?i z_j)4Iviw|Fm8n{d)91(q@7=%7kL6FXby<1JrRK^DTgC%d&SR-rRKQ#Pg_~*|iH_Ui&rY;ooWd*6O@me{KDj8x{3E*QcKE_Df5)cKc^O zE!*$dNsa5K)}JG!kKI3Rrm^Yn!M`VcD%A|!nV_Q=J)6J zrC7}Rw*FP)|Fa7AYpb(+e(c}!DgO%h^L+oyPd`3lejfSuNL|JHPm!~~FIsYQR<>#V z0@v32vy$DUO0%=)MW0@6RNYnoU1IL+c)86JpFg{@*6Lc$>OS|j`=;l2ep`2Q##WQ` z-!C?H)+{yRex1t{^?)^cd%yag8(p@1TegPWo!!K>WnJ+Hw)eZHNq!LD*O=6hjQmn!=gezb~|8H*nsms34 zk^Nb{$;T7!3o|aQ*UtPpaXx!w^7SSBOqKHYK3D9V<^PxS`Eh;a!05X<9tsol7td?# z)Gn)OmaaP_YJb$i;G^g_oi{sFKiV~B_k2IWxZ3XM55vy+i8=?CpE;wm$N7P*(tU9<$5dt$yXzSb9~?zgi4-@e#ukH13qn&_1*tUr%f;^n)G z>7Uw%^2YQ7@=X6_en{Rv{YtpfP-U78=MPOwreBVqRDaF>_UUuU9`z&hlfDT*kY3tz zJ;mWi{KUpL`$DhYeJNA-{=e1D@c#!zFTXvv?`OQ)qpOF^|9cTl*X*G_)=&R*f{^&21OPv)~fGL1EQ-_eh(5mo0(ig~}q zo~aXlBdgHPL9hs5js8Pcq?RL=hN^|bq%c}a13 zg>dLJo@PN;K@{qF6)q5V+$%Ia{2ThqL@{JiumLXWHCdTR4yxi>TZmtEA!_u7{& zr4g&N<$8l}*yyP;t6L>v-Z~SAu*Zs^ETjOQ!g!2FXZ57A3y825LyJ6K_ zHMOPp!eXwm9p>u}7x*qYg-O!K?rwnN9kq)$4)^h;@R%H^+p{OhF;If-C(}*W%QTR>?M=EuOBNdckzF# zv9pJ(Vax6*3fnd=uFbpWcKxEUbW~h@!&L)O(Jz)UWeXZ6>fKsuD!038j`-cx3;w=a z@W|nEr@@OY%bkA(F;3f+d*SQ%idUZhr}3WF3tD&j=<%9YpXdBp_cwd_`Kcwv=igqO zap3gDZZ@l#S&7P#(!u*AS5`fnxXE8n`NB7z^L`CZRf^n)W;1PyaSwIBQrFdU?8V$& z@`2`(3(u|R`orV=Uv2M$MN>q}LQ>M^UcOuBQM>gg-;&R~e?DCnD|(W{K0!1(J@x&X zFiHQ{Qu^yT4kfc6xU@6Hw?1X^o?mX)-ppZIoBLup*PU;b>(7){d3Mgfv2y?Jf7SAp z)~9Ns7f)(8GC#X^&8p*JPxzOA{=6W)EMrsAyv1*RUj6p|6x;Tm-pPM;D#g0&#e_=N zy>>XhX!_N>>6QyFi|$uRz0)2td!hQ?CH`4b+b>Vr|H`N7f)XD)V**=#{ayW@w@R}X zaW6b!-@oP3JFXYOm8S8E0-O2+-)8HXU-{|EU({n3QZs#)Ta8lgeD|&IJ$`##3afj5 z>))&P>*+@A+VxNQ)`&?u9t-t-pB(Z0>BaNkPOsTiv$kQ<;^mx2?Ipf%{F*fF&~8EF z6hQFHa+L!6xF|l^WXZ0AP zX{tiYd7|1{L_bvYw5e7^D24By`8)Z^bN&2^y3Y)|8)g=M7ub1A*QZdi<;WbR$*BT` z9Mhf#9h$pb#8M}m#rur+lexFq%P#i_-te_N^rNuz#$i$O-RyC9Vm}si)coBWe#eLV zGN0J(Q~|S}Zvr|d{{Gqa`tA`uIZy7VwS5}<=chdrx!KBdY5OAXV|}mxo;jSDWPkQ& zkMOkfiEoRZd_AgGR(S5(!B01CyJ|Po?|;I@A#B`Pd2?g;Pp3xBbFR#>>c$FIEl1A2 z^JSdNuH^l*O-1i+iC8`JZI?(<$xlrk zAJ&k1AM0fkI_%c(*J#5w4{?{gch5iLU&0em&ylUG1sn2tl zy;}ZZXXre=;IdL{q=y_5bh z>fZK^!uiH=ZgJOMUEH$E^^t){1iR7ti__+8e`5CS=8gJ^rFO?R?dhFZGbw$`(`+M& z+|K>dzYo87sF$6*Am?C7O>gP4hxc#Ih`)T&(6e?-eQ{H_v_P?J*K$|>l@d75ZTpo`)S_3Z42)OT#Aa{_Sx{- z)9IV?x1FroTiL~*q0N~UAN9B}XMe87nTm@mBJZWo?w5>MmwmFX?-1jw(WnJ-mq>}fAUT1t(8WW+r=%oAa1w3YZm;6)l*WA1=yWdFa z)P1Ssh;_=-+OD78)V}GH*S!c?=haKB7Pvk2oY`)3&0a3|n&&=a zz6Ft+TRlImS^4^!&C?HA-ii6JT8VSgF3cbOV=9r%5+%VWcfb(wS30J^LH0ZrcXWaa?Pw0aV^&uZ~l5M z$5hUx_|pFCHcf@!zL>pjdv5kb(lp}s;`irymrRVem3eFwWm%#z@4dU}{wk^dv(vJ} zy!P(-^G{i=_OJ=(o zF6x8Vk%3N+o2SR{1w8!r>*|v4jrSSxBuzQ^Nr%tm2STz z4*h5QR{Dwk)%KGOAL^O@oKIn>P;gJHca9FY@%g2Ft=zl%lGB^tpZ)f*zUsl>`@RRx z-TQynx#H*gdMB$t`4Lu3^BMoQt^WRh#_asVtLOZPxAd(nM|9-r%-tJfd;+CJaGs-Q-4<4<9ozbzB?HML4VU^Wu?XMLl{*XoYI z`gy{K7%MuLKEF}Zts5S3$~(U>U7)vQ#)hYA|GmSP96nN%f1~EeG#oI!DqPcuB_*v+)YZr_OqPd2DG-}YkJ`m}GCo_M~I#p#3BJQweA z|E1BXYPEwoS*>@S)d}W_o>oq~v>#;ki}^7&x=)x9~3Nh4VtegbJ}Po^JTH9kk3T{_bTt&F7CElm7w%oIqs>|^xu0r z9|}HeYMvz=%W{3!m6=BI6Rw(6-9BY?tAy1vY=!EnY6IarI~g`GwJv9x#kXmj)QLb3 z*&{9)M)Jy0$rc7jlNh7@x9{xx(qJi}EPLxHd&AM!bIvjLC9*$#*P*jqDADfKx}EC+ zclmYAYvtULnS0S=(atbQwB(} z?nR$7H?%*_>&iLwQ{rPem(0tCvUxGTHg}(pn&o2?yOmi_dHTluUmdkYclkQ=-u`3J zdH1vFi)&8moHehjqf3)FZQ0nA>8x*kJ$q{C_R8nQeOv5R{1zYm9h0!=eKf=B#QVxq z{`P0{MfIup1-f&H*c-F+Pi9c?~ff9c1=0o*t%f$xcX>TA=CRpxr{*_77V@rcOH zO<$k$HFj%|qUtdm=Ezov)#$DSM84f-1O z&d+)N#7b|$c5CfV>mSFyDL!ldV%DpItxFe9T`ayd#Z}^1nyAm~%~tnMxH5eGB$Y8e zz(ZE6d0l^4&BKfJ0rS`V;?V6^wa}aRI(Fsdr<=IeJpU zb@ww5{%ts|@H4jW!M}f-tIL8PW#!j=%Q`>1-Io9Oop-D6>U}P^-MmDz`Bi`QJHGIk zw_}Q=6!*S3;&svP> z@)WNtB}Fdfr+?+9_DDQA@nPDGLuWQUslHeC@kHKq18yC$8K>^ZcKI!xqAz{pxXi-Z zIJIxPU3iYo@p@8vdg6`gThv>Qe0|5bxnp8&gM`quH9Y5MdL+bcifi3rz^a`5x3(tj zcji->Ly0px5)PDkiW(h+K&*b#Z1)92p1Eb*@U7q=c> zA^zk_{_}%sA-5mhzxVI#gMF_zZd-V>aK(MT$A4n}GQ2!|(Y*cOy===bo32-0{kg8x z&_=$l?BAMSCe80}i3UHLI@u0B|DW|w^(hy)}5@5 z*%tLUGh&^U_V?vI+ly;AFLn2ycr@&P&c#`EYfq+oAD5TD?*Eg=;`rik*LUukm!*8n zBs(|Od;8b8`MEF8?c8&r*}sySa0`z>G`!*HLp+n=RJKx{c-Nw`#Y_e-?E&| zIKAzQ>-5Dvawpyf%-x#nc=mO!bgJZw-$m2zH$V9}KRa3_xxS+6=DN2PRz*?Ux1UZ` zI-U1*=d|TTVgJ-mE{^usTVMR``1bo-Ypymb)c3#K@>aR`Pu1-d>($ft7Uh@Lt`pdx zyWg>orNl6J`?IHk=Z~4?oV|EYJlgE*oliHSermlhjLCT#{k!(<`?W^%COy~OmfgLr zW}7b8C-1e@%^MZoznUjlGTo;9={nQ2Ud74(_(~4y`Mi=VT{Szp%_#epqPY@xtFXGE<7(757I!W3ri_s9FCza_a*l`B%k~Yvz75ei&K#sXWu< z*z*1JLhn^=TXEv#?`^v?Zo52NsK3rF?)x?mQOAn)>6u|Y-R=qX(MBiBg)9JEN<^4J$R-ZZf$sAalu&0rAkS8 z<(U{K6^89KCr$rXNBt`nvRC}HzVlE0%@4BIZ7%qy&pGPhR_&9%zbfG6nH7^Rr+3~o zwwg6>Q}_*w$;;(bl{cG*@OA3!nOiAbYbiZT`lWi@)!^dLs;eBg#dNPP+juWLiS63z z_Qk1D6ZU+)axLx7FYlvybE0yTf?@ z$%H!}3%sSIE^SnlV|!GmBFE>ki~XkPyk9&P)1%*PoB8?Ym#v@enCH6nbFXt@EC0Em zv@^oil~Xs+bTZ>-AB7B7rI%3?7rM4wO%YS~eUjp?`Tqb+N_v0Wm~|ja0i14jb2M@o|b2A)?3$irXj6M#>?astASdo!M7hX zE^7&_-Ffcf6;I1Y)iy@%X5klRu&xPxu=-`f9$N=}9sV`_u21f5x!6!6lGCT%@MPbI zh$p(O<*dEC`()nUdNW6>Ahz-4t!E}r_HZoGi)VOnT9rXBMe?{%VGUF1)>O$$Z>Dsm z?3;b=OSYlD)YqWJ2c|#Q>wOS(klm!?{uJAlOkvukCs+!uo#lM{x^CLU-UM6Mvt={G zr*3C@rTU1g!#`%W<7ciZ;dj5s*1g{y`MvhE(2a-B>Owb6V=7y|ucTOhWt``nuW6U$ zSvz}!FBVU^l;Y4H+ZhtyE4uo)u!HH7jn8HoZHtkVS2KFYV$z;@_lo8NLF2TpKa-kE zbk2Lv<8(>CHhq3$Sh!Msw7{;dzPoN(Fjh~VxO<tMo!?>bRjdD- zQy=Ssh|3}dYuy%y$yywpoqIoIKBM@}(}Fq&s!QMAG|tt#H8*MZ#0dBLZRQQ*G|6JC9DWm6h1=*Yy2E z9sN%Ma-rKT76xZ-Tm1EgXVmhzHHyc|KQ4`0`D9VGyY7xDZ!e?-uMV~qeqb$md-cB= zmJ63mU$1jY^>&vRltgg}hy_tX3&V4kwMj&Zp zKj&$U&0%5NcwOsjPn+D2l;aHx%ajQSH3*i z@LfPg(PGYLo@RrdzSX|Z*5|Svo5A?r&+Ws+#}_WNp12$OZgKp*`xpD?$?vaSBG2T1 zTw9~G^1X!ck&739-044V=>F;*zn#1G_rALu6MOn{Z-3r!yC_4Z{5JFT*%R9ji{7`3 zx%{J1e*aBFufvBQcI{rRY(9IU{l90r@AIne#cXG(YU-CcK5hBqw$*!o;rK z!-I9szYF;tD<6K#TEc12GjEE}?J|cCE}0y8DVKSUxI8p$Z+vllnp#if`PVa$52T>l}+?Gn6m0&oBM7 z^8SSu8$WAvp_)D?d$+mfwzHQl_t$mtFX%Lz@m^*5w$*1Cw-oPw%Nlw4smC?GY234x z<+Ek4-gKDP}aCPe&XFhG5UK9~u|BCx>u#c5*)~~Et@!kJz&uUJ+Z+iA}XndsA zOXc;pm;XeypUtjWk-l&CoF8{>W^Y>i^KIC%`m0~^7oUT*F?rVNbTTYo?)CfRW;5OE zsq?*y_1^O@jQ_snm*!L3X!n@PZ>v9i;3`l5I@9{&x@E;LuiXk1F z_fNC0-M4J>@;kw+%9p3aP0#$iH_c{lb+|68e$2yN{nt_=U*FwXxAwHv_5b?452yb+ zdFo4y^tq|urDhkey0_Kp+N=7`>BYN}FJGH)u)N~eLbJ5Be~Obgt&3k}lAU?|)#}$a zN1tc^ei2f?{;Xy8Cfm^XtxNVtmHmA)C)Z17+fp%xd#1H^>dnF1QhK*<`m;N$*zcmI z^!Fh7d9SV)&p&6XuccmGlXxoraJJvq!?!9npMPt#_t1h*pU&6JGMOpA`%IBuSIybO zQs<|wPr39;?8L0Nh}eowaqiShRi&P{oYrJXzO?54yz1-qZKq#-Iw14;vf**EQ(VMWay{Uov`H{9O-))`q<>>k+Yiq@{<7eOhH!tGU*E=?Q%+&m+M%!;L$@7a} z9sWOVcKf-X0?S{m`M&yf(ce?Qub(@we(=!qo&sNe)0Cr}CC}zs2X52;?_;F<)g!jg zGyC$(_guTarM-;`Vw<9WPL`v)IKjEIVqL-)k;tYaC!hNGmV7o&{guMNs4YJE_`Bb} z=}g(lo7D1WzK)7{(IuI_Tt@G=Pi4%+jsNtbzIj>BUu1Ub^X3&#wP!9*+ih(1JA1+P zANASE@r}>EepY$?Eyy$X!>vEreIkBOBX7?rP!*Z7SXWb-t9hSeL&Jl@)I1v_1EE3{ zsR!$>eCK<}ZS(%)9_1qML&`axcLaV+nr7QqZR5{T-}iy>hs=3%4tdWv4RXg#8_RQk z2wMMBZ_!m)BJ|Xzc#?<3r@s#-iiIcK&zy8J`d;DL|6OhWbw6w`tZ7^B_(PKSf7i79 zk6)Ig&zoexeDHc&W5~VVpZ3qK+@fRKpIg1A?^ABN$?Lxn{Y$>R%ZWSxsY@dL)5`Y5 z%I&ijZ?3ofoNf0t>GawQ-2RTIH*Vg4igjMKw3+YO$zL_jDDKm&_glW;`FgRZx3`?? zuWCMj`oz;CoGyQ_E|SgOyytQM1&`OyHoQF45aoZZN^Jdd`&AV&{*$@(o1NE;`s`CA z=@q~B!_Kg@*ypS@kON!AcU{Q0f$cK=@?PEbLHuO<57kBrzim%jH~I&juUY@zJLH1- zl1a}Qe}t!e_+B6WV~4tXg8$MtRTotkFMDiP^yBG+d;cdlzW;Z-_s^IAB0o>ctN#4` z|9bzs_<#51e;ob)`TWeqv+_@!cVIj7pWBGxuX`)|-r9h}((%*(e}BUN+q$Ub$N2_( z=I`8xzWqOb_WfV!UFV~JyJ$3z#5qKA{RzD={rZagg?ZgQJ`+zgO72*%V3f!-fwlLO&8(tJXWn1=x9Mbpa=Tx{ zmLiUNCNYx-LY6|?A7(PC9#@U;{+4_z>)N?VryEQKgO@SQnvy6-T}Gr>D0o=*Lf6`A)Ic6_$j%&2lJyxa9(P?(lE z>ua@>OgXD&o3mQTg!W5*5s`|x6&u1f za*b;@v2|>0_^!D(#df})fZ^j*#pA`<|8Cu{Tle^8CdcpP)%Wbem#_Z4;*FrM*`2d{ zZhAZw-oL6?@Ac|e?_3h|_FsG5{dd-{=x5tr#60NkF;V(i64_e%^vs>T+x!iG3S?#1 z%+tS~mpuR2IC%(pi7WMN9vrZ_;Xe181+F&KtS^@Y$j{ zHS2@caeS^@ZW+3Tp+S28NxRL{JyzI7&z=3{-i_M5DK51aGIM5~?#-DSEWh^6bKQnt z`#vO;2At+7mNUM`I-hax6z=$xBc9XxEy9%+Wm}d;&v<=hV?ycHEr%m_FB1RgQ+f5+ zO~VyWGvinI8hqOD@9B~GoeY28G<3XLzw-FEn_>9|kr&t}Ikx|nZ@@~%Q?_ULaBsD&LFo?BK?pru#_f2`**}Nrdl|2=f zwtQD$jj`*Qx7wGjXE~F`yIC&w&rZDf`@mChms!zW-iGIO*9B@8WXrTKT=?Ghdbs2Q z9gAaz&F5T|%x5z%X-jO$oo?~P;Mjp>nIE34c*IbflM&@_Z`M(<%gpFYld`*Kf3y0I zJL~T`3%LioJda((tDJ0KAdw)Uv{6I(9w^5O-|Uy3$JeMb@9)OM z@;5tnzx(;7?D*w{$~!!K3(dM@|w{$w+|5R9hG`{Bhw8Mq{<=9uv6#00lfpLwpl3x2TbW#^>}W)o*HtvlhYa`D$Zl?QuITe(l`UDBqw%|!9yjyvIh z1uS}G?{VK=7IPw`EvRc=V#~F3+56us|HPP1wA)%SU%8@xqv|6IzDD!dBfCAsl{%8` zb3Uj}`u=_Q_8%V(%zoSVK=$XXCYefEeV3De=bd^Qb?@mm6T5gRA=SgTWSt)Ou8;rC z${ii?)9zPJDcMRj~b>- zcI*?o->(~7xlk-*6AZR zl(XAI{J!qweXJa1t+#T<^|Cs%+UlE@8>U!x?)_wb^i%Tu#7kH0mY(bUwSDWxYvQq* zk8iSug}hwiwf)=Pg(0=>SBj!V;y)Mn#Z7)Da@FSVuG8=Zfci79ExYyWd$4!)|7|a} z2CpuaJm-6JzESA2lYw69sF4<4#URr4y zG%rhXU((6qum5M6M{o13J|()XXzl4W{U7ElzuuL-bL*e@%g2JNQchc6T|cLy?$p}4 zweRL#+F5LK35Sm;*jAhv&g^ea{Xhc|C3#1 z^Zd(xxy5NaD+AZ*zTR3D`FY2(_*I`zeV6iiCbII)S=oE%PkfS@ndrD{OIm5M@3l1U zlBqfKZ|R2AhUFghskyeRV%?vFf7?GSzxD0rzBP^CrkU?f$)B&iKK1uM6^2{eLg(Mi zPOaPaVtL88o0`^J%(iFkO{-3y_-*OVz1y1g&%R%?r~a%>o!)uNs?2$D)%(-p z{mfRoZ|l;Ew>0upLF$8EOYzypLaUXgw^Lpgx&8ceN>jd= zy)9X`lq0Mm@KbSb+dF5;#jGWAr{m`Rvwi#i+Eca5|F(Lb-5B9L@7y0t<;|1sRbT$T z%+9y?Qn=tX{T*?Mo|(7atx%VrT(GNPUgWyZr-jeVDA)gKvHqeZ`{!Bv?{2o7_-(1u z+ZmD4$1Q35<IMu zvF&4a-WY8L5BNQ6IybmhbU${t zSl7tg=X*8keDQ|Dw~aUCHvGRWcV&;%)jL%!Tdyxkef9g6^2JY5^Ufbyr?vdskykUr zFPrKdyj9h3%tddO4a4oarMHYX=C0f7r*&ZaHT7rZUppQt{VzVSd4o*l1{v00^_DD0 zi!XeUpSfv2)3X=vyfz=-++&l+&*k)O+Zxsri(mH7JDD2!e)%M(XZE`LKTZA_JNaO^ zoBg$le_0Fd?R&n%dRcm3_FEuE{NjIEe&GF?{P9O;rN3_VT<_JH^G-PA@4m1o^Obdm z=AT-YZ%2}!JpRw};Lcxr`5({r-z)fWv#oHuy1O-hio>^QJP!9K9efi0^e*EL*1FwS z{?4-z|0nW1|KMLk1BH*bKfM#Pcr-hH)6Y-oCG&Z|$iK6wdoCf@$0MKbdHDX(o%{L! zluj`3SYb2&gu`!sh5Zhf%%8M2J4oeEFnp%*yiVb(yBmLIj)Z(mg+%9Z*-Q(Ck5W%^ zGu`>0Zac=~wmsTO&ePIHj;}^}huWj)c5b;NXD{lw7x<-ps4OZjU&7R+6>HSkdS+3@ zUS>nry`~D0UM?ZhYjf|U9{4WOxo67cwnM@x6DBgv5OoP|Fp;_%?6`R4p35uV{$R>m z&aim3N2ZvKZDxAp3V$vw-32<*8*O45^%*{JCd4$<2c?L7SBq!8Hgl2Hu1jpJM^5iC zc>6{wfl+R!)S2)n$%}Vu^>h8${!}yJY`)L`DO=}q@?=-Ic~zyw3Y;|h&buS~@_x~d z>|dJFa(+As`(N}lJ@?*H^xXE5OrMZw*e1OlJKQw{9fR$eZ=YUexXv}k!DPu(5zVmM z>lIdAGB?t@o!!VK5*uWY#u&ew>7RIdOlqz8{7rg~7vwJ7dCvZTQr3>%81t7-&W`?5 z3j-XQ_I=s=s;`{YW<{>1(VRuT%Png=5B23J#2T(m&o22M;m7@ADTkEpwI+#@+K3dk zf>)`Gb%%u_*3UMUo3n25^g55U#op$Jm#OA$_p$!Ca=NI&>#s+qGyO2xRm)iIH!;;T z_p4{J@=7nu(u9NBGrs2~m)yFsU24jn7ncw0Im!0#ivE@x^X3zr{(AW zbcfQ&XVE9_ZQH7MIK2M$x0P%5K8(&?_42vYjmN91;%?nseR|eEzcbrYuN$rSH|N)L zmt9By@t>{=slPhU>hSfFnapQ)Ev$OV{UF?5#c=xH9G_QnW;wJm9a-l;=ftLN5t*)^ z(p@oAO1Y&j|6Q2n6Sa@S=Rn5oX-9wPewVl0%x~UXdScs^Uls?aEcf;N+%Nk+YxdVq zla?-=|J2S^!u;`3b5;YnRb{L1?byk8dNb<|;mtfTonm>6FDCp}<$d~n;g!(-)vrpX z@BNVCdw;F&x_F;rZJ&02waF<@Hd^F7m}Ye0bhcVt>a^om#Gfg#p58vAN?iKiHzm%i zjOPFKZyC(Z4*3^3ZBgBEllRZ8Vm~$>`4zhKVBReLH=0_P*}mp4t25Yi!Q`5me$KQ{ za%Xm2EDHM)Pt+{j8BKrwHAQdfCbNuP42z|q+=yJZ0!-LC2@lso3-I?jEEer?KWA|iLx2Y&J8k)%*o2J*3 zb8Ft=3m3olJ?Pu=&*Q^~8~0NTcGy3vU8FjxAkw|zfv_fLZ@b|(o29z35{0S${|$0p zupfV5J89GXZJBO!%00eJzS(IJ#1*sscuk47vD~FFftdIQkw4DROikIQ)_A zxoz%=y0zsKuRY(H>%pt3CT0I1=FsHD7oQtuK3`mucub)9=j;Hzs^}kvujEyhdCSjn zJ~DkNbHDO!=e?ka69&5=l%Pe za{0H|3B~OD^3cNUPHvS{`IEo@jOP@WBpx`uvBq;(&CkZ}o|8{cymqX8_(^x&ea&mv zR@iQz{!Eu|yJ+;P>6x~(pZD~vi7jzWyY=#wd*mwpE78_DY5YunA-^9z`J!4w4^>O;maAemPJaLT{`D72jm|xdkKPv**%W)?k?Eg^>EBe%i*qZ# zsD8h!S9wGAfz@2!>a5Jtw>#G?srLPK{l({~S<_>lUH=ewIs0px?%kE?`n|2e_5V|A zn6B(vH9tJj_NTGkxtBMykDaqzb-Q}qoM5Z4*FU_!&ON>PQ{_*kzX7{9PuqTNc5vCT zzURTY<)OE>nytNg{noteHS`{Xp=?brToyM3lq`dY=oE7`xV{;OT}KWArY)YGGe&T|sjE0OoSx9RW7(&>-&FI(sTTi;hXrFC5@kKg7{>&6SA)3@|y@42yd)30>hzq4wxqH~{L ziBiAgCAa<4oo{oOMyapT-E^|;w(72}CSm6%X}+E#AO4$vntbkisRQwq7mQwS+mrS$ zykl1Err%R4ABKN??Dw?t?B?rN>R0vb&yi2qy6AdH#iO|g9-VQH{j$>XQKaOr-(Hg4 z`Upk%9Hq}{rXJU{ypzv zXMgLq{2tJMu$AY!TJT~1?95XKu6LJQpTiw)nE8L&)`N+!*VY@R+62!I=2~ZC751H} zPGhdts$1vk^JdRIsonkmnaP}a^9|px>0ST!lhw|X%UnDxxFT=!4WEjuvr2E%ogx|R=?mWzHmdtO!i!&2e$!<^%P)4clLWSs?H znVI`}-b@Ip(h?GAnK;i{CjV!X_CKq}`Hy}GRX8tlmFTF&_+D~PEwcS1#Qog7glA6OJ@d#F*K0yvxo=r^{X*w7KV6YESNSC`tkt-}Ch_Cl{+()H|0^2(~gvk zo$_YF3lHb!9^OeMjmwqq-BGDdcru|>q~9LMFsAr~0pJ~7$Z3QNQtEaP^l zV65|Xco`eGH)vb-%!V7mma0s9+|*(lww;Qa#QJb~qojs_&#z1JK^2=fm7a}B4`wL1 z!OM}zw${}6LxCWtRIvL*@9OEdT`n3*8t;f)ys>Tdrk)iJ$JPF?V{l~_DNx;&{qE8t zWv+<+a9t6e)n7WC-m|2p3v87?~E!Rv0_)Aj4V%$;$W@!a#W zwp_Lj?Suj*^^7OKm~7_gc^m9Ler}C?bivY3Z)V4o-4Ofmb6-!W@jIOZMN-Ne?i@A9 ze#Uj>$}f}s`Op7_E!h3pyI|L;ic7wG8=OvE+Qis@%Uhx5W%5?vGUj8FmOc%cclQL} zPQ7+SU14b-BX?YA?W$k*o380bq%bkxT6y&r)6~aHIF{8vIa0j&VJf3;UrvAE1HXs< ze~jjS+88!>^QYrm=3cUU8?BkyU6WnKwq>Q+^Leg|)}?IhC|G&^Z&mCx`-I9whr1^_ z5AL)*@32ViEX$UQ?q5B7tCpX;vXvoc{g!;G#d(^aU1ig6X+NEx`T6>JXQ7@wwUXAl z#wR4jmg}g+UH(*m_YIpzC;Ee zu1tS) zbFQ42ZFKs7oIcmZpUHD>znxv_x5=!K@yFKR#aixHZ7=)tsqIfm+`VQ0GN!XJlhdjV zzN)sV^RLsco3b|k^hIW#zRdf%vy!*!Y+fJL-|snpjqi~g>#FPnPo7|iUzV7>{Oq3z z)hExD-%39=@Akhi`CFm2(YHHaZsO>YdH8eAqO-oA&nNX%1#jQ5J zN8Qch+obuA3-3*wWYFjI;X%z|1Bb`5$t6c#?6|)*hwWjOwvAod%>3Im6Wu4(h$TtL z8k(wnY?<);uSJS|*>2A-&5yH$IqzLG>-4q0#D78lv&9#VcI7*9{5jDNEzEjOUhLFn zcsDWm{)U%D_uur(y|?lIePG$yz|+z47hinrJMx`h+HUvj!gCv~tKQAGN|Jebh~b>! zl4&Bc_tfS1!fXDQ9G^W~xwhv`pKfwa#-9VB*Ne+b6*`~m@2ftYZeBert^f19!xt1D z?YPxrp;om%WzVS85 zcU}@Yda=JTw|D`!^EG{kBZf;H9`{w)D?RdL*)!c}&*xOO#W9A{{`7YDT)Oyc-nz4o zuUj*kKbm#onEZ|J^OisCy1TC=lFbR;6E)2F`Nez1hobEEOA_X#P+GYz(uA2ajY zxALQB%)7}?T^+MtUyWN;yZzgZbD|+-yT5((+1dT`)RXOXJZJvgdhhY@{)bi zPI|w*c52P^3cJ#px!${v-CrJXH-7!qxyA3Vor-vEti5^bKkMc5m;cyc^>vcYwOe(4 z?NvGTT5E4!pI)(Le%gE^G5?#pic8g}ZJ0FumBrU}(;ly^tLnYGDf8MfzrAmlK4qEq z=f<9^oBnIrKmYY>>Bk?p3^QKqs2hnrNb{XMgYnM1)Gr06``1?cPS3TSyddoM6Niv+^n?~6)uRmUt*MF(l;@YLW2-`H(wYs~n z-3)%5zE*ad-Pv$m-+5a)v;W=j{+u!QU(BrOHQR!>#hqSPs}!BTR=#v@_WAft+q=v4 zEj;wkzF$B0`}JS%Z>oM$eVBCq)Rp3_e{)jO<*W?9g=y`bVx%`&b90D=TfxPSrBi15 z-0U`e{OS9vn>>Ct|3lI}Eq4C1dE34|H1B`B?-nQZF9&CCT2}b&mgilOPmApTHRag3 zmd!sk?`-+Gw2B!_^Vb}#eEsYEPj9o{U(>Unrb=rGd+bp>pD62XpS*2r3kj0^RM#rtvBjc{qn_zcPhWP_Ke0|(TYes! z!Y2v0G+g@*S+D!iq<^EpIf?yG(-GlD{enBnDlLo;nLp?%+X`0ySm5HRwWn3-Cf^B$ za&6yg-d;H)!Qj3s#>JKS>$x{=o;mlb#?Pz2HwNBZ+p^YtMcic%zK*TS7=xZ}yme#N z^RjQ*XYRjJ&8Xh8X6x#?i+)|OFwwu`1|(LpX?9jPdxZ|_R6^D<`3$6iud;}QJ*lM*ap7=-BSe^d1zv zv;80_sQA@ArNpAX`2_Ezb&8gsG9Rsba@keNHM@yhdQQK^^xsa48=?)pg(QkIjGnvx- zg2cY3>g{e|T$XW{OKjWM-vI}1l(7fRILI<i3NY;*C~{+^29fs z7um2awml?Z^Lw6*l`lG&CN5v`q{*#&>NBhB6Tc)e+HYrXtT^E5BBi6~QG#2cce_3JYorj92&u$kmyE)~>ti+3g)7et)7`lqa_c+h|Dwg*5`f1KX%f84j zwS8*D9P1t1@Wfj_GwyzBq{;Qo=XNb)*mg2ks@%Y?@p8xWL^{4L#lD}ql<$1!ssC&`=Do745if3Bw>qOXi&f>;-ES*ppQ-d+ z{+RO1?e?SYHIf?_%wz2q-jN>Z;+N&HOxVJBhWyzD^AnzJIk-i0$0kAZlU6f#oe{}C zsK~9*{WEs4ufEds+p;xV*>CYBPoA61)^uyv);Ak;9^ce6Ev{Oal^#3qTfgdDsoZH( z3m1LvvRnT<PyYJmbN~8@Q@e{6`?>Cj*)3bs^(E)G z@TVWKC)aOFW;$*3{qLiqmafpb=?#(Z|K2G--w=^y%`1F4l{L#cCnYU-8vhxF)NJpb zH6@2{PA$58qUNFdOLytFwNlQ@)*OAms`y}uYi9C`O|o@moQ{?YC!b2S-POC@W69^e zUwgmoe^kddAs>pY++6$@p{QtG(A2@7i7TC|xW0?UtTfo?oX* zEvw9*H9vLT;4rVv`>}0{4IK3PtLM0N0-mM zCt2y69P#|R=x&`Ebrp85}WVpZq49hb0Gaw_0^&+TyCa@}@Uok@+Sas`fEd?>@Sv7t&;;ZcEI(VNc} z5{sYTNDufu!=@?OXQH_|^L0Zdy@z+y>XR(|C%Fh0*~_rEXUiOPZ4;@u^Zdlyd-)&y zEWY#|eqkvWowseCLDf9I=vfAjCO@v*{`Bx=(cH-v-*owI$bRmeFn`b9=bK-vzblX4 zSGye zK7M<)FZuq4_tGpK7eD`d*=5F4Q&)ZBDKBrJ6jP_&HlC9cj|fhFY+;$v(aE`P_dLU@Z-?7_wJqYm1PD1Dus&GnE-Z7B_1odlX`Uy<)j9fd&6Um> zFPXORj^y-=4xt+@f)jU3Z0(FTW{&S+cVC)-jX+K4m&mztd|DX6_4}z4E@n z)Azr2d;IMck629N}k<4Ra&`sw@tsZ zE__GS>i5?_t=*Y${+e~X#`S57^VYA;&&_;f`gHxrKwa-!st2$B$^H{H@4Swo{--sz ztLy!~zPFV9dF5lk=_kRj{wS7a?u&1qcim>rrQg9%vt~_C`EcuFi%F$xMpNTn97DqQo!4$9ZI^qcY(Hz6T(|yB>#%!Q|J?o_cFxRyt@J*xWPNrE z*X+6=-|XURQTMi1#eFLL@-u2yu-%1~<@!IX=fA3+|0@0O?>T2}|0lHCO|{ew54#mP zqt@*C^e@YQ)LrA8wasR}-YffqUEfaLs)@M1`j5w~^Gh;q#Tx8B?!B~c)6N*SQL3>v@SRunYnE?|epngpo@Ti9XXWH;rEY0;@yAb`K6&lfStK(J@zEDTSw~9JG8^t%LciVV#*nZIcU~ly4 zIEQ`uVgJk@)f~3W|MOe;mmCVVb*_?m|D!4UAKQlH3^hQ)RlB+T4Ensm=dtvsOLh^y>L*_g=PJx7Yg2eXVv?`{yrACtiO3Y5JbM zY&CK2E%DR7&pL@TGRKBEIe67d)_Y9*+5hnUT>QUYt$EvdSD*FMKdMiv|Iq(w(nI@y z?U$7&r|;bJ`nGOj@$`w4-cGFeaiVDFnTd?ga_jWIAE+)m@@db7DJxHB-nBjVm#3zm zyS}mKKeObTIH!Qm5tr^8-0w4I+Rq@@V9y$L?CyQmI-ea??$zbp+3P&tvPr)8Opc2x zJ~;jAQ@Ix?tP99~=%Ypz(jinVf9tb3|4f0{jOoMwY;I>TwM4Se1VTbi_UzZC30 z>0sQeW99m-&u2jm>*k+}@{H01b~Oc*o-JV7VJ5I{=JjJ-`CM#jsRd;L8#Zqtlhn4`ck1@>vzTf0&Xo)NV%z-YU66|>&llV zduDs_O{w0pUy=t!AN+Zi_00dPOR4M1FN<4V>ulek+WcwlJkp4=z8 zH=?2S@Er9R$Kq&)7q|S(r;G9k*iQ8poHPGt@P{YH7t%eKTTS{lA?70M-i(7eZk4Qd zM^yhGV9EQsD=hBVF8#lY|4tBjv3vpV?#Rt)**!LDx6=+5tW)vz5!@#(nBZHu=;_i+ zVp9_t^KQL(9(=6IYSldd>DC!S`8g|ZX>ZSY&hjcgvOHAa&6b}#m>4#03r)3un{P2$ zJa|9Tqt&I^tY)`f#@N^-pFRIG*7)|9%$})6bEnxFT7S+^KIi}Xw^i@7E$174p0_Hf z3umqsY2o`^G5^WqRhwkHEsGwpCdZ$R>+YM(`eX02wU?S*f9k(2I8?%Ud~@0B|DyNL zz1nc*Q>#&Wrlt0#*}ramn)qy+J#)19?ghEgQ<9%-`k=gOuLk?)JFhqM2FA|SoB1JS z`>`j{40+jqb;VNy94_2@cY5MwmGHKb+9cQ0CZFaiP1~NT6kBCczWh{v*T0s4!s zdHdH`-_Dly-Mj9#=}ozpb4+6QDEbsnXu5mVEb_pAraiH5rhjX8E4upP>*U^T%a@;F zY~rlRD-F_L;Fg@j`dnQo-( zC0|Q(c#*`Mts$G0Fk3A+WmR?@eaLiLhImr^XlZxui z{XQh7Z1!BD;UehdvE<-I{>bUAZROi*e!fk3?2~tH zFQOL8n;n^Pz9eV6lTf0B?BN#`6O1-!>#h*jv_(zE!?;dg$_L+w>%a`lQ&ohhJ zZmZOJyzcbA_XjwA1$L=@emeKVWApDea_fppzTGI4U@|nl^M2jLDL;1XezePWQ!aa7 zt@8&bAqzg;_J3UOm3Jqe_P=i{Q1j$>yLO-R@#ovE@7n!28=W3RF zNYO^ljAvuwZP#zk-mlq`ifq2h9xV6pVzDo{UBi;O^BtQ@OKkno2~m4YdR87bRGPHo z9p4s3Lyzf;mo1;Lc=vDH*cYeg@-S;Z{a>Fk=f0?Xwf<&X-|ctGe{U2@nCF;V&r-YH ztZ2q_QMe{WxN44YRJxwA=7B=N^D~%og}bG%JUE$9?ZUM}w(W{gu${1qUi^j$M;?AK zsY{q}r+nVT?X#=rcvlD=H=Hjn8GN|z#wK|y7Z$D%<-|N4&O#k|PO?>w2Ep_uZ#XXyN(!A_v5%=fsoBqrS zdp3Qu-3qnX$;C(CA2MJ4=iYSfA4k4`&qD^C6~Pfvr!;T&KY!oH*+1`|+U>to{7#!| z?ekCbiZ$yr@}Hk7RG;_P>dur~ysMwaF0b|7eg5m}fB&T{*M1DT{y)f4eOjhi<@G1k z>-KE@Qs!CL8+W;F`i~8NlYb{Y-TXMRGW+MNrPpW8_m|vl?;>Bnf-fWX`Hvdko7uIW zZrRmn_CEcnT6wLcYx?yk>tC<>8ejir)2FEVYh@2ZY@g4|-g)m&ec!c;ir%=JWqZ|P z|Nf4;`?dJ9XYHmQ(>lMKbEMjWC&#wMN}vDrKgxdorn}o>xMi)D&KG+W@_OSxmrtH^ z=2@z=_`W{df3|uZZ_wUoY3~memB>vjK1&7G|u|M>CT+0K5yLgv5v6491& z^xHg*{IhPiZ9iQ7>tVk9;%DB=cB?{4cct&QTg|>8?*7(vWwGNzS?p_H@q}wH$z4(# zld@#`*2TF~pTEorynJs(?T=ZG>63TVeB=4_ucS-8E220=>v-0r&V{a<&s*lHHHTDv zUUM(%o%Z^-ty?#|;f~b)%pQ>IoIQWR#HX$b-M?0US)S9ZYkr{So&UAxGd=F@yU8FM zwBU45pDWin6RU?DDoh0`Mvo-8AKVdj*!3*atFlj~GsdH5X&UQ_-;>y-TI7ze`}5_A z_3VC^f9dx=|9@aB|3kBW{^4PyKaEQkA=9yW9jf$Mt)AijAA9gbrQ0Y?4U?A4+TaxI?{_ZoZeJN4Rs$=c7lxBp!Ad>{F9g&au;ISdT+$J z$NxVy<=Zchm&BV(aHFKOp!dTcy^S zZQ*~#5Au)yynise<$leQo&RQ4{BgMReu9YOK9>DQe{y`XwY>DJT4sJ~N{fn%)dcMa z+y(O=?orU3aPT?j{fa+okDT1ZmOFavbq~tCTw=8A;LaJ0FJwD7^wLD~_)Iw`OnBjN zh$mpyf%2w&?k44(m4-Lh^lEIl)wFy0i5FL$es3{|Q<`{s#((}sR*suYyvtXK^rR@W za4%uzk$SkhOU{O|qfPRNDzCA_vMlZy&!08y?D5%tMC-wwrfbVxvx3{EoH+lGD`sc^ z!R?X~Z=KlYFXzw`-H^}NWx1Je*~F{58a|HiqvkRFR@+cH|MF71?ZKCKv`OAbZ4Y5= zzm<_IC2AvU%wHG%s%Ph&3XMJD1qD(kFFyJ!v(}n-8Q*I5tFspOEZtK$t&!d{f=rE;+uD-VQLyoO?C+x82mV>HntA zQa|(ls@)-#T3ZIhq; z@1V};^GKE|CfMl2N%I`mG)~QSWjTS9Dxjb-1tU>#YHS&U= zZDuZ#%x;UHm}GCZ?9C$U%SQ!IwQuM!(_5EwNPEU@$^D0J2zwqlu;r$0tX1;cxi=Sk z9ermxH`=`QyT$qF$$vK~UEI0%%))?%PfQ{oewMtPV7WHTJ@|UZiG@snNAvx;kgJ-{^T}~~1wK=bYdk3e5 z{OP+4k?h5yQ*$F?ZasRoZ>P%Lua+h|P^w`3T$F`(*@kfD}BfI~cec*l4 zh8mSI2t z?uF#yPjU9? z-1n^iy}2E|EA2_vXAc?MTxARS7gmWD6>Tp(CJ8)9l$U60GjqA6{Nuuf{(0};S-&fn zuKV6yeeYh6&70_7`eImrK`G{%_m=_x65; zr3WTN&GC-O?=$gDl8A0OAz|x$#z^9rjNrd_uMU)&e=522q2NZrX3K)zwx3FJDsRLZ zyPf~uFT4NiJLT)K4_4k6IJ)_@wcVTiAD7?TKR^4eQ?DmxtL^^pKh0}Cf9PA+SbN`S z8QVl2v;KRef2_ zi#MXnYP+2?_6qEM{&B-X&Zh63e>Wsf=~L)a+{W_0!luSeett#yUUfkZKM%fLX$d{N ze{Wp+vF5k)t4(q_Y-YKKtlf`XY;p0KXJ7k2d4kNj#M^Q=T9|VsEcj&G7d}?|l4`-# z+s&aoZ{oG@mZz$$1s;p?KQ{GzkX%1?@qy!whN`>LQaa|Xm%ler=+C?K`wE(uT3gDk z52xnVLfV9`ClQfxVES3j?(ji*)HlgjeFk9XZR zUe?zB*z}-!p1HeCXN&&#_m2B|)HZ&xoKf%3*7Lr1?e+)7ulb{+SKT+MdO3IRj+CpO z0sB||;@kFl^4!VS4!p3^_uW2yg?#!o?*g8c2Y0(HUVcJmhvu5FkD1pZwoL!8`zrSL zx>bL_Y|Y=O^_Qup?oo8^!^2lgPQCxTdO>kbEOh>Bi_=x1yX&`}nSN?=_>!NYpRap+ z)`xz1y~_XYis0N*^?S8hf46cMYW-jTDrt|~{hZlvjIJ!-a&gy!?60?#-_7x;&Wrr4 zI^8?0ZvE{IVc&OtTlcY4Z|&RDTdT6|{HKP0{x+*_q=H?Yg*2wz`*{0Q#Eb?>R+&*~xS?_n*`;r8Td6 zXKX30{8rCx@$JmSm9Hgwvdxy})z3W^`hWiu{yAFlKd)3eSAM?wf5V++E5EK`W0=1w z``ne4=f9ljXw|r>J27h7*WX!@Y=&<)7;X9cK7#4^Tut+t-?M+_Mo;NKG0C5`&3fMJ zgGJVlcKTW_EjGPh7JcB;)=jzAQy1o5u+~z{U+=q6l3n(5%3bU9>TAau zc3RgvK7ZD@tL}96-+k+LpNqac>#SAi{hgK>z1QZ=|72JvYW-hGe*M$j-ua>P?tI?z z>&&`dyVKcHFHhYMGJfo{Z&Dr8{MX8nX^~SNo-v+Wcd35+k9;N<|J0LSGdJuCU%|P2 zmA^*EjmCG=D#gx(y`AxGvF`iswzW3#iuvb`?z!@j>HPPVxn_}n%&*6%TZA|MTV7k6 zR#Y1na%DSD4mY2p$e=D{7pxV#6 z<@U}yn^sSF%GU0FW{=j>^mB?S1(hm++j=-vq?Gs^y?RQ*(-d@-oi8{)boH{WoF;Zp z!A4O=aG(2+KAvcKj~aL9?&HEcnAdri_w~rUxH<7f=Ep51CNaf_({py{zO8b8a^i&Y z#1oB;?(cr~{cqGgE24G!@`Q|vCykBF=l3dqedWf-&F_5h;WvS%ymQg~S-cr@SJ_N^ z7B^FQR`lC|hCOp{>i&p%eSz6-*6}KpYo`Mz?D@2KPvm)rdY$!U$4uJ4y{Pot>b~q} zNZqO3(^lW>EVvbXvFvcrxvkghpE=w+#Qgbc_3Ni|3|1Xo{QFg8_3QPV)eYC`ROcFN z{roG__{Z}9=VEKk8%Ec9URDZJ`FbbpdHQpySqwA}l`On3fS5y`_QlzTp`PInZ;{Fe z^=tNhx>r{ysy_es(SD0}V4vlrUqzmu?f>m}{r6@6tGgdQH1xPj>3_M;T@d=|RnkF@ z8kVvrtsRF${(n2p`}iH3WS-|o{s|jhAN}t*^1ea$r=Hv0xQnfw9iM;yIj1_Op6Q!F zzsDZ7I<7ymANI4qV_q^}_;>%3e;uFer_J;iJXZeT`-6MU??1j3lbqe-Bg^XEUeNye zeZe~}!TA$4^d8=xSYRx)YfqK##m9S^MLd$@wiMX4ix)q7{-Q5!WA(4Yr*7?J#WGxoilHSd(Wa`1N5McZz6hRn2ba60*V2E)hTlJ}R+ao&je z<$UmN;_UF%YigEptafJG_?z#!^^%1r+#G)G{IB+*h;gd=<_qh^xlLv>T@#a#Q{c7m zw0tz5^^4!>mRsUdoN@ZeC!TtJNPWBSmgx0=Aqw-Zk<#X)0<_-QfD) z>{F~u+Pdqf5}7vL_Vr}_?OVV4M9F9O#Lf$$xY- zu5kS?MI8nW;TOTrTc`4F(bU@fZK3XQhMb&`AL$ACtBq&1ud<){goN&hr_$f8$TD{GDWSe#>5~ersjvf{R)&IS-poazRZ-JEo`55Kj=&S-2J`zT%X_TiChk0R%wJ z>78MB#Z#oh;t8tf)Nu`S#_xhCj;~kbEvi$aC^m&MNuuNTzn z=9u$6FS_z%+sPuEFMZ4Zw&~yhR1>~@j2{k_n&;h4G{ zfAp`7ia#c953j!We%;QyGMDH{Bd!1|DD`&8@X*Y|0|q7 z2--G(s<`pQKTTkSzSh~r(rc8Dxm-3DyZ_|#~-T1J6-#s zsiX0MyV=_V{`YDaKHZ%CcY~(5{1ZbN;UiBn?>c<=+-UH8Q}2{1i?^98zD{}E_Q;Lv zkxX*V!L4ul%mw-@PM+2_zbp5?4@chpvAu+oJgG*7tJc zIqVFV^ySaLSNKMDeyqK~AH#Tk#htRT#zMi)Uh86PCg?Bf5aN)VQ_K;&(K~DV^PO7$ zh8wqBp8eDJ?c!g3Pov{)PQNfZ=05Y8`qq?J`eODc>+E0rF^sKB{%fy0{dr2w97DDy zZ_8OfjSo~jTc}&B$#Un>n$AztBUD%3+Oc5j&*gS!zMs*roA%Jl zEAXpydO2k3`d9h9bH3sBElYm=y|U??cjl|7p}+V1i#@len%6hmasG_s*Mgs~ulyI9 z60?1&-utb&TfLK~{Wray=DVy^+HYy)%Jcq9ZA0t+)}Q@+YSY~&lfALGw!ZY&Eu5Ei zTB=_EYvA1F%eH=5{$=I4@^^nV!+(bCj(gQCf2#Z2#L~_7sXezooqu`8`_GT|72Kc zhu^l}D!Z*J|7l&GUG(Mq#lWLXJH6EiP4!5s6noh7c-h}{{X^TH zODzAaZfZZ(=2}M5!7nRoR~89wpT}PrH}_le<)UY6 zaIso4CylrAvc!iT4rRgf4f@|LtZn!dr&ZccpOpQh<3Yz4j(RV<-@o}5KJ2r9GE4qp zW%pybAC`UUQFTX5<3CT!mfFT+!cm^{^LEJ}T_%1OrVqTG`yZT`*zh>wz(sdHo>uF2 z_HAFd7ktjBdt;n9@2QANUb^kqsB24B?_C$QAob==+Zpm#xt=DTO}KI@gMI5)i#Jol zr(M4#z3TJ^=2%lxgZhga=O^q{o|>5d>dvff+0k3%a+g;<+*YfV|8>RnjI*-~we6>^ zQM?+x==vU+*>;zCj;*t;JR2Ub%jT```+xrH--};a&F8U*e|6WNoQW(F1npO%YRb(gK6%Irm*IR^SL~? zE2y$fjodir!0gMj8lxH3d|1k!dTv?w&W|T#T%&huhugdB>A&`xb&d5y>fdChsgoL4 z+)EAEcw&xy&cUq{z7^ke(u{UAah>|c>7|IF5C0V-yvzWwRt z%S0G^m9$t{a#B{d-&cRI&A?UQ`|LY1mpH!G%MRYBU1YEzS@To(@1VBMTe^Zr z8fMkbK7Hk%r}I7m2jxq@-^R4--LQ^7C3ogftn9V9?N#3{jARXmmlgGdzLba_q*CHU9VGd zs{H5jo!jPi`+N%d5E`+qG)nu--zQ0Ii#mFD@p<3vcE7XZ^xvm4m+pwp_5S&Zp)XRu z*7|$0RN+g83YD0rWquCTxx&Wt6H0F8neE(p_tb3@x3kY$`<6>_td}n7)_CwM%Dl8E zx8PQIoBHm^MGZSRcVu0gG5K2LscjC2I6ZQn=9u3(C2_fKTf@Vblh~hqTy!8{exs@I zic5WoLH7barhU$4T(i}|cK5dI5{KKl2eq`ct^eLUt(9YPv-N=NWf616%ddO&%x`lq zH(LAV%apbA=DpsU|M~kPC$`JWxf{A`&CYu2(ahihb{J+_I%yHDcc{r zEL-yWYv|i~$JXr&m(7@#8&Gg{%H6nWIouciZT_pDDjZ#!llz}3dA(O<_w7TEgT7s! zqw#r;0po!X_mpQhuPLw0+P!u1(?_!5e*B&@)oYK7RNC<#eJ1gH=Z3vm%%SVAK2tfo z{91JH)>hpRdsoLox4dsb6FT#m?Y28ueO0bG{YXf7ZhFd-pDWFJ`UQG>w-&c$x;JS` zy?(^hv_qq4-r~2Ove)Y8Kiih26Djb3#m?ON?Kg$PCf{09uY4|?v{3th_b)R)Nxi%Z zM)O@0N}bLp|9GVS?DX|w>$#Hpo=i?!))N_@%Ld(gyX>#)?UbvxgZA&0NWA#J?op=P z^m{i#qF1oLH;&JITdd=2wIclT?{q;SpUlZoEBoiA&Q_kDu2AMPFPUGH>vnI7K&BT5 z>y-I6O&7Ly>fd|zd+Q#53(q4nB!ss3_MQ7vk+ZWt=Vo5Z?6)1|PCf>1{)dcvb}r{{ zcd%#4TYo%epT#US_egp745veu7JPDo6?fR}?6&rt{QRtH0q3E1_4Bu1C);U1682={ zt36!EQ{wx`z{JGSqvDt0>qx!xA8+10A#l>+>BY_VYBoYj zvsc^h|NN6(X5#O=rvB~gz7*}VS((jNSNMOLex96U(u3Q}&EK@~`Znx-+qmwe;J%}l zZ4wrIyzLtwU)Wx=fA{0>`)bY`Z0p&W*wgs`+x^XoqD zzEj3t_vab2ug9IT>RSdMK5j_8p8w*|iFNNQioYH?{IF~G+lFH0{Hur?K3LmF?L0@ZXMy8}}z(R=bxcuh3ib`$wCdY0j)Q`g$fZ$F$}8!#g-) zjUUvWcw4{c>B}7t&zAWg`uzCz`ycOKwn^BQhga|U{w4YFGTBV0B_Ai&Wq6#tY-+37 zDx(=IbgY*Cf$DXxkAor-EL*4dG33spR6r- z;hN2;xlMa_QtG|f8)nAqeWxq>@}HVA`Hb~rai4Ezr@wT4t~9s4^xow!M=f5tDrrCX zAoDl&;J2WL&pLkvKczA)ta0nrjK6TXV(aO){Z~_W+&XXmdEu$dto>hEeg9o$t_aJ! zrf)MbuQ2fH@(Z*2Yak8JT^IJV{<@<1W@|~_s^3$rUTgk0eHk`Q-2a*7#+1*ms;vPcUYd==SE)GteGx_B5PesR4qjjIF&ddIOX37k)hU;g`p?N%YeJLAW zi+Z0prMc?#=C>ElZ#BIgu)NlD{*qt&Fg-=ZCn1U##jB- zpXFb?D%U7)IV@xn*Zjf%<5n~InYp_*|6Ma--qxK<+JY9ZQ z?R5Rt+C5SEvHj00>!;*4akedWmw)v~t6ux}k)Um1)7R=uxxPzYB&h7vytP~Febt%I zmnNS5r{RC{PhRdVskxV?&N9CpSDkrq=bmjnQR^dq?mbuBx7;*pcCvlxIs5Q$wY<@}c~PA&PFQ*(_kc&USufVab(aLv=%GVSsnyO!B* z-1+Fu%@^NxiN8Db{$xT`sr`btpZtT*F(?T{OY~pJz8yYG<16#utzLVk`K4I4-!Qr7 ztnpm=@d2fd)){75`$A6ne%iApxJo&+>yJ*p*UR4?Di@6>ZEr8m$wOHa|a@-Y1w~l=ihz(X`hx+b!^BNtM$3J z*B{(~w0$NE-qO6!2wpvT>5)w4pK!%qy?^(a|1bLUZ{lZ$FU3zzb~DfW>9+f6(UbT8 z#V?D^{5|=9ko}j$IGIZCe-Hjmd(JIg<@_Kz=7;m858E5}w=HRu+4I*;s^R3&is3r|4CJ@elI%O{R4 z9z~KoroW0BEY?r3(*NwVqiH`+hhW4Vky$(mHBoO&U+W5Mtc-eGAQ!`E;M@I>l|%RO zo)xPamT}Hm!5|*tQhAMIhS?{zC*@LtXWXvLW9V|~t9keQQ;qfK9OcQ@&;H!%E0}tF z!m6*v+&@AER_nQVpK?gr&wNv_@uAjhO{>g_@kWBr<}xqmKEJe=i)TK=N7pv4zF7@_ zO&6FOx+<4)UEn+YYtQ-jHQ5gD4xUgqie-BcT{Pvg#r5arl7HrYmHV~)Pkr&+)EU2c zg#2qG57LSQWbU>3`VPCc%9QXQd?!Dpq-<|o3(qqXvyxTI z|7c`{rRta2MDCQH8}Rd{na;06ON!5II`HM@m9o!%`u{7ovF+b9-%$5s^oG8?ikoH{ zH;(7@_)TY7BffV<@~@+f{0fbg&b!aV-g2Lowcs=N>z}807Qbcb`F8!(jJaJOLgSul z8@k?G^SU~0-pu!}y|u-x622rc@$XEHe|*|ixzKO-4vw}n*ALYt99#NyZBCZnm-x!9 zR$I5dU$iN^g6+iIQ$5H0#N|^zwN4TL>g**MJmur0JjR4=dh55c&)VK_U&O;Uw#N9} zr)xj`KI=Y<$?d>QS;H7UefOee9#7>yZm!#L zvVYCrcV2CLY7-XQ3U1#pyLg@o-}6s=HtTB4bdIrFPWLA_-s3E5pC*uSTXoj4iIWz~ z%O1X%Do|Bap}%vjox7;rmz(#+rzbaY_dR~lVfg&#yX5ZgP9ov=(j9(n{~m7hPI^wW z{NB5d_a@tKv5|{@x6Rh+LDuBscjwpqZ9883fWQ8eu0==kBa4c%<1(eTZpXj#m$UHS z&P%xLvP*4Z$`bh^l~1={Gi8-ai6uO+IPiEMv!L18iH|RQ`1)7+R@#%#v(*<>$bE~J z>x*7@YhHi5_8xzZzIBorH7WHxHgfBJe*4(B{PDEe>z-F#-Yg&0W>~O)f7<a z*FL#@Jo?|8zy2@&9C%xHeumVqjZbec-_Fr@O#R(9cDa7Z34aRqByEk$cwWM})5H|@OfZPkl7 zeoV}lzh|`Ufd9Qc&n-%RKJk#Ku-dZZ%EjYtD)Ux<>qu7UdY)IEAYt7$!~XodzIlOB zW^WH{^*(Y%KsCPaLO*Y=#7igt51nc*lT6qhc6Uf z<<0ri;IXgbz)u$eiJ*UBb~4sxXD70}>C^4Ke{q-kuB6GXpMG@T+jtw~+wC=#pJnI1 z_hdR}DP?}aM7dXd&S#aIk7T#lonQF(!lTP4Vt+RjcS^|qek^S#m;drlqx{{snSV~~ zUM;&j(fDS2BF_>P4=9}}c!I?XzKh>WJ zEnlhg*DspW&YaIV( zA6;5<%RcsVxc|>y^%s#Q-*(wV{wZHH!T9|-%Ma^yAHz-p+3&K+Te)5`b^X-eD=*($ zsk&;{n_}=`meN`A)91u_eb#&%ar&{}63fu-Pam3Ap1b-xN-}fr zR_A9^-TZtN|}@D(j`B)?v~}y&`c2E~!}_n+FibrhWn22Qv~ug3YdP0$-PxV? z-|uJn*1dIa_w0GLd(NipLr7!y$eOF)Syv&*BxBNr#WwT?O@f;v+bQ?^)_zxy8XW=D9>&WsA00TUiL{ZooN=|tZOfP z3>RcZ+&bsUr#_?3Q#bbE)n&0?H>a#L5B?q^8WR2LbXA4jdTrZw4eL*}Z-eeFXL9K0 zS-M2by<2(8O+8V4?GGm!7C&!mJm9fU_wJ#d=a$zm7xq4PPwDtA+j(Blj79E5VM3pU z-2)Gmx^ollRX=$gFy5g2(YEn?#t+VU4oUofG(UI?{h!4Ae^&Lr^d*iNg(WO98}FFc zALW(4C*WE0K)L_T%)PR&B~xC?7pCYtocCSr^7g9Rw+XS%^Fr5d4?MrDFO{X>?bD2Z z+b14=>o#3hRBB`Fs-i2OH#AiG)D?H6eDvF^kh^%o-k9@iOvN1X_s+hhkn!8?^SP>Q zv6%eSrL_sSW452Ka@h9H)bi$+q(xP?ojs;K`!&y5&(HT;{`&lR{Rf|6gPwKCFPR)5r;pZ~zc_O04*w#TIEH`? z+wU&>v2aN@1M~82=lA`&Zz{9D?9RX5BaioQ>Q>vOu}L*1R`9!fk;vzDOC-H+&Tsr< zH>obF?)#1p#VU2~Y#ZVk?@w5~`}HAb?mu=)^};Fae}p6o&h{7lle%BSYxf|=|JD7+ zhumGFQe-@m`+KAxoNoH$`Q*iO2H8ngmo7|je#dn}alN0_)aP>IQUdMLPJO%9t?prc zJA*NFT?0Ssb5_r$C3E}^xXdWosWbmsYntY1)?F5>9L{ZGn{w<-pSix7YU?%H?;530vO^a0~3fgiptqM0kt+c*rx#*2Gf?FTU9XquC{fxz4*(?FJ zGuF2snk{Lu=Fx7-0ceKurJtsJ(-=1?ywP*4gt{e6_ zGZ??Jn%KK4hcXmsB$)b0N=>|@+c?kjb*rR7#IYWNkOmB>2uv{x|JJEibX!Y+|)E<@s|Eu{;qZVT-vYKl`BqP`=CjCE$rHJHfA2{Fa5llYrK+obv)Jl*L->{ad1lDnqFM!Kl(H!khi zVuSb_8?HSoE^$ihUU4F{o?GYO8c<{AikaW8P{t_nKu6#ED{AK-)AUJ*c`JXKJLIqG z<~j3SKdmWU@q_o)JFB-}_Pv;Wxpt>f+1ehli+f7@%yRX2PdJDO0!$TuOD6H?oSk^y+w#=reDh0 zEbH^TPfx)jhIhsk7bWI{iZj0-wYz3yoSbPkxopqG+A@bTHFHDnzRKCR3OTwXR@`Xs|wjW6yWEco2dFDy6lJ;MGX>VRs}r#JkTwU;e^9eh4B zG(kc}sqaB+U5Scd(5E9a>_z!%|H-PCtSxxKd_6pJdVg|4&qTw6vtKI*$~?aD;p|`2 zd(K@y_Z&H_Sl?W8hrRAk-ubg-PZHw~ygT<%Lg~A|wA^>;ZLTQ&Ei|31w4@#`NSd&zd&-}@f^UcOrBrOYqG4<&aB_V0dl zp{(Y6h4X9oeS4}EKrOI!l|P<+=1IzHnIZFg;o(Ymd$waQGMrU*xP&jtc;6?zsDjUV z`r`27-ngdXt9&u#{X3rQc-8mk=0?#9q;V4C;a>V%<{GV^!9O^ukojf8%8eYpPN_ja@%p2uja%f0%Z+@Nnq$%PloC4OJ)KTjv9}Iovif?<=h0 z6fL$T9uK{7(JHY=*ZQRg=dB3>g(YV_$+B979gO}eLLMx$ zCOm(Ac*jG7Z8EzH=Shr{r&~G%ZTzcnEd5om_avR^ zW<4H4zph;P5wfrH`k$q(!n>B-`d;&_JG}VE>X$CHm(9wg2T^Zx!wR;iv7-Ut0ULHn(>D!^c~nUjK7V?`G7@=M`)2?g-YqmHl+{ zvG?9ao1VV7G@teK)y%kuReG1AaOi)*g^iTJrk<+N$-U&Ruw^-mLZ|L&|Yd#fp1 z(YrhDduQaYUkATv)|Rc)+dgSo-uqeeHcu+^_0zwodGFQpY^!Z)n|0<&3qSu-|MurB zo0gv~ZbtR{O}6<>{e4M2V(sbWUxNJhScm8RJ@cvR+2x|F-L1>k+ zwA7)+=XG90rY`v!VIidBc;V@eqb{qYt(IL|G&5Q*d&YF%=MjCr$7K#y8)R;YWAC1^ z{OhEts=1q=-u$+G>PFr8&sqOMrY8QpUKH|dT1Z*ho}2%oAK#s}vPj~rzsbvUz28k` zua=j}U-_9O+w#0ByubXmUG(!=XX9q;$4RYUerZoyoki%n+|!!%&%-~KUV9a}`tZNM zQM3QOUR3<~fa`qp~-z~?e%Ut{K%$EPfwb^Fh( zxbvc`eBXF2Z4OaSJ-_8;@a)|)&bQRq^=(=|d)lsobJy2ho+EYn)qa_ixji?EVrR0; zbUJ8VUtb|3=ijV;+|&Pr$!s?vUS;0ejYq7Oua2Gf{E*l~S*PX?9*<@KARqYbn)(ld~v%6lFP$he06-~xS6i0U$0FwaZj!9^xOLTib^SL?x3}f`30;Mc|YOOiRbzO z4BJu|wkf+Cn=fn#*EFm@^MBRq%3U4{xY-|Pt$KaG)aKvnwtstPnEaafZ=Ou=9Y*N~ zyQY+<{1dpZ_;UKsxy;XHKQw&4?os8O_x<|PJ@?t_#V`3P2*P7FPL<&)Pukx#h`)~)fm)_pwKC7b!eRr%Or&%Zo&{l|G)<~1bp z8t>T06moP?P;li2hRNCw!h242MM`fBOw_$_n(0|>@U(6(mA5Zzx$CU;9hNJWZ`?jT zZWoh{*~M*p-K_MDdU<<(-`Q5daQ%GIcLVp0{l))%15+ly6rNdmShS(?VRcOko3VWF zncb7Noz+?`m=PR*C5g@bsmJ5$WgN@7c)l<`pA~t(=H+tDPc%8t=dVfxF-{GH3_pWJtom^+; zcD!hQXMO`;_<`SgydE4o_aEMN=57zwDWbkIt`Q=JpY{^-+jQo9R1y zvemOQY$1C;=j&%yxGmi)wj<;BSxtGhzf3pszYCxFwP(iOmaQEV&Ye1aj(3*snV-vx zw&-W?u20&YCD^%pQLE2uUN`Qpt)H)~G|id(?xxK1w7FNRWS+^oO}lE>mgnKekW-!Y z_=?ot-1=F^-zs%pRrOt7y!TAQ!>hJ)ckx7=xxX#1Iq z)H?lN{L8wfN_e8BAM50=(~8dZjh%jN`ScxAYIna(ny{#T-Mjc=#ZKGStqfJSze(Pm zU87>XEkw^vJ#pUWE%71uJUrwREfRa0+;kK&oK79fq|If;J zAMrf3ZtsRC=U?ubdfC^kbXSIB>8;Rjt9q`p^v#H0db3VN<}X9;;)~}@h1Spb&1f^B zRwcdh$D~i~Z98K;RGR15Ht}El5OiRN;e)>&%0_O-7k+=kC%Na|ohNEC)yMPZFP2Nc z&sKK)z}eD8uUn4CKDc4Mr+xSABc;=4Ki<2+{>eUu0>6yr3l)j?trxL;bN9EmFpFg> zH1XAneRo4%`djVcWrZyAKR=xfw(Fn3^nU)j8?sXC%$aZN75?9{Fk9IEe}V7yzM8V# z%10adcV|0U?)mtcKR>hP6r*nTV2i#6WiPlm6I3m?XTQ% z*m}qATc2;970zE@2AcfeK5-v^jm^G?FDD%Qdj0LZ2gj{WxY3r*dCoyYul0QOBNCRBwGOVQu&3-iF-jV;u5j+wbJ?<=md< zdwa4_&Hn1ccgy^J=Ed%RXi>s(=-R#tA5VK+aX9|| zAEv@X?SFNhvof8})V`|v&}nFO?1kq^U#q(<9@lwflHDH*=Sp-4?XZt|+VRS@+~w0z zmfn1hx+fnij@I4ykoMc-y2~EnB(5*X-UZ6>clOO!nvx#8Na0uZEw>l5j%dv5-);SF zr`nIk#4jdwDlHy54~jfL|=Iu;||xH?}ZupKY5f zvB~$?NZ?4;ae}Cd_o{Ia*n(;yteCucBynbUAzVH4Ox%40Q zU*{ISl74<=xBo)Z|JSEgzpA}EFP?pG$aB~MlcIljEnl>stBUvh{;b`vR5!+l?_9sI zN^1S`@4+^ILVf@5@8T}adU;`Ae6-%i+Qj>FUo9_Qk|}DE_Ige1*{xRofwe5Zr$mRH zejj{y`}8|e(f2g>z1}u!>CVlm`;Sa7J$!y^{n^;~>agjrSIIxD+-tf%dp^taW94(} z*7`0#6}!0j{j~~<>(jQ@=r7&;(*Nn|(!asSE=S3)`&jH%W_t7ARt1^a-{wi;DZz~YZpEp(Yu`5g3>FYZUe@JD`P(FXVC`aT|@!RXa zu5Sx|6)`iZE@xL1+w&Ywozfl8jxURxd>nMq;P$ucUr(57l3jY`&uimezWn12a*J1N zf4HV*^3UDtE`Lhde*N^Mb58%h&78XbgG|G^n%fmqXFUIwU%j!Z>C)6!xiQ-O5uc*J zSC+;+nCWxvnXtC=>S)u7{qG)E{kv!t6M9Z+es=Dv)0c}@T)O#XTh7$Kn)j}~3boTM zxHK*McO7q7*m>!#eEYARyKR&um-}z)#-!J)zCPRf?}4WEhH2lgNc;=AU%d8@|JnaN zOFle0k-cGlM1AbFFRSO&eD!>K>ZE6$TbyiV|E@R26%ljhdOfNADe~DaM=PDd z<FW-}Lp(2bP59 zDMm4kVeCq~dTYI%JSvU_dA~JIwO+sAo9@OV#?yl~D?h5_|6_Pa_)t81OB;J$#qkpk zj~tSo%yYM?Kg0In&Z6*J7FG+67V^F+XyrDXR)f=@QZtZv|t(>~|)zW!ibK-7K-Wnc!J=HeLTKZ5?+V&;) z43_cCja>UZFuwos+5W3*Ccd0-Xv)23Q(u*@JQaK|cju|Ym!yBalDu%|-<9^g&$iWX z^+>PWup~8N!nXCFBBDMkJ(K)asq%H#I{(i$byrV3p7npJ#+%doHtt!Qvmp+#9Y_T} zCvHCf+0*UyANuF~KK_5hzXP|K>N)WY;d;9L?PMbKm`~ zTOR#;vR~xq-v6gh{9rlF%6M062fLlncQIX-&q>EP-ZZK|u=U{ov_@SX;FmaCiC#~l)Zv!X1 zSmqkATyXu{?bU1-&oyW=x5Si)p1HX9RAV-`$W_*`m~+~;k_%R^Ye_Fu-K>|Ry`WN1 z_sTkD%?`Dcf{8P>3a&k0?vwDS@HoqnZ@w>$&Wr3V&YG?7@T841Lyh@}P@~9kk)3z9 zTWVEy`84EeJe|2)KxT7|dO?+@w{rAvp__NgEx9UQ6wSKfkoD|a_LE}P-0mkwGj+We zr?uz4YpzIP$}z2)&f+ui{_*8ZAM_5#J6=mFJG;njmFa8iOX3P&A}WFcDmB9wpVamHW#lCEvulv8NZmOE`b*j<2S+AKY^c_kh3sy2*S$8NR=_}scn&0iQY$E3e`1oANYV+QFc{OX- z>VIKzr|xHO4_)6_nf3FgneF6I-NmLs_ex__F54Y{)b_g5CiqGE>E*AMuD;!sxjb|8 zwaqzSE`_b$8+E&U!liSXMjN*|m)`ugUGq?!g0X0NN^MYFT91x{&o4jusT-{syI22} zs^)CEmB;%1mUohX*x#(DT5e^x{7?1wE#>T3_xOCz?N*s1f7X6ou{-tn%PED=yp`ki z9qw!tnK|w8g}AK6Z>J`uU!5Ll67YJH-K0+|KTrOY=g%;+Cg@$&rs*0wH4f<&7c;&- zT{4;J=JHKbwpwhjTD+C$~NSAN)y%Pa)d2eks0x&u{3S;V#pzxc%wN3k6qQ^VYlX+hM)oZB(0Kyn*t8vt-^6l;w?!W)(Th{q^H$I&`F3m7&!i(g?q18twFIKAmUUJ;``r|ztUR&Ep zD*So+mYL!AzS9ox3=O*4!+v~w*jM*OrcKTLirD$vt7TbU9B<2)e}7{ebN)8#Jag-& ze$ciao0!kfULELvCzpA6+T#Z|x7i--XPN%ubZv$w(>>K&zI_dPOzj(=J}fvZZqEPb zto;9``SSJ}|=UYza6y6@BS<%<5cKkVb*&2!=3ugB8gYWsHlE!>}a zxo^pf4}81Qj#wVFez@%RV~NZ^C(4g+uelS;DDvQ^X!55weX`%H4^|#8%y{V(@9?Pa z_g~({CONYj4_~-w$~?P3!R>g&qFLL07xhcG-4JXtSTgPVZtGtgm*xt^8c&$?`0%^7 z`S_gvh(`*%P|`so== z@%QSUEW0f}*Po+Lv8+PBNU@ht?an9-Tr;g>*~)MRM}{r zUb0`YEB!Lhm*mqDvgNbY&EB4P{BfFE&!2ng_Y3y#f3#8mS7Gh>%Y}!}@B2Gx{+?R@ z4}B7{#}_8{@aC^`tE>4w@9>R>vF8`QH(Fp@T4S-LVt(%R%N2+F^Xxa}e&b0#9dYc> zwwIMwWii{`RalNVUQhXLx6I-3!&SCTE{|SF1b@4(%G&h0aF^c3vV-ScQuBPi$#h?^ z*!#olxx!=jIbB;eSuIcLdc?uHWB#P`)2l25Y?Ka7uxVeYy2Iu6(?a88ZTB3fyB%pR zpXe+6IaT9K<=(Hp;kDJ)=BK@+tmCik+aGd1e$lPUI^TW8PwTzzKL2D>{7SzBGD7p~ z;g(Gy-%ftHwdd=UKdYydYn|O(dNzDoY2L4Or)z!dZXYu~JvIHb-Bt5#`?i|Qf0egp zYVh}q*-sMguiu#&)faoqBJ|ku7mqdXU3*e?YHzgn?yzSoKh>|OUU@!l@%HC2$-n>2 z`BS$dI&)fjcb9sO8 zpI61);TJBeac$PTeKYt3E34XdoBFQ1k>0Z%gFg#7Zspn6aQBAU+}}Lmn@-=-eO9b1!U=SpIsG!O|+u6W_kis{Lwno%wdS z^676glwE=?x7n6fn$F+Qvi|Dd-P@jee)ai%I^TpZ{w6)zoW`-`f~d|7*1HVHD5hdX3nF}M~c($@1DAE;;Z-JLALBS{yeWR z`BegF=N1p;09&Q)7H{r%a4~}q?n3-jLZ*Dp>&a>b2xbJ=D57oww2NJ$2 z@7HiKC(gR~W~%F}i*jDv(a%o2n5TNdeLjaTas~^XIDk< z9Q;#yZ|lYM`)fb`5{lHn@h{&~>%sSzoQwMk>bkC7`nyWu>&)f;UmNtGnP=C9dX% z_^9z?M!`Wnp_G(uF7w5mMQ3z6b3HoV%Csjp_FQz>bm3Okn7r2p`W;aZR`vKyoKbuH z*Q)KwY{l*Z{8FV+%J=-ZUvc$K=E*8NyN6+&;DP0jj_>KvF<_jWbHqRV+Wa8KyIL6m z*Ovy_H^=BktloKU!Tpb#%-4^~xP*TQwR-X=D9lQ{L7lnhlUxiV)8ZPV(}zSiRNoLg zu%|P~YO3Ucm%fX+HUuebj7|4GT_^BYGvUKOyX%+lIQ(XN!Yi}C`SEtu_1B_*W$c=9 zz%ZUAU{w!m1K$Oa4`%xqUYJL&TgWhf$(q%kS`S{PZXg>$P3&zYM!7NzbN2`pRyjW#)ey}?K?t#)v-O;X`)n^ z|HW?o$F8^u2957#$y}{r^0^f(u*zxQlkD`l2c{Z6OpBehXs`Bx4T+38B94nEJlof8 zEdOyr>TC1OZyqbYt~s@!=jA4rtC_u4Z(h&c^2u&m%?`;wc3&SJxpJrd)Z)$7ztWu3 z7`d)<8+P@*u!zq&B)ZezVb7x9N%L;M*ePtEmRsKCmdCj59D|Z>{j%6y6IYmJzq)QR z-ClRH^|XY^pH{Q3wPT)tJy^T=-`1@!qn=&nO@71ZGWqWH5_ATx7<@VF#7Z1F0`p$-qkhp$nWBv)#N_}cx)VzLXboKZ} z%ZS{|B^x`;H+??#Or+qmNqTO&e0t%}u3N%$-MjC*ZcG*au=m3Y-Sc_R*l(AA-PfPH z`&;x(_O<*|Qr_wBJ(5~j*_PZF6#u8~Ws|_w{I}f6-L5~)lTY5mOOpbu&R*RXW~`yZLvR#CQCn)J;I{I zDPJ?Qk4015;E2i*mcuhVG@H-OJso&#Hk-o5?>m2NJNakV$@OU#!$Cu)05O#q-J+F0&N&?Dm#n>$sR6UboJ0wJ~4(7ah(Wo66sF-3ZL+IJwcj z>3DJZmMK?`9dAnka6{t^QVf zy4-(z&F>#+O!fJ*CO*DlaHQ@1yicF?-^+ovHGRMS=g&W5J2}wm%g*iBtL@%d&*PKb zKASoA^5?>OSGG^9IXz-ZZ4Yw)UidVv_`$B%H~D4HS#FCxFTTCMrVzB9=;!qPe>Ceq zyW2nBe7nEK#${jquE)D}A5{MH>9O>>-OT&HepCMYW19WXciwd+)#u-S>zJU=*D>jL zwTun_Zn5XWu`i4oEOUPDxc_MGhTOg<*(^-E7n;t`;I04o&)e?Jx}Sgb>kgJyFUbaN z-Ir(nu)Xfja+di!^7wOZojCqjSK!616K}UI=T*L6^QUM2-THI4SG$)T*Y&SupVauC z|9Ebn%{yVagOhjMwPQT=_~R_K9-BAo1)ty8GSTjtH~%by4<9Se{`=Tv$ZEI$*NM{I zi+PzfO?g%x-R;6*DOFaW?5A|!X5Zt_ulw(mStosx;g_CMd?%-`a?kFGhIt%`M-<<* z>z?D5Hb0Yg{cz%)f{ySX3#Mmq#Gd$;b(tq;_PoTBoLS0^^V$UOSFC$i#_GZso_oIi zuI%xRk1fh%+WItjcPAcx{ITu+&o|M>B!2vQsC#^);<6gc!|(U~W_>(EBDwi<-{A`r zRou(@?F^T-Jz!5N>ZsV`UE-^Ac}COmv)dj2&NYkuvBYaZ-GP*VnJtO?ebwz7L^u8G z`u8Ng_x%3jHv}d>NLf-U7?a?k>)Db!`S~NeZCetbbkF`?^Y@2pGFMHZ?FLR|&!Qd_rVhnL{4_z_n-3HGd#;?2Oy-FpQ|2nz%!@roB-+o5zo0__J zbIRS`Vxy_A>Sx!#{l4ps|H9(bdETdI{<3S`KK;qBN$>Vv6TR{&%i)%H>UEo%F1`6# z-}$E||NRs4^La__+PBNUoPAb!^?tU^)nB?-cW<>>{;GoaYUP{do^#(V-Lru&tj5!9 z`3uw9dcS+?m-=sweEuUaXhvrqZ|f(WIUez!KOItkFy&c@Rs7P;nXmR=KNTbWJ=^To zvaRP|zwPj_(@lD8^i6fHW!Z*PpEa$_+rGx8zuNNWg+Fgk&^?`=<zY3|N)~(OZ$FZAgX?c$=)K~~I7tLrY_+xqXj4f~Zy+k()2zy60jy_~+)Zr#@Xe%Y5JY_AmU`Dq*S z{>XN*^Rg}?r?vU1w1pSLWm zmm2H;Oj@3E#L_PA)6BR<#dhbtOHT1uo=mS;JO5AA{ZH2&yG<{C+JB=fUZ`u&yWJ13 z99>cB_V#;c`_!6szmhMl_b=TL_G)YCKP{`E<*_kRe6Oc7uesQ@SbyoB^gU|~)HT_6 z6f&*!*|C^ykKtP%!8YfA_r;Z`C9y5^PdD?gEtykMm$&Bn=hwx@A{&0}J+p7pE&tyA zx&BPolYMe`Ut9cnqvf@Z4J{tYpUwte`mFm*^&S^9ry}#EehVeW_T(e}UvE?{o_Ae| zuYGx<_i<*+N0sd#R6qQ#_@_FrzVCxGI~6 zcXu>A>_2mB!REZ(LC;QH(%ur+_Exue#)FySIefZ0KUQyb;eVaAuSlSvaB1UKx2@lw zu9`o~y=P9#(lc*PSUfdcTgiD-c#7xpTy?y|#DSyDd*^IG6l;8S;Jer)l+Zee?dkW;%$p^N0mL%6eZgsoTlEa$}yV;;so zS6R4oXKGEAGuwIo1NsZ^2+z3u-n;htj|V&dIzQ?D|MlYC|DWv_|Nk&?2ltL=^Jd?- z-t^z~(T`qbxjLtN%W5ar|9Nh4PhrvbRC7tyODc2zd%ThN{3|=Dj@?sPXg|xlg0ph> z-RA6fd%}Az{^6mH9^Z%Gi>Gyqv@7kGd%pdFGou-6N{-Qrm`^7Qa~I_}bqdY=uyz6) zyU>iq3z8i&`JTu2J=#0B@qmgsW3|f5Q{@wPL~nXw`e^f+0}=TLrUy@XXR-Y9JMF*) z#pg9%sGfbGrc~S##wwS&Bsa0^T8z7I=!XoQgAa5osTv~SguqLh}0f=P_? zci(zjXw1J+|KiH+&-PAv@qkNfx6z+zFJ7*6QR{aXn;0G|sbut((Sz~S>uT|$y(`(T z8@Yb;c``dN_Qd(wOxL>DJN%cPVR8v`n0a61-|S(bH_KAa_~Aam9zwXg2=rNTarz6SXMsmwU#O~3A#sqgGRvNg5&fN}G(?i$eu zKI4Y_KX>}Oq}lRI8_(O)-+xB?ORCN;rTo1t2VO0IwaYDgdd4f>o$n8aPCQxYx4710 zV(Y8iuop_*Y2H>x~! zqeNn-_=RQ5=3dgUKXtljui5tKgR4YWp52)JZ{3Gf#>q+7w{1OF#T#9}b#_k{^W{73 zTq&^)6^4~tV$0UvKH+-m*@TEn&G=v2nT)&Vt)yLJ*|%S9{gQP(tLqTYWZw7>QSbF$?mqN<^X&C!;~Lg1)&I@KozP<**{gShoBc}I zRg`kt@_rmSJRi;7N6d>h-8dG7PsqBpuJc_l83ef$&5 zH}h+L%TJ!p81wP6$)ul8+9joz2;M05yO5)nz+uZ$dG{_gl>=fzgq@9gBVz(bFy zS^n?6^EdP|IU4Z$ZJZui~Ea?H5`cDrpq{VP0tdE?W9FEtgn zKHa^{d))5B<#PFo>aEXrFOS}3aOv(d?@!Y6cVw}@D-VD3>)rqJ_vZh(wW;R&+#Bjj zn{J+cnfLkL`p5mf9*vVi7sOs$@Ssgj;KPDrET@wH3bS6h;>>LNea*2c2RE{_&12uf zD!oC`Su1Lj$HYHd*Y7-=SvK9*MTcKW$+&FZo#%6Y-|L@J_asjI`MbTw%F1DDA}&7Z z`mxS6(`m`;O&?-Hcz>^Zkbkef?R!_P{DG_2PcwUQmYmHe)*^=9h>xu%8s=Q9i3s64wa`ocHW*0LNv?sxp= zdv3>k%-Z>|XyfzQXHCsd%SLhU&O5pKYFp6voLQ!EBCl5^-oDn6q4#>)RO5){7rl1e zZGG|Xy;*n#5C7R&%k*!So3<9MSv9RT`jhdUDvKj$o_JDuC+$QMrPWdV`qOWzBsZeE8}<9x!8|&)n}K*evV$h zpJi!A?$PVB!|%MkwrB4S_pKZ9v*m7ihm{_`y;?RmUV-C!x9;t-gS*du&#XS&zwZ9# zHBwW8?wE_;k=MImA@;N}wDdvM&cwiNQ;rqB$QBDN2z#{W+1aDAvH3gh#&61>{^#24 z^*iJ8ZfsSJ6ZxHY@M)5Nrp?;bADQk&SBX3P^Yap!m%Dw*X4Tfhh3c#4&A-2oO;GQZ zt$1nk#ex^&I;W(2`tH=)aj435V%*>MkFyNtYQ3m!z1Vb#Pk8RWFM1Y&0bUwgoFB3; zsLO1++?T=lVM|ZLU*0_T>gu1r=EJ&sXQy%d(zsSmv)D4 zJ66d#*M{Y%jPJGDosS#x=RTi#u4I|<+?VfF&-!u~FPpaC_t$Qn*Q#GMzs^7PK6v@f z{k^;DZ`;HNz2Et3<;>ScKj(ZhEw6v~U9)c4vsaq7sd{J5o)7-~;>$l7fB%nPLw*L^ z`Td>u*m=hE&&8GY)6@Lgnr&Zq)-2z2(*E=F&n5mRbE2*ynLul)1;%fFpwbt`k`Pd@DZLbJ9$YtPJ2A425kFtrw~ zI8nT-%N`VjzW+0Gr(wdZ|045@ zuAYt2@1FU3d5Vfn+m0vomHUc!8NTJOjNB>r!t>XkTU%t8C*Rw0#IqKHkBf^-<16xBKKa?P9W~wFhI#hSYZYf&)O?HGv?Xg&o?lpH-OfFq%mm#|1iU&N zY*+g2O^90YF2k!wHJ|=GzP3YI*5`J2cPlpsdvh@lxc^EHw)Z9RJot^XS^@CaP(^cwtZ> zrXj+*zM^;0(T$FZCGL5-mu|kQ3G>?=_oKvFclm0?>9(`IO#-7DeHNFT@4e&Mb$P1K zx(PqOPx=03rb+hlKbLs2H$NBpe|egXY4NfxFAYv;?tA`f`jbi1&pxT!x5;CZ&+28F z@2yOY&s{9GH9oIB-Eo27m$^@7JehOdoZ`+)%Cy)`f2Qj2?m5G&`A+dNTTA1f z@0rK*bymIE-Ty7Ur{aZwiFcQs3Y{Ct1G{*Um5X^$SQUul0kc>mfL@5C2q zP1)JE$)Y8ob7J^XQ4QI~Myb#?U7bwvitwY(+qoYUC$L^py7uU3gN{JD;P&o6dX{EE zPudiP9US+$*BG2Q5!j(4u>3=9M}po((`7+=r=6RoMy}*wy4rD_aZ6O{gT$qWv@5K1 z)+TX&yr|-|l<7cOhl?bmg=W{ZE(f>!{go3PW*gdj?vA_|w_wrQG={LHCS8mIlO6or z1ND^+LPa0HXDRaA!*lHVl>SE=N+oi z{f{yG+|K@sE0h^@OWPTzyj@gSHT~qdw6DRBm+SStwspA>rf`=d%Kt&d$BQ%8I)pB? z$xk*GUl62nE#q^y;6X>F7j>L!+W%Md=6E!-*qt$&V(W5ao8sC?gQhg)0G-C&N*k;t zE(v?+ZszXlSNM}se2KAUoezV{ZjKa>17DZ;?~-V|mR6YaK>TFGxtV%DpQM_(m4#JJbzkbPOiq$LT`YL#T>z&?r(1~Zt3f~Fxr;Beb`+4rs0{+Om zMbDWhJ)QV@`KR}V>q1;*xHrYFSr`@hw{Ow%$sdoLP&Z(Dw0XB+-w|HKVfpRe^y`Q{HZhK-@u zj#S=1drk82=ejx9+f3ar_1;hIX1-9-YrbriS-@g2HTmB0W0eX$&#g{G zOgg{pjAm)ne4pFp5wBmYi4D5@Xj0XRZn??>ED!!LoJg0^X4|meY9C+ne(%rztJ;`K z%%<^9Jn^{7KsL_e(%&um60a9*-l-ff{`9ZNrn)I}WK*gPufDC(kh(TG^W3Qvi!H1j zmn0uppI86*cvE)MHLb22?D4FNE=09vJYd=@oTG0cK5NGnwu8YUicV{T0z?`m1zU@o zwmJo}JlIyw_kN+zYyFf1u6?#v-xzDEGCPBv7+PnCm%QW z8r4KL1a;kOdMj%GdskX$sm^P;#j;VEYr@y`eE3{$y8hasqh2e#7-jBhyV%^nGc9I~ z%sK5_aTlX|FFM_3Zz#SlEyq{d5f^KH>QM6BXUpHOcW6>(Tr2f$+p)@u;*H6n-{0(( zO6GZQp3TKvnt0Rt@Uqy298do~I&Au0F06t-irwJlKJ5z?dauOvXSF-`a;y;-`*?`4 zc|k>u+{_m z_-~@?LfO)ri#ZZ%Uh~H1=UIF)y~lp{#+;Q_4v)Q=VL7`+?RWh= zu;_*57siIyhBccjd&Q3~ySaIlvq<4$ncsPi@43v*R(U*j4HoO$RkJ{=D)0OBHLIrG z{>vJ5(BDqtT50n&zSlgZ7nK)ja360!J8So0)uyD&Yb?H~?*IHvTdVef=fO=GAK3Qo z-2dqCv!?g4bt$3mBE@9=c;wBlTNuXZN!h*gs;m4j_S$6is?^x;A-DJ@?!3LvLDN06 zs^^o$+nsT5R&pJmUDUnYDf8^zhm&sKon`*odQV1PdH5akY`s^^r#CIkuV(KllG!!M z_2#DwF$)Urm}gI0`ZVim(w65BH$1!htu1xy0X^rEU$?$2)W6wO8^7?#!zB+k-CI2M zaaq0N<vsmak}z5R`AE@mPx#Q@oQ4< z<|QW6y0iFCJrLzLr-x>wCIhJaw6wMdGjD=S)l||I6L-eaijds;`%- zo)*oV73V*5{_``NEAKw{IbQrFB+}p3{Cb`L$*NP2dv1Q1C^P@n`r^0N$$GY4_Tm3D z5`owS$#V(MNU`Kqa3eBM^QJ5%ob$BFjVS7*N58oa5N(_jB(bMe#X-#-~9 z`%T}+E5H2Lo8aWf%U>k_`a7xcfog4j)cKv?EU!*aV7WU_>#=HXSys)d)774Hm;e2? z(y-)~T=AxP=QL05v3xtfa+l4oYAy9y@8n$atDqWz$#p5uW=`)Dx9ope z;ZgTV?P;o7=JLmxqAE2LIK1FMYXCY3j`96Pdp)|2nttr{?~q<3*lRejSMUf40=@yzzPK z{LRmQrN(Wav#j*w`}vm|gKy6-PW65LVddvrD+}wi`j;PD6#V5%RA%4uo%b)Bp7y@x zt-o~nu_KxL^dq-F>0GvH&NFl0&nxDLi&iZ9Gm|Op>jTx)Jv%-fcRe3xzqDfhg!xSg z+S7k-ZJkwDxo+{fCBH*#XNi5DQs?!jC}d5`0!xi!#yrMzeK&nh`?|E{DtKi&-~Usg?Nej(eE;Y3U*6JLdh&Wy+XKehRbkUa{(14% zh-V&_{;cu;;v-2NkwXBRzthX3@fF?PXoyD|*tsxC9$o*L8p?7*9vv~!IQJHxFj z%XY0?vT4gnQ^$8=>g9sQPYa{stTd*i2wwUdc;$tD-@RGO_9|vZ?R(|@^3&9ud3Mk3 z=VyMtfBBEU?f*%PrdMoxhenqi@Q^ZDhgHD)fkTqAhA!yaiv3{tQ{OmWIPTfLhd*CDFWB?cU@u?cZijy# z{EbUIY6|!Kscru+Ummi)@kX3rTv&AFSN5>KpZ@PTU~13uHMnG>`pgcD zd|_H@drBj~O70e~;#${r6IwPTGR81*A6daJp3o_c+J7v zOrpw@*bRD}MYX2sDrhks^!4#~dH0LMiOZv3Bs0>Lp;GQ)34^b@gO=f}r-3DjM+Fk2 zr}7+-zu%g1&obhqtVDxXa6u9ukMFkzmRWL(beF%ryka`%nUuwz>4h?>F`SFlFJ^4^ z6x`JaeJ8m%RQT1r=3AjGla_Ye zXSUcS<9Ot#(Ua$8JP9S&k5q*#R&Cd_>{?RolJ&$hbV0J^JAp;bzs(p9O}evr#q=Ly zzwVT+kZ6c;7TF&0{mQ#4!3!Y*pSC_+V4Ws<>1ON??}pzh%o7ED=034tI4{JY=aw%& zhhvGyBO&FR-VC|UB}@WelNlbl?)6M~@kB*2_Wa^J{@h72>Mnbi%iLCXb@V@w5^Lzj zmG5XdrR$t^>jmDkN>dD7{CIz@F-lmhQdfLjVCT8#zf!`K1MC^|+U=4S|1@d(Uvy#K z`^D>iuJ|0N$0;)7)8VwAYSx8JK?1k+_+DGNp6#ug;r=Mh>P|S@3b&hnjweqt9uSyn zp1bM9ifSu+$%n@`3Dq~>JHjg|x|r?xIqsle4{j(Mhdz@IxR__VVS0b^#+s+ct)3)b zW;hW#`Hx!Jqdjq!C#)L-pDkMde3SgAbLADAcJcbzfBIx3*`lBPci!FJ`I`)GZj?Om z-oVXq-sbu$w++5=>6U)RJ=Ve#-ZH42{UK#`JZWb0Vt&c_p9N}b*BZilTVecHT}&PpD(urCx^k|6P!-QAV1M(X#n-)@|1mOC!n z_3n7h6sgp?{npJs$)(B~pLgtgd_#HBA))Y~o*O0l*R)@6UKDao`H@t=&wZ9X;(Htt zIVN7csKI$4`!!R>&B}%EZMzt}#FVsonk8MUHIPg_Ob<9F#(n$doSnktLEmf@OIBP-FsDL&ce6c zWw|HUX;xP6JYMa3d1}S_9Wh_Ogl)FGViJ3>|NgzjQ_^p@XgqSOUUQvs#yUq$*W1~9 z!q=SY`<~}{dwNZA{lRr>H~4MTiRP>AT;L?P^l+80=;HPJt0O-C{5o$Nzr&4tQl}1W zT%j}D`RrjmhI4y0%5u*hPV5vuye`*J%f&8U#CG?#M|Tga`o=Gs`aEmr@|Rpa-z*Gs zW#@)ad4^$Ss)GmA5bov*A#=2?Mb1wgR z^G&yX-?OV(hu`n{*|lCiPoVL1Rr_>?Yk%K7ns+_hJ=cma*7v!WSn7j~CboNx|2%p8 ze9z7s8*-Twww9~A*U-8^V8^h+Eim1xIpylFwf2+3G)aMD=Wp`&emD~JiI-PoYRaWKpoy)efihrGVPixk` zl*qC>vez`0My#@pGkGM+cX(6QO%rj6r#oWaWUg6w|9V9HrtIvnr}Ng!#}&uNEeI`G zRJhgR!}RxcJ;H})f0cD>-KCLxLypVqvB9e6_xJynT^AnRv-9!3z0a~L7hI72op*9w z^oP99Qfp<`hkq~GyU57)TDZ*?@injJxn3+R-?3!#toxN$3s&-ncok$Ev998uYitp| zNk=EDb+dbu+v+X*IGmrai{7NcAF`{vxM@LWLdn_twYiy@2x7zyc{QKwc8HzI(r?eg~ z{*iNQ%Qf$xnrp5nzN@@_t>YHGikcVx1efhBs!H=(n zs4u^LTwvkz&iAQCo#9Tqzq7T~&s#h0npC$WcX7=0PrCb8&QtyClkke=@F~Wpm2-u7vbF4|+L}*2 zxN@I?x&71YL32N?{aL4W*QEc-1nEJCnXFs$2UVG|zv5n1Exw*UTWAkmM z9+#OvUuk}D@}K24pEXNX&AUHKP145v{P}5`Jm--0S@t+DF=syetmTGwXYCEnRVVgw@0?cQrK2k5?&@uN zVAkfx8t$L>I%<5B_;x_zw`u)$LaeQ|2ji=%l_%$r`|GFsVvGCLO$V;2;yeGS!nsxU5 zm9DBi=AUM-|KoS|%?F7e@B2Pkx-NewfBHqm6wZd?zb|fm`8mDm@biPuJC99#Ch?+9 z=BZ8pvpUc$3Apw9Z}U=PhQDBDUF}QNXTFL*_;WZ9toz6LMxoFx2gE*B zAE{^fucr_n>Grd<<;BZ~N8@66vpRRA)MP%szk9~BHilLHY_m)mC0_+t-IwB7KF2rr zLaKqtPd|Zdf&2rn1)j!C>JjBIJXC0*JCETk=ZaO6KW<59S>bNdV{Oo6YHaY5LCUAi zUtB=V&MNhb6Y}L8ZC&47iwwz& z?Quv5brGJxI+c0$m561LZ7;40F`g4Tc>9r4$;Xso2#RZ|5i*E;$>Sl{m}a+axgJNuMvi}_zCHVLnSWTjs`xM1 zyD-}@Gu!Q^s=(6Q?N!s%raZKMA-~|hL#gn=lRI zYtri79iFIMzN0sfvA+Gp*O{B!uc$Ta1lty;bMO44_NgM}^88O8X8bEQ?s>SY;EsBc zAD`ISX7FyNVP7lr?OL;S>K{U$9RIy$-9<$& zJ{kFvNVTsWxi9YisHsqpE;p(Ry6^ql|DMpb2BT}`7j~Q2r}hQbl<-XM|L$C@68ZXZ z`lmwWt(%{`o%QlJ!;ACR>YABn=I~6($=5D65!~=2u)J-j>J&+($?Ojj9+;lg?3=lh z$>mJz~mL8Y((|(!+H^dpP!Tb9O1c=sU7? zvcR=CyRY^KT-A+h`CSzYTR1-DS^LLwp7Z*!c){UK4%(vUnK>mO1NQfY`KEAHM8OyMImRH6LSDbioU+lDmN! z{TB~C6Syxb@GbV_y1ffb#FmQeUY8bIy61L`+uUmxD;tk%oWK74`kL2m=frGerZKMA zd*gFKL{a$;j*AZhb8fTVYrg2%ZXJGU=cHXPHu$;EZF1gzylK*VSdMeKakduLlvSQz7Fk?fesI^F;>~w9ywA3~6MOl_tVA|+!r>_(|)@1ZfwBRzT0;v-J2exZ(gB)M^^9UTuwi>9MAOA7ADnm zxck`mWUSG?`SsAc_)XbiI8EFVzq&7oXGw?^{3yid;IzIcMW+N zrHJJQi*9b`UK3v!DF33CGq%yJS}QqniteMs5*sx{u4QhS_Tq@+W1EQhpjjXCo-K9A zKKR5@T;$8XBNgsTneET9PpD$bj=vghQ`mQj>$NtQ?6a$@I6luhvhTU7MOlCr!y(s~ z26m5L9=#BKc9+!=k2iLG2WMRilli3@*L0a%Lxbz|qAf4fdLpAN_ubmJ^vbl=NBd5F zIb5^)jMOH`hqJC?b)hx%V56m`6DUW91}mxx%hLI{@KkxqpJGaj)s1lxvpMX z=t%a27a6XH8vj19cy{|)C9D>|uRP26<(@Ayr!V`z&LsWOuiIMB!$1C+ay|IxvZ}pH z?%bJDr8VE?Ztxco`{nCurGK98e6Rm7^<7+=p6#h%-*@&?-+#He^Y_pAyk)gr$5);# zjk>34_iWzz&vjn!{I3=!{j&RcW=qfVSJt&tNf2UvYdZXI-Aia{g4moyyL0FS}CipM1Cco7etgg{=j5rmdX&dF|$y_Ey8T zj540&u)5%ku)2D!!y(~wZC9&(5B~Y{JIkc=w+r+B&6=&fJa_Kl?LoJne2)uimziZI zt1o=tzt__L?A+yF>Si4e{^@_+@#o*=$6EgU^FDTK5C6Ya&w5_|owGc1_nb$cr_{t7 z&7W8GPo!Vp*INDe@)R5Mb^E6L&-d0p``^Re&Xr^Sg#Vi(_o-Yo=5AiO@4wd5YNPe} zirObd6;4-F#cAkQ=$$wd@Lrhtu=lSQcNPa%d7VG38Ip0u;`-AG52vK>TWj}sZnvU5 z|DhT4#HI(&DCppvcg@PRY`^lHb+XTm{EuGe5S{m)nYGDkR=u!j1(%GfEvxRl^9{OP z{~JDtbBJryajyu>klEk5!TrbeDN}TQ*eO1^$}b>RvG2&|KBk2aq-}I($uIt?Z}=tS z-}{(?g!AVs9bP;-b7RrQ3N0^@^?`2+a(1MPU!VT?l&XyL#T|<$n#O1Pgj@d9GL83K za{p&mir2>r_XBf&v51_H-S=d{$1gryTb@et&E!kHQK8#-ezKTv_}Wf)>C?01OiqR0 z&s=IKTUg5$aPIYs{)P+66;)d2gQu+bSjK+yQ|P%n#ai0gealwQE6LScKc{|b?fFVi z+n+0YcP)P@VPSW5s=uU!@P+@Xfv1+|GgMYOmiK?2G5zQLP?In9g6v=Or6>N0*C_2v zgSLNvwR@#A`~oi;`dbxL6*=2@=b6BFhb{L8_)n~OxnAix*UFXBJm=?2xXlpc8ZPT;=sJ%w-c807Xl-w~U* zzbov3ylb6YQswmn(MR+-AABl(^4#v!O2?PBN`@|*Bm!J{bS0ert~|703#Wn#x0iOw zN&{}ugFEE}do36P6Tb_I`afa2u(M?GM>nMaaZ%Gl%^fTcwuCc3FuU*TrLc`f=CiE( z#8a2w^&en3gxY=u|-!*-n57N-ZLMFig_cb)wJia?a5Cbftx)` z_1!n@)jzaVQ;v}$;;I$J|8Nv^iWuQ^h2ncGh0AHGw{C%H1^ zoR4^_dXvdmVNaKzaqyPF!jDygx4d2klsyWb$x-#*X~}2CkY|#MZ@qrOv4Cg(GN!#9 z4tc_tcAA}P*7)o?p)uS2=CLxd*ac^lUL~Ct_*iZ6L+*Ceb)JM9ELoQY_q_k6Az!M; z?*7W^#K|j+1?#jAERJaxl3q0Rwb2ProfUT5N+lhi3hqe0yJEHAkM%B(KDRAi@g}(8 zexb5!?8Sv|yH9gC^#3*4I{kKku4%8_+M?aDXM}A(O@H$2?MF9{t_d|IXM1b-QdJ$Q z>x|NJ^n;%4Uu@P@8!0Zs=+fCx8tdY)RI1d%B;m^Bn(*0%=l8s6F_Tt$zN}EkFOxZA z$^m7;h#CF09y&^lipF*))-8W$+S_E;<6CL+RVQEV@oT{evkP@jl&AGMob5TUn$B3c z~1zYVJBuwMRRifAWx9X)}N7;`9o;(DyZUHn*Oh{c-x0;^c2wT>a`t z@eJe7DK{+)UOe>qFV>kmZT`6n8~^yM?=w>`m66`G>xq@!38mA?w;Gr|Y_3i`(Cjl$ zTE^hVn!3zff#b_oer~O?e=~9Who0-o^EU4@u9+XWi*e7qUc<`YtCdb%Ha-_xX?scH zy>5ZTZq5`ddH*XmU4Pd0SNas+eGsF1clPgfZu4sHyg$wO`lnTzM6|_Z7>@E>6kzW$|w|dmlwnis3VM&@Le#UgPwR&MJ2310mPPAa7=&p8jA zlF+sNDdWKXNY;y0V7Jl> z+f(HDbkBn$%5eqv7Hl~b>Acc5l+(+TVfrrt*V@||e6c5wdTDt3-{(Gk>f+a~dzx#4 zO=1~VXD!y?ZvT8}_ioYGuII0=I$Yg)%_-65TGQ8AcNJai;`OWIV!w5?yWVv-DDSZO zml*tc!}^O}8eHei`NebiO|PG}J-zBd*><)EcfYk=3)4Bx_ueo2CZSBjNlg|<~d(uP8Wp)YZ-nIPk>fNk-xpf9^JEG(aZUtqW z|NU0AwM^&Kyj2?x_gwj+nkyf-bT7+TW3^(!KVuYN6y{3N~p z-p9w`?<@B2ee}9Ld{6A*)mPhMw?9eWen0uX?vAK8KMsCnH#<9vf4BCkMb9^PTkjG7 z7JGKnn~15rYuDZ=<*tg~kUL$c>%z6}O^dg(mR@WOy7N{)z(Q`8DgRlnDSTGhPSIOy zEsB$4&$`wo+}FKuYop%b-}A!`>A$;IP#+PT;h!mUyR0{CUTpN|yz0aJ>+WxUEoNgP zzGd5k*=M!&Ud!g|%T?^(z3??R*W18Xe1TF6k6X#gNZ*)rY?{n3*5BWn)^A^57_?!P z6_;+#F4Ng*2RGd*jx0CXmU3VB$D2pf!cSN4G5_M1TzmHFB8L4g+2?oNO6s|Ai}icE z_neRl9=*0nE4urfN_7_RyDyjbBIf9>Jk6ejElW-2`+=Q>7O zi157*VK~-(?7_x;2YwqY|GI9$g=z9}`xh5;%c%a&^L*`fE%fl&M{*7Qzoo0*Muf_` zRj-lQlaY0K@#9}Nt9-Lh8{CtWoZ~lT*>Ud(^=Y?~jt00a*efn8>vp8`L&n;9d*u%( z>^^Q1$?x~MX}YU^|NA#_2fQ66kB2Xg?TMQo5v+f{*eUam&1Fa%z;;38?u+&gRepTI zpHIg8+PU&i@G1ML@4a8F+_Zep|JV!0Y6soZ4!r#O=U#Eq+!>wnw*O`LFW1Czx-C6-r1FZ)YIPGEVKD~ z=S%gx>oWeAtL9v4x7_#qlF#Y6lMi~A80EiTUh;NjO?=R|;=jKvtwN8@Ip@Fre6Hl4 zE$7c|eYr*7cfId6MZar*Tl%`Z%9QG3mS_Gf-t{eHe)YQE`LDu@e_834b1}{PwsLyk z&BD`1ta~pB^%pn1_`x^Ja_82$2d$iSWp6cYWeeW1;cVO~!7EN2-;xAHKe;|Tu65Q> zL3`=Uy!It)n`iIp2G-vhw^|(`5qlYTnF!r8C*YaPIkUOj|x4 zS9rSoN2B1jQm=NQ{>phTzi)~6{o1PYS4Q9NhGJ8!-L0^YEo+yghfIsVWp%n<-STO{ zmOqjeI_G!V{k|eIGymlIujgNeZJTE^`O_)KFP0g0*Ux^b=5m}pIXNz^>BiI2nXlw* z^4j;DEB<9Bd))u)+?Ds9nOuEqIZOKd^4c=J{+)&Or!FtqFEe%W3)N*CEbX2>+qK8; z{MY~fvcKm?8Sho;U;fGR>zxm_b{6LG_U8HjpF8NszTTs9w>;8(?wJ6?HYk;2-TCSB)xPup{C1{WSoI!y zJa3`I`NO}3OT8-FvX48w4mPgY@%`xHFXt}@Up(Lcv+~`~>06xrE>F~yiJR43@~@oL z%pQ`d=DzgVA7sUR0kTl(z5Y}E{*zmnkL&Mz$!amP+T_FDAJ>`p_tXcMY)bvvJa^B( z=Uwl@g7+FVOtSwI?8>mH``2cBx4PH$&v*VypZ29+4_4tL5_ruV1*oR&b}2{=2}Vy8HgB z?)%T<^7!rb1J)C!F|^goe+m=zs+BwF8atu+$!*)|Ecy)>I~LoVidhu#crBagUIw?6 zRhPI@MZ6-Xgb5l*1!N|QZ*rKBGQW*N&r+zjJDxMU`BFS&l?!qH@|EQ5mW|(Hx z_ak;w7=G-M_$=S>`r^7L!7QIxwulC(PMIDMqxh6{LBKl6O`@?4T7qu_DyRIs;>Rg5 zzahbjS&%)-%F~gOt-wRD_T_*Ha-bF zQak^u{kExo51oRid^@t<^(V_NW1hgH#Saz)JEony>3C^9%M9nEWxWq7gd+5pxw10s zS;ri4Z!7bS*q5w}N_OZ=c?Le|{(4~Z3nLdh|2~N$tQ&p{yfkM#|Mlbj3;&e@ESc^% z*@!VV#JRDvWJVa8dK~A_(REwSk$FSzmv7qp%aK<~=l@EOZ+ODFVpY|bH}Ue3WtI%NwJYvl z+`RG(%e#=9>2d3Q$};a*8Ew~UTX9+Ob5H-9?;;$3Gs@GV`fcnbe|{BwvHHr2?T7!G z*7Q6pZwXS4h-=8o)fx%E+PE_D`$v(qr`DT1? z%~t*{DSyqOalUYF+pe^P+wK=nJ+5sr=uMx_K5N?9k2B_5H&(>_Jf2l_h3)d9OED6a zXC1E`-m95kDL><3?X`!j$NyTMcQ%rpHO+X+#JB3aeled+JpYTh2i|9oTw1ka%{<8! zQ}_JHnRDv-2hAUK62*Tu_OzLL#ND4_cec84&bP?g8ul!%58rQY?)jT1VV?XmGj_rc z-`9fgk5{ru%1+`@__U^8#!}pKfAW9nXKyX`AKl8hO5%0JmzqhHZyq0BR=#HUy2Zvb zeEgaxFD#PrZ?7@F>ytZweRqxcv+Vo*FF(6kzG9xK_oO;R>G&R-OZ{u|JC7u)o%wi+ zC7|qnD@!Y*$~))PCeKs-GL!y!$;7GLnarTTzrAIj@GCASy}nHy)wjJC8hi<}kTE${ zA-45UhGijOyIsuGgc6O*KNmcAa!hyL^60742EKRZT#Fz6 zI&?9*b?b&T!7g76^)SQw;e}~}Ji0ZtyC2*=EcKcvf8Dn$sSNt- zvX9?g_oQrd!sQT~H`!coHGIx5Tf6hVK3hWS-(fQ$fU~n@zdW4j1P&xu*Wyu=C05>cgw73U+4fh>|*W==0ONyyrOM z@5g_HLs^#vaph7Sbj}Vb)Z+qKxP3%DSwbIk; zqBp!2+Y@VFu=&9 zZn4zU?RQOA?_y`2*R=bvs?xk&Z&r5AGk;ypXZB;c_Lc{G9=$6#xGL-Bw$nLLp?7X_ zTdm$1Y4_plvo_z&E-r;Hrt6$$p8j>(J*lYhk53Ov>#brgy?AN&^_VNX_pvDN+uvf( zzOVgOT=)I0{)-&PM4Q=Vtrf1ZC0n*VdmuLD*hUR2tLRS(v-*E$vxv?K?l@N6yKK3U zZR@KY_AwjYPOEwUNqPM$-QL!7)9=XZO?>gfS@Y<&SOqz~Rk~>pZ7MC*B61nlYZJf39`o%3@~dTR$93D8i+8;IvCd%%*Xb`!THF2B8TXU($umzJA$E&rnVFY{dcyg%n| z7cAS`zUyh}xyqBr7X}xn#JztRF||&8?u_W>XP@j%#r&_!FTeD}u`J=NUy4 zg1I*Yx7uCgTYhZUO`VpD$LvoU%O_8?Shwo&^XDl`)buEL zOOxhI4zg;0c;NfQ6P?Er1zMO|)qa(@D|Lh_@x&%x@X&c!&$OoS%Ypa@KR65eAF`c| z7O8JYYhC2J;~1kOgctQX+R&}%g3n6AO~V0)u|LZ|CzZkzWz(%Cs|*{$lh zYC0b?N8g*Amc<;R!NtYHD&;J=Q(AT6`eQ;FdphbXMRHv`(;QnD9(nla&g|`RQKHMQ zE;#?`OnSO=)4%@n%bzdXoKmI7DslSf+~}FUnR#JeKc6;UzQmOtbFjAXiPnq4^eUb; z^Va1pJMjLC?cC|-*DwEa()V!5)H&BxYtP@6Sb8-eZoA?CWP$H9%H2_E6=icbAy%~OIU0=@JV!M&;p3t_VL0dl8^ZYrVJgdHUopsIcuS;~?E8p(? z;okKsR7-ni&z?UI=YM;3{@;z2^Z%S=aV^>+I%EF^?S#f`d*|?c!POT-8{g|NK3J<% z-^QT#pYgcsir32?aC>ID>xc9a%_H^( zRRVX|?p@(pdVPVO<206(*IJ);cYfWW*l^#TJGGm;=z^-(ZUMD|4;m3Ivfk`YT>dK^ zZ0>1=2p$sBTC4QKqmkngQ^s8#<{}lwId>ZwLs(=OwfFY!4ihYy+VH6I7t0A3!=`I0 zHRlg5k_(upIH{`3XVspwSAROOm*mElX5pykoF7w6Zd zu5o8_`gtOpsm67y)S_j}SIpPU4cgBmlmGo;q;TkI9SO%$!8NL8Ck`%I8kDh0;d{!F zs}GbVe8LxUTyLw&Ha&I!Epz?RtQ_rB2YrEHeuavOOi!J^6g;(V5m;Evvet8gC0~v7 z=a{A=9iLbJTgUx&iu+vuDa>Z<_mYkj#WpT^?lk4YhKcnZUyGFgbNZ~~Ht=4uE3w1n z-C}1S*~N!e-w5+`_mOohiDbE^%+7g{Z|R9!8~IDiBo7p1yyq~G>-iPfUut?ycl*+% zFW$Wqm?JYqb5*vD?1RSv6BZqHn>|A$vi_s*v243DYX5Q^N?&qp@vqfy6qx+ES@F|$ zsa=00crBRI(`yze9k}ftD;=Qya;DOY`CkInI1^@^G}ZUtWH)oseZF&?LHj>!oE7=x zmg4@D_ddzqY3Z^JuWt7Jcu?Wcl*f}$V!?KJ@=F%w`!8=Ene8!UV%KBe^AbyA`)dV7 zkLzsO^SMyzr0UC*Gu1PUO2hIy&lbLV;=5~lipkxDo=-O0DDBsJoS2}!wO#6`?6J2~ z>XOvu=O`~R3C!DB`d+ZdM%vV)lk*iam=!{SWzo4w5?8o<-tDj*7wdoQzcV!=05u7m|S~w zw)F8uMQ`{S4XSsF?ULJaNybW}ce&m#ft|9xl8yIMGYkAS=d-M3HCc1LYirB4ulF|F zYgnz0yr!^ffrbr#^wA>5*P?HvZ5{r;Qv|GV`3h^uC9f&5ll4SiM5_AWA*S9&*C+;*+*jW^n1sofW+_1|V~ z-?zv_Y^lsS$$h)_KYF;~!R)iVx0f|Z6y6AYoLRAd_aTkrUyIs{XXVT3RTght{E~at zx`fbjk=6@4n}VXh<@SD^N-bbr{OJ`mF zl=amiHp1>rUc`0X)w`DK>FyP`3jcKWnP~pC?-FmDlN;*}Zi_5>q5bY#c2)QWo$76G zyFyDJl;7W0lcT5Tw)VaWqtCy;r=!J|K26^~f1`$!i_Ko+4CcMYQ_g+-yV|;E+n=BM zb+g~c*K+(cn-^NTpgVVmR`eW+ce6!(_dl3@)|Bhv+oQ7l?c90%;yPW^&g!$_k4pyDje}C^&)!u`ZM}NP~4!hbo`)J!eX|B5)Gvhx`?zc|} z{G#)EUhMW|SNe`ko568yz0c{t?`B;K`}5(Mbd~hIn{%$;k<(MUu-h?np+P}GHcM~m ztlDVBLO;W$sevX5E!U=LxOND|bIf0F7a+>C%cW+<`JPW-)*a&3>2B*jRro^u&!>OY z8ZUqL&R!oWBI{C}EU2cJtiSE6b!8t<9D=@E}gajdQQL#!`*m zqciL*EH3`b;92d%@WYz(oP3sOU9@~k^vrp|OQr;@SlPT8)~Np{7i1@UerEr(OE%eu ze?>3b!Z34&c6;>)oB7M%ou4tS|B2Dmi<&d{wy3GCo}Bqfw`I?{&)zGae?E2j*-xXL z-!!KzKc73dcvE#J-`S_;-)sBMzx*2f)<*rZ|H;>ylD@h7E}K<*%Fpty_WB>U==Axk zpH+WZg#YW2{FgG{GIaX$Cm(ZD3$*V0uY4R+7ksbyZk^}uRGe9c2ECCY7=+VNDLuS&b8Z=ZSUlJ_?sznf(b6z1=_@AFk<`qG(8PHy-6Tokmk zIN6I&*E=)y+3%HQwJ)Pot~Xm6UpG0wbKmsoU+?Vrd*zO8?&?4Pf_GUiU4HC^Ccpm7 z)&6Ub`Yo-@JNrrVb@TIEA6IUgx9EAwmy|`~&%WLjo0IfA<{Y2oxv*EN}65owjs;28S{Qh)U8_F-+140 zR-dK*#ED(}^PE}z&-ioh_;myOQwHfzJ|~>AKFhCot*7t& z?g;+Q@S2hX${IR+^3S&laPCR*KO3L?L$&Yz!pGkm>$z)smmT~dc9g$ydqxz`eTMrA zcOF+9_%yLemi7MO&wOX+O*$`-r*!>0hquXp)>%zW|M?F!_A&R#oo>@@mx$l9Sb9-U zHjhSsZqJ_!lpG<#&DRQ~v)ZKX>`M zF|jMu|5(20-<$sBx5EWzT1og`^1LV@dH0>ouA2T!jHSVQS8cHVaJNz5Ye<_`USI=i;I9d&%!-Z-S@a> z%QiY^vE1SNHsQiF&0U5@Zj0oUs(vfp!NW^t~%g4ITwd`^bQq?A{z&QrdyDEOAir%EvTOg=wHe!gq5zeC8P zjpmFmCf%tKKc#z(C-5ZuhkTZEGiNdCsM#?sSbWxiJ%soEYr&HF_UcTRSU-FbSh$sC z;|h*GCiz8e%QF_ObDhZ-BI-Je`D2i=m}B0`UZDvQrVqah=K{f=$(C$*>E3W(WxJA#m%P&3RgbNB7O!7W)6Y}2 zs(Jfu5!HFA46hb$DiT^BnC^RLrYyt8x;M9*(v?_1?W94){K9D%uG<$cgxJ; z3pPo+l4SJzWOP!JmuDQ~-5O&aa_#!&PyGy=C+3Tqx2yOpZrr4CY^7}fqTIuVFGBcT zWlr)fs@tX0UvpSpx?cGHiwogx9mj6A%{X;zAz*ZJaMnV z+vSn>EvoEJ7HS=eQEU0>yXkqG;f9XnkU8y>jVERP=HZK;w0VZg`kEZ?Y#shOqj=t0 zgSCQ}{xCb=m*u;<;&ExU#>YXXL*(5D{t_|1yj4c<;0baFG{*{lVOLMYp3Sq&yvy(&-b|t%FN+7IDfKX zXDa`xg(4EX-M21$cZ%%!?vohcrF<$N%u2>-3d0Lw&fWK=dOO?|JB%b27skC$4zAM8a$gh~Ub^Zi@uf2d@T+R%3h?Ky z*X$O0+RSs<$mMc$tC`>ty|!INTVgM`FFw2@MARuZQ_StqYfh)giWu#jvaU@HhcbE^ z_kE67zQXHx*?JAGg{y3Q*T1ahyjZ(;c_weFYE6yCp-nCc_h&r#&wljpwSwOQ4wHP> z@3^h?O6$b83z=oTj@k#SdrR9~Rb%vIx9>Jx-TFA`CVwB>wzba=tGQ^zU)SAxxuWr$ z)UAC9p$E6Ey|I-$z{)M7{ZPx{1)&dj++M$u%R8U<^s498;fykWHtv3MzW$@K$f4C& z`?gP)e)m259iQT(?+aIJ^gd48`Sk9yNx%PgZJ#bZYu|&q{Y#1!ohmbBls4o}mw4)N z;L7j6llXUQ=kdS3;5_Hq+oQ~{S1tUm=E9IaJwm);XBeo`MF+f^cl)pD@4S7Dfh&%gUW~-tDG+{`Xr^0VRjU zB1;QxOtgE1)<|#_M)2P*b6hBE4w?_%vTcz8Z=6W{z5UCIRqc1|bIr`i=`C%Wf4{EH zy?F1PjXHdH-d!`<=A^jhR9o)$BUQea#Y?Vj(6O%D^`B>{js2c~2VP%g_KiRG;%S@j z=0}IWb-j$E;j3+P7?EMeb(*2UH!Yc>nc7^oc)w_8HckHSp2t_Sx|#OXRU9_IZT@B5gYx_T zCUsZIFIrtb>(rJQT{DaPiv86`4=1|jM$Ku@-MrwX*Bp^4tpTF4=3ix(=Dl2Vuydi_ zq2E#Oon0!Po4Q4cg&se;sQZ0UqFsJ$>s#mhED@sZ25H)^+1z@snY%YF{mxyrd}qF1 zX70)FdiEO(c&C2bvd&5KMb61}v3%^S_GWk`uk<;;EcUXs^Fro^zZdi~c6B{&6M1T5H6@ky{(NymsrG$t=jT~kmLZ+1 zCkQC=c_qJ$bxh9Y%GKPm_y`-jR+7Q3{Q?T-1Aoqsn-6Qq*Y&=bGE-;2`PNdKuWvLj zUn^f|`8jgY&P~tGME(4#d4Ktjv!`vQ{=f70c}11iv*q)uyFPuh41GR*$y~edG1li^ z9u78|{^oOV=@SwApI?R5t}5Ow-gIXE{8y)f)h^roU;e~??f2qc#jE0qQ=iuO&bJOd z7o2NgYB>MY`;gf-)74_<8+Y1YtzWk1%*nJ{$Dh6Wb*Zj2>&%R4rq|EUoAlr0?8+^b z^Jm_h|LTOA!a&0sOw+Mz@VK00oam2P&&iA(J?K=Ba<*SPS{k$Tx z(Bj?Zm3@`B)g_;%`j@&E>Kvc*UbBCv-;&EoFRv5{f3C~&HG2F1!;ZRQqZzZki|#!y zshxFy<<^tI#h>Tc%$ub@FM9LbRj-S4ZOZ?K)IPgrvHaPKm^S~jv6p{7Tv=roI(^RZ z=clY)mtPaVT=Z<-&-1Nuzy5t(GG|`!Jb&-9Dc@9#=TDmV({55-y;rr(s^+RaaiNii zO7^W?!}McM55t!)4p!oi9{;PI&s20G^WPQjne!%pUs+c3Qp&=Aw!Ja?(YgC(FEPAj zJnzlf=U-p`nSAU;L3|>o;)bFh#k1m3CzcXR_xqcm&AEk||IWg_kO$i_01pE^*_A7_^0I|xuf4Te)x)5%jnA5AN@G7OUjq`&BZ_Nha_KV zKWLZW)A-jU)V8q3c(E=$UIQ5x+F;(W1k7|D}HLFR<~d@7&?MXa1#7 z=U*GwJQhFptvTuQ|I^zwg*2V6eC0l5b}05(^YL=)n(K_VyXu>%A?=;=p=Wm0S?!N!LNAwp- zKN5?raJi@OPO4Bz3ihM2la*Et;ZcwQ#naIZO;k-PO&)pP?UrS!71Aw5&pa`iEu{8?r0S)_n@P+kY`!*j@)}=%xrNdBP4-S-8}=CfbNq|WMo1cL%#oK(<2mr%q-?3# z{3p%bRyH?VMLG|A@F`98*&iIcNtWm2ZF}kPqJ;Fka9QW4X-}6J32m5kAbwr_VTn0! zZnZI}oquz|{n>{c9)CY3wn&3#Gncy?GCUIIO}KvN*_>lXrd&v`^z&QxWYhUlrGA(C zCHkGyZ~Ut?`8{!E&;6O(tZu1$Z0aqlH)5(LT>`%*2E7r;__f(ka*dx4?=i-6l1Le!4gZu9?ufO?yPG5-r z*IJ8Nm)i}^`L|Dy==qzKas7(@!;E*=E0>mJ{5H9M_U(J0xxGAowrO7?KJ8gPwL5u< zmQm!ApL;qS-l$BkIXCxB{|lxN+2b?MD3)kNUqAk9vbDm+K)rp^w~J?lE6?}L%e0-$ zaCcqejA)^P+JZ@!TPnYv*w`g^T8zEUXd6$mM}^x;oxS{-N;%fj{GSXBqwSY{J$InK z$ZX2j-z$xqrqo3^FR7c}+upTfnMCQ0>i+L?!l7qhD41unri!Rpd2BqV9G5)h;EMp^ z=b<4}FWB!o_n7sSSD;AMmtui~e;6O+eK?ogqwq-JeR6Pn)w}X}%LMb*@m}M!b2Bc# zw(;(v^nC3P^Y#hP;SM~yw)Lq~MpXaKFEV^~Zd&0bdlyb*m=>?g+_B4GK`6tz_NU8^ zMIOu)c6cqf=bFe;N9`BCns$AXSo>n`v8evn4=-?ZTb=M+9k@)R_4|gH1~Wyi4Hfc> zCd!MPzLh*B>9W+E;Eci-Tx-1fcvxgN-^sTA9+_Wv*78oS-Jm37f?f2bD-)D=K-V7G)Tl(eB z6!xg-3t!vriO1;kPdQfff@_M}K)E!e&P zfx5iia+7K1;`|ZIGk!O1(|os>`7k%q`eN?P<`4!vw@p3!X@LO;O&f>4_ zWC{!Q4z+L*iA}t@)wH$HMrPWdH{WtCK1ikRSQWM9+mvIMcS*hW(i7uddh>H#HD^zs z>uerM<=Kf6Ens{B$;s$HnA;+ZGrEiqgUL-yY zXwkUkX1#?=aE?@T;r%t5rT!}q|4G<#yt22H^?N&aRCMEkZPAx*Hl3UH#muF{Bh$8R z_SLrChgrQi!@HSvRi%!9EjsVKc~LQI>CMgk7jMty&s{Zj!B+lrDpM9~HTlWxnzjC2 z{KLQ5dg9gV#H01ZtF59pWKPpL)fW_9_vvGGOjRe2gA9hdgKp7v&!>g!z#3lAn9 zSd}MevcKlX9RA(mSFXSRQT4fN+4@5r`iUvO&R&ndd|Rl0*-P&|8ByVnR4wdY#5%rr zI+Ck@!MpLRYH#ePe!Kr&vAZ8Ue#rHlXRmqAY}UEP3W*K6U70^Xl(=ZpVCgn=7ckDm(lj(I!ZT#cCk1l|s z^yAN?u@+N&3sM3yI&+sfx4hq!etCt2W{iXMJAQKuc^OF?6YXz*xz^fD|2nUBe@f_g z!6$J+Guu*kKL7iyt9JK;y!w;7v?{89PVCN-FZC)6v`wgO{GM<$Vaie?$9nF&mv@MI zX-+G3Uuh-6r{8vOy2Rbbd)zx8xGYw2YcFqeO*Gu)tkt}#)#+==wF@Pzt2aG-x8d3A zv(k3a^-HvVUHG;w>GHadLeqXv|H`*mXRdbS6y4Xa4lG=M^E>ynRn9KSOC4N3)_u=< z5ShHu@A5ZQ%}HL75iTOP^L&%TV|2@>v_9XkJK?&ngQVVTUxv!+vkTjuqSu(~cuVu| z(PnX7sJn|t@Ob&%NtYr-nx;4H;&?yd+UpDN=P_3M^Iv&>;J3ieGwG)-76wcUYVSz1 zvuX+AI5%6Oai7E|&c`7PU#l;Mxb}OpUsJYR-yA$m_={%3S9pVdZN@pB?;^J4|Chd8 zt~Nb?^7G)zGc#D?L!Jd!o}Y0-&epvA@6yt_vx?_Gdb!gk_0!DR;r3hS76;#skt}|B z`FZeDj{cu>>gJ#RuWEAqe8{rO+jCYWr0R9Q-E!XZ z6yw@=BK7{Zzb94AzqI($sCg(T&!4Z(EZ>>i2L&?N?m?UkB@qNopS6^NTa#t zkChAduq^MtcyM-w>w9h3n*8Rl?DDVdh!(tDF|FxPb*p>uj0U~a{aR0K zv{V=BF8kUs|6KMIW?j2G`u-<0pBHbs`nzLN-V=vCPmIllv?)Pf_vyJgM|^ ziQUPsw)+1=gz`e?@L)*lGXclQk7l#f6JLq&)3ZU zdP;rbneC^`BcI!ZUgM7Z<@hi*QoP!WWDpSqWJ^c`TR#ec^=w!?RWY3zTi)? z&3~DPlN=Bg69DQ#7txKArnxM*LlMhcDvpv*tXveVRV&c!{dvRj<-V z`X?XHn16hA+s9wxlc&CrKf7%9x|(^jZPWQempQp=ucz^!d_~FxD_Buv~%B>6c zyxVZQzTb#%vyO&--Lb3oZ&N<*472|^c}lu{@HFKa{W=e>`2Y7m^lkm6vV&KAvXbR~ za<55d*%H0L<)hg3KYAXmm*gAjnfEZuHOyj2@=tx=$j{>Ni|vQ%2e}{G0*-g&72bVs zj9+x-{o*g*1jYEDNexuW0P;xo_(wu2Jl;Qch99 zM8M5qUT}}1Oznm!E{(MTu8n$56+VSr8><*(nIC3UG4(M&Qf-=YMdGA2W5{ON4ekjx zrc9GQKl5_POEFosYR-3&gS%5$K0Yg3aq?3l!|z#w3bPqjK3Wjb)G4_3u3q-96;eWr z+fKKfcbxb0omjvcridt&hT6X@dvpXZ=(s%CCE2@=`9^@!itO_Of+mf(g@5eX(NW~Z z&YKkSS|qZ%W6iuD=hv*?C;ii~J5WqOmSKuw?tcNL`LDBlCV%>5)pRZNlIF1&AN815 zxm(X#cW{l8#Z6WZO2`yml{z-23b^ zUj{6DGV$z19zLm{lKjr^lRmSF^8eTFbtzaR>NfxO+l$KUEi-;`NXRaq(70?{{@j^s zFT34LnRE8G_4MFKW0mQp7^ryjD8l)db)$Y6Q(<5u@= z87C`xem-|dpZYRSZ=Le28|V8|riOl6@wUi%-f| zPF?JB{AK^T)Z7`*4Y#NJ#{ow zTd{(<@_$I;8u?w$_pW~mPK}(a^3-h*~h>MA#nna=8y zJ73FRC$uqkx`ScgT<41~tBaiG&TspeeD`SE&ja6+e`eNBob&%l?QPSC`4Ov+)D=8g z&@|Cr^tfSXwu8j66vxF=x@LT5DB@lk$+Bl~ok^+m}q%3C8R z1`;~K=ohqj|T+iMj z7#3>La5M7oU%NH6)4X29Fql~7XILFw6sD8)A}1nQlXb7@mf8&VwYJw9zaI*h&)#)z z!InkqY_`vywJ!X|swHooQx+}~zQ)~st!sUrz946Nym`Co-pf;N1!gR~Ft0W~P+aUe zbHSbNg_~KA9e5rd{q1hk{Q8&=R}b^fP7_qJ%WVHV>sof+chG8xwp}mS|HfR`%@>P) z_bq$hPV+Ud`c9R+xyAba4eRMmkMn1p-x(vbqFZ2Y%$^O|(?tYZZhvF_o!6+|ki7NN zo7=3n%Z@I}*ctcE;o#xKqx)7zPO(jWxRT2~_KOA2Ufn>~9wU9m2`~5bed2k0?QeQj3ZcTA`2bWd}=+8A_Y*YdYo0SQ}@?}wJudWMz=YP_>3 zG4+j4?pdxQ8&w^rsnI`8UddnVB_zzbPYwxS6IJ_%wM;yzCue;xB^TnQg`)|^Ev-OqI%9EnkYaaPnSAF*FyQcEl z+F_xmrT&C)v=gEEi8xNno6g+L-+jWad4_3|zyReh#a(IaAdFS2BuE<^! zm-)q7`cmVxT@T|~-tyn3;!kDQPm?d;EBo8@{dV>ojaQq}W4G#Pd*2SXNZ06DZZK`` z-h}&MF`@i1S7r-@-m6%{Z?z{|%wm5^piIQ{>NRV3yuO~H`sd5H;wc>V`+gd^C~Y_O z$~^M2!b(G?Xq%W-`U>B}n{qOL&5GT=NXsmP*UxK8(4Hte1tGq|#UgG80t$Z?%K`s;a1Wrrcd06+s+f|a&L=Mh8rhV^i+{eGCqxs4XZpvBN zJui0mf?`&s4cXyWTu-mEN|?K_=kx7@VI3M_p~A`&zaMt|Tp|&t+3!~TB72T`h^v3@ zuA3T<6n9z3tdD=n(UG_J;0l40K1V$Y=4vM|DQTbDbgtDr({0yPgPS}o_^VG>bu}iRb9_~^zW2p zIMwg=$p_pW}Ja!l@On*016_f71A*O|NIBwerl}%QsB7S^qNL z=B;9{l;6%5sT#XcLh=I%0`Ue&I}5}uKhSa5OL z+r4QEZ)a=|?qFJLD`)#b{>|;e{fqkls5*R2vHm$x&%gB3%8jwU^G>D+o#Gd~+xsJ9 zJI8mI<@2Uks(E}^5|U=9sqVPq(^?bzX~mm*CG4k85(u?hKY{CS^v?$e@@@oGX7SBk zC%x>zPMJ-n%e6KCa{QIr{!8tG;nZ&r)OTfWIsRQLo7b&L_R`{mjR%$Oj4~Z&D#X9` zS+U&X#B|R0m3u>vT^8w@Hg7ib57pWeis`{KBKLhYTW()hlt0VtzxRdhnQ@lu{ntu= z+VgqFqMc`!zx-U~|K+0x`=@mOgFl|Vn%{3*TxD*)&wgv(>8GV!)5@~m%|HEJ^~)8h z*Wtd)pY2@!?Beok?fbQ=*4-+?S?!emu`6CF&ATt&+^(Yc+xbFw|d``dHsS7^A<@x2{gE*Gu`2V(EIQukx>CV7H_`g zzqahtiYGt2&I+HiUw$<`s&kpBTa@6LwOyZ@Whx~-y@R};Z{Gd9;^@IAH)9?zV|Ww1 zdGRTSvoCkvDZOkW^m~f_rkdbbq5qZnGe1oTi@QAaYRS>5(3bgRqtLhuc-*V~ur*Xh@H z7WJNZ`u?j<{e_Qz|E~?L|91T4&9;Pu51$VIkNR=;zuT4he?Q8G|9^6S(d(|S{c~gf z#Z_7Q>Yrmj5O8-&NIuus_5W|j{X6~NxkB;(%l%hgsn;9by*6hbi+N9UrX`ae|Kgoa zf3$1LIZHZnI2u0jGS>W)`XTp0l(A+W50mwS^pC$96Lfy|&iGdDP}_FN-r=Rt6Y(8~ zt3U8}#0&PA@8|tw>r%(DiG3$)R6zEWb%APme?1#J7?(TjJ-%D^5wBOPuExX!ogl9X zjG~fD6Ge6zG0tdl?>Y2XAp3(^iP*E?OjWnXw{~ zWwl@KjN{gYSrY>9Y`y9_p?w{*{yTxj?{XJSUuZ?l6n^37nX{NRNXL=sgkr?n-f9HCH>n!3?`64|3W^3)M?5Zn=?^qsM&>VPgnZ)ZUw-jB^`Z|_K)X9T~d}H`S`WzVmRok@5~(%Ud4jR3}|-JNT0Mae7yg zol9n4!)eU`v)c2^7c*AOJa%+T@to`SjGt7kLMIgdkvuT>=KTxTOVqa4^aRe7F^>K? z(fj|xz)GHJ=jVA>P2D~hvTIS=|N6uyP#mr+m|M`98Oy^%`W;*CSUi^Hy zw|HsHkr1^>_S0|aT%Nq}T-6!%`yZ^O-dD~!u6(NeY{<8Xw~nWOn*C(qG9&NY#hbQy zXMYFWGyi0IA;drV@1L(eheX*H)B#tG@JHE}lce+Ai&Xgk@uTNUK?PHUi6O>Y19Jl;o z)Sc&FGWQ2JhjFO6Ihh|0x>jxA)>~z~W_gfo=@e(yWBpZHeTrSXj~JFj++JFC;X1ETSxcs zhAxe;Jpb>3z{iN?AN)4jvdD#Luke0R?S7rJlx2tftqJ!kUDHcDxE4DSs|m0r`lZ+p(Sw!8Zl=;?}|esCoA z!W6D8h7YH*xrVX^Z2x-U3)foH(zOO`J_}z~Equ!q@b5x~T$$?cZ3%&vb2L^dy?9_= z?!D{YhgV8JRBp?11spowKfOY~g7ay2!`CkU*{Ky_ntXR9N?+VPuFW_1VASE&U;BO^ zo^)^OmDKYKS8ov7w?8WX=d*v4ZXcetjeFwq{IK7Om;Cdc<=6Eb?p{=`n)+}<-pRM` znp|%NicZ^=QJFCbo|zq_$(vJ`L+@q3s=9FGY2{j{Z$N`qqwN z%JfuYmtU+mO1b%J&mLXG+>#s3@4WPL+odlR@(gqLYJUj3yqn2VLr&`91>FxCdarD^ zz7sIHCVuCwzTqiFEg7TS+*Z&knny0KmF|1l*JNzD%)zzzuSD++$u-7>Gq`G3OenB0 zwP1@#-tzoif$Qb#G5XteR<~_ipX`#_8#eD;_`^uyYqk7mXT5$Z_Syt=&?NhW{iU-m zMN~;Ia*_Wv>rln3LxC?0?zd++sm?BIoql1x(~{!z?QcbImq{*~u)C>$clH#%qFuMw zTYM>H*>mXVqXYX^e~8<>#_HSMNxLqrIqlpLb$?yPuddZc`+ombl{@69GC7l(e~mvzPwHO&`X48czu)+N+M3t4;oY+0SM96>E_^xn;q-5F zozv4ouNLjzz2Lj*HSs?Wewm%v8T)weAUM^pDQJ6%~7yZy=Ie{F{%!k#wf zZho>ba&vC@npN|hqW5TQdpjwA+xm#yY{YoAJU$_n45NajUdnTZdnftm7btCZ@HdxM=ck)_~&c8 z{6?+qf6l#*U$AK9vSQWlMXoNFZ%t}X<7G+bTWz$ZQQUW-ZffF6F7fH|Y)g5$?>aO8VTzT_NS7I`>f@U zaeS1LKAXrbJV*G2g`G8L^3{FOEXVm=CEhpBcV*;lE!$$y)BN&shJR+&yV=}&U+Q{J zsB!5h=FDO~`n-f~-h6P=f4!uyuTpW^ntF~ex&49jtlYGW@5d`$mMp&aX7ln(e{*Hn z=NjJqvv&H&+)H*xpKqD#H^VRe^So1LOMkDcOnn zojkWF>li+* zV)4S3Ll$!+zWr_5v`IrSrpBJnkNs`3L&2?g=3JpC3VS?`KK6JK{NhYVUGPqy?LRhc zn##q;u_vWZ+N2|>LUjELiL-MP^7(HkYguqzHJnxX$oT#=uUwI{zZUZUG`v*4uXplN z?{94h@f_Ql_Pke>OIP%=G^mYwzS2@5*4y28S>?=+yE8<$H$N@e-&6F_>V|sL<3kI$ zPjPBr<@x$K!=?4#;w=ld$~f+|k$U>)fzG3j>zUF1+oycawoEX1U%m5>?D0=0WjUVY z&OCkQ^NzQh%xo;LAHLz%*^+!Cq%KS6|2&QRujbElo1Jr3?riHD1>cH8A<#npEmUw*Cnr}6SrDbId?x#fNBS#kFI={Dadl^zIbpC278zLx*t_CS-2Ji|XCKe%=3&$Z3p_^fS`xrUZW zw2XX#&4Y{p6AiB-j=dim(%hr8BI`On#DAPNiP!#VpY6P+hW&;Osb`zc|4`TY8Nc`k z&++~4AJgv?pRZVFIlb+CmX*^#-zSP6ll$+iUounYY@X*Kz0=zBZ(h>L-MrxOVwtt4;~VB)=aam3Mfs?KJrg!>HUYh z*FQ40@2WRH@Z7LJ-bhMLhOy$GX=2}QwmOEI`2vQ2rKT|d<@+IZ-};E;gnWkf4K6F? znX+BNSeTERU0cfdQrT$>Q(yeB2%_Pw#kS$)J_U(6n6R(Z2qM7iT(F zo#NP_C)pUT*|nX2{x^Y3st3ZlCiFG*XBjtGCGX^%GL7Mh=BE{3F4(ucPdmvVA%1L6 zDdQwpd4IumQ`tlp$9MNA6hGPMvsbn;p7X|1BWs^s^LC}2GCpZAH9PBA$0|dwQl=f= zTRwW;DG9rJqt5yE0fvh5-+~urJDl-6x5~px{FbKMM;Gx2L3U|-{Qi6~de!m%*o&3> zdVWp`h+|z)Rw!7a%=oib+`9b5DJ_hGNSB8eAD_$@tt=O_Veogx?PnJgQ`@LT` z$t~4(k#rH)2xkB5+-TOZvTd8F!_O|oqKZq40~~(5JH+_i@Ko-z42PE=VpZE&cP9ID z9N49^sl3Z(b<+NcS|?m*8hX{d`eYel@^SL^&kCQ9-q_zi$9P4BeIH|{i|Of&{(KWp zNZJQ)$$#qp^EZouk6A?0{u46XJe#_c8_gESEw!8XC7q#dS)I)9uMaeoF7I93amA?8 z?BhhnE3syws_A@}mLE&|pk$LWvA|f~n|-EjrLcmLU;fX{ z%>QrlZ9P>v>qh(3b5CaGJ>NCk*1F;5=5KTT)=!#lc$34YNcPx@mwOzig|n=C_SRI) zXxZ7hLQ8x%#MJjOeAe`x7yj+c9htHzYS-6m>R0Z%lDCuRO5r8xhoH;Y*{g8O_ExX1>k-l58u#BXtv+xAo8Sd^_dY)0h7aE%9Gs>MzGC zb8OeMa|I!GeJL*|AD+I&@1*RrB_H2sQ| z9k0{>7TkDe8p?T2bB=L{D+}Xq0miC`ORQUJDm06l%H`hMEEVKhe8ar$5XWBL>YvA2 zGM-*Lyr@Xz*yGp_+b@;Ps*QeRGsTr*uKcb^t6I)+9nvG^V2Tt1h89dk?K59sxGB^ zXwjRCUN^R@%9~~L)pnM$tz{MLz2ub7`~A1-YuDqu+f84ua@Aa@S9PuQ^x?Xb3$-;% zBkpUnhIiNYG^~pZ<-L~m?QYSFO8$1$_I*$C_CKnURO0@AuHeP%fPF$y;g`N8&MhsE zNZy-x{n{0^HIe3Tjhc3v{?2n;7;Dks!BDfUwz1<_hPcws#gS8D8RE0uZ%==Cr}d-E zuBP1WDc5xy3U=%;vOOm$75%t|<>0J&=cX}M=t(^{{cY#M_DxQtFLyTs%VOC$r41n> zdyPfZ8Xa|g<1c;@_4CnKZ7k>mIs!*R)nwbDBhD+86q&y5i!IoD>!Hi$Y^S~Y)27{< zTCy!EkcFW<-FuG2o@ix_u&<3l)_P*>Ww`|_O1I`jgz4sn7uQD=*6%n_<(w(gx-n3` zm4CN%RCK}STc7g88#cLd-%j()_TCe2QhW4#-u(Uc3{RHqhBIkx$|xXiCftE>DkPyh4jo$0;9UyIxq+S+H^KmJ;Ecw6+w z%&?MeOUl`Lmz&AT^M`*q$5Q!Kk?YH%7ata_?4Eb}Xk+f?2N(2jlzEG}wuenyebns4 zme@!9*=2W|+7HhPUtN7~o$T(sgX?08Hs49ul6-sJi`s*WUPOw>em^^F_S3f4Pp7pX zX0_k@*Y5ghh7NP@ht=WRGj!VP8W&V#T#H!#Vol=hb>I^wKQ4+0m1U1sUZm+Ok$wA~ zLY&4H?mn5WY4LaJ&$a*MU0S&2Rkc<4hmRZ50!!AMw*9^CnfSNOAAYSfogZuSA+i4O z+WkkW&#sFu2$bIud9Qf){s)KOwOxN*z2#HRF4K<3)#ALn^E@LXP93_qQ)=zu9fdEZ znUo#;TGSpkPd=``qaoAz@hXEh3*SVmyz=QbD_HZxw`aWFc<#cAS@%SBx|!Fm-eDWF zN#mA8Z*p#5HzjXNO{~bcF7u1^^(%%J zjeBuTZ@iN$cmL}6%o=6+Yu&SR>k7{mzgV?n3g_P)dQHqd7woec#8TZYEaVn-<=+X*&}GSr*u~c*H9So>*}B&VxmpxfeGr?o{gw4eEco?Bh#IhN{$G>hB@FgPH$? zFCQ@}TqbFinr7)L9Q8{tvTKo1^7*|6ioDg`BOlHd@GD zJtgp9*NfUs=3I%hmHwRD&bUTD?wj7nIeGg-DS?BLn9 z{M_`Cbv%N*AOD{EHIYARb-;Hs?fuxq;);W-nu26qIp%fegB!42Uf1#{W8Mh>i-|gFWbK#oVeOh@XEApIg2jm1#0C@ z<~YTz$K|8Vsql(pl31X-k>6MET`diLevfSq`mO%6VsTQFYMi$HmgG(G8ZC=XG`uT* zJNx?2D?8?|ds?uz@8g!BclxpHzkB7rwHQe*-~Tc!^;VoyqG5)9#qwsGN44FOr#?hE za~@++ulLLD`6%*egWlVd#do$Zi#}WYSLM~W1HtdIt)5O^bi;q+q~hX3F?W|Ie_Z*c zxM0g3o}-0(FMU3LRN1{@l>u9=$&7t_DpY=@kj-Qid_IDnC@RR3< z`jiTp`sO35(+(XGzM!pD*WdJ?_mFAR(GSlhl0=p>w#;ijewjy>Z?aB+goxOS!a%*s zB_B<0s~;%+b>{QQrS{vKuHB4hDxBUEc)jzdUwn&@hHd`OostT*&)6kDr#H3r9C&MU zYgdYmYTRWl^`~>0FKo_;c3-`9XW)w|V(M#W%l()ov(0W}(yvD+_dKtAZZb7K$~JZN znZ;GMyi)U<&VAnE&;0a%*~{Hb2lh*ZdAxkf*(YmY^Z$=H*S~i6i5}-lU(xr->>~*IsZ2;sn_6aTjctOyF(^+ zTE~9pJGuq#9XWN(fA~Jwr<(l#KVgIG6(NV`TKA$ERK3;(Ke0GqF(!* zXLISl=J2Xv$a9Qc5F)sEQGDy4BT9Ab786)zi642-*nBBJ;Hc0Pr_6pmryY+Jvvy2X zF4!8;{(|YF+{S}*t!^zo%~U9KsYIsv1;_4+NA4dcYZO=}=t@}^7wNvR$yzUe@OkCu zA9in=R3}(;B~J*y(<`+nTc|=~8l%Lk=nb+rS41Uk@k^Fqh+-CyKK9}< z*Aj`-9t&b>G?w2tYFHbzBrEB!%B}ru1|?feH8~bMju4;Qctp5DxA9G_ctv5_l(zz3 zXRgT;7WH?yyHM_ABm>X3g)CN|Pu7Wj{=`>O#5F-_uJ;cU!55Pjg)V>Zb<`**QtQ*y zIigc|6z(2*{NVcm-*ucS`Cpsgm;|j^u&418S667owRZ>d4ro2mxRsxE{08q?u7?6& zO`G0`JY;C8ICAC5H>0VG)~id;d%xhm%jzPrQnPFEmE9{Cjs$a7tjl)MoYKGT0^^jG z?(QtRSc2O>mCBY#2;X|oVe!swrnao_7E2{R_E^`(lwH$KNjB7J?q|_Db4ymVtr{xxXIc8>Lu;ZKjqASaPrSeIzEoU?Ik8P`V zZi#h@_iD&dnqc)(E@i*)f6E=llaud#Pk(#)=4UOXp9O~}SS&kPe)V$x+^d>5lfGK8 z@#IdK+AQ;Vw)=Fys#c9@ykAS}V~#6Fmucz0jJNxz z-PgDw>kaea0)wrSmsh#mJo)6y9fL1(HaI{3RDUgQc18PQGv&M|w$gKLu9`}3U(UzE z=JhzQDot&EV}07Z@5lcv5%zR{nfA)M;qTv?NtOz~FMJEUQ9SWv`+H&A_BH;g5B@Ly za`@#!!}p0br@y}VfBs&*$<0YAmGf@+cTTKcKlyl5O4`PCv)0XfH&IfMf!m>~(eeFY;G}7r?6}$J_y5FBWde*FZ z^G*5Fyxp@kZN1*E_;-GPS)IexcU${R)%_%%nT3bWJij$@?=}5veUsw5Lgm*u{OjZNU$MpJ?qz7@!y(QOXR*9zFX7%G){H-WZ6|qX6WZ%ea!#F#=Oz2=p^@2 zLpH7eTUUQCsaR{a6IQ-AIU8qPKf!VF59E z98{kYCJ@SYD*L3hYm!d}lcw8F4Kr&^0fy}tf9{IqaamN-JAuQH>qiVHvx!RHJC+%B zwTd~fvR7Y>GORpWH^IB(ni^mG0Sh&?^#*DiBemBE7VIkTTqpYB=WprWixA)lxspohzwhXPtpvYa&zAG>y&Gm7dOukS*@4aV7g?&2fL))Mfr}JXAP9B zE;N>|-(Yr$XA^6lbfQN;r`mJ_u4}PJsu?$BPpv2vj3}M>*Ri-hBSY$Jxw-B7b!uU; zN|uSL@1-KXcAh+J@X}_h$~X4b?+Z9;?rhtVeCVi{xQ<=MobZ?}^KS2+clxT!{fZvJ z2iqCeOP3`d4!<6qS7y67d&A7elW7mquX9CMvz#r<*?If>7Bd0iJ8#2%v`=6Cbs+K8 zkG$%m29Y%;cX+kSe7%|U!i85K6I`5Rzx7W4A&+&UYi2bHn6{rRD%_YJ#G9}8{-V~W z#O)8?e(Rbdvb(VNYUkf6jnj{D-Vi?O#y)5JktILg{gaY!xmjh>=lxA$YQ@HV>hIRI zv|4KZN_&)dqhN*=-@3)7!t3?lU9c*Yh!*lWU^dN<~o zqUN`C%8EKEhikhpYBIm({k?K=zME4>hN^hW_uqYYuW%=C&EI)f`q#0IW_``C3+`Qr zVti0v{=Mn@tFG5)_cp9p&X+5+|Hlu}wWTp@zkMlNV%T{5A(OaCeB7N4SuX4CviO2e z=e^=|yex6N?$u8DYd=ydF23I(9scLlH`4`~IZN`@3%3|>Rs5@q5pG(T&+atIdp-O0 zi2`iv?q2zrfBzrPV%7)#P2#Jq!`>cv8}_B5AbZaA?oYon&z?VSx_@7F@3o2hW>#$6 zmHdUb{`0@(HHAMX+Sh!Xw!5&In|Hn0_8l2JWX)PqHmY%W#2--u*lNHoe`kZ0kG;)48&d=GE``ZQnmuoy%Ku zC-&q!clKo$K9zlMyDq-nXXDeu|5UFvg&O>j%VwHgcI1VN)3H|%tZSwi8n^XzmvwVa zn?76G?fQqj?@guFlcpS6ap2zfHM5zgop`|;oRQ(9)WWv*NaW$Vn2&ka7f-e5k*Gbs zY;sZla?!={n`f`{s9{i2j4TuokYc-DXrB`xWp>sh+3nu@_zTg;r;ESOxW#PVu6-{r z{?biO@uQ9HOy7e2(`DUQYc_4UCb;O}(YA*dCQf>E^wqrIg~rD7#Gi}U&8V3fGbenB zO0s~0lw`D3yqUgE)g^b?>373!T%2mLF~IBCM($}7=4NGx8d@bxdDDFS%BRBe)~k-+ z7;iGR@r%j7u^egTL(4xo^4ofAFu9 z&XxMdeg1x4xbfT0BK@;dpFZEYX>Rua<4^dJ2Bt z?#XznP2)bF`~7v231?rvzrXs<^HY_2=XRP|Pd}Disj^Wr>!@dBa8QPF*)#!D#m>q4 ziO!4R*{f~$?5@-!mXsb7?Q<3~@;#HV3_HMiJ2m0g^DX5H&4$+EJV!!4PS zr;d=(=D=$r+8GEPh*7a9Emwz(dWAjd;wp;Pi%FgWFsb0K#a=F`%9ou=fJD$DYHCsJg zbk#Ns&F@9N-l39SmS>dyZ1UH6-v8_FB}S&2S@(8LaOzNYK0$1jn|(~dLlvdKK)wA`}@1jmY|{;*|TlF3EgjA{A!66 zf9l5vG7;+!pZ;57E3f}}s)_CVbH1lb7sT!7(uke6vQl^PuUMNs5lZ4JQbN)?>>{>Z zZ7xS9a%h;aKbdtPd%`pX{^{MU7EHEsz3La3*?gOGB%T_%*k4zCWC8x8Z7tS}6DH4JEwhc` zynBl4YW?&pt8@28O%Gd9u6^{aUuN$uR)5Co?N`qWEjyRKllfxkj;f>aU61sO&i`za zQdldt=0@pyou5-=`9dXM-Sz)FH8AXdlz5l2-KuRubD}k~1M2Q(zwVB4%`*6N>8bzE z+K*E|t(bGWcH@cPzu#ENO@3bJ?Zx`Vdwz#MuX)6@;>)M~A6)92UzXkI zcKB~9^Y?{bKc}DFovZPG<8yEQnV9yuecD5F*>~&M-$m5^ZG8D`mO;sZz87{12R=VK znBTf#X8aQ)-vhaI_m$T?7vA7D(^Rvj*Qojd*U|YCE=?Cw`)jm$;(ljycBShA>jbLY zy8{CJmuzv@^!3ths`xTNMzc@Dv|-YoseP7vvllq0UJ3W&S~}I>Ta|<6Bri#hC24Aj zozkpZ?x{_gCTz*LZnd(8rl*v8!V9h$QyEH{miQfT(`*uYz^~G`U=@?Z+4E^`=TG$+ zF|QGEf8fX3r8PkkYzM{}~Q%)N3uQOf%4D2s?TvVy@BT zv^ffV0#a$O)4K%tAG}k||Xz<9@$WQ^jKU|5@90SJ&Z$!dJ@(w&JTk z^Q@ZdvkPvXDUot``s-+?q>fl|-NvL9`kA*(zr>#^-fz1topIY-27~PATX*WUgr{2? zZ5B^wJSvyoVi+i~TsqM#o}1qHGNMgr8QYcV zmP;5O3%eiZExs$h;LOfk3*YK<#{bvqKH8yFSP~Y%@LVv+ZiVKz_p@?$F;te;It8U% zWKWB(z3X!I#{91pLJwAa|5dUlZ@r~csfX$Av;NB~=cvRnmIvEh+x^bjH2b$v?<~vT zM_zi)J^txPzm|{fca6S;_r}ZHijC6!R=?V+s$V((#G4L9+0T~MQkL!(x{uE+_#kQh z>CKAA3wP;kcRPJN^{h|&p;eFj{Ucs@-+i?$;J8BZT+4l{B~L#8YXAMaxvgGvM&U}8_z{r|q=HzRe*3Fo@ zhI{K|!L^^Hf?rAXeV%hF`}>;!mrnsF4UP9L_Rw^)n}1QNL(<3Qe4^g;n-6P`Wb|%a zUOY?dH?LOgDz*}DFGhKtsMT-wtG-^}Q|*xH`e~wo(zRE~@qSDR`j0O~=sy2%xM+*p z^V)E)&M7vAnm+gHEZFTB4Ik7h+-$ixYl+CYi8rH#E=yFFbH@trywkwn`F8=Q;=<4) zQ9BvLCO6#p-t3sU;}%EvyLS^L)X%OKX9~0L*>L-?K~!8^Wn188`INa)<(tfT12?`? z7Ifz5yz6+`j59f*NMP|nv$oZ}26NxLoqodd<(*T)EG0#?L`U;ZJGC`!ckMRb)sBnt zD1I|nNkmq=;GjWe#8%FwOkV0$-EZb|WGuem#ZZ?!`Ga!J9^nNGFA5~5NSNAbd{NsN zbg1dJ$*gU>K9TE-DoqNumhIUe|MA_wpc|WgQ|9oz-{=$fdGqx0m~}E?>hJhgtnsH$18; zeUP?4&H77=U!w1$e;Xd9?O$lv$G=;<>~U91+Et#OdqPTEjv4Rh^EF=-ULBLM^JaY7 zwC9b-cJNH-+jH*@qrtB>0h1_qz2CNWQX&O6-+OXydu+AYJz6i^dRJPK`MMi@*)=&c zoQ_X$T#)=?$4zbvn}rgw-IuyDb259BlPrGpNr<{FJ@dxSkd@mjVn)&>nVQoNFD#z$ z{k0#%H^VF^lS5nP3I(2a4Q~D6S$ywPUAeB#`Liy`chBI&|aeZ6po)f&zS;R`e8o+|5m zeRba34G&k@KS(;9_oiT`<%;c>Yd(ffHqbJvJbQOTntkb>dv}Tom_oi^{PeKk=rY+I zac@7I+aw$Q=3V@!*8NYP{*n`CxlzA&*Ymsx=B|UKGe6#%&~Pzo-EUnxsbd#5NneZE z!Yuyw!0kfUpe}A}E)Ux;Z`>07-mh7l>%Q){tvtUp+x1OZYBdIX?s9$j@wDpn1M6*< zxm=UX%l1U%-}Iepq0!N$uV=r=B4o%U$`{o3BEjiJT` zSMMhGHoVPmn|FP-wNTgX!>qqoF5S+2E{kcFoBWTw-;-J%?Yh4(^!)D+P2FYvK_8x8 zb?@Q2Bd0gxPV0sO^LhF2*Z=tS%64(~kFR&LV{#0vHp*WA^Tn#rd`-rd=c`Zm=j^iW z6?EI;yZLmVoQ{>X%TCKZ3%1THwca$_YTYgC#AWhfYi@PEzS?*Du&Vf5xwS&G%N`u9 z>c7V2`sDGyrtoaWuI3m=|+rdMr&HM(^di>%ioLdZ-puFsa_lzcvDcXJtaHsidHL0Z>pMa= zipgDm_vXlEo6{ilNA3jk{GXe3e6;^xJdq!K|9$qnN}p+JCy#%sJQMTX`N_r~{V$(y zG_rAB&p&hLKL6TtGo$Ro+m^1&uB}_=^ZeM!OD(@5qV-M}oQwH4rQ&qaT8xFJ!&x98H(N%7#bMT^HyYlW z8)vSty1(Z3(%?1zuRb4`cyRHjncKQw{H)ec(s{4&)t{?mrEt<@&x=Bf8_rrAKb%@q zEE~h`Ip=<)EX#^DCWh7rc^q?W&8)fREZp_d=jSKGlXt|k9%O_*m)Lq^OUV;qfnUjw z%U5pqnr|#@Gbw))*VVLy{Kict4<<3Zk$zgdUqHPfta6!(pJ4K(n{A2?pZC6&OmaVe zD7rVPG zJwNqdA)gz|=ZJu?y3Z-LimBIkE@<6ot7`h%U$p(W=OxXCils*)br_RET$UdBInT@} z@6*hH0}DJ%E-nso%FLLeyvQSLagf#A^RKeCS?`5j-x?FIDX@uYchtJ#uX}=DFRzQg zRKqhZWctFkbyt7RJH2_H{42AS^QZrOBy%TsW?IZ2oACMV&p5;$PD@>N_oxO`|a#&5>Ij6P&Tj4 zK2SY#@@XmMJH}lN2QMcZn0(1ddHh;nTFFs|)9V|V8`pcp2>cXI@x0H-*Q@@?&i=R1 zSyQPSAE&eYi?8_SE;8*zgIdAC|8i&lPdt#{5dY|>DYN{|;`#Z;>N#vjPlYW!_;Fs_ ze>q?GC+j(K3{BQ#N^)A5wDrwn>rFpkd`5dgn#x2EmYTSBKgL(fXRQi9U9~jzqmS*U z_17vGe_YdEd@5?)%`>lK!*x%`snypvKi7{iD!*>~I3kSEM*nmy^V{jE>ie~;tjZf# z-pSPed1d$9V(VkY%Gp1+ZkDlq?sjFRoIz>> z&Yv_7jg{ltU-K_u$MJ?Y{ZpUL-kE!9O~J0mf7ooTEiL9RxBL9;efHBD&=^H}<+Svl z{6X^=U!4D>bN-Xg{`gN9*aLoE*d+6JhuC9>p9kW+{=QkM_Tg?`|zvASYx4~Rf)_&r@dj3d^{ue<7QEh=Q zJUOkBHcLf~f7GPqm>)MSl2f-%{c`xcY7fd@;jrWTeWa%_)$>Cld zIsL8H@|p8z^RE2QB?}On-sp<@DGWcg~;Sd9brz)S%|t zT(2TW*;JOEbx#<~&+gJ~u&ri!IDOZ|(kUxSP6gJp-mt!IXlOmTV=3QR!?#;z@I5!V zy0OkQ`1_e_vBzem&f_Y*Sif=U%gE`AnorePT{adGsPeo2sLDr-p(`7d0zASm)LP8(}JpNlkH!5Mtg`_l(ChEC1;kk2#UW<5BpYGcUtG0dh)hS zYsH^4c%=sKSXUC|FzKqNXP0}rsPW-SPyOR-OUn**#9W{I_PMQ&NPy6*fffor>W&3#o_RLK?oD()Hg))lXIZmT}vHt$ot@quq={@7S&te9_m zA>6OeD$91opLJ)r|5@y>`BWEqzbYoQcA>$9^R)rGr;ZlR^ZU2M?2O~9x}s%!U;Q&_ z{>pu!YA64S$zI1lTzR~k>FoS7l1E=x%y7JXCcS)W^Q83RQ5vH?b4opk!AVsm7;$0m`v`T-g%~Fo{XmJk*C{io~Ou1-8z1*PAMqp z$AZjHvvNvpuY1T|dc(spr#;alf;m=w7k41%gmX{4n=11JA5AeapUgBRC?nUyvwQMK zkqfsTE<5n#$)+0yjaz3;5i<0O3=+EVBYeG*-64y{tzEwI74_LW?wbC2;(H)M;#;Qx zZ~PvfFMD73u0CKP)x&GC{3BzVr(Q{3*u>v+lS|t7SpO1ICcK_Bxljcr3^*(iu zr1BY~DAjl66KDT!+vZvG_0xfO3JX%QUEJFbK46ZC?}=H*ygmBx?%QrNYG!*_tIY~~ zX!C}>`E%Fr+S7j*CSHECBf>XBR8p;XYp3~L#?>bB+ia)*J+b>O>-XmKIp;R1?|kE4 z_xGb|aK=V8LssYXlt1-%*8co@miynYyW%n5*jv7a-Ppp&w@%UJ==uA5C+W?f*>FGK z{7bL0%Gn3eIX*2KZ(iE1`4IT+xT#=qU}_3Gd7 zw>6CV^^Ado`CHiyj^Ntr1MO}5WIG@3aQm4tbCdG&i;?g6rQP%!isYB_FIjSP3%k&R z#fhgF&Ped~_C{#`z9YcXoZqTzp-twj7inxy4w{=B z+a61;X0Byxmy&&c`ktazS#Wz8qr9%3$(maerUrvJ!+GlpGkCB6?K`+# zLcTLF)nM;I*Td!I`kkJIJ8ua#&wE`_pu40c-*k1_64OS_h-X*Xbz+(HMzcvuCC3C8r+wm;{~n%m%l2NyyEaq#vT&1QkDU&SPv8D#dEf2B ztcF@`CqFsHU%1UFF12&RJ!_>yIr5W}tV?(nKEL{G9{+A_zIBg}zLHxjdjIbJMO%fx zKW@AIut~sF{=2kOz@L}1@les<%dg9sW_{sN5>IzXAI&`cHH+QLu!8YM{P*a0ZK8*l?8x};@aWlwgYKvAE>w3> z7T?f#cgMqT8y=p0)+YX%+0C^lQ05Nn_sMCgtQ@*)9<*te)yTvZNLa56k1m@$u`*>( zN`ad7GY^>M)6qcTr-&b|~1<$$cd%5~M<2Y|5UhVty=4kY_yGQb( z3JVU!tedjNT`}ud*#rB(pY9jmeE)O%{lCRg#-E-ZWoNtoG4K1Ndwn}De0cj;I_mMx z7vGLtG&t5a|NfsI-(m%qv##64)5Sdtt9MK}{nWG2I%ZQAo7r2%%`>=H*r?2`*Slpq zcW&B&UHxtS?b>$l*6*;4*_g%l@4?aSF=f_K$~pzTg>RN!J+p_8si1y)wdU<5Eewon zl%G}ZW;m&S-{42zy}mDHOQzl3a%h%AzWbIgCJFFlNP6Y8`|**pj2>LM^WnGN{Me=2w@`1Hq!Jx@0mFLU3@@q5C}ABuP9 zzW!f2Q?9C9@BjIi-;T&tK6`(Bp6=Q6r$3zjG-bcG@dx$P*k@lOW?xA>Kf~qxw5KsM zQh$BjpZd?ca>btKpZ>>G&siPq`FUaaX`Aye-^R?3Ic6Ka?&;Nc$B!NUK9gPU@>S-y z^Agx*&R^}!cxRrS*zf+smu@}&?lens;n9inb+=8;sh$~mIdnpDTh4!$pL}|*KUiF9 z^X7zn)k-K|yUKXcs&|~OU0U_ZM|biSths+uz%whY#c$Pyso5SEGW-|Y{9c)E9eW`{ zo$vRS^e?*KC*N>0d#h;e+bwxQr%YwBlis#N?#-bOPh8+Vp3Rp2s&HGc0`o@u+Pa(> z#xLjou0E%fYFzm*&rd2>Xya84?Q^c&Cn}40wPiE5Jbz&J=5W_k*^EuTNnE_1nl^2F z;{_+BrMktf&3}2e<7%UI`9X=>In7tTMCIf^jSgS!vT4GeL+Z@;F5Ko^{7CS|n*IaN zCdkTMNw~u#!2dI=^P-_~2DgK?OK+H_{8N$cx+P~16bB_5*l)__-f(Zh$;#)&H!tx! zU%1ns9nv&a)<7$5Lg^9p$#Xw)I^52v6u8)5=fCkSlgi}R7V|p`=O||fB2YNorNIsNtjnUAmjtheKfeO2=F zcXIZtBLA&(_@~#;|7})rXwT0FpO>F_{%u$P(aN0rQTOWa+aCFTGk)&m;=g|*UF@#k zuZynqcyAwOZL>3W@*RE-xn+$t4s+vGE$jJbZcz)Z-fq>Ox=;PRXn*rVVRwN)M?U5S z?2Hb6Hz#EF!{hrzr=354_f_n)>cXjy4!&=y+HnkGtpWe`TptRJD8OKBk~k zfq6FbUtL<WCeaB@cW?l=+Y%Gf0c=EtEsR^;`)mmkDRdDg0kp1-OchT0K?(|ZA&DF)x zt-AK-*P5let}ExL>id3H{lEvSx+sQ@*Hibu(|x)qz%xGde5>w0zvr`sW#@hSr>tFV zYkkFP)qHikxvp8u=2o=_E!nlf^f+(mzOUjJcFNv(?r`(8?A$+p&pORtT32s){rB&) zt6CZV9#1mSf2ni&>x3HP?}smKm!Fj>-?e+soG+k045TMx-(|k>KF?jZ$?&Sw&pyobNAtrh5&hy?+Yjv% z{_#{y{F=}>pFvquYEd=6)@8e8rkZGe5orx@t^6#>X?4<1F9=bPnl?Bdt990 zq*7%VwZiG`498m;iRSYKZ)^fWiVI+g!hAJ2;ktMZ=|t(juq$-UwGk+_9v4T-$# z);X>%EnaczU*RFYb*who*FK$lpFZKz#J8K-Vx|X|o#nYToACte4$&EsTYXRS1o;2s zc+kodWnXZ}ZS9wf*%>F}Ma#bOXaq}kyy6d9{*7x^_RqaGmt{@Dcj|l-Igp$EEmOtz zZrTIWsf-r4rv#l!?LAPMcP!|=kclkgi&dMfYnjUYmcI>cK0I|D!*0IN5-~Q$TjB~| z*F0Xu>wnBSXzsBgqMhm$azvHe=XS?$3@|Ojd{Ff$&yt9{iJ*h@c{pua#=2w=_ ze47ON-v<1$?-F(>)KzbIWc=;WtcAOd%xC;rdM78?FEq;Pd^qbL%h%DepIKAnJ`0tl zZD0R&kBz1xv-{(~>+^3coW9&{Y0c5FeOrEBubjHAMLD62QDpve;nFwdUw<>{*>y%w zeg5Qt_W!l7HqG0ZJpYAG=u4ZUZP70aPyVVko0}RR;9e`j)-l=eqeDf+m9IO_a5wDW{^|O-HUAhPUv;-N+uM}z7=(t*HV+6PrAH^=&%9t#&_G(Mm zH2>#HZr*!l2-W#SaEH0i@o!Oxez9!o=K~L1+K+K$RLj_&WM32d<4S=9bC<{UCho4o zjJw<#-kno*YFQWFqG)K@%HMg+EiSH++rYxrr!(Jv%Mk^KPgC?6d72l!S2lFIUUlr` zBej4iL%&P@yVMG{dh$$uRF{9@)P>RwnT``9wszKrXe`Z`t>WY3X6Q5Ptk$X8wgnkd zH>Kp;I=*++hOGJRkS=_A$&GiS@89!yxwd&0-pw-8mT=2leT<94M$_5p(%a~x;p>&p z9e%s*;o;b3ey(h%G_mVzs@;1QX|HAu&pv-}>zy}NH9awFm=AMI4xU+h?Zdmev+Y+d zy$EDj)$2U*MnBULo2%{|2^?SN4{K}?fJ{w2Oj7gnU?=vr2hLu)9>x` zj#a4TSM1#PysGrTtP_71KEM85|HkgVzc)7KsXGPTk-hfiY>O$=vOE5=c2REWH+i*} zWmN9m_qb?ls`VPqg9R7gGamhWL%3OyZHK(s5|sx}RxoqE=t<`hTN@>5%og@mC9^+! zO4H$Wr#~`!d*?Kn<}@Cr0KS`yM;}Bfc{QBSaJ#=LkKaP)cIH&c14r-QzE@i0 zX?{{Q)FM?^|H0+ER~CgX**w``$M0!V67KSBImZ3KBx2@XqvYM)ZO1CE-EF*9k@s!- zn`2uULZ-&l@tqWKvo*GOyL{dRlf9y8KXxac-6a`dW$2^J>AKo>Tj!^xYm~0B#TeY- z%{H0&Qm5l^>+ZvCOP2ITy^b_jo?H56dEeU|N-l?2NfsU~uwN5ls_e$>)*&VOGXRzkKUthVqy0iZf z-(Gp^d->~kWPFzp-r#m)Ki@i4m7^AG1=u-^+P{>gSg*U;C;cnUN%P0cuhvqJZ~Dt> zTR&`mcK5HSJpXi_b@Qj6=*~Ny7gM--e*)Jd7Kak60{b;P-tbqx4Dz{G)V|?L|GL!o zVLz4_dfmGF;z0Xf(d~!Z?EgP{eup<(sB3lI@m;eEHXdd_8@l~zT})y1je;3cYWIt# zJM?mjAE|VDm8yHgU$*w~k59jBzh7>Pzw@u$ztqH8w$vA?XVzd1~v`DlxmOw9Qw)^)!g*|J~XBpd!Y=J)K|)4!ZOkeDSI zdwT!!o_{ZT!cNADXUNRXv{J$o`*bgMb0&Y!zNMyprPdQT_T1fm28u5CU0oP(LHNY_shMqJ7rlO z%$pQ*DBhGw;{VI5%~f13RU)W(?iH1gc3=5I6a7yrzCReJ8q4ijs;Y0vpj{*IaR ze)9R98~iK(?~a}%KkfWe%iD~bZCuU0=l+q{WvT9(&VMxWSas9SuLq0f7>mz0oM}Jn zTJp>AwB3`_pTC+RSGjMB@v}Gnr#{c{JGb=bg&8$EbFIzQk6evh9N zvd*YG6;rg%|7vQb#`*S=@T=~xji&}KPvq+U#B=7X&x^(Rot~TX_{peOdHm|kdoIR3^L~C?vEM(0ZDRY9^an*ceJ7hvzCT#0 z{h(6VK<&&^9?5|CkgHkhYaT?ZFV5aM-)u+1%d;J7o90&ubxoDsptfN17oS}QPqea7Pt6TLHKPI-Y3nrg(BW~=7 z-Et%0qE=_Ii}l5qnz#3hlwW4mxKY9$_oaNorgs60{5L%|(e1m&)3{IaqSi$Xe$Hh# zCJ0q5$?alhS$g@-HqDN`tGDvW>-K(nw7@|1qj&VLqHXVgYkYG^esspqF58az{ppKc zT}+3{4?dc_&|G-#Tn?3_Dd~&z4OyC_cb;=S<4q8n#Rr~WpGP&|HacExr>fH*t0ZO##4Kb z5mVdsM>UEn8-GqM^Y=RN@1%y3RIZYzCJ)m$y`0y2+cr1*6c$Tg?D*WIST;i~>5WRU zw@72p<0P+aciobOQLW1iO6oF zm8;54`%cw_$J?)1zjsRVr%!tF(aYYfi9K4vvt1^-;Mcmgo~gYsT#=e>B9UK#(|K=;tq&*zKouB)%hoB#L5tnlS~YyR)7 zJ^ShB^Jh2S@818#qxtyV&f%`S5qki%d@Q-xp1J&Ohb-5mT!E?-~TD!?qcj;|66~hFA3kcFkj8y?8lye ze?L2X*(Lwt=ks4$FjPFcyMLFP`Se$B|38+k+y6ZAbM4r2s7aSLW^2jz5bRGz50bo0ZFHBgNgvD4E!y@>wJ%{+QPN5k-`#e{`frA9 zWtk~z9m=@o{DCtyvqBF%W9^w0V#X*sp@8vi*nt<5;+#G?%OAYDneXyOJ=PNO)+u#t zZ(fD*tS_5jNAFKSYNj%$k#^)aA#|2RhkF@x6>l?mE7jitDRv; zuSrYzS@K4@`2MA!=T8pY^`2wV@NQ{LB11iYT{{;ulg;KOk5U@eEPwIocf?fn@4H_F zWU^eIn8r}dwoOpcEY#NP{x+4n3$G+`Ec7@P6mck2rnq)fbZJ5v%L3!i-*_gpC=1tG zHT686F;{;_&V~2=so_torWGa}EIVG~RhfRA@8gW?o6fiYaxsxtkx;F5%j}qXcf*E@ z)3^C;U46ZVX@X6_G09JMs+xy$4y`#JbX7i0A$eZ=v%~#1z4IGpdYfJn$Ro`@y17)B0JYubwXZ`BekF0g)sx+Q1 z+fsbD>|w+-VTXLpc+-A)^(m`zwQA3uT6J){%H<+?y22Yf9?~;-+xxw z{(4f9A(%cd|6xk)%*NHvw+Vj@ihm_9{_vI6%E|Gn_fvO$y&pM!D|7Eo`RQi**{7Jd zJ&jsEe?y)ADx>ccSFOG5RPQp=~4_H|rJD=-A>>18t>yV#w&Rku}h^T$AP+zFLPb9bt{)Qe4i*`lAE33qq0Eams^$dsazYdXCI%>odwJ|?FB_M0N2Nl5Md zGV}QHWwIuWaB%mSwN=W)r7ZaT zgQ#D}geO0HASE)f)c90t$lR8#GEbD&cWEsBc=Az`s#bG1Z*#t49Wn6zm!edC(5grCG~XU+6^slk8L&3_dRs(N=83-+riiq zM-xBgdueg%jaPaFL8NHN0?AmY6g+-hxpKP!* ze;0GD^##e}$NxTEV?Lj!JySL3%1y_ntBjXrXDqUi;q)|aZ8I~@-mNixgL=N?GCkvH zZtdM0Hb-B(dtjMtK$OH=>9?(nwXbG69j+6)usv|%)T!K`_I})RKmKFVR_E0n7aL2h zH{`MHl#n;sYq=q_yyTkaFO_%8c?}PyZcl$7UUc$C)xJG@62I`4A7%~Xeqh zEEqs5)n9*zC*{6~*vejKoX2tSlluDlgYov&dS#m4zzCbxta9dtjv`|jzP7w^0>*gRMKL1nt^ z+QJIa%I(!BA4Ka}XC}-0UfVmD@mcQU8GB-i-p}R~*A>4z@9vhQQ+~``8*Egk9#s1H zWG2J2`FtPN9TeK{{lQYlK>{*Zdj8Xn73bN1?wx*f-Y?rjpJ!T3-TCdktDM&5oxA30 zf4`Kn(`4_w>Urn()UV0$pPKq(spOV*mk;@rhfP~{ul>_%-{#U=-j^f)=FR+`Tw0qY zAH8g&&hec#=caD;d#^aT=`dP)}$vgO8IIZNdurt3W@0G9V{rSK1r-=Gsn@s=Meba@q_}(|A ze&U^7)_=88pl60pAj=uS99dIEi5|WPVU`!Nri#+}+#Iz(?+TveIlr`K>&^d-M)OvC zdmVqyY7t)-?j@6VbVd5Nr&Epu&gO4Z++uR=^6Nsj%fC`KS;jP+znyvZ;P;$a%xlFa z?7b+sSgASNvL$Zc(OG*9%!Ds$CQd!yw_6}q<3jf*?$zdp)Ygh9%G})ax=bhMm6q(x zEuXu!4DD*Sy~tlU=c(pKzJUC70xExv_68-_4hc8kQVQ)7Z8r%+hoFhK%P$azV%KzL=c4oYj7oPdn6WMvtl1 z+qhqDg&g7gio4JH?0Qvbb57yIf+uagr*nl9y?9r7ZwYI-G^<5z!KIFKe@&J8n2-3W zo#z#N&+Gi+h}@DR^HSGX{E~5=Ju#%C*S_=b1+BtQbN4XuhOsA!T-b53k?DP2&;0!l zoiD9WNKf=K{64+o)bT4pfm0{Vv7Vx=xwOM=@uC~syU%Uyo9SrRe|+a`l`Wk|Rv4I8 z*EpS$h;DJcmpFBbwOgUkg4xOcC29}fEotO$6aQ-)7a1es&Zp+O$M6Ts%|Xh0 zWdjTa=N@z482R<=3B}SCIpscq$2OTA(#g;EoA`@E>WP-a35MFe74gNzVUIOW)<3$U z(D`qQ*YY_lRqqv@5AOT+`nAT_9X?k#AH8L5eN933a@@aYxytKBd2h9UPF;NTmxN{5 z|5x8j_rCh1$2f_9?cA$^&tlrF&INyyEUh|i@%+vGQ4dWfI?y7a}9@^#(p=4|t)J^y{G|KhUK+kXE3WA@+fzFwB#!#i~kt2@v1 zwj8MG2)X}!#&3_>`EPxU=6_lE<;$lfMfcVJuQm2$mHXrTJ<%d}bMfz=?Z;XJ-H$7o z$uhp^Jf6Asm8F61KfU5A&hT}=L@J7BPCu(u$6FiMms+`A@?}Hgv}h4_6Wy-u8UKVT z*pIyV{KuPV{Ra~lk!jjO^=?brWv+iP)~h^u;=E^0HYm;XW5S4b?SZ|wdCLK13wQlKg~e0`_*`GwJb zv7Z+28vl#@uva|uD*Hh_(?7lCzf~{(?RlZ|q4>y$!Yr%bkNj|-8l=jIj&8=>F{IfmB7rE(U&ydI=mG)b;Tb5q1x;2yTYE5mN#+ayuu_ z3=LqIe^LCvWGkk7n{G|@vea8}RWM`bCPTxpYsZT|Exme1rH<*q8ip{zJ_j2M#^)zb z`spPzdg=MercKD?{b5wpWoJAuz3ud&BP(|&&pLU+n2X`MY-!M`m>GMrH>5G{ncTQC zWx@xZSyA)so)(E-l$^3OI^e9~d!{RV%s=Kfyy5;)%9asUwoED}Zdd6iCYCU*=91#N zKttw}A(iu0d^cNdIw2nREGRDb;M5XhhYYq4VfTVwD~f)5@Xjb<&ldkvv0J{(W&N@K zg;%Dge_~DVbB0NhPx2V=PJF}qdCS9h30*;Xm%XERR)^dOK2YPCnfC146oF&kc(%C9 zo{pHKCL%D;h-sGo(EzEXyDx8>`&#MkH*t#TEMvTFILg7{Wbg?^k#HRcTZ#Z>GM!xM% z+_qQjOZl%RJkns7+nmhS_t;z2XqCbD)m#UBm;M)8-w^%U(9>`Ime`fmj85~u%r)9R z#qzLWvu^rS(F2uo(O%xwOJCJ`uAgI~!?^HiY}4e)kAm7OWsW8bUOu$V%9=x?cHfB9Vo|t48e6%TB z@o(K@{Vzq|T(Sxy%r`eLzijb*&Z0TG-*$d(X`N@cvQE-^Y47S4oPM^h*B@l;J+WTP zdDZ82Z!dLkDE_zVQo5D!ay^mb`-SH;Ot)uzR{ZNb=Z$K~C0`WnWG}0q4+(8Ge(ibJ z|GAmn^i0m_Vzt^~f45vZ+_}zsf5bfYtM4PWIRA^D%UOR&px*C%>K)Ms)urD8zOi|` z^Xt3{J@%I8()2yS^X6Z%Q9n6H%h6<2PikuMtm}=}SNLdy~4R`Z`0|=W|=% zrBq8g{JdNx#x7Z~Cfhdd(>-0+{!6K`Jra}eubi=&J7cQ;j+HK_syqdggdP<8a9wWj zl1ox(?R?R?GgSIw=Z_zPW~HLaOh?cBc3W!{J;9(|;%R`^!#z36J;hQ@wsH0Zt7LT_ zN|2iUTEOGvf;Gn^+H;rm8K&G_>cQ1#aDH>wv9A5%@1Ja%$3Jm~NiXa32L=t-xYnAs zJ6>63YSP6-ZcFBo_9MI4rFK5C^y$hpikQq|AtQ3GGj8q4>A!`RNOW>-n|y3% zvi&x-g8fr}>biY&+%jLMoZb15@lJ&Y6-zxljV%t>8N{d*-V#oJlqLMZ)39gOI$sIV z7q?He|86@yH72IVaN&hFeA6zf?qZvzW?1RW(X~zR+qd7fhgVJRo*bq6u5I4$+V(KU zwcBIXse5d&HEEgg!fI;dt3>-KrwLZ3zE2j--x0;RVy~$q!zSm`e=ls7w$i(xpC7yxttNY|2RZ$BQU8cKPqw#}Zzy zeVkVB=(S<4)f&D-DQm3~n}TK?6gSv1_hxbaH}TIMvz-pVJ?IeBvvA_&e>H(uW^{a> zcCfUh_pnrZSm*ENH-G=$IwP(X{hDLt!v|4qo_bq;rR=bb5n7bUHSHXS_auX_Q8ihq zK8jy=%U?4V4(^&%?j_I^b4I4w(LGVdyrt%*#ibhxPy3j>%4f=Y9$3T6>6@;;(_&^z zYfQw=>oPI!JzjP1L~duQ?*3@Q&v59&W2+d0pPzEgn>%Yoo^4>V$@M+8;0N1k@137o z?-&KAimf>3zh>6Nlm`!@L^#EDgW0y-mdMzW?lGzERCtOfr#!oq?t^cJCWlUlh%TP~ z{%UjgmTQ+Y`unY32PFn%$bLNe-zW3GV-X&ANSBs1n|J{&y=I^?# zd`qLk${JL}`@+w9bV$kTT(gKt?ChU*&Pwh2#`$49`xcsh(iK>AXx4$eH!s&N-Y%@@ z^ z{=J~BH*xnbnF~inM%iAxaiHv$ft9n9p4Ika51Z3^WVg3_o4uXa{F>Dw&*pVmQY!n- z1=16`k4n^){%%_k6}N8tk|jIdR5=Cgsrxzacj4joyP{qPL-)I{?C9rxU#`#LxH;=M z&#JtQQMZn*IB{@m&%H~tID;PT{w>~fZqw|ro1BibWh+mp{wv?z*Zlg$?9SI|2UZ+e zC3$eA%`w~fn7oVDN6!`yPHWdT#mg?KjcenPA67gHJ?)U9KcHq7Cer~fbLD%jti-C1!bo{3kFI(Mu^S#To)0dtfs@40GTxmP) z{m$p5QS-fvXTEn<+p~Pi!fEZF>Q5XAYmc7xl2Q2K;?(F@2{-wkfB7r&SO2rUc>2un zwU?J>{*1ADek)({-^M-Dt?bg1;!Zig4SHU?Zjb-k$2;w|nONGZo&Hz5u7>|;^tHDe zH5^O6()q=m>4VK z-mo-JlR13xrOn3n@;r7@Ol;G2++3}c%OuWDJh6?G z7X)WqaH-N&$Z>X>eMBN^irBV%*IBYnv-?Mz36A#{)+@8|YCF!8^wJUIQadu3`4b_dkYi2XsMe!}19?Up7Vk>iU zPWtSG)w0enc1W%}VmOCy=UJ95@wX1Sp0@kqwBo>z=No~HtmqvFLqB{U3Yqw37SGYe6E zC5lPDGPpF%;XHvG@&gh>RX%&8__>`v#%8Kq@{^GJgP}#i&YZ%^7J-$Sv;r)z` zxMvd&waHDrA?|(q#T%V#8J6*R0?U~f=S#*mb3Is_x|DrpvC)h<92c{u@TvsQ?Y`#T z^ZeTXqoqrJ#h;Rq(n?Kd4m>Fn^sH>Q^0dW1s=q?DWEo$T?kcsE({g^qVZZtm!_ND5 zThve0{+V2!TD$W4&Gv7LPn&*`*|CRh#r5op(jy#m4(*uczHsTj=ht38{Z*QGzfA8> zka%g_oXYJ!kMGDmjIk@dDK~lfyUb~YbtnD_%jy5-=lnip$MbI?&mY-*SvT$cTi<&5 zr`t16-w&-zzpZF{LBB2|-Bad$__gvkBI*x5yW4-Lo831nW$*0wT7^32jc%uYd;aW5 z@qIt84P3YOm>rvO{^zMRKSkTxJPvJK=v>_SNbYnaU;nYk1(GW7FKUPgS~EX7n7Y=DsqaKzKSRZ- z)Br8tDb`n0^1cc7E1%Kbyr(8)cdVy~!1t~eneF0r)v>L*LHF(Te~N8q>+VX1mTcKyc0i`F`uY7bR^ZHYbpYpNlHN}tOmR;H1V*O5IpJK{^;=PZq zIlP;2xhg{;+pk>m>(OPq=1voz_vF4N!)}IKrJ~Xp(XrMtzSLJEG^%dPx< z@l(;u$6qa8y_Bqh&d%tZ|D=2hemH=9yN-Q={O=bRIaXLJK6s^RzrL4w-LLA*F1@sW zCq6P;D=qlEdQKkq9+tXk^ZyEd$Y=2W?Ip-3ta(RxIg?F%-J8Smf9DI^|Iarm=w-O! z92!<6cm06sp@6z*+wUCQJ72inR>%K}@9sazfzSLsAI^7(nds!`|6Y)x`sauE##e#ASXXejSlZ6-S?TBJk#y?J zvsGC}8=bgTL~**N@CETqyrsl*oHb_UlgPvqVN!R(QYWlXiDB?!b&1*BkzMNJof_?O z_JfVIGWP?`c3*?rIzbHvMw^Air)7v3Z!pzNyY^AYZTrqUf-hL^tT8%m5-4D=d3&o- zv{|N*fLN#U3ghPZP_|}m=2cUd`5xVvsB6`{M(cI5rf>mQLHUEZPcp-08Xue$tcf#T zvuws^pECy@yy$<*!szgNPClca^EK*RT51BKgDic4MO4`_`v>7-U~>j6K$} zieZ&;#lB7V=gF)QQL8MSGudlq_Je0J|BMsLyk?4j^!L*|?bvVi>VeLRnO^)$&#^Yh z^}Y9we5UCZn!GtmY4YUyrT4NPsw~jCySeVw`86@u4y~{`zu)`hd*MrFpCi`24p*Q3 z`vm9ZFG1m=*}vCJW@^)WYFnK2tMjdCf8$R7X;nv)x6Jh2wWc!tlE)K^(ps;*=fAf9 z`l21`xlC)GU8t|t<1aB$s`HoMnD#n&v#af^;4M+=#y|FIc}sTB|8g;8>UN>6Ij`@q zXFXThyt%3UiH}|S?d@OIx5fqCRa?4OXnFhUr8*xYrtRD*XH~M+HT?6{M>=Wu>aYCL zsctLzBU|+IQK0&+C-Wbl^?6YG_tT&0tA2E?iua25J8{%C@>aIH_^wO0lWyBtbFG+@ zvBYbCaqR2Q2j;|``RE^UI`y33e96E$i!~C;dV;SQgtp(` zyjWiKL2;^avzJFk?u)QT3<`?kPFpvr=>FPv>T(N{miMIoeir>V850C-d+HAQ0u*=2m$Oq`4-`t~Jq72Vu=v8c18 zKsK2zQf%A%4keZDYh6>6dgskZ(w;sy^vQ#k##^k;_kFgMDJ{I=Z>x7Q?m))QfZG!G zn-K^_cbj!Sc_lABqI6RRh8#W;&TX z@=%!Z^U}vv(yfA8Cyzc7NSU)O?8eTdAem*~QeO3WKCC&OXHs(Z$f}twkvdv6lfL+- z)ymB=IKBNAW07an>Jwjo&6~n<;$E7p$1SFk`TyNYDn7_g-d;R^Q67y7s|W6V z%{guwoUy|)#$YGgV%ysbXEPo@c(dkZ%*OdqJ4N=(zm#(K@nzF6&#(z!E!*44v+ppw zZ??KfV`0_~+n6HrxKk0ck9<71Ywxo~cR$YG^HciX`?wEf-)BvKU9BWso!)8q@$Fq{ zyzCYgS=f23_zzUTrib;F8%1)ycs%+r{|yiU3mEKj+u-cc2aEDH_i@g zS@QGKBWCm8+=;Bp;C=HYWsklU92AiP?P=NR^C;qR-i}FIno_U6DLlAocHD)i^Qqep zvmRb%{UNd3wc|sPslcR%ci*Y5{aA9=#iwn5<$vQXzc|^ipZ^=Z`o!-F^gpvK71@Vdi$;RG06(Os!LuD&t`v{(D=W|^8W)Xv$u?^m(G`#-C-H? zF{}2p>-OgltnR&E&vEfXQtA2bt8>pZdS0_$8kClCy(PuK%i-wOK!wo_yc_YUztFcQ%FE|Bm@(zvYgxA+ozb*W8zSVmA`At6ln)ic0ReSAw{wcaG z{?(!_H!c5O|N1lL_Z;KRde3LE_i3E__B>Vo@0}aJVk*xq-M!|ub7@UR&U{Ym<|g@B z>E~sP|73i!oO{jDSR(e|nHt@)INfb4TW(lb+>%vFy6x%caF40ts!7y=MRrlgZfq#d z{96%(!*!qPenSW~KjwvK}1)G~4*D71N)tKDr72l!qZTeK%z^V5OUuL&0kxkCnDQ_+z znz81K>e3_oa;F~8^6%*9ZA*^IJv*xR zWOMM*B}aGOzSily{ovL$XAcNil_k1n%UpkE*ZhTb#+#;v=`N~;E&_8G<;t{am^rc> zS=0PsruN)^&Yl~b>QXhEzGR*W&psefa8YPVPvZ;|x9XB631L=?IEJ@|%$Jfc6qQ6d z++quv+*fvJ%G;KcU7MX)MD)H2?3I@N*fIB#%iOs|QBk@HzcsD5==^M35qN8Y(V7#9 zg^Q22IZT$()T%PRl(J!u(!x>|joOka3yxYY?&B0@wsK3Fuy1~oz>*{d$qR-_i*DSD z-Ndrx$J+IC-|1f8`76FI{>_S`Z4#S>SzS-LC%t-dtINyt%c`jjXMJbQm32wkGv~~2 z(<`g%!ko{Z`kl2-@7rzvYe#Syhze(kiq z68!xz|HZ5kKQxPMajFLv`nCqjjHOXn*!lDrXkh{3@qE5{#r=#J8r_TTSe&A(S zc>CJu?Nc;$4^91EI^#tAoYM81{@Ch1(hI+F)bE8#&CAZO)7=hlJU)@}nRh}l?}7GN z6aR(0+H)#zvCaC^VP)o9?WPB{SHD^l)&J)6g0K1W=3KL%Bf`$|{NR&P`}O5bU)O#9 zxCOG=27D5l`_y!XU!apnY);$rY06LZ|NG)(#{HYGV+}8g=x5AZT$rF)%NOlqq51zW z>jx`)d4Uh#{#)DsHv4b8=~w5n|F5Pm`B0wo|JKI;yFV4qTlHzdzuW&et&4UPm~O?z zZ25=#0e@pT$AQ0Q*R!1%UI=eU{PkhE#$SKO|Hf1P8H+G`-gSD_Xz$AK&N{(iWqo_z zf8DcJbuS;6)%-VQ%07mr7ru#I-tRI~d(r<%7TcBte3|-n;hrVS*9E>33gP$E*!$Gw zx+B*T0|B*WzD|+rOD+USd$n-h5HQ|d8Q8jQ!EP0XH0Dz)X8OjIpINZjKqHBDi%?0Q zim|lo(+id7wly5!>VAG^&m8}?K@UXU^fbghF8Q;YOMm?Hidlgv9IDbXWe#yEb7PlR&>-^IqK- zZAtCU!3^o z;THY#3rcl!-WSK~_eqNUXyCGz+;_@p`d7D8e5^HclW$&Ik$WumnE%(6tN$#rwp-u$ zO!NEuUzN6XNvC4fjGJGxsL9AGYfN^0u`~Ycg0FYllV&~&y_WqhyZC1Uo7$ooj{7$! zw^ij>r9Jo^bB*=Fo+-Dbb`%nMSDV@Lc6tmy)!*{lIZ^>>KDV{Al_u0o9Av@W}S0CK2yt6WSu3yf*5c`$) zrv8l9zjv5t&HBjer#~0JoGYWG|F!JcwHhWlztFnMy)zew6ngJIw@c%__T4jYo_0sO ze4bUz7Et@?-9p_UtG>yVwOZ>}eV!_u@MC9*SM<@#zs}`Gz547Rc}^|z`08UZRVwFn zs`|95)_>M}yU6aU@7Z;+Ut*fKJ}(6Y@2*6?*^}Ow zhtAs_>{WT}WNGj$lX#0R$qDmbFVmUP=Q8{2%K*kLpNwp?GmnedYWZa-Wi$sB{S3Te zobt}k@KLj(TL#aO2`z>$o^zeOG;%$?l7GvkMuoIUJXy0oGuo*`5>qv6N@=+JBSh2x+SBnO<>@`}D`7 zQ6}Zv^JnaNc=f6aPv8uXPp2Gbh z-s@~{H*L;-DeZpBFV!vGC?aO_JDd0KtVA}vvptu+(;`jjwVc}eop;M5L?cQW<)0k7 z|HO2*pG4C8Z@TyIuKD12d4|LNs#$6aO-p>A7)0g0n|)@@T37o(;iN^mO!k$P$Hl{= zzcoJ$m)HN``1$Eqx!W1X0>2qdzMj)QZ69w7$NP6-cVwe_xc0={ee87p?S@60`(9sd zVEXrKclNvXdFIo<|H$xU*|&G^l(LJBhgHtps{i`dwEo}M{D`f}wGub|b#HG>zw3L4 zFFPqKAj_MHO+ROke3^Jn?bnINDq>6yJ(|m-$*E!U#C!VFOY@xdjztO2OltS;?BjgS z%Ay&qns`a?z_F9&Jqs0ks^$f8e=bXA3f_>@ZW`s9=ov1T%vvG4=j5Ax6I)IlIOTD| zCoHOZ&i064y;*9BcQ~y!H)!|x&1AJmG&Z=!>fOOP|KK#Pm(T5@oI=*z(%h_2I@8p9 z;-s{K+HV_*P{N!^v-DMu zpE;&7-Sa6^n%AM4kZDc33lE>_lTgihrMP*L`7v2p{U<+n7zk&IKArSJ;b+F=4ad%l zAAfpilVX*!L(SXPkDjVinhLW5yd=)Fp0u4Lbm+s8wqssVcH0{bie$gfZqGdWLVAl= z&Msyz)o;PaU%1|1`?W&M8qoto<}8)kl+d9}KP>CUl3i8-w&<5c%d_ujI)Y|1z8 zuHS{aJYNEZqnuChiFxhU{MGm3=F6tQLpfrL=KXfO?{Qxu_H>@easIIG&n)6Pv%fW5 zZ0xY`*EsVs%$@Ce+JS;aTlrQqFMhv6+C1mh-cDC}vtl_JfudkN%QhnFP8~%6N6qEez`UMLQW|^-)si-9-9I^F~ zf_+*$qoL-veb4px|2Dq%wsC&ke)s2JVkUh3@~nW-rOLX{KKF*7bY0osc`J@~9zXj} zXt7$zdx;u%k2VqA+27dKGPh^?hVagvnbGt3>8rjOCc9TYHdvdn<$2kT1nV_7w(;a~Uc^*2kZ|GoKo|Kri4)q1~}e{W1S zmz^uh@aNOF?0x&Hj)(4l`u3aX{oHtu`2mki9`62qy=Hsu*=4pLifT`n-@a}$@n@JFJ{MPlm&b3mIc+cW^NPra-`d`n9|s@4o;Y79U-Q2CIp-?7 z^i@{k+h)u=H`8N!V%-XxDbM&l>l2;+s=N!nRH@_R`8j5${q_CRKVD+Cx1WCO`Kccf zcXsK%PUk=B-CeJG=J}(mzv?ya7Vp=;T=C|;)%@a2yQFXba(-@ov*yMy3sB7tiowR+~k8ZEn?f#%Vv)8ZJ>`n^) zaB$I9=i3&qw^=OL{(61qrKNUZ;te})Fw}@hyRMe?)ZCVLRz!N;8L@1B3;l*CQ)PF~ zH@nj-9wEDfqxxEz!a|E3e5;!`%w29Wd)4BLJ^PN%QaF&ksNw74WyXhE)`ia5FW=j_ z`SBjNYNrbp`e$C|K7N+m!1U&7*O@7LZx?QkwMk9Oz7iOpoU!ql!S>3+1CbGjIt4Zv z`LRKfNC%6?Bj z-FZCeteM?L(`oN-3Gf7qJTEwWUk=f#-atCP4#j?I|-BATTDdD8^m()^kXF6Z%3OgOS z`SY{~yw&PwzU6Ay8YZOVtO$J588zcgd7i6}RCbevbg$$D-&5zfdCVWH#?Fc`ey|}z zIKsUB=C$jR({oGG+89^PxS+Yn*=4pzx>`(jYR`-lQ=}5h!WRgNeHAd?Y}2{oYR~*R z&kq+p$(qve^=jd{9>d#nHpgy1qS+^ZYUBDFuKn+W1CG?Fo_tbnoLxDy`Ly8uPbcic z{;#t2nDpPJ{pme#-p{KZ7x$EJ64&_u%I52%*wWN2zsXu_EQOapaThh$JGA1J`{Sm%=JIfyZ?>1Q<-`%|JJPhTf6lk|KD>p8fSt(1^Ro0D1M)^WumFEg`H~B54)hJ z)9o&E*iUX&N2tD&%WO}jp+*T1uj;l7;vs$*Ty3-LRlkdvSVSAyt`=M-O^aA(9K#2t3q{+em$`3?~T$fP#VE5c$ zp+ta8L+25WKW#1!mmgJd-$|}KKg+c3K((8QY-eA~2E$65zVeu+fkhJH6Zi% z4Wp;u7d>1mJ#$i7?f;lUmWb=Cv+fE{b9h%JYFiuEe15;BX0>KKuiX0k*H>4?PLsM4 zYwU2{pNKrSq|zt9 z(4W&%X-ttcOqQ_}86hmg>lUF#YiS=kx29Z}*=}oo(^U<&X1&_(_-Q`yRR0 z{lCtk5T|(HXZ8bsjkbP+f9VtUxt8a5KEA&w*I}mVseg=K`*J-k^aP+(Jtblu}_=BaV64t($IkW0*)Tf@E-d7e>OnrPU;R4f>RWoyv+1!>g zg=r~d1t0ZXpltkN_l7d@vhNm8ibOAjoO{nAF~6@NC4sHx`~r)!XLiY{GnSrp_?*)? z$FWH3_*NzZy;QB#-kWYA46ju8OYRWwy4g7XP?=ESeezSg;+`np>}y-qRL z9HZp+JFSaetb7ro84$a!iut5sosi!zPW6N%vv%%mFnnIMbaCI*a}QppUEA9weDb~O zuG?vUqbA*avQPV~_npOmRQ!01Dr(?xb@P4DfEm=uGm%&x#?ZA@?UcwX;Hnl=CT zg&D^`YrSUkV`wS;A?(gQ^>9m2{%*m!FQ!Sd%=`3X)^YEb>shzlmpN`8@^}Y>bg}jP z8_PmX=UE&JE@1gQd)3_)$3kjvBosxjyyJIvg2^$e1GuI^+(p9vb4_g2%W$B^YasDZ8d%MIrF&}1Nk%&?|cFZs5@Z}It8bv{lpT2Osq z?;kl?LzW9EF?L zD92uZ+!XU9>-L!|LPA#eS8Wnoc5?BQLpRu-i!6KFan7(u__0L9_YIK;|AuXp7h3DP z#_H%hg_m3ACKh#V>vqxixpysV%f*(!hcOQxUrRD6$z8JX!&~;=&$G69?pUznex%y; zgD+Q4>^_&MTjIMYQ(9{Fhl9qw6ZvoVz0WiI68j|oeypR{pEp-^^VhNEmGj=e8@u5p z^J~2Y4e|9iHe{)9@w@Y8R}H65bN}LH*|yhbPyAhbSpWXFn6<12vPzC@nI)iH9(_1* zi^SX)(&x+Nqhkb?+j(W)QY+XwZDUb!{!QMtDFC%%GHK;o*CG zmgKXUbnZSZC2o?x{raJ0vZl4hhCkZ=ZV^gL)7LSNI(;-@tgznJTA@B+g_0sEw@gMtn{5LvS) zoY7Tixya3lEuR2IBCR-vYUf5pZP z@u3Zci~GgbZ|y2tdE<2IStcHHs|1cEOC)NXPvpEZEv`y-VtbN4tt6!{bM36!z@;iW z{zub;e2O%;8nlW|$oMdA%8Y|A-B|h7&6b?9J1wb1m;HKD=z^_%GrsU#Gt+v|d~(gz z+-uGW1-e}-k7HEL-gfX#{Cg#Jxx%II(XU@f9e?4%Z>SlK*9R#$nTR4+*2i;k3X;uJ8NJa*5PT~rYum;#VcQSJ!cnl z_}#ux<#QtM_{4LLi@q*fvei$||Mh{oS1->TaowF>z#AN~d3KBDzO8+$^Ui;LHE;G| z*4u#*+kYJ^zWLU2$F%sGA6?y7=dIVj*X$+nbmOgyQtsC)%94+_-xYoTJzQgI#O=o0 ziM?0ng&G&^z4f@}$WhQOI)R<@_x=!ju517Qhw#2#HRrESm%p*Q@BO>@6m}6g@ux=L zT(_V9yEL_6nt+Jr-Y2{7dh6Y;UKjQ~L-b~!_?~?`4j&bJZn}S0{ow~z{~jDIe{;-q z?$??d@ry!_R33i&u&MvIb{=1NOi6W*Alr}lJA2aJU;DY}`}rFs%xigh79Mu#=I?sD zBkj3a&aR34-)Gyrvt2o{P_Ifvt?+HD=K&Jxm(lz9@VlGxm9>}+4U;0w7!K8#@8FX+)rwDGFVqrPv~2st@Y&IM{Nj(~&uxG6Y0sMFrixrU60i2elv&5E zc_$fjx-9B(^U)b6W}lT^uv2=y2j{x*XpaX?4evxdk5#PurK@nBQE&I%JI|k2iWXid zy!f_tWsag|=VD%Qoz-bG=4Of*aL715eR|V!Lgh?j`AJMI5vGq9KLn2wN6vd%-SMkt zLj8p={}!fhWBkkfB=Y}X=SNpJtvQ^Wcvbk2&C|cZshNB__VTO0ch3FBnK&(TKKFMK zTYHgbbIzTcSv!5%spT&!GOgA;)}24U`~L(#c>~XSp|r^7=U=|uxJmEz|A5F>75ClG zEscF1+5C3j`5ARt_g9?V)iHO`4bgK;i#O@lW!1he$ol!Jk;Tr^?R>xSikmAs&ZX)c za1Yt$tigD&E7x&}VVxOgJ5Nx4@8UpZy;J6`p`UW^suiwTTErqgYv##4n|u>yJBwS}K@=g*kC%y;3!?UOAOT@JieJSZ~j%><(}_f_=j_y5jFZ?Bm< zw;-bJ#->vXKHUD8#CBQyzz(Ie=l)q)8~$XI=Z)ijmD=@5_qxV;5$O`2HE$cuti4Rs z9!z#z+G1$f{Esyw`bIDJfqSgl314`g@LoKVs&TgB;+vz(bEcThNpcQ4`Y~2PrHuVQSYC9yJlsb-^0s(|KqaXGu}qXDrTQr}ne?K^JmoUXQ|^Gll3$|H*3 z_E_&Z@ajP5?$oP2m&7V9maCM7uT?f{UbR+eS-H55%8M-)+jV&!IKRl~Reo0NFjdG- zGG^0?85vWRpBC|NTzr);neEtxN6icSl`9N17nP>?thI0~c$8E3sn;T`N7naoW^c0n z+77qmpcD?->g%5q_o%6z_1EA3_+Ea-q~+bhdQpomNidneo3vH3BkG^pLB(&6z9?vg zWj%OMJ!dnMMgK&$`GIKyJqt5!^>16(Y-mw0A$zGl7 zMehsN)jhuy?{)FAW#qEhPiqcOuex$Q_}tX>Hq|-#Uu(Y^mj1H8W_~<5)ArjRO{;$k zzy8U6y7E3d|J%a^O|5d?hgU_Z*SnRBK>8og!?s@;&w)S0Q` zh|@pG{YkVC`-9~i1~p2TnE8AiK5L8YKlp($;Dq1n)sD-->J|aUHt!mH_zZx_~}3UV-TB~ES~(XnK7mR<0r=3 ziU&UGfBG!TWLJM8$M&g(@7FVm4j)CCyzVpSf8Ni{((;e%M$zx}v3%)`y6(XNjuz95 zv~G#BZAtzWP`!Bb0qv5{#t*`md@y9Lcvn1A@6-Em%k%$rKh!h)t7Loj$NGWosXszX z^E@;Cx$+hNazEe>s_~um&$94W!=?YscVCy^IIVkY-;wuLf9e`Emg_HRxWqVR4&TxY zMb#7&a4D-rwm!=qDYr^-?FGh?4WS2CIh>tkX?~w)h1U7ncdo6W zo2Tq=(A8G>e&)m6-LYO*)?Ax$=AGQ!E2(S};@*loc`CDwnqS&T#5Tqxv*|s5SHe_v zI+e>ZF7d5i&#jF~mHl!dj5Sj~rNzDs>bq0-Z$i0G)ICuHBg6h0?E^n|*#<4m4!wD0i)9<9a0~PCebZmBFInfGr+nG_-%(CSuATL3RQ)7aAJ}cL zXFIo=r_P`6Y2JbR-Zw-Ju3J(+lV_9L(@ipSSyb+N?ns)i{UAnF+%lx$=CiN^jklam z{pzu6{yUq8O+RBI)0cS~4?L&-PBHqm;(yVvm7Df0I{jCBxuE*W#V2dk{X*yc-MEJ} zWX7Bx#-#^y4tzWQ(Yk-~QO?vth5+Wm#ixUPOjX4h%7TvXi@W7uepS)cVxNAkeHg>b zn>QUwXGPpQ+GV?^$9(Q@pEYk5sqUX~uzxdi!=i5G)$b~9iInuhtU5_|ybPG>gtXg_w&UuDx|A;wP4J%gNTETW;`j#|@9JaLi47r=v`N_2D zaKlSwvb^j z_luqHwttOuyjq|AplgTx%9^P-XNzKI6l=%jH)7f?eyFp9{4cZhY688LinH#&qVo zTk_O{69WW$M6W$Av|nISvUg7DvMC*o$3l8KC6pdNFbre(9-F;!ZsM#a0~X;AaSs3M zyh_$SdS+L!-+0fCu#D^(HA&SIO0D|3PWL8mW?QRlc*t~O`F36Xb#6gThf{Xk-A4^k1FcW*wlNFYWqezF_RZzClco}Lf9yE>pnPh8 zOV75VKpm}Z&hOkgeYkx5Hp@pd2CJW5Yi^=eP%!Oq!bYu zY}|1hU$I1Fm#DZUDwyAz>@i`%=043EXZGA)&@gqbgtK$v_Fm880;%O|*Ca$mJPT%e z&%L|K*=s{yyUf1XH_uLO3bppA=U|)rnNM&f`mC&8OW9j>smU}mCJHCX|P;kpZcH8X}H#AD# zI(9Ki-RH*4PHjc;Fj39zy=SK{cI{W>YOYDPiD2Q0)7xpKD_%Ld;WoeDzEY{T8?6jj zPai-0l;>EPV`@9&EH~?G<9_}=@3ruUIXUO8sCXJ4ZC`DM4$r)@nU zq9b1x-s2as_{pdJj~0oWy`Ftob^GEMU;5+!w#`Ve2lb*hWvNNMEjW1TcH`R}r*f_f zduo2W+*NALp&Y%T=iCNqt2)v6V(T@MF^5CT4?NS|&ONRFw{}fVggNu?l~1pxolf2V zbpAfe51;wtKZoD{Ygqr`k#*dc?JX%k@_u(+jI7ykr&s#l*Y*E7um2UBs?Tv>MsKII z-VI;vdvD_kuD<`FulKLlp!jFo?uSfEMb_)xPb?MK`|Chi#6zd%{;p#d|NeB(H~uv( ze|!Fqqi?UjS>9(pyMNEkI~!!L=NK8^zgy7Q-*)@3>i&Jdo9^-LiMhXU)8jn?OaJeQ zy8q$nQFc!2m?G<#qO19pn|D6!?(YBd?4RlTa;7h0?o8M3$XBu5FEWnVG&`&%V~4bP z%$DjYUVnbQ7tL#?zfS{6|=PKNvsWIm_|k zth-wtHfz>`{y4oPn6ky%Xml4N!v`PDV9qtDnDE-Fps+s)$Ye6wqkC)$jbSm z&lR5ExNzPx`_9ElzaS@2>HOdEq^I+dy+mc!-K@!%BtPGqoGSU8(fI1(pLSFH{{D-R zl<%(hvzvY_I3;nO_3w8Jx7dffZT%5>JbD(x`J;dBtX7;ZUU%pDsiI>k|2*du|Elpx z=imD9`K@mY%c5mo)-2j>oc788QjN~r;-E|QYk1Fn{n>tL)#>k3>^@I;H~m-4xBsnu z>Ce6Rw=7hwo5i-g`nlALin2d;TkYqv2v1lNcf~Mmce|ITOu10tEyJa4np_2YEY4{u zobdKcw zwVx*Bn#n1@xw3PQqEy*sFNPO^#>c|;iGKQS>(%gr{l4Jh8~j~s)zm=S6~&fU>P5ag z#(nQy+{eNlkJQEUXU=L2HU89f`{u#8!d($wqpthKjz z&Cy(UrQ;H3Z_R%(h0?+c*QF$yEZT+BYpO$nj8_*qElgtDH2a7|v>ng&nSoUbk<(?_ zxSID~yL5bu*N+t+4+b^d)r<5AE#1?#=gs?!t;z4Jt+c;!i0iHu`}V=@XQX@}_pg&$8>jOI zo8Lac)Hb2<-R}#@p$F0&e&754#l!O3%+$S^#*?kpzCTsToG>>)>^axcwKa#MWFx*a z-{WwwmSi-0{l-91%{QHC_BYUp@P0k}5*I0Ioi*61G5_>h;cXw+{F?as?6lvR#@2=! z4}Nsqcw1vsT)lM3k{F4eBIE4Zkfh^1j>R0d$vGBB_$JG`MleYfY9wxTe{Q_B)cS(d z@d;M%9=E9(ub3_3`14M>sF(X1uAY^m&n0iRz1(wD@vpJV*|ocu1ort^Zo51y|9gH1 zd3^Q&ZXXcFXGa&5gdO<(}`>woj+Ex(lJcC<1tOfylytaNJWJf~+bJ-n)-7y9cTKYZ2jW076BRU%h+Rbz=} zpUj%0|F^EY6eY8_Zj+j9|989C-RCauy>fh&YRunv3qLH4`?@)GM{1RKWd`r+>)WgT zM%zW({hu=@`t{NKJO?Js^U%%3H1y8cK_eB!>tUjv%_L!?a~E{{FjR{GWF+DsM}Cgr}4 zMCKUbA5zCv1=)Kd?3n5~|6~i@U-VOT*80vr#R<-jxP|t+EW8+#9GU#%{KY*_`>J{7 z@k&?eWmL9464jm9*l}DyB5=*cI|~Z;q%@~BKjQ7QKm18OW<%PO{pks(ZSy-TmYu27 zbNE!FSl)KC+N7_o#qDw6788Yic^t;dRZA2f`bC^S>lEEOVNG7=QP;=9xz`nP&R%@$ zvtr&xwM^8Q+J5%wBPq;>sP*}SAUDH>OJ@xvNZBj zJZHCdl_sQAZ!unjgncm9+7LK|l2apZONsSkb}tm$Vsu3X^Y z@M3G{UbD5*!SqV`{#=#M)x0Z?~}hH=JB%s|LPTa z|Mqu^m@H|#>aUjf|EoiBsi#GaYl%K%dtSXO7qh01%XasMx2l2L4K(BWke{Y4w5{lB1_#?xQ5Dq=Wwwh8g=Tp=uIP$>H8aqB zh2#|3Tq~x1p={mOeGGX=Id{AiW=Kq7>s-ZiEtJ=t?VX%$tTWd5 zuuWD^b1OSxrS)<-mrnFkNn2y%%EZZbjO^(GR*nw$SViI`j(bZzRH#%@uhQi?UmAU; zXX(tZH%k^or8U$hwwdic!rOeLTiKW+_NH<`U7DS_yMy&j1-rLJf9BlhvFn@JX=AN? zVQtIy*_Ss>cApkB^XYDeL*03oE($tboViV`ZGKi ze_s4QfA9aONh+tWnQY8A4mExB&T&%6RmD)><%<W45w*A7MCoG>XU+QD!SfAF;wRC;@?tsFTm(;uCe0K)_UZQZ`S3R*b zcfM+Z!Td)Tdbjwq2H&3g<>s$CR;KIUv*RmXh2^p-E)U*&&1%-cQ%m;+>HK}>^glx1 zE$d&JI?vWKKc{S04cPf@tz<`(-j3wjBoCdX=b?3T2u1|>bI`>NI9K*+*FH+M3 zR_ncuo};v4)%$ht^}lW`UDIrlvw>+=ype?d%p1@5#562=ZaB+6r1~5mcUDB{s@+R9 z_6EGwbGUzckM_}qw zI^lZrTuP<-0>A${j-S#$|9-Sx>OOnc`&2veU4M-?{7RY|aqnC$!?u4XTA$z9clx{D z;prCHmFHyGbndUb7_+4OX4q%@k5}?O?+Je1b##WsZuM2k?{CSaMc#WV@!+t{`P!Pm zG}h(0%k8-B&TAI#SrK0x7<;LF^~c3C&ZaQVPd||%Vze)K(wEkYLI0Ml?oJHi{YNud zDpB{m=jVTk3pRG0%sv)(F`~fC*hlL5CWfQZht~#a%&q)x_i6R}sJ_L|R^Ohu&GW{l zGdAx;`FFFW8^`Y#5yV@x!SqzP$&fBDTvdR&GD&5XLk4;n{u4HupYc&G_;0 z-iO1B7Z(c~aw>$qJhM92|6JGh-J-u2rgpJCS9^C&`1id@la!J@B->72`pq`gc(>iT zH4k<#R#pA+?C8WglS9W+MEKd8FJ3C|pUm)eSwh9ecQ0q1NW3D$-n@Cii8t)w4ZAk& z^NX7-AolWcMxmKeRbqI#*+qZd-S-xSr17*Jv_AGAqI~AD%wH!BTiOInwbgwruDL`B z?~uQ4A^h>0NJC-wwZ^xr(r;Hz+Qh>cCEn?1$m;Ad?O=3Ir;S{=gm7nIPj<3d#?+nf z&6BQV3MCi(*|A&ImC^S8+Ww5W9FE)<%A+Q4lJM%^_t0Y9j76f?RwhUkIiG5iR)6rO zhhbGRW6ST14c|=Cdk#MAG0@%3^n&l`4|9<)wL}LY<;0~eiJBtQ)CI!cPZ3GXVbO^> za6C%2W|PcvKN;f|rjlnzfo&Es)UH5?U+Fo*ulx*u!pGq)F=0C%H5G zPn}w*c;wKoeGI)}$2RSH#IrE9gV&EWQS|h)9!1|Po+>!BlRZpZ!DCk3v#({OcSd!04&gRSRGv^M0q*BHF{WvZAV zrLFU5_BRcMr#W8v0uO%F#RyMYSUfMcTp|7F3+b}QZKa;+=6RL&_crBL6>WQSyzj8Y z%Ub96(S|SlXC1z=Njj`&U*csM%U`1Lru}b@o7zRL;e693TL1Og@;`r`mbaw*JbTzY zLO4(*EKfnT(B*@{9fOv(-FfGCNxr<}uv*>f_UGB(091{VA8f+*w=Jvv6Ut za{aeY)sozvA1!jYga4k`X3N#F@Qa{pnmuRs@5dVyRc0#3ualdxDEWi#?6605D~+_x zIbQGbOZxFfP3rN>UJ0N2|35_Qi@r1Gf7ADj{5<)#JZp^oS_{9q8!o8&MnBt9YW(5z z^!=%C*|xo%Sbp5vsOwx`&Mjrm(-PMAWTd~&~5Bv9*q&<)PmkmyW_+aSf-|GoG1xswn9X&xcCA z1>KPCYUw}yL)NXh_;2w^c_n>$?(HGmvEHAPD}!o&-ObLd)rt52yDdb&_SIkilc{p+ zRwUHF|85`F|LT6`W_QitkxcI4)$blEX-?HzXe#rEYpv`0 zC7WJo^;EE>f8mupdQJBEmgzi?dIi>-^P$j$_?Z_kE_%%sSi+##SgabLsxJ zM>=aaU9uJqurzLQlQ<_Bduhg*H){+Ro;*4CQJ`dW!wbjgUw1t1H_Z(5m$}?!Xci%w zF-QL^+utijzu1JI>Q$VYRF|#R;~ycvH2;XkuPJW7bWWX1-e6T66DQo6xBiu}DQE00 zKhbRkiL2}F@11(@HD{ls=*uY#x3g>Py#I%|`b%y)IK$<{G&cVZw%#xQ@0FVzY!)-C zj-8|YWQj+l%yr*`6Bj>Pc>mI?&L>qDoo6u4mvPSM{_J-6T>giXi9ScvPfJM4G=Bf9 zyZ&}{*vf~7c^N(Fxoq!#N6&hbxn=pmZsnFM4>rHB%PpFr!1GM2v$)l6%bR7qz2Ek1 z>7P`#g=gc^Zec~P-<3RV3v_mQu6f&V=~8*XoG;td9>*Mb)^SQwevQSQ(~Iu+EtNHi zl#!UB!SlJ}^V#6}TOwqSRAvgeuU|X!)ZR%>M~}|U+_~-isx`b%e{GNJU3qFn^x3Fs z6V_2LV;56AB|i``egmgltX^`};~JHvN; zJGcB>_4RMj^4{-n#XY(u_qzC%-si+xoy-4Ze%`1n{rUU&p}6Yz%GERYpRC;SI=_Cl z@!8{#euV6qe@pnk^W^NOKWk5IT62DmBHOv#5V6kKNgg#DQ~Y{fh<~ify#K>?(!Vv& z{lDJkddj-8J!{)mmLC28SGzY%FVtOl;`Ep4S9i}*&XN+{7W44f)gFI^n>!CQ9G$-9 z$3xE)9pU>6Dg&R@cK=v8T}YEJ;~nQ8hiA5Z(MI;lpG{Y7n4ryOH1W(d&faJ459akO zKb&+jW7(w1r&ir#R%YvdC|acZy(78%;qsKYX_I{r_xtH=!CS+1!avRWFI9imxpsYBUrofZSn!z#Z$^JiBRB2Rznv@@KlLfs8ohn`_t%!HeEjpNdCPhC`_Gv+otM0vZF9Zc ztv+MIcg?rwtG~~>vWJ`Fukt)c*s_Pnc~A4T&og|16p!^1LHrlJ@2~&*xrO0e`=`nW zyXvoN?c8%&VZrD5%=XOxGJobY-dB`k{LjR=I{U%I$&Vfe)U7}9^!fqbTa{a?0}k`o z)_t`vd-dUZyzxHMC5D^+U7kOAnSJvgQOoa7zOa2#Uh$jB?mUOWKkWzd)Bi-WJoqQB z+M6%1;jj6D{f_1DU+(+c`0qEv%7CEcr)80*2fQc68{REHvQXLGnXl30?=%q}ue%;I zzcBD<)TvxTn{aK^%>be}cB_IXg>rQWT=2R3D%-u;rLLw$P9mNNDtnH+4G~nZNH^I={d{0YnR>`Cv1-^2suzA z`8#y__7q98vq^d@lIs>u_Ek3CT%9}HSixlZud^$A-g7*So)q|FroXb6EdZ*C~z_Tl7?an#g5aKCg;mnytU2?{W67Yc~at z7}~Nm+OXtjaW3jCTnQ>N!-%;NCjv%kuxtXs$ADKMPwI)=GJq|P3QMq>}nDHuyZ5# zg_@a{lbdX~5@Ix`7;!gDmT1*{>){!3)xXa&Xl9?XNSh_bI5nMB zbKzD4o>rE_GhTK)kx_J=5~!id)@$gn?(s@uHu3 z!3H;DK4EA6*z}iH+?t7N(da%Re9cRSozC^p7ek4@x_OO z7tA=PGy(cB90|ytS7?pL3D&GBWD4yrzkbF$}ty!UC}{Yx_(Jowfc zuQV{~J(yIo?0etc4O$8hkBC?WU9!+lZ=PbBEE1-WtZ;smcp(FiA~6 z&U9*>-DHin*;|cMMWULw3I-ih_wD&+GJACl!$+g*PfKRapL$Bj{LmcMN$*~iCWeV8 zR9>1S9(`bciff0IeCoL~UJZMqRFe$r*07zhnSIVO?G7E>47IxXGw(_Zd+ne2Jj{K{NU zR*78UNi0#7T{T;dtl4nuOs&ijF1KBsYD#TK83cX5L`A&WE=1< z%%5hMzVF+V&6mN!M(6wD;YwH8rjuo?BTQlvZn4`gGyT%Xo%fAV&!)#+cg zkE9+>uKai9hStYxo8KHimSP(||83>wHz(~AwB0YZ^DS1MyV9gXT`;z3{>*)^<@Pc4 zJ8xQ`q&aiZZ-E6S916b-)-t|$qml3|!?N$tkF|3)gjK6P|23f{&?cp@FQV~PyQjk| z^RtaxWoHB>&28Vj=gl$R=KRW?bq8J^cyRlW-5Lv*!mMkrI7MXk&e<7dyl_*7z#Pua zi+A1IUi8erC@=SIOW?$nbN;UBQxS2_SZc$XQ^O;xZTx9h_4(EB9M5eyEURtqab5e& zw=9R`xYU$_j5#|(ygo)UOkX^%i!3uIXju0b9Tz-Njja5 z-L0Ihd3mkyvVz6RQQgIkn_d_?iMhQ$Re=pR6O$u451)AP;?0p;UvlnFG_-P)>Ji&M$uP5L(!Xb$ zXPqFxUS}pH-drJiF#qX;0YS1BoK(ZM829%s#H$?|l1+Z}pSi zhp)>V>JokYhUbv_#m}aGU!3ep7bN(A;`~c=VUYyu3)xAD^RLa&u{s)iBf&ReZOg&E zj=y#*3NCv1_9Lqw>$S86mlreq+q&iZi=zvh{5su!Gp(5ZZ`Ra?pI;BnbnaN>T@>~1 z0{JWd$o<2{mesFr*pP-*t?B4LN-1Xb}$k&yB>ip#XDbCHdFZKI5r@+!NO5{&Z z%42>-ao$hIqxPRR+&3cqv5!~YoBk^i%u8%?)jO~KWV`0i zj?eR3M7UE!A8ZrSN@|>ThD|m6%z=~Sl0c6&IH`w*|T$bG?^3wIpe_;8xNqv59m zwufVaT-(!HRSh;e7B(MVXy~&?`ICc+lG}#Db$3-2?woS6tzSQXwQV`?PLp$5Iu^y* z)_w|KR{jZP__b;4mq)SHAFFdWaw{L%JTLI+r5~&Rt+sqPJ?oZeO`iDExNo<(?AD)u z^yvMqp2A%BfX1iS8(yBC`g2S54i=MefiL>!4~4G$xw>*!TFN&~-UF)DRcGCwO%D&> z8zsK{eLR=Y|EI2!Dr>VpwZ};Me>xL`n91XJgD=~x|MO{Ob`tv@rvpy}Zz!L6%I?S2 zo*HBNMvigbfA0tNoPYQmra%4p`_o_jhW$+cxOVSzzsdMNV&=8!uYT}I6y2JzC-wjI z{HZTZ9`82&w@{U})hK@97kj6fre6QMO!g|ute&)3%ZRPz@1OcshCBatKm2E_WBw!c z!`;E#Z@;QfCKhjO*d8fyrT0oDpVxr^ z(TFGpC+`cN&cwwvJTs1X6?8bxwA7$EX#K`+E$(BSdhwYYJ2&)9*Yan*Ak)Vb!J2kp z{x+sf>l`v3u&}v*ikn@3@|JD+`eeqxw}StrF|5*5xOV7}U2`Gp3YCWMC99aHCHy+H zV9qioE&nq)7ZeUWwVC%R>|mB?$F`D_E7vgWyZAs}<=o7~i21Lsg?%W0zJF= zgEiCkZ_9rxC(1I1OSpX6!=|D+h7GgVO;Mirs+vviTFq)Eulxh|8g`2=C}Ewmob!+J zk!MeQ8dMTYL^8au^_py*)wRmcusLA*+mOZ;#?obzzHu@+%>NvBcI{dz4 zn_WBSRe|FTZLW5&IlNwtP=xn1n( zpyyq$Bou=qqO@hzu@=t%c-0_$r%kuHd zyE|uo)$H3j&t}O|=gw8%&zyPiU$SSuC8OeWbJ01k$}N|BEG^)>b9RoyWz{{a-amDn zC;oEvs`#{z?;dU2X;rtPcE`2bfAVDYyDJm){(t(mi!@t>A)ITv$v8;EarIHmJy z-<9~Y{%dcq?z5S{>*Csr+I|P_-g-YhRsVmqQC$52k$F3B@jt85DP21)QEb;Y@8yif z0)KCbWf=C?B)CrSOLdI>()@Jy^w7Z5`!#lJW$OOsikZ^Le|leunSr%ZJLcqr~5J6mF=!9`#R}o!k-$3Ip*DURf6x?6TW?Ve@XKQ`}Y1h z^R91sZlinbujJ=nHQq6=(r&tMS!4fm%Q>&Fq6>ButuR`@+UnouO?Ohc-JLXz)7b^S zMNK{Nxhgc`$W%R_%~3LYTo!CtapiBcpQP*E|B^{%3#4~;hDa@Ct&p2^EGvK`!dlhi zX2KR_b^jhFt!qxKJf{|hG+)}5!ymHpY1H(tDOr(IuS{L_y`D2fIeVRu!c?cpUiRlA z8_wVBUt*BBWdmR8+Y^z=IT~$?4SxFYJm^XL^q_go#aS(3Nj@uj)m$WMm%Q}4%V?-} zf^BWj9l7)X);sf0ZnB$nLi6JXfy%=4%y8aY?#m1Xl8!}q_X*B5&Q1T2e26_mO0(FH zbE(N=jh~y?-kCLCb8~8V|2;@8vCvO~m7o1|{J(dqv(pkT`yN?hAXRgv#P`YF zJ7W8N90eCYGBEp*@gnN{;d2-L+ayG}T0=Xpxkib9IQU?(*x^$eKF{|0w=9U*I`5)1 zTYhG4%H_VC+k)xJ>tp)O4E)-Tv0Xds(bLtQ+%9YEb@*+TQmX4~CVjKU--l-%J5*@2 zW{$d=?}xVAQ`4_=Kfd_H)RJ5JS7Fvht51g?x6QBrJFormtl0a8$CSA$cIUsGlWt$; z<9JSQ^|55%X9gx3OCzk$-|$&;*X3N-_x8T~w)Yl%KCw(zQmrs6IYjI@yVl2wH#hp3 zu81!a>s4Dc#p3tN<$ewu61$D(U1Lk?ii;^86A|wv3Nh+nof3i52my5#9m(c zbmixrmo_r2N}bDba^BkI3paRN^$J$ijlH&PO32IPtT?x#ndz;zKIbhXx4jKH@SW>| zm1nh^t44No(99V=i3Rab*qxJ)N|-3=OYQeUQ;L>|D$eFk?=^%uD~Seu$eKVr95DJ;3YinT&NCDliY6`@Rm*U zb~@fzJL!ykuh`*#i^Z1<*qLQ4$#u%9*tynDKy-KF;l~>uT5vMQ^fYQ(lpQY1(_YRz zSN7+}4^pd{6@9-1cVA^pcWb-g)b{(a?%M7(bI#06&M3IGIO*Bhhoa|LmOW|VyldXG zFg425LYXJ3m)FGX!;Sok7x^3)Csm&3-#z`yzSP@Y%BJZ}8%l3>zAw9<5TcTNWTInP zMgGsz+v`t>=>C84b-m=_uHXOq)}6Wj_sXZD&nND_I`FvS@PnoQ_uJn2_&NMO=MM!A z-S>jmua{FzW=%Qe*MEXU;h^0-|h1_`E5<)zS9QN z3+r_HmVf#cGG}_?{8#+fKh?jzd)mlG^!)KpKMa4~soL}HeQMP7%(!W9A5}d*X|?Z~ z+WcR2YyaDZE<0^wceUK!S!kC<(&5(5c#*gSU8#C2KbQNXXoBe3eH> z(K`7>25ZaHQaX62b%aGmTxvEbU0!nOzK_K{+4lijoAnw#J>GK2{j~Fr)TdQ)?b3Z! zzKd~wqp0vwX;Qv_RUn-cy^lxk`)^o@by2jQs?N^*Ba|+|k_7slD88eC#&+%P6 zcjlv_bfR(igsm1v7Qfb6oNe}+{qyj{uWvHmya<1DjMq&)>B^oh{3UsZ)K4cyJ)Hdb zg>~g}!Gan$!Nv1R8=NyL=H%_j{Jw>ywA0{-yOlEEvn@ixQ>U1^sfOh} zkg$4p-1;8h%(d2=K1<6jpDoEEGihnyyv6S;%=aC5b%Oh=L$dAh3m1(hZapOJU6i!? z!NwIcB-^HyT6cVQd*2aw>&i5{OUI|pII|{ttJQ>RC9kqW6reW@g{Y$LBZ$ zZo8k>%aL$8t(TK=x5d2r%#0h)l(VfTY+|@j9Fj9jZn{mSmdZLVDcy$3>_rUc*ILN> zMF}rHCURk?m#e>w>+=;M^Zstsp8Rq0i)m{nZwv5xrMPsm+*PTI>QS=KKMFT(n7>>n zMw-($zIV0J^|qW7o{6Cc#O?&U$uR0%ms|R|Q?~Z!a`F027h>3R!dI$Ue*O8hbVb~s zu*c~i|K8fQ_Y8Z?egD|o!ggElN5*}8-o5|lr;nXBG2Fke+^YTg_fXA)$-jT4TG!~@ z%MNb-XQHua~!)4!ihRlIVvra*Pl`Iq(e@kP1!R{xAYRG|I2g5lWF z%}aHj-$}KZ{_%D9ef{Tuv)`++FztPE!tUUz;-BI3Tc@n{y?G^?jmO%EccxF8g7JbM ztn>bNozXUuJKA_gY-eBGNeSz)fz)27)U|I~lN z;Xz}gN792fPFICO7r~8NB=)&peC&}ScT><%B1*=5%K?W2$se|GYUTO zCwuLdl$eKV5!Z?|wnp4#zY=*%XP!2T{uQ05+C+|WwiEkuI;G-S+qLatHfHzldc%1= zZ12-ov*-QzTeLKC-HMe{Rx-WMmes8`6HmPC`XhVwwVgFxp1_CxH)d4X@AOb-eCyUvmDo0sWH+vIYKeht}e2lN~M zOZ}M7V6XYHaYOI_B{u)_8yQpo*YEkYo_YUo`?#PPVXZA{?(TilKKd^E|JLFEUFFPO ztU_hKIeyx{P(D?|UgK|Du=_UO{~cPH|F|E_Z>(beW9oH(^5gejm2r&qY?fjV-rF<% z4fd&axh?H6)8a4RA*qZ;dv$jA9(~VO@gh%NEqt=Q`Od`4)Ji)B81KJ+>6+!K}hB|h^+8K3*kY@O;C(Ym^^S}5V$8vB##2fi*n=XQ{@ zWu2ebrBtcSMcbM-O!s;2x;{kmoc4x~JTb8h8!b6sl$Nz6 z%`090LG*$(^BP^_1Lp1=tO9b`k=)ihc26u%fAFD+^PWigjGax-y2FanzWObV3e7$3 z`d1_EIYYpywJa&Cr5Qgnz3}`L`8tWS%Q!Z%Bz~&Rv>#KndA`n)bcndED7rTH+ojfL zHdCrBn6s{BnKLaY)92FIue^OdON(5Uh-BM+QH45|TbI=$umj9X1dU4N`=(7$_T&^vRU%_@KmNDmb zu-#*ZME#sMqC0Gxr>(Br#Gv}TZm#&>n*bQ3afOe|3ocXnf3z1lLyZSj<2Rwp=$3wr%Sr^U%g>bOPcU%@u7;NB7G9P!3I6|F3oN*ZS$4>5V$!{ebc7ao3Ron`kRwKOtX-j zBD8Jd?W+gQnk^_zGI!~l%#dk5x8dA<`Ieru<#mqNl@qEe-h|667fTnqrjpc@95He8F)2p1_7$9g7yYLlU#zTleA(36kZjvt z-!-xQZ2Ru-P3q#E`#D23`@2L+?ufJ2ZTYCmneBJZU}>9xt)^z%1&#-H z(Z4oovMuISQ}gji^$PrPh-tE=`J`_L8#lEqx!{$2HAF`F$ssM}$1y8=f;Yv(=RXT$80dRyJ?q~fci zaxQ{R4K2Z1kFC6SmKy4uiM-LAR_`#UCzv%Su3_p`g*iguvGHEE$CzfUe?D#2`pYrV z3=bqd^V7Je|5}~A(&+f_h}T}{3q!7b%*vT7_Ic-}DgUBwT;jH_%DucNBEBdr<>;TB zlN07`n%Ap0z2~#$D$71YlS}73uc~@P>@Q8ceo|ebUhB-4SwYuTk_@+8pW4grX)m&z z$$P`T9W0hl@4AP}$YtDAWH+9k$-^7QzQ(h)QbXLGliTh2Ci4>-Nt(0$*h=P{u1{Ki zo+(SebmbI@x##}!Ju6#(=FPGr#w>|bHoYo|^IB@Rw`|Kb@#c8#1y#DABab~$ZV+|n zjgsN-S$OoOXU}5xndyfybE5$_;<|mRbI8>@0Mkog=2*! zPRR&QewHX8u=C=);eCe&*jjU1ILftl#ry z@UFk*zU;;Z>FbXIlq_mW-n8-F_g`IE<8x8eT}Dox=l{R6`W59no^HFnIk$g_j!%L6 z{leRwj9>UKXB$S9GizqY<-fPAO8ob__Vn+6Y^#;;-#hYZQJdnH6p{YNVw;7peO?^D zQUA>I62L|`Z`U(`2*967kee%=g*pV zZ~K-qp)gxjxASYimXxWe*=|;D%V_zyx5xWrcIkr&7rYu?tQGxxYf|GzE1}49wg)&f ziZ_<7B z3QC=}zUJAZ@7aaA|3k&+>xbmeKXd-+W^dEiOSL|Dzk0q&ciq&FE5ENlx%^U`UA@-2 zrK`S0)yAD#dh73|T)oGC=WLn&X`_+-(n6ZkeZe?`wIHSYeT#?XSLr+e^}p2(d=Y6J;#imFn~8@5i>gTOKa6-LOeHIp@XR z4YSRUP2Y8q>BBZAp81O&8?5aN{A`g|cm-5kF-^ojax zbDqFc#%*p4FD`Z#>zYX47G9L7b)Yg=D8rI{;?c^4Q?oQVs<-wtZ75Sa!^iw|&CQP% zoDY64v*eJ7V-2`)ye~1QgQLPi`{=2@B`Z7}CoX1K5O}7_=;c1i<;({o+A?nZHa)KK z;Pbt5)+uvezBzI1tIxs2Eesceg_bh}hqSJZ{=%K#um95dbnfo?U*#BLE&m@)d9l3D zw>m{9=e-}hmASy?XKz0=O+UQ=U#>g43%O8u)*U7$J z{6#y;Sa4$5nm&Owojrjv$`-OOl26;Mi!@b^Z2bP{$(lg9oC#t!8#p&%15A z|Mvc87xO-N%53e-yCrtK%E)dmUxctr{Uf)FJ2j5lt+Q<7%T_Lb+t;F&a`go`TKCk_`{&cxllD1XUBk4Zpp?Zd)2DZd z8FYX4Pd#E7@9<3L;>pfF(`l97k2AI&7s}}33xD>UhckxHRb8`XwWRCn){L-~JtsS- zh(ykP_GgA`{wmMSJKGGI=84b$)ctkQy4}++Z1L_kDg7A!O~q>Y=da=MEs^UouU~ta zeSNBU=9y`U-aGGvUnyVDXr}*P?{f69%`HD;Z_l^gdcQL3e$iX4@4?mEPS;)tejj&x zd)>;Kb2Fc8`ZK-s^G2(mSK?mf@816>=%@3XgY&u`_kaEK)Ac#?+0GwJoau`Ga+4z2hUfAJQheQb&($&!}@sb1Br= znz13L@J>;CQgg+uvWO@%3#0cx`1dS+F18`XE$Sc7QC;2sihBYt^}`%`T`x|3e|eE8 zulj*qk$=J*A77Q*^XYE*`+Hw+ZoO$!oa7&G^y!bcN6Q6aAY{{{LWndz0LMfltR-I^dnPpZ*cZlWHDw;ov?HRYdJYQ0lmzDKZYx;;buJ9u+Reb7)nC6vmQYRc!xtLX6gX7Yj+ zM~`U4W$0@k*8R}9^yQkV(SK%l@ujjY2s`kQ$-;*D_p}8^wL&eUW?nN+;eQw)vAX+R z=E)wL&Dy(z_i0I3iR;eSyWJ}3vh##|r*L=i-_xusqC~cxn)4`p)spaCx6YLGG3?hi zm=XBMP*%O{-OCX1TZed@f?XwZ6(Sk=wUwWGe4N71bz>{j#K#jQmsoFh)=mr9Q^tB{ zox;>#>l!|pIO_Rao7%d!>8kePJ(`JW-)=3^Ud8Yw^CR{LPRgHBVl4L4ESGV2 zdAFI~+n3t}-naanbEr(W_xPEXxC2+Ue3$l_O1Q5}WjL`=VEXf&=R#~8_)_kkGj_R_ zDlvhzC+_uHrYXVCSkC3oJb0>a&Xgx7t<@LAUKac-K2@xL`MQOAO>&pjoxe@D1Q@{fHwua(|K ztq;#%Ijz$B`t{SB_ifxGzvIO3$g0yeQ=Xsx@cDIV?%Mh1jkf(*{ZLO&b^4lT@-6H4 zU)}m()4u7sOV7Rj$Gr0G<`a9EGTV>ZEu8j$CAVwoQ=^iy8=F?F&*qDs_SPal@ygNP z*Du9fJG)fW)ARqDyVKv+h;e$&JupQfA^yasX-`6m*04NTtCOL;eS#!oQu=~TU!Iga z`}4#^eud@DIf~lNhnO}>+;!P>>WM~nYtTxcN~vU#g!E@zQ+3aIM7A8fGij>oWCrgr z&SdqXE>@PzQz7#^Ij3|*1b+*YEYf=|v~Y^*q($mSJHl93bTOPvSGU%j800c1F?~zl z5)FobFO&^k)-b+)5~ovf(>_wWwrG~o;_DI14a2_m8m9Fy2Psta=eq2ClC$VNvm(a? zK~G}dO8bYGh_1G8m-q`6_1?RU2dy+`0iSU z>q%$c@OO&q>)gsPoZ~gK?!*hdj~_Hj6@1P!&Fcx|Ssv7MtTXYAMP{ANwmp?GlN)E} zEt#)#c|qj%dAZUvn;zEfKXmJi1W)_Ig&PAKo;zeS&-6)dvQP`S(BD^=C9$XB&Mvh} zCJB?zEY94bvGfK%@9~Wff44^`P3cSbS+;RvUD2Tn*~0Djj93$A)xQb9v)0YYY)=IL z7PAYcf>R!~x91u@IQ=B&$4AGAVzvAo_G>a?7tGI*EL)nlDCtYml;8Jj|C`!Zemrsd zY@=NX&te0mUdNv5lLa!eig|@$&+O%O_rA|~d*p>_FE7vJXAdT?tjdcZeu6Oc7KDn>@^ju*PMaI zM|pQIRG#`X&3?@d-fSPn)7y?M7GORmDI(YEyZqd1N#6^)hFl8wMXqJFZm?atMxw^~ zxf_w?Oe92u0O_?%!42(O^FL->YW8UdIOViD=7=yCU z&e<;THS?C*!mURp3Kh>e^dQdhf%=6Ck3%!^LUeLWy5{&*x1ZV)qN;ZD6ZeLja~keH z-9GEMR9WVeeRDoJC+-bmoulhev~qukUU9N-@bs+=CL0-^ea$%#$N1j+TCqmMXATL^ z?oa1<+WfuFDW-m!E*T`e_|S|V{%2F}zuMk&xoXPkZ9Xf7U&Or>Uc5(Q)%86ucKS2; zc+NN~a_Can^VL!EiYM>Y-CVy)u*5f?C+Pn&gZamo`2X}=zF||G*0Kb{UF%j0x#vpD z^XfSKojdnKE2pj4v(lwTy`EcGH%L#Gn7!TX#5DHUIa@lKHyc{b(oo1;&D=ZtfVs@F zX;VL&lxZ=rXx^UvS5~t3DsM2Owt3#7`7+L88}gG|R#tWK9^WV&W+NIWu{D8 z_j;v+jE)@Jz^kk&ee6Mi!ex!WARJ@R=sd9|ag3uL12 z$>z8G)zRK}dvDrhjsuE|Eq$~XEH-QuU(Mckx$9U(S@Wa2AH!zs+GV@_Zr|Mv&&>Jn z7k!c4U;U@+Sl7gV5;E;8wHLHEP8I&^l&xO(`2(+FXK4s<-f??a`R={Gmpma z`DvVZLptw=`uh5#=C{j_tofPvKZ~s*d+Lr%ewo_i@q7OYzuV>hF3g%y`Ne_jx2qGQ z^=rQ$Kg?bC`Cs(A-_dfvq_@4Dc<}VB50{_umfx0r->0t{fAHdriF0)RUitL(+q`?_ zJqsOI_ZZ8qKKh}KtM6FFz3=9C%GeA4P3V!hdOPr5XWvxmmQo(mW{qPR+>et4mN`$o zm?t98w5Uhj-Au@B;`4oq$*-Smaaw(5)s^zpwDQ){H$l_hOqj16|Lfmo$lU^e)HSYO z@$k3(ePvSN%1J+Ee%4N3*#FeJ{+MF(X%-e`s{+*R?sE9$Gx zAJeHXk3X5!_3qQp;L07-_Amcb;u`xWC34->|3OdxgxrngE?-&n|BhL0(EBRE`%C}W z)jkV8KRxqoIMb>X7OU+(F4121{3-vp{^_;NN9~F~&R#ahb!Wo%y-JTPyv5sdzy7KD z6?}AKuG_;9hudeSu$++CoT}v~6L{v#RYBb|PnJ4}PLP_kA;J9G`KN0co^mOLrCcm+ zZFA#Z@VoHNgT;p>&-+#%kLT*gC$H+qMME?ZpoPY(*`9BcK2Cq+?8jye&!*S zwVs=k_iI`>iTsUp`?#rECH3s#4Wh^EGCKHVqmy23R1=uY5Y#AHBDZOw;iDz1`41_` zO-ekKS0?ph^PIQlXD6Xoog;3=Z+*;@Mv%GT66V)h|I+oJN>j*+bB5X-Z%K^Cv!~|4dFOmsvOPFvZ}*=jVj8^3xZ?Yh6F#2= zH$OZ6Slevba(~&~8ywq@H|bNS`Ez2Ejk**=((p6dRs&iDQ8n+p??ZEN3f+}u=Vdrl^ey^SF` zr$FsPRc*gv>KxZZUUz5tXt~F{e!p-2R63A%tEh+RPTrR3ngPKLfBDjx*3R8v`%;suc_tci9p3dqNyyUuT3*7LM;{KZ^0@vc@@1p>@#%}~&rQp%ezHt( z?xEZNSbM+SnYGu#W`@-w!Su3oZ0|11o~!s)cX;vrqU&!e_ST)(%c-!xduk8ckAzOg z$%~(@zPfkHY@MDDk%r6IL|x)noRSUpy7WECjLG1<>vCC#*D5_PBTGuvIB(dqbl>@q z#pgKVp>JVF6^C{ac&3Z(;?n0!EYe%D=-!9$%u1j1e|F}x;zMz(Puovf^&x8h-`$gD&Pcv@#pt$NZC}l~pB*(%WmUfk z$5j9KT4=o7CXWA$e7xP%y{g|G*Dkke)BhoDHzRqz)#hvW^<+D0a@MV_KW$=~bWul5 zbEb=F-33;?HE9v+e$4eeajDch#XH6IS$&(+2m<=U0=I;uH!)+cJMm?M;L8saVf z@bb;)#oOM6911hqn3Wy3^jYdjo%2fjR5M~fo_6J5x8S|%I>d7Y?|KH72`oHMnxBY*teV#|cM$aPuJ@~}q0O|Jq zd_2Yb>siy#ZEg;CWSQ3d6Z;YTL}Bkk7Mu9#`(I7eoAUj?A(Pa9VZW}nS#hG>221Om zW#S9|e2pr-@Aq^6ulsCY&Hw*CGW-8#&CFWvKj9}1*0wf0V1J^pmZ7_ThQfZ;pQ~zq zq-)eVe|jH~<@7R~qv2n6r!(u6y{H zs&#a-zTh{R`;rlR=`jJHz*(o>?q><+=K0O@Ot&FStDxkdh_&&Du)Qaku53>+Uw7v0 zM~$8*qBqt&()@GAC${l$FymXXf-QOnLLMAB6MN{GV4L}wHD{IxpNQSA{@~ZsT<5dV zpB9MyniO+m7AtE(mHoHwqQg8{_OCawZdu`zsI0H>w!mh6u*nReGR_C{8h@01yj#eY zb=L9J^4-CES4u5oXw;U7H=nfr)Qz~tO3??ac>*FHYcH@3n~<;Re$_s-;rW{y1#jtA zTP=4+?-|q9$ey}u)ZF>JF3s=bxi>Eg&gI1Sn5I1_ZHqaW&9o+r^~jv(Rhm-wMZ`)2 z9~pD2vu-xJ*`!zLKJ}Td+=tNA(DgpIdpGR8{dK2t^O={MBYV0-N+)#xn>v}{?_-5h zN%s&bMTt#!J?bXee?9s{_3o>N#FG*GWVV0)>}r4Uo5{B{hpf!ox3&lAJw7$PE@ZA` zh&v~1O`l%jG&>P)<0`#W@5?LKziyM%*~?OYPRlv;(=@-&$9q_e)Ia=`iPL|ik@Mk5 z(ZU1?(|9iU+u3y-sG3H%R6?P<<#t#I~F|K8h7GsTiP?Fwd#2j z(kGPKt?f%%^X^BD3$k3Vc{dl=Si)?=H>YB5h%GMHhipz9HTVM8^k@P@^PNn0X+G+dN;d%{gzVU^=z z?|Z&4w=uTrMbAI9p+~R$Zs(j!IUbWYEIr*laheWyr;J<3JP(&CfeWOQj52aN6_Y=z zw>?|3apkt{R~o<16cCb4TJmHsg9PI;O(VYv7kHc*JF>b9XNd?aRs@}j&@L|zK2dzT zXY!VZA}k^qx@)d;<+h00F7aUd<^158+e9G?^@i*1?ui+N=Qh}LNZ21cQxz+*aqosA ze>t`JhFZpzt)`u&(jTARGIlxs_~IphwzX5PM9St@3yazVqEoaOd+MIt-pzdcnKr(eJJ?zbiUTn#) zXGx}C$YcE*s)h2CTyjSpIg?>Vm+TcrhENAS!T@N9=768UrbR@-R#F# zoN@wgUaAqYp7hHvwLbXhkKj7v;`kL`7lzJqd{u0__}Pc4v3{>-*)tvt5BnNC%jo(l zCYcrI_*OYLs#cU~oQd3ep5ygi3qFb9;2tkkeml#WtVmP#DQyD9g?|K&?6~J1w_ZLY zcY*v-$D@g_Iy?{Twv$Snbegxf^Ub1$PV=>MUIw4(S(tkH%bxe!eRfZObVsSvaJRuu z$)K<`+ufsHf4n%+KxP^5?u(bD3}=+7U6|1+z`Hm8Z1uYJ+xYiH*j}(a{~$JT+vW(_ zpYJ|q_XQt6)q7`c*`Kew=YO1@|F6fs{_E|X^(`+9tR@8RvA*{)>FWuBD7iN2Z;z|w z(vPov3c4sR`sDMwuLR{~?cc<6ys+;w?wBg9_WoE!l(lF;S#!{Z-_t@Qp7velYMA}b zp<~+Oc)`ufw(i@&sm1tMeA)r?_US)TZkoA&J3Q-}FVDi%54yL%o!Dk=@T-l{@KfHK zmwRLJR!> zPx&!hIiF8Ia%bcGdw(6gX33YW59Ipy=V|#KOO6XQm${-J)K`2D&fCrWzTG-3FXgse z#_Z0yQN?rK{V4ojlvcFas_6RL2=l`^SLO!ZDg8ZDSD8ii}^GEIc!|hqSvlFizeXbvAWWVg+ zuSvUhO-tMN>5b93?5wxva$?o_2-#<=&mS*5Eg{u2@p)~A<%UBmj?~@x;I}v7ZB^C% zkB>hteevRo_8iWd&6V9jGq)e^zG*o>tn+wgGxu5p{om6J&DOl}SZwRNv#C;MyTsgx zos8K`c9CZ9I)Y{%&y0Q*bt}<4cgY{MgeeVIT9@7_=2?AH@u6?=gKam3CkqDT3LMW^ z6fCIlQ$!}xaXRnsOy6|(M2CL9#Y(f6iKll2CJRjX!E>RPZKkU#Yug_e&SQOZ`)t4{yb{98YIkRu$_s6>$e##~n$Q;hP_VrDlbWPD6vud+-^CgeJmY6%q zBKP*K#SDjz>;BH{)$hCI)0d%s=BoX-^&XL*&%V;VFTd~6wws?r%k_1hY*cQ!yffxY zC{xP(MYCnuBo=L%*=y5dzGO|s#WyEjU8!@<+9{tOd2`}9j^Ez}qS{s-6pT>xdBXp% zt^6=|UD0RdSmQ~Hlg=EQOMZ80ZL|0ydvu=0ZCMkD3qEQ=*mEo2QQvG3f+ zC$pT-`^YMXB@bVOub9BCT`Q8lDo}Wns>t#smfDLh9etRwchQvH-iw8u4O%uV3OuTL z@aWXUzY>!hB^(>CMV<=0{^qIa*QfIy744sR{{G2SU*>ajmt3i^-&0jn6g&H{&gE-! zW?Iyg+%L{u|1HF7zVgi1Klhc*{iFKQCUpP&Tj8}ncA@gq&)aWRuhv?3dhe~{-zLTj z{Wn^-d|$m^%=F*;?YI1~OYdL)?ZNc(|6eTeQA^*Z`1JeviOYX|S$=NM{GNZxlTR$a zarytc-^Y(XS!wcm#;VUT4hl!OHuCY!DR$R?c#u1I)A?EUVrhm4e%9b%5<` z+q}k!``Oso%2;2loym1$m+Hiy|Ai{u6O=y4c6CmhKkMyy)DMaC+MG43oxrCyunJC!G{&c3^n&>EOhS24%VP2RIqxvOiyX zu>9ZdKYNYZufM;VQ5knkKWfD>LBZ$`r~Kj?Uz`>#y&0TUr)6F7WRBrpyZC2YnGR2X zn6-ZG`DsN`f1fkFYfb#ZF4dm8H|E)0okMz#4^|$j-&q{+=abGl@1J|7ew{Ag@Ky87 zE7Q5D`=+PHc3D+_PhRlu^!?Yk@=tVgYkpsCl>y;{lFD5aoO=te>)hSe}A$?iQWAgvn6ZMtAJmoA9SCX zGA;V=cH>NC;G@6#Ga8?~(!DTYkJ9n=93Qibs``!YFP?h5Wc!l}=UH`L-(-zv3AHZB zmVPj8j$44V&t^AE_oc2~0-x5ICqC3+uMbGfW5T_*7Cx#@~S z4Sv)9ES@2Gtd#Y^>tMNbwPNmfVGJ)e>OZ*ma><{$k-IiCOrGBG;Z)K(ZH~Qv&gR@& zd?Zt?(mb?awSD8;bOw3#fG>B_Ha4ucY+Q9V>ej+(?%P{S_cmO*%<^ziUGk(dU&c#* zdO~O0W)|8kXWFHA@tW1S$T@;b6n^S1$PAs!w!r`GK9Nv~E8M5Iotn62c2K+@!_Uy5 z2{kWXO;23t8zz-_K(Dsi?L{i%KK=YFCDlpO&vSNZ2X}hu{+czZCNtbFd_qN9*#UuX z3w#pmMbqllS-M$v{r1~QJGq01~8^d3JNaEg5a={?{g_7N; zN~_c5=kBeo?CwrKy({Y4!$q>s>dFGmKR=IJzg540%YWtV)VOC)BjQ_DevP`m%2meu zz_&eVOD{(S9{*?5%kOY+CjW1*-1b!I*k!T5e!IUjKF4rp`rDA#4!ZZOonKyEaY<=i z_YV6V2liY!zWj4iZNcjDz;}mK_>AA5ReH5a?J1K>+&kNIllFhA=8fO9xa(`D$jWo< zOKnbh^aZiLh&fr9=-6SnaOvnA|ILM)rc%lw$Y->dy&)_f=W|mki@yq3U%AWSb3u~kp7s$J{Z{|$5Ie1{#>5|+>Z>vxL zUATC@%-q=#rt|E7dpZ32Zr$E5C2wk}UibBx>i)g^ldo3%TB*3s?ccMv+I7GG@nt7o zt&saY?eLaG#g8~1`p4M{Oir@*kg}87xA(U2=7)FJJv9GbZXsK-)AB=Ed9!KfHP*P? z-$D0h9=>p?+VIBbiyta-D(hdoxZ{#+94cE=nIuFx2||T>t)~oG0t+{!E+lV3~9pLp*D6meKyo-@H-k z`)=7K^ltdv!MN#B;hhUC=XXgye|b1#=ILV(#3r{Lb9e8Fnz3opLkrW8hQhh)oP?eg zS~Hg%^{^IW%UWD)xWbR=LTHjgc;tNNO-DlJzU@|=dvRyOg~?}XqZ%6Au2z?GRqWa{ z?RsX&xiqFT)8eO`ijX}jVY-X;K@7u0OKqXHCE5v*Z*+sgj%XAwKE<@H@1y{ih3HlW zO>Gaa`P(di%4~^sJZ9;5X1U}}ra6pG*IvxwHvYp|ksD&0ze@7Ut`wR0W9vh$qOU(I z(Jaoswz)80E1@#+@}$M3tWMzuKR5Agy|=2l@zjdA-nZJfXEhXF?R;2wa7NtHYrEHE zdoS4Y`BJogrQ z{zw3=$TV1c)5JZ>+OVaq)VScbY{lNn{);oWw_D$ni{FsTZ*uJOyNc7l>$<}pJ$NJ# zmNRSK;`qeUgttp%*!Mpx-yLmb{_*_&pQiik{+sSjj6G#mu>0;}(?8E1N`HGCCGpuu zA?m{y8!Gu=l?DKV938 zi|>iC{gkvdnPaWNf~RM0$!6xc^G$9rh+8AaSh4Ze$E2?w@1xo7f2{gEFSlC7<#0Z? z@t<99cfKy$^FIIQ_xjJ=aqHwOx7MBi`%yY?H?v=NW35M9_-ppe_C#ma%Qj!kc@_#L zm)_r$$F`V$+>o;>@!Kh0 z3*l$~tgPEK4hK9_UgstI{nngsmyHcxaPDMTyIki%A9Pd6&-XK9v;y{-y!mwh^!@!I zVym{C|Mhp}2migluY5lJzLzUv#i!?A^e+Fu zWTN-^_s*}yf%B%Y+N=mZG^@k7v1Q)*nTDKEyXM`VYGrRf>*v1*N|L2k@{>+S?tGD| zC9!ed_w=dXkIvj_6|%ZI!gBrb$<7CEO!&lElNWO2MbSUKzOPZ{XMN5cUwK&FJ!qoD zQO28>0&k17oUQ)y=t9m@wj?7Pp6IZ$BQs8juuPdX`N{6BMb8AUeV9G-Z;kz0N$11o z^Y^~nG;;{WWkSrA4Jzhuo88@}5!Yxf$?3-f1^x<2z<-=hQTE%XAc z#NFQX{oV3RAnZ=5b=hUNb3J(v1g^hOdA{)Q79|&JYvB!6o4#wW;gk^0T=Tqc$J664 zMa$p%$=tZvXt(VS|MnwmB6l-}KMF``yRqqec9e19^>;fnpXx+?ULdgdVO`AS_Gx!C ztc=gqo_KXYLaNSU&!HDbe2W)co%~|Srlj}R-z?*0Se+>#P*E1;)=^Kh+p=O#`cxfi5k&RDuoyDF- zn}wsRU9|iCr~Upo&8@O8t|Z7lcJINN4ObbL+e#i4i0<2Y_}GDCU)Q{KIA?IQZ3ge+ z@xCMc!}lk~k{;_~ncfl4XzE?6%5Gw(z-P zVsh&8%87g9KR?JXV2Rt(zvgX&@5Bx<*>bazESK453`_QWF3*{*tZgkcRq*-b$Vb^< zRjg{CMwT+yzIf3*rF3z1iO{j1Zk0@JOIlW#skbUVnykqebM)eYr==y^7G3_Auzu^G z?Qsv6)iBMAU-$F+wTn-qcK5u$Wwm?9s{b$Sk|e(eS6^R#uQJQNa_93MV(EXs7rpi^r!Z} z{kY#n@Al{5kAHK|EkEs1BvftD@P+l)IeVA?`@fyLv;7o%C|A_MPtWyjWzW~=>@*9% zW_f&iJ@@jnlJmbUU3vESvlgvc#g`YHay+Ya@3e*Xmz}c?&9zu8y77#g)WU146e>B@ z&-;8lq_gLdR5RPQ48DwiLZ=0fSDVZ`({{#Q?PI^ko+S_24*wTDFRjFRJUj2jjZKdm z_q!AxS+Miqg#wk2<~)0zH&$QEd0`MC)zbc;@yLGVkFuTL59sRukZM)>BrRfXq|B_G zKQrQD(edjhe>6KM9$0_#g3+?lqo%EXUiR>KTjD`jxK zD#o;ZNiy3^B<9=?oO3+<@|w1FU$@7+S}N5Tc4_-*i)=}y)A#&bz-5;)#b%yXM@hPqT+iJyuRj|H-ZjKd;l? z@8^uF%AbDxe|VYn{xdSx?{|4t&c4TO&)vVXYG2QMG5h@C zKG%Wm|9g+-@h0*!>HN=csPC0oQSIl|9`MOf!Qrd&*=~nV`2lIZv)(nzdu(K{^X;>5 zs$wm9@?+ARI>uG3UwNO{yE43$WbChZ=3<-5cR=n_+$%@l1@A6=lipOx__OVa^hGv3 z!4e6-jB}Gu@hf1tvN*Zv+0!EKcc3Jx~z-! z+_s@-dDK_&sGE{Hk&P#_8P%5;oJ(0d<;ZOA3)XyRdd_7&(#i3tbq-*A_5yPduS(J8#=V_EUDBYE?^ zYuF0yCU9HWbH4t`vnQ05XZ^`z^Itug#Q95TkInV^m#cSe^ImKGbIw-Rm8F`Oy8r=K0_$JJK%Hu)ff1ICDy5!s6#L61jfK zk9;m^-m}V|v$6bof!n2-r$Zc%e=RyPuYYmnn(G@k%!r@n?eg)|Ii62}%WGovREuqO z8!s>AQ3!q_6aLcQ*uiw(FV#77%&yo3Fx)Kut5dR@EA9D`?tiAuJD#84YQHi#F4ARt z$uYy}Q-h_$(kARF*b?>ntIoatyE|0VxGtWSzPq%!X{Y{m8=b}j)2p7}(!Zp+Z)g0< z;QF5qdZo9P=3lLfxOQ~TcGr1VUFXj@{wh^!>%D28S-Ss4KK7aue<${y6E>@| z;@2y@oi#1#T=G5-_2)VcA3p6&Gh59xLHo1!sfi**iCd->aaLDo{PRoMJ&ju{?$qql zWe&$&k1gatSh%uBaVi%&ceIk`mABJ%Wt zZecmb-6!|V37$|n*TOuzZ=wu0H)~ni2hY}>9c#F&clUJn9E-Z??-P7zr$Zm-a%II- zxBLxrm%g+L;)z&oA#=z^UP9S?nx?0$Rdj^OmOHO@xd{g!>KDFc5!AD3PO!ro%ZGb~ z)EOdAy=hJ?4{4dg`edHTV-`D>NtaC4DlR>9*!jSW9@7o?y;(DOkIU`y^GPV4R@PyPDv z?}pKjwp{a~boRCfKg{?4n|91?S6a&Du8XrwC+`00(b080xjRVES!7z8Xyx_%A1Axz zcf`szSSJSUw=I&X3or;C8m3A*oeQFb*|9y|W*#u+$zg-ioXSp4_>wJGx zW?SVR-hE5wOU?1Mkui@DuGsjF(^I(V%f-hxKJ8xkIL*}H7~4`&!;=*e=ECiTM-y`_ z`uYrS9I{d6InZ35G-Wl*pIIA^euxn45^h>IlOu5R>+m(VCQcPDcqSlo|BelZLeZ-< zgDnQ(l2OtU&8n(rADA|8mk533uWokM!6Rvl`kH5lY9?@gORI!$}W zC2q=YOQw46S!TapCGymcJhx*3JRFmi(pok7Ryj@iJHIC}@#a=F!O0A3ixVd|9-6=% z(okl4!c42tvXM{Qxpc0-=%Xdh48INu)fq1Ix;y2Aw^@;9exjy(_r~~%TupJCW`-v$ z*Ey;FV7t=k%-O;_s{h5#y|Gij_hPW#XS2$4-l^}_t;w9~D7Ro!$LgwMC$`$0DNbe0 zJH4wUiDOmJTz(zicj*mw>TDmln0h_yGqwe!%zM0YK}DzY${Mlfo94ZWiJyPIQj32H zZ>oRN+0KpYj81}ASli}JDY0`*QwrS{l+OD+dy|FW%1S@a18+nh#2@@5v}|2s zT3W(-hu?EV?WCf_GiJ9a8TNH~TK+P;yz7iXXW*Vokv$JLCk0$>sM1&yIB!lO$E+DT z$zeHXI+QN`HVxjA!DPvKyGlMz?1R3{vc3sA+2#eiZ*7*pc4TE^O|xcljlJi+<#7@# zN)jh#_fC1c@&1A-R~{xtebl?NsOXqfVprA1TNiJf_`aL>@0FyGgb&+~ERn1^{QDnU zy0TqV+2c0zhpvoW<$u0Bb2pqc|C)x8V${7i@d>^U{#8WJNiA73TX5+S%hS6L>&EBa z6JD&Qb~rIgaPx+8--C(13Fci3x1L!#>s(*Y!l(D^{&QPdZzyZtaK!!it&?|TyEf`e zI&C?0V0*o%M_Jmhyd213E>-s#Rx#|g-J8!{9hqpr-S=K@|FikEf8{I6_Z)UVEg)6* z_h0m}3m-1umVa&-!gy+ApO|9JUUdf%;m zkKaC2JzjXUJCFT9Ud-pBzb6Ew>hA1+R=DHg>a*7G!mQ`;{dx6oxy;^%FKanJ%UqW@ z|KRqcI|n|$t2qAqU)$_&3JrZsb~nwA8@c&C_%!?5fxJ5gZ0&`q{f3+z58D4~gASBo zn&8oP&CA}-Cp&Szd9a~N|D!Vt&oG9aj**$P;h&{&${BTI``-<%pPXJrTfQ}BTPmQvJlngbbZyQDXTsP7cG2N^Xcb(x4Qd#V!7*mb(iYZ?G9O6=Oeni z=DpEc{j;~1ABulgJoDS}Pyd%@)~(qyU+aEq{f=c^ea@%{^07JMoX+f#+3e>!1I+`SZ@2CpL5cyVeI52>*Q2 zpqqYFLb|Y|O|SZwhtAKn=>p4-K8dgRL7d8yvXd)}<)ey}ammP^9va9z~p_C8H3 zGvD}CMw10TR3+Q6?@#N{$A&U?Pp0O9~NP~W7pEQan9DXwvUe_-acS$ z$thW4I#1K8&Sp>2SStDp`ZF$F6I-tm{``85u#;H-t2~Q18 zYzv6weS6|;Km2{DeeY|z$+gdqABwW?7h=!0nh@Y~QE;ke&-tvhCHyDnyj=21 zMyZeE=^ks<#0_#zhj0I5^<#gtA=Rtz_rt#FcbTKhT_#uF-k-q3TmJT4iD_s_d{}q# zf%Uh(?|B)Y5b|jC)oLfRH+weR*nVv@w{F#)51XnVEVJD-|C-Omi^sQ}VUJ|kfAdku z0|_g>#G}6-PWyhC*Zl0n+j+<9ZWZvz^6g}{XDOVuymX1-yeX_p>gHGlt-i5i-dgKT zg|>E)WtZFT$XNaob(9XeB=e_haeU$BcisQ4Z_xiWA<%TsOqcne4RR}Q+Fp{dT>Z`Q z*yfWHXYd4<^?1tIO2}qDZVBUD{v>YUwdku;@AhxE`L*_i*QUA8_f1Ll`*8Bo@o9!9 zZH%XG{wyME|82d2ieE%KPuu9u|>_U;92# z@?O7rib!;|OQz&;ZQG*fWn0d=d|G88t=p$^`s+etCYy4vFJIa>FtPT2E4B@P`{-29 znzs#lRdXh=*2oFO1_h**d0d*wxirD)*o&6M!H)ty{Yu;I(wmm3R_5I4f z@3-zf3w{}MI-Ga^pSRyFrERvx|BQ%^@qWH(pWW2u_FHQFqT{B0j*`=_{~clf+xhfX zlm7uPYx1oBDBjB67P;uje`BtXOP|iUzdtC`f1dEX89D22h5eDM{Iz?E|Ji=Yjc?Xo z+k5@jkFAC0j#i)kqW64N(l*o6LQZFne%?@_zBp}PHfzKaCR4q8oEbd4VjoRbKerEk zC5d zzTjZ73WIjbgVoa{Y-Y}zccepE?8nciUX`3i@#}K7UR%$2^5GGqI!o=@M?e3H&fUAT zyYYmj_V1Oh{(F6O4_)7*>wjqa-n__dPp!AM>sCjxUevF?WwhVhdG)O2skcsl@ZPEO zI4CRb(xdyQKRo|*+VZ^jbY9axM)h5%Cw}!7T3)sO3r-sM27X=5s|A${ncQuay4)O!K^$1JZo{}K$m z@Mn+BXNL#h;>$GFO5FeQI<=i4S$l`&@Noq((B(!?Ic|zCD6q1f{W?8xo{1r| znds7&ldpvHC1lSm)^tz&y6)%tgddVEo{S6i8xB3W6c=hdJMCLYQA2@%*}FM2Z!S+S zjV$yDn0Zv&I#0&`=?THa-uQ+})8e_IVV~B>cEyCWx`uB{*%oi~{+z;T*ZZ?2_hiRT zu{ryoRQ189B7+nK$Oy__{)@cE{)I8^HR(v$+UXc8?(@%My%xSawy3}~W zry%{f+e-6~Z%%nT@3>d(o|MG!<-cY>*38}M^Lx$Q>EF4F2u&7U({G%7n}=V#B0 z&0=z~KZT!to?~pOwnfjuRkc=c^`VAYtPQch1I|s9V6u#yBKFvOvC4l#wxFKY-kSnV zSC(w``ZV!KgYOKvNi#k@QF!2)>Y@42+2Lu2T37#^Ag`rGE5n-&ml<$oPcb?&r6c%= z#LM-DhSF8XrhHs{sJ-FZ1&hkM7pA?JGM0acGw$JBYoh78Cd?vwPK`*s?>+9r-A)U8 zk4Z#2tIrRxO6n0jR>EQ-mn`({sY=e1zYM?QKFu*|(P;BIn11iQ>EiacVKW}Rzn^|f z?V^Q2RN`DG?bhN;|JF|aCE?a#xVZP26bECEpmTV-<6;Xr-hTGe`^+OI&ulv6eme2Y z4B4f857SI16(4@QQM1AR`0c;5NelMG|Rz9YH{it&gjaNyMA9LC!23cY2kf!H__K)R^lZIC5^LrQN?E;6tls_8gtHy)wuAB5IdSn|;;eMA(hnr(=xR zj@LyjH2m%~dtyibAyor)%Gdtd*Fx zXrq;Zs%sCE#GFME(a#mw_AcDeF#pCXWv}M`r7@~@3pQwnF4&;dvTI5DCacC(`uWkt zVLlI+#D%7=T+Q%kM(Itt)th8Go7*Pv_$Kc0y?Ms1f^+MQch5e>G^|K>C|G(fVyi#T zfjnf6jX5eW;sN=I55Mq?}mEdyJccjO>I` zR2#lcdD63_S1s-IlY`Zn;cJEM%8af5ocT2`rB}pZouHcf>q51Sr{v^K>?GuVn?`ba zTxVyukg~nFtMj7ym()AQjLNQ^J@EF`0fVg>lMSrI-1*xSOH90O9Q}3S(}KK$TbE0c zo>X6!J+fif{)4kN{ae}N-FE%8Z24>1z3(NOC2s8gbZ+)z?Y=r+H(_>P`_d(AZkD-+ z`N<^IeE%W(zE3}+=lR!Xasp=7^16mIXPUk@Sex?J@}9uww>&lb-+oI^NOes!Uw5A2 z*s3R)=6RWG^xr&vH0Ox>@%8WOPrZG0;Cxs!hmS(KU_o4ol^;*Oc8x8$|`oH^z0$E2-~L0cWC zOC3{qU65>(oN;4|t($w^Zrj`6PTW51UHAI~uUBf^TKNrDA1>UVWc+2{)50Bzm;W?e zJoHJz{p_u;Z`ySE|LT^nc2C?R-MTX%;*zrY+s3KVtSJ+C++2;iem~ZYN;f;ZkwJ0> zCm))Z77O=&Tr^wj!21QhjJHmg3%I@A zwSV3ssRzdDn-(FLY~IqxpK~(;AMq zG4GGBe4MyrVc@*k&m2z8dVFQ$d^08ib)l(gJ-qE39tniq5Gm9;qx0q#m&Nb14^>wj zQt6#1yChO}quV*#;G!=}{Z{F{TxQ8JAx87qM#c0OXHE!2Rk_Gpw@eGUv0eIYVe;pNwy67ye`TX#fr-^$QS^e0Pru~trWuN(Tvv&H^ z8a}?-#ARkr^;TJl3dFK}j=bnMaSE?p7!LfI>-FYiaBplP7Ctc5OcJeXl`J`qB=s#hVpbyiJPc*|vxt zzH;&RG))U7ra%0DxtHnmyzTvV)N{T?*^L|X?rrCZJ8*yPJdTqWj`#h3IIX?#^r^l> zb@LwFEjTU^y{60O&kz4MLgYl+}%B>YsJ!Y$L|>U9+Jv0O%T6sa%;2EqUw6{ z4(9gt;ol>q)BjF&ld9-sR9pFMTOd)?1PZ+F#1vVV9u?@@B~(&ew- zcz?fo{ZrxFpQ$%a*XTd~al`KQ`zrZ*-L=2oZ!MXxb^rOE@AG%n1V%r-zrSwZ3i}#Q zrJsKuKdt*~Usi2bdhW-a%}0vf?X^jcoo&5t?$Y_Q{7+jInDswB`aP@bnf{?U`@C0h zX~&(bFV#^K+4o_4cl>XUX^&YYnQM9<>CU__xKr`ttRqq{Jbhg1+ERHncwQ{p4x&>HAsxE7qFm&Wr;iVkb{KmA=baeCB0E2}I! zf9si_zg#_PEk8YeUTfvAzx7)^o_jk!UH)h8qhCQgeX1p&8=v?K---C%2Y%qp{|`@s zmPTeKa&ueoStk5r`yppJ;hmsEmD|h+hDYxOzI~am@Y-={j;r+VtjQ_KEur|Jr2oz5dB7__OY~=Jc*R^@mu-$&KzW z-M5r#eCA3uTGG{al_O{?qgs*GgvS$QL@Y~~bk2W`b$H6O;3{jtnwG#CP6K_PBN}Pn z-doJQx6+DvsY<5T4~w}6R;_I4Y!sec#Td7|bLQ8Yw14Xsd^^Kg5i^&|DlI`vbWRMz zGt>8?AEN5jjhVlu3B+Ig_H+lsLiIGaQX};Z^IattBq!?Yr(VqEjBa=#+7scppfIAR ziAlj={RF6uU2(Y*z$s@fA9Lt*)sQOCF|~aj4k?+Gqbm^{5r?0 zI)vfJQQn|)OhMPT85Hdfwldz}IQJLlQrpttM>>C1*h4-Y;;KF-5Z5r>w0^U4<0ZGx z<-roEOV4DnIX%C$jQ8f2LlJSWqo#j2y(P(UFWVD* ztYocy?D0y;dYxnEBkL~)scX(Zq+UNuds=3=z?V(+=N;a3NAKnOaaNL1G|Zi`RBCS# z_r?^*_+_=vI1&xbo_(C_|6lL;^_iEuTxYHNx4zB0+bZ&v(M}Ejm-WT+CsphGYX4tx zv|!fNm-S$HzAyZN&fdzn)rEB|GW9c`MaI}nY;V!In)+^T<6-gB8-mWfxEJ-z*zD7- zH156Mg?#L~_x;#&Ve@=T<{fNb;+`zMcHQW#>W2N(%KIK)(qx=txG$dddHkP$DmQ-5 z+PAxA-tSpaM+%poJ$I@~@R`nKQ_b3mDY}~@m+XA=yz6t_&J~CGFNMhOt2ax_+8g)n zsOz3rNip%>_VW)tW9p9+vz-1tbguXFf>ODe+RhHoo<8%RI(v^*-_;nso!?KWB(A)s zZWdwmbaKw(X9iw1KUWkjpQP!tb=8j5^JZI43RZdA5)?J#T(Ht{2Cq-cw{B2&R$J=Q zCAnC1)tO+g`3-eT9K0k`1=I?Zx>VezYA%>Eb(5BB&qR^dx2EYI6i@do(*EFoR_FY! zjFa=d(t|_0Itx!pEZuNyN=571SZxP$))ak)(;>^_O$^n7xHMQF&&Z5DWI4m8XL6Ff z$?UJ0ahbCY1x+#X%3LN;xQyXrZ^Mqcs}DGDX)G2Gzb{o>v~UnzI? z%r=iR2^~F)CC+T^eR8|Hm7gifhf_*Dx5^?VNbJI&!hkQz5vwaNYF*PlYNDFtlXI=W zf~(`+%^u~;{9Nx_IscYPE2`F9cynA#UN-r}mtZB8vuCrCzO>!nclUzXL|^I3ow7Ii zdF%f^Go5|6#dKzQzpSBV*jW`H_ull&z9wp){%trm)8+cXZF4^aR=pO{wcC=i)Kkr< zr|Y-7VOs2V#%v+4)sJ`-l6t>Xyf@vOZ^6^c@NCk|$R>7~-+$XQEv&?UK72S$GsAF| zx3$R3*!v5&T7(#Aef+mW$)$U1=iLj2K7BJ%?&R#AcHJa^2P|JQ%}mvelQ%Gu9H>Nc%>6?x{&U1g)9 z)o0$kTKDeNvx4j-HU$qJ4ikq7V(PZBIjQ1d0dfS_Kuhy;6H8xVZ zbN9@-Mcp}jez<&jVOeD885V!w-Bfz+!i$MhQdK^kJU2Uqu}FlS#Zr5XpYegY7ZxpxQ`jpka%Rmt887MO zYfiCcxw^f(95XLa^oi)x3}fb|(&SPnhI>_UvO(H+VjmlLJ-co=S7hod(~S)&U=Y2C{-RU1OB3DC|^cr4GUbKCcf5+w$y@TJE z_gxK8j9M`}*EDqNp1A0RuTpD_Gv;66d926yV^`rur&(Sn+s?20vo}O#{nv=Z@2S62 zPO<$7xq3)ZJC-4*l&$F4l628;sn+_3gAD)r$gW%B+PHaXuYW*8ja|9b1|CCclgMSA z8e15%m)0zv{`yjqU#R&DX5)^4*Kb1pAN6buGOBy(GeI$YUbsfjG~P|lCO;JFP6}~O zU6SLbTI2IXgP|dpZA}-GoXgEG?}`RX!4I+dI=c>>4dYIb zovd+x?VS_5Bwz5$zV9zD-Y;?@ZgXB$nBN=!{=?gP7Ede<M~e=+{2C)ko@LK41OE zdyZw_jeW^?zsM{X{ax4_v?%Z2)5rYJ&i+^*-v4Ncf(75>wmG8qdw#YlZjt$Ay3ayy zNA%mu&2s&oI+&;gmtM{A9wParvRo8U)noTx5(Q`OiTc-EkQJgh-^W+ql(sSjX z&b;Z95KV6vx6qwGRgEIefY zwXU91|Do!hmgxb9OocDVJMBoS`m^Li?X;hq!nb7h+5X)xXZLN-@=pbsO222A)J->; z@BM#ev7PDJ?9?FtKmV?L&wl%Hie+`>pIJLi_3h%VpYPnT=O5?h&ocLm|9;*iH?QmU zt)0_vpR<&S_yRg(;SJs%7Is!>SDMx4OEMLXG*!ht=ej~r|0C!NgcX&Hy)L&wwSeeNn~OXvz_X(3kJuY zrNp01%j<4Y({{~Pzjn4ksk_&k_1!Gl{g!_k*7MsxnZNI6w$$65^7$3j6=#1xoHpm` z8ng99%XDA29^R7Vqkc4RxfA2Yr9W3aDqFm_VadV5GmB2;ZC%kXJyoLX(yzk>#_Qv+ zg-yBUys_HUt>JRZv)KCM2iN~Nc{ZH2Xu9b&5!vGx3Lo=*u3Esat9UAYKI^COqwnMv zC35-6h^sMfj5gj>*1YC_&yAT|y&{zTSpPly=+0!ln{lpjlxv&kqitb1$%>uArxdv_ ztS(VwahA6-TQ@&9D>iV`9+4~j5>&taE#ulH_1^*) z{MEEz%-sB_V#3$Tba%$-i>G`}yp!bhKRD$c@A@6`d6s_Kaa;RUwrt4_oYo&%%p>c* zKk0Q}&&r49zt1!7$m~BVDPiMdzWH$D@yyfr*5BMQ&#vS0CcCnl%ll^?j9$K)>1Wq9 zzdh3LD(vqW{b;M*{%qaNLLS+h+G{jVJqx{Ry`?4R=dya+>4u`ES@U)F+t##QZcL6j zJAe6;4<|Pj?zONxBenSP8lE^=vtJp{4HG*aX*g=`46oTz;+FH`{W5EjnZB1d7j9bi zf7$&9Q`SuN4b%&_O!jEWxu8|}Mb<82<9tzd3FnLrehx3@$R1yr{Ap2He$az``xk%L zmD>2Z&vTBR$<5CXw!b+%E4rK^!92&pM|;oaH^+D*4_=c!8M%@FwNY8dws$9Dcc-Va z$+he5-jK*+^v~z!$EP2D{`t4sP;NC-a*jlhw+)xXyO0TmqG#`|w>-ut{N!&`X@&VQ zHrHdTJp8&A&zmtPIko-fx8#nJv`6l*^Cgl_-+swAooW4B=C$)AlC&R7bv2~QA6a*4 zrstF^#cB3yPijLP&#QsjoG=$0Wyp3c>Bp8?OSVP=_DV`SJ=9(^H^oTqYnnk z2h1ZGJ{{jMHT>&QHL1mJ%X`jGOMaIz=lR%a@!qO6!`dl~|&r<$Iz{f_DX{ zbZSk-r=Jxc{a5y!dwKi(6>pu_pCni7+0~zsdF%XKw|@Ve^H*%_r!VimzRSPusmzjh zm!khgPqU5R`D~?4yxe}BrSpa8$93oee$ye`C`AnZ#VJVmfmYW zbo|=e)ce)1cD>Ke{rsEj{&T4>oBqwuZtu@rpZzfT_mOt3f4kQ(@6Y}*!}M5t-Te5Z zxSIM^GN&J(zsaOEX}8Q_y~lA*ud)jLj%FLH%P!cp_1c6&7M-Ms{s^Y5#(-=kX(RjN zA7-5}KhWjF%p!7s!A74y0zVX`0=>;y*{;92`C-A@1aYK6HkQm)EsSWS$LSye9ZTQuI2 z^bg!L>*3Q?vsAWfuAin`xNdFK=hMASrT%X>k?^u8E!-u!l8=h50{+nENU4MO^*6$q!r*3Q7uowT&Tku_T z{{BCHg>!Fxdn|f8{*ZSCv~2!h-6qcP7gS1r5c+4}Y<;ymX99yM(cidR4>f0-> z+*T_1e%CH>}X+e7WfjsC})bU$zx z{n+*7>3n8;w<|aL53GB#_TZNI1+qWdredT zb7H>Jw9EOxH-?{rKiE?DA6(b3@!I3E>=Wyt9jpq=*PlrA51S`rHRaZ#9H*CoCuTl5 zS*iUrp!`Y7$wF5y)(7D`9VSa|Qd4K&sC)H3$HplwX<^IWoVmu8YP{>@jHyBaCSn?Q zir3wVoqCLW$;=6J7wpnVyuP)7b^2wNe}adSdgC8Y7iOKs%JMI)hI@ex^OGw{&odk4 zi_iLpKKOR#)P3U}u@ByI%{(Q&j44uFV58B`(?#bltacJf;ZB&nd5U1@Bi;qKn3%)A zekx&ly?X6|b$(CRl`6i~b0}OJ9V%+;y>}MhnOTx88->#e!as7PL(n;;PtMv7{R<-LjtEzIFn7S6^zRYX2St0Ogjl}*J z+jlKpb>{gcu~pwVH$AcCW95rKa6jGavFEw@p^v&lT= zcT@Cg)~!GG<#c=R{$V6lylQ#XxuCCmu1${GBX3cC@b{7Eea0NN@l$FGV_6rRS6X*H ze$UNWp>OqHCGu5$EdBV?XXf8qvrpF)zWwy$(a&FN1Kx9rRYpzQ`mC~Wf8A>R_#?*F zlU95`vg!R5l`JWy`tS|ApE+OsS2;0#tIzW_Gd`B&1)5L)TzoQb?RJ~rAu}eP){&Mj zt(_Np<@L*J!AvV>>m;)-S~L0Cu9X)O8}|nvu?%eBRh*QpbhN{4C6Du@?kUEaUecMt z2c4S}J`43LEh<)HJ?Z0iASl;FbEVOilg}lD-Lg$)NeFdzT;f`s$~VnGV{u^WVznqv zh4?EiMbkDOwh9cG_{VM2_ah>KZi{^-{euI$dO4>uh5oc_rhW6ZFZA_)Rwz6C%t-DsIKtoZ0~`9#}Xgx z1f7*8aTq?VU6%bIG2KAyUET!W%)M$Zfqngfx2msl{n=-)l^53eH$zhWtcZ)F-4UNJ zoe{f=?YX#anlXiZYfifFz1!T(nWyKV;n8V_Zy5PD3b+^fnS>qtn>gwF49>1a+AS+8 z>mw4k9{5ncdfx1-Elh0r-H#?~OgWyTT5n~@8Z0td*{*48r;KuYoOr}89qv;zp8BY$ zXfIfGN@6bS7qe-JSsz&A!n8gXM0}jxe%)gBk4Jg^rk(5W-(T1@tHS5O;)fR7jx5Q@ z75S=l;OLnL(J|#Nnn(X8o)wVlId?=sYjywMRd+VeQnYA0Sty}nx!vdDr=Mx=Y&92B zbp#6D7HZ6{_Lkhn>SQA2mjChMqvnGz4!nrfYl=jvn-C!+^ocMI5{f0RAr&1 z&s>cutC{AdoqZ7N>Ap~4YFyy#q9r*JQxxZ;509^0abWtUrE8ww z-|FjgQAsOTps8`u1oPIsb?x`ErK~p^*&1d$86>5hFj{x2LP2`9^A%%`g~3XiNAvC! z*xxa54L1usY{K>BLR5d@qCcry9ggl!Je#~7r{4YII&;q<;aQ=^f|DNKeJH9Z8RnPJRcb6S`Qh7#U*CK&LfkDU+LX&kig?~X?X z>pUY1FU!4r(_zfGR;WGGIbB`qb$YsJ@RW@;mw9|Hp1a`msVc1S|G{sz$vH2k90@%w zy6IuWf(dh$-V0(}fB$Rwo~XAkn{)oy_h@f>E9fxgzmxO(=zFs7Z}?{yUSh1-TYt7L z#xqtfo-v_o*U#T^BG=>A%Uk+r$E}yI+**~w!@IlCc7F92+1-h!MP$qG=7mkVZRXB* znQLtk93cMjA=ZO-lUah&qx`dNo`^`vVhVZT}|L^HgkJB)kI^=*z?Y$NY_aGl{k zi+K}yzlr+U_qtbx^QStGec_rR$lpB3Meb?a;8_O(p^ zAQX4V`-i*GJR`^2_`?5oheba>crP+d?fCLbzt&~iiLT%E>G#u};XXU(U&)jA`n~DS z%;%SPOq-wmyrz0)W!|?vX-2hL`%bUDIX&&#bDs@g<-^ZazPhvA=it{p?}eu2)<*7^ z7k<8}XZ|I5{o6miqDs%L7d-B^an1Yy)=lR)W9PnF`N)NTqx%9A!&9XzwPwt=xXt}4 zD&}=b)a6AkzP94WOFZW@98qZ~FYTMMDb0u1rJ&U~fJ^Fa=dlTAU9xR%aZHH1{=fI@ z3x(I$E}93$Mmjv1VjB2TvgNMX@lD4jo1VH@{zQjw2VdP$iCH&y#)oa#^mtF$E&uE} zoOevv+irZa$jhAKKKX{f^gX%wjfJ-BceAtUb3L)U#k8PHso>nBgf}m&%P!Aq5o1kc zs%%+*+&p2y)=zpxr}`3(Z2M}^HF;f+R+;XLTI==3_r9(F;HmKUSVi93#I{PuDf?<0 zPx99t-TkkxC+W6Ik{MH?x_d|4_P?ul^5)NGj_RKE{cpix5gAMGyFL3-JKpmAke>SD zO^2c9wfvJ8Bl<5l9;+z3+-7J|x8-NsR!NCvee4R_t(_B3S|=4&ttd_M;9WZ}ZTAro z*`KRGXCkkKC0AT|?$gfyA~kh0uciLEuNw0# z|L6CepY@-oOn-*MbXUXWy>X=)ZpM|BcEUeb*lsqJHdrz3%Se>+h~+KR&S4@PpC4TmSX9roH;O>*|WE zr&l((6lCA>-V@2lJCm({srurNYd%H@t$OuN;3A8aNdAdG5~rElSIB>7@()w?y3>7( zz0S!OEv{LZ{o!#se!7j(#RV@5av~E?R=m3@Y_U@LDz9~E@y(U2CTSn<1a^PU z&YjLXx%jMJv_oOj!t6QT9e4DjGB+kph^brsQOf1S8r}NrDDS65V!Dx+*BJcS#I9q$ z_^MI-wB64VIjc=5>;XWKHN{r}b z_3kgLD_rL$_Jz&j(jKXczAoFReVn~t@tZPJhkes8;Rnknn9ou8w!Y!N;M;%3rw%?` z|4;PaLvFvWm(dTFE&2T4DddJZN5ekn-Qh2u$v*rL{Xi_$T;s3vr61gi!te4W@Bh=? zSia--{N!EsthL>nbU*&c4*Kxqhx!43uYC>)Wee-JR`=iS(I|Fapzdp{#a49Bu|nmG z)Y3YKbF(Mkj``|7;k#;|s8_w)xjqq|4NAweVmvZtr#~?1<@D_?lip&?Y8~LJa`()K z1uu=tc+-};#9E8b*rxCBHe|squI}ku->=b%J@7!rQ8jIbjNbtr1LutgZsz@u%-qp* zRb1=E*Nf{{CmGdno2*sXv@SMh;{KRj3*uIE%noI2toAFob%?Dn^rnS=pRU8Ph^fcD z_nmXtRbnL``szSIQ2+Te29{luA5}K~(Y~`@J15(}(!aUkjA)I4LKR$obVyt<+EM;yeKEM({}DZ)%sV5cWIW+@%y`M)p}-?&{rFebXtBrdDFXmulyIywN-g% z>(dJ7U;CYtne4lK+ib?{%^ml3)~){ks*vT!nWGC`SYMq_c~uP(ALdxO~=YwL(B&m~RP&GXBS+_R_V^lpzFOR+N# zcW$33zW?g;tJ^QtJ<|PXYI)FD^;`FAz0h0FO)UL`b>F{F{U!dMUo7G0%)`x>rdhg9 z=}I_dy=adA%Ja3$R&+e?S#(a&B~?<(A^i6011r1VaLrly{7X^b-*vgs=G`Hp4^#j9 zXzI?hSDhR3X>Dm^W$8}V$qiRKq*fcY%`ke*pqa8}+NQ|4CoC6DRZ?PDd2N@Ae!g(= z%6M1Z?d>WBB|c1(PD`wR@>6r=qF%>rR?p^HTo-g6WSwGL%iS%~hV|6RFq zb$W%5hD^0l*F{jP}(8Yr!uE^vBS4( zek~%NH;t-V=TEZud~N2*X5+4Pm%q3NdY$jk`n9|I==6Nub6P+YGbUN6xBE43|nZIj2=~C1SFrjPZMU2ko;j zmfGipb-vZQXrY?_P-xG6%e?Et{MLt=BO9ufKlV6IaSxU}wx%y8(pV#%=?J&FQN&lJ~W z^sI1y+b)`AdQLj>_sZlh-D`54ikqda<*E)RW;tr^+flh-e$=(ME!PTUWEY#aXe`(s zG*hud>-VaOXIt$~q&>RkBG<1SxZX%InBmpI=x@&2r}j!6Q((AvH_QLjtowF*4!%0@ z_LYZE+YA>@?Zq!esCtz57pNPU6D;?BU0Ar|x7UveET4mvx}@rhBNe*NmqYrc1mgoN~7;%U8R zF>Tcyqj}GF#w|-Yv2)IPzpg!-nJkxEUJJTfZOOXZCahoo;VaAYsa67;_x;O=joI9@ zzV6zqn1z2o-I;Q}e)j8Z!JAJP+lzGk<;l^%{AJ4d)3c0QO6>fjonCpDe(_GIv*hja z*PN?f`73Ukyh7LyhfezqiIXOuQ!F<<-<^H?Y*wk~uS(Vl*?%teKixiK$`7g8w@ri} zZIV6zTGm7{P=?DvUMi&JSjVH=w|F-#w29hteTPxM-LJl7IZON^H_ummq_QgW>O|K` zA63$PHNNjRIjI`O=-AAvV*G&(nIo_59c0TYv2~361Nnp85WC z_I%@uhjvE(-MJ_J*~h3o=eIt7nm_&LUK8v1f8PurZmQLL{kv=C&sSf=*Uijjw9z^b{&~Lbym5;3nTe3uN*$NUMBxEU$0sB z%Gb^g>BGaud2$?U6h)hk+j67zaNS%Xa4@GZGY7dLv8bpQ=5fDKO0)UYnM)1-2F1HaLMC{1y5&u z<(Z>x#Q%6&&!ekZ?P?omn-xc!xLw=SzCp>S?RJ?z*R1XTOzon#ot-#UIK6nK#m)R4 z^_0U8qBpw#n)Y|c!)2BWLXN33?u>pNXk|S0+tsW&Q{TGw#>(_^Ua2oG@_VpE`1hlT z+*CHX0nJ=b3fW&V-k-J2?W+7`dJXq&nwJoxar{IuP-MP#e@KYRPb zYmTf+yLZxmna8qrQBl@~m*tN9n{afaqu+&_o>MkVPU_%w&S5>Fudw4{=Dz*4BF7hL zTNmAachT+26Zz%3+2#TlzXZFVc*Iij)NPC3o&N1U7Yli0YjZBfopNZpyTx(!k=gGW zH7)m9?VBmfCRJM`VA0|xqnCE}aE0>mP=)oPf`{v(gg0w;J)CQ?-TBR4ZR0Lyr~MBN za|*2rZolEYXylWWJa5us{zo=Wm4$mI2xiEt_K7D6J^ecO{)OXw*++JMoHBRK&0-Zd zbw4wc6?2ZpIXt=cmhp$xo`;FM4z5tyCTq0tMt6|mm(sFBD^8r^ONqXxoe&WDt+Z#Q z3I4@>9Wm0PW(D80{WALG$AKWZoU-Hq1iK5h2M?##d7x z3xv-w+Sl0}>U@RGby~X9r6(%iHz)~jp85Lp%K#a(hHJu+-c_4>UG#G<9o^{F!#4L* zlJI0Z7scgzx>CAs4t&xZ2g+?cW)l=?kgAK`b?*1?|vE) zRa*P1?|D^?WtzUpOfQ+8IsKD;xmPlrNwd@1cPu;aY2jk8TVjWmyUIBZ{gVovP}qBX zgVSgI3poKb&S~vQP9Irk*84u2zwn2*OuhGm>oPxiXPNeeZ~4P=TAN3AR;gy-feV*5 z92M}AO|4-(B`VvgtbG5&i8v8{4-*p$sYsPXv8@5wi>`fJStiXhp(Ewd_65&U^JAE9 zZFSY^xT|+A@nTe?@Ppd5qJI}Xjro}__WUZZ|7qTsuNB3GbGkoWOWwMDruKf_gP(5& zPc!(tbk(mzV&}Tcb<&=a)UZMsegG~&*kS|EBAi>^5Wm=fA)R;2O4ezb@o*M_?zuv zcmY{i@u6Mv6_ci-*K;;QmXO1TC-uEQo$?G0+jt&4u8YkX$Qm74N#!hS_||8vrs%~h?J$|qO_c&X?& z@Az`nmqAo9y6DoADXm*vMLn)B2%6^@sv77>|%YOMfXU_@$jTa?%#x$4@JvV+z+?0Pq)udHZJ4O4S*An*Lo`7=}REO@fi_Gs{HV{zB7 zSq1YBeqMAf*721Hm&6{cr|JsV!zR?UJ@ejub)EU@Eb-?|EtfYMpV)t`Q)@$U;LBxO z4)bX0U)lSZCGk8@-|KY;POIkKo%2exwCUerxlbyq-tMwoYN&lBdehxGhc8+#Ty<-Q z(UV*IBd$nSF4Wt%;c{vN$1kU!RbfTzKCTF|F;P0w0ds!w=6_TibclfAeW4%tH zxalX8dEY<2c{;Ca@s(DKmV_|daD&zJmM^@=p}xZ={OkLr#%)YzvcemFURv+dsofep zH{?W|sB87bm$sJT7kG_#*xj$^eo)0W{q^6F^Om9C@8}i(kDlVG`D|ffUi+RO&!6ke zeU#@{YSnx@a^Lc#`DbR{^kmL5l$&bu)$5pq&yprcQy=JmI?xVC|>#+#N%T80u?GC1|ah`Ha z^CMe9*n?dHrpKbTY-8H5?b|g`r1`*eugOytU$@Osb_<-6{&aif->VWQ-Gx^8Of}SB zsCsYC$AiY-X8p@}8FOr>OV6T9USUr(Ce-x=>17|B)skoI=53wIbF1S~?uUsV72e+e zKB<43@1qyiD%Vz@S;hP2+a-rF>p9SJi$Q z8urW*5q=$(P#Znve60uTKQYxf`2>jvf6raw?>g2QwfES^uh!1DPpK^sF^-*mbKU1P zMeo)eF|Fj)5^j3*FhgR`v%V9F4ef`ya--tzAH3z;;(4*3EnDbZ3g6=|@2z=FWqtSNiE|cwU$kv=uDerEMgGe<%S)}p)>}_z7M|sns{&bqaO;z5@9|o4@Oz^Xn))5ESNFZVOniQx76B0>dy9Ck4#B- zEnVt5_4n($y5_O|+02TW%L2@1&h+SGlTYn6Q2V(iH0^3n590v?w)Vhz$J~x7ta`2( zb)u_qlj}yWc{6+GX52kuu=R+Bz9o^+wUlMY<<==FI)+vg1tW}7Ta7yfSd*5oSb5sgb4spw z!u&70T{KR;cL@9{W*RMNdsNZ&Zijf+s>;ws^Omzeof&vFt-*Lj+-eur+r?J4>YMnmX^)$(Pv7Z*q=ky;5t1~=*@Nes;7^W}9vvk(QI=y-N=k%ob(6;l} z?d?lr^@{(Uwt1d9d%E57{c}xwP8n^jTa-7wpt{s0p<&CJbkFExKR=sf*9C>SZjC*s z+aJHC^U0KpT0)zZ)SWfHJNwKMILg@SUwT&YqvYgsGU`XxoJiGM8gfjuqUHmyUb|$N zf27RTkknsQb)hEqzeIca?!1%@bC)}=TNSf0uPsvXOj=>Z!8^;CVvnrZXmv3{GCR2B z3DX&CS;@u8ACk65>}FhQbYCX!Y@c(`C6i;9BmA>%+Y1kGdwX%!Ek2el6+FD!<`1^0 zr=I=&ST;FhgVpBDK8x3qdveZ|TYb3DEwx8uySkNm!W4#YijsAoKQv1o>+>{b3A{Bs zN8xEl80T`^y0!yH~#FeSW6e`S9Q7f1Z5HzBl#L&y4O*KWAxLybG)D z+xPhH$G&TRK8_*(<$g)a9p~*oJWYSw`y2h)|DOGG*I?cLcHa83dmWIz=cXnCk*SD;>ZiREKl7vj} z)@7Y8jhrK~Y?`O_w!4Dq%<(z*A1&7Qn`1TeyqH5l57VlB@AF?epY|<&uBr@65+Ba^IrOlW!b2^=qrCaMxN5 z_urx$HO?=8)Zwdn!t0u{rFI`{UHomiF><5xzz{MPhTu&(n$9`*QdCxXXC?dH_vn3WmGFTrFQd3*ge0Ad9=;Tm^w8H{X*L?ju9<5PGPn_A~ z_bBEZpNz9QpFr2ApR4oK`K*&qE3WBUv{@tN{jy#Q^~;T0W&OBrM9OS$P08>{xGiJp zC-nYQpUk1I-w)f4Rqe7lTRMMp(&aA;5}vY2J+745CbLXb+gL2UOxMl**UHDa6|ENw zAN~kf+^w};Y4i8&q-$&D#LS*@Y}SFtJ5tSao)s=A7Pi#hCmF|SvW7(}Za3rVrS?B_ zGOwyMRK2oj<7?O(fBx0``D@=j-*(?WTkg1Sa!Jj-dy^+?^|AE1@EB&jTOO^`*zzoK z*TcZvk2g2*XBXy0+$!$sn{wo3tN*lQ#tW+tv!y!~3S1CX{m?Tv&w{OxO<}?h5BaFD zuu~?k?kCvhtL*K4=jrviZpYmBugee1TJL}6`@2DL(^mIyb!SCn*UnQoY`4zxm}r={ zeD;?4bE~dYo4Opn{ZTZ(J^aqjxm&U)Y|48(@m$Y~IqB9{A8$#`?#nnb@q}K^#iL;< zMJ|(BeAEq>Oq*dET`Y3E^=aHjtx1y?ZJl@iY_)@o^Rr9$ou`#YHs>jHKej2Hr}O@2 zc$$Os;l=lpLLVgVVq9=BPDWw1i&No;>|-w+oU`{_@ot(UqA4Q1s4S`5OtSxI`srie zKCk|l^;kh%degZrl~%{kuCkS?-Sji-+4CoVa`u{C-~DY({kxz44U6x+H(I{i=6~`t zXaA`y+m`s~MX zI{)F4lXES5k4{fMYV`K0*!9!7t_4m-#+!K8C7u5o<$g?Xg050$C!1@xqv#!rg#oGR zo1GSN$H`sfk+`?$r}qPoN8%~ho}OWzwLZ||0dHsLnfnudavNzY*{gqEf8q~E#>GGD zfA++GoTkrN!NYYt-QrqCobvB=@e4B>}G3EdKY4_eG{62qT{@>}-z7;$Fc1`>2 zZ+v|J#g3rPpEON`%i}k<+ zLk^LBO3!`xIz`kkeVHd?^Idzv{+dozT3Gq z>$B5bi{7VmxH7^{Y`-PvwZ~W@rthlB^F5+hAI0Ptt|y+&iz zhjScK(-wq$6`EeS=v!`>>O76i+r13S6V(N*jwY;`GQ~X9y=&{bSxnmEt}k|Z+pSy_ z6_@Mf&9H67@#7z_xOs_J>{t~mE)f{HQaiQlP}$CHt4_bp@;p0X+S_P_zqizu=~l}7 zKb@g?@D{sJi?incxJ$DZ-k$ZHDfaa?hR>{7>jLs;xjb6;ZTC-`>MZ65EbYy!wBBiK z%Ja*dck{`!IvuZs89RQImd2n$zzxAahD>$mAzA1vp{ zc%EsnJQGm$Y3clJs{Y*RLd&#|A6jW2ygR$_TfptEnpeT1YU`i+TwZi;xGwaeZm?e+bp5sW%-4G- z{;B*MvY|fm+-3_Sb%zl{MEL-sV4D-xqn>Feh-{Pg57WrJH5g zBmV5ODX*;A_E!Jl=Txcido$wKUfI<_lV{**)C#vC&f zjirIN7Hm;`-lFz+d8dSsZ}!Do5B9pRY}qJgazyjd@&j49o`w(A`@hfJc6H0^HVGv~ zm6HokF|}l89_~?cW4yOos;V|kBiB%`lSzPSnYME9`6;4Ot=DEfSo(I0rhvLsu83x; z$+Qkfc-%=qz}b#Vc@AUMPz5!`m1&w~C4@HFFR6Pn)Bh z|Nh`jA0J8iCpFnd>$eFXPLXhru=F>Y_}6h`qN|8cR^!rzaJ9y4%`I=(W| zyu`%q!0wZ$)s|kgK6YWlTbGAVKi>FMw*T0yGs{Fp`~KcYC<$Fz`lfB#wJN*amPTye zQX*mMe95O*eazV{xc2Iv#4GB}YGMYr7K!j2JT-|$a&l4Fj|H7KF9=FBFW$&##1m&G zzS!vRmCi|jo&-en*exnuWXLG8$2O;8s(aaCF8L`8OSw#DZgiN`zVh&Kg;$R=_!ggu zk5c}emn~!`RkOiDd-m0^yeD@b_6eBYa_V4OR91Fqhso;Z-&Yn)(Fn^FTAaV6uWM0_ z&TQ@8iRm{jENhHhUxtfch+5o}*2Ok;Nq$?%!?MO_%U`&>ln$J<_QOhs+q0$|oY`?T zFl6o?jk=>bXq^WiAO~oLRR`@Gw+*ncxKOL#-wBH(FuhcqR#Q3 z6e-OQJap{@+ruplk5*5bYRGyZ?!Z0c2di0fVzhd$7njV8Pcd=RKlgOWzSzs_GsBj? z%wF{*s(Ukcdg`w!Laq)ErhGGX*xiXpW~`uei|yqUpc(>{`{`bw|>r__0DL{t)@%uSKjPiajo@Q!l_NVM?Raa?&I~V zb)7ibCOn8u{-~q(x#eH9P4xbHPMq9u%As(R!iF3@fgM4TbA^QaG$a1(5tPljc_nM> zia!6qE8EtJwVT;>L{{cB1kCV-Yk#TY5^PGhcl%;*|c+KPqOCe zugMmgpG#fmT2D!@$ySeBFMoqqTCQ)=n!6JI@2&Stv&>FUJ^VfI&IR_sRAVin;5p{k z`1k21)IYP>x+!s2!+pC`7Lmsf_+CEER;{1?#&8Rh=k1kO4sKFj8I&&@|Mq^t^|z6x z%ComE-z@z8ck~v&J0*(_rIkFgD6QFB@0_h3w^qkKZ{M+(2MS*ms6FU;zHt9S{eqvr z|4o~4X3d7s#=jGI?!So#9mpwuyPP3N|KunA{Xe+N9Syg0#c_CC`5@0&A^+0FCQU7cOUJknlWSliR9`8v|`kHOlstDk1@ zXl5U~V8GfQG;M#)cj36Ta;p2%7Hqw2^RI5(zUPTIrq%5&P??mHy!}o%(-d#}kfSd> zUD8!gbuIZRw>?Tk@@Qm>#=%Ag9mAKOq)YOaSm{ixc`YvS7t-ALr`W!H*^=pLd*2IP zZ$0^G@}>0;ohvKe{d#Z5`fp3gx~1hazZF+T{@b?Z`_b&l{eItf7SHQ?p8Wb{@T<>J zx8t8F7RT9bwWxc0Yx$!Jt^D&_kDGq}xLo)Ay64YVmiYfOJ%9Q4l(L;=?~dO|_CH!K zsrTrdr{OZT+0KP5VGJoIVeW+?Da=Hmh#vlx&qPD5_cFxhO5}Qn!eDLttW$#lcNcZz7yC48lUrRp0M?^>IV0d9Fv~ z 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

vV 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≪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

#&==@o5~rq8SWfd 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 z zD_RS8rp3g%^e8_(yVuoTz)bttX75B_fiUJ2x8{r7mvtQ*A0=gcexsDuFwJn1nPWtD z_}VW&FLoQYNwLed9ctp@Xl`!exmvJ1TUEdJv5|Dq&(&va4`nqZCv%H5Pg&lu_POzf zy1Ek+-c6RcX?xZ1(DPWoUc=8PZdA|SSUGL;pWGAbk`o{OS#(DCv)$Uy{Y=4Ee|)^a zow28E$wS+R7rF%(d{4Tt?LF_iZA?pQ>oooB-<3a_lCmOV=XZ9->Cv-!6eb7G)i1Im-HyIO~ zPiCty^D?Sg+II3-Oe#Gg^|Lq0@JYzwl4nUK86FJZa+TS7W0l=nxt^8#CRScIInc>z zC;8+0vD9DTy*^hhg8Qybk-4prUCp#^xx$%CX=jcm_88sZSbgqFVV}{4tG`>8+HK$P zxpvaRx61`LZ>T-)WVfu+>76%&k#Rszk_boA7T$yGk)dm)rU|LH*;c+!IxDf)$d>bg z4GZ&SqcGXU*-3KT+oL^qXP>G|*=@YzzN7(%?=AC{hZ|<}r7LPp{#i2TngTo1f-|K{ zds-CVrd~Pdc%)>`>wg}%by;lp%Us`Rb(-_4+_QydE59$A|F!C;S=;jGUw?s?*WOQm zxa9DBCXQv37d2^pE-x^P3ArXcpJCdmEWc?Fn~$!(YZ~U;pT1i6-7ns2XBpSZ3Kti) z@bj&eHf&*AD_xlQU7|+$jHOxv2d_lS-3^CQw;y)Z-p_q_-rOa*8i$nr#e5e5?VYRJ zXjE>Jp`o@qdohG#8%Y@JLB)SlSB$%{~QX}-5TfVn)K`I>M4 z0kLxxYi7$$au(Zlf*Y9bNh3|4-tI8>xU%ucjI31b7 zzHIUIV&B(KWXd*nR+KIL%X;HokA$2GTbzT;`Bn{vPo?U+?sso(c;6Q2&=kwG)Pnx!qF;v3^!F9yfEl2OV%B~ zW5;bZ_vP2Ro5E+#dqjONdN=j{mze46_oRKaRr~tyvB&)qC3*G7Rv&+#f4ydTAGfH? zkI17djqER<`}#9qdDi~m_xg9&r9DV~DiAqWL}u@Louw~V`M-AzDgQbnVAtiCS=U3_ zr^_ZhdiZ%93 zA6nfHpLuDYA=d+Ix0&+y|KE7j{@z@|?a=1#8Mpl#ul6oxY0|BXD(xws&)(v&w z{}T_pn~Sv{OxT_NrmFD5j=RzVo-&K4TMC_-`Ebt*%ZZZ9x7zJedz5tc#u}wc2O)W;DKj z^djU@R?NlS<-RPN8#f>I>|FcG-tAD9s-Mpq#s?PG7x*R$C?B@GS{`&Q-fDG~tD8sZ z($@+KZ+BXEoNfEIQ#tJFpZ`gBb|Iy5YCd^!H{efQ&Ji2mh!TYCm%9|`K!~gz^n|s!+w2r$XUw~Pa z-R{!9=IPb>*~|Rum!DIaAp2OR?UWBo>fHn}cI&?$KWDz%oweamiqJ}r+@0pgFZVpR3CU(c=t|nF8>aL>X-|1$t4l9<>pGJyxAvF)6Q+$Vd{CIB&B{Zm2n4Du~D>!y|SHy!kJW8isCQ354b#|0G=N{l(rm15r zXeZ=qBr)mUqj28i{S1F34snTfR;H+NcR#<@dSBttdx4MZnRhTekRczeyV?Eb~tUXWzE@}A532#{vMY6KhQ+2&SsBoLoFf35w&nRpZF|H^DX@0NXCy#Lq# zKfm1dA4`9}_bNGN*IenO#|#b!pEDR7QPcRa$8_;lk&Z`Y$Y^V{Z^oh}KD zwLQIxCLJSe#jRd z`TsAQarbS;-)md99(Y=OJpMn#Ug)apk>YLoxf!0>dNP!Ee{5Po4Mu<;*JfRTGwY z?O%Putu{Qcp=&})@8^|Ue|=ftUzcBIyk`H?{>=H2%*UQjd*=Ppr=i#TclD|*m!;x2 zEei{azUzK{&5p<~X@%SJ*EOy-_13Q~cNGbz{)Jw1lq~As3ha zwO4h>TF1S2tNDos#i^6dRUX;0&(wd{e0BC2dK=g6{@+jGSzDKc?wE9${d_*mdGj2cjC;UsPw3Fi*2$hH5gy4PMkP%Yw(U2!M0g9 zojjdiOR78#Sg^Gz(6sg$>xJ)s_DntJQT2K9!7HJ&wQl?usV;lByL8Ug&A;wg6!t85 zANDhNLur}cgJqSg4n9cnn)^gEO|2?<$@Un@6LNtyc^P{HPVSE?l{p%@b@Mc9=C;-Q z?Cft}d+XPntXpdAr2k3h%pHnE8^MYcn43B-`JZlH6wa^ikAJqov0* z+E-5f<}I$_Z+I+H$dsp==gsQr|G3<&MBQe_v4I-0R!OTW~d7S_e$&JGV)61t8W z?_pSSsx;)ah4gDzzXc9H`WKCx850lnCHL0Y^Ca!KxV5KFXU(!x1&{Y`XjvDPIA`Y_ z7arw@&+a`ikl6FvWwA@k6tOM zJw9YK^*w)*fk97@c&v7tk}s>klusQWAFb+MnRDW6sI=!5wr2O;&RPs7b}EMC+87#o zED}1O%$8evYdO!_XZzQ0r~!Ztyc@Y|N7a_uQD_Lq?za^{>0+V$p!PJe=d3ZdB&OB z&n6%Ff8oZ=?aq0tBX?zn$MlGM_N@EHZg@e7NvAt;C&Qk`uU#LXU3<_RF1G%?jug9z zACJ)cGPdo}jO)K2HcbAm*LX3R<b2F!W7;^6FJ8_Dpb9q|$8 zv%|DRdoN%5_~WYS(<|q8A2EMh{CR7}$Ged>{3lmd?x^$Ac)dXCeA?rB4Gks33PT33 zXJ#=s@=N$v@O+ZmzQN;UoYS0B46{S01Ye4HReyKs-m?xjU-r&mJQ3&eEq&AUz{OFi zw$p2UZVF#<`@qBCQ#oH{K~do@fy+BKPAi^2>q>D}Pw-dwkOqNU;h?i?=RDP!FJCF` zuHTlFwuW&+ufS7Db>$kvf4Ofv&UK!v<>8(4b>_mFyI&X@uK!Mdag0&>`r`-IcfLz+ z$zx$SlJMbw`uq5#yvR+T9o|F>PMrDsqy0I{@AIPbH_ckArWlmFQulNow}OX&LDi#1 z$IiPfwc|LXT=PE@4ZgssW1eVx{xzFPXuyX!Z; z^3IvqxoVTGSm^A_H;L)HRj};ey@!8JYub%bD-?4%z0O`@4ph$7Efz z;<07XPK^R~77YyUjI|0SoDF*4k2+>{sP!Lw+UNT9#Gx8J?jLK~DGJP^>N#=!k{*l=Qx2}~aeS{^ZL-qYm@$3zIft3&O7Cxq;<#*CoTQlQWffDo?d=nv z1+P<|ok&=-r22sehg^h?(mK7CpJjVH4B7;nUbKXFchsu)oxGy?s!DQWoZFo{(K@qc ze0^Z(C0Fu3MK^hGijMTLudWBarg~I8Zaiz!@M+$?TZ!xQPVF`B|GxWFQS>R1Ib0dB z^YRWi&iz#}V~x0t>{Z9Q{+FMhF>L)6^K)gQ|58KW_l8xQ*StUSGQHx{+_ZiBJLhO! z5ApvWAR91qrttY!*H=!yYMJiB|FrVm_GOl5&uuxMwd3W_8Q(7YGkfWtO-qygCYCw1 z{CP?AWBt!nda~P3y?(ki@Lt*_?azg0E`Bhy{hhp|O^q z&Eu#_vy&3Xu3aw|yS>*UE6%Lvp7QG!aqWwx_ulh3nQ)wpJh>@xjrgHWcdsy|+GPQh=ha=?YxWD9Ww6fteo}L} z6?3dvv+y~AC2`YwEqLDkVw~{ijl`O@Ps5LE-n#yEPsr^V9&@s!og>V8t|l?$u5J!W zZ#+Hq#p-JPU5?pDH*VLx$DJ4^Ui%1C%3FtKb{Nl@ zTOibVuJTu2)Zxf-DdomVk3-X69#C|j7yR+Vjf$Kzwxw;R((e-9T>e>nqIF;PQ_1P` zPDfcYysXvt%c;`;TXMg1U&PnvJdv+km_+pcCKtqQ$dM2~-EmGh@4au?CxJy@97}ht zeykw4aQTr{=NOio21k~ax(Ro<`@E~-V_H(&oH_Sp)MWPMixqj&KP-!AK08-*-cz0V zZl`ShEcbI<{*)o+_prS%`G)?>8Afc5-NBuQ1E0NF@Zq?A`}0%F-TwzSd^7(2bI+Wl zUVF8}``!h(&pAK2k|UjKw~KQUd$zB@?j46LCpMkSzP#8-ZW@!=vcs3&U38ybq9v=t zbSn8yhH8BsY5|7veiy43@?senWABILm=TGPf&?yU`pd+W7o8tgD)I6 zh$YJ2+~a)aJVS*5la5%}jZ@bcWF**F&M&ZLkast`-#;-<;#hFC0Fx~68&oU}9YR`Z7#kvw~3G1ij^OXIM?fa3&q&g=__y3P-Ir;kj z!moXYH|t03`F)k^?4?a>XUwZV`uJaH|8@DP2@m~MS%2?jxUl-z64rv7aSaK1RSb>y z|6glvc*5RrqPTMTBV+xY@;_^SzB%IX>%q(-YrDJW{2$wF6}|Y+=xnx5-Q_3xlF`ra z2T!ofa%MGc56$PK&8|_YJJow0Dn#y@t>AZ8pBYj1l7wZ)n z3fgok^cW3Rt(HytzMP|)KhdFn;-UQ>AMMyLI2_YSHLvHrxx!R)&87wICG!i5d|CP&C#*bY}K2W_3(j7tL74xs2ssTHqs(8B_e1eNlh9Kqz7T&)^T4NfPR; zHOIF6HxP{o;Gb|^MQk~{jm_$Yz}$Y1An}bdN?m17Lc&T77`zx#cuM1%g5BTT7kp&4 zGsV?iuw24^an8w85$j(bIl`lFf9(9Tb&LH(yY@`Uoqd1fkyB?@zOl4lsl#>XeBq1V zs}rJqlXrbTy5!!eismhxGq1c?`(121_e{_}_NcVIQ$NKoI&3t%`k_ezOTcxbgh_6k zN3QR4l4$-H%D&*G55tAj*yq=G`jlT1ds-{&%s1zfA>Zo~BfV)avkz6xIQVqRG-m#< z2U7n8U;LS*c1GjgqQAzs*6pYfs9&k9y=+6^9ap)&r|VOeJl{0Gil^u6XaCs+9^b<>WqJhIVyY8B+pr)F8qF}LR~Uqf_b&*@}7_XY2n=WNah zGi~B$U{w6_;ojo+OlHvu``16na?0i170t}@;N-5Of6qPqI@k3+v!PLk(yx0D>e2%w z`vn^N^Tb{>9bC5dL(1O6`!?Sw=WA;?#d_yW*ao#zjX7HB93JdH-1h99Wq9~UdZmSt z?VI^V6Xs3&q)_EIC)H***NzCcJ9#{DcOneB69%) z*0AsEq>V8JX8$%WDUIEry5!cv5c|i!o*h<=nDoiuhU<@i9B)rLQ(~fj{B&i-<~8%p4R6enil0-Zf2zoS%KgmPxh8fs4`OYm-B11~ zyZe78uXkI;mU)$*s_z_IoZfBGCuzEG<-)t^y7ronX9qu>XZ$E6K-VBHa?y(Ko90hr zTU52)XZxG)sr%EG9jVZKqhYtPMzHhXgEIa1g~6PYcbqXkaUj$$Ip?5?8R{~pLxK6h(Tdqd8aI|yvP{_dHZR-g#4U+LPwvJG-+Fe5E#9>& zZOdE#__5)iLaK&Z$9jp=F2O7b;DW{E%}~P5&?@h zhnzR$GVa@Yva&~-;YVt;XWUVPbD4Wq{=ItO{)~f;UZD&Z=1N-yS+bp%T)A3!=AHLJ zR#^@vk)7VZSZB=bIDYzZr_GmD{RdtfKmO|&Z!2Uko>;o?+_6bLd)ycsEDWCns~b&{ zS5SF;WZUvH0`cL8w7z^grqr@~lu;C(Db=90nMd`*PGiN!=StH;yIZr3oeLgYSqMK^eDvxgzSULp55C#{mNo14 z%vMyk&nbmD zyQR^;)R@b{wi&d_Y(9VBv*N$=wp1}3NmLU&9LP|7TO?~JZE$^CrSsbM-EC7Rrk&kuH#MA7mS$n~ zN=Oiye3|>^@~)MiXZJ=+F8N`}vha0{kno3?gU_GVI(&QG9VL;**f4qCw%3}?>#uZ1 zr8wQ@UErQQ`LW6AlbjNt>~2IBwk+?v^Xkctkh#mh#5ug2*tom*;6Bqw9qShJTr2jI zIn_Bi^5p5s+!z18`=-YHS8S_=ZRmwvO**rqz9pBcrgAqXWOW+5T+}rYRcA|B*?-DV z@0#FgHAVr^4d<3lzO*n;^i9O8n<4%azLyIBUG<6~|NPv*V#s~%fiFqFA^UA{kh{_M-I=XU*$xWRtDuib>2EW)b=EDHv_0qi*7Svey!kn~>~Gtz2Fp%n zK7QE!lE(e>pM0J!v@59)GhXw3`2*#(p9M0ne7_Q@Z@>`jt=?^QO=5BGxebhq{=eni zF3p@iaptbj|2NfSSM)vPnz7HnDl(g$efDbB$K3BhOKR3B*L*tli2Hq&&2GMqK$(zk zD>(-+J^XMCE{J`@s~=Y-EceTt%b#%0{i#ol#dXoz zv{>F+-_OzCR`2}WveWqR&f<>X+FGs4|LkPBlMDaFymAN?U%e|fEn)X`W3EJd^P3la zUuam*la%QwdiDKK*!#U(?jMc1m2+Px?%s?yA;&H}II(3N3rF0hYvm_ruH}7oq+wHW z$EiX)_KUmpN`Jj-al9QPJMGo)xpQBLpMU);d)05-(tnjXF;y9Reigp%JpbwEeHs$C!lZ#*PyuWv2M)Y3Z-#<(C8;bY;)4TjLa=JO=b^q6U zR2(X=d{#cx{n1iK^dk@7#FmRStI7*S(n{C+GR=`Tkg1H>S#9xHaHEsBcF3{A6WtS< z^};$*3gp8wa@x6X9csAf-ae~p%^SJhI~t4`MXM~hR`~YcvnYuKlSX*cbMonEit!Yp_~kdh()+u^AVd}UcaT-Hz*1i8lGrOSQIE@`)1%;b$OADdOcctEJ)w99(NFK2$}8UO8%4gbq2(dLs;Q(*6KBW#^%3r4Gzq!Wf zkXvPDB2(h7_AW_uTcRMtm)JEwQ|o!ppEFzb_|_LOhS=TJ8P_Xs##=K9H(P9aSpGWv zq4~X^&Hw)YIQ@UdoB#j#Kl=ZBW`E#N$rQN+&*KJM0q^bqtpESfSvKNx#5}w1jX&}g z#TJyZc56?FaD0)~f{*!=j(Ka^Br|-;lJkD>QzEC1tHMs~*xT-g)#Z!_ z7DY00AC~#$5dTkGaJ~I2dCBw1EnW7_t7iJO^4ym+u>P^{&?luvNrt-r(UJvg6jFcv z%Kxk!vElUZrCBXqzi)}fJX`L;FR|Uwcb@&Ss)sY5FH1a?zC2a)@Dv8Yx8|3>e4RCS z=kiny-o2s~aSh&XZx<%?PWrotWx@2yAce;Hf2Mw&b$Z^dbvpY`y(qu=?&bH3+w9pq z?91lf|1W0ClB9pxTJ#-g^3XpFx{-~aGx7IcDJHS^jBgBe);;~VLE_TUK;A@?dj3s6 zezJVseErYjxZe&-8MF+Z`^zWvK==||26{iQb7EN>|6Vwmj9vC{wAo_E@H=da!h5w?rv_q~2# z`I8%)UClOs+Z&Pm?0)gf>|#M9@3$HJC0b`cecB@9dDXB?>t)N&hAcVW!_(znrSJac=H!o09n2S%`m{fE z_qid+UYI(e>f@a?U)#6Mf7MXLba?N@t)HIXxe@*4wozSy;k1;i*M5A@_;bxJ;EC#L zrBhWJwI!|% z*(fDwU)jojxZ&i%5W!mchrb)HZ)Y?#YVvnj|Kb8`^D?d-RgVg*`D?zcI@G>i>PLp7 z%a70e>mT$m++8;<$s)HS(WhH{yS7eN|LwP`R{0zAtQs0_ee1~Cu&VmaE-pi^26st$ z@1@n16$Z8*Gfz1?d`kZQC18iiIcv3#6<;D-3L7pdZhNwAS9SxSNk#;=uoHJC+rl(&+oNXV$NW z%x^a3E2aKBwKC=0jfATIQ#L+WSjhZ*k37Q^f02ZF2P=6_UH4!6{kTN&Q$@MV9aRg2 z{3UtjO}cm~dzs(q^T};f`aA1qUB76Qs92 zD$y)jwbtZ}^T*m*MRSczWS1IGH)BXSeE6ZIl3mQii#yg&y`HjW>W^J185R3YIRa-K z+oS#_>d@O`i;9f4?ccNY1LKYeqqzH$dv6nX-%j%z?}Zn4q^=1UG-T4xZ!3Mg zNUU9DqGt0UceY7|Kju8UJHe`dVomwU2|hPYAKl?M)5}Nea-Kdzm1)uacf7M^ZBCxt z=o#}U)a;E`*Ta^rb9z~>X882}+@gDB#=f$ojvHmF8FdNj;vaUMiR@N0WL~;7wWIz0 zM7_#h&tl$A#T1X*YN^*1gA{g3iC=P*pI#=vKBYtA7|-KXnmt}@$_r=yoBn;?_Dk#!V*1EA z+4ni;+qp+CpPq30%95?&J(rH}ikmTEn(q-?$vbzv@0>E(>ban3G6Q=ozsc1Leb<=! zEZ5&InailM*kkz`&pE%_q>eB#P2;fH<9+5-;l-pZ*!U``G2Dx_Ym4-|ZH4 zs`^(|*?y|R#jIlI-ea}fo#bWqeS5-O^YtVQW=I!8&`eLsBNvie<0w<>Tg`~_w8NfwXUq2Udzxu`P|<83qQHebtzd`ALTfy zal67GoWtkC#ibiVj;S(!<@vR9&1A2(yN3%8XUcwJSn=ym;|0c>!htsDX65$0@R;rO z<>lV+2e&r3pJnjmsg}5TU0~X3j&ybb8HL|(T+iOv`Y1+p!rvY%`L};Jg!en%sI2zi z5#=7UPDw9J&{wzWy%pn6hQy_7wKI3$6V_7yZOk~4dH1y^wqKuGCEYy2b0C;4@+$M} z71jHW_`QDeJ4^9FF|Yob-BbEsY*Mz6`Zh0hK2yp1^P8V@|2)xo?DwNdo^^ibm(Myc zv_$Le>|28EuRC6TH@Y`z?hnP8uSA!hKl}Xqj&qTRZI&#ad%1M_{;wY`V~=cHH1+BH zXHTc()vY`8%X0bqiWPVA7wy-ZKl@(wiHEsQQnpU|+LQb@X`TO+UCR$!&HZ+Elf3_D zo8{{Ak0eX-*i+}}9$Y?o@viF^TOVuAzciQk_3gr*%XPL@=er*WHrw@2mg_W$DS9EZ zsOPw%b?-9fzr2Yr*bf~$yWq)@TM@_Z9!uD4tdP`_a6spINzpR5jOK>D)&4gV-LDs4 z3J$uKZ8o*r$yOLtoD`y?Qu~lvJs@2T_@)OQ)3N2f^Xa2p*1@G>t zxpTN(mvz4TD`j>9ufv-3tE-BaU7WLwFULjx%+18ZhJmu5R+e2X(>))Xe)~ZS-%lO; z+eHj3bgzjPKR?>=?Iz<6nHzm2;ZJw^SeDetefPG{HDc|U&trXg+VWcuBxaXq#(#}u zxMZJg_SK(xntX?P-|@hEvzfl7zs@OAt6p>N>#Bnb{59rUGF06&Um|$(fag|QwY-cTN-psgrAEQLXM>$@rLZ1xIY0P5VSVI$5Ntj8_H4HXWZDX9_q2~Qm zv-s$aZ~I>v@p|GP>zSI>jNWqo;4`*MT=u^D z{lA>uku~er{a$Z)S(m-);=5J+_CG(o{Qf>a{QJe(bz5)koGu^#|76kCy7|>zu`9mi zbVRT6mDb+Od-}(pUrVdsKYIG~Y1L;Lu^+GF|4#nbTEFY|yYR%o(tAo$!KKFnOjf7m zfBVk6zou~S`uD#-yg7L`>2FGO?lx_{iwpW{cN9dkIef2M8r#Sm&6ksWe%>(5Tz{XG4vFH3@b&i#e| z--iF&`TuPBKZTebynk;!oj>*1fgZ*Ow(kxwshA&?7md9tHovElQR>H9rFr@3%-1z9 zL~g&sc3AQp8DMMjrsD`7loA)i|;Pm-|=9k{<_B1<-B3yJ-a^gRQ$5{ z33I%!QpH^GJ49l={iIFTxS1rISFy#|-gCLPuYhCk(f0eLH|~A;adp3~mwscvFOz`$ zoG0oR3L?+_+{5$TG$(Nd@8S3L*}E3cye4bFR{B|mFQLFLV3}!<_7Z>V;`wUxi&JOp zw%5JAg=eX9%cgaYRCo*+E=cz@zDS)ZniKagjLHA)dj^(@x+OfzPbr&oAE^BJmw_c@ z%m0|FNWZ(^pv_GAR5z`hU`k-T$9(9ng1jcxuhDLRP}&(+j2o#s``W**p#3);l!3 z*gxUZM*o-V6c2n7fBBvDz?vw@g#ymbS?AucNUzaw%X}uI ztuj^fCrVaHI@h0goyl6(u4q3+X8FXXJl%w>4VetVjVJk3Lndr8&CE^?iYa6eU7jss zebQ`aVQt1NLq_wHjk%K#xdyy&*vNXL*;376`4i4JPpl*-JacV)B^hw)1Vf?7)8wAl zl}}_8u9k96Ij0b6Y$@q=-F?lCv^%m!2C|$5tIQu=U@vMAy0h-D592mf=g&`4_U|!E z3b|h7-*)s*-SnpyjG}seP1$yxqh$Uuwp#tuf2JOYKf8Wmp>4)ZkK4z4K2O{nI_KWh z_mzB$?{}9MS@mV^D9X9GM>E?h=#Oefylmo&(q8rbhZR#pKdMcXMSuK$8fqh?#j|CjbmMzv-y(^Ue>;K&OCGGeRFK% zN#+!XMD`Y2fog-R9B&fVHaebZ-*8Ym!kc5GbE=Y9BxpLoc$g-KY_WOs432R%^n;&rgK9_hqEP>5#*Ukg`);k=zQEK{2;lR${dtEgc z*03WZ8M84Erq`=zU{F#i)c%KUqEbY{H#5e}DL!6@U3+xBXU z^STTR;v5rCeOYykr%}QrvQ6{BX#w>MJ7eNaPnl$Y_%v<9`-~hGamFT@L$i-8J9p+q z)hYH*XCB>^pTMf3;A54wAt;=)fIrb#K#jreJ@YKDN6KDncx4*}jU&8gW?#+N;Js$~ zR_Pmwr;D<7TGYP(oA5yCYkN(=`i6az3YVCe1r{v4R?5clZ0S9l=wEXlUc2+x(s|4F zsT&{O`nW^oPQbn7_O$jkjnA@meV(;a$LCz^K6Pb7Q~#6yGa8>bfA2fFvf|Y5;=<`a ztutpBa~8kad0fhI-XzWFjhYPSFKgJHchgup@$v0vpRa_y$^8^mS3le0`Mvoo5598z zf7y;9QTTq2Z<^%$y*>M_-dUZFxN@NW%T&2o{yX=gBUdgd43#`6$-KDoYUjkz>->H} zue2Uz8tLr6A7oY$e9gpxXV)vQXH2P|^DgCQKh25c4*nDCR;~O@n82PQ&GkQNcJcb>{rsMRWd8gHEnOAotm6g`4 z*(>znj#Mgx*@ufwi<|kyrhcv1wCm`h&>c5pA7vHtr!$$|6`I)FaC|mz-Z$}x>(N)X z9bf%cRO|7@pIqnl;~w37Wf~QqeBXRWj@gbZvmN)>Z+tDyVpg$hhwEdjoL#C~uQ#sw zwj)`_{yELn{`@f_v@p!-}W7x8=rVxU*KlKZQTp(?2{ed zvbc$_;wfTh$Y!e9qNzWrJk@=EG9Q}|hiuxGFgrFo{r&dGR{TG%ntIRs@0Tkt7hmgq zw|45vY0DBPep#a_H`}3-VN$Y1p@6!B=gr^oYhB$}pZhT7>tx9XEDX_lN@80X_SHtxs@p`Mwg2r>Dta0edQ~nv-!VYPd2koiTzMgr(YUgoLly0*Q@33g}s-o_a2{j zxpeCHKHKF&= zWuALNj_vVmp$p*$f116VJDvCW=l*3$G4WlW1+Uh>o|*KNZNV;ohs5j@zwAlI*B-_` z(!)9!U2)VBD>0$ zzg0}X_RFV#A@9UFHUgb_;nxfL)o@_|M&QmicnAsw}AQ?=_z1 z*X#o7@-LqnEI;X`T&OIv(W;tuaAI@ZW|ebpx`#CEU3ywGH*VX#rat!8UW4Vzi_B~_n9jWm z2<~5c^KoV=cRJIpfWwmg-rEl@z5S#_wld_&#&zX8R&3j`fcM>R(_ImXowhRU1^y99 z{iiBSUKH(9lC*ezaH7ECMs7wkHi>6FWeNVwF`^7i9W#ywIQXv6W#sdjHj_i7QItd0 zSd1Z*;a!q}{hhaB_c<@VdA+JWE#?nX!|n^S-?t^yaTq3Vp8EOy-Mvxu51cxDj?Di1 z>D$-8S95P)om<>!^J~Z6_;w4&$*IgHxyHm4y7k#bXef$0Fv;6<= zir?z4^ENmz?{$FX`&^D=kvr_HbbO?1Hxw4{@Am2LusCOBgqd%?9zpzl4@CwXI)RnfUI{t+*Y%^~-l@HXamo_z|xEFYHJCo*&U4<^O%Mf5s#C|Jwx<{Ea!fhG1aYR;QAwG(Rkr#^;HYL-fF%p3wL)qZ+n&h%ysdTm$OBTyMGmG zKK}6IZd2;3zxkDaK3Ma`|6+UWeV@afaThB`?GXW6WiW3+n^B8uG+9?(O{XLqF2-neegK&3n$?u@6X>St-2s`=JZA#=2Rx(-KPb9xZ<~ zFV6gEaq54~$FuKAue4126lE8_EdJZVPj!{Kv-*xU?A1D*+Wq^M`;?D+H2;b0I49BY zT=ksS@3l-N%Sr>hBCl7~uk)D^GdsIp*Sl{0&%gP-_u7MVUOcTWEn3j;JM#u;6=Kc4 zC*Wg^>)cxF|9*cF+;sVLt26rpIi_phB=q-`3ffmpVv1t8-@0MO{e!V@0`1>^6#p;s zMF;~Oy z`o7CslLhO(@U#`Jc)DlV(!wd3eGw-N>*7B9th6&av4f>)dBtZ=r-|1EHN;Q&T(PXr zw3Ykqc~kA@6&sg+!(yvso=rN8XSi1IOE?@{SK)Vh<~+ktrV90X_Knj&9g!1>F5oVKc{7L-Vv=3NpSjqTJ;oE`@o==Td+KFh$9aL*_;y=RRq<>1& zdy>CG{@lp95*iC^w^wV;jtigmO*3OZi`Db8%fW2A#>(?!Hpp*ZxU#M6*@Q<+7VX_? ze3WIIde5(CD|nMv@yqQ?7t33_c;%G$Y~oM7?>oDcxiQ#=YTgd`-s~#9V0uOI{tb_9 zp4+`r{~P`L{uznDO^1t%j(TXWdov;N)18B!{*|ZV=P67pweYmxKl`QrVok2v{%6kh z=?UiI`x~48?(VaG`olPByZ$jYS$8k7k40x>mzr+Af88+s%etwBzB&r0Y-HZ-d|a^F zC);G*)Sx4dldG&=2tO^pY}wLf!fUkI_Va@)hccvWrYLUT{7Q)HFTdmg6?f^y`=t-9f5O^>J`Xl9 z|8Zk@(RQ)&K&YN1s|({|=|gqbALk_pL_SD5TQK!t)k%(ni&rY!)dU`lI#hk$#$kI! zY53tFhu!xUeir-wn{E4Uwz=jU7au&HZTc(WA@jqcjqQd#xzWk*b*=J)jV~NLsJ-BT zlAo@ZI=?>qv`LIE{~{({PdTIZIZ{HJs~~euU&F46woCjaFL*a^Txqyas(Qu5W~QZA zPB<@TaNzM`xiPiRG~!jj4U4BA_W2$-q{n!SF@^sh*ShYWBU0H$)zx?SeO@Z^K0n&YNeEhbFEWh<{ z#=#iFU|Ws(p|<}lo?fy38hPxmTG588$^#n7CVIZp=S=wadaprGY21wbTYmSrP0Myg zxULZwoGN_m!*p{o^YTM4-sn88%ifTkI;Xx$v~WMGnYCBj!%o*-GtA#@W6SklY&kPy zhQE_SiRSyZ2@;pCRJNbfcmB!I^S1B8_f7mIemx4+`V1wV(a#QFb>iW_nlXvP;G~6r z&-n?wuja`1uqUf1Y@BOpE}^YAdq$7oQkipn3}w0U$wxa3SyF?=7rQ1l$=_O*Vk_Ky z-1GM5AA5Csn@@k-67zgT7SCbVJ-Y?zHm}xudR^8T)nYAY+8fFw;m)x^&^NlyWb`=j>c+Y#x&(}Kk z-A?4%7Xi-Sdm93Neen}ysoD45$86V~?XM;@Y%YAbCFYocz|+4U8E=#`3pl?HxjBy` zbL}H`b^Dk#pV^q>Og}LRv~^j@MEjlp|8#4S?ayVOW^6qPKH6>0(|~24=UQD&zOf~& z>*fptmu@=)sq2a^-P3Pp3mAr7m7B;Lmorc0!cVUEYvLbg752yOXJFW}@7UF^?FDKI zo6aPk4>RAOmJs_sAhLh=H>T~sz4zRRYd-Md;=`N2Ow0ZIpQQLd# zYlV*XWst@5?IbtWP32pzaDZ8Izes@cW7kyMIfAiYQ#T*n7Qg5#li2&ee6<4VQY?m5 z`!co_9BcMyc)EMH8uQKQ_`|ar4zSH#fAqz!TaOR1eL48>@$dAET3v>pPd0=!zW5d0 zw@`B`lV4iyX>Mg6Ki!GO3 zmVQ68&1#<2GVR+%uRL<3zH07Gx)$kwPO7g~zn`stYVNFOCGr(H@s@w<&N$w>V|@JH zmg6fP_r09P|7g+U@2AXWuD<-~UQDg;W2+mRj%M|DSEIRp>{mab!%J(UA)W7)jSN%J(*If4g@?7(^mp|QQVtX#Ttze2~cHP`5 zZ5u<+Z#?qwp}@2bx92J?2QPj)Ev>CkAU9+F_TNh$XR%IL*T-*e-Mot{LrYGkT;M`! zOKtjwyWPSQP8dD={~@{kc6Fh`rQat1kDG+4H|+915F?`VcHM>ROq>yOo=rH#TYFXF zVz(>XuX#os(XZF~Khv`cyPo+b-Oo?qvgOj^rFP{rxWl$i5S&@S{_*%y43bM<$Y zXz#sSZ4Vw*+`CLD{cfo#L+|$L$))E`%~_ZGc#_=Cn)hFNOx(_WU9!08UU;o#ppnp= z9{*eKUY)pf;qkrJ;N+d(bf4TSkJ*x!B=Yx%lki`{a{k-tRf#i?A1(a5&b2P?wQKp+rE)f6udn>H>~#BlY~|;toBo}y zp6~X*dfI&1N{$(`Wy`0EKcAzpxL}b*hY?L zuA(-JrvJE>$3DB{vS_u*GG@aE&1V^kCo~%``fsQxw6$T@i%CwCdENdT%9#}AcE+Sr zCp*=!Sw#-Z zZ{B+Q^y;&Ze*Jn^^tU8@`|elIn%~>*H|`K&Hau8xwPN?KJFya{^PbO^kBPe%{!VE| z*PgrYrtkh8zWVLEql^9<+2vG4A3ZRw(zC2tH7dTc;z#Stiuc*~T3L19-aDfEQCBaC zL+#yet1HX+W7jY+h?mXg4SxT}D$eRdxS0Hn|6j%biT>U2H~G(Z`Tyy14i$0xRTy3* zi83D8tkV}>)?d43_3VF>c#fKE-CVi8Qu6-F_{r(3*SJ1auY3E+I_Um=Hc_5uHa}-e zFy+yr=leH43`SQ{xo3^b={GwohJs&y+}DsMA--c`~2j!wNm+xPOkm3uBpfv>5c&a~@dl zB<9J@U7_gOK~JCucLY z17`NmNz0m-)^O^w&E$2(ruVj#C+M@wwHa>sI4%3l$yw&}!~9GiZp`qsb-i4=C(ir) zbDIkme>$GpGWPkhCcas#_~xm~!({%F^^AQAx0f8ZJ+Svk?kbiWJ_^}JLhf%S9Q;0O z`Hkic%*mQJA2J+a*s#xS+ll!`{l-QfTT_DC4<6Vw@70u5ivK0=%sDjiFvp*GqubA| zv>b1*tn0aS;O5L%*BrLzxxT5n)l+T-hdonA@{7$o^L=ie4LMp`dcoo4T)xTw7Qb)w zew;i#OyT#zneEYyYnUVET1gm08W`8SPn^^KkRy#dStsW0hj+$@?$$aau(3B^FHgF_ zDt2wAueC+(in;EOt76tO+wF^d_%v-QFOy@#X2GqWf85%=Uf||~$G5q2zVTiW&Izt8 z*{x>2lRqdf^<(dvHHimSI!`fYojbk3h#}d3%Y4DhXG2n7F>kml&8Qm5XxqveVctA> z*~ba{iddM>@tEw4o+zapXqIBoX55i!z@gY;Vxtie-56OF5vwXNpWoAZ&a%ntu5WFt zS}EV76xJ!4F#kZ`>rj`cDtw8;3^$m%Qx8~Q7wn$3@h*48>pJfp5r%r#8B0~qJU!EL z`pA~e*_^dZr=v|9N|-jKc>H;t>chr(LhenmtjJf1;J4G-KdCYlziWtJzgn^N&hzF1 z<;BM5@=N*3eOl|zO!ydLccvt2mX7lBV=4Wnb~BpJ_iwy+?&K8R#B(1uo_RfIVw_~% zuiB_>kAG^MHva#2#u>?}Q$NaeKfWwg?(_Si$+?|HXNnU)+_R)1^nU6el0pr`(cp z(57Llwf~K+NgHZ+c70&H@#cu4PmhGm9+!m8#xM3tRHQSn^fff$lor0o-hS(Ag4&mZjgApvx^q6>_~spR zCE7)8&%M~RV_!nI9{z0lxT>)KRMnkw?UH?mCLfKB%f7c=yQbtj50BI9Y!|gRwax0M zqhm~>Lr!*F2s)u~`2<_{sZN6i;{wc@~SlBo>(q1p~EjyrsS~x znfrCJf<#wDqIzNFgQAU%TN&4zhbIWE>D-ZHR**K6@hz8K{B@?Vay2gDDw#9+QTIK5 zSP1ZhUTb#b$lS9@t>MOrdyH&shW+)6`nA6V|JmSZ_u=NtCj0D*f;TQa2eD&nLOs`7<>i9#V9A$f zxMg!Czpu1mYUcAf?!hkiwXw+OY%*W>zm?w?6^FPhMD+s+r6I2^I5Vc z2M1o<%6Ls^TeakRZS$UwuTx!89$cM!^tANk(zTz|C3oGI%=y-Qm@nTl)3kYWx{!!+yu<3*2v68EIPf6&0o@OOl zIL-ZW(GtcRYrigfTpnxq>&cy4ODer(m(N%--Iy&xrL07B_Otd~kDk2Qs=+UDPW8BY zB>zgkNVW;PHZwb0FnXTXd+_KMZ}D=|ApV{u{JsaCTW#EHy!_LWeIZu+?XJn+cWX0z zP;uw!&%1YGmek6*N;s6>i23sNAmgri#u>6k>dVbv?uk3U=g4YPvrnRXVX{;Wv{S-hT0UMq@YU+Ez)eJ@nD zc*~w3JTs0-gljRrDXNc`RDguI6o`HcE4}!^s3{U48Ih` zzMSu#bE=&4!MuC=-#;HeRmHRA--|s{TevN@Y}9ys-9(2~!o_9Aqo^~#;-^cTzpCcf z_@d#==Q%n1rfp+w6uhCJqQ01Ca?X&*{JG# zxJg}GhaqIKo}Ub-O56#~mRSv~5`sOpN;Zb^(Zc)o#cbXEbXD(}2F4>ww_{rI-*-Tm5szwSOg`cM2s;a&YZ^YhQbY<2rE|zb5 z@2+2E`zACZW`Fhnb*2k%Za@24{C@qXRl8R|I`u9l*-BdbaGK=F!$*I=-Bn*({It5P zCUN_oE!Dy|cHJ#YWMENxr#$<^rfQ-2SJz82#C^N|r|`SZo>%L4^lts>ulIk-x;w|N zE!*Dv^3VFXI`;psj^0;d$V>gc%xEuTgW0u*hrh}GPoEus?x8^t#yh#hdOi2c&)8v~Jl`n=tX>Tmz=xflo{Mxjv zSO>wID;o-(e+RZ2zOL}9FZpD^D(tSgnQ33-&6(Z87w*i9+V1)Ur$X)&9{aEX`Bm+CcpFcSh>)sgp_-p0|CzR{CSx%ew^}ys! z%YOf~HU6Bex7;S>InU&8C)fM_w40hbr>FG5g?heQ91@ma0_HOPUerImcA>=f9_@Rr zi_R#|-1oV#!})kZU-EO2WhcDrj(g4ta8WOu@x*G%q{-Zyifp&MoV!^vqVGnxamNky zb{RnqD>sP)YnNIm=x8j+|ISg%@64FcEFn85_Q9uBZlR?wqWWvaFMe&=z4mZk{NnE| zyXPK#yUnqu=sj5n7`Zv3$lw9zUXxx6q zy5_oi!94lz0jwKaHQ1k=D!Q!J#>~68O}634?U0`C&?Ebdciay$>SN3~8(|{2)j4f< z=5EH8r_2jiKKYlW$R>M@`L*ifEZG3d2hZ+3DAE<(nxmvQjp@|=Z)|n~Wz~$+!u>84 zamHvAdf$Ixn|QOMP-TJ6cGtVho}Lw15Gv&?VI?!?8IScdhnrf3MK5#1Hs>cxeAsr3 zrJYT={a9GO*!|_z{Ac|?nEqSSYh;&OGyhv<;>Eu;C(h44c-ndQ#g!{2UNsD4SM}9R z&Ul}?N7Svq0-F`4nlrbLs{Gv}P7tphh^nfUwmZ!C%y^yvL- z*fZbx?~)xt(sP+Q*UBC@o?CpS@Jz@vo|gMpE}pa4m-z3|$*t$To=yLGX?u;4+tpI< zBOClK)vab|pYirZq+WgYb4!`+ zwXb~Vs=h2d_26um4O8@*SGIcM(gwoQuF6gQdPA-3OLtng@9raCAIZ7&ocgvwz%rm0g-^bBs=(lkBLQw)sy^hs9ipV=9rGPfIBK z86B}?UDF~vPkBpS=U(yji(B6wy)ctAcEu%&ZO8Y<9%k=8RrRK}ng88ARt5u(x$6U> zCGUUR=lD9chWp|IZqcat#M`=oyX~6KS;uppI8zbgR&rvZuhlG}zZ+#7dE8#6?yHw_ zWlTT7;B)Ekf>$P``3o8LN4#)kRHzW?3u~`sU4DOW_y$q+fbFktx`uDa_D$0cO^Z6o ze3<~?qSGm*z8pKeG!ykoEU^RlZ>mkRS3{Iq_oDOw~Qcco|gcCqqk=4Tw)8n5l0 zRPN-e@Ry1jIlq1C)$nfi+$$%wEH_8%Dd~kBYFfRZNa^NfL+^dQR_Pjz*Ht~jU)S8I zKL7sebC>yna~the70#RG_`D%~ewqIAzfS_zfB3OudE!@z?007#AN(Wovr70tiWSq( zkWwS|U)HKo=Z;^yn*8b8vY+N{2NM}=`22oZ$e*9~Tsqat;pTq+QosI-x>J9h{j}xt zbJt}D{;o9U61A;2YIA>cFEW2dNuAG$a}Ko+ zjhmTR&iP3m{%|)+Ec+kJitC&G(%V1YUS{)qN%_0I7Rz$7#MEQvU9wnrAb+Oxk%wEZ zw7)94n%H^GU%{zkk-EBap}sithKSPprI)m$wbf6&I^Z&Q(Ta0sZcIUPue2T&$v$~w zBKvW5a)<-tMdlYVuVYG^p6*b5I7yhv&FH=a!$(8D&n288*X)kC?n#Z;DZM?vRl?Zf zm)`oR+3m@T68>18v?{(<++`>d@J?}iukY8?nZ^4P*vza86BPQSC&;J>lvP(wPsw%M z;qm;$Uh(IA-BB{%e<@Tw+-Ce!_DX5!NjpBdbIwj8#XYWvZ+bE;_?3N;^Y)VkVXwLx zHT**TuTED~@OgG{=f*z~vGbqmw(J!<|Ce)(9fccj9oWIKDpF>BwWqXOiSyKtFJ)p* zWeRNe%v{%XiN)AKfJ61XK~Y8I71l2dN{zC@mSSsaoF{7cePLz(w|eT!`I8TuGGCW@ zd0*;7_`x4SJhkEn*zd0U)&2JM(e|{%ySw(3PTgOi_eaTcAB(_zo1K3@Jbm};T5M}- zaH-mtYwr0>k;|6H@2GXsj$41{o%FGfr*{3=yZiOmyRz%c&DgSLojb&^c0IGy0@Ko( zoAIsF@0RXaW%g(5QTDvd?`BOF8=l(j*uZs_s?_re`yQ{_WwL5KSSS4J~{KY z(0n%uec{c4?{B^HNw)e2TG+cbiho`r&x5FWM^trxN59;epME&|!R^Is7aX${UvBgJ ztYC*D<3ZJe9cQ9X&iT6GPoB}azt7Si80F6Kw_|nkcSw4${*S-yzfbqK7lDMV3;XW7S(@zj=7DO(2YNP60AW(s*szK>+D(?4F3Ome{$zTo9JH~v&ESB)Hy8n zH20{6GyLOfxx2^zdYQn7?|co6?WQae|8$Oi7H8PU%-CRApyY3o&1@6s7fhk?@FK=2svufjur#o36_?R-Da5%bM(6&(f zv9*{Vy}xxT(6npb6z!LFH2qaj+l8xweib> z-^hDA6n~L8Fw?b0(&t_JE4Qupbt)I`nRZO#MC6>Nj9sUi<~m+8OVw`F)NI^o%&_Im z_NF_R<@Bz1PW*8w&dygk(dSnE1Yd?TexIEE>iQ*KoDGm;^)+t3z+3r1qcBaOTtuxz z$@8*_1jEX#T0hG*OP&W?u2Q^TWq&<;=l%HB_W28zsb*Z~`vN88`n$5?t>v;bv%}vnR=ZEOS!Uv%kT3V>^zt34vzLEwS8lMoc)<6RA4}rSvtGyZx0hvtHN~{h2K6TWZ2^>`w&e8LQpaGel3> zh&)dDY3KV`_xRmAaWQ}NUhR}oHr`zGao#j5wzQOn?}0O4%2%H8E?uPX;o^?qp2KVm zs_ZfW4Ey#izFfZfjj-nZM0JLe4GrfldqbZrkuAOB$X~!;A$Kgq=z)gY`GW>d@`6b& zJ%a0!40N1&3Z`9j>%YJnqp!SZ{fC3AS)CNN=sx(Z!Ig3NMb)8s+DANA#GZJdm8~?V z_r@0PJ9Rr+ih1O7l6Fk262D-|y_wf=PVa}n>NbgXS0}djPu6{qd>xu(m|kCH@b00h zsa%Q*o8+Vt4o(qqzRRcC3MMZMbqHcwaw(f@K`^se>hmkkC9@9%oGCi7?wDXKQ^?ew zXHxBkb9haw^mCWI?AXYCq`O8t_wv`4?yUwBx9c99aPX+sBc(>h?`u!?SVXPsPCesr zV4JwJjH$q$`(E=6*mgv4?hq7ElePVGeho`#(q7-5$ilZ=y^?r2OEoQMD9mRhbNf?_lC3Q+i&^n@#J!YYW<`(^I(S; zhaak5+4wzYozAHXOWiVjk9KfJuJ1^kA2YqM#$eIyH@^RLllS#hzD_-oW^G{B%_zO_ z^W#E~UiH#HuO~YTn{x0lzEFNpVQ^`7U++1s7h%V4SxJ7IX|gQ)Y^dLiMN>b{jpVsM zck0d+Z#lcI3@016{XEWh#%Sq{ls6UxX(`{<|iEcfH%I6TXBxHq;y4X-Dcw#Rh`Ax`Lbu9@|^cQ zmTA&v2_qwAW42X|IhNO7R(XG_doiQY@Qd===?A9#+P3EIl!xkmuSyaOYJOLKHOyvs zyFdN$G4OC`WwGYXh0jv9sB5PMm9A0eF-omCwkhi(d;1Bt)2m!lf6ux0^pRZk{R6Wa zy3@K>AGNiLe|Yp6r`~K{h69rQ<=4y$jy-PQex8xxe3~9byw%RrbA>wh#`8>_5R~XYuBj8uN|XEg#-oSa5h*^rLmL&kZMbd`ziiS8_|O zdb5Mk_~6V2I|~D0t=AVV3SDGxE>LHef1-0~X2XO7PYro@@udEg``2)MeX4!`nddVL zjhQ^EVi(-mE?(XF$N!rn7u)6cGkZDL*jub%NeVior~?YpOiZ~1+B?t65{ zE`frbiVsdMWneB}`+{rMkr&l_`*y?}T@%mHW|Ydl-7~E*-sH{q(^m7C0-ryUsGVOk z?Yg(^{n@Yn^t}p^Ul=_5_Tl|2WwhVN>?qnl^YXEUb_>qv$^NX2^7mcD7gyO_wG`szbM~`ce2(X9)IUC+XJQQ7teg4cEOewT z=igrX+5EZ1YoD{V3x&5eFZOfpaaDdC*HN_Y+tPB|FmB1^uV-B>o6>mW{ocnPkCrpt z%Db>v^Fr;5Vw;}p6H2b!Tw=&{U5K6F^@17miEi->xaM$WbYwXpfB+f8i{H{C8@w+V3!7!Vm zio4%hPBCtkoHK*VqVfWB*8gz!OVLiUnhXAEOxW{c{_-VnPTvama^J*sNL)6vqdA$?Ryg499xDNZX@#|d1^d@- zxH6kFHk?6=3cD#EMVn$0x!Wm^lWGT0QB+5O5)&AVrN`uzGmn!i8)xbyt;cKu(G z)6F-Q&f3&C{nKSGCjF-&u`)7lLN^QF5s2>iBe z*2sBr^!uqV3Jju*TVEy$e7<)l@W8FN8%%z)gr&!XM6Y?nrx;}+y`eyM4yS@a*bT?I z^TMtrzb%WHDLZe6wSe)qx`{F`E558dRJHN&*H3(DClyX-)Ue-X+aaN#wlYXeSlP$p zTXmLO<^;jun>Hc7UA0_`pG{?PsAXn~O}V9@Aa$5mY1fiXihUu4M{Wt!_wwxHI40y0 zowh~riev%H<9*-XRnOl2ls~Sn;P0ZB)iL(Fqjy@xNDI$z{BS4aPQ1CS4`o!v!@LuUp-#E ze^KhSY(a-5>;IRT9nhO`)?0FFzL1*!#*c^J3)Fp(*ZFs|-uuVgdIQ#CW@QG)bL`1? z^on23o|(S9@^n^XW}V@e?LtrLZmj3~9Q`erH<~HMBtP}mub$Q(vsXtJ9Ac2tZ&g2U z&GBMSTf%&<1)Lnt(b=;#f5b4pFjkm3(dTsVw5>J%%YwE!8g|A?ay}Y{EZ^knBR{qxGe{OBvvt+q({w15s8=gv)?m9MGM(|UK zZOlEh$*-TrE#V2D_eZpP!$r@xOI~YS_@(e)YG21>ktuWk%`jxL&)&r)*5AM&w!E4{ zYPsW4PtVAB<%Dd8q+9(*e9bHmMH>auB{j2O4w_*}q}G}}+A#C}4| z>y7&B)KlCz1(qwx+u5Y^MoDq{-)k=a)#$zbSmCbH{KeniwEa%4UdZt4*)ER5 zo|Bu-oG!6=`_lVE36Jy66>t16+s>&AI>lb_Lu>hDg&kMKdhV3X+!}ZITrYF#{P2b? z*J3BuMV^=G%67GM=Toidu)1EpbHCoPsc%9W+sf=s&jnUaI=S*+(C>nq;$2lLbKUxS z*01Ug%uRY%ZgS_c8AHL2@7HR4U$67=K7LChS>5;57May)sjF^lO5E8#_id> zE{knL!$OAlx>>iG6y8L&e?4?ql0TUvwqVD7{SEJRBwpq2Ile77;C90?Ps_M`v5abM zxfjC9>WYjjHBTg-Jd+rHa?{6c>{^HBS$>(h^YG{GhErxTRV{OKeDyGne^n>j;{$W@ zCjJu%S#yk|<>7>VKISfoQmQ@-Utb2#l=!xm;oQ~VHlGt(4)T<6?znm-YlYL!ds9=z zBqYw?p7-I2(W39n%8t=ItVIj>)`$t7pU-Bqmutsui8a#$Z*V3hJ>X4}*%Z|gXv6Tv zdU8Wg(wWOwc(Rkuoxd8@BM_UmUDRNve_JoFp_ca34nxVPSF22UJqwrJeP&;IMQvxV z`qw{;r@b`#J*DvW%5=BCda@hN8h^Bl+4ORA@ZoKl_2<4<*qvXjSoBHHuUGQ)2ma@u zOYSZEX)*2D$}e(U#&K z{CYg4NXH^fr`CVjUlr!X!8-(=Ms*x8Gn|thyM3>Oqpp;p)9b3jU4fR8r<12_{FNoU zF*|kcOPS=G266W#OKvxEwnZ`=Dm|J}&3a>*k&3#E;YO$UbxB5dgxdBnuFy-~VQ`yc zvFDm2-+MPdvN>Yu!2dK^WN}$`Yoe>;(_;)%WqZzT^_yem^D;GV(*7B|Hm{#FsJNvp zlT|ub996fy;S68;+CO5=Ml;pt$lhwY^vh48%;LQ8&fZLk?^9Tp$MnuKVepyHweMQp z!h{biKT3-KJ+|cQB@v##6MT3zcI^0;d5mLj^jB+xo~cuQIZt0i9(T*)7@qCEmT2A`=$)JbN_5?bkM=0MC6( z+uK-J!rM6*o|;M+FdX&%U^$_IH}HBTi&2k2knEQ!*LNv;+|bOPbM3s0@&%1MKGrs6 zKB3IVJ1+OwNS%LPILG!hs6{G2eTv)9e#WI5Zwzg1y4*`;8qP2(hOD@8ILN^x;lrs8 zzto4jSpJ#asAf#lI{aZ-bkb$ri@&78yQ}ZK(=XV%<9O`urllRJSCay_R-~6Ucc(QU zE4}gERO|J}lG5hWY0baOT4(=d-4&1+xHTfQ`b}@!PTx$)A1@yGI6VGkvVA_={rOLI z(to}bbS~UtsPKqKZGK<*D(B#Kk?vK(&x%u-c=hgQ*Y*nNmhJ6{&0P_ATQ0u(6XUN3 zA3pvyW;n3w-s63-jfw|8yIysYJjWc}qLCaRFXJP1dxoa*djH6q$w^X|H)d%qFF8Kn zeS+(~_#=h?_`Xyy9AJ4rdEZUG1J=35m3@f@eePc`FG?1TZP-*c?Llek{#aeMyNn7A z>t1(vtl#r|#sSlWBGK!>*9uu2U7U!HzvibRSx4m_bV~+ zujsNb>EVjZXJ=Ivcxe4uTB4cE?Bob*SOsGvGp=# zyJfp&x1V0P@3U{|{Ni6{+vinJ-g`f}q+;{0cwhI&7dK3PzNv4?j`(Y*lfP`Qvfa*k zzTI}}`{1vIKH`@x*Ix-{q8x(>d6mYrD4W%Iq|588qo-L7KMSj_# zn0+xFi~9u{s%JdW5R`Oyt&?23)@LTO!oGDZ61U6L`WH`4zH_I$u3|T{lXrm*pTGVz z!M3)~2k!B=O1yMt++zD_=d2ftER8dayVq?mG78&no64?o+G<&4dcnUN)fZRm&DPlU zvd>83=8~OW*VPP9{VCol##Y+9c%8)Sr3_a^UFLi~Fy*{$sQe1QU7cLA6_?tt`+Y0n zV%zLCXVJ9W%Vm?&7dxymVeft{aq8{bb8DR?zFZ8sva*eN!k0GY%e%e_XR{@goZRrv zd6l|T*^yron&&_CSoWdyqQUgKHHlDt4Ok z#&W-qEakZL{K!m(4cU_G-#?l6<-4Q&+V@=y_m0=Ddd+`2uV>HXsAnf0mrgzB-d?(_ zkBRSi;nm#i9p;wo)j2n|TSi--K0m+aS__{RSBoCwMSE_C7xL{k%Y6MTg=aKfIQ`!K z+_#F$Kl~e?*N6Q5k`edCXIfj(l&{O)JjvP|_RQG&-Q>yJ_JkFxJSbpYJo`wRTte#F zV}gB5QkN4`%QJlX53tSC)q1>fgYLYr?JtsAr)jUb!}tE$`ipH+$6R8}%QWXaPMedR;(wvxn{KZ}&>J=?CIPOa{5@OMhL%bE4= z*!Hr=(c8P%zI?qbzWv-CgNw&!m;F4fZP&i-oA!3z zz25b2^<(}lST)Cd>esZ&jq9iTb_@7$SnuAybLSH7-KPGprSDWQF8+U4|1bBix%&UT zcN?tzed&?1_{}T1Yj_$i%s5w5`?Z#xVf|lG(`EfU7kc+EIMJ4M`SyApyDj@aKdpah z|8AZk!~fo|@fX6y*Oyc~uv|F(?^e#?Lp7xz7v`06Fw~ZQRNS}g#|9RGjP5C?zYDq4 zXzXV_w*7PQtaVNGr+=KXpJ-_O^Uk)SEq9N;H+nof-%xKaZ^U1N{KvZQ%sZbw@?8+G zcc{vTL5el{=ZlLS?(Uo{kc zxcs{JbB$vHUn_3lw;Ww2+tDQ@tNZ`n_l1G>L% z^KI&gZ+sKnz@t&e@r+-QyR*gUFc*``ezp%XOdkK08uqh%P;BT|Ncien^)7N(J!7KH zea9J>t}}=!d`h_IC{QKZ_R;U+lwAj`w+Sm~sOqbVR>f_bziL~u*6ZyP7B6o)`s;Ip zZiQM-+@b6plN>9B)cvo|H_4c=(q}bGs=wcwqMBXR%au+WXNS&Or>~wWvy?IAb#CnR zv=7Bm!PA%T+t|)f>iyQDt)};z^vW2Mo2RESJifuaNBa6pfq(V1zFO?UFS6E=JkU)x@kU(1lBf7|i&>7$#Q z`4o=_8y)GtH-D4emU)Jq`d3qb+Vz%*_5}VvksD?g{q4Bsh5ALSC6)&E$-B^$)cn$ps(|nWV^lIJ$t{Z{!1I1z8$>t{_Ecl zkAHSeF7CN;(sc5@?<-1!zf^DHRGj>dHIw}rLz-l>#TNw^0apW-kW}5onGvDo*8Q`s zyMM2Be6G7~H`f`#^Xsj3vJ&0W^ETd<-m=eWs?EFod*Tysvh3Lv|LE~-?wEDoD&AMI zI}83^*JRw28@>E+(Z?UB7M$6Z+xhV30ruH^ulWydxZK>clX;5fjv7BX?i*D-Q`#7- zF2pshahe#Cl2~%x`DNk`IlfI_w}vTC5)f6;JEoXq(U@~%d46P1OKtlZy=bXU7q$nP z35})=#Ru}%pIPV}DN>>S#{81qcWc886E~jUuet=AHYmOk=BWJ}r*q&9&-93M+Q&aI zDkzzR>M-;q-Fc+5*q33$Dc&5;x$-k|*Glre+8q8zp>#u(i%yoO@{vo`dz;R&FPwNVrFIB;VEr-!OX`q=M?|V$~$Rc>Qr;)^X2DWi?@FI z{$;m~`{Z;v_8@zM6SG!MzgZ&|zs#-lbE@UMXB+?Q>D+jGwuGh}w{g10_XQsxDz~o) z{LL`qHJ|&g6aH&uvM0}Wt=e%lt29e)7iG5Y z@Yfys_TMA)mE-Q-OkrqC(c#GXu6FkJr2e~cpEmCM6rtBu=iwbatE_!&GZ?`T2jUj|E#$8{bfyY zj?6Wqsehw-ve+O07g$=~9jN)#EO}a~W5=cYqB8fsGU;s(dmX+mw~Vb^+VI5Qo#s1k z&uX%a{vF349s%Q;dpZS$O`&m)&rE5)9lJ88uM zg{#3Lzt#Pie|AKwzjWboUGrLYo=*Pe%`;uEa?LP~&{-wcCb9iD_m7N^PgnN`-j=(a zr}%4HT*RgIV&8YH*uEmCzyIC+gR5>Gp4IVPFaE*JS8TB>HoO(j_|4|hbF5U-;?@p6 zy9j}qiuYMgGE1ARb5GvQ{`vvFcF0n!n37zVB_2?QP%;?`~K&t@_-uKZb`J1Hwa+6m+z8;jn=B=UV-V&ZAVb2oZRlJ@d_vJ?5 zjS&5+f;E=H#~**Wv~*oXM{-_&#VWf~TiWGj96GFd_mJm7%c9$6J}cZ|zQ%uIgW2&&xGyd+|kfU^~ zuV80iMV08sz5FtE6%P;CSgfim6a9G4xW7OC=Apnv4g2%o^WN%vuNTvF&)A}>8%&e*HVvb@VT(s%#-Q=^g!i!RLXMWy=~nrep9cO zHOs}$dA!6(+KvCzn&%BiZZ5UkdsFz`cDC7b9dGmbNq4Z_t=9Ns=;~&do$l9{EqPPX zsbk8Vdwf;*?(uKqZJTg=*_y?U&;3uHd~fjXsIc+TGH)H4_>z^O*^)Do2(MY_e56jMeK~sy)O$w@1B-AbLsc*stktYyU1v|1Lh!r@pxO&_2)n9ev-qp0+a%{h%&L2+bCi4c)8}7L|5#J!+o=2h)35VqTkqbA-~ETL zKJ{Z`ZP?u#-AAvz-QC7;Ajm*_ce!Zg<;~sU@8&T+2rWO`ro?D4PdBVA|Npz`|6Caa z-q`ij<9e2RHPt59f{%^|kaXOkgTxl+53!`FJJGc z{d@mU?xOpBW`;xZ|M%H^UtK@@QvR{`%L-E&IMWpj_WxfiBigmL)bD@$eZvCYhmZGf zxN-ON*Sod}tBvYY>kj+aEP43jZ@zEi#p0LeS88TFms)q`v|+*jnAn*ow|?5pVB2%= z_DZv5B_<0p-Ru5G&uBVxRr8=^P2IH3HUFUd%Ko+dxL*HWAA5VMy`m*w&O~ZAD zyocBL-pp;N>uqc}w4TwXnc<*4;|soBD@=Hse}6yl@ioIfrbMH9KE@^c8#YX_=J@^7 zU4Y@&^vmyei>&iHFW8{kAa!Qf4MmPm=aiJEY!;WFx@6MTbiTd>i3jbPQ~kVl9;;!t zoSC+`=jjkN+j-kzH(U+ zPiDZzwr3VA`HvlVHT%=qE(>GV2&vytl*itNWOO5kRPSCufy`t|=t?+wu!F`LJXhL=a&z!4ut&8;27nIz*zg2#D zjnDn{XTt1K&&_*TKI^`vYR zbHOkrV4LJ4*|+yiWyBw@@-G__=o*YfWV7RqPVom8?m(0IM6Bw^xf-p3o= zU#q@4nP#~6nNjxL<$nsMd|bvdV|LOVUxwn7=@N$unbv4aTYvehF5%qKn9%V+CUHCS zx3w$I-mZ1H%@muT$n*GR>XD;CH~iKr+wA;OQTzPDS2nwjz!_T)yxr#ZUN>($H^YId zn~TZ>cb|Kh7k;q1`*&@x0OvJ{H&yKNy)uugrnd{G?wxk{TZ#sQmCcWNYxqwwPxWWk z(?9t7a>bQ~WUZndYxW=6p{&Lb99Jo_K1-!zp|ecfe~zBz{y`H=pWgR98=;?^RH9na zxAE@moEbt}vM(OE=Q&|lk57S~VZ*mec`Sa%o=xGq`jla>jYYUv8fMurAJq2>AkA_&=oJ$>T=Dz+h6L5rgz^aktw-M8FS^nHMjGuUgl=CRM4CA z((LLospnS=UQgM0bB;_?f_#O-@w1E1|J>of)cVQCh##4LeUfp0y>VZDZ}IDs+_!ga zniU(8+Rp-}toYy+=@;V(Y8>0wUHxd~If-aoZ8R0&_~=r(;FyH`Wp zw0)VnMvtqWwy@4p_=`d5$^n`nE|^rN7Hhp4K_B{rhQ=_s@a>VgRHY*OfWOc~cI#e=pmk#T_ik>zUnf?SW24c_KJ}xu zkw7!UDbbp|4#&0w(+;w6tla2Ao^+$$X%Be=K9dqu`d0}gDdTZCt`kw%$Ui{_e!`u zyJ^!r`(6Y7wk@D-2=?3$;D(1|$@7B?7+hpIai-CtlNH}&hff*g$RoYdp0g0jSFaDA`$8tktzblL6ftw6no9aHMJoKq}Tm@QH{K<04%j`Md ze+kzL9_iS-&9&@WY-xoPgDB!Kwyz;YIV(~$|nDJ^B+w<8!XXv zqs04%M%R@SY8zLa-pMAId|ls&dsnB}H5V7N%zhWk_=Y7%-M%WRO?Uj3Ulb-$$ziWP z-~7W*n;qOA1SV9xR5`t3oylAIIjl;>jAe^i?mXLboU`%4felmtyxaR`>lDYWMTW1H zO73T^l`&;FEVueK=j^==hx6X?u5rD_Xkh$}^TX0}4|o(`EAN_j!SYnk#_p(ZQ49;t z9h?{EX41Ri)4Iu*Ef^2-|6U`&Fu&wksFl{m+S#U=^)u#Z&R8NJeta!+LVZU+W5AL# zlU7%M{`4bn&3ftPEvMs5u6pn7wfng7{M5{|U*}uOzM8$netGrmWA=a7e&tm8d)S2E zIP>Y^YyK-QTQA!_|McUK|8|#d%3j=m{^bw%#I0|Re%)m8%kD|>!bSUBj)%OuKUsLm zpXv*eQ-0P&*#G_}`fJ86&BOaVZ|^-@{c*+*Z{Ir++U9)4Gv*&pxBEVK(R%snsKaT; z()FK*S1rrvaGWADvFYPS?RNh7sKQe>H!v(?F4)<1W2@1D>!Oc~X3uHWQ;NGARa2pS zPV)Ncj$KS~cO`XZbzD_aOTT8sXTO(c$6oUla~z*@u7A%H#@&3o_o%!66xn6YKHsYTc3JfV|ccIl|2jFwE`te{jF>f)+eVod`x|FU%lba(Mg+` zr@88W?qj-gWu}(%m%4LG)}p1;jC~wmUtLxiSXxr$7u9s*YjEU_hZeyB)4t2UTOKU? zHKK2A{j%qguej^0@=VRY9c6iU&2q>0mUWZAHf@;X{ZmxuUge>({0(=5%iN?cTRL4A zw$eXWzT56<{8Fp*gzK~3eAx2#h-V(hCcB$&cz%7cY1nhFBk)(?%K6tn*Vx`RZxeKI z>Ys6HQ-;Js?b1J=-gN~tH*{~VIaJZxX3+C>e(N8N^LNgD+N^o}gzP;txvSy6>;IZG z&a>zL6lqvL{p-KVtmd6|A0wO2K5uxs{J^uNGfvLQ(CFKz{V`BYYAo{N`&*XSc&y~c57l=Yjlv&$6^=`7b)SYkQJJ!7` zh`sx;bNAt;w-;=bwUM#Wxt7P?-mvs8e`fQ=Hm>hm4$a#3VAg|G4XIn*g{>Aa%T#Vq zk6@8-H&A2}%t-EKljVsxw?s1evRgugk2KE*Z-xYe)n`>1MI`T>cJXL)oW?7uCK1xu zqnLDlfv)5}<>pzo?-)uHbb_R~nd({FzO7uf|Ma|H7jABNKkMIN@%Mi|?0xq1fBMF} z|5?rtr}KPNZ7AnG`doo=^`yrRZT}|m=s6qI-nsDhUGr7oNU;pdeUHX6Z{*S-E z9=*D4-5UPt>jCjQug!9}yNql7?bZKQac}Dueb89A={?Pf?(^G=hT5+XGi@iH< zwqM}i+qdzl41eCg+b{TSBcK23=+A3*EmXfM%kY8!+xwZh0?iGrxq>%89KRd9Nu<}& z#DCRpA)PgCyME36oS$f;UQ>N4pzOkd+4&y(kSYfiq41K zXH=6ddOv@5JM_LjJ7U+rSNEr_{ZbvD{OkVT`2P9V>L+*X`@+jTU##x@ezoiWe|%T{ zyZ*n_=lbv88}9$mcl)~7;X%{Hnkk|y9)6m>@8FO6|Mz+K{^B?}gLTh7Hv3qqExT8$ zcNeYpG_JSV8EzN;joIgr&*Ry}W(L!z2j9;2^?rTL=iirk_rjAi_10zD>9TznXLWeM zusc&xV#Tfw|I>>XPyKdLuDQ8w)BUVJPj@dUJTmij>de3v-OF0HbMs8*UMsEKpA&uN z&h_U-b$yK&3a4$J^R!q!o#9vHxlf-ppB`Das9UuA@X?bY%eswRry2daZFRJsk#R~r z;{n?Sz6JdZx0ZfzYCJRVz#ndgf58mO5DZR_(ds*R_B2mTfw|=}+3Hn84$asex1U)z`cfuiiCrsf$b6JGqVZ;_u7ywl9)< zCX=us>immVp$2=_gV}$MT3gFbc6*s|cgj=kQx;n9p9Eh{*Lx-C8hJJI;F33sUu)LK zScqRR>OaEsH#_RtrX2Q!@0PKg;_<%~^J9)VJIhY}%YXUT)jH`VXEhlQpJr@*{9)a* zs%v$zyf@Dr`1MIv?~z91vsJ>Hvd&W!Dl_H<%OuV}mcZP?V)LA18CQyqgx{4rPd**g zGECmze5lR+TY^x<;&Tk^TGBxAz|NIgdD}lAj89XLX!nz4K0L%ig2w zRvSs5Vqd@RLWtb-ZZSp8Kh7$5HXK|hzD=63_vV|gv9GVq=$OzW^wmJ&oQ#xBo8(`^ zMGHP3->|~F!f=ZAO>bU78;j=tWsBG!Ep@y)XW_J}mUOY^NvXySKN;9IpFD8rVDYbt zmrHx}U;S5UKI{ANcExbM_+6&V7Q=MsY0N(>N$$9H z%5nFW{JiPmc_qO}FZdtK{Y zz?Y$w=ox%qqhjKA&D&|e<{i^0?%Jb&*fw=%q2KYnC9#q>GH>{GJp8kRS2SUwQ_ru1 znhUq|%083TOLB+{o+Fjt75Z!OlN+!8&k$Mtvbi#ISJ}f)3zc+D`FM^N*{d1sj0;ZZ zG+f(TYh?1Zant06d)(eV_n40yxU#%lMXkXhSh4YzvXjY;cf4lSCw*_vJd$&`pe!L` z`qv8wa*}nK8y|2RG)ZxH70+KZUxa}zwJu0g^8RMWq?KkfWu2d0Z|R>{6l3@G&+TLN zpt4fO{`{wi$F8iIs~VTqxtS^SxqnxxE#S!6_;Omr4zbl${LgK-rFE9>bzHn+S-P^ph<3!8vvfkB4Wy8M8P5oH0Y0pvq z{Q1ed_lmVWN^6e2|K!V>i9fFd9NCn$RPTcU_aD%*lKDcCD;M*BH=6Us)2h! z&cZ@iV9~*Q<^jhgPG|Lp?)CRCuXz7R_1!JgUk@&{a-CzdiM*FqR_x6<^<#qCo8MB^ z_Y(?Tj@=$72|go3wZqDG2aY3{{zKS zgMW#pGEV)Q$@D1FPiMv9&&|qu7gx3^IFvBAxic-bzIpsku8z}`z119t)Ykoar)If8 znIpnKGHb8;oqNJ|>tc&uspf1E_hwwLKf9w$vG1Tsu7m7cp>5TLX}eaq?pLU;X8iK< zUfNcXX>q#U8|H9DNAC1X?^!tv_I(^kj2)veCWI{a@EUHuL`V zc~7{E{o=RgS0$(a+IRfTWx37IXSdD$ZTlp7&#{@Ww#o^=PhN6Ga?0_2mkn;|74Nzm zY;_~Z|6fJGGv>;9Cl4F${TEYnIqBS7!6#)FlJ^tkug>TH+Wh!Am;J4+clv|$f4{If zQ}g`fR^`}24&#-}KSrK>Sv>R8_Y3hF{YxFJ!cArvVraYHVU+NR<|Fb7# z4jaR@V{^o_+kZy5mcB@4*H|SiBKvZm=&>?WX2AseP4lX4+zJk6*jpG}t;^t9T;_aN z{`O|OXFBh1%vgP0nfdp%1MIQfJhkSt_dI1Ut#eJ{X5TaYXY_9i=XHXUj7#(rik7^N zdS5O*x%9*>`!y4{bqPvd$m=j}xEq;pUFh3y#)@_4s;8F5ol{h>`}26g>#L<a+}2ila9r8`5l5?%(kqv zxzjC|8whTF891?hVTWGWhc_2y@Okfc7hioRuT4UtnTBI=p9q*x99y@Zy`NT zaHH}gt^>0i#aNt=xU@+>PKwt36K{6u$bhh-yU@czPkmiK?JbNrGbQ<*GKnHlXeVfRPz zlK0mW{dwOepXI*%aq=s%X;Nk#9Vhj^UCP_pE2@9i?%PF43C8*EW->Q6EbXx0^_z|P z0f^LlV;1t{WP`TSvg~sIX-t+}PkNSj)x2B4qPFOw(uBZSf`7!4lI*8vf7+{}G>56p zbd6N#^hEFG`e2)Qrh7Xp{5~t6=l-#Wh5h&=$!7i9W`hYf=bAD^@BDpH&6FX(id&)X ze{|cvf44W*ura*Y|I>QX{<7o^yUcd{W!X_{c;xF7+k{ftkAGIj90^|*zijQ(MKbT6 zva=mD-upwb;J;MFI@O%L4D03_@B85`(JKF{B+o(jy{vS>X`3m9)33i#k@5exEYt6I zRAv5~HwkuqnU$yhg)p68UKwWgrARW*fZ@XIFE0%qEaPE&PdFtMb|GEc1 zrOKPT${g6yQ~Wh{S}|9az1q%qTkMzCMIEzUd))Esv>WHo>mVVbr;=-m60MB`3JSy?OGt)E)!bWw-Z_z6JG%x@6Pk&i|+m|hA zxbM86a=Y-)+6(`Ly0eekm2wrFU+`*?ep=h7HX42t3td+y(#*nBu}VcMxiMZRF( zDcOWX!BVKoDynrN&S%=Os{@d3SSPZ3JFm1@z-E}YNw%4ri z(_-&qwpHwnO}ZSGQQf|aE8>c6Lr3lN4ezxLgtMMMoN`o6sHbznEVG#>XCHWQBw}&T z%jJBBzI;zFTw%z%@HOMsE~!4J#`i~VIuruIgpMcG2b!0;zfNx<@+-?w{OqvHF12DYu61S&2SJ-tIlP zI$AUQDGSRvhF4lmyAM`)OD4}@edYB`X0ErDe?gtWA!asp<7+*?JBv^7yeU;>n|7+= zY~76NhLkDOFNN1T8#0AX|hmxHsj|EGb5&6FdfL@$=uyv;S>n zTdsMz+}wEa9D%gNe}W&r)jTja^pQWh_Wb!Jmg4n41AgjElw#t`wUTXK8<-sVl6m6s zH+Nh%`SR>CHQm(r()PieFOspRR}{}FvbkD*LZozI8P6uWBo`$X{}-3Gp7PwcsW36C ze#zI6`8*lEapt^kT}%P)X*&YjWYRioUX{OISbA`d&+82}e&sp&O7^b`zZiZ#0&2Hz z{9VcwHft`}WVgA)TKGYady2B(-5Oq{W1E<=b~7_<+1J)DHnG>> zx?5yr$g<xUsUS4 zqRO099XStr#2@F}UQ}i) zwvJga`L^z-2+8rNx@C9BefBpdn^V<#;&N$Ee(y0@IK4{bLB~IX*nS=fx1*Z7cVO35qb7xF?W>$E9B;lAwH=Zu znSP9+H&JI+$5W-W=V{xnJY8-(_ub+nnlB6T-}Ds!IA>$gCT%!J{LGc+zC4Dl=hup) zm7cb_ce_@qvL~ zBwTe{@S3+JGpFLq+RMwYd2%>h4@{f=y^)Q5;e>BO-%3tSx2og_d}Z}YV$Q31muFU{ zc&Z;c#F?k{`Oc3N4_Tf$dE%2xF4%K_+LkVu{a{dF^UPJ5EV#}%tL;au~<4Xt`tCd$v5qv}?|I?ddTBTGp#Qd`CC z)6~1lX;Zev#Lp1xeYt_Vch1_$$1iPL;oCpU=G7~)-j^S?>|zyMyiw?T_czX8FI48d zJnF{KDZ;WSoQ*k$BlPjcn74v+8#l|YKF%Pv zjtkktb)0`h7=$A(#~8iPKK8MAb4Tgc4~4s< zzjS}U_3HHhi^t>h^>*pAnQcFIB)222ouQ@oY5)IElKax?GxT4r<=tyI_4Bn^0`K34 zU%dH%al!r2hj#0na(^)}%#*$Uv-HmKw)J=CR^HpQ#Crd>KBo0|Z^ z&(S<`s=}z_%}rME?En9(zMB8B|8;r)d4>=D|GvEcZ2xoi{{zuocaEKM(2g?|D2QOc=2a@TL0hWx~Gnon(Bosxh?r!rp71A zx@z^ujZ*p3>o0HF>hnvz?VJ4{zQ?mgUY2(Yf4wieUQdpB#nbQmUBBG_BYWY!T>MOt z1I1oHmHy4GclaXzkNsG;e89J!C7(|JH$EKyukB!Xee1{G{eG^Mr%iPB|JOYx|KIMz z$M{oU}$*6h576L zZCw+!KT9FDY0>gjE3x}q@_j$&cfG!)Zt`x^yRG%UjgNn=VcMVjae1Z%$A=ougC3e3 zwT+A?N8EJ5e4+j2b$U($+m0zXJxbnRsSz}X=0!0;lP!J3DA zx+sguKW>J3jtnoedAbi?Dn5T);Mix|2EGHlDSx7tRfI`2yjN|IJ6b+}-u)%dPn~Vf z<2ZHpSjFnf9T7)V-u(C-ovFI~_4DLYlY?J>2!6fgk>#@`8v=T(1-G$0mh+uwz+};P z>Ni7$ar45&tHnKM7VBtsOzygDT${$!ao!C zx<;N`sb{%Q@7>_ab|g(<_qDapCc9pCTzO`vp9E8!-|`@?hGkpoFO;0B3JojMoqR2k z>2I(`#1UiVU0$4Z`oFjg`3_u6VOZ7vyhG*QrKPzi1?-uAMKivhG}%gv@kLbMr>Uow zJ736y?&LW)K3J~O&z)RUAO9>j?Z@@H z0hvVoGG^~IaVuP&Y9bmW9FAV+a_OYY}&0}dH%iAD}A1xW1DWAl$Weze;A;( z&i%0(b4PBH!uuuXa+zl=dlALSdirlg&w?e@3q_WdbR2N}rN_8HEjGJxfkK(ot*tuK zH!?)8Oc!wAOG%mO@aE`t4UU8C1w2eIj1H_bzVVJ{*S$kli3`=tHYm8L>4*!)%5Th` zYp{A&$GPhqa}Vw-j<{m`O6x(AWP)t+|3_T2w;fyb=|!`I!yD`N-0Dql)=g(CI+gJ=qVo3PO_t5}#*FjrwQ8k$9zL4LoaO7k_rAHQ zy8rJYe}~2?jRBMDm=e+#Pf0lt^ulegc=H5-&$E^DENvR z|HO#v_4}%haQ<)3GR;3?l3ev8eUx9n)@<}@xK+}+QpxA@tH8=-XD{vFZusVRq1>72 zY`O<(?Bq{>`9AZ>a~GlFgy-|O%wdW?&$woJbo+MEShIaED;8J&h@3FL<>JHH%f3e( zZRm4vNz7cFJfrWum6}#?Z`*q9V~hHB?CUUa>-pm(uxw`fbw=N#5&Ft`=1FI^`!#&o zChS%^)2PL^>i)@J9tXD1>D{tNJ!VakQOgsXa$Rx3IT2?~&s*8GJ0yrX?_TD|7u9q` zURjwX@nWEx{91kaBNGCjvre9owB--a+}TUgM0c#oF}=s<=i%hTR&_Gq%+l&pR?1&> zGjE&7M_QkGy6ny?vG<=9ITRXuKR$bWS(9P5;<4nmyRL`xQ+NE1Jhk%sMRr!(3oquL zXq%O`V_A=Vu6stcVMk~|eFyW2Jw-j?+r{pkE>AUBFI0R#Prr8U_m;Q!o|yJ;dKcn% zNkjJa2LG2|4($v7=KHpNR=!uEal@&u%}j?o*V^*DcG9|+&iZ*u@yg9T3{q=N+1y1| z<}J+bJHEA9>WAH`&vTxF78Xa|i;_F4z<#Q&K~;Ln3mcuRSF8z{66Y#R*14xv=j>MX zaw`rt{#M((`!B1Ku-H20<_o{1{HJeUvF7-uTZd;hNbt^3(t5pdUAcmg*_YIWbH|Ri&Cp9c)8&uq;D$d%{XJrgJl+xZ?sZZzf zt@1}1PBRa4@+3)~*KsvjcX(ZV!^{n;?we$Cp1+~j3v6r#eJ7BEZLNtEo((U~*3w!29^lz;8-oU7(5`mR`>s}{WbK2rPF zlNHrdxBTBQ?c#Tqc;i`Gi;5hscgHz3zB=Wz`d4D=qS9#_Z*p3%d^J~=<;uF><_sq% zu6*;@C}YF3Gkiig9!n)Kh;(G|!1C^e+|EHGPUY-AR@+FbFbCNUa^nX9p zocZp(m%`WN6t0eX55KqS^_PCNm`_Zu`W3WAr?Bcx*s;&TI-f(n&%J**bN-AkYmN52 zTK%lyW54e8=Yjrzmc9M-Snu%0lrOb9pM&S=PqmVDW{$WKwXo(&STiq{g~=Q5&g5|`j}+H_ylx)1QLxqVE1&&2 zcoa_VQ$CWh;eDIi`@JuoyyE&fNB?@JR{N{(UKh5W3(s|5A(I%$|8>>##zoHQCR?r2 zrW&u zb9-MkR7YfO+!k%X(aqxXeM5rUm1V~dZ7Dc*cysH*j-?Yna9>_%W_zuS`#c}F@`5j? zvzWaF^>=4Wbgej%e(YOp&V}!MyrmUcc@G~vyxBOT&@tM@h-0p!sLdSS9Wgl%rTPOT zBa8}a_21lCy7K##J9E12T|G2*F$PSIXkrzwIXY#%@r+J~HeDturLYSd*&QbK`hH|* zDo?QJj%ZELN=w@GCpG-%dMWYwyC3|Y;#i&hLssD3%!`u_Zl0s1HrL6Ae|LhiyS0rmE9ndX2|5)=h7S`Mc$)t==L3n`gYs-)!SpK0hlUZdqU-|3#zkI#l_vhbsmL2-{+rNmc`LnuS`p?yP z&L5BOv;X}mFO+9L(PaM@-oyJpgzN76cwKj1UEutW5)Hpn_Zo&>?|IG;cD?26*Mt>+ zJ~2DX*YjtXPg;Llyl1++L5y?7FS!dkrz%b@TxW3Q{8#(h;C|j+sWz7%Zmv1JbBDk2 zdEfb_7CqTkT~jIr%X-IscHxiM?lT zZ+W-u=j>~jr#Q;G&Pe`v?(6+b*=g^O#Mo=xS7sBCXB4TwtSQ{UaO1qfm(6pYZk}$; z@K-0@(%W+9t8ZT7Pmdour>pU0R@0g3ntijsu%BphxBd8raZg*rmG_DVK8S6~&=Q}_ zcVM~#_p;ckZLJK~_A@YU)Xx4{61?E!mzOuKIRxtF9@2OfByP!jtoyj+!Y}>HyU%6L zc%&yj>)Okxw5X{^rDk>gz4YbF+XQ*1!+Vu?O1)dYD)7VS1$O%LY}xKTdpL8VS^VYn zly9$_ZH(Bqz0KTrDwyw3N2PGo93tkn)o;>kp-zkAPjT2_2v#$CyA&-+wp0Qsx zA&cYm`zZ@;kBU}z&Q@Dc>wEk?gODpv5A&NKyTzNbmm6ssR6bc`$GFv(scJTh%k}#+ zS$Dqp^ou7W<8X*tP{P)0@)9DpH!M;Ds_SF}Y}PkKZOxj&bXWL=*=FtKMK_gXZhFct z3l?0}wMm2_!|S&i>vL~bp08G{D;K|*%)sZj*7W{P?@v$s4=-0#d>+~^+RV72ci|h! zoV5$y9a=f}S|{U?ze${Z^KN^;?3^fhPrI}z!05#D?A$nyUsgV0 z8DDpu$<~?^sh3_yg-3mVdSiL&g-?|{3?)|$1^FBw&srZcT{U3un)tKq%*qLsa{o>4 zEO;#WD%VIY^|?%xxZg2l-}cjnA(vSkemnN|L~}4bP-|Pr;CEnc-u=TtEnE3g7|tJf9i6Ce=oa$9L1c0JwM9mPuU#EF ziVXI@=3T?OE=*SIaboU~)4N4yFxMp7?8wc&vt4vsZfmUiWA)|xLc$d#)fj3GGOD%R z&Rtu;pOm2yI-N)U^mX;?uln8JJ1$|r_35^N|DH4Q&)ypJ9n7vzNx0AS(PL-B!3~Z# z!Y!M-lZ^N#>KQUDV*Rtk=l-Dp<9+9UCPedRO}QD{*vOT%i8b3N*l?Xb^S8AJ%lwtg zX5HdQUMF*f+xlnTdY>IkU&5Z1GOkgUy}_@;I8|7gE1Qi$(Xq#Uhm%>D&dkF3acwMT z#HW1`GKer*VKn{Cl9y6#3s;(mTrpGXY2PJO&~b9Fr6udEI$`Ig?S?(G?TllE_GelZ z_dGxDz$^NrX-(Qx9I>-F(`F!iNgkKVxr@zc7vk*NVGUIYhf1&i=M6voO zpUm7^j=x%!(|)l`F#n#Jyp?bV(~s&}sU^I}WRv8?(3W9ymw@fBhpmOi&LoDnMd zX75eOJ9#N{#M!1deQXsDo;h_3qf_kBBRNhTX9`?*^X5D|{QaKrES4SojyJAvUEi)z zc;rY*u%%z(r5jVOnP=^JKI!73(q?7p)Wa8dy7Qlp=#j#HcWv6}>P&zqFp!uPG!TD<_}n{P`8!ls)(9=Bb1V{n@7y`^4EEo|}E9CE1eizVM7ok^Qb$9T^`e zM&tdms3EAiTR!=5r* zh6P_uv#vkh7yEEs?BlQRxT@owW%3wq*LC{-{-6H-e$vv&O`jd!L<>%w8M-z9|I$gcA}Ck0vxrO1Rle82qqklmD}*@yCPhA15pR=$$a% z%~*+%xoTl6h$HkO6RtYw_A zw@^pnxLV`c*}93dzgfpBSEqDNH~1yA-AcLiWZ=qo6W40?IZTx`+w|i^Xo8i(@6D@w z8!pXZ_3L*k5)k|N=+F{dp@JJgBhG5}US0J&Y1tEl=r7H;=PgTb(kVWB(P&XA zYsR`WPwmdy#vaZPDz<4jqt*B7Zw9Nt`^m+Zj*0G-X_(We_>#4EAx}X5+$q~%7;2th zzs+v;fspT!*OiNz_U_KIOPYE8mRrfatr`M#LUz;Y;`(Dtt?w*nzw^|ms!r|Ws^=zZ zGgDqhX4}=TJFYn8r~hr%;-@o2jz(GtUb?yMMY`w*eXBc{@^XycZ*t=i`x+B*KG#`5 zo!e!OEN{*pN13H_=g1W%E#1DMEn!ws*}8K z%kJH;b(hV&w&3%hxy$)nI1hQe>uKLKJN?0qw+DS*By&f)8pd3D`D)GuiT*Ylu`-6n zja#A{82P6=yy?`O>zig9f77(@tsBGhGM99>0FmX@+?SIxt2Qb(H{7!}Ua(N`cwX;B zsXa3O8xAxaKRw+dcin@VjJ6N1^JS>?$I4vLbJOXoy3q7+?Te(OJC+tPU;nrLzyJF-e|vN2@YUAJ&rdQRpWIoOaC_!K7m0m$ zWDFY^9w*Mqm_2#pR`rXr=C4d_v6H)BBuk4g+s;rR z8phy|TykfoVoBPA1Jl+YIwjNEYgu@GXY>DG(fjlNJ*=)bZrlIW`^WD4zjQ(RSQyqy z{%!yJxWI1Sg+t$#Ek0mtdrjyAcoS~|DcFP>LO+^IRr@IH$qIIcf4B0R{=JcZp_J94ljEn5 z@UdHDn{#B$TE;(`4bLZRe8JnHK3{+74rZ=mtEIoqTL0&DeKu_1zx3C5ifi8@dCsN< ztGD;^E;~?sx97#8bN7Puw%)7Ux5Kx4$r{!9wtJU*tc+qmKQsS(+j;v{>rEvLRv#-r zKGCu10PljI=YrR3oi1*B!(*}b`p#;TO>@50ta*7wX?Ehjtv+fDB~1;Y!V|Wqxu0K9 zv^L0%@%n2{hgiK8_d@qC_u9|Y=c_zF(D6Xjvs+7E6MIn8Kt(N=i5Bu>VtV1AJ0 zu}VqjLsIRBV%B)B4MYsrl*?fU0F~S65m> z!th}7Uz;GwOnHy%n>RP^`kVb@)tRkpo;eggPO<5->owJ^TlGq_`Eu|s-=e4Uj`Nwz z8h_rgXn(EMMBijLnHJZ%i!IJ?IJweY?)$1QzQ1&r3;QnR%e`E2gHh(-K6Znyrn$;F zQj2v@{tQaGw_?ve6Ek#Z13SJ?YPhVVuGtT z3x>~T3$N`ymV2@P(zI7|z__;j@d7I2^H+IqG@g*0&e>%^1(}^dxRMm&_x! zc=;ROyOTC7InVDeQnB@QKBtbkqxihr&$O!J zFSz^Q`tIlpdwAb4U%Ynx8?$hJ+x_qJRuq^N4i6jh)r@ ziuWs>dk%Dan?_98aC3%0(uL)fMPWQUoCKOb`05`h)iqDG2p0Q%RVmHj@6%f;W}EMP zzdS>PDc#wuG=fQ+$Fia4rPcbYU)4|lxE0uahB2!r-gwsARqJ;a#+PvfU;V7-E)a8c z;pa5jT-8b`N++-&yG`p_G9jc+37 z>^R2fC(cQT^zbQ23a&C-=~A)NY=hf1_fs?OnSJtOZP88+;s<_sMl~?CUqX4_JTQ=hZ87d3%lRhNA*fTO0Aajo>n zXD@?uYTI8Yc3wO6>=rwBIKY01NR|Qw2ZpNGXF+7!A@Lctuglf)Z)dZXA zwNqXQxy(1{+0_2Iag*E(4h3xmXU*+F^D6UaeUAIWdZ47=?z-o>uRqrBTEFh8S?r5- z&&wF^z3VEj%e`N`{bbDco!;q7lv ztM3o~y>qSBvyXR6|L)tQe}DVipZTl5`zx)NI)6MJ-s zIHj_Y;Yh;gh<`sE4?N!7@Y?st<>_Kip31!c80m0-_MH9g%M~}Tk9LkIIe9SUlD+Yh z-G)Yqx$I7t1I}&sy(93dWmhi8v1uP~OgQ7*Hs$M{7hi6*UECU^wpO#xOsf6VO0G{b z4wii;_QxJ22))#qoLI1>BV*2;Y-zXKEIQ&reOztnX)*3kHYc)LTz@=&vrS>pNgkcu z9Z#E#PslR3i?_AR^Rj&R_)4Oaqj(V>ZcaJIplE9>6(qQ_}z`Z ze4Jl$ELkemm@j|r5$X}}cr|aSZmQX@ko8s9^v>~FY}d{{y(;4TB-4M#JZ0N8GUbn5 z(tB;R?sf2a{*JusZ||ALUCn)e`NHP9sE=o!E@1xmamw#EOZR2`UaQ}A$NhfT^uOyq z*ss|&bN}zj?+)jmDb)C^?0e7srSI;~cI@+oEjG`}PH|~)Jo8YO)q<-dM?gr?FX3Y7 z7Pk_K+MLg|?usw-B0vFJ9{KeX-#wUw(Id9j)%^?h-B&(gi*rxidl8w^W ztF|U*AK(^{X`H_#i|=+6~=qHfy5AS8(3DbfQ_Y?^?UW_GeiozHgGHC-^x3zje4i z@!tFRkZ;P24^4IU5CH+=kZh!Xv!cXeL&M%7VebV1?oj<<$#|q2&lFy#M zU1sEVo#CkkcXan8)iAbemNo{gTR*?i54WysuVr<){-t1Q-><)NOLq$|J9e{F=2y&7 zkdZ#?U;-N=Hq;7`JVS2GHJ%@9aFa8dGtURpxG zZRP)8@%=xJ|5tsOozC)_aahy|80Ikf$v5Bsr~2Tb^l!GhS+&=$ zPqp=D{JTe4ChdCeSD)DBrVkR*Cd~cpaU)j$z?Qv<{#CEun~G)Lo2Jv1+#u>DyK*rD z>zwtM?h7?7%v!x6i(`G|n_vmnb=n`(b#JYE{&V%`80qKPx4!<`Q}botx8<`MC#_C@ z_2b!B^Zew`yDom)^gn{w@^R&o6#gv0zc@DG- zeE9WUfqT||t_P zyH#AL>uwH}KBv(T&s%j`^YWad(=YFjl?s2RRr$5bZ@&47oQIRQoWFi!#=YA|v*MP= zUS3jp=D@vWEvFZp*V0!=aWH$myOiHu^_=IglC`H*&&i10IJs@!Y5Sxg^{;Yz*Mt8a zKk???EuLo|vn3l@e`G2dc~|Okg|P)NoaW+Kx@zARo~<&zmD7YfY^SI1jbC+YJ==|U zx7?q85C6LA{i=iiJ6LmO&A(jh#_DG#6+e}q^?{#X!>h8m>)Em9v#y0a`@Hw`lKUC4 z8qC#9v))1sa^#pZtZxuvfz&-o-FX;4~iy0qqVvZ(hSqa6QR@AXzXelUG- zGo;q_@%1lnnEcOQUh{U@s_QZ9R<18*@L)WDOHJ#7`Gi|5w#Cou4VGF~<=%6mk5?qa zHgj@j{QR3ox9Tq6H{t%ux7EjgOl^F9OK-}vq-PTr=1rc}?^*Tym&%kcuPmah_pdm3 zE9PnKJBuZ9(w0mc7j3yxHG9MD>&Xdo*X+t$?SDDsuU_K?%cuLxj!m3-I@z=TTj$9i zVP{3Be5t<3oTz-=H=5zaEQ`ww+dLiquA2YcZspTAjB;MPyK=MSS^DHIes_>@hYsr67qW@ zl5SSj{65T{bj7vhb#C|PuTCOg)fQyC$>>+_*%SAuXfp$Yg?4T#PZ$qh(x+qdUM91cd+*nsGCb4r# z_NP3d4bj)b*32(o6L59KVtEc{?}C$0_sLzl-o|*1L-@rUO{(OXQmCz2X1;Ev5uGfxKv#( zTzY5OR_j_$)$gN8QM0dFMV<;-)H}o;1_m_x7_AoQGeia zhiCu!8M%2jJGIxe%#J&wU~RnLj@|d(d`H#w8!~21`z@jSZqjWYo!9B#zizZF*k=}U zGyTTr$dj>c#lJ5VMBmJgy#D@&N?YgdCwk6DY7^}}rQUshlb-5QJo`+1`R&)`xxria z9aDI7uC_>FlSlFrsnp(i1$C(({@huV-MUcKNMMh_iJYph_w*hwwGf^7oWm$gPfYOk z!L((f$tgJ|nX_+h6^uRnfw7`8_2ZY;!%w4l1l;4Fu{-ogZ?82pcs)mAMzpq{%bZjj z>+P2JlO)!E?y?X}oMxh9UHD08k%i7lzqly0Z|7BC?2vN!K$1pS*r&Fx zz~xd;ql0_zZnkp@aX4(=+p&^sd$nue+M4u_r$SkIe2$ep=(~FI?6>0CfhGU;>d%X` zT3&eOlgEKO4^RBDP5Khwqj7Y>CJCdqCok0c12y-YPhH5idCG0~j+S*(D{C*h^~CWM z{BAVpIZ%~du+?nGtrN@njgIGUXS;2(Z2h!L@3I}7d>XjZCpXX8vMs3Hg6mDfvpwsK zkKAN1XV$k^?onrVW@rkg7u!&Ux9NhU*ZH5 zdcRsk#~pN!oZov;af7S3@*GYH=jPRQt%@cQI~d*XvKcZu>58hhFO=o#Z_D_ z%{aBN`=VvyrzEv685e(xIcHpu=uf?TSXH1(+HFteA3+&biKH5b{*98>KOP7ywz!?~ zrsHh|3q!;Xx!R1zi7hW>7Rk#kc1@VvJ8SAfo(YAfF0+rPI~z)OFfS6G_x@7eW#;<0 z8|NE0JzsmUGxo4VZIMURd~wH1c2y4^-Foyz!O)qFpe#c3Pf5Bt3_ z*3atoHKTaRE5CN^tovqG`=T~=-So9f@2!7(DgVs(Pr(77hAdZaOzx+ zW%u7-dVTKk{`GgR`#iDx_~!D`>uJinKLtL&{YGQH=N^+>|J|4D`>XH&{ag8PZ`JzW zw*Rvp+H2pO-dCHhxBHOKy0doq$9{7?m+N^m=Yl}M8>310*n|J}d9fvhSGT1euP6{Q zP}>{PQ&d*ARjuaxUpD(6Cmwoj&^lx^_rSK>abFJH>*hNvak1Cz}B&sUE59?x)osuMZ4ef7I5A%C~poi=Lw{;KGC zZba#vh9~Z~r*1m_KKuMHPmObhoh_Pn_h)}KuAT0CdZVHBzNdHGC(LPob<5@Zx!G6h z=1%?E!2jq^nMcFcV^fVw<)4&ucx+?#uu5tBerSc=vLCm@Ub%kRTckTZacW)m*52s` zUw7_aSI@u}ed=w-y>rW~5+t2@7S5?Otu3GAmT(K%DfN${kU86XX-V+nCq;pG}xox_z_3*Zj6M^*KrU{W;4Dm)LtV zsx7@9=-~0Nub1JpXiJ{PBIW+px5mo5Ug@-Hw7={9xPh}cqvPX(okw2ZHI8W){k4SI zuJHPcGY!5kE*uwY^at=Xtb6whEbyP=d4aMg9^t4{-*Q`s=~GWE%og@R%~HxHDZf@ zzI*!f;`Y8>XMcXo`n#dZ>@ZP-nH@ZjN^+5bmOiuh)Yn|rqJCw4H=eY^D_3IUMo3(ebN?63A&)aIh$uTQ&Ul(Zl zzN13y!_<29M{CQs)J&Zl>v&(wl;P%s@H*#5RX-IIWt8UCsD5}IKlRh^TjozX{E)optL^XUiAtoyU~_W$URyW83c)=hCyc z{mCeuyWz1*p8+Gw`>OP_A8bAE*Srn2jo$qHnnR$^ma|Xo8V>ETzRe#nm2WZ6ozPvz zyDRqYTmFgXX4cJf8f%_^{>!<_!eoEpto}LelAm`zGu&*IeL-XzBjeL^r}M+so7}Gt z`Pjbp&i2(TY`rIVPAqwIq}afI`Rn9RxzfKY4yiD@74KYTwj_~J#K4|8eVx7P&r_*YR>~so z6)~So*=J<`^}AJib(`djcRz!6ec5|!S@E2fLrm+wE<5n?ik*c=okiqzhLw9)@GV-U zzjm|Nb|c2)*Q=&k`7M5XEA+clsNb!)E8(6}%w46Pq3&OIm+Hs%PES#Jr@?bG)#kyZ zduz-*GA7pILs!v;l!tGYBIi6R_^I&=Aitq0&`B&y8U6Q`yC;Y7Xi?qYXn={tc zT5UI<9-zR+QS0SznwMeUv+s-OrloThzW2^`mbIQRd82lY>OC8CRk2dJ;61hiXH4Gi zoEJE++itqDakFx>56jQ&1M3ray7$-~df_PI&?aEBa3hcNtH!(CO1G=N*e2g(lAjx$ z)5gZ%x7{L|Z^t6BV*>Ny%`BpNDvGW>t}sm6Te{<&^qlq651lw9cC3T($khuEGj1;4 zEO&e3(W;Dxiw{chY`b@G28TCKwlb6TktbVY8rEMbtI>!yaPFDFcW&v?dlx$IXx*&% zH1GV;Q!nx*IK!ot&pa*Uk_u8hHTPRvWAo;o$5R`YiHgK+-v5SKVrBUEZR!G@51&q$ z;gHSt^%$eNcH+cPHHpc$o*JA|{If`yZDy|j%t!}G$Ey*|9h(CeGAuP<)I7!!lh5Hl zKUzmzO>&1s4!h?GC;qR^ExY%aWyCP;jZU~M9h1)$eD<_=;%@dMKRz7vY}tCq>VlfU zlb=&P*?+O5EB8&?_$fv|m9xW;o55na^NuT9r0g@Um#oY&sjvJQu6zAeRcNx1Tcnq7 z+K!t>?~i3|lq)OT-1q&cap&Z`W$*1izGGT*_gqIn^}Fla&X~_zIe#zjglU%}pT6Js zU~6n!>UYDc+oI3X=3eUEP%4*i{9^ZBn|FTq(-qg73Dq4cKl|&L-s5Y#eBT+d+$nwA zt@U~8m6&ggWyO(+R{z#-pK>#5%G{mutTC&79>t!ns1b7rk+>Wm6SZbLXNKI9;J>`$Fa$w`fMg-IutJCtO%Onm&%^TKVd-uh<(UibL{T$!#vgYL{|7?^l7Ww2=SuZ2J`1h}0Cg&tHt(zByoZpoeoP6yRhLEhq_AJ!98`pPnYsoX9>tG&YA2SlD2G8+@jyT zAAk2ew$HVc(2{$i!2Z*7((gCz3<}I=pI37;>99r!7u&G3`T9KDrDx#QBO99}_^!FZ zYPxU#<)fkV!mIBq871EQ^5Np6vzPlnBvf_^_%dy`=GoV1Ecd#wvE72bx!~&h4RX_O z^vTw}`}#iQ*aseOxi*RLzg*|9rCa1(kJuW`z!Xq^Ect5Q0R^6Yj>&%+8|o%B|7q!b zk@a+sfA3c5#}^~|Ung=hWW3?XW@5XaV5@h*s(*1=^XkOb%|})J#KSo*KKl8KC;YG0 z>#DiDl{~2o&KUwT4O-M18(Lgr9h}(=X2~_5V6(gRW=8V-6TfDy`hG{|{ClbA^$|hu zms-A^DAEw#ZFRR~+Ggd|bqY58VrL%hxE#r-(&yQ}=GVTe`v%MYUM><8ZeF*?`^$+< z+KFPe4Vx~RdCq^3b4FoPuKn6(-~0>wnf@oHIF!%1%){aE>5E3vP0yNG>5WlS&br+$ zU@PZz-f*Xw^F&^5;isq>7oW;rE4X)hdTnUYHm|FiA}{|1luZzJpSojZ``P`$bJDg= zTvxiac<#X(`O?|&7<~KF4iU=fpl<^e*&!#r)wSclTGf zIg!SvCDuJibST+>`=H7M^JMD)CL{6Xa@RI(D6lFOQhHnv+nTs@Imh2|b0%*&of*CTRM5PAt0#NPGrXQ;$FK2xB|}s4mbGU#HjCRP-#)SV zwB8|hW+~2doG)&vJt*N_C%4z2DcV{-{7Ls_rfKipXU*{!5|!QcO5yo)_J$V^V~?IM z_+1fn?%S(M4I_t`b1cqGmD4T0TYFxwkUC!JH)q5C^T&d6ulGEfplDQdb7fz}m!p=u z_uZDtJpEdCX=z8z{clxr{t;z{)=#b)f2*5vb*|~6^y{UEpWaHi=%!=kdD_D3M%{%n z?~{s*if%W>&HDtDxV^Jq&1Vbx&UItESb{+g1Jm7@;I7F{k8V8Ox5@iD-<5Q(-Sbad zJ+Iil`FFF-lYK=D^Zpm4^2y9^URu7f`+j@M<96NM4xiUEt=R9_u;H_;(Daq>+{^-& z71y#~obs|}lG>`09UcxPOgcw2S4_)KXS;Y&X~AaYYl)2q#8TLFG90qqcs4esv!}EC zkxkrSBrUT$o8iC#-kOq#8FKDr%+7NnPO;B1yRN|CE>>|NW|6TI+hvLV$7#F_5)Ut2 z>bQ1dzNxL)w&U4%xwn`+GP3+4Jnah~uiFh*hub|nzIn$S74>@|by2Eh?vwUT12^^R z9J#FlTNgah+1E7llShNMU-Tt;SB{_qOm8&oXaBzW}%SoW`#JbtVvlGFH@nq7`wmO)9ZvV&pJ z`cA&9ZykC$H}cQsJ|>c}E>WpYT{5YDa>JuGhx>uMjTrXLobjiw-IDQuW$fz4V`u9B z+n>r@(|73W-N@F4m$o6_zn#uy`1)5V^X@w3KPMvQy4L(%@BWYfzxk|rfY@htz|4F*%@0!O4&ept}RK;{*N1EFQVS}x8=T1)wxYcZQt~FBT zS6^l2^|vmMgCA_4z0~#a)ddCfY?D{LKUH^cA;Yoh8aiK1rGE)>dBifln3XO&ks))v zX-4hLeb-N&ku;9mxBTg$6|XC!+)6FqXwP5cwdT_DM3b0UGs|^SG5h#U)_pI$?08^r z%l^;ROFqgRc+PHlB3+%G;g=)dC)TMfcFVu~)f4ztD^~J*-o@`Pk`6Ie@I25KIAAVd zcD>@``O?Du$4VY9u2)XEy-cpWmBN9@^;|Mz>e+_)jWz2V}0mIAH^wH(a9 zerwvk64YSW(Y9eJJ3};w6Q4%6bnKL?ahqPbicFX|KPKNQL}i~egS{5Rqn-ydo2NW? z<(jf8K=*ac+%H;OVzv5j?MfH#;(Gpm{(kqztGZI>P2I)w>D!5r?+ts-onwgf?QWW> z?XbnINc;9?HGjraS2GXv7CoKh<{Qn+)vwHDvGd;VH#htXnU+a~Gv3!WDBv?@-gNyy zkdxKS0JYDoYB|>(v?kB+^9#Dc(_uQJ!Ds79Ee{Lk?NcSA=1yK}7RdZo`-1WLgXo3;2*Osw;Dx>xF_^tg3`tPa?z1y$NpZ30{es1GRO~1#hzAv*n zvmn}y?J!f7)TDo_%8qd!I3IQFR$KM~ORtJWU*>h0&Niu+>SHijde{G!0pk>j<;Bqp zQxcO`eLs6kF!<`ZRdzNTiwabACzmaGX`;%{z;(OCmhaAu$DuE;J(y}L(EdoK@soYZ zgUYn;>%RT4V!7V)WU|RDrcG{H=jY7v6_{%E=t$Z8+e+S&4T^6Kw)!UrOYO|EzdB>$ z?Wk3&Uj+Zny1nMo+P~hvmwdC-E%s$*ue96!?|RL91Chl`l2`oRwC!^2WBHq({I2r) ztck2C^kFPjYn-y4Ysxx4lM^b(#W^*NUrvtto|$FFFeSCMhv9hXo{QO)JewF;8`u@p z?i=Ntnvp(diuV@>i6wnk7#+^df5oe1P%~>0>jIgBb=*HpEgJ7=@)>X>Y-2Dj=$yFZ zdyjyv1_%F8m%F3E`MdAx@6 zNq2zY$*{RP!?e4K%N7tHrcq;v?*v(Z1M#gtcHA#^dN|I2}mf^Iig_c9z6Ezv!Y zYnT+UY{t{3gE|U_CQmh3+COi@OU7(Y-z7OR233q9hDoQUOJs6z`>|{`n76&p*x*dH zSKPOw1%(&6qWyY4**!n9gN31nNvBLx-!8zcAVd1(Y9IcXE$KZxZ-N~5N@ZxAh*`cT z=3eMd?a3L27c`0)j2rWlXD<_)&v)|s#M)y8#g8}DDt!L+%jVpz1*v&GWzx;}?>IR1 z1mvY<@VSLN=l*WGV9n+F*@3rB-fll0eyObd#%_jZOL=|P`|p2m{^myNA2ah4fdWtd z+}pS3&6@MJKX0qgZ)1G8uB=l2@Y&xI-q#A>c0b-`_Bm48U_D9}iSKk(U%@AEDH{H*3}oA}{_$%72Z!o7w!zOkKlJ+e~0 z=iZ~IOC@yXtx*!2Yw)TiBEmh!Xv6PY)7|FCy8pRZ%_nbDY`}KYki*!ZhwXOU+~pk) zXJm6pcS#&_mrzb-cji&(7wb93Ia_j~gySm5#FW&0@yc%>@ zZ`ah8Nv0;P?pgBMY}K)(WlZI-i$d=2UafoXb>Y2hQ%lq4pD=Sc#+^DhspIjq)mzW> zy9EB3c30@UP3-(>fiw4gUiacz^2HRH3)vIO7QQL2lK)z3YQQo{m}%$w(!`EL-lrQk zW_#Zbe{gt0#Ie*|6}PqO?uKhO9yt*5Sah0d2jfGX`?vmWu{B)%nBCL=iRKTP0C$^K z*VxC8p4glW<*_src z=SyZYR>tub+;U$a(dlNkp(A6Bf41^W^Q!v^Jbb6qxYL?U14aSVu4-1{Y zp8n&*CqcP&=L&c2XzJ&4=?UHJ`kXE2INw^?!fkuJdfrTmGkwP5qW)Qn#|N~KXWxw= zo}Iq8>aBicY?Ktg(WiT&UbCj9>;thlR8iw2%Xc^LT$ie2bBqOf=Gf0JJ+pp6{M^&WFLuAJx?elT=#6%BrPZ?E&+it#P2#>U`d#ntSv}d`u~w&Q zzgqeKU-z#p`_Aut-$!Tnzwh{5CcCXp%=TYz_Kua`SDk*nZBKpR6T5VQ->1XBc(gEa zO-nDEGn>IG;f;m)g&%2u<4X^%@#CMoxQFE)U*?{kz;klPCvGavWGmQeSRmG^C{Y8@cG; zv${Bwf3ZbXe9E*hN4Dg3_3b~ivQ%IDtwZC-RmZQqc9^;O)!sA@p8JmsKBrlqQPY`t zX^;8U(yqhjisEE0SFST!-EDm9(TUQ!yp8@L`dYv5F#VbS#piPR+AXI~Xv((a>{`@! zZtJ{|^Q+Sf8@{w(>=tfG6gmF*m5<`47nLg?uMvO8UbsVG(Y)yFpB;LY5=&*+{40H3 zLT*LdU0!?5?W>f_`S({oHdy_;__-c<`l7pae z%4eM~y8GBIBnw^KH#xFEoykW8M z;)NYcZ$7#br|81$&bWT7{sWB%m*g8eKJKXHJkR%fheHbE*8Vpa60~0nnq|D{xGtt& zAhdoXuPle4dtUQ8=?ylo5*NMbG_PfEZ&)Xrki-%_X;Y^_yEfO-P~rG>|9BiG8pj9R z3+WNqd`$0e*bl8wffbDN)r;dgW`_E#VB&6b{q*$gf_|l$*~yPy3qG^m^yh#;y=aRv z--x^hye4$p2a#hB{^fFfv#I!8d;3Ue^55IbI{Bw9{~K@M zTa$A8$8^p=+%A74c$kmFv1A^#9Q7`dfBI&rd&I{Pos4<=CH73y;m7diR&2*~f6X|A{OOM=I>t zw|$b2-FMjk*7JWiVlPj%-^B3Y=~4DO$EW>&*}Y$)?(f?B;m(g^>lqq~>wOsR%-rqO zwp;ju?n1UX*WX0#FFx!rJus@hsa>?f=j!IAm;du=bHsiy;*Z;IlB3(fv+X*g{qN~a z|DMdhe*TD7-O0lzl^^_2d|dxu{d-*C)dRO=D?294a|n%O*^zeS+pXkUxu0+2A8Gy3 zTd@Bg^Sx^EijRy1wS0U2^3J=Xeg4JPU;Sk@$NQeYx*rw4nub6xXqM^)JT{>|rapUQ|k_O*0g>-8-fJ8I(C=SZA>z0a;(WkdO+ zxto{WzZA|_G@-f13%a&O(kNEJFLhtV4ExR6dQ2M{8_v#WdZEZIKYQQnMd==i>jJk` ziBD*~Bz)pf7o$nX&5laQndzmIvmFJTL5ye&jgtU&5%))+w?kmZ4(e zI{DM`*VjDX+OEiYgn3g0^QokbaV??qHl0vyShPcMuGnOqMI1Al3i2m=8QU|ic^|d> zeEs!VcW1x;Fa28gSxrMpa<5J2;;7$+OLg7nu9y9(punuD9u$9Bn1glx^`GHq3-^9^ z_<1(-?QF)y$)#Nu_sbVlEpM7ETrrcQgR5)JVeN)n%Y&P^p6u0sZ$4wf>SvQr>#AHZ znJ{zb!B06d25a?oy?wo{-Wtt4VtCLr_@pzFS4!C{o~$s2O`1<#*lZZ1Hrq^oHNzt0 zKpw-ChNV@rJVX^@)*6@aFHK$ZlUdO?Z?(qhokmrkbLO9oS?7PrX{Dxz`J6AJy6LR? zlO5R%npc;)rGGa(Qv*J~@3gou{ihy|4FJP4js0jq}8ADf=z` z##2q+y;;w4qwJb~X@7M0HP=(h%l}rheaimxIX!9Wv74{A&MkC!_uevo;g;`n*8P$^ zoBcFK;d1zLLzRB!s2N;I;SGEGM2!`GJP}#T^nP~b&y79pg&t2cyrQ=JS6F(qWa*q| zpS|?_*RD2t>M6SP_mnw?23~g;SIH+a{SV(Y|HWzREwV=)54;JvS}A8g>DV=a1FsSk zraIqfNOJhVtl>Aee8O9X?M^*>uitXKSKg(zD3@7)NpBs8d|XLHso-g|1J#FqpBLZp zF51TGuzrqvqsux|Eq$nnHwdeSj?4NxRoB9yeT?^^Spk) zz>Ne6T{)Sx7k4zAy^wI0w?}a4-_rYC-;TNU#LdWMNO`PpDYNWKjOEpmm79Od9eBgM zdbJ}5gMsk1Xlq-WG{Xjk4)s5eQ;&Sq;$k>?tY${tONrah`6f2L?mc<$Ut@|%`ox1b z&lRO9g+EB_U|J`%V8Ka-mA@QrN*PXw&`Z)XuH@^I*pUSM<8c*${m?sE2)9^T{=f)FgW}ZtraRCZ*o+ zDb*+=P%Ka>et-gayGN# z6vOdfm9bp!jBnja=O~?Sct9_Cd+mYS;g#>d+?*}<^ZUlXcT;O3q_?~?x-fhB*RaQ8 zyMETj@yRd$W7m0S+W*?N3A@+%-tyI2zw_fsoAsAJEM3oNp0;}Lr^99nd;DeJ8a>#1 zc0u^#yWjVn_ln!fdw2W#6+Lk?_B*pAG2LFZSip2s*x}bFj%H-t4o>r({xRm*?RC8h zi&8A)E^ZatC(rFLUBO4k$jnGi&ef(;LO}U~db_rJ?vcmrjLY4N{ubpH)TJ6VOKsjT z#rpV$DSJ+4s!j6Qfju6e!ejk%Ti>2F;E z!U3_p-y2R%&_8Q>O3IzZWTnp5+G}o;ck>=e^^G`hy8hBNj-}_BPVjtf4nL-_AeU*) z?&jFi<1-?re~!)kF{SO`-bHP_in@`@i`f~b{fwD0W5PAl*0p*rkmZ`mhb&v+d-V{Vd3=SR({?4n_+N(W}lG}KUh?%dlv zRnqn%N!KdUw2=ZgF4k@yCmnae00hZVB>F7q8f`hsF5e#fz3Yt~qAhCf61h zGh3^8HZiX?2?-mxlen8=XWhN zuI?4DctY;Kkx_TMv}kgio`jvO=MM*ii5Itis=gh})^j`S{FxXDm+R4ti}a%!qGo#- zj@A3l#h1jz*$z8MuqF2N339kdxG`?X-=;R-)}}VIaIfg!Sv~!e668*mH zYPIW`^vPc(7i~(u-sczUr17(iFN68{Pp{<*W+xxNGV}S9KZdr-4KE)(n3R6LJ))#n zs-J1u*V=b{cZ+T9o*0T*g-X+`J{SwCaIO@`tB2j+bBQ z8dNB!di0br7Hn#~nZw)05uu&_WOm$~ZQirJt8P2YTse=!p~ygSL4~C{W5Y%7=vS9+ zxiq|fHDil~8GmT(%jNu>U*;Y79K~Oice(#%j=k8l@=_*&M`t(ffBWZ?UDfS=V}AK3 z3hX~?ym?LL8+X;;`@ThM_oXWN50!hxW$ew5YzpF`@ZdkLA2;Jq98VZ!BIaI9Igh@u|Fm6!RC!vm4)Y-(GC0 z+;@jxu%o(@fmvQgs)F%!^T!p|;&(l_?2rnt zxDorHarc2)(=yI>Ouc&wnm^;6a7ete@4*6=4$hpJnoTVi`VYhxJ>hI&Yf)!7 zH{+twWlPt0IVq=o8DBhKG!T_AJSqZYmqvkDs=?%?9;@n|@**|h@xby$N`o8$D|9{i7 zv-V$O`TK2q9ru3Tmi?bU*Z2SX@o6px1880R{=!dsf1la^KA-#}djERU2zzTq8=K#p5^!Nvd#%eE;%;6Zd;?Fu0x-{ z9IH{;f#&PBadj)49b5|g6$<0+`ghd)Tg5JNp45O#wbm)__nwG<27r!`@hn~{I6tKpO#q@^L53^jB*`(59 zVI8}Ce|GH&%`#7l)gS}$$r^u7@Ano}-lg}eOtwHzpl6n2t*w3bgtb0<}I=FY( z8JAu^@bpMQA4>`UY^}4V$~9m27_Fbo%EN59ahd;(HJp-vX1?}4c%t-g#D+`*#$9gw zNvS{lo~~AS`9?!w;jahWH)1bKvZs7l=lL{g7MIVOOs}UBwO!&nHlAN0Dzv{i4w zFXjL0_t))nAHTFUWU`r7{`{lX)W)W(ufJ!>pZlAz%y=gAr>iF&ZSQ5ohacy<82SWjymzz9|dscpg|RG3<79JLcQRb}VW_G}Ai{4&Jt}V&^J%m>p4uY= z4qvtSP@&4kf9l=J_A9xQ`OY&dE_tTY#yMs0*Y(@k7K^jZxT?e@P&lEYZ6n*2rOv;# zYI#zeMNMxgCs}wmq_(V`GM)c~+?Q;5-qwjzjf$Te1bs7*pY*(@>0s6DPs`j4PF6fh z5xs02RCfGyL%X`-<}R(zI>rYpQq1mLb?V^}Upr;K!9%7w2cqtI?~2WOw~lFbwDvKL zq&*AX2nN~lXtvMTRggPD!^bgLEhzi6p~PYyYxBkprp6U_R&R^lZ{L(9K5xdKBci-~g zJ9pM|QoyRY|lDFKk6J?-7${ez30Nsa+gmrTp^ZPxl!yUN5IWxTeWVv z@tk>g_}S8+^~}%O(${MhE9W}LL?k|I6AroeSL@iFSGnL#xpQLXf+Hy|Gkxz?zvNcbJ$^l!an)(7&JUk1C0w4JlA*=(`LDu(4gsED zj@J^8DOmrwxOJIT%7jws^kk2_RazEy%vLKlNO;<j+^`XJpdz zFBH4Ww(z^|n$8z@COmHvI2sdl@YV9Sp=n+6ZGO80Ps>_E zHy_PDu3vCv-Nu}%IeP0h$W6D%GLP6Q9U;6y)>>z_?lj-|y(W?>Sx+M*T2$l@b<|1E zegn3A-<1XL4LgF)1-N7%mr3K{+naCL!loz{^If~gG2+sCwx9b7m^&o+!^Jy%cHEFl z{=h4t^8LWghbt5fS>oBJuV-|%KXcMCH)XQqX&<@yb~_g(iJ$n>ve+V7oTe~ad~D(&AZFNVAGXWkI6 zwJ=KXX6)&nW<24d)B<_08@~RJGI|;otE%taYO#6s%*&zTejyG$tHcG;S5I2L`EkQj zr)NRgs{JlZ4&9tb)X#BDXl&E^`fnH8y6m5?Du2cNJu|AG{oMC3q>TAvzMW6?rJs+3*yk_naGrcV?ag}0 zWmf}>dgd@ZYA|J8uYoS)Vu| z(sV>Jj;o;NrlFMjf}5{%L7Oy>fG2-C8_1o?()QZbpZ&Vgq zb=KtmX-kv42EEC8-=);Ew`c2}J5{Q?uunj2?w0xMIu#;vCJRfIPLo?)b3R?egW*%d zA%T2}l!z~f7GJq~vFWm8)tTIb)lTQxUg;cCP2ct5a9PX=d&^NVX_4(u_SeSW@npS@-KO#AeXhbR2!Z52rfikLj(fecs%UeI*|hkCdZOfuV?hMFK(E6H>rnj8k67b>@6lq4-}UdCRST;S!|M) z*~xqCg~1WFwUQq%#3m%N@#vWC?!P@fVyCW@cA@?)xi;lr3cDU1zstRGYWJfV2PRsu z*c_Ac-rkzcbYjV-Zimy#w=9x+_?{o;WQu;svRK0}h>4TiDnRFdc5{1>Myeo_kK($g z{(n>#bfrf*Hnch#KIZD+V3^kSGgm3jUDbvht*YjBfg1$seA@CO@)l-Zqg}usxYg(jbgMEFmUJ{LHJ2 z*V{H`=St6Ub}-qp?~D7t=6_p19<7l2|Mlqkw(q~M|G52n{ipgrU+bULJv_L5Hru?u z!=~}SQ#r!h{Ligh`L(0Z##H6oHF;kC$GcyzZ`0SEH>>?@>(8Z^?KkqT*RS|pCq94n z=Cxk~XGt;5b-Klmel1Jij^ zIo|bcKT5SVA4T1}C^X@~8yum{{x}cj^Mc_D*|`gML%DAF1dI1C8HVMvD-^yqWDTBub+RT^}SN| z&AaH!zd>_{cFQ57&G7*X>pyLuS^u;A^Y@>*KH}vE-cJ5nbMf8+9k(n7tEKnPUz)GS zA#*C}&Vq^;g&N(8u_>-1{Py`vpUZjeDPc9zKlsq{L=4lP+!IVMB@TF2y<^!VartBR z%tyN%K4wf2SXQYRI^C1EjbG#6*;hw1W8z)!UdJn$~g_D89M5m|?$Z{H-IFO3j;AcJ;5aTKjqC zy|c?aZ`@pE&?~&5sw^jgu?B%1RdC{FS4oUOWe}km#wZnGQRvh zD<-D z9WfG`eGfRZnwWY0_DY*6hIjK1PP}Zenc=wD1|B1^6j=wBY~H>;sffo8Zv<-^o{LSC z^p`V?i<9D!i`c@LZ*${Omhq#llLb#tGpy+DKNl^*&~27v%aGt?Z`E_~QHCMY7DmTC z$Ll_P;t+q$>Le2IYnS+e%EwGK1`>OYUR~zQvapb;;Pu`sv9FtCtfJjg*fw2UcG6GxOJB@c{c5L`6`w#eAy>ia`AMtTWW{dO~pd;Kb>My zZhw4oha#`Ac|#88i>(>T9Svu%9r|7L;hu$MgkahirWcc(#S>juw6lEuAs2aRNzc65 zavT>EwkF7|RpJp`Bgow3s?MgOD8hWWPT;`bk6Mk_`i}^2Y&vJYcgf+MhxRPUG*nC4 znqXtqYhf*R;nzCRl)ZntCmv|q{ITaqb7!OLlcXOD+Zs)+U)kg}bHLqOZ})^> zy?civ{PEPnxEsb(cFvx;*)hDM<#q4D)83P3TKV<2e3hK=VS08V`^(9S*N$#IdUUIl zo|m=!<-K(R3h!PP9yvU@p*y?#tJ|Tu@zQ&CY?!H8d%3$=BvD$~#)kLDDQUTLM)#^; z9k|mWJax;FjeHhyoZXQeE#2A8Zyk0-2~XoTG}z+z+|*EIi(3!FRmo0?rHqDWEe(a% zOx$=sigDLr;hZE*!FHidE(t!p54QA(w&Z#A>NE=Ee_MDrS^e&dPK@ z)venSOX8j#PEDF{{m1uS&eG~x%fIX0oZ7bgl5Kzdb++A?7QA`>s>7`{Kt}1xvC3U; zT%2##o~zpRM211&arpBi0uwxXQr-P;d||sTU3o4t@%wE)vFX{9WnaYP3Ptx#G(A?8 zZSugM_}DCz&T2{XY5IRw%eSi8ti&wPT`f%B-`*mwkG9!)Jx#%S(RAOc%MM zr?y-+%U-!f`~CY>b8j!r^S*gPbocWl&(8-FK7tpOguMEDKKJ*sS-l>zFB>_IE-VY5w^X$ULYkeEkQj|};y^(nFi@@>P=}aE#ZK{bfaVEABo9vW?nvWecztN{F zr=wSJb^V8=TCQ~FD04N370vx})BgtcmEZhwqmN1M?Hq$|2ExZ)I6PRw&5_YFf6C!G ztuH~Ai~GMbKIW?Sp;*M;clshXmh#NqwO+Qia$9!ld25w|X`T%>S7n6_*Qf^E>dyJS zL|Gzre`%G-#ci9~U$HYye4!z7MYTGaQ7BLOU{s=E{T~I6jti@m_fAr043mn9Ic?cw zG*7!@gFHvG__FxYmgT>#7*9!?=siji-S|?|GXLopIZI;&FTTBBB=kDt)?W_dUifBq zNP5g6zuz7g534UYw0uo^wdmfvG48wl{R7^AFSD(-=6)Aj^`Kf!Z1?vC>$S>l&F!UE zu77*!`CYyTd!qeoUw^*(clVc$t?&M?D>?VIbN8jf0)dkHld1d+#$~VkmG5QFo-*TW z6i3U9l1YXykLj&*eV^Ua^ZK-_&pFA|GyCs#Tz0+sJ1$O|XYs)@gMu)I%f}cD1FW*A z7=F#lHM+c+>1y(vc?+++)n8)l()ME3?(La-73E_hnD6ggo1I!jpf_uRUjMi;iXaCT3nQ zdVj0K^?2pGDBUA+2QA$uf2mq!{U(NSi*Xm9zFX7gMf)F%Y~^#eu| z`-gke%a(X^mTu9??R5-^IG>%q-Ogiay9dYNyt`Q`DYx5p-Z7njudIH0@|Whk?+WZc zKTbWb{rhL^uY){t`&DCR{@0rOs^+}$W!G7!EW0dzPTSh$+F&%xn5AXi$J<>R$5pJ& znl?;-UOwSPzP0gz8@e*A5nUTZHf)KOxosL{{AkV2BZv5QNc3;m6g_9xY8!Ja<=J0? zt99SAC#P=TAo3yczXV%P^7dod-&k#AY@%h%v*(yym)LQzscMS}gU-wR6N?u+&bXe- zAlE_;#A4_5RZ5xiap_H|^!mwb|GF^#1q%$K3xafBwe* zzh9dE?$n;&>G5Cxf8PHket+4Wb?4i1H%mGhO9;2G<_|yo>}FEI!P%{nZ!YCM&UV-T zc=3aQo&32UXJS8wi@%?3zI(ZEa?Oq%HhkUN_!-&!+poXevU3yX4nKxB_kaG}@6K>$ zz0E)8J$wHgJfiXa?fO6QAENXBi+}X|ZDS`Z_i_FHufH$;TU^h}@Z)^lzxP+w7^WU9 zOp9CRc&0e8;X4QG{Qp^3FLJ%!*;HA&QYA`0(J}mk)u+AR@A1yGtetQ3)9b+H_q;E{ z;84uzxtmJJp5K$dRFcI@6qhyT4@^8o@=_d5s0PSvhq$tXFjS@^i&@ z?^iZimS-Gad^TEOo494(hUY(b{l9komEbl%Zf209&fNcL`yg%S`<(1QbMG&nWn0TW z`4?z3$@a&7ot_e&L~KCCh8B(F|AXc1O=oS{M|;eAYeRn{e@WvsKA z?3P+E7#f}pcy)+tT084x@2@VQ^S0!@wo3KnUp%F`>DkTGD;aJErAtnjb!p{$m3GeC z6=(nXUA?fTRI0&dPeAB(2BVIeO}%SoEN1MStmAOfvSFKU@N1PFORTMV9#ERRfzlkk~wXY1W(|CVR2xHRwZ)lyT*Ti*L#?n-!#t23+m-<^jb1%BYS9~)(HL^W*Eqkiw`g_KOZi1_9 zUe*4UTb|ie_d>!bf$2iJ@ABpngVL7ibJCA6a@?MBO>JuP^gk}azY1g~Id@%=_cfKz z_~jG*wX#%WqR@{W5Qyh?jBDe1FD_*Vm0t$@cIEj);@xx4mjx43!QY zy1}-tx3e{r;b5#XgKqMY7-eR6?*8Y~`OdG8l4Q*aUvTn)utOL56CF*swH*9WkH0uZ!WDr~E z?Vz2Q_4Li#y>e2=AK36dZuMgDmm;4I|Yv2zWkV@O+s^Ce53&9?%j1#!Ubh2$7I_iu1hl~ zCz-jKs4#q;yqLlHgu=;Vf^pRXA8s`_q>2kNCFC-`xZdu=AS7JH_%_=%)%W(B2dnZp zO;3cYGM~zjT6bsuxrWjiv8T`cmJr?3l^FZ?_v1b5TP~aJUH$idzvM%=oo_0>?_2uk zY|;M8zk1Aeyus2J->?<>{eHi%qRh7VcJ=qCKOdjUdwjTPVbs+-74J4r>d#JzI=!!G z{pk&6hxVM`ZJ+&kR&DLNdq>Ya-Dc=;yeH?#n(M2UuGzTM=2u{k;N5K!qGs#TQW9;f zx8L}tX6&6`ZOCzbG?6CeK;JBsZ7M#-cN`Zez!ECNG7K$&((Zo_L&fU4(7+)26~LJvS#5 zeQ8M*|NP^&snNF6cNhhZ9+?$%YNbS<`eBO`a~8C$9qCRBB8Ab1}Y{e9uub>xyL4n!75# z8&@&MZfzAZ7MsYqx{SNcU=DxXk+e4(vbI@7$EhX!n&9~IzIDB@{pTOM85*X~4vr9h zu=uEijNh(oiNg}k4W@#}-%6ch={a~X;D~@!Vx<4CR9$W_wz;6;mwh)DEy!iKk4fsC10fUk_P^`?WOww0UGSIPD(YdL?YrL|RlI&Ouw}F0Ux$+~ zV=ju%mvfboKe|P|>xSB~=&RY>0^X0sWe;u=c3-IOzUa28#o_h| zyY+=VD_;71mug=VEPrg#=c{|0UzzxY30|A_iPQ0v&r%Dex!ZCX_g-{)ZqNGv(^=aq zKK9n-NtXGlbN;=(Bzh-Ze!Ksdxw~&Yy<2^FcYM|St$v;F^X8uTQ+F@;zR>f1+4Eh_ z*UtZbNA%k=zisRK@4mdX_O$M=$uec% zTimlamtOVABZT3xl(?~~?3_KPm+TNVS=Uf<^?79U#u@6ib6+t_PnU^Q`%=-<;JM~n zRD2Ns$(O0x&*!#HG7ivw8N20FSL}={Ti1m2uP7EXPB+-QPucBM!jmKE9KYS_B!dk_u9;Dmw(;)wXJyH?PE1-AICar+SwYfJMD1)YJb|HEWP*IuSH7> zly}7)yST~X-pcdGlSO{BY&<`~w9jIl=I5;onY`qWJ&L&!aq;}MssP>97rkwD#Cx`- z@-QzoWq-PjyCaz6J!`=^w*$`?t)KdBxz#<3?)v$)hnC2wzwX+7cz>77m$jf|Yv*4i zf8bB=*X*jkH0G$i)6>-?x(o#VE`JrlTR6`;v|Ka2*pT`BRKeIeHC!8Z8-g}ZdNVrb zJcyJyEB$!m7HOR~4Dz~RW!;;f3Gs3||BNi|yw(#jLymtow@r?ofa8rLtlKs=_ltS& zKH9mvt>16Xl7J)4-bB5y;9?Y5203p>tzd7-f8rQNBP-3#Q-vHVC#>`ah3 zEY1C#DN1gmY;?>|Q7iKWjqRO0Nhgz4n6s5+m}Dw{TvTj&Fl)k_%`Kd=%%={nUuh?~ zAZ1mIvu5$#EYa1omYJD{ZoW{{!LxzYq0_P_k>kw_P6Y`Sy;%mg?C-{u{%7jBQT8~z zw>SOR2jS!-?n8nNr_-KpKXz2z4&Vt#%oI^}2fv19vlVrsgh{(Vk+x&Q859{HP>KfHbY`04lkRln*!@2~s7 zKdoQv`FdBgf79>%xb|zy?z+vn$JD!B_is~clQ{eBM4p}0{bK!}O%)s8+&%nECRgT9 z_HlhChCTOe^P`N--0vQfnVa)wV`TpS_V@dY?K0;df1k6@r+($%#m^FpFS?k0TONKt zm0^#8?c5#Nk55cCK6>E7#O2Am`xri)yEwm^0krHRWO~J)$*<>cvakN~oJ(Z=!Syw# zmop{V)|oOVzZa_fH`~Q@u_YJZG5!be0H^SqS1Wj3)8Lt zi4?>!Uzlnc@LF?OcJ3}arU>VPAfA=8ch$Z6w9vMG_otZcjNQ9WyT5P0x%Z~W?9;LD zeYe#y9Jv3}w)@Jwt-j&8GZ;R|tz#-+|A~GEdwUKr1}z9xY*-|D3b0{%5)J zho9_=mT!5_I`93&Xz_KT-Mf4~*?*Njb70!PH}VlDl#V-!>4+YE-Fq~BuLFnXAE`|O zkq%;R`OFpSM}I1EMgNpMVQ|82LM8Ko>j`f-mHz)f@NhT7Jmwn?5tnpXZq!Y@_f_>o zQT~ybz0S*i>0c4m36>ne8#XT69i^YXATPA# zS6ph)IiIJq_6c(ATXJ{{X9{0RTb5j4#H5uOZl8={?uO-RsRgVRyr2;{bzkJ}Q>9aGU0)KLHU09ZMUGV~iZOMiJ9vZu!03=kZ%)>8I7-9F}BWGBaY{^ZeKMtL10!=Xji{yf^XQN$Y@L z&S@d*f3d69av3jhn;5fKSv>RaI<0=G^-R^KcE10Y+r(tlE+$0ztr zEWYp2^UCn9v9G6n|A}3~th3v5HILu;Z+!80&6yAK$ z+|4RCx97*D#k_jg`SjO`-{4DZyveU5-+598&dBt*P@R-^eHoTA8)!`WPkdFTbMUsCVWIh*UG)pin$X8yW($2OkW41>7U&e@ho?9s1{<3&HQNzP}C;x=QnGM4H$6 z>aTgZ+`Xs!bw{p#@`ob9jc>RlZnGbHx^(7}%MuH6Sv=&DnL5i49oYPqv-jzt4U-RS zbLUPpDGrnL4v;J`lv1zc66{!fi=pKD8wjea)0ZbJIinWrv@q|KWg zdgfSyOM~~#jb@UYCre0Y&DeRRcJr6mQ~O`&r@v4bo<7Z1*CSpAQqSN38xV~yTyyGEO% zoG*XhzW$-6w$0q%?$B%X^98m#7b7lywiGV7vo5j6$6}gN9G`bf#>L-a>t**(`7Oe& z+{c@7*HlURB)dhe|EovmU)DVVje!46eW#+lDaT{eM6>RFVRI7%B+i|(5L(=m+WWP@ z?7$I@q8>%F4Jv&GV(Zv-B~LFq&aXF*K|p=+HI^-PBGf6!FRB({ z%@gcY)^}REyy->m$&>f~ZeA&vf zzMR1v6mP0K-{oD_>iOw6!`JQJwDEJ)rH4NC;kkw{b|zJ}ed#~7Gq~qbM)Bp-GZ!#y zKl*Ul9KkN;3tz(yYfY&>-_D!%QySF-DYrb zF+O!_MYiSq{nye>tL&n-%ZirPEczLwK3C{}NO8B2N;h663H*IKNO&A*zs^2+;V)9sYLie3E9dSV^J*TgBmu9db<5ncXAseSv( zd!gmBtG_*)BsX92twz-ov-C?d*_KY7Lm3({FeD;~k zgYBQMd0Kw*T=AK%l#>o(+KVnKM06zk`Zg=NHMk~lyUXcvZtP*Y;G1Mrt}?kG*`_Y* zCv!}X`Ua5;w*&>*dL>y4-sxSG=+AxgK;yxdoyRuDF1KJ^vTsxLo{M&e4}W8tp4i&` zcH@iY$+oi}tDlV1}UD+y!N64#_q))&`#Q z!qb!;DpeZH*x%mc^%?v2{BZED;&Zyk+Td2YzM_efvzWDyPy|yZtk7w|VYAYVkuatn_RIZ~Xt$`%Bsk7vImZcwYGA{%LdGW7;ltJUcLmfiF?Ps1-#De*AkGlme8zb~ro%So50@G4u{`FqC}WuC zBypi$?!aq-fZwJpJ#|cx3j%j-Yum7r{luX)_d+y2g{(JBVVwRVPW{y@+wK&--NBdM zEPZW$&9!vni|>jF`@2dthD)*46TF=51Z%(B?9F`Z z5xUR##)Q>6A@BDTT17Fo=C9Fh-1L0Lb8gj~x_J{DA4)2mx$5b>LT>9*|MH_&aK(a2gjFVg*2~?mH=SQ@D!RffYv$5C zOGf+UMrJFEvM$&Jyo!|Nz4Fv9(N+EA{$;k?J6WczZTwbRnVPUquY1+DX`dHYa;f^y z%#FRRtZ2OZ`dhtr_PjZVKCG!_4wXx*5?L$0cK^=g)<4oq{ja^bDbuaodgsKd>)Dk@ zuiPuLzwprJ6sPFR3vo+tZ&5wBtNzKKYfpo&I@-<)ER8>H^?vc?bhelM0v9TFO`ofN zM5wHY_i61<*pYoQuVGgB69a~(M@J(}LJmkW*wCsfAl|5}7 z7lqpbZFWzJ?s#O!^P!H#{m|mzk2}`uOeizyXg+w&{N)3SM~A2D+U<%+_@F1Lz>?#> z^0n{#4-ZeP+ErBQxUs$EFnE}>`9PV#f$G;apP2OP_nPl`7u|C&>1N-CwvBSLYb;_M@1gInz6a^vFS0)8;BCkhp52_P&VIdj^5Iv{#l>E~71?3+al-mo zoxgH!3M|cU9Zv3GPFgdOM_FXbR7tbREgEdfO#759j_=sB>Bg59->-E|63Zi)V{(N$ zv}AW^Yn+lWypSPu!JF}Al|z2dk&SPj?DlOFIg{if!KAv3$xy>4vM_1m)0`znD#^~K zLXo;kb3_%UnI6cJWX;HXYTNB65x90Q=Om+$8%~P@4d&O}dSdQ&-#diIwdn3r&Fg8( zf~mW--!4eAU(b8%S!sp5^3L#ywQM!J*S+QXtko88di%1TTK}iHL3hf(&)<14{_pQ~ zTizP8++{tm=Kb{r7w>+&_D1OU{rKkh-;bNtKYRB5c8|g9_q$JJ%dPX1R$V+Te8r>l zA$EKUo9go7{C>Ymi=X{#3ERT?F7JNdip}f|Joct;&ZaXK+6TfF44upm9sBe^rQw9i zwDiJHg31@R9(cO-;5Ks$TfT}CEuNIW4i*1rO1zO|imMjbaL-6@9dDERo*i2vwg~F$ z@od|BM$v9#d5c5Ftd7O0M;>qsSg<_E(mn9a@WhRM8OqnBn|#mMojG}-FU77z?8dUx zJ}VB%y@HQ(wTc%Q?K1WIw61u*g~CotwjWz`&!naX{n@tRqQ>GaOq1r`wUs-2J5I8` z?D~eL^ILh(%w7|>x>xzL*8B;L&u>-~iXG==z7Z~A|Ga4a%5?GUU|YWH@8|yK3yes- zlE_;eq@ucDn^c(lw4e3XCt6lNJSr);I5&m&A+ym5$D1GL=&~)2JuR_kj}43AmDv2H zz1#e*ahu;LTkte)#$=y0GT#@h(X1_E3AASR+&AY)<)plitD023a^A3=?AUTfv7zaF z{s8!YCftOc2zLcBarTvM*ZPdMtGF$Ao!H6# zP-w2Sz)T^DDG5IP2T%WwvR?K_S-J$YS@Y+|$+c_`r!k!{S|oV)t-zC-)f?rym$`R{ zIg4DV=wM4O;kbCS=i3_#H}V%=T6=LP<6}OvFUP8MX6rhMq^&dT$g6)?l~da; zu(oIFG38B;EhifmtgM^yv?GztZn@X@_%G$V*tH*;%#%0!ytAuGq@1yfMI@}Dw9@{K zX8-F38|g{O`n~-OJGQu6MR73{NT@b#^VHd@ay~ZSCv9OU!`xR)x7_CC&uQ3u#WD8r z5zl+u#A^>87VclHn!H!{fl)G-cW%cfcN@E|7gFbbZ@lVM!ar;IL1DjJGa@omF1vGk-c^&@n42pvA30mJd#z8_-Xr_|yuW<-{Nw$5*LdBitoeTR z`F-^}`xMHT7S8vpk$a!}bDzKEo>es$OPSYC`uF=wYwfOD%ga+X&RJb>?bNP6S-uwg zjVdanHfCJ5j1*b+vChD9UAK1ga{b&iiSq~UUfKWqo{GS(SG$f#rc6HfiGguZ_Ky`+ zhCa95FUDV7a=udkdEf1WDYeU*`mWwoX3mf^1j%#Jl(!o_3UXs*;yXD<|J=e&f?KtuzSLsa((M_#V(W2d5M;+-ESJF zE1oRD+xaf$oY_R##MS>IZhLfm3V*$9EAQ2+LqBhR+taEU{7diRU*!eA4sTi&$evL= zvtRggv3}{Ybybz3Yu$fN7GC+&=9JEP{*#tFH#01J5%6_yn}p%4HyyGQs>1fJ<3F%X zJ;K{E|IDRtW_vx)-FtfP>oJvfo<}>j7xpA>*!lPP6uwmF>)+}&b!|BLvFhwDyC07P z?2KD_VO6`ZAi{&anGfSH%Mt2&& zE4}pnbb`)-M}fy_KVk4+R}KR-T|_Q+WR4j>^vL z{VoaJ$=i=z`l5N4txb|~5wqdMi!O}orKLBPL{FI7*}a%qDZ!$vHH+bvhFQZjr?%*{ z$@0vJYU}w{PHo*cZswWoY+IN;9EcOXLWM$?9bWvm?MB`DR!8s{NOO*T)I;$-k=Ba(=H<`u@qQNL_i~ z@ENu1KZi(fyMF%s=}dW#U3vO@9!K3>mh<(x;|A~5uQszSyk5^07FhO~FW9Z(FZT?l z%UkzeUz7jY=GxEor_18lr0QkcpRHzFuECal-TGN>#QN*COV3@Gv6%9B=GJ6h{rF`) zFG}xTiSC|T`qIUIPhe8S0k?gy+VVj9kzZ^+>`;%BsBJHA~=$&c&PW{xA)nsb3>duwSwb$dn2kyF(ef8#NuCB8W4wuYd^~Fax zCU*TlHJ^i`4Uz8)eH=wgV%APnU(x?7#mC=AL?CCv&4ZqoGYlBZpB1$|@orpfldN>^ z=c89gt}K~6MN59ltXQ_MVITcwtQKvsQfPJ+wek6EH0v$9lm07xZU$bi)t1wDy#BQE z;FX_yr)oQ_`o`E`y}Z{Fyt_7er0iASujv#i8N*!X>)L1E=q{d;df- zYgLi|Z}Y`ZSEpuhztY>zyz0~xuYE={EU#+2GG4n^@F$@8>FRBBW-e8%Joj?l_qkEa zV{|@#*1Vs?b*fard-t3<%fg=?vRT``Ymd?E?RJY2@0#q{_VSM1rTo+d=dS7IMa7lQ zKb?7DSLe$7w^G7e?;g#p>$s%*HNMDMJ;*lP@S669y7bwzw|>84_cf9?+1J>2noxh|q|Haac{gbk@_#EzVeYUzO zGX2?cuie-FNoyC>@H$*K^X6NyP0F~}Cfhn?xkw7Dh1}%2^Ea~oTrCQyZQPbA>tDn4 zQa!;+;(?y3wjBoZr;lnQ;e0a3$@ayzw8ym@jJraVUP z4=ZjyPPzH`=2M~9`vf09yZG?wSE25*7Gp-cSv*cgJUUS)U#DeUxFKk`?ea_It%|lO z7tCCv^g@LvG)MaNi#_}7e>=FqUg%zZ+UJLxDt>}505VDt|-vS*&@HMKyt}CxhK7X$^4%EQ>GW6oL%#3 z(rVV^ogEgDt}^SB(y}f%|2ih>%&X*| zAn~SaPW7SFy^Z?~HiRA6o%Q9Z&|$w02Dj#m?l$(@Ilt(AzVK8n;pWklH^(JcNGm1Y zm7deu(K_{T?aIrSeqZ&N8+q*iHBY z>-Nr`hpKZn?Yev1A<|X$+zaEZClS_-Gu|2$-+gMB{*8}$=8gAIZRPBm7`IDK@_~bb^4AxarINo)i8#HqH$pvCYUU@~Ef3Ne(s2_8^8FRGd>(UX>1b{+c5LOEy3iHjJq>#lvuf#-RP4wOKv|_Rg!n$ z<|Cm-T_)+6ui6&c2mBa!iZ6S_ljZXu=w^H{+eMHgetw*=%l`cLt!+xjE_4M47+gEd zRGYD}z}Ck&p@%R0uh%hwt`9H22kv%z?Y5`xkIe0jhp%opbalfaiI_A-Zcc}Hiw&mq zI?l^oXQ5-m*_Yfofzlha8TPI@p1d>eZAHlc-P1*DAFU|Z{_g2!k-Mv-g6DK! zYuH|8FUYp4WZTz?eO58vkIg2?6c?2#d8zchu1dY(`@7_(I_HV?`KR_BmPjePwE1zz z<>b^2rW~D-(-j`*C9@>#i&`QpsBA5Ab?=O=0_^3=536zw%qBfwCdd|5>f@zRC6sni zQfIfu?|(=7ZtqyM`r7wYh6tZZ@82G!YHIEVt-L#~X^YN{%Vak%2`-&`w(fp-*~^!& z%(nacFZ^xIYME70TX%o+ZyD`7?{bRk_!vp3gVw-MnOH&3eh!=kI4O ztNbok5qJFi#MoW`W793RU%hIh|NG1J-RsVu{e^3>FU@{8`MlHdKZhsHuFe0x zb@q8t_9d(48(HN^A6ULI{bEtkERDy%-Su_v)j!)H%ObER%D}F|t)edP<3sLl0gm;y z92IXJ4=fYE`)-+fO#afxI=efzG3s4E>6md?l4Fh4l>}Cecb6m97k4b%y-u6;{j1W_ z4=aB;T-~{Kqs6*w#^)p^7l$bGg|)Uyt$ed3=SkJ{h9^;Z9#2z!lQxvG9$1%}@9|8* z_IPmSoEMy(F6+gZn0*;nU$=@+_uhHstHv%X%gx^$4_y8`LuRvz?Pja5D^8!D^@t<2 zy!uxC`j(x0H?No%@qEci8&~si+nBq%E%iPA?cUb2clWWV2KAq(o=XefT&NcDD)@P5 zX#wAfTaI&&tyo-|-gtWJo{}$*CWPEyuJh5(aNg=XQGs@gU4Dja66~k^s^?BMZMM2S z_r*a;3AR(`gq4;Xr}#&zbH9iwpTvY}nu_}8J1-aDs1isYBbKRl89z~i0%nj382HXam^*2&R7;cortMDB)7(K5$P zr5+a=$|birpVyVCoU^9;e}Mn|89Pg^YI z3|e;xEwkCXvQI!&t}o=l(IC%+Rj)Se>obYGD&R9YUvSE;So@`?l-YUCJURI({A2-p z^ZJGZM`{kbNE@76)0=K!!F160@~j!#Ew3J0z3-WWev`TUq^HWy|D4};x5Dj#yMaaH zL1m>n9w%?6_1hJ0Y*`Q`cth$4o5SP9fAf#OxW{@};t?O;G3(p)zy0@r`l9`;dEMLN zZMHvBs%>Yu_HeG)~uh>gkrz$SAdUE23`a7%djVyNT40Cp5%iQ#hX;-zEl`~|h zdHf`nsiC-jO#&msg7<6o%lymvtomQO|Nn-4>$a|2Wc}$D%feMVITKY4SoM>|2 zQsDPPdcWtF{eSe87~U{mx^_B~VF63Xb(@z)*3W0&`?uBdK{;PY=jQv{JNNCcOOJI| z?R(r_DskrBdoTak_oWuWvFmw$6yJLNyLiFTKX*e~SJt2ZoSycbXNg}l$Ay^4v*7|Z zSB+wW8+QI%dGH&D;@y}<77h$cYOg&FZx(s=YbIld+Rv4zJq}-ArE9!9?0IqBemTxc z_lO5+(T`;lAHUhT%kNpCp+Vu2faTJk3wA8+l>?vny<8tW7#@^rbh1|P#`(}G3u7WL z#D}K6dAaLp5KEFS<0ju?4Y`VSm$ydPUUqbNw4Wo=qL$;qUXgQ2zZWvyysp9h+@ATv zdWUZk2UOo|V*DX%pnvdiFhjWJx_F;LeTANvf-e1muksj=F+DI_8vHU!-toZ8T(8&e zntS^L&4e$rPJF}otb3Crhwa{Jk4s)MA8MIey*xy{U`_TO+iJ#D*TR2>tgHLayS18Y zF~feVm|FX}1!ry^`hLoW*XH#1zVz&{SCw&}jAN!wKNj7*UsPnywRIQ$AFn<5=xecg z!{Qb5JpGm#EttLf*R1umE4#c!c~+H4eQIDUm zoiTHn^Y^n+?Obx~PwKufrObU(yK2t_w>9ctZ`}*LG@o(Ht?OHCGbNX7GUN1^BYFMm zr1+b6Uze@;$vxwh@+-R##>IiQ;mgHC4%`Vj-uWu>@2Z@uFKu^L2^;UcXqB<7wrXFw zvchXUqvo2d$A(uu(;C%N0=C=5H*d-We|#JdP`!Rri1FTxGxW%6Bb?$}|oC_dQ!bvre%%!Ig1) z%hI<+3>6yZGj5$^xU*#2^h3u^@%y|jIJD&Dx_9n{A|EQ>T>i1(oRUe5PU&iflHA2l zp445jTk};`Wlo`Ly|B92##P~S>v@jsJhJ9)M(rfWPZI)Hx^9WtB3HU5?}?yGK~G2A zD-9R7`@-9zo7FaY2FoP+y72S}C_D8uWD4F)kda)*X%Q}$nx$=Yv~UXJJwQjV?Dd%6bqzNU)pmD<1dlG;P>a*w%2vYtP?|O$Xa=as{l1dfmt6FwD%>#O z?%escr*HgjV7FWO@$I@l(>Lv%*X*#Z>L-)`{!y>}-|zJ8X>9KqpQle2<>i0fY&gv@{{89A4c^RM zTa!4RHa8sq?byRndagihrf<}Nrw6`9oy&4&+1A`pT)HOwn*f7>kAzL?F@f~dGooRe zXGC7jG5Qy$e%Lj;f%~vR#1Dsx3aJaGg8F*7e$5OgId3-}$Pp^;JU27xL+MsSg|3qa z;(A`TZ#0<7JMV(ol(|c{_(^72ScW9V?sxuY1|vU-P@N_{#m?yWHiLzvsMl>Bp;|&nBNZXPEqH@gA33Mw^-&Z>`uJw);oG zHEjpR{B-8?8q0rhIhFg#@SXYHz~A~+M&Lu`iaGCM*7B~qb|_C+$lG`Rt$9pWquFh2 zx(oPr+*4W3sq^+^WMZZk+lI?lTitF&b})ROaxF8oGD9#^+G%f?_Jfa{4eaIzpO;3T ze!twP{Q6_(G>7#eTHDVq-~HsW!MlGu9{&SvvuUom_|&d#;&$8R=bKtO-5sa5Db3+E zP-!SmVs`FXT-NNWyk`IGjfXwUdlgM0OrwvmT#DHmZ4)*3@y}m8uM;_$78}a-$`;;P z`?02$Ez!E?$ETa^7O^o&H@|c`T0BT8nExXPWytYe?!bGJekVX2b56AHz#{0xhP zIWID@6>K@}_Z&3uDIRIDv7>XI(aYSMNj-kw_DsC+TkQH{BkSuD&4&e~1T6Y%&;9r! zDX^%qU#vNQgQT?qM}OG!ifwfb7p+~?V)(UljVN#GMeO&-9(*3}B@We#94Hn|cdeIJuVy)QVCS)ucHgp+S*E0BUD$ghvFAk& zD}&ni>2qI%&UAG*Sm#@GVrkFXPaC$L+__TszPo<)8i}KpFK&7scp0ekW=ZqW3*J(@ zj$GUQ#%2BL-=AHJ6qf&X&X!Pj7o2|mRD#y8Gq#-zx8Gs z&wO9~Zk*1tbzrLQx;IdyqwdQ2r zqNZ(tVPy}EY}znHo#(~Z1In*&Q7Ug=EQ=kq0$ zMN+)+kxkUGT+iYT2cN2}Y)0?k=kr!QmbG12_~^?;DcRYs@vEz1pIbEVnk&kFE9c3X z4TU|6U40tjnfXs86i@!7#J9!rY^ss}s=SEP{w2>(2Ci&m*my}o{bj-z=ZhO(|6E`t z!@Kaz=4;b_^=8(6S-4?+J4;Vq%*yz5#ud&IdY?U?T-s%qcYDsZozd^^7va(!7PGf{YU^dO00mMV~t``JbtWVWe_)@9SO*i+rhLPq)5k za5dLCm+aTCv`2l<9-+GhX#wpUCdJ2fE4Q6!Id(GgQ(E?slj%nFoq;lQUj6KuH!<5b z>;BfMo_-uHTmBp}m}XgScW>2W`AUDw=huzqTs!Ey_lMriaBJ za&O^e*uP1dXX8Qd`mXMRrehT{x3ky05$pYG&|&e&RAS2G+6Q`t*J2c#T=LR%o@iRME zGI}}AyYQd<&^1#p$>e<7zMmILJ{n5NNIqI$bmX^>2~&nc#>55hHBl|h;dN83ub;|$Jn`;^bn$D6g8yE8n(N8-@6%2Bay@&QQ(CrpnScm%aYGta0OkS67m17rIOodcOY8 zu{g2kvO3S7?woXgx6Azb%xg^l?ood8$Nzr#@y+jJcc0#}WN%;bzZ}^zzDZ##FR#g5 zDY?h=%%6me@OjS|D)z2h+|p+w)>Ir7TF>nxc`o}~aqsTF)p^oe6@TrKQ{v*T`nxjm zRmrROw_ZBcuJ=2f`*U5yJGInM#%Y`GY`wDnfQb2{%ljo8(kF=<|31r5Bp-OdYVY4{ zoBwl_tu`zI-JS{AgQ?=RcLvM5?FW82asL1GeiGBw_X1xJBr9laujRIiwa~fryg~C; z5$A)iU;f%Mhzo4kr8m!?@sCVHxx$$j(G1x$+73MAT97>B+wKP+nBK@M{Ma6JW1E*W zgG}>J4i~-!rYwOw+H~ek6IkzPR=aAu#{7HBJ@$2p+Rm@J%6+ejv9wt6%$#WlEPt=e z$yjE3_54Xs>AbFW%P)VHJYX5^9DM1(r<%29-Nj4{^F!5_ZnZsoeOZj{cI{rNI{6>7 zCaj&R{(iQ2{9id%rDHd3=RMn)_GI3MDVNV0t-3tr{@KfauJv4(RN+Z^_Wb0p5;^_w z^I?@|Uap#P_O*@1>cX^m_nqypb~QC`jWcSUnHKDLgVV;=-&-#{`qLS?4!I=^*{L<_ zZ#!y5U;9$Pc|JwuEdz^4*6H8HRmuXgEDL7;VtW;<56J5f0*K6&VChV}^D|+1_E`iz08FcekeVWFw+x*w2X$O6FFUgJnYhF$-XXr!m#^@Z@Zw|seOIZc@l#5sVRKfxJ325@iHxE z+38#UzO3GIcF8}%Z5rpqj)|CUwanIbmk*6yk=!-oR)Wj~S?-M3jOwe~Cfi?w0KwFS7UcIpS2Zd(h|ja7rTFuV`Ds0pQ ze+^i2%-F=GnfV0WV-M^qk1**e6k$GiI=A_rw24~6)f_`N_V?09IC}0eHPyUJFc;Q6nJkVH+Rj(m$Bc{1!q3U@n|dLbKdabVAkuCcaP4}SnzVy)IFyXdzdbt zUBmf4dD@(|n}7ReaqgKG>y|N*v1!AO9!H+1MSGW|`@E8Sm1}F1U|_pxCi4s@4K{wJ zl>V8edkPOMn#!|o`yshqvQH9ZHQ0o?nnWH?{vzk`%Z)Yd=aFNR-)XKmHS0*o?4GDw zZVj#B*^_y^k4S9Hp3Hdg*n(`y(|$c(zZ_33%9T*(K6Y`E@#I4njUHua=Ipln8UNvA z#zB?Co{X7O%MMH^Syec#Njm?UY|+j8%ULx8-qfvKd*$l!iNBjRWv}EF%QLpSQ~v+4 z#Qrx%3vNVSD=~hPTO_{X-L@|^w-lcKmT-JGDg5N&)mJ`?$Hpy<*~jrT@VP6`yu!mB zJEuu4S#{3dCrW6g|EyV!mYYijHZAU(9?mxXx*HEGr$v+@Tj8m`>EdG3vzwRe%dETB z;(C1M+&7P+ZXBB;X?5(0WnEfKE=Pw-^5=_2NjoPP{wT_Qpqwbf_?*YCD$`J^Oe>Iq2yyy@zM5=9w(h zA2JNv_O8h<(Ys}ub~ZInAh#pY$I;p+F0KA ziykuVYulFDFf)PofX?gXOeqU;IwXXpdrdFZUF~c#TA4k2qZ?1qZ^vt%r*?@icI4oZ zKjKijH6dp0QeN)EyHeT|GfSskp8usgQDsKT73o*1+o!Rfx)nG#;DnWzQ^expqDb}B z=6eAWrLQ)veg5GD%i*IB`y@{K%nxk%_3zj3iq9|lqxc%WH_JRxm~XyQ|3?ke7sgb# z2Pf3lDk@2JG%ny5o6F6Sb8(g+_w~b){7j3Bnx|F#Wkk3i@C9pZga%bji`r=x%2hTxf&b&>^F@*em&_~g9Y6qghs{3&WeBa0t@ z!IJAcPbojvOTGlMJU-^)*TwyM)&jg2)edkkER@TYx%iuHBCCPjFSUN&a}_dMrPmy1 zt-AkcllZb_=Xg)fY;)`ovx~A2K9FNv{8K>c;!{^{xkiCjQQHlo$9&8b{LZ{wu;<#e z5_N-jeOEum{(7`~PS2ff+y9%mL|U0g8%OTvzPz33g~YaW3Fnz#cZ+4ayszGC>RGP9 zV4vNU7a3_c`%7P)fWfYYQ=IKRsGkvl7jBO&lc+$@)qyX5L=e@ zJVM50d(YbmGWE@yiZd80D#SkAVg{{zxh#AwTKTtR^tq&D5n+buHx4^b*%&R;tMXiF z8VSk>uReVQZzuNOf98;bz6qs1@ z;_6H#Wy|=dEKd5LdtUA6)hv}`QagYCc1)^o;bo4G({{ezS9E<&F!TEN;`67h^?!cU zukriKKXMukB@GW&Z@zU*^!UTot!sGQ_)YxgsJz&g_MB-)HXkc)Mry50}dh8$=R44m>rpJbI-# zV)l&FrgPHS5BDs6dGVIu>>CG*j!e9pkZS(oO+)M3ia`JZaIrsjykm zB|9P3Xid=NP~G@>f7kt3s#(ag)JtPdaH&klK4W2xqK9IuE01wpb`JfS%&=gF&C$;1 z4hI@I{scZ}>%MM7-vL?IvfKM)_1E=PCC`^KdGO$Dfmit1`K_DJs+HB9 zj84{^wf6O_r_+BeuK%z9XMfnm3qOi%?tWXi^BCv0`2U;Be|~&)=imJQPwN*rL@*pM z_q+F0K4<;~0qMS+N7KdRkMaLHUMIY(!fswcHk(!H^)l(`Y|kl%eNHkrkJ@c}nBM=- z=1;o)|L;HE*S+5U!t?hW(CTX5eadyA_dehL|6+TY{-3(7tA5(=V0>`ZK(IbQ?&1EA zvk$EQ!*==h{$r9Vd?prE4-QOxAjSG}m0;fA+W6BsFBpTfmo zYADq5ONAf}=W5YYccixxF9-U0r3^u5W%v&q2_bGH*{kxf&vDtB60vAo{Q-5sI z=Vh&UefsH)dDC>64o#YONNE4pr<#-RH@>*>aQnWRBzOChp7)l|VR)hbvr?q?BLhR- ztQ+UOcd8%w^S4W{gCWvGgw`?$H_+xrx z_xbe)^1}?Sp60mS{@@qe0nwy|;OE5gM zZR0(l6#Lph=g$`T7x_!F`6TaFxn!T6y!Fc3YfD^rT>QIp!{ogOI07ui?R~c_erlDg z$H)3f?DZj@7jvQ)i>A(A_tw2*(j%A031?$#j0|p>Pfa*~#wMmIHdxqq?IHKq;eVr= zR*L?KoHNZJnc;j^4JQkin;ZAEu2xNn(8uR}ZgPgqmRy@V@&2M7c851x-pMo0;}&}@ zWH9@+!rY*j#-}3IJiN*j*Z5tA@twoQgze`TN+y4b;r**zrqGuV+~~!S@kQW*>2lS5 zO$l4|mww8c6ZP%VM5mLpe8pxSocra;S%!tJ8=Sr~@33Wlce=J~T4dwBUGFu1z2uNt z({MZUzt@5LZz>p^tuv!!f_`$JOf=zN`F=`msN<6mA5-N7t4miFJ$9OZ`K8Bc;qDzP zUwqrPLOlA))@kw*b2mKMqb24?fPjGpqYvov2h4(6styP)_+{FxpObWxzEK%W!C1- zZTynyXDoWdL{nbySVd)D^_o|FA;vW(OfqRs(<9EtraExE*xew(93#5%HuLoB2hxt; zcq1vuc&#EPPdq}`YRkO`dsnlWThBbMVOSB#b)%GT>f6MglL>QcpKo}p6=KGCeCC5S z?oVyD<+i@AZ9O5jdY5ZLb8h&;&tm6{YF0^|FM6cYCdH=6_th{};zHKBbxv^)9PFyE z9#vcrTR&UUd4F?7AB*Ne*S+dF-#^{_-MBFJvI0{;!>*F4OM|ERwzc#ye#zC{;LV`h zd0&CWaE$>=PT3>YINM9i4x2j^I9{)j;>fT%{LuQrq93(4wkAa^%GoS>`tLpN6B9im z&gO4pyS>+7!n)}_n?sXUZalE=DT|ZJ8mWZ4M{;yF$8|X_+jIzAP$|-|((o_50iH#csRhm)I{Fp+oV+oEzVg zOm2KV6eOm+>9F8?&g;?5%fk<8J!4MXE{n>(%Y zb?TAF?2L8-_o~whrb@VKoxY)VO(38IO(w=V%6%2Ym2j1crE@n zrTorH{i7=y#2aR~yRA#wW7)HI=TEQK?#ElV6>_x9m{+V?VQXuCUDQk9xBuc56AdS9 zNwhzjYI)Mr@6%=d?MzqHHg7l+Z}?hh%Fi0PJ8mCx5+|Gf*>o%Uq1Bg#PV%y0SLL2} z_pV{~bx5tgvhDbxQUlHl|33Ya)cgMYMj3BSiGj$**Wx=O?j&5+z5M&)g0I?N778`H zz25kGHjlw}k-~j9QVe#_ePX&v^4|6bg5AG8{fZ{d_cau0EwvH)_2AM!&uianw`>sE zP$28Hou%<%bMvMi%h!%aI4&;wYFbvOn4KlPVNH|)$L@UxOVt;AIaOsKJdJb4zW3r0 z*R2h_Z`p>wXkxf)yt>k=Pmq0;Sk{AeZr2i?d|)tmek9Yc?vla-30M6EJu@5Ld|WHI zApW=-^WrsP1HXOXvLl;LoO|_pI5wcCUZ;W`^8X*V5(s%b4xweXE_PeOc$d?2ME% zEpsn_^xMz>bM`!6nbX%lHu-%1Sa?ZUcJlYzcJifvUS2h__IuXwa_8L2JL@d{;hN{7? zIqw6lnq_`1+Ujtd-)hF1)5?|8L#8$qT)n?b@j;C$-}-9(>K3cB#~*1(RXknVa9zHg zMQZzty-eFVMJ?8AZdvnahsvQ@iTA?iR>T^vm{!i~9J#c;@-3nlvx;Lh_>{4iWD*bGldAEh$bZ&075Y{4Bp7 zmZmxE(v!BH&C=|>_q}tYT#;F9_#B7Vm##nUaX5FTRv{)|XII>>`Bu5tjY9G+Ft28g zm3n6YhgD|?T%Pz&UcPw%^kV)yyjb9IxcqDH8C6(WMtzlt=L<| zAH%u$=Pj;|yAwBTeqYhZ(LAf_#*s(&j!Ct(%)F~~DCo>DNq5FGOg7tP5(JN|naJBS zwbhfQvFF7UN6+@$AX)7{lO~?c-8{J}e9!SUb4vSsta@$EpL`i>w)pu&9^2WP+A8AC zRt%R8@onVr4iHN^WM^v8nBZ7oP~mW-pP{1fiC$AGdeQ zn=N!pkBhZgxcsg&n}B@i^o(=6mepOUzh(L__{fikmHU5QEXseJf91dJ?)a}?7QYUE z^Z()Xf3LsYulaBMulHGO-R8>aaVzIPI{U1N;lO5IhCkWe>i_;4NG?{g7s%2cfR^||LN^ResyV-B;tF^^(9d02bCNyY2+4gU3Ur`Z{fI7@P*#{EBP zuYSj7@|S%dZfhKxQhB*3qh9y$MU6kV?<>aGvmS~U`uFYsvNg|zYS!JqdSWM!@sxU* zddo#3+ZP|ZQ@JztNab`fhu1lJw#Q0Rcs^=w_!%MfbhFg;EpNE2;vG0lvNeu*?lTuK zI$OHy{*wJt&h?=TyO_jJZLwXVuf21{H^sO2kNTLeYTj8SexNgO=jk%d%lhjxrTri8 zUcK-5<4TRi(^93xjIZ-7v7hp{n=vJw$M|LMqnSqYAHTCJ1toGmOU4WSpNiEvcl;Gx z`P*KuNZMlWj^*7Ru5W$CJ5AZH72Mr)R@Y9n;a@4o?w##tbkiloqD)!l{4;BicaS(4 z&-lU0!lj_2_)E{QQTFW&aJ@|X4D2b>+Rq`Qf*TIs5;m+nl5I);O}R3+Vow|l!Oz46Sl56K4)3m zOon@+6Xr~w`9@absHd1gH_MZ2CB9xx?e0z%DFW(=47$sMMS~q3-f*$;FFLEwc%Y|n zm#VW_a)ZP|BK(Lpbtah{&6=mvI=^}8R%6=lop z-SRY}=JEu-<@*--Tw45Z;e%MO1NX12J0q}Q=eO0LHtWbA`?~P2Pl$N?<8>)k@}1ji zUsba&csV8f@e+TT7cvbW?*;ze@-5vy=KT83q`VWQvrbKx<#_V{*dji$qFs|~AD@`% zFzdO}^0F%*7e*b8SQ6Ri%#-ZZc`Igbt7ude@|%#_dEkel+3 z!T;ICMfI;X-P~H^0Iez@$6??HD+&`&93}az-*GZR^yk#73phN+qh*PxT0WW(3hahaJa+H@cIHK z;e_6HPR6y{H~8IJv`Ru-`oh;1^>98#mo>A+>oQpZRugW13j=|KVoSbJKLSgaw>b<^EJ_|5R`b{(7U#)JmW0 zOY7T%Ja2w`@v!(@a(EuTRpQ*y>KB$*ChwB+GUg~e=KIr7t#t1?wz^<}DjmKv{U^V~ zz0XX!@gP_xNn_F@-v?DnG8M7rZU;ioocwX#^W>EbeU=Al+7FKGN-E);@J@L1il&cO zlx>`OI7Jm!uGcmdQsl^}nLOikYa)Yznv%*l7Q-aLgxZwZlI+(`D;!%j@4?e1ZjZ+r^YdXIvdR~E+a z>u-#zJNwzg&9EZcmn2@%@pA%8`!p`Ic|KebURcZr*J2|Ce|7 z?70Tb49t&r7NRLf@ZhW*fpJ&aDYNwms3uggf!h#f=NzKeKd>PnJmcHjJ4qHJ$(b z^n|o?Z^PRxB_2=McG)EFwG`K!{}TNE43F;~J8;Wo@kaA1`NRb8Q`bxOhOUre$b4_N z)>kRG%wWlR%?c%H4X0nxw@-fEw>;;^D`zR|OzAhw4xO%h-#@*%O6Z$fwxr#RoC_;n zt~xk>&2u(&o`yA*d!`$%%w7<%=K2=7DU6<{ts9Ej(p_Cnu&ubqefr#;J4@Wwo?(p^ zP+#mTkW=(Qp?LP1_M+$qANEEctDZe2d++Thi;WoOPwxL*{YFLI^5psTciMCPdKFW7 zJ$}xT3b4{(yUm0&dH#u3}d@_A{ybRMn4+i|*>L4Q?yDFsC!c z+1K+={Ti`@uX=yO!j5y{H@@rMm96XxLS`*HzlT#ILI!D@%-FZ?N0J z64t-MhhJVcOM8v=rnJ3}S;5Vj<$fjS4B8SSpJ}qCUJH|tP12ffc`>s81Y7qi=iKTy zwY=%Jdb6Y>gfFy7+3hf~XR_mZT$yY8>%oTC;)i(BY_5G3Yt)^=Ssf1=WLMm(<|Mmd zQljA-Ge(&=8t=1O{wXQk-7Rs>KC7UrW7Bv2uS^XMlNU{_-DLGC=qXWzvpcRDJ=;6g zxbxVG3sa}(R0q3jMjiWT`typF#_gXo_{zWh@rm~Py69=~=3g%)Yu|^=x1Qc^DZBKQ z@hQ{pch8@HDw=)9@{5k_&%5EveqFv@Qd<0LPx8;bx%aKZkLz!mZ@cWit=jjCq4(U~ z(#&UE_LbdMShua?am3v}OTOQfZ=LsT-^+Vt`Rm@lnB%#4Lvq>YP5Y-k;U%5tRlV0faQ{5$P%bxd%t(yGk z3!ef5)2-Bwe_BqDF4nxNT)J#|pPv%5xi$0cqJ7(QQr>UAd)m4=@|vr*O zr1tX#KW&rRErV{mf8JHneDAW#+?n4$ny;eEz*O!$KLQZ|3cz|uuT#7Uk?2elAf$KnRg6{Qin@<)teA~EeTA`rw zh6%Y9*VtEI5nWu?Bf#sV!Z?3=R7Vrclq<&+sh8|zn)tZ|5M@p@yTsx-)9; zZeQ9_yT;Z35Fd9*!Lh}>rb-;Wua5-EGi6;)Z(r1=v@1fffJL~m^TEkQ?ascoJjZ43 z1>92K+-SJzUDwPA_D{B48TVCU^Hd@~2c{T?>WPWwWd2cF^hn?7%%i1`o_1d@7ZyL& zab+2oOS;_bT(M_wZkEK%_w}81%atcm(k02`b?^^a4qj$)g*6T(jz>g|-_CrwSKzF5 z%8veve-^xb{k|f9``JyVweR=ce)oENviJ0E*Z)Ec$0yGFzV`RF)rVIf*~6NA+K1nP zwc6yV&&n?{FYmry{WadczN+x^k2gP)Zks9ox$vQA_x5Q_rrU}qa!&tisXuGps^a?_ z7PI@5h}rJkp}K$9t>gYTOcASecb)0dj9XjKfb;`e@VXParxu-weR?Uetv$xXZk;zKj-%U z&{tyk^R@oR{44f1_PZ=^+H86&PX&c%GDp?Nz`Dkf4JRo{=eU6@@r>uZOE1}Ty(mepMkmKk3I9>=l>Pr z^*^bd&(+V5-g#oLeBI?oyX$jboaAqu{d`l+@6Gms0#%&zG+uk2e$l;yt!&ft_X7LA zU+*)U&Uf|Dr~SY3nf_g?kB|y@opE8uN)PWx_fFNcUS$>k-dGrW`oycUm31c<<%#Go zQO;jCH{j2_eL1JHgBQQI5Z=df+CP2T%kM%Z>r+=LR4iBJi##{Gq;~4RStaL1>z6)m z*;L2Ok|Ec%pYMPe^THKUm!>m(G2xb*k{J~qe4sK?ylc1Cd;izTQuF`ux&GMHe?uvz za{rn6b<-aIl30QbR%y$+GoX)ULaluC}nePGxKlGU^csD65E_s{iwcR~VW<$Hq zf~pfrxpU`vDtz73pe;T_YI&QcnA_5AmbRbjV)N2x1}~q!Kfhaf+0&rHuERZs$?tt^ zY+}0&jUK-f;E?QGa(;?+`mAVvv4@#OT>-n=v>%`GSiZYw+o>Yer(8=*cNTW;@@@R| z$}ex%^cj{~7pl(u3{%M2d48s*y6EdGM)8aHSRPQj_L(QjFRCx*zKx4*l(_%r+4B^Y z-}Z{kFJy>LaVTKx_Pcgma>d$)z`M_nDdwdLom+G4*78%=_j@u_u=_RSg?&q%wPd#A zMLEeCvwlnP|2%c(1{-rnxPL;B1gm}azBfS)J9pmes?(1H3gZ4*}6=Pj4g z<)){3+zyebY1cSVw@LlrBjn@lQl_x%Npr)22!?BmwuRjYvAJ+X_S|*ZZ*jjSZ|3V@ zVSn(4r{dEY)dd9yA~(CA=YCT)*IY6;KhXMI!`#x#kAE&}G!|qNoW1YZ*KLf=A7+Nn zPult+WAEYSr+h5OKA#nuy-n`R^{^@L8g<3=8U!w~n#-(lo^d|ZWg_2~dxshXgMP~~ zUtG~-XVmNP;oRe5D39rl35ffF` z*v!YN?d-$G^0!aufMA5)5sf7)Syj~9jF~us7hGSIWK$<0wAt#xftL#LJlQR&4$nSc zT5$YkNV==^bOpWIqf)h@3ugQ?{IYP8snRC{WxuC(4!3sqJbhPHr&av-&y2!HS56cf zOj+c4<7d+phZmVu$9YQo85>VO-K80~^z+Me_q88~et4ey(=Ke^O2^}S4;*zrWwf_` zcHqi?dcFG3d3=}mm@oeE?!@EcCpQ$V>-jEe{C%fgZhukSUjyE4V{j@|M=r_ zW%PUI6K+pjIA_ehr+ZClvzxX?G|$5$EBtv69C=Y-aOvI~o_Y5#hWcB*P$UxwJBgk+zj6>1DB*Gqa@ zPW-I9xt+tvoQL7p!gHnXv~GVdsCz8a@3r%D0#CxTi_sjM?MZ$Szwbx_E zVKe|S^ZvHkEqkANzmLwCX4(7EBVk%)+AI5$0?JAAZho|@?RzKr?zrO4 z{=X@k3qj)`DhzE~56oS&;OH9Fo`=i~mjYOtjVd;!Jev6X5W|~h=M*RLRWkk^Y|l9l zoMhM*+q`%E#&x`6+YWEbF4$>*`0>@^HLq;7UKie7xAC?3iroJ6-Q0Idyyxg|+mVs? zU@>cRg6|RSbpMM#wO%LudT?Qf*fb}-%}lo56Dl7c`Ebddv7_tNR~9Gxlb&^9Eg2W~ z3Q0_3sw(5SsN}L!@3*v*M{$>;+jDIL;i%xm>$)3#&*^XbE2OWxe#6UY72Eb6xcZML zc7@CLZ0neJ=Qq3!;|T0onSDL^wrYd*_C6{l2=_g?Fe zizq#5X!wL}eRV};+5Nz>y6e?9uS+u9)JYWVHGK3(Z{wG3d%e$ndgQTwV>YLv1mn8h zj2;=h0s2QA@2#7M2a#1#1aOMB{$mw$KK_<=#4BU&`$COK&(((6=(@hN{7y z6f^$DOMBM)$xG_ZRlGLU!u4fU;04!ddo-~t*)3pB{t#BpGt|xi{BUjU0?C8JDafYSc;2>K z&Pif>s^0n&>3828D%l{iIrgTSPT)*A@vFS&-ir0+UYucOyzKR7{?*xQ-o(k=bCkF$ zze9S?PF}s=#VnI$o*r#ASmb^(J#~*j>4u|bIu~z-o$28-j9!yV4JS`|y17|XTw~E` z$D<3l87@k!OH4@IptPYoXPeB&xBJ%rlkU4AeOlb-iCF0O_okt@Ex7n=x7=TJ;=O`^ zq_DP8j^m0oz0d3N?-yUI(RTaneeCFQ1s(of?=INdy6>v_-QGX{&+Pm^LElfWubti7 zAA0xeGNXG84NDJfeaX44y;5TKjTveOV%X#V&z^nyD*wFt?|)ui+Wzoq`23mE?{5BZ z#Jdw7yh|cUwGfY=WOrm`nkUqAIksR zx2EF%iyN;rSbY*o86MpKAH3}U?e~oNe?wm-uH3%&ckHp<_b*qpowxrjeDb?~-Mxg1 z0{ebnZ_~S9ydtalsnv&{i#zoHm?gj1$@VzUekblZ?8UF&DfM}`GUJ|CL$jUr z_diz(`Co0L7j2HZiCe7#5jNkM0w0+>0 zdwPFn*K4J7ZZ}vw{ov*F_!w<*|KRsV2Oe;G+P-{q>9hC**DJyt9DghumTR8p=9n;t z@y?QJ*%ry#sq4PK+^H42+E8Z=Ps%|t#e}b-$L=+r@@=hKZy4vZ)N(@iQ6X{1w6`Kx2nR-oWV?`@+85Osb{%`oyDBK|?rH2i_Dt{T z?h7XaP6gZb>NdPPCi?bBkYDLO29KG|*L+{yf5pJS({eW;zQgEwn^;QO1`)xTjvX9< zGaV%wTUTy*FR?KF%DjVD4u=`NXIEn^l4go@yY05c_QT@S>^ttP{rKr9-}!v4m|X2U zTlhlrALO{aZK_b*E_a5nUw>P~*0l@|c1hWJ%wLu3@LqS;s^eJ~)BM-$-sY6hd~J6Q zgWx1(dwHE(`@9m=Quj_Xyj0yhfrn>mjUQhn zG-}^%wJdLl_xfhrc+>p9hM$rfhml^cE}N7rGm}xjMKtH(Ghf|$BE>}0A4`1wlQ;9? zW~pqC$W=#5l6gLS(CJ8Y*Uo%z-LzRH?hoUe=){zYGSxG?#HUS8bU)Rv{vj@+SbmN2 zw9cCc1U5vuh4}IPV`QAq{HXC?jqK5kKwfK^(*?Q`F<Ht=8S^H}Tk z+q}o84`;WxX*LHw%59r?`FWqD);&>o$@2w&FGK{bzwiDo`^Jw%srP$5?%prcu%5d6 z*4K2`Wwjse{=WEo>Wasvo_Jp2<31`D61yLN^q#rV`beW^o8*f<1~*RBsIEDktDg|d z&{^s_uYB6YuWr+PCtmo*7B1a<_FRYZ1csdNhyL6t`xF_Tcy#S z`*efBC6MQ;b!m~)1C8@@)+^V2{3@5ey5sG=2XmK;nOi3^EiBVm%8$8(C( z#VaR1*r$3WQ*)_X_O-6Y>qUaXH)6CdNU10vZmf*DeMm}0&F1E%$mIvV9(iYGT))zX zm!Un|{a1?}yXWFL?a!ZePGWSMzu#YcuJN_G-pN@mwb60Qtk?g3lAQNX?C_z?`{@zJ zdxVpURz0viSZyeD<(v4lf=G5v*-S{+n>(*PEyVul461zf#_s={57}$&<5|et&d@eZnWfHq)e*KVr?%Y?mso zY-%|ZWs&AHUrPS`)y$o&*Y+)qR!!rOKBO`)=Z)1)JKyiyw(-h8+Wofq)bWEJ|3K{# z&yaVU)hxdCNa?&X%~lfIHhFI~Q~vHF5qZ8Xo8#`)E|l8H7=CT>%BTq8z}s@-XW6#C z-S}EMm;+fMccI@%<^U;}hRgU|5;&uHCKe_m)hi9zv zyOz<}c-(z@bowN=+4!_C&aCGDvc0`Zl%ZyYxmsue8j`GWXW@xFI7w; z{hgd!Sgx6t9;rHM5Z$akok>ZZiS1ZGgTqb13?H41we}VVl)Zk%$j#~f@#Ks5+&wGx z!Xhg~m#jOp{Hbl6ftL8ugXvm1v4xi+Ps}U4dE(x^Cyz@q`?X}vdDrasET3@Txm4WT z9bUG4zYbkuR7>VbIL~l!&wRTSZ+5=#QODoa&-k@+rQVN-7@>FXN>A5*?QNb{9&y^| z@r+knyl2iUm$_`~^L_jGz2!c6-OKmbi+>MUZ`519s(IGsxA(7pyPTdUoO@X_y6|M3 zP4A<}d*2(X;uM5wM@6HQ99G}~^*=D}P5>}7Z5At7XPEEF{5=iKIadlVRjU~J5EKaY~E)Dwp@pUE#*>*RCwq5KkeT6jj6-DJamiy}7bkl(9G!EX zsndmj&1V}0KGoSJY*}YFq%pMpIa%#;!{Y1QO<7NNev*x{GA%Qk%e<_{^;m&gCOg9( zJNr_%Ri%;hM5kv?m{$GBp{cOHc-Nzyzh4!F=5eoo-j?c>Du2}=^~Xb-u)LO(vL${c zS0j7;&*f;DZ<%0WaA`-%-UB+%#m}$PNn)9E`PcLx;--&(ZauncqTRD*i@lLo=FFX1 zcK5)9b+roC1|28N7+#$)b8+H`d9h;Yv@P?q<3r|}8Cdi^xT3G6o_BR{q=%@JLHM*g1byt7I%xvT|fUZsI>L<2Den3 zxHy}`x85aaBngKVs6A-h>DF@4PGZhM)6)0_S`=-sM9knj$HEf9(xF?f z(A}rq&>+F{>&1f{hsRbrlkQ#J*zU>_d2G_R4uNeYNo=agEZIyRU!`8!=1t07xM|+< zQ@*8Lj4g4@Z&>#9a|EoP{rJlo(PLkP+C112+H-#Ss)~!flwv))i0vlN^vmxrMmhOp zb}BKhyfJ#Y)f4HO!y% z{8V6sgz$BjKL>97u)6-mfbG}(TfTqSub%p!RlqJcCq_sj<7)CYc^N1_vZ5QTyPg>inc3{j#^vBtrm6U-jB0+Kb5y_`MEj&@7&WL&b0Z@ ze*d_rJWbAimrL;0h_BT(ML(Uz9rtX}J$F}a-(|Z~*3V-z-mITjJ6U|0vU}sdaQ(m9 zx7uC*{QGD6>&-9gFU@~fi#Y!2eD?N7CF5*%hCljx^}M|=x3E5nkFB3p|N3L_uY3PY zvwYn3ub*#dJm`0qS;KqVH@*ae4YD`(Tn;py;<;DioWyR61&=Hjt^a4ZwAwcAr^<%= z7BTjzHNQT)Jzlu~-+K}L!wf7v|E}7z{mZChG+{jROz&v@^ZL_Q-YJ(|Z+ZUyNu0<3 z7xRxP={!9DujR$u_d@%Bc^>+9DWRJ4*SGyq3;NZf1W(&3}-g=ibFDYzH{=V07ZwPZ?@SlZ0bWU5cuJvg=n|gBxhxOVZ-QuEd z!(ZC#HP5Zyv%GfWnfQ|dD=JoqHBEh`P7LZ z(ezZ*_U7{R(!fGq#)bAC_xDe}RKa=RG=m)@>b$D$3K!4Xbx=dxVwZ*H z#OWqKb;PC>yR&i4-sRgRyu3N(%kL6iyQ@cz{d~{h_TbEIzkWBVhe|P=J7gK1xz|>6 zYPboqE-jT}WQv=!?!0OJN-6h-b4{JKB}}U_v+hLwb-ib_An@_*O}nOlUA_E=YQ;{U z9@ohW&I|IUN^Ufn{&iio%A~^rsjBA>1kcM{o*5}5Fh$6^C~mR%gG#+?=VjOztS|hO zV}|Tb<{8TuT$^$0Bu}Q?8-KOS zle6MZDK5)-shm*GG;39m9`o+d;>G6!CeC46_EqxkcjlRnbyviq+PRAK8XnnP&fogC zXkyy2NKPlc`6qoY3C>(NcXIQFJL&3wd3zEy!+KctOe1gY@2WcAb*AXoCGS@%4w75D zZKHLLUE}x@(=(GtNdNXBvGbXKH2qIi@#(!f<~286U2Nt4VlDrd4Nj78w!Smk{LO`b zNwWLr88go(GtCmOJg<;5cbDm&Yw@qt4K2MFOgYZ;r{6VFW>f#voZ7$*OPMv#@7iwe zEPwfj<%u6Uj4zKZ-zeR9fzKh2f!X@Um7n*|Si8)PEzr+-z0o~Q@OEe^`9b@P1ol>#{hH#+|KoMZd6f-+E8b1C`B8ZLXr4saPf@j}iA6V~ zcN;QYU}Kper@Y}dGq?E0HPtci8&0q-+xX$&g0~Fsm326Od}r!u5UUko-k)x6TDG>? z`+>Pq(?SjQ-FgeS`O`241%`slY$$0ePKA8jB3jG-dKa?jq*RWe|n7(at$)?{b zJjcWj$!N7rnwo55G1+AftK1yV{U00;L|H8@i?eyKUdr&*3oET

FSwUU-lr`q4u2 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%0A1=2)@i|ug{;GT83}M|JyC&7u@98UGiHYeF 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

+ {canCancel && isActive && ( + + + + )} ); } diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index f05a348..d923355 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -170,6 +170,13 @@ export function createBackfillJob(body: { collection?: string; did?: string }) { }); } +export function cancelBackfillJob(id: string) { + return apiFetch<{ id: string; status: string }>( + `/admin/backfill/${id}/cancel`, + { method: "POST" }, + ); +} + // Users export function getUsers() { return apiFetch("/admin/users"); -- 2.51.2 From f3798d9c7462be84f347c7722c166136c0668af1 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 08:46:40 -0500 Subject: [PATCH 108/250] docs: update backfill deets Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/api-reference/admin/backfill.md | 63 +++++++++++++++++-- .../content/docs/getting-started/dashboard.md | 2 +- packages/docs/content/docs/guides/backfill.md | 46 +++++++++++--- 3 files changed, 99 insertions(+), 12 deletions(-) diff --git a/packages/docs/content/docs/api-reference/admin/backfill.md b/packages/docs/content/docs/api-reference/admin/backfill.md index f667856..b4a5a2e 100644 --- a/packages/docs/content/docs/api-reference/admin/backfill.md +++ b/packages/docs/content/docs/api-reference/admin/backfill.md @@ -96,10 +96,61 @@ curl -X POST http://127.0.0.1:3000/admin/backfill \ ```json { "id": "550e8400-e29b-41d4-a716-446655440000", - "status": "pending" + "status": "running" } ``` +## Cancel a backfill job + +``` +POST /admin/backfill/{id}/cancel +``` + +Requests cancellation of a running backfill job. The job status transitions to `cancelling` immediately; the background worker will stop at its next checkpoint and set the final status to `cancelled`. See the [Backfill guide](../../guides/backfill.md#cancelling-a-job) for details on the two-phase process. + +```ts tab="TypeScript" tab-group="language" +const response = await fetch( + `http://127.0.0.1:3000/admin/backfill/${jobId}/cancel`, + { method: "POST", headers }, +); +const data = await response.json(); +``` +```js tab="JavaScript" tab-group="language" +const response = await fetch( + `http://127.0.0.1:3000/admin/backfill/${jobId}/cancel`, + { method: "POST", headers }, +); +const data = await response.json(); +``` +```rust tab="Rust" tab-group="language" +let response = client + .post(format!("http://127.0.0.1:3000/admin/backfill/{job_id}/cancel")) + .bearer_auth(token) + .send() + .await?; +let data: serde_json::Value = response.json().await?; +``` +```go tab="Go" tab-group="language" +url := fmt.Sprintf("http://127.0.0.1:3000/admin/backfill/%s/cancel", jobID) +req, _ := http.NewRequest("POST", url, nil) +req.Header.Set("Authorization", "Bearer "+token) +resp, err := http.DefaultClient.Do(req) +``` +```sh tab="cURL" tab-group="language" +curl -X POST "http://127.0.0.1:3000/admin/backfill/$JOB_ID/cancel" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "id": "550e8400-e29b-41d4-a716-446655440000", + "status": "cancelling" +} +``` + +Returns `400` if the job is not currently running, or `404` if the job ID is not found. + ## List backfill jobs ``` @@ -112,9 +163,10 @@ interface BackfillJob { collection: string | null; did: string | null; status: string; - total_repos: number; - processed_repos: number; - total_records: number; + stage: string; + total_repos: number | null; + processed_repos: number | null; + total_records: number | null; error: string | null; started_at: string | null; completed_at: string | null; @@ -158,6 +210,7 @@ curl http://127.0.0.1:3000/admin/backfill/status -H "$AUTH" "collection": "xyz.statusphere.status", "did": null, "status": "completed", + "stage": "completed", "total_repos": 42, "processed_repos": 42, "total_records": 1000, @@ -168,3 +221,5 @@ curl http://127.0.0.1:3000/admin/backfill/status -H "$AUTH" } ] ``` + +The `status` field tracks the overall job state (`running`, `cancelling`, `cancelled`, `completed`, `failed`). The `stage` field tracks the current processing phase (`pending`, `discovering_repos`, `resolving_pds`, `fetching_records`, `completed`, `failed`, `cancelled`). diff --git a/packages/docs/content/docs/getting-started/dashboard.md b/packages/docs/content/docs/getting-started/dashboard.md index 324a49b..1e55bb8 100644 --- a/packages/docs/content/docs/getting-started/dashboard.md +++ b/packages/docs/content/docs/getting-started/dashboard.md @@ -49,7 +49,7 @@ Navigate to **Records** to browse all indexed atproto records. Records are group ### Backfill -Navigate to **Backfill** to view and manage backfill jobs. You can start a new backfill for any record-type lexicon to import historical records from the network. The page shows job status, progress (repos processed / total), and record counts. See [Backfill](../guides/backfill.md) for how the process works. +Navigate to **Backfill** to view and manage backfill jobs. You can start a new backfill for any record-type lexicon to import historical records from the network. The table shows each job's collection, DID scope, current stage, and start time. Click a row to open a detail sheet with full metadata and a stage-by-stage progress log that updates in real time. Running jobs can be cancelled from the detail sheet — the job transitions to "cancelling" while the worker finishes its current batch, then to "cancelled". See [Backfill](../guides/backfill.md) for how the process works. ### Dead Letters diff --git a/packages/docs/content/docs/guides/backfill.md b/packages/docs/content/docs/guides/backfill.md index 2414484..da7cc42 100644 --- a/packages/docs/content/docs/guides/backfill.md +++ b/packages/docs/content/docs/guides/backfill.md @@ -13,17 +13,49 @@ See the [admin API](../api-reference/admin/backfill.md) for endpoint details. ## How it works -1. **Determine target collections**: uses the specified collection, or all record lexicons with `backfill: true` -2. **Discover DIDs**: HappyView calls the relay's `com.atproto.sync.listReposByCollection` to find repos that contain records for each target collection (paginated) -3. **Resolve each PDS**: for each discovered DID, HappyView resolves the DID document via PLC to find the user's PDS endpoint -4. **Fetch records**: HappyView calls `com.atproto.repo.listRecords` on each PDS for the target collection (paginated) and upserts each record into the local database -5. **Track progress**: counters for `processed_repos` and `total_records` are updated as the job runs +A backfill job runs through three sequential phases: + +1. **Discovering repos** — HappyView calls the relay's `com.atproto.sync.listReposByCollection` to find repos that contain records for each target collection. Discovered DIDs are stored in a tracking table so progress can be resumed. +2. **Resolving PDS** — For each discovered DID, HappyView resolves the DID document (via PLC directory or `did:web`) to find the user's PDS endpoint. +3. **Fetching records** — HappyView calls `com.atproto.repo.listRecords` on each PDS for the target collection(s), upserting each record into the local database. PDS endpoints are processed concurrently (up to 10 PDS hosts, 3 DIDs per host). + +Progress counters (`total_repos`, `processed_repos`, `total_records`) and the current `stage` are updated in real time. The dashboard's Backfill page shows live progress, and clicking a job opens a detail sheet with a stage-by-stage progress log. + +### Rate limiting + +All three phases handle HTTP 429 responses. HappyView reads the `RateLimit-Reset` header (a Unix timestamp, the AT Protocol convention) to determine how long to wait, falling back to the `retry-after` header, then defaulting to 5 seconds. ## Job lifecycle -A backfill job moves through `pending → running → completed` (or `failed`). Unlike earlier versions of HappyView that relied on Tap, the job is only marked `completed` once every discovered repo has been fully processed — there is no separate downstream queue. Progress is visible in real time on the dashboard's Backfill page. +A backfill job has both a `status` (overall state) and a `stage` (current phase): + +| Status | Description | +| ------------ | ---------------------------------------------------- | +| `running` | Job is actively processing | +| `cancelling` | Cancel requested, waiting for the worker to stop | +| `cancelled` | Worker has stopped and cleaned up | +| `completed` | All repos processed successfully | +| `failed` | An error occurred | + +The `stage` field tracks which phase the job is in: `pending`, `discovering_repos`, `resolving_pds`, `fetching_records`, `completed`, `failed`, or `cancelled`. + +## Cancelling a job + +Running jobs can be cancelled via `POST /admin/backfill/{id}/cancel` or the Cancel button in the dashboard. Cancellation is two-phase: + +1. The endpoint sets the job status to `cancelling`. +2. The worker checks for cancellation at natural checkpoints (between relay pages, every 100 DIDs during resolution, every 100 repos during fetching). When it detects the `cancelling` status, it stops work and sets the final status to `cancelled`. + +This means there may be a short delay between clicking Cancel and the job fully stopping, depending on what the worker is doing at that moment. + +## Resuming after restart + +Backfill jobs survive server restarts. On startup, HappyView checks for jobs that were running when the server last stopped: + +- **Running** jobs are re-spawned and resume from where they left off. Each phase is idempotent — discovery skips already-known DIDs, resolution skips already-resolved endpoints, and fetching skips already-completed repos. +- **Cancelling** jobs (where the cancel was requested but the worker hadn't stopped yet) are immediately finalised as `cancelled`. -If a job fails midway, the `error` field contains the failure reason. Re-running the backfill resumes from scratch but is idempotent (records are upserted by URI). +Per-DID progress is tracked in the database, so a job that was halfway through fetching records will pick up from the next unprocessed repo, not start over. ## Re-running backfills -- 2.51.2 From 6da4ac8dc59204cda0c3152e082cd3ba91ebdb52 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 09:16:37 -0500 Subject: [PATCH 109/250] fix: issues with backfill stage/status separation and progress tracking Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 52 ++++++++++--------- web/src/app/dashboard/backfill/page.tsx | 66 +++++++++++-------------- 2 files changed, 54 insertions(+), 64 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 633096a..eaa4e79 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -125,7 +125,7 @@ async fn cleanup_repos(state: &AppState, job_id: &str) { async fn fail_job(state: &AppState, job_id: &str, error: &str) { let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'failed', stage = 'failed', completed_at = ?, error = ? WHERE id = ?", + "UPDATE backfill_jobs SET status = 'failed', completed_at = ?, error = ? WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -162,7 +162,7 @@ async fn request_cancel(state: &AppState, job_id: &str) { async fn finalise_cancel(state: &AppState, job_id: &str) { let now = now_rfc3339(); let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'cancelled', stage = 'cancelled', completed_at = ?, error = 'cancelled by user' WHERE id = ?", + "UPDATE backfill_jobs SET status = 'cancelled', completed_at = ?, error = 'cancelled by user' WHERE id = ?", state.db_backend, ); let _ = sqlx::query(&sql) @@ -370,7 +370,7 @@ async fn run_resolution_phase(state: &AppState, job_id: &str) { // Phase 3: Fetch records from PDS instances // --------------------------------------------------------------------------- -async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[String]) { +async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[String]) -> (i32, i32) { set_stage(state, job_id, "fetching_records").await; // Load pending repos grouped by PDS @@ -401,6 +401,9 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin .map(|(c,)| c) .unwrap_or(0); + // Reset processed_repos for the fetching phase + update_job_counter(state, job_id, "processed_repos", already_completed).await; + let processed_repos = Arc::new(AtomicI32::new(already_completed)); let total_records = Arc::new(AtomicI32::new(0)); let cancelled = Arc::new(AtomicBool::new(false)); @@ -497,6 +500,23 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin } }) .await; + + let final_repos = processed_repos.load(Ordering::Relaxed); + let final_records = total_records.load(Ordering::Relaxed); + + // Persist final counts so they're accurate regardless of batch size + let sql = adapt_sql( + "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", + state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(final_repos) + .bind(final_records) + .bind(job_id) + .execute(&state.db) + .await; + + (final_repos, final_records) } /// Fetch all records for a given DID and collection from a PDS via @@ -680,36 +700,14 @@ async fn run_backfill_job(state: AppState, job_id: String) { } } - run_fetching_phase(&state, &job_id, &collections).await; + let (final_processed, final_records) = run_fetching_phase(&state, &job_id, &collections).await; if is_cancelled(&state, &job_id).await { tracing::info!(job_id, "backfill job cancelled"); + finalise_cancel(&state, &job_id).await; return; } - // Read final counters from backfill_repos before cleanup - let sql = adapt_sql( - "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND status = 'completed'", - state.db_backend, - ); - let final_processed: i32 = sqlx::query_as::<_, (i32,)>(&sql) - .bind(&job_id) - .fetch_one(&state.db) - .await - .map(|(c,)| c) - .unwrap_or(0); - - let sql = adapt_sql( - "SELECT total_records FROM backfill_jobs WHERE id = ?", - state.db_backend, - ); - let final_records: i32 = sqlx::query_as::<_, (i32,)>(&sql) - .bind(&job_id) - .fetch_one(&state.db) - .await - .map(|(c,)| c) - .unwrap_or(0); - complete_job(&state, &job_id, final_processed, final_records, None).await; log_event( diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index df1d918..e602e03 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -50,30 +50,14 @@ import { TableRow, } from "@/components/ui/table"; -const STAGES = [ - "pending", +const PROGRESS_PHASES = [ "discovering_repos", "resolving_pds", "fetching_records", - "completed", - "failed", - "cancelled", - "cancelling", ] as const; -const STAGE_LABELS: Record = { - pending: "Pending", - discovering_repos: "Discovering repos", - resolving_pds: "Resolving PDS", - fetching_records: "Fetching records", - completed: "Completed", - failed: "Failed", - cancelled: "Cancelled", - cancelling: "Cancelling", -}; - -function stageBadge(stage: string) { - switch (stage) { +function statusBadge(job: BackfillJob) { + switch (job.status) { case "completed": return ( @@ -94,20 +78,22 @@ function stageBadge(stage: string) { cancelling ); - case "pending": - return pending; - default: + case "running": return ( - {STAGE_LABELS[stage] ?? stage} + {job.stage === "pending" ? "starting" : job.stage.replace(/_/g, " ")} ); + default: + return {job.status}; } } -function stageIndex(stage: string): number { - const idx = STAGES.indexOf(stage as (typeof STAGES)[number]); - return idx === -1 ? 0 : idx; +function phaseIndex(stage: string): number { + const idx = PROGRESS_PHASES.indexOf( + stage as (typeof PROGRESS_PHASES)[number], + ); + return idx; } export default function BackfillPage() { @@ -183,7 +169,7 @@ export default function BackfillPage() { {job.did ?? "All"} - {stageBadge(job.stage)} + {statusBadge(job)} {job.started_at ? new Date(job.started_at).toLocaleString() @@ -229,9 +215,15 @@ function JobDetail({ onCancel: () => Promise; }) { const [cancelling, setCancelling] = useState(false); - const current = stageIndex(job.stage); + const current = phaseIndex(job.stage); + const allDone = job.status === "completed"; const isActive = job.status === "running" || job.status === "cancelling"; + function hasReached(phase: (typeof PROGRESS_PHASES)[number]): boolean { + if (allDone) return true; + return current >= phaseIndex(phase); + } + async function handleCancel() { setCancelling(true); try { @@ -300,17 +292,17 @@ function JobDetail({
= stageIndex("discovering_repos")} + active={isActive && job.stage === "discovering_repos"} + reached={hasReached("discovering_repos")} value={job.total_repos?.toLocaleString()} suffix="repos found" /> = stageIndex("resolving_pds")} + active={isActive && job.stage === "resolving_pds"} + reached={hasReached("resolving_pds")} value={ - current >= stageIndex("resolving_pds") + hasReached("resolving_pds") ? `${job.processed_repos?.toLocaleString() ?? "0"} / ${job.total_repos?.toLocaleString() ?? "0"}` : undefined } @@ -318,15 +310,15 @@ function JobDetail({ /> = stageIndex("fetching_records")} + active={isActive && job.stage === "fetching_records"} + reached={hasReached("fetching_records")} value={ - current >= stageIndex("fetching_records") + hasReached("fetching_records") ? `${job.processed_repos?.toLocaleString() ?? "0"} / ${job.total_repos?.toLocaleString() ?? "0"} repos` : undefined } suffix={ - current >= stageIndex("fetching_records") + hasReached("fetching_records") ? `${job.total_records?.toLocaleString() ?? "0"} records` : undefined } -- 2.51.2 From 3618d9f3deb1737dcb0f40aa10a7a494003ed3f8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 09:36:27 -0500 Subject: [PATCH 110/250] fix: update column type in backfill migration Signed-off-by: Trezy Signed-off-by: Trezy --- migrations/postgres/20260513000001_create_backfill_repos.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/postgres/20260513000001_create_backfill_repos.sql b/migrations/postgres/20260513000001_create_backfill_repos.sql index 9c0d25b..0e613eb 100644 --- a/migrations/postgres/20260513000001_create_backfill_repos.sql +++ b/migrations/postgres/20260513000001_create_backfill_repos.sql @@ -1,5 +1,5 @@ CREATE TABLE IF NOT EXISTS backfill_repos ( - job_id UUID NOT NULL REFERENCES backfill_jobs(id) ON DELETE CASCADE, + job_id TEXT NOT NULL REFERENCES backfill_jobs(id) ON DELETE CASCADE, did TEXT NOT NULL, pds_endpoint TEXT, status TEXT NOT NULL DEFAULT 'pending', -- 2.51.2 From 92c8a982b8c6089bc5581cff3a7f867b2ad36a5c Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 10:32:54 -0500 Subject: [PATCH 111/250] fix: harden backfill cancel idempotency, SQL injection guard, DID retry cap, and row a11y Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 20 ++++++++--- src/profile.rs | 44 +++++++++++++++++-------- web/src/app/dashboard/backfill/page.tsx | 10 +++++- 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index eaa4e79..d0fc378 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -90,10 +90,19 @@ async fn set_stage(state: &AppState, job_id: &str, stage: &str) { } async fn update_job_counter(state: &AppState, job_id: &str, column: &str, value: i32) { - let sql = adapt_sql( - &format!("UPDATE backfill_jobs SET {column} = ? WHERE id = ?"), - state.db_backend, - ); + let query = match column { + "total_repos" => "UPDATE backfill_jobs SET total_repos = ? WHERE id = ?", + "processed_repos" => "UPDATE backfill_jobs SET processed_repos = ? WHERE id = ?", + "total_records" => "UPDATE backfill_jobs SET total_records = ? WHERE id = ?", + other => { + tracing::error!( + column = other, + "update_job_counter called with unknown column" + ); + return; + } + }; + let sql = adapt_sql(query, state.db_backend); let _ = sqlx::query(&sql) .bind(value) .bind(job_id) @@ -809,6 +818,9 @@ pub(super) async fn cancel_backfill( match row { None => Err(AppError::NotFound("backfill job not found".into())), + Some((ref status,)) if status == "cancelling" || status == "cancelled" => { + Ok(Json(serde_json::json!({ "id": job_id, "status": status }))) + } Some((status,)) if status != "running" => Err(AppError::BadRequest(format!( "job is not running (status: {status})" ))), diff --git a/src/profile.rs b/src/profile.rs index 25bf03b..298ea01 100644 --- a/src/profile.rs +++ b/src/profile.rs @@ -161,21 +161,37 @@ pub async fn resolve_did_document( format!("{}/{did}", plc_url.trim_end_matches('/')) }; - let resp = loop { - let r = http - .get(&url) - .send() - .await - .map_err(|e| AppError::Internal(format!("DID resolution failed: {e}")))?; - - if r.status() == reqwest::StatusCode::TOO_MANY_REQUESTS { - let wait = parse_retry_after(r.headers()); - tracing::warn!(did, wait, "rate limited during DID resolution, sleeping"); - tokio::time::sleep(tokio::time::Duration::from_secs(wait)).await; - continue; + let resp = { + let max_retries = 5; + let mut attempts = 0; + loop { + let r = http + .get(&url) + .send() + .await + .map_err(|e| AppError::Internal(format!("DID resolution failed: {e}")))?; + + if r.status() == reqwest::StatusCode::TOO_MANY_REQUESTS { + attempts += 1; + if attempts >= max_retries { + return Err(AppError::Internal(format!( + "DID resolution for {did} rate-limited after {max_retries} retries" + ))); + } + let wait = parse_retry_after(r.headers()); + tracing::warn!( + did, + wait, + attempts, + max_retries, + "rate limited during DID resolution, sleeping" + ); + tokio::time::sleep(tokio::time::Duration::from_secs(wait)).await; + continue; + } + + break r; } - - break r; }; if !resp.status().is_success() { diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index e602e03..f2ed0b6 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -157,8 +157,16 @@ export default function BackfillPage() { {jobs.map((job) => ( setSelectedJobId(job.id)} + onKeyDown={(e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + setSelectedJobId(job.id); + } + }} > {job.id.slice(0, 8)} -- 2.51.2 From 87a19e9e27c726a651fbe4a6ae62cfa01eb77410 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 10:49:44 -0500 Subject: [PATCH 112/250] fix: add permissions to the internal API Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/mod.rs | 1 + src/admin/permissions.rs | 465 ++++++++++++++++++++++++++++++++++++++- src/admin/users.rs | 52 ++++- tests/e2e_permissions.rs | 258 ++++++++++++++++++++++ web/src/lib/api.ts | 23 ++ 5 files changed, 796 insertions(+), 3 deletions(-) create mode 100644 tests/e2e_permissions.rs diff --git a/src/admin/mod.rs b/src/admin/mod.rs index 6ad2260..d4077ac 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -126,4 +126,5 @@ pub fn admin_routes(_state: AppState) -> Router { .route("/dead-letters/{id}/dismiss", post(dead_letters::dismiss)) .route("/dead-letters/{id}/retry", post(dead_letters::retry)) .route("/dead-letters/{id}/reindex", post(dead_letters::reindex)) + .route("/permissions", get(users::list_permissions)) } diff --git a/src/admin/permissions.rs b/src/admin/permissions.rs index 3a8406f..1bc0977 100644 --- a/src/admin/permissions.rs +++ b/src/admin/permissions.rs @@ -2,7 +2,15 @@ use std::collections::HashSet; use serde::{Deserialize, Serialize}; -/// All 37 permissions in the system. +#[derive(Serialize)] +pub struct PermissionInfo { + pub key: &'static str, + pub name: &'static str, + pub description: &'static str, + pub category: &'static str, +} + +/// All permissions in the system. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Permission { #[serde(rename = "lexicons:create")] @@ -150,6 +158,257 @@ impl Permission { } } + pub fn info(&self) -> PermissionInfo { + match self { + Self::LexiconsCreate => PermissionInfo { + key: "lexicons:create", + name: "Create Lexicons", + description: "Upload and register new lexicon schemas", + category: "Lexicons", + }, + Self::LexiconsRead => PermissionInfo { + key: "lexicons:read", + name: "View Lexicons", + description: "View registered lexicon schemas", + category: "Lexicons", + }, + Self::LexiconsDelete => PermissionInfo { + key: "lexicons:delete", + name: "Delete Lexicons", + description: "Remove lexicon schemas", + category: "Lexicons", + }, + Self::RecordsRead => PermissionInfo { + key: "records:read", + name: "View Records", + description: "Browse indexed AT Protocol records", + category: "Records", + }, + Self::RecordsDelete => PermissionInfo { + key: "records:delete", + name: "Delete Records", + description: "Delete individual records from the index", + category: "Records", + }, + Self::RecordsDeleteCollection => PermissionInfo { + key: "records:delete-collection", + name: "Delete Collections", + description: "Bulk-delete all records in a collection", + category: "Records", + }, + Self::ScriptVariablesCreate => PermissionInfo { + key: "script-variables:create", + name: "Create Script Variables", + description: "Add or update environment variables for Lua scripts", + category: "Script Variables", + }, + Self::ScriptVariablesRead => PermissionInfo { + key: "script-variables:read", + name: "View Script Variables", + description: "View script environment variable keys and values", + category: "Script Variables", + }, + Self::ScriptVariablesDelete => PermissionInfo { + key: "script-variables:delete", + name: "Delete Script Variables", + description: "Remove script environment variables", + category: "Script Variables", + }, + Self::UsersCreate => PermissionInfo { + key: "users:create", + name: "Create Users", + description: "Add new dashboard users", + category: "Users", + }, + Self::UsersRead => PermissionInfo { + key: "users:read", + name: "View Users", + description: "View the user list and their permissions", + category: "Users", + }, + Self::UsersUpdate => PermissionInfo { + key: "users:update", + name: "Update Users", + description: "Modify user permissions", + category: "Users", + }, + Self::UsersDelete => PermissionInfo { + key: "users:delete", + name: "Delete Users", + description: "Remove dashboard users", + category: "Users", + }, + Self::ApiKeysCreate => PermissionInfo { + key: "api-keys:create", + name: "Create API Keys", + description: "Generate new API keys for admin access", + category: "API Keys", + }, + Self::ApiKeysRead => PermissionInfo { + key: "api-keys:read", + name: "View API Keys", + description: "View existing API keys", + category: "API Keys", + }, + Self::ApiKeysDelete => PermissionInfo { + key: "api-keys:delete", + name: "Revoke API Keys", + description: "Revoke existing API keys", + category: "API Keys", + }, + Self::BackfillCreate => PermissionInfo { + key: "backfill:create", + name: "Start Backfill", + description: "Trigger historical record backfill jobs", + category: "Backfill", + }, + Self::BackfillRead => PermissionInfo { + key: "backfill:read", + name: "View Backfill", + description: "View backfill job status and progress", + category: "Backfill", + }, + Self::StatsRead => PermissionInfo { + key: "stats:read", + name: "View Stats", + description: "View collection statistics and record counts", + category: "System", + }, + Self::EventsRead => PermissionInfo { + key: "events:read", + name: "View Events", + description: "View the event log", + category: "System", + }, + Self::LabelersCreate => PermissionInfo { + key: "labelers:create", + name: "Add Labelers", + description: "Subscribe to external labeler services", + category: "Labelers", + }, + Self::LabelersRead => PermissionInfo { + key: "labelers:read", + name: "View Labelers", + description: "View subscribed labeler services", + category: "Labelers", + }, + Self::LabelersDelete => PermissionInfo { + key: "labelers:delete", + name: "Remove Labelers", + description: "Unsubscribe from labeler services", + category: "Labelers", + }, + Self::SettingsManage => PermissionInfo { + key: "settings:manage", + name: "Manage Settings", + description: "Modify instance settings, logo, and configuration", + category: "Settings", + }, + Self::PluginsRead => PermissionInfo { + key: "plugins:read", + name: "View Plugins", + description: "View installed plugins and their configuration", + category: "Plugins", + }, + Self::PluginsCreate => PermissionInfo { + key: "plugins:create", + name: "Install Plugins", + description: "Install and configure new plugins", + category: "Plugins", + }, + Self::PluginsDelete => PermissionInfo { + key: "plugins:delete", + name: "Remove Plugins", + description: "Uninstall plugins", + category: "Plugins", + }, + Self::ApiClientsView => PermissionInfo { + key: "api-clients:view", + name: "View API Clients", + description: "View registered OAuth API clients", + category: "API Clients", + }, + Self::ApiClientsCreate => PermissionInfo { + key: "api-clients:create", + name: "Create API Clients", + description: "Register new OAuth API clients", + category: "API Clients", + }, + Self::ApiClientsEdit => PermissionInfo { + key: "api-clients:edit", + name: "Edit API Clients", + description: "Modify API client settings and credentials", + category: "API Clients", + }, + Self::ApiClientsDelete => PermissionInfo { + key: "api-clients:delete", + name: "Delete API Clients", + description: "Remove registered API clients", + category: "API Clients", + }, + Self::DeadLettersRead => PermissionInfo { + key: "dead-letters:read", + name: "View Dead Letters", + description: "View failed hook executions", + category: "Dead Letters", + }, + Self::DeadLettersManage => PermissionInfo { + key: "dead-letters:manage", + name: "Manage Dead Letters", + description: "Retry, re-index, or dismiss dead letters", + category: "Dead Letters", + }, + Self::SpacesCreate => PermissionInfo { + key: "spaces:create", + name: "Create Spaces", + description: "Create new permissioned data spaces", + category: "Spaces", + }, + Self::SpacesRead => PermissionInfo { + key: "spaces:read", + name: "View Spaces", + description: "View space details and metadata", + category: "Spaces", + }, + Self::SpacesUpdate => PermissionInfo { + key: "spaces:update", + name: "Update Spaces", + description: "Modify space settings", + category: "Spaces", + }, + Self::SpacesDelete => PermissionInfo { + key: "spaces:delete", + name: "Delete Spaces", + description: "Remove spaces and their data", + category: "Spaces", + }, + Self::SpacesManageMembers => PermissionInfo { + key: "spaces:manage-members", + name: "Manage Members", + description: "Add or remove space members and roles", + category: "Spaces", + }, + Self::SpacesManageInvites => PermissionInfo { + key: "spaces:manage-invites", + name: "Manage Invites", + description: "Create and revoke space invitations", + category: "Spaces", + }, + Self::SpacesManageRecords => PermissionInfo { + key: "spaces:manage-records", + name: "Manage Records", + description: "Read and write records within spaces", + category: "Spaces", + }, + Self::SpacesManageCredentials => PermissionInfo { + key: "spaces:manage-credentials", + name: "Manage Credentials", + description: "Issue and revoke space access credentials", + category: "Spaces", + }, + } + } + /// All permissions. pub fn all() -> HashSet { HashSet::from([ @@ -198,8 +457,65 @@ impl Permission { } } +/// Ordered list of all permissions with metadata. +pub fn catalog() -> Vec { + use Permission::*; + [ + LexiconsCreate, + LexiconsRead, + LexiconsDelete, + RecordsRead, + RecordsDelete, + RecordsDeleteCollection, + ScriptVariablesCreate, + ScriptVariablesRead, + ScriptVariablesDelete, + UsersCreate, + UsersRead, + UsersUpdate, + UsersDelete, + ApiKeysCreate, + ApiKeysRead, + ApiKeysDelete, + BackfillCreate, + BackfillRead, + StatsRead, + EventsRead, + LabelersCreate, + LabelersRead, + LabelersDelete, + SettingsManage, + PluginsRead, + PluginsCreate, + PluginsDelete, + ApiClientsView, + ApiClientsCreate, + ApiClientsEdit, + ApiClientsDelete, + DeadLettersRead, + DeadLettersManage, + SpacesCreate, + SpacesRead, + SpacesUpdate, + SpacesDelete, + SpacesManageMembers, + SpacesManageInvites, + SpacesManageRecords, + SpacesManageCredentials, + ] + .iter() + .map(|p| p.info()) + .collect() +} + +/// Check whether a permission string is recognized. +#[allow(dead_code)] +pub fn is_valid(key: &str) -> bool { + serde_json::from_value::(serde_json::Value::String(key.to_string())).is_ok() +} + /// Predefined permission templates. -#[derive(Debug, Clone, Copy, Deserialize)] +#[derive(Debug, Clone, Copy, Deserialize, Serialize)] #[serde(rename_all = "snake_case")] pub enum Template { Viewer, @@ -208,7 +524,47 @@ pub enum Template { FullAccess, } +#[derive(Serialize)] +pub struct TemplateInfo { + pub key: String, + pub label: &'static str, + pub permissions: Vec<&'static str>, +} + impl Template { + pub const ALL: &[Template] = &[ + Template::Viewer, + Template::Operator, + Template::Manager, + Template::FullAccess, + ]; + + pub fn key(&self) -> &'static str { + match self { + Self::Viewer => "viewer", + Self::Operator => "operator", + Self::Manager => "manager", + Self::FullAccess => "full_access", + } + } + + pub fn label(&self) -> &'static str { + match self { + Self::Viewer => "Viewer", + Self::Operator => "Operator", + Self::Manager => "Manager", + Self::FullAccess => "Full Access", + } + } + + pub fn info(&self) -> TemplateInfo { + TemplateInfo { + key: self.key().to_string(), + label: self.label(), + permissions: self.permissions().iter().map(|p| p.as_str()).collect(), + } + } + pub fn permissions(&self) -> HashSet { match self { Self::Viewer => HashSet::from([ @@ -262,3 +618,108 @@ impl Template { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn catalog_covers_all_permissions() { + let catalog_keys: Vec<&str> = catalog().iter().map(|p| p.key).collect(); + for perm in Permission::all() { + assert!( + catalog_keys.contains(&perm.as_str()), + "Permission {} missing from catalog()", + perm.as_str() + ); + } + } + + #[test] + fn catalog_has_no_duplicates() { + let entries = catalog(); + let mut seen = std::collections::HashSet::new(); + for entry in &entries { + assert!( + seen.insert(entry.key), + "Duplicate key in catalog: {}", + entry.key + ); + } + } + + #[test] + fn info_key_matches_as_str() { + for perm in Permission::all() { + assert_eq!(perm.info().key, perm.as_str()); + } + } + + #[test] + fn info_fields_are_nonempty() { + for perm in Permission::all() { + let info = perm.info(); + assert!(!info.name.is_empty(), "{} has empty name", info.key); + assert!( + !info.description.is_empty(), + "{} has empty description", + info.key + ); + assert!(!info.category.is_empty(), "{} has empty category", info.key); + } + } + + #[test] + fn is_valid_accepts_known_permissions() { + assert!(is_valid("lexicons:create")); + assert!(is_valid("spaces:manage-members")); + } + + #[test] + fn is_valid_rejects_unknown_permissions() { + assert!(!is_valid("fake:permission")); + assert!(!is_valid("")); + } + + #[test] + fn template_full_access_covers_all() { + assert_eq!(Template::FullAccess.permissions(), Permission::all()); + } + + #[test] + fn template_viewer_is_subset_of_operator() { + let viewer = Template::Viewer.permissions(); + let operator = Template::Operator.permissions(); + assert!(viewer.is_subset(&operator)); + } + + #[test] + fn template_operator_is_subset_of_manager() { + let operator = Template::Operator.permissions(); + let manager = Template::Manager.permissions(); + assert!(operator.is_subset(&manager)); + } + + #[test] + fn template_info_permissions_match_template_permissions() { + for t in Template::ALL { + let info = t.info(); + let expected: HashSet<&str> = t.permissions().iter().map(|p| p.as_str()).collect(); + let actual: HashSet<&str> = info.permissions.into_iter().collect(); + assert_eq!(expected, actual, "Template {:?} info mismatch", t); + } + } + + #[test] + fn spaces_permissions_are_in_spaces_category() { + for entry in catalog() { + if entry.key.starts_with("spaces:") { + assert_eq!( + entry.category, "Spaces", + "{} should be in Spaces category", + entry.key + ); + } + } + } +} diff --git a/src/admin/users.rs b/src/admin/users.rs index 6b8aaf7..375da13 100644 --- a/src/admin/users.rs +++ b/src/admin/users.rs @@ -10,7 +10,7 @@ use crate::error::AppError; use crate::event_log::{EventLog, Severity, log_event}; use super::auth::UserAuth; -use super::permissions::Permission; +use super::permissions::{self, Permission}; use super::types::{CreateUserBody, TransferSuperBody, UpdatePermissionsBody, UserSummary}; /// POST /admin/users — create a new user with template or explicit permissions. @@ -480,3 +480,53 @@ pub(super) async fn transfer_super( Ok(StatusCode::NO_CONTENT) } + +/// GET /admin/permissions — list all available permissions and templates. +pub(super) async fn list_permissions( + State(state): State, + auth: UserAuth, +) -> Result, AppError> { + auth.require(Permission::UsersRead).await?; + + let spaces_enabled = crate::feature_flags::is_enabled( + &state.db, + crate::feature_flags::FeatureFlag::SPACES_ENABLED, + state.db_backend, + ) + .await; + + let all_permissions: Vec = permissions::catalog() + .into_iter() + .filter(|p| spaces_enabled || p.category != "Spaces") + .map(|p| { + serde_json::json!({ + "key": p.key, + "name": p.name, + "description": p.description, + "category": p.category, + }) + }) + .collect(); + + let templates: Vec = permissions::Template::ALL + .iter() + .map(|t| { + let info = t.info(); + let perms: Vec<&str> = info + .permissions + .into_iter() + .filter(|p| spaces_enabled || !p.starts_with("spaces:")) + .collect(); + serde_json::json!({ + "key": info.key, + "label": info.label, + "permissions": perms, + }) + }) + .collect(); + + Ok(Json(serde_json::json!({ + "permissions": all_permissions, + "templates": templates, + }))) +} diff --git a/tests/e2e_permissions.rs b/tests/e2e_permissions.rs new file mode 100644 index 0000000..6827d23 --- /dev/null +++ b/tests/e2e_permissions.rs @@ -0,0 +1,258 @@ +mod common; + +use axum::body::Body; +use axum::http::{Method, Request, StatusCode}; +use http_body_util::BodyExt; +use serde_json::{Value, json}; +use serial_test::serial; +use tower::ServiceExt; + +use common::app::TestApp; + +async fn json_body(resp: axum::response::Response) -> Value { + let body = resp.into_body().collect().await.unwrap().to_bytes(); + serde_json::from_slice(&body).unwrap() +} + +fn admin_get( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), +) -> Request { + Request::builder() + .uri(uri) + .header(cookie.0, cookie.1) + .body(Body::empty()) + .unwrap() +} + +fn admin_put( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), + body: &Value, +) -> Request { + Request::builder() + .method(Method::PUT) + .uri(uri) + .header(cookie.0, cookie.1) + .header("content-type", "application/json") + .body(Body::from(serde_json::to_vec(body).unwrap())) + .unwrap() +} + +fn admin_delete( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), +) -> Request { + Request::builder() + .method(Method::DELETE) + .uri(uri) + .header(cookie.0, cookie.1) + .body(Body::empty()) + .unwrap() +} + +#[tokio::test] +#[serial] +async fn permissions_requires_auth() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/admin/permissions") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); +} + +#[tokio::test] +#[serial] +async fn permissions_returns_catalog() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().expect("permissions array"); + assert!(!permissions.is_empty()); + + let first = &permissions[0]; + assert!(first["key"].is_string()); + assert!(first["name"].is_string()); + assert!(first["description"].is_string()); + assert!(first["category"].is_string()); + + let templates = body["templates"].as_array().expect("templates array"); + assert!(!templates.is_empty()); + + let first_template = &templates[0]; + assert!(first_template["key"].is_string()); + assert!(first_template["label"].is_string()); + assert!(first_template["permissions"].is_array()); +} + +#[tokio::test] +#[serial] +async fn permissions_excludes_spaces_when_flag_disabled() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().unwrap(); + let has_spaces = permissions + .iter() + .any(|p| p["key"].as_str().unwrap_or("").starts_with("spaces:")); + assert!( + !has_spaces, + "spaces permissions should be excluded when flag is disabled" + ); + + let has_spaces_category = permissions + .iter() + .any(|p| p["category"].as_str().unwrap_or("") == "Spaces"); + assert!( + !has_spaces_category, + "Spaces category should not appear when flag is disabled" + ); + + let templates = body["templates"].as_array().unwrap(); + for template in templates { + let perms = template["permissions"].as_array().unwrap(); + let has_spaces_perm = perms + .iter() + .any(|p| p.as_str().unwrap_or("").starts_with("spaces:")); + assert!( + !has_spaces_perm, + "template {:?} should not contain spaces permissions when flag is disabled", + template["key"] + ); + } +} + +#[tokio::test] +#[serial] +async fn permissions_includes_spaces_when_flag_enabled() { + common::require_db!(); + let app = TestApp::new().await; + + // Enable the spaces feature flag + let resp = app + .router + .clone() + .oneshot(admin_put( + "/admin/settings/feature.spaces_enabled", + app.admin_cookie(), + &json!({ "value": "true" }), + )) + .await + .unwrap(); + assert!(resp.status().is_success()); + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().unwrap(); + let has_spaces = permissions + .iter() + .any(|p| p["key"].as_str().unwrap_or("").starts_with("spaces:")); + assert!( + has_spaces, + "spaces permissions should be included when flag is enabled" + ); + + let templates = body["templates"].as_array().unwrap(); + let manager = templates + .iter() + .find(|t| t["key"] == "manager") + .expect("manager template"); + let manager_perms = manager["permissions"].as_array().unwrap(); + let has_spaces_perm = manager_perms + .iter() + .any(|p| p.as_str().unwrap_or("").starts_with("spaces:")); + assert!( + has_spaces_perm, + "manager template should include spaces permissions when flag is enabled" + ); +} + +#[tokio::test] +#[serial] +async fn permissions_spaces_removed_after_disabling_flag() { + common::require_db!(); + let app = TestApp::new().await; + + // Enable + let resp = app + .router + .clone() + .oneshot(admin_put( + "/admin/settings/feature.spaces_enabled", + app.admin_cookie(), + &json!({ "value": "true" }), + )) + .await + .unwrap(); + assert!(resp.status().is_success()); + + // Disable + let resp = app + .router + .clone() + .oneshot(admin_delete( + "/admin/settings/feature.spaces_enabled", + app.admin_cookie(), + )) + .await + .unwrap(); + assert!(resp.status().is_success()); + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/permissions", app.admin_cookie())) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let body = json_body(resp).await; + + let permissions = body["permissions"].as_array().unwrap(); + let has_spaces = permissions + .iter() + .any(|p| p["key"].as_str().unwrap_or("").starts_with("spaces:")); + assert!( + !has_spaces, + "spaces permissions should be gone after disabling flag" + ); +} diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index d923355..f75875b 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -220,6 +220,29 @@ export function transferSuper(body: { target_user_id: string }) { }); } +// Permissions catalog +export type PermissionEntry = { + key: string; + name: string; + description: string; + category: string; +}; + +export type PermissionTemplate = { + key: string; + label: string; + permissions: string[]; +}; + +export type PermissionsCatalog = { + permissions: PermissionEntry[]; + templates: PermissionTemplate[]; +}; + +export function getPermissions() { + return apiFetch("/admin/permissions"); +} + // API Keys export function getApiKeys() { return apiFetch("/admin/api-keys"); -- 2.51.2 From 2b379ccb05872dad08125025779952944a97f99f Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 10:50:18 -0500 Subject: [PATCH 113/250] fix: allow sheets to be much larger Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/dead-letters/page.tsx | 2 +- web/src/app/dashboard/records/page.tsx | 2 +- web/src/components/ui/sheet.tsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/web/src/app/dashboard/dead-letters/page.tsx b/web/src/app/dashboard/dead-letters/page.tsx index 24ff16f..d871d5d 100644 --- a/web/src/app/dashboard/dead-letters/page.tsx +++ b/web/src/app/dashboard/dead-letters/page.tsx @@ -560,7 +560,7 @@ export default function DeadLettersPage() { if (!open) setViewDetail(null); }} > - + {viewDetail && ( <> diff --git a/web/src/app/dashboard/records/page.tsx b/web/src/app/dashboard/records/page.tsx index 01cbc40..4f0bb02 100644 --- a/web/src/app/dashboard/records/page.tsx +++ b/web/src/app/dashboard/records/page.tsx @@ -442,7 +442,7 @@ export default function RecordsPage() { if (!open) setViewRecord(null); }} > - + {viewRecord && ( <> diff --git a/web/src/components/ui/sheet.tsx b/web/src/components/ui/sheet.tsx index 5963090..cd427e3 100644 --- a/web/src/components/ui/sheet.tsx +++ b/web/src/components/ui/sheet.tsx @@ -62,9 +62,9 @@ function SheetContent({ className={cn( "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && - "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm", + "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-[90%] border-l lg:w-1/2", side === "left" && - "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", + "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-[90%] border-r lg:w-1/2", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b", side === "bottom" && -- 2.51.2 From e79b9f17c9ab7731fb077ba749b19f09ce9ed19b Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 10:50:57 -0500 Subject: [PATCH 114/250] fix: move user permission management into sheets fixes #23 Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/settings/users/page.tsx | 438 +++++++++++------- 1 file changed, 266 insertions(+), 172 deletions(-) diff --git a/web/src/app/dashboard/settings/users/page.tsx b/web/src/app/dashboard/settings/users/page.tsx index 84c6d45..e41f8cd 100644 --- a/web/src/app/dashboard/settings/users/page.tsx +++ b/web/src/app/dashboard/settings/users/page.tsx @@ -1,7 +1,7 @@ "use client"; -import React, { useCallback, useEffect, useState } from "react"; -import { ChevronDown, ChevronRight, Shield, Trash2 } from "lucide-react"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; +import { ChevronRight, Search, Shield, Trash2 } from "lucide-react"; import { useAuth } from "@/lib/auth-context"; import { @@ -10,13 +10,16 @@ import { deleteUser, updateUserPermissions, transferSuper, + getPermissions, } from "@/lib/api"; +import type { PermissionEntry, PermissionTemplate } from "@/lib/api"; import type { UserSummary } from "@/types/users"; import { SiteHeader } from "@/components/site-header"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Badge } from "@/components/ui/badge"; +import { Card, CardContent } from "@/components/ui/card"; import { Switch } from "@/components/ui/switch"; import { Select, @@ -43,45 +46,61 @@ import { ResponsiveDialogTitle, ResponsiveDialogTrigger, } from "@/components/ui/responsive-dialog"; +import { + Sheet, + SheetContent, + SheetFooter, + SheetHeader, + SheetTitle, + SheetDescription, +} from "@/components/ui/sheet"; -const PERMISSION_CATEGORIES: Record = { - Lexicons: ["lexicons:create", "lexicons:read", "lexicons:delete"], - Records: ["records:read", "records:delete", "records:delete-collection"], - "Script Variables": [ - "script-variables:create", - "script-variables:read", - "script-variables:delete", - ], - Users: ["users:create", "users:read", "users:update", "users:delete"], - "API Keys": ["api-keys:create", "api-keys:read", "api-keys:delete"], - Backfill: ["backfill:create", "backfill:read"], - "API Clients": ["api-clients:view", "api-clients:create", "api-clients:edit", "api-clients:delete"], - Plugins: ["plugins:read", "plugins:create", "plugins:delete"], - System: ["stats:read", "events:read"], +type BskyProfile = { + avatar?: string; + displayName?: string; + description?: string; }; -const ALL_PERMISSIONS = Object.values(PERMISSION_CATEGORIES).flat(); - -const TEMPLATES = [ - { value: "viewer", label: "Viewer" }, - { value: "operator", label: "Operator" }, - { value: "manager", label: "Manager" }, - { value: "full_access", label: "Full Access" }, -] as const; - -const TEMPLATE_PERMISSIONS: Record = { - viewer: ["lexicons:read", "records:read", "script-variables:read", "users:read", "api-keys:read", "backfill:read", "stats:read", "events:read"], - operator: ["lexicons:read", "records:read", "records:delete", "script-variables:read", "script-variables:create", "users:read", "api-keys:read", "backfill:read", "backfill:create", "stats:read", "events:read"], - manager: ["lexicons:create", "lexicons:read", "lexicons:delete", "records:read", "records:delete", "records:delete-collection", "script-variables:create", "script-variables:read", "script-variables:delete", "users:read", "api-keys:read", "backfill:create", "backfill:read", "stats:read", "events:read", "plugins:read", "plugins:create", "plugins:delete"], - full_access: ALL_PERMISSIONS, -}; +function buildCategories(permissions: PermissionEntry[]): Record { + const cats: Record = {}; + for (const p of permissions) { + if (!cats[p.category]) cats[p.category] = []; + cats[p.category].push(p); + } + return cats; +} export default function UsersPage() { const { did: currentDid } = useAuth(); const [users, setUsers] = useState([]); const [handles, setHandles] = useState>({}); const [error, setError] = useState(null); - const [expandedUserId, setExpandedUserId] = useState(null); + const [selectedUserId, setSelectedUserId] = useState(null); + const [permSearch, setPermSearch] = useState(""); + const [permissionEntries, setPermissionEntries] = useState([]); + const [profiles, setProfiles] = useState>({}); + const [templates, setTemplates] = useState([]); + + const permissionCategories = React.useMemo(() => buildCategories(permissionEntries), [permissionEntries]); + const filteredCategories = useMemo(() => { + if (!permSearch.trim()) return permissionCategories; + const terms = permSearch.toLowerCase().split(/\s+/); + const result: Record = {}; + for (const [category, permissions] of Object.entries(permissionCategories)) { + const matched = permissions.filter((p) => { + const haystack = `${p.name} ${p.description} ${p.category} ${p.key}`.toLowerCase(); + return terms.every((term) => haystack.includes(term)); + }); + if (matched.length > 0) result[category] = matched; + } + return result; + }, [permissionCategories, permSearch]); + const allPermissionKeys = React.useMemo(() => permissionEntries.map((p) => p.key), [permissionEntries]); + const templatePermissions = React.useMemo(() => { + const map: Record = {}; + for (const t of templates) map[t.key] = t.permissions; + return map; + }, [templates]); const currentUser = users.find((u) => u.did === currentDid); const isCurrentUserSuper = currentUser?.is_super ?? false; @@ -94,6 +113,12 @@ export default function UsersPage() { useEffect(() => { load(); + getPermissions() + .then((catalog) => { + setPermissionEntries(catalog.permissions); + setTemplates(catalog.templates); + }) + .catch((e) => setError(e instanceof Error ? e.message : String(e))); }, [load]); // Resolve DIDs to handles via PLC directory @@ -116,6 +141,27 @@ export default function UsersPage() { } }, [users, handles]); + // Fetch Bluesky profile when a user is selected + useEffect(() => { + if (!selectedUserId) return; + const user = users.find((u) => u.id === selectedUserId); + if (!user || user.did in profiles) return; + fetch(`https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${encodeURIComponent(user.did)}`) + .then((res) => (res.ok ? res.json() : null)) + .then((data) => { + if (!data) return; + setProfiles((prev) => ({ + ...prev, + [user.did]: { + avatar: data.avatar, + displayName: data.displayName, + description: data.description, + }, + })); + }) + .catch(() => {}); + }, [selectedUserId, users, profiles]); + async function handleDelete(id: string) { try { await deleteUser(id); @@ -193,7 +239,7 @@ export default function UsersPage() {

Users

{(isCurrentUserSuper || currentUser?.permissions.includes("users:create")) && ( - + )}
@@ -201,19 +247,18 @@ export default function UsersPage() { - User Permissions Created Last Used - + {users.length === 0 && ( No users yet. @@ -221,125 +266,169 @@ export default function UsersPage() { )} {users.map((user) => ( - - - -
+
+ + {(() => { + const selectedUser = users.find((u) => u.id === selectedUserId); + return ( + { if (!open) { setSelectedUserId(null); setPermSearch(""); } }}> + + {selectedUser && ( + <> + + User + + + + + {profiles[selectedUser.did]?.avatar && ( + + )} +
+

+ {profiles[selectedUser.did]?.displayName || handles[selectedUser.did] ? ( + <> + {profiles[selectedUser.did]?.displayName && ( + {profiles[selectedUser.did].displayName} + )} + {handles[selectedUser.did] && ( + + @{handles[selectedUser.did]} + + )} + ) : ( - - )} - - - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > -

-
- {handles[user.did] && ( - @{handles[user.did]} + {selectedUser.did} )} - {user.did} -
- {user.is_super && ( - - Owner - - )} -
- - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > - {user.is_super - ? `${ALL_PERMISSIONS.length}/${ALL_PERMISSIONS.length}` - : `${user.permissions.length}/${ALL_PERMISSIONS.length}`} - - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > - {new Date(user.created_at).toLocaleString()} - - - setExpandedUserId( - expandedUserId === user.id ? null : user.id - ) - } - > - {user.last_used_at - ? new Date(user.last_used_at).toLocaleString() - : "Never"} - - -
- {isCurrentUserSuper && ( - handleTransferSuper(user.id)} - /> +

+

{selectedUser.did}

+ {profiles[selectedUser.did]?.description && ( +

{profiles[selectedUser.did].description}

)} -
-
- - {expandedUserId === user.id && ( - - - + + +
+
+ Role +

+ {selectedUser.is_super ? ( + Owner + ) : "Member"} +

+
+
+ Permissions +

+ {selectedUser.is_super + ? `${allPermissionKeys.length}/${allPermissionKeys.length}` + : `${selectedUser.permissions.filter((p) => allPermissionKeys.includes(p)).length}/${allPermissionKeys.length}`} +

+
+
+ Created +

{new Date(selectedUser.created_at).toLocaleString()}

+
+
+ Last Active +

+ {selectedUser.last_used_at + ? new Date(selectedUser.last_used_at).toLocaleString() + : "Never"} +

+
+
+ +
+ +
+ + setPermSearch(e.target.value)} + className="pl-9" + /> +
+ +
+ +
+ + +
+ {isCurrentUserSuper && ( + handleTransferSuper(selectedUser.id)} /> - - - )} - - ))} - - -
+ )} + +
+ + + )} +
+
+ ); + })()}
); @@ -350,47 +439,50 @@ function PermissionsPanel({ isSelf, currentUserPermissions, isCurrentUserSuper, + filteredCategories, onToggle, }: { user: UserSummary; isSelf: boolean; currentUserPermissions: string[]; isCurrentUserSuper: boolean; + filteredCategories: Record; onToggle: (user: UserSummary, permission: string, enabled: boolean) => void; }) { const canUpdate = isCurrentUserSuper || currentUserPermissions.includes("users:update"); return ( -
- {Object.entries(PERMISSION_CATEGORIES).map(([category, permissions]) => ( -
+
+ {Object.entries(filteredCategories).map(([category, permissions]) => ( +

{category}

-
+
{permissions.map((perm) => { - const enabled = user.is_super || user.permissions.includes(perm); + const enabled = user.is_super || user.permissions.includes(perm.key); return ( -
+
- onToggle(user, perm, checked) + onToggle(user, perm.key, checked) } - className="scale-75" + className="mt-0.5 scale-75" />
); @@ -422,14 +514,12 @@ function TransferOwnershipDialog({ @@ -457,8 +547,12 @@ function TransferOwnershipDialog({ function AddUserDialog({ onSuccess, + templates, + templatePermissions, }: { onSuccess: () => void; + templates: PermissionTemplate[]; + templatePermissions: Record; }) { const [did, setDid] = useState(""); const [template, setTemplate] = useState(""); @@ -511,8 +605,8 @@ function AddUserDialog({ - {TEMPLATES.map((t) => ( - + {templates.map((t) => ( + {t.label} ))} @@ -521,7 +615,7 @@ function AddUserDialog({
{template && (

- Grants {TEMPLATE_PERMISSIONS[template]?.length ?? 0} permissions. + Grants {templatePermissions[template]?.length ?? 0} permissions.

)}
-- 2.51.2 From cf4a9849bb46151804b7b34136b980f3c5910105 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 12 May 2026 11:12:49 -0500 Subject: [PATCH 115/250] fix: use correct permission IDs in dashboard fixes #24 Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/settings/users/page.tsx | 172 +++++++++++++----- web/src/components/ui/sonner.tsx | 4 + 2 files changed, 132 insertions(+), 44 deletions(-) diff --git a/web/src/app/dashboard/settings/users/page.tsx b/web/src/app/dashboard/settings/users/page.tsx index e41f8cd..6bb9f43 100644 --- a/web/src/app/dashboard/settings/users/page.tsx +++ b/web/src/app/dashboard/settings/users/page.tsx @@ -2,6 +2,7 @@ import React, { useCallback, useEffect, useMemo, useState } from "react"; import { ChevronRight, Search, Shield, Trash2 } from "lucide-react"; +import { toast } from "sonner"; import { useAuth } from "@/lib/auth-context"; import { @@ -76,6 +77,8 @@ export default function UsersPage() { const [handles, setHandles] = useState>({}); const [error, setError] = useState(null); const [selectedUserId, setSelectedUserId] = useState(null); + const [pendingPermissions, setPendingPermissions] = useState([]); + const [saving, setSaving] = useState(false); const [permSearch, setPermSearch] = useState(""); const [permissionEntries, setPermissionEntries] = useState([]); const [profiles, setProfiles] = useState>({}); @@ -141,6 +144,13 @@ export default function UsersPage() { } }, [users, handles]); + // Initialize pending permissions when a user is selected + useEffect(() => { + if (!selectedUserId) return; + const user = users.find((u) => u.id === selectedUserId); + if (user) setPendingPermissions([...user.permissions]); + }, [selectedUserId, users]); + // Fetch Bluesky profile when a user is selected useEffect(() => { if (!selectedUserId) return; @@ -171,53 +181,59 @@ export default function UsersPage() { } } - async function handleTogglePermission( - user: UserSummary, + function handleTogglePermission( + _user: UserSummary, permission: string, enabled: boolean ) { - const grant: string[] = []; - const revoke: string[] = []; - - const [ns, action] = permission.split(":"); - - if (enabled) { - grant.push(permission); - // Adding a write permission also enables its read counterpart - if (action === "create" || action === "update" || action === "delete") { - const readPerm = `${ns}:read`; - if (!user.permissions.includes(readPerm)) { - grant.push(readPerm); - } - } - // Adding records:delete-collection also enables records:delete - if (permission === "records:delete-collection" && !user.permissions.includes("records:delete")) { - grant.push("records:delete"); - } - } else { - revoke.push(permission); - // Removing read also removes all write permissions in the same namespace - if (action === "read") { - for (const p of user.permissions) { - if (p.startsWith(`${ns}:`) && p !== permission) { - revoke.push(p); + setPendingPermissions((prev) => { + const perms = new Set(prev); + const [ns, action] = permission.split(":"); + + const nsReadPerm = allPermissionKeys.find( + (k) => k.startsWith(`${ns}:`) && (k.endsWith(":read") || k.endsWith(":view")) + ); + const isReadAction = action === "read" || action === "view"; + + if (enabled) { + perms.add(permission); + if (!isReadAction && nsReadPerm) perms.add(nsReadPerm); + if (permission === "records:delete-collection") perms.add("records:delete"); + } else { + perms.delete(permission); + if (isReadAction) { + for (const p of prev) { + if (p.startsWith(`${ns}:`) && p !== permission) perms.delete(p); } } + if (permission === "records:delete") perms.delete("records:delete-collection"); } - // Removing records:delete also removes records:delete-collection - if (permission === "records:delete" && user.permissions.includes("records:delete-collection")) { - revoke.push("records:delete-collection"); - } - } + return [...perms]; + }); + } + + async function handleSavePermissions(userId: string, originalPermissions: string[]) { + const originalSet = new Set(originalPermissions); + const pendingSet = new Set(pendingPermissions); + + const grant = pendingPermissions.filter((p) => !originalSet.has(p)); + const revoke = originalPermissions.filter((p) => !pendingSet.has(p)); + + if (grant.length === 0 && revoke.length === 0) return; + + setSaving(true); try { const body: { grant?: string[]; revoke?: string[] } = {}; if (grant.length > 0) body.grant = grant; if (revoke.length > 0) body.revoke = revoke; - await updateUserPermissions(user.id, body); + await updateUserPermissions(userId, body); + toast.success("Permissions updated"); load(); } catch (e: unknown) { setError(e instanceof Error ? e.message : String(e)); + } finally { + setSaving(false); } } @@ -307,8 +323,27 @@ export default function UsersPage() { {(() => { const selectedUser = users.find((u) => u.id === selectedUserId); return ( - { if (!open) { setSelectedUserId(null); setPermSearch(""); } }}> - + { + if (!open) { + const user = users.find((u) => u.id === selectedUserId); + if (user) { + const origSet = new Set(user.permissions); + const pendSet = new Set(pendingPermissions); + const unsaved = pendingPermissions.some((p) => !origSet.has(p)) || user.permissions.some((p) => !pendSet.has(p)); + if (unsaved) { + toast.warning("You have unsaved changes. Save or cancel before closing."); + return; + } + } + setSelectedUserId(null); + setPermSearch(""); + } + }}> + { + if (e.target instanceof HTMLElement && e.target.closest("[data-sonner-toaster]")) { + e.preventDefault(); + } + }}> {selectedUser && ( <> @@ -349,6 +384,14 @@ export default function UsersPage() { + {(() => { + const originalSet = new Set(selectedUser.permissions); + const pendingSet = new Set(pendingPermissions); + const added = pendingPermissions.filter((p) => !originalSet.has(p)).length; + const removed = selectedUser.permissions.filter((p) => !pendingSet.has(p)).length; + const hasChanges = added > 0 || removed > 0; + return ( + <>
Role @@ -363,7 +406,14 @@ export default function UsersPage() {

{selectedUser.is_super ? `${allPermissionKeys.length}/${allPermissionKeys.length}` - : `${selectedUser.permissions.filter((p) => allPermissionKeys.includes(p)).length}/${allPermissionKeys.length}`} + : `${pendingPermissions.filter((p) => allPermissionKeys.includes(p)).length}/${allPermissionKeys.length}`} + {hasChanges && ( + + {added > 0 && +{added}} + {added > 0 && removed > 0 && " "} + {removed > 0 && -{removed}} + + )}

@@ -399,12 +449,23 @@ export default function UsersPage() { currentUserPermissions={currentUser?.permissions ?? []} isCurrentUserSuper={isCurrentUserSuper} filteredCategories={filteredCategories} + pendingPermissions={pendingPermissions} + originalPermissions={selectedUser.permissions} onToggle={handleTogglePermission} />
-
+
+ {isCurrentUserSuper && ( handleTransferSuper(selectedUser.id)} /> )} +
+
+
+ + ); + })()} )} @@ -440,6 +512,8 @@ function PermissionsPanel({ currentUserPermissions, isCurrentUserSuper, filteredCategories, + pendingPermissions, + originalPermissions, onToggle, }: { user: UserSummary; @@ -447,9 +521,12 @@ function PermissionsPanel({ currentUserPermissions: string[]; isCurrentUserSuper: boolean; filteredCategories: Record; + pendingPermissions: string[]; + originalPermissions: string[]; onToggle: (user: UserSummary, permission: string, enabled: boolean) => void; }) { const canUpdate = isCurrentUserSuper || currentUserPermissions.includes("users:update"); + const originalSet = new Set(originalPermissions); return (
@@ -460,7 +537,10 @@ function PermissionsPanel({

{permissions.map((perm) => { - const enabled = user.is_super || user.permissions.includes(perm.key); + const enabled = user.is_super || pendingPermissions.includes(perm.key); + const wasEnabled = user.is_super || originalSet.has(perm.key); + const isAdded = enabled && !wasEnabled; + const isRemoved = !enabled && wasEnabled; return (
- {perm.name} + + {perm.name} + {isAdded && } + {isRemoved && } + {perm.description}
diff --git a/web/src/components/ui/sonner.tsx b/web/src/components/ui/sonner.tsx index 9b20afe..7a41a46 100644 --- a/web/src/components/ui/sonner.tsx +++ b/web/src/components/ui/sonner.tsx @@ -17,6 +17,7 @@ const Toaster = ({ ...props }: ToasterProps) => { , info: , @@ -30,6 +31,9 @@ const Toaster = ({ ...props }: ToasterProps) => { "--normal-text": "var(--popover-foreground)", "--normal-border": "var(--border)", "--border-radius": "var(--radius)", + "--toast-close-button-start": "unset", + "--toast-close-button-end": "0", + "--toast-close-button-transform": "translate(35%, -35%)", } as React.CSSProperties } {...props} -- 2.51.2 From 4e74bcd03373acfaad7181219e747034a5194058 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 11:09:32 -0500 Subject: [PATCH 116/250] fix: bulk insert in discovery, seed records on resume, dedupe retry helper, add cancel tests Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 78 +++++++++++++------------ src/http_retry.rs | 23 ++++++++ src/lib.rs | 1 + src/profile.rs | 22 +------ tests/e2e_admin.rs | 131 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 198 insertions(+), 57 deletions(-) create mode 100644 src/http_retry.rs diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index d0fc378..7534db5 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -14,33 +14,10 @@ use crate::AppState; use crate::db::{adapt_sql, now_rfc3339}; use crate::error::AppError; use crate::event_log::{EventLog, Severity, log_event}; +use crate::http_retry::parse_retry_after; use crate::profile; use crate::record_handler::{self, RecordEvent}; -/// Parse rate-limit sleep duration from response headers. -/// Checks `RateLimit-Reset` (Unix timestamp, used by XRPC servers) first, -/// then `retry-after` (seconds), defaulting to 5s. -fn parse_retry_after(headers: &reqwest::header::HeaderMap) -> u64 { - if let Some(reset) = headers - .get("ratelimit-reset") - .and_then(|v| v.to_str().ok()) - .and_then(|v| v.parse::().ok()) - { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap_or_default() - .as_secs() as i64; - let wait = (reset - now).max(1) as u64; - return wait.min(120); - } - - headers - .get("retry-after") - .and_then(|v| v.to_str().ok()) - .and_then(|v| v.parse::().ok()) - .unwrap_or(5) -} - use super::auth::UserAuth; use super::permissions::Permission; use super::types::{BackfillJob, CreateBackfillBody}; @@ -249,6 +226,7 @@ async fn discover_repos_from_relay( ) -> Result<(), String> { let base = state.config.relay_url.trim_end_matches('/'); let mut cursor: Option = None; + let mut running_total: i32 = count_repos(state, job_id).await; loop { let mut url = format!( @@ -287,20 +265,34 @@ async fn discover_repos_from_relay( let page_count = body.repos.len(); - for repo in &body.repos { - let sql = adapt_sql( - "INSERT INTO backfill_repos (job_id, did) VALUES (?, ?) ON CONFLICT DO NOTHING", - state.db_backend, + if !body.repos.is_empty() { + let base_sql = "INSERT INTO backfill_repos (job_id, did) VALUES "; + let placeholders: Vec = body + .repos + .iter() + .enumerate() + .map(|(i, _)| { + if state.db_backend == crate::db::DatabaseBackend::Postgres { + format!("(${}, ${})", i * 2 + 1, i * 2 + 2) + } else { + "(?, ?)".to_string() + } + }) + .collect(); + let sql = format!( + "{base_sql}{} ON CONFLICT DO NOTHING", + placeholders.join(", ") ); - let _ = sqlx::query(&sql) - .bind(job_id) - .bind(&repo.did) - .execute(&state.db) - .await; + + let mut query = sqlx::query(&sql); + for repo in &body.repos { + query = query.bind(job_id).bind(&repo.did); + } + let _ = query.execute(&state.db).await; } - let total = count_repos(state, job_id).await; - update_job_counter(state, job_id, "total_repos", total).await; + running_total += page_count as i32; + update_job_counter(state, job_id, "total_repos", running_total).await; if is_cancelled(state, job_id).await { return Ok(()); @@ -413,8 +405,22 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin // Reset processed_repos for the fetching phase update_job_counter(state, job_id, "processed_repos", already_completed).await; + // Seed total_records from DB so a resumed job doesn't lose its prior count + let existing_records: i32 = { + let sql = adapt_sql( + "SELECT total_records FROM backfill_jobs WHERE id = ?", + state.db_backend, + ); + sqlx::query_as::<_, (Option,)>(&sql) + .bind(job_id) + .fetch_one(&state.db) + .await + .map(|(c,)| c.unwrap_or(0)) + .unwrap_or(0) + }; + let processed_repos = Arc::new(AtomicI32::new(already_completed)); - let total_records = Arc::new(AtomicI32::new(0)); + let total_records = Arc::new(AtomicI32::new(existing_records)); let cancelled = Arc::new(AtomicBool::new(false)); let state = Arc::new(state.clone()); let collections = Arc::new(collections.to_vec()); diff --git a/src/http_retry.rs b/src/http_retry.rs new file mode 100644 index 0000000..67c9898 --- /dev/null +++ b/src/http_retry.rs @@ -0,0 +1,23 @@ +/// Parse rate-limit sleep duration from response headers. +/// Checks `RateLimit-Reset` (Unix timestamp, used by XRPC servers) first, +/// then `retry-after` (seconds), defaulting to 5s. +pub fn parse_retry_after(headers: &reqwest::header::HeaderMap) -> u64 { + if let Some(reset) = headers + .get("ratelimit-reset") + .and_then(|v| v.to_str().ok()) + .and_then(|v| v.parse::().ok()) + { + let now = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_secs() as i64; + let wait = (reset - now).max(1) as u64; + return wait.min(120); + } + + headers + .get("retry-after") + .and_then(|v| v.to_str().ok()) + .and_then(|v| v.parse::().ok()) + .unwrap_or(5) +} diff --git a/src/lib.rs b/src/lib.rs index d467b65..fe19b38 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,7 @@ pub mod event_log; pub mod external_auth; pub mod feature_flags; pub mod feature_middleware; +pub mod http_retry; pub mod jetstream; pub mod labeler; pub mod lexicon; diff --git a/src/profile.rs b/src/profile.rs index 298ea01..1a1d350 100644 --- a/src/profile.rs +++ b/src/profile.rs @@ -1,27 +1,7 @@ use serde::{Deserialize, Serialize}; use crate::error::AppError; - -fn parse_retry_after(headers: &reqwest::header::HeaderMap) -> u64 { - if let Some(reset) = headers - .get("ratelimit-reset") - .and_then(|v| v.to_str().ok()) - .and_then(|v| v.parse::().ok()) - { - let now = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap_or_default() - .as_secs() as i64; - let wait = (reset - now).max(1) as u64; - return wait.min(120); - } - - headers - .get("retry-after") - .and_then(|v| v.to_str().ok()) - .and_then(|v| v.parse::().ok()) - .unwrap_or(5) -} +use crate::http_retry::parse_retry_after; #[derive(Serialize)] pub struct Profile { diff --git a/tests/e2e_admin.rs b/tests/e2e_admin.rs index 0911bc8..8952859 100644 --- a/tests/e2e_admin.rs +++ b/tests/e2e_admin.rs @@ -561,6 +561,137 @@ async fn backfill_list_jobs() { assert_eq!(json.as_array().unwrap().len(), 1); } +#[tokio::test] +#[serial] +async fn backfill_cancel_running_job() { + common::require_db!(); + let app = TestApp::new().await; + let backend = app.state.db_backend; + + // Insert a running job directly so we don't need a real relay. + let job_id = uuid::Uuid::new_v4().to_string(); + let now = now_rfc3339(); + let sql = adapt_sql( + "INSERT INTO backfill_jobs (id, status, stage, started_at, created_at) VALUES (?, 'running', 'discovering_repos', ?, ?)", + backend, + ); + sqlx::query(&sql) + .bind(&job_id) + .bind(&now) + .bind(&now) + .execute(&app.state.db) + .await + .unwrap(); + + let resp = app + .router + .clone() + .oneshot(admin_post( + &format!("/admin/backfill/{job_id}/cancel"), + app.admin_cookie(), + &json!({}), + )) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let json = json_body(resp).await; + assert_eq!(json["id"], job_id); + assert_eq!(json["status"], "cancelling"); +} + +#[tokio::test] +#[serial] +async fn backfill_cancel_already_cancelling_is_idempotent() { + common::require_db!(); + let app = TestApp::new().await; + let backend = app.state.db_backend; + + let job_id = uuid::Uuid::new_v4().to_string(); + let now = now_rfc3339(); + let sql = adapt_sql( + "INSERT INTO backfill_jobs (id, status, stage, started_at, created_at) VALUES (?, 'cancelling', 'fetching_records', ?, ?)", + backend, + ); + sqlx::query(&sql) + .bind(&job_id) + .bind(&now) + .bind(&now) + .execute(&app.state.db) + .await + .unwrap(); + + let resp = app + .router + .clone() + .oneshot(admin_post( + &format!("/admin/backfill/{job_id}/cancel"), + app.admin_cookie(), + &json!({}), + )) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::OK); + let json = json_body(resp).await; + assert_eq!(json["status"], "cancelling"); +} + +#[tokio::test] +#[serial] +async fn backfill_cancel_completed_returns_400() { + common::require_db!(); + let app = TestApp::new().await; + let backend = app.state.db_backend; + + let job_id = uuid::Uuid::new_v4().to_string(); + let now = now_rfc3339(); + let sql = adapt_sql( + "INSERT INTO backfill_jobs (id, status, stage, completed_at, created_at) VALUES (?, 'completed', 'completed', ?, ?)", + backend, + ); + sqlx::query(&sql) + .bind(&job_id) + .bind(&now) + .bind(&now) + .execute(&app.state.db) + .await + .unwrap(); + + let resp = app + .router + .clone() + .oneshot(admin_post( + &format!("/admin/backfill/{job_id}/cancel"), + app.admin_cookie(), + &json!({}), + )) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::BAD_REQUEST); +} + +#[tokio::test] +#[serial] +async fn backfill_cancel_not_found_returns_404() { + common::require_db!(); + let app = TestApp::new().await; + + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/backfill/nonexistent-id/cancel", + app.admin_cookie(), + &json!({}), + )) + .await + .unwrap(); + + assert_eq!(resp.status(), StatusCode::NOT_FOUND); +} + // --------------------------------------------------------------------------- // Admin management // --------------------------------------------------------------------------- -- 2.51.2 From 2947a908ba5251a43346c727cc7c508bc0cc67d8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 11:39:45 -0500 Subject: [PATCH 117/250] fix: chunk bulk inserts for sqlite, use rows_affected for counts, faster cancel checks, users page a11y Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 55 +++++++++++-------- web/src/app/dashboard/settings/users/page.tsx | 17 +++++- 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 7534db5..238b796 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -266,32 +266,41 @@ async fn discover_repos_from_relay( let page_count = body.repos.len(); if !body.repos.is_empty() { - let base_sql = "INSERT INTO backfill_repos (job_id, did) VALUES "; - let placeholders: Vec = body - .repos - .iter() - .enumerate() - .map(|(i, _)| { - if state.db_backend == crate::db::DatabaseBackend::Postgres { - format!("(${}, ${})", i * 2 + 1, i * 2 + 2) - } else { - "(?, ?)".to_string() - } - }) - .collect(); - let sql = format!( - "{base_sql}{} ON CONFLICT DO NOTHING", - placeholders.join(", ") - ); + // SQLite has a 999 bound-parameter limit; each row uses 2 params + let chunk_size = if state.db_backend == crate::db::DatabaseBackend::Sqlite { + 499 + } else { + 1000 + }; + + for chunk in body.repos.chunks(chunk_size) { + let base_sql = "INSERT INTO backfill_repos (job_id, did) VALUES "; + let placeholders: Vec = chunk + .iter() + .enumerate() + .map(|(i, _)| { + if state.db_backend == crate::db::DatabaseBackend::Postgres { + format!("(${}, ${})", i * 2 + 1, i * 2 + 2) + } else { + "(?, ?)".to_string() + } + }) + .collect(); + let sql = format!( + "{base_sql}{} ON CONFLICT DO NOTHING", + placeholders.join(", ") + ); - let mut query = sqlx::query(&sql); - for repo in &body.repos { - query = query.bind(job_id).bind(&repo.did); + let mut query = sqlx::query(&sql); + for repo in chunk { + query = query.bind(job_id).bind(&repo.did); + } + if let Ok(result) = query.execute(&state.db).await { + running_total += result.rows_affected() as i32; + } } - let _ = query.execute(&state.db).await; } - running_total += page_count as i32; update_job_counter(state, job_id, "total_repos", running_total).await; if is_cancelled(state, job_id).await { @@ -491,7 +500,7 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin let repos = processed_repos.fetch_add(1, Ordering::Relaxed) + 1; - if repos % 100 == 0 { + if repos % 10 == 0 { let records = total_records.load(Ordering::Relaxed); let backend = state.db_backend; let sql = adapt_sql( diff --git a/web/src/app/dashboard/settings/users/page.tsx b/web/src/app/dashboard/settings/users/page.tsx index 6bb9f43..81e7d3d 100644 --- a/web/src/app/dashboard/settings/users/page.tsx +++ b/web/src/app/dashboard/settings/users/page.tsx @@ -53,7 +53,6 @@ import { SheetFooter, SheetHeader, SheetTitle, - SheetDescription, } from "@/components/ui/sheet"; type BskyProfile = { @@ -282,7 +281,19 @@ export default function UsersPage() { )} {users.map((user) => ( - setSelectedUserId(user.id)}> + setSelectedUserId(user.id)} + onKeyDown={(e) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + setSelectedUserId(user.id); + } + }} + >
@@ -433,7 +444,7 @@ export default function UsersPage() {
- + Date: Thu, 14 May 2026 11:53:24 -0500 Subject: [PATCH 118/250] fix: only count successful PDS resolutions, cap retry-after, update backfill docs Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/docs/guides/backfill.md | 4 ++-- src/admin/backfill.rs | 6 ++++-- src/http_retry.rs | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/docs/content/docs/guides/backfill.md b/packages/docs/content/docs/guides/backfill.md index da7cc42..642343a 100644 --- a/packages/docs/content/docs/guides/backfill.md +++ b/packages/docs/content/docs/guides/backfill.md @@ -34,7 +34,7 @@ A backfill job has both a `status` (overall state) and a `stage` (current phase) | `running` | Job is actively processing | | `cancelling` | Cancel requested, waiting for the worker to stop | | `cancelled` | Worker has stopped and cleaned up | -| `completed` | All repos processed successfully | +| `completed` | Worker finished processing all resolvable repos | | `failed` | An error occurred | The `stage` field tracks which phase the job is in: `pending`, `discovering_repos`, `resolving_pds`, `fetching_records`, `completed`, `failed`, or `cancelled`. @@ -44,7 +44,7 @@ The `stage` field tracks which phase the job is in: `pending`, `discovering_repo Running jobs can be cancelled via `POST /admin/backfill/{id}/cancel` or the Cancel button in the dashboard. Cancellation is two-phase: 1. The endpoint sets the job status to `cancelling`. -2. The worker checks for cancellation at natural checkpoints (between relay pages, every 100 DIDs during resolution, every 100 repos during fetching). When it detects the `cancelling` status, it stops work and sets the final status to `cancelled`. +2. The worker checks for cancellation at natural checkpoints (between relay pages, every 100 DIDs during resolution, every 10 repos during fetching). When it detects the `cancelling` status, it stops work and sets the final status to `cancelled`. This means there may be a short delay between clicking Cancel and the job fully stopping, depending on what the worker is doing at that moment. diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 238b796..553c3a5 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -346,6 +346,7 @@ async fn run_resolution_phase(state: &AppState, job_id: &str) { let mut resolved_count = already_resolved; + let mut attempted = already_resolved; for (did,) in &unresolved { match profile::resolve_pds_endpoint(&state.http, &state.config.plc_url, did).await { Ok(pds) => { @@ -359,13 +360,14 @@ async fn run_resolution_phase(state: &AppState, job_id: &str) { .bind(did) .execute(&state.db) .await; + resolved_count += 1; } Err(e) => { tracing::warn!(did, error = %e, "failed to resolve PDS endpoint, skipping DID"); } } - resolved_count += 1; - if resolved_count % 100 == 0 { + attempted += 1; + if attempted % 100 == 0 { update_job_counter(state, job_id, "processed_repos", resolved_count).await; if is_cancelled(state, job_id).await { return; diff --git a/src/http_retry.rs b/src/http_retry.rs index 67c9898..c1edb28 100644 --- a/src/http_retry.rs +++ b/src/http_retry.rs @@ -20,4 +20,5 @@ pub fn parse_retry_after(headers: &reqwest::header::HeaderMap) -> u64 { .and_then(|v| v.to_str().ok()) .and_then(|v| v.parse::().ok()) .unwrap_or(5) + .min(120) } -- 2.51.2 From 9342112328b5d0d7062df8c46f0fa0d3d7476051 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 12:56:25 -0500 Subject: [PATCH 119/250] docs: add blogs for 2.5, 2.6, and 2.7 releases Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/blog/happyview-2.5.md | 42 ++++++++++++++++ .../content/blog/happyview-2.6-and-2.7.md | 46 ++++++++++++++++++ .../releasing-happyview-2-into-the-wild.md | 2 +- .../img/happyview-2.5/experimental-page.png | Bin 0 -> 70283 bytes 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 packages/docs/content/blog/happyview-2.5.md create mode 100644 packages/docs/content/blog/happyview-2.6-and-2.7.md create mode 100644 packages/docs/public/img/happyview-2.5/experimental-page.png diff --git a/packages/docs/content/blog/happyview-2.5.md b/packages/docs/content/blog/happyview-2.5.md new file mode 100644 index 0000000..bfdacae --- /dev/null +++ b/packages/docs/content/blog/happyview-2.5.md @@ -0,0 +1,42 @@ +--- +title: "HappyView v2.5: Permissioned Spaces" +description: "Private groups, invite-only communities, and gated content come to atproto." +date: 2026-05-08 +author: + name: "Trezy" + avatar: "/authors/trezy.webp" +tags: + - announcements +--- + +HappyView 2.5 is out, and it ships with one of the most anticipated features in the [atproto](https://atproto.com) ecosystem: + +✨ Permissioned Spaces. ✨ + +## The problem + +ATProto is public by default. That's great for open social graphs, but not so great for private groups, invite-only communities, or gated content. If you wanted access-controlled data, you were mostly out of luck. + +Spaces fix that. They give you private, access-controlled data under your existing DID. + +## What this means for HappyView + +Because HappyView is [lexicon-driven](/guides/getting-started), Spaces integrate naturally with everything you've already built. All of your scripts can query Spaces directly for membership checks, access levels, private record queries, and more. Custom lexicons can build on top of Spaces today without waiting for anything else to land. + +## Here be dragons + +The whole feature is experimental, and it's gated behind a feature flag. You can enable it from the new "Experimental" page in the dashboard. + +![The Experimental page in the HappyView dashboard](/img/blog/happyview-2.5/experimental-page.png) + +Give it a try, tell me what breaks, and tell me what you want to work differently. + +## Standing on shoulders + +All of the work on Permissioned Spaces follows [Daniel Holmgren's](https://bsky.app/profile/dholms.at) Permissioned Data Diaries. Big credit to [Zicklag's](https://bsky.app/profile/zicklag.dev) work on Arbiter and [flo-bit's](https://bsky.app/profile/flo-bit.dev) work on [Contrail](https://flo-bit.dev/contrail). We're actively working to make sure Spaces will be compatible between HappyView and Contrail as things evolve. + +## Go get some + +Check out [the documentation](https://happyview.dev) and give it a shot! + +We've been talking about permissioned data for forever, and now it's here. I'm excited to see what y'all do with it. diff --git a/packages/docs/content/blog/happyview-2.6-and-2.7.md b/packages/docs/content/blog/happyview-2.6-and-2.7.md new file mode 100644 index 0000000..ee61fe7 --- /dev/null +++ b/packages/docs/content/blog/happyview-2.6-and-2.7.md @@ -0,0 +1,46 @@ +--- +title: "HappyView v2.6 + v2.7" +description: "Base path support, a Node.js SDK, security hardening, and a pile of quality-of-life fixes." +date: 2026-05-12 +author: + name: "Trezy" + avatar: "/authors/trezy.webp" +tags: + - announcements +--- + +Two releases in two days. v2.6 landed on May 12th and v2.7 followed the next day. Neither one has a single marquee feature like [Permissioned Spaces](/blog/happyview-2.5), but together they make the whole system noticeably more solid. + +## Base path support + +HappyView can now run on a subpath to make it easier to use behind a reverse proxy. If your setup already serves something at the root and you want HappyView at `/appview` or `/api`, that just works now. The dashboard, OAuth flows, and XRPC routes all respect the configured base path. + +## Node.js SDK + +v2 shipped with browser and generic OAuth client packages. v2.6 added the code for a Node.js-specific OAuth client, and v2.7 published it to npm: + +- [**`@happyview/oauth-client-node`**](https://npmx.dev/package/@happyview/oauth-client-node) — For server-side Node.js applications that need to authenticate against a HappyView instance. + +This rounds out the SDK story. You've got [`@happyview/oauth-client-browser`](https://npmx.dev/package/@happyview/oauth-client-browser) for the browser, [`@happyview/oauth-client`](https://npmx.dev/package/@happyview/oauth-client) for custom or low-level work, and now `oauth-client-node` for server-side apps. All three SDKs were also updated in v2.6 to more closely match their [`@atproto`](https://github.com/bluesky-social/atproto) counterparts, so if you're already using the official SDK the APIs should feel familiar. + +## Security hardening + +v2.6 includes a batch of security fixes: + +- **Privilege escalation prevention** — closed a path that could allow unauthorized permission changes. +- **JWT expiry precision** — tokens are now rejected at the exact expiry second, not after. +- **Rate limiting before rejection** — unauthenticated procedure requests are rate-limited before being rejected, preventing abuse of error responses. +- **Client key enforcement** — rate limiting is now enforced on all XRPC routes, not just a subset. +- **Space credential scoping** — Bearer space credentials are now restricted to space XRPC routes only. + +## Everything else + +- **TID functions** in Lua scripting for generating and working with [TIDs](https://atproto.com/specs/record-key#record-key-type-tid). +- **XRPC proxy settings** in the dashboard for controlling proxy behavior. +- **Experiments page** in the dashboard for toggling feature flags (like the one behind Permissioned Spaces). +- **Dead letter fixes** — dead letters now always get an ID, fixing an issue where some could be created without one ([#20](https://github.com/gamesgamesgamesgamesgames/happyview/issues/20)). +- **Space pagination** — cursors now work correctly when paginating through spaces. + +## Go get some + +Full changelogs: [v2.6.0](https://github.com/gamesgamesgamesgamesgames/happyview/releases/tag/v2.6.0), [v2.7.0](https://github.com/gamesgamesgamesgamesgames/happyview/releases/tag/v2.7.0). If you have questions, feature requests, or just need a little help, join the [Cartridge](https://cartridge.dev) [Discord Server](https://discord.gg/BUPnjaBwRZ) and hop into the `#happyview` channel. diff --git a/packages/docs/content/blog/releasing-happyview-2-into-the-wild.md b/packages/docs/content/blog/releasing-happyview-2-into-the-wild.md index 2496f22..729ca0c 100644 --- a/packages/docs/content/blog/releasing-happyview-2-into-the-wild.md +++ b/packages/docs/content/blog/releasing-happyview-2-into-the-wild.md @@ -1,7 +1,7 @@ --- title: "Releasing HappyView 2 Into the Wild" description: "One binary, no companion services, and a lot fewer moving parts." -date: 2026-05-13 +date: 2026-04-24 author: name: "Trezy" avatar: "/authors/trezy.webp" diff --git a/packages/docs/public/img/happyview-2.5/experimental-page.png b/packages/docs/public/img/happyview-2.5/experimental-page.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b9a0c84756c470db88453d8fd50b01278b7d87 GIT binary patch literal 70283 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 literal 0 HcmV?d00001 -- 2.51.2 From 35861d39ff55c970c7a0a622aa30cdb9976f48a4 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 14:02:37 -0500 Subject: [PATCH 120/250] ci: prevent action credentials from breaking merge to dev Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/merge-main-to-dev.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/merge-main-to-dev.yml b/.github/workflows/merge-main-to-dev.yml index a923be4..96221c3 100644 --- a/.github/workflows/merge-main-to-dev.yml +++ b/.github/workflows/merge-main-to-dev.yml @@ -19,6 +19,7 @@ jobs: with: fetch-depth: 0 ref: dev + persist-credentials: false - name: Merge main into dev env: -- 2.51.2 From 2ea33aae4b0ffaa832fca1200fdd8e03fa3a6bbe Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 14:08:08 -0500 Subject: [PATCH 121/250] docs: move image to the right spot Signed-off-by: Trezy Signed-off-by: Trezy --- .../{ => blog}/happyview-2.5/experimental-page.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/docs/public/img/{ => blog}/happyview-2.5/experimental-page.png (100%) diff --git a/packages/docs/public/img/happyview-2.5/experimental-page.png b/packages/docs/public/img/blog/happyview-2.5/experimental-page.png similarity index 100% rename from packages/docs/public/img/happyview-2.5/experimental-page.png rename to packages/docs/public/img/blog/happyview-2.5/experimental-page.png -- 2.51.2 From 64d8982183fc94eb7b1c4d58f9c5c43f0f03e7fc Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 14:15:08 -0500 Subject: [PATCH 122/250] docs: fix publish data Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/blog/happyview-2.6-and-2.7.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/content/blog/happyview-2.6-and-2.7.md b/packages/docs/content/blog/happyview-2.6-and-2.7.md index ee61fe7..2a12e2c 100644 --- a/packages/docs/content/blog/happyview-2.6-and-2.7.md +++ b/packages/docs/content/blog/happyview-2.6-and-2.7.md @@ -1,7 +1,7 @@ --- title: "HappyView v2.6 + v2.7" description: "Base path support, a Node.js SDK, security hardening, and a pile of quality-of-life fixes." -date: 2026-05-12 +date: 2026-05-14 author: name: "Trezy" avatar: "/authors/trezy.webp" -- 2.51.2 From 64737c02492d9f673fe71ac0cc6a82360a1b3f7a Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 14:42:58 -0500 Subject: [PATCH 123/250] docs: 2.8 release article Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/blog/happyview-2.8.md | 35 +++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/docs/content/blog/happyview-2.8.md diff --git a/packages/docs/content/blog/happyview-2.8.md b/packages/docs/content/blog/happyview-2.8.md new file mode 100644 index 0000000..c09f49c --- /dev/null +++ b/packages/docs/content/blog/happyview-2.8.md @@ -0,0 +1,35 @@ +--- +title: "HappyView v2.8" +description: "Backfill cancellation, a rebuilt permission system, and a brand new docs site." +date: 2026-05-14 +author: + name: "Trezy" + avatar: "/authors/trezy.webp" +tags: + - announcements +--- + +v2.8 is mostly bug fixes, but Backfills did get a serious overhaul. The permissions page was also rebuilt to be much more useful, and the docs site has a whole new look. + +## Backfills, but like way better + +Backfills have always _worked_, but at the same time they've been a little quirky. v2.8 rewrites most of the backfill pipeline: + +- **Cancellation** — you can now cancel a running backfill. Cancellation is two-phase: the UI requests it, and the worker picks it up at the next checkpoint so nothing gets left in a half-finished state. +- **Resume** — backfills that get interrupted (server restart, crash) now properly resume where they left off instead of silently failing. +- **Retry logic** — rate limits from PDS endpoints and the PLC directory are handled with proper backoff using `RateLimit-Reset` headers, with a capped `retry-after` fallback. +- **Progress tracking** — the dashboard does a better job of communicating a backfill job's current stage (discovering repos, resolving PDS endpoints, fetching records), and it updates much more frequently than it used to. + +## Permission system rebuild + +The permission system had a few rough edges. Ghost permissions ([#23](https://github.com/gamesgamesgamesgamesgames/happyview/issues/23)), and some permissions couldn't be toggled after user creation ([#24](https://github.com/gamesgamesgamesgamesgames/happyview/issues/24)). Both are fixed, and the dashboard for managing permissions got a massive refresh. + +## New docs site + +The documentation [happyview.dev](https://happyview.dev) has been completely rebuilt on [Fumadocs](https://fumadocs.vercel.app). It's faster, has proper search, multi-language code examples, and a vaporwave theme because fuck yeah. There's also a [blog](/blog) now. You're reading it, and you're welcome. + +Oh, the vaporwave theme can be... well it's a lot. The animations, gradients, glows... It does, however, respects `prefers-reduced-motion`, and I've added a toggle to the sidebar to disable motion if you can't or don't otherwise want to enable your `prefers-reduced-motion` setting. + +## Roll that beautiful ~~bean~~ HappyView footage + +Full changelog is on [GitHub](https://github.com/gamesgamesgamesgamesgames/happyview/releases/tag/v2.8.0). If you have questions, feature requests, or just need a little help, join the [Cartridge](https://cartridge.dev) [Discord Server](https://discord.gg/BUPnjaBwRZ) and hop into the `#happyview` channel. -- 2.51.2 From eb882f3ff24970625e4fb9b6061f02fef468c041 Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 14:47:51 -0500 Subject: [PATCH 124/250] ci: update paths filter action Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 637a157..427c506 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: - name: Detect changed paths id: filter - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@v4 with: filters: | server: -- 2.51.2 From cb9289fe13c78f1b41fcf4abba74d5d94ae3e1ff Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 15:27:17 -0500 Subject: [PATCH 125/250] docs: fix release dates Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/blog/happyview-2.6-and-2.7.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/docs/content/blog/happyview-2.6-and-2.7.md b/packages/docs/content/blog/happyview-2.6-and-2.7.md index 2a12e2c..56433f8 100644 --- a/packages/docs/content/blog/happyview-2.6-and-2.7.md +++ b/packages/docs/content/blog/happyview-2.6-and-2.7.md @@ -1,7 +1,7 @@ --- title: "HappyView v2.6 + v2.7" description: "Base path support, a Node.js SDK, security hardening, and a pile of quality-of-life fixes." -date: 2026-05-14 +date: 2026-05-13 author: name: "Trezy" avatar: "/authors/trezy.webp" @@ -9,7 +9,7 @@ tags: - announcements --- -Two releases in two days. v2.6 landed on May 12th and v2.7 followed the next day. Neither one has a single marquee feature like [Permissioned Spaces](/blog/happyview-2.5), but together they make the whole system noticeably more solid. +Two releases in two days. v2.6, followed closely by v2.7. Neither one has a single marquee feature like [Permissioned Spaces](/blog/happyview-2.5), but together they make the whole system noticeably more solid. ## Base path support -- 2.51.2 From 74b8603116286917ba78302d40fda46b0f998c6e Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 14 May 2026 16:16:06 -0500 Subject: [PATCH 126/250] docs: fix links in site Signed-off-by: Trezy Signed-off-by: Trezy --- bun.lock | 2 ++ packages/docs/package.json | 2 ++ packages/docs/source.config.ts | 3 ++- packages/docs/src/lib/remark-strip-md-extension.ts | 12 ++++++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 packages/docs/src/lib/remark-strip-md-extension.ts diff --git a/bun.lock b/bun.lock index 183351d..78347db 100644 --- a/bun.lock +++ b/bun.lock @@ -18,6 +18,7 @@ "dependencies": { "@happyview/design-system": "workspace:*", "@tailwindcss/postcss": "^4.2.0", + "@types/mdast": "^4.0.4", "@types/mdx": "^2.0.13", "fumadocs-core": "^16.8.10", "fumadocs-mdx": "^15.0.4", @@ -29,6 +30,7 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "tailwindcss": "^4.2.0", + "unist-util-visit": "^5.1.0", "zod": "^4.4.3", }, "devDependencies": { diff --git a/packages/docs/package.json b/packages/docs/package.json index 03bb418..e035f81 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -11,6 +11,7 @@ "dependencies": { "@happyview/design-system": "workspace:*", "@tailwindcss/postcss": "^4.2.0", + "@types/mdast": "^4.0.4", "@types/mdx": "^2.0.13", "fumadocs-core": "^16.8.10", "fumadocs-mdx": "^15.0.4", @@ -22,6 +23,7 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "tailwindcss": "^4.2.0", + "unist-util-visit": "^5.1.0", "zod": "^4.4.3" }, "devDependencies": { diff --git a/packages/docs/source.config.ts b/packages/docs/source.config.ts index a6d35b1..720c16d 100644 --- a/packages/docs/source.config.ts +++ b/packages/docs/source.config.ts @@ -1,5 +1,6 @@ import { defineDocs, defineConfig, frontmatterSchema } from 'fumadocs-mdx/config'; import { remarkMdxMermaid, remarkCodeTab } from 'fumadocs-core/mdx-plugins'; +import { remarkStripMdExtension } from './src/lib/remark-strip-md-extension'; import { z } from 'zod'; const neonLagoonDark = { @@ -124,7 +125,7 @@ export const blog = defineDocs({ export default defineConfig({ mdxOptions: { - remarkPlugins: [remarkMdxMermaid, remarkCodeTab], + remarkPlugins: [remarkStripMdExtension, remarkMdxMermaid, remarkCodeTab], rehypeCodeOptions: { themes: { light: neonLagoonLight, diff --git a/packages/docs/src/lib/remark-strip-md-extension.ts b/packages/docs/src/lib/remark-strip-md-extension.ts new file mode 100644 index 0000000..61f9a19 --- /dev/null +++ b/packages/docs/src/lib/remark-strip-md-extension.ts @@ -0,0 +1,12 @@ +import { visit } from 'unist-util-visit'; +import type { Root } from 'mdast'; + +export function remarkStripMdExtension() { + return (tree: Root) => { + visit(tree, 'link', (node) => { + if (node.url && !node.url.startsWith('http')) { + node.url = node.url.replace(/\.md(#|$)/, '$1'); + } + }); + }; +} -- 2.51.2 From 606c752a79229845c9936709d7140a327524c4f4 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 19 May 2026 15:17:38 -0500 Subject: [PATCH 127/250] fix: delegate to backend for network lexicon resolution fixes #49 Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/mod.rs | 4 +++ src/admin/network_lexicons.rs | 28 +++++++++++++++++++++ web/src/app/dashboard/lexicons/new/page.tsx | 16 ++++++++---- web/src/lib/api.ts | 12 +++++++++ 4 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/admin/mod.rs b/src/admin/mod.rs index d4077ac..fa7722a 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -63,6 +63,10 @@ pub fn admin_routes(_state: AppState) -> Router { "/network-lexicons", post(network_lexicons::add).get(network_lexicons::list), ) + .route( + "/network-lexicons/resolve/{nsid}", + get(network_lexicons::resolve), + ) .route("/network-lexicons/{nsid}", delete(network_lexicons::remove)) .route( "/script-variables", diff --git a/src/admin/network_lexicons.rs b/src/admin/network_lexicons.rs index cc6f3b3..a0b7fb8 100644 --- a/src/admin/network_lexicons.rs +++ b/src/admin/network_lexicons.rs @@ -20,6 +20,34 @@ async fn notify_collections(state: &AppState) { let _ = state.collections_tx.send(collections); } +/// GET /admin/network-lexicons/resolve/{nsid} — preview-resolve a network lexicon without persisting. +pub(super) async fn resolve( + State(state): State, + auth: UserAuth, + Path(nsid): Path, +) -> Result, AppError> { + auth.require(Permission::LexiconsRead).await?; + + let (authority_did, pds_endpoint) = + resolve_nsid_authority(&state.http, &state.config.plc_url, &nsid).await?; + + let lexicon_json = + fetch_lexicon_from_pds(&state.http, &pds_endpoint, &authority_did, &nsid).await?; + + let main_type = lexicon_json + .get("defs") + .and_then(|d| d.get("main")) + .and_then(|m| m.get("type")) + .and_then(|t| t.as_str()); + + Ok(Json(serde_json::json!({ + "nsid": nsid, + "authority_did": authority_did, + "type": main_type, + "lexicon_json": lexicon_json, + }))) +} + /// POST /admin/network-lexicons — add a network lexicon to watch. pub(super) async fn add( State(state): State, diff --git a/web/src/app/dashboard/lexicons/new/page.tsx b/web/src/app/dashboard/lexicons/new/page.tsx index feb6ccf..26a6886 100644 --- a/web/src/app/dashboard/lexicons/new/page.tsx +++ b/web/src/app/dashboard/lexicons/new/page.tsx @@ -6,9 +6,9 @@ import { Empty, EmptyDescription, EmptyTitle } from "@/components/ui/empty"; import { useCurrentUser } from "@/hooks/use-current-user"; import { addNetworkLexicon, + resolveNetworkLexicon, uploadLexicon, } from "@/lib/api"; -import { resolveNsid } from "@/lib/nsid"; import { LEXICON_TEMPLATE, procedureScript, queryScript } from "@/lib/lua-templates"; import { useLuaCompletions } from "@/hooks/use-lua-completions"; import { CodePanels } from "@/components/code-panels"; @@ -103,17 +103,23 @@ export default function AddLexiconPage() { abortRef.current = controller; setResolving(true); - resolveNsid(nsid, controller.signal) + resolveNetworkLexicon(nsid, controller.signal) .then((result) => { if (!controller.signal.aborted) { - setMainType(result.type); + setMainType(result.type ?? undefined); setNetworkJson( - result.lexiconJson - ? JSON.stringify(result.lexiconJson, null, 2) + result.lexicon_json + ? JSON.stringify(result.lexicon_json, null, 2) : "", ); } }) + .catch(() => { + if (!controller.signal.aborted) { + setMainType(undefined); + setNetworkJson(""); + } + }) .finally(() => { if (!controller.signal.aborted) setResolving(false); }); diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index f75875b..4e50670 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -142,6 +142,18 @@ export function getNetworkLexicons() { return apiFetch("/admin/network-lexicons"); } +export function resolveNetworkLexicon( + nsid: string, + signal?: AbortSignal, +) { + return apiFetch<{ + nsid: string; + authority_did: string; + type: string | null; + lexicon_json: Record; + }>(`/admin/network-lexicons/resolve/${encodeURIComponent(nsid)}`, { signal }); +} + export function addNetworkLexicon(body: { nsid: string; target_collection?: string; -- 2.51.2 From 8b1ae86e20aa02b9460a6336d3d8d87cd5525d08 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 20 May 2026 19:42:24 -0500 Subject: [PATCH 128/250] feat: add `filter` to `db.query` Signed-off-by: Trezy Signed-off-by: Trezy --- src/lua/db_api.rs | 241 ++++++++++++++++++++++++++++------------------ 1 file changed, 149 insertions(+), 92 deletions(-) diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index 1937267..6ab7a2a 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -7,11 +7,114 @@ use std::sync::Arc; use crate::AppState; use crate::db::{DatabaseBackend, adapt_sql, decode_cursor, encode_cursor}; +const MAX_FILTER_DEPTH: u8 = 5; +const ALLOWED_OPS: &[&str] = &["=", "!=", "<", ">", "<=", ">=", "LIKE", "NOT LIKE"]; + +enum FilterNode { + Condition { + field: String, + op: String, + value: String, + }, + Group { + combine: String, + children: Vec, + }, +} + +fn parse_filter_node(table: &mlua::Table, depth: u8) -> LuaResult { + if depth > MAX_FILTER_DEPTH { + return Err(mlua::Error::runtime( + "filter nesting too deep (max 5 levels)", + )); + } + + if let Ok(field) = table.get::("field") { + let valid = field.chars().all(|c| c.is_ascii_alphanumeric() || c == '_'); + if !valid || field.is_empty() { + return Err(mlua::Error::runtime(format!( + "invalid filter field '{field}': only alphanumeric characters and underscores are allowed", + ))); + } + + let op: String = table + .get::("op") + .unwrap_or_else(|_| "=".to_string()); + let op_upper = op.to_uppercase(); + if !ALLOWED_OPS.contains(&op_upper.as_str()) { + return Err(mlua::Error::runtime(format!( + "invalid filter op '{op}': must be one of {ALLOWED_OPS:?}", + ))); + } + + let val: mlua::Value = table.get("value")?; + let value = match val { + mlua::Value::String(s) => s.to_str()?.to_string(), + mlua::Value::Integer(n) => n.to_string(), + mlua::Value::Number(n) => n.to_string(), + mlua::Value::Boolean(b) => (if b { "true" } else { "false" }).to_string(), + other => { + return Err(mlua::Error::runtime(format!( + "unsupported filter value type for '{field}': {}", + other.type_name() + ))); + } + }; + + return Ok(FilterNode::Condition { + field, + op: op_upper, + value, + }); + } + + let combine: String = table + .get::("combine") + .unwrap_or_else(|_| "AND".to_string()) + .to_uppercase(); + if combine != "AND" && combine != "OR" { + return Err(mlua::Error::runtime(format!( + "invalid filter combine '{combine}': must be 'AND' or 'OR'", + ))); + } + + let mut children = Vec::new(); + for child in table.sequence_values::() { + children.push(parse_filter_node(&child?, depth + 1)?); + } + + if children.is_empty() { + return Err(mlua::Error::runtime("filter group has no conditions")); + } + + Ok(FilterNode::Group { combine, children }) +} + +fn build_filter_sql(node: &FilterNode, binds: &mut Vec) -> String { + match node { + FilterNode::Condition { field, op, value } => { + binds.push(value.clone()); + format!("json_extract(record, '$.value.{field}') {op} ?") + } + FilterNode::Group { combine, children } => { + let parts: Vec = children + .iter() + .map(|c| build_filter_sql(c, binds)) + .collect(); + if parts.len() == 1 { + parts.into_iter().next().unwrap() + } else { + format!("({})", parts.join(&format!(" {combine} "))) + } + } + } +} + /// Register the `db` table with database query functions. pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { let db_table = lua.create_table()?; - // db.query({ collection, did?, limit?, offset?, cursor?, sort?, sortDirection? }) -> { records, cursor? } + // db.query({ collection, did?, limit?, offset?, cursor?, sort?, sortDirection?, filter? }) -> { records, cursor? } let state_query = state.clone(); let query_fn = lua.create_async_function(move |lua, opts: mlua::Table| { let state = state_query.clone(); @@ -45,6 +148,16 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { } }; + let filter_table: Option = opts.get("filter").ok(); + let mut filter_binds: Vec = Vec::new(); + let filter_clause = if let Some(ref tbl) = filter_table { + let node = parse_filter_node(tbl, 0)?; + let sql = build_filter_sql(&node, &mut filter_binds); + format!(" AND {sql}") + } else { + String::new() + }; + let result_table = lua.create_table()?; if let Some(ref sort_field) = sort { @@ -68,32 +181,20 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { } }; - let rows: Vec<(String, String, String)> = if let Some(ref did) = did { - let sql = adapt_sql( - &format!("SELECT uri, did, record FROM records WHERE collection = ? AND did = ? ORDER BY {order_expr} LIMIT ? OFFSET ?"), - backend, - ); - sqlx::query_as(&sql) - .bind(&collection) - .bind(did) + let did_clause = if did.is_some() { " AND did = ?" } else { "" }; + let sql = adapt_sql( + &format!("SELECT uri, did, record FROM records WHERE collection = ?{did_clause}{filter_clause} ORDER BY {order_expr} LIMIT ? OFFSET ?"), + backend, + ); + let mut q = sqlx::query_as(&sql).bind(&collection); + if let Some(ref did) = did { q = q.bind(did); } + for val in &filter_binds { q = q.bind(val); } + let rows: Vec<(String, String, String)> = q .bind(limit) .bind(offset) .fetch_all(&state.db) .await - .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))? - } else { - let sql = adapt_sql( - &format!("SELECT uri, did, record FROM records WHERE collection = ? ORDER BY {order_expr} LIMIT ? OFFSET ?"), - backend, - ); - sqlx::query_as(&sql) - .bind(&collection) - .bind(limit) - .bind(offset) - .fetch_all(&state.db) - .await - .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))? - }; + .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))?; let has_next = rows.len() as i64 == limit; @@ -126,76 +227,32 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { type RowType = (String, String, String, String); - let rows_raw: Vec = match (&did, &cursor_parts) { - (Some(did), Some((cursor_ts, cursor_uri))) => { - let sql = adapt_sql( - "SELECT uri, did, record, created_at FROM records \ - WHERE collection = ? AND did = ? AND (created_at < ? OR (created_at = ? AND uri < ?)) \ - ORDER BY created_at DESC, uri DESC \ - LIMIT ?", - backend, - ); - sqlx::query_as(&sql) - .bind(&collection) - .bind(did) - .bind(cursor_ts) - .bind(cursor_ts) - .bind(cursor_uri) - .bind(limit) - .fetch_all(&state.db) - .await - .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))? - } - (Some(did), None) => { - let sql = adapt_sql( - "SELECT uri, did, record, created_at FROM records \ - WHERE collection = ? AND did = ? \ - ORDER BY created_at DESC, uri DESC \ - LIMIT ?", - backend, - ); - sqlx::query_as(&sql) - .bind(&collection) - .bind(did) - .bind(limit) - .fetch_all(&state.db) - .await - .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))? - } - (None, Some((cursor_ts, cursor_uri))) => { - let sql = adapt_sql( - "SELECT uri, did, record, created_at FROM records \ - WHERE collection = ? AND (created_at < ? OR (created_at = ? AND uri < ?)) \ - ORDER BY created_at DESC, uri DESC \ - LIMIT ?", - backend, - ); - sqlx::query_as(&sql) - .bind(&collection) - .bind(cursor_ts) - .bind(cursor_ts) - .bind(cursor_uri) - .bind(limit) - .fetch_all(&state.db) - .await - .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))? - } - (None, None) => { - let sql = adapt_sql( - "SELECT uri, did, record, created_at FROM records \ - WHERE collection = ? \ - ORDER BY created_at DESC, uri DESC \ - LIMIT ?", - backend, - ); - sqlx::query_as(&sql) - .bind(&collection) - .bind(limit) - .fetch_all(&state.db) - .await - .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))? - } + let did_clause = if did.is_some() { " AND did = ?" } else { "" }; + let cursor_clause = if cursor_parts.is_some() { + " AND (created_at < ? OR (created_at = ? AND uri < ?))" + } else { + "" }; + let sql = adapt_sql( + &format!( + "SELECT uri, did, record, created_at FROM records \ + WHERE collection = ?{did_clause}{cursor_clause}{filter_clause} \ + ORDER BY created_at DESC, uri DESC \ + LIMIT ?" + ), + backend, + ); + let mut q = sqlx::query_as::<_, RowType>(&sql).bind(&collection); + if let Some(ref did) = did { q = q.bind(did); } + if let Some((cursor_ts, cursor_uri)) = &cursor_parts { + q = q.bind(cursor_ts).bind(cursor_ts).bind(cursor_uri); + } + for val in &filter_binds { q = q.bind(val); } + let rows_raw: Vec = q + .bind(limit) + .fetch_all(&state.db) + .await + .map_err(|e| mlua::Error::runtime(format!("DB query failed: {e}")))?; let has_next = rows_raw.len() as i64 == limit; -- 2.51.2 From 4f2e0279b3dc8872019ac87a238d635fe7f3b726 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 20 May 2026 20:32:14 -0500 Subject: [PATCH 129/250] feat: add support for nexted syntax in field selectors Signed-off-by: Trezy Signed-off-by: Trezy --- src/db.rs | 53 +++++++++++++++++---- src/lua/db_api.rs | 119 ++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 144 insertions(+), 28 deletions(-) diff --git a/src/db.rs b/src/db.rs index 19f571a..114ced1 100644 --- a/src/db.rs +++ b/src/db.rs @@ -100,22 +100,39 @@ pub fn adapt_sql(sql: &str, backend: DatabaseBackend) -> String { } /// Convert `json_extract(col, '$.seg1.seg2.leaf')` to Postgres `col::jsonb->'seg1'->'seg2'->>'leaf'`. +/// Handles array indices: `seg[0].leaf` becomes `->seg->0->>'leaf'`. fn adapt_json_extract_to_postgres(sql: &str) -> String { JSON_EXTRACT_RE .replace_all(sql, |caps: ®ex::Captures| { let col = &caps[1]; - let path = &caps[2]; // e.g. "defs.main.type" or "title" + let path = &caps[2]; + + let mut parts: Vec<(String, bool)> = Vec::new(); + for segment in path.split('.') { + let bracket_start = segment.find('[').unwrap_or(segment.len()); + let field_name = &segment[..bracket_start]; + if !field_name.is_empty() { + parts.push((field_name.to_string(), false)); + } + let mut rest = &segment[bracket_start..]; + while rest.starts_with('[') { + if let Some(close) = rest.find(']') { + parts.push((rest[1..close].to_string(), true)); + rest = &rest[close + 1..]; + } else { + break; + } + } + } - let segments: Vec<&str> = path.split('.').collect(); let mut chain = format!("{col}::jsonb"); - - for (i, seg) in segments.iter().enumerate() { - if i == segments.len() - 1 { - // Last segment uses ->> (text extraction) - chain.push_str(&format!("->>'{seg}'")); + let last = parts.len().saturating_sub(1); + for (i, (text, is_index)) in parts.iter().enumerate() { + let arrow = if i == last { "->>" } else { "->" }; + if *is_index { + chain.push_str(&format!("{arrow}{text}")); } else { - // Intermediate segments use -> (JSON traversal) - chain.push_str(&format!("->'{seg}'")); + chain.push_str(&format!("{arrow}'{text}'")); } } @@ -388,6 +405,24 @@ mod tests { ); } + #[test] + fn adapt_sql_postgres_converts_array_index_json_extract() { + let sql = "WHERE json_extract(record, '$.value.websites[0].url') = ?"; + assert_eq!( + adapt_sql(sql, DatabaseBackend::Postgres), + "WHERE record::jsonb->'value'->'websites'->0->>'url' = $1" + ); + } + + #[test] + fn adapt_sql_sqlite_keeps_array_index_json_extract() { + let sql = "WHERE json_extract(record, '$.value.tags[0]') = ?"; + assert_eq!( + adapt_sql(sql, DatabaseBackend::Sqlite), + "WHERE json_extract(record, '$.value.tags[0]') = ?" + ); + } + #[test] fn adapt_sql_multiple_json_expressions() { let sql = diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index 6ab7a2a..c51c10c 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -10,6 +10,38 @@ use crate::db::{DatabaseBackend, adapt_sql, decode_cursor, encode_cursor}; const MAX_FILTER_DEPTH: u8 = 5; const ALLOWED_OPS: &[&str] = &["=", "!=", "<", ">", "<=", ">=", "LIKE", "NOT LIKE"]; +fn is_valid_json_field_path(path: &str) -> bool { + if path.is_empty() { + return false; + } + for segment in path.split('.') { + if segment.is_empty() { + return false; + } + let bracket_start = segment.find('[').unwrap_or(segment.len()); + let ident = &segment[..bracket_start]; + if ident.is_empty() || !ident.chars().all(|c| c.is_ascii_alphanumeric() || c == '_') { + return false; + } + let mut rest = &segment[bracket_start..]; + while !rest.is_empty() { + if !rest.starts_with('[') { + return false; + } + let close = match rest.find(']') { + Some(i) => i, + None => return false, + }; + let idx = &rest[1..close]; + if idx.is_empty() || !idx.chars().all(|c| c.is_ascii_digit()) { + return false; + } + rest = &rest[close + 1..]; + } + } + true +} + enum FilterNode { Condition { field: String, @@ -30,10 +62,9 @@ fn parse_filter_node(table: &mlua::Table, depth: u8) -> LuaResult { } if let Ok(field) = table.get::("field") { - let valid = field.chars().all(|c| c.is_ascii_alphanumeric() || c == '_'); - if !valid || field.is_empty() { + if !is_valid_json_field_path(&field) { return Err(mlua::Error::runtime(format!( - "invalid filter field '{field}': only alphanumeric characters and underscores are allowed", + "invalid filter field '{field}': use alphanumeric names with optional dot notation and array indices (e.g. 'name', 'author.handle', 'tags[0]')", ))); } @@ -127,14 +158,12 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { let sort_direction: Option = opts.get("sortDirection").ok(); let cursor_str: Option = opts.get("cursor").ok(); - // Validate sort field name to prevent SQL injection - if let Some(ref field) = sort { - let valid = field.chars().all(|c| c.is_ascii_alphanumeric() || c == '_'); - if !valid || field.is_empty() { - return Err(mlua::Error::runtime( - "invalid sort field: only alphanumeric characters and underscores are allowed", - )); - } + if let Some(ref field) = sort + && !is_valid_json_field_path(field) + { + return Err(mlua::Error::runtime( + "invalid sort field: use alphanumeric names with optional dot notation and array indices (e.g. 'name', 'author.handle', 'tags[0]')", + )); } let direction = match sort_direction.as_deref() { @@ -175,10 +204,7 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { let order_expr = if top_level_columns.contains(&sort_field.as_str()) { format!("{sort_field} {direction}") } else { - match backend { - DatabaseBackend::Sqlite => format!("json_extract(record, '$.value.{sort_field}') {direction}"), - DatabaseBackend::Postgres => format!("record::jsonb->'value'->>'{sort_field}' {direction}"), - } + format!("json_extract(record, '$.value.{sort_field}') {direction}") }; let did_clause = if did.is_some() { " AND did = ?" } else { "" }; @@ -326,11 +352,9 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { let query: String = opts.get("query")?; let limit: i64 = opts.get::("limit").unwrap_or(10).min(100); - // Validate field name to prevent SQL injection - let valid = field.chars().all(|c| c.is_ascii_alphanumeric() || c == '_'); - if !valid || field.is_empty() { + if !is_valid_json_field_path(&field) { return Err(mlua::Error::runtime( - "invalid search field: only alphanumeric characters and underscores are allowed", + "invalid search field: use alphanumeric names with optional dot notation and array indices (e.g. 'name', 'author.handle', 'tags[0]')", )); } @@ -809,6 +833,63 @@ mod tests { } } + #[test] + fn valid_json_field_paths() { + assert!(super::is_valid_json_field_path("name")); + assert!(super::is_valid_json_field_path("author_name")); + assert!(super::is_valid_json_field_path("author.handle")); + assert!(super::is_valid_json_field_path("tags[0]")); + assert!(super::is_valid_json_field_path("data[0][1]")); + assert!(super::is_valid_json_field_path("author.websites[0].url")); + assert!(super::is_valid_json_field_path("a.b.c.d.e")); + } + + #[test] + fn invalid_json_field_paths() { + assert!(!super::is_valid_json_field_path("")); + assert!(!super::is_valid_json_field_path(".name")); + assert!(!super::is_valid_json_field_path("name.")); + assert!(!super::is_valid_json_field_path("name..foo")); + assert!(!super::is_valid_json_field_path("[0]")); + assert!(!super::is_valid_json_field_path("name[]")); + assert!(!super::is_valid_json_field_path("name[abc]")); + assert!(!super::is_valid_json_field_path("name; DROP TABLE")); + assert!(!super::is_valid_json_field_path("name'OR 1=1")); + assert!(!super::is_valid_json_field_path("na-me")); + } + + #[tokio::test] + async fn query_accepts_nested_sort_field() { + let state = test_state(); + let lua = setup(&state); + let result: Result = lua + .load(r#"return db.query({ collection = "test", sort = "author.handle" })"#) + .eval_async() + .await; + assert!(result.is_err()); + let err = result.unwrap_err().to_string(); + assert!( + !err.contains("invalid sort field"), + "nested sort field should be accepted, got: {err}" + ); + } + + #[tokio::test] + async fn query_accepts_array_index_sort_field() { + let state = test_state(); + let lua = setup(&state); + let result: Result = lua + .load(r#"return db.query({ collection = "test", sort = "tags[0]" })"#) + .eval_async() + .await; + assert!(result.is_err()); + let err = result.unwrap_err().to_string(); + assert!( + !err.contains("invalid sort field"), + "array index sort field should be accepted, got: {err}" + ); + } + #[tokio::test] async fn query_rejects_invalid_sort_field() { let state = test_state(); -- 2.51.2 From 59b9d5bda167dd7d41f13983f398553b01de54d8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 20 May 2026 20:33:10 -0500 Subject: [PATCH 130/250] fix: filter nesting was allowed to 6 levels instead of 5 Signed-off-by: Trezy Signed-off-by: Trezy --- src/lua/db_api.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index c51c10c..5899bbd 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -55,10 +55,10 @@ enum FilterNode { } fn parse_filter_node(table: &mlua::Table, depth: u8) -> LuaResult { - if depth > MAX_FILTER_DEPTH { - return Err(mlua::Error::runtime( - "filter nesting too deep (max 5 levels)", - )); + if depth >= MAX_FILTER_DEPTH { + return Err(mlua::Error::runtime(format!( + "filter nesting too deep (max {MAX_FILTER_DEPTH} levels)", + ))); } if let Ok(field) = table.get::("field") { -- 2.51.2 From c195df2e73206f044a9b35569786cb6926e9736a Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 20 May 2026 20:34:20 -0500 Subject: [PATCH 131/250] docs: add `db.query`s new `filter` prop to the docs Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/api-reference/lua/database-api.md | 94 +++++++++++++++++-- 1 file changed, 84 insertions(+), 10 deletions(-) diff --git a/packages/docs/content/docs/api-reference/lua/database-api.md b/packages/docs/content/docs/api-reference/lua/database-api.md index 64e4b4d..96c78b3 100644 --- a/packages/docs/content/docs/api-reference/lua/database-api.md +++ b/packages/docs/content/docs/api-reference/lua/database-api.md @@ -14,6 +14,7 @@ local result = db.query({ cursor = params.cursor, -- optional: opaque cursor from a previous response sort = "name", -- optional: field to sort by, default "indexed_at" sortDirection = "asc", -- optional: "asc" or "desc", default "desc" + filter = { field = "status", value = "active" }, -- optional: filter conditions }) -- result.records — array of record tables (each includes a "uri" field) @@ -22,7 +23,80 @@ local result = db.query({ The `cursor` is an opaque string returned in a previous response. Pass it through directly — don't parse or modify it. When no `sort` field is specified, `db.query` uses keyset pagination (based on `created_at` and `uri`), which is stable even when records are inserted between pages. When a custom `sort` field is specified, offset-based pagination is used instead. -The `sort` field can be a top-level column (`indexed_at`, `did`, `uri`) or any field inside the record's `value` object (e.g. `name`, `createdAt`). Field names must contain only alphanumeric characters and underscores. +The `sort` field can be a top-level column (`indexed_at`, `did`, `uri`) or any field inside the record (e.g. `name`, `createdAt`). Nested paths are supported with dot notation and array indices (e.g. `author.handle`, `scores[0]`). + +### Filtering + +The `filter` option lets you restrict results by record field values. Field names correspond to the fields defined in your lexicon schema (e.g. `streamer`, `status`, `viewers`). + +**Simple condition** — match a single field (operator defaults to `=`): + +```lua +db.query({ + collection = "xyz.statusphere.status", + filter = { field = "streamer", value = "did:plc:abc" }, +}) +``` + +**With operator** — specify a comparison operator: + +```lua +db.query({ + collection = "xyz.statusphere.status", + filter = { field = "viewers", op = ">", value = 100 }, +}) +``` + +Supported operators: `=`, `!=`, `<`, `>`, `<=`, `>=`, `LIKE`, `NOT LIKE`. + +**Combining conditions** — group multiple conditions with `AND` or `OR`: + +```lua +db.query({ + collection = "xyz.statusphere.status", + filter = { + combine = "AND", + { field = "streamer", value = "did:plc:abc" }, + { field = "viewers", op = ">", value = 50 }, + }, +}) +``` + +When `combine` is omitted it defaults to `"AND"`. + +**Nesting** — groups can contain other groups, up to 5 levels deep: + +```lua +db.query({ + collection = "xyz.statusphere.status", + filter = { + combine = "AND", + { field = "streamer", value = "did:plc:abc" }, + { + combine = "OR", + { field = "status", value = "live" }, + { field = "viewers", op = ">=", value = 100 }, + }, + }, +}) +``` + +This matches records where `streamer` is `did:plc:abc` **and** either `status` is `live` **or** `viewers` is at least 100. + +Field names support dot notation for nested objects and bracket syntax for array indices: + +```lua +-- Nested object field +filter = { field = "author.handle", value = "alice.bsky.social" } + +-- Array index +filter = { field = "tags[0]", value = "gaming" } + +-- Combined +filter = { field = "links[0].url", op = "LIKE", value = "%twitch.tv%" } +``` + +Each path segment must be alphanumeric or underscores. Values can be strings, numbers, or booleans. ## db.get @@ -101,15 +175,15 @@ Write SQL in **SQLite syntax** — HappyView translates it to Postgres at runtim ### Column type mapping -| SQLite type | Postgres type | Lua type | -| ---------------------- | ---------------------- | -------- | -| `TEXT` | `TEXT`, `VARCHAR` | string | -| `INTEGER` | `INT4`, `INT8` | integer | -| `REAL` | `FLOAT4`, `FLOAT8` | number | -| `INTEGER` (0/1) | `BOOL` | boolean | -| `TEXT` (JSON) | `JSON`, `JSONB` | table | -| `TEXT` (ISO 8601) | `TIMESTAMPTZ` | string (ISO 8601) | -| Other | Other | string (fallback) | +| SQLite type | Postgres type | Lua type | +| ----------------- | ------------------ | ----------------- | +| `TEXT` | `TEXT`, `VARCHAR` | string | +| `INTEGER` | `INT4`, `INT8` | integer | +| `REAL` | `FLOAT4`, `FLOAT8` | number | +| `INTEGER` (0/1) | `BOOL` | boolean | +| `TEXT` (JSON) | `JSON`, `JSONB` | table | +| `TEXT` (ISO 8601) | `TIMESTAMPTZ` | string (ISO 8601) | +| Other | Other | string (fallback) | ## db.backend -- 2.51.2 From 2d7b174165d709391179b919a8bb9ca8f6676ecb Mon Sep 17 00:00:00 2001 From: Trezy Date: Wed, 20 May 2026 20:57:24 -0500 Subject: [PATCH 132/250] ci: publish Rust binaries to Github Releases Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 76 +++++++++++++++++++++++++++++++++++++--- Dockerfile | 2 +- 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 427c506..b9b48b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -189,6 +189,60 @@ jobs: GITHUB_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} run: npx -p semantic-release -p semantic-release-gha-output semantic-release + # --------------------------------------------------------------------------- + # Build binaries — compile per-platform and upload to GitHub release + # --------------------------------------------------------------------------- + build-binary: + needs: release + if: needs.release.outputs.version != '' + runs-on: ${{ matrix.runs-on }} + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runs-on: depot-ubuntu-24.04 + arch: amd64 + - platform: linux/arm64 + runs-on: depot-ubuntu-24.04-arm + arch: arm64 + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Cache cargo + uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: cargo-release-${{ matrix.arch }}-${{ hashFiles('Cargo.lock') }} + restore-keys: | + cargo-release-${{ matrix.arch }}- + + - name: Build release binary + run: | + docker run --rm \ + -v "$PWD:/app" \ + -v "$HOME/.cargo/registry:/usr/local/cargo/registry" \ + -v "$HOME/.cargo/git:/usr/local/cargo/git" \ + -w /app \ + -e SQLX_OFFLINE=true \ + -e HAPPYVIEW_VERSION="v${{ needs.release.outputs.version }}" \ + rust:1.93-bookworm \ + cargo build --release + + - name: Upload binary to release + env: + GH_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + run: | + cp target/release/happyview happyview-linux-${{ matrix.arch }} + gh release upload "v${{ needs.release.outputs.version }}" \ + happyview-linux-${{ matrix.arch }} \ + --clobber + # --------------------------------------------------------------------------- # SDK — per-package tests + releases # --------------------------------------------------------------------------- @@ -509,7 +563,7 @@ jobs: # Docker — main app image (triggered by GitHub release) # --------------------------------------------------------------------------- docker: - needs: release + needs: [release, build-binary] if: needs.release.outputs.version != '' runs-on: ${{ matrix.runs-on }} permissions: @@ -522,8 +576,10 @@ jobs: include: - platform: linux/amd64 runs-on: depot-ubuntu-24.04 + arch: amd64 - platform: linux/arm64 runs-on: depot-ubuntu-24.04-arm + arch: arm64 env: GHCR_IMAGE: ghcr.io/${{ github.repository }} ATCR_IMAGE: atcr.io/${{ secrets.ATCR_NAMESPACE }}/happyview @@ -531,6 +587,16 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 + - name: Download pre-built binary + env: + GH_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} + run: | + gh release download "v${{ needs.release.outputs.version }}" \ + --pattern "happyview-linux-${{ matrix.arch }}" \ + --dir . + mkdir -p .builder-override/app/target/release + cp happyview-linux-${{ matrix.arch }} .builder-override/app/target/release/happyview + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -590,8 +656,8 @@ jobs: context: . platforms: ${{ matrix.platform }} labels: ${{ steps.meta-ghcr.outputs.labels }} - build-args: | - HAPPYVIEW_VERSION=v${{ needs.release.outputs.version }} + build-contexts: | + builder=.builder-override cache-from: type=gha,scope=build-${{ matrix.platform }} cache-to: type=gha,scope=build-${{ matrix.platform }},mode=max,ignore-error=true outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true @@ -605,8 +671,8 @@ jobs: # context: . # platforms: ${{ matrix.platform }} # labels: ${{ steps.meta-atcr.outputs.labels }} - # build-args: | - # HAPPYVIEW_VERSION=${{ github.event.release.tag_name }} + # build-contexts: | + # builder=.builder-override # cache-from: type=gha,scope=build-${{ matrix.platform }} # outputs: type=image,"name=${{ env.ATCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true diff --git a/Dockerfile b/Dockerfile index 87aee8b..97108be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ WORKDIR /app COPY --from=builder /app/target/release/happyview /usr/local/bin/happyview -COPY --from=builder /app/migrations /app/migrations +COPY migrations/ /app/migrations COPY --from=frontend /app/web/out /srv/static COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh && touch /srv/static/.base-path-pending -- 2.51.2 From a48079997997c047f84ef176048d22bf74331e4a Mon Sep 17 00:00:00 2001 From: Trezy Date: Thu, 21 May 2026 09:22:40 -0500 Subject: [PATCH 133/250] feat: parallelize PDS resolution and record retrieval during backfills Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 176 +++++++ .../20260520000000_add_resolved_repos.sql | 1 + .../20260520000000_add_resolved_repos.sql | 1 + src/admin/backfill.rs | 474 ++++++++++++++++-- src/admin/types.rs | 1 + web/src/app/dashboard/backfill/page.tsx | 24 +- web/src/types/backfill.ts | 1 + 7 files changed, 626 insertions(+), 52 deletions(-) create mode 100644 migrations/postgres/20260520000000_add_resolved_repos.sql create mode 100644 migrations/sqlite/20260520000000_add_resolved_repos.sql diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9b48b2..2ee8050 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,6 +159,182 @@ jobs: - name: Clippy run: cargo clippy --all-targets -- -D warnings + # --------------------------------------------------------------------------- + # PR binaries — build on every PR push so reviewers can test + # --------------------------------------------------------------------------- + pr-binary: + needs: changes + if: >- + github.event_name == 'pull_request' + && needs.changes.outputs.server == 'true' + runs-on: ${{ matrix.runs-on }} + strategy: + fail-fast: false + matrix: + include: + - runs-on: depot-ubuntu-24.04 + arch: amd64 + - runs-on: depot-ubuntu-24.04-arm + arch: arm64 + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Cache cargo + uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: cargo-release-${{ matrix.arch }}-${{ hashFiles('Cargo.lock') }} + restore-keys: | + cargo-release-${{ matrix.arch }}- + + - name: Build release binary + run: | + docker run --rm \ + -v "$PWD:/app" \ + -v "$HOME/.cargo/registry:/usr/local/cargo/registry" \ + -v "$HOME/.cargo/git:/usr/local/cargo/git" \ + -w /app \ + -e SQLX_OFFLINE=true \ + rust:1.93-bookworm \ + cargo build --release + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: happyview-linux-${{ matrix.arch }} + path: target/release/happyview + + pr-docker: + needs: pr-binary + runs-on: ${{ matrix.runs-on }} + permissions: + contents: read + packages: write + strategy: + fail-fast: false + matrix: + include: + - platform: linux/amd64 + runs-on: depot-ubuntu-24.04 + arch: amd64 + - platform: linux/arm64 + runs-on: depot-ubuntu-24.04-arm + arch: arm64 + env: + GHCR_IMAGE: ghcr.io/${{ github.repository }} + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Download pre-built binary + uses: actions/download-artifact@v4 + with: + name: happyview-linux-${{ matrix.arch }} + path: .binary + + - name: Prepare binary override + run: | + mkdir -p .builder-override/app/target/release + cp .binary/happyview .builder-override/app/target/release/happyview + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_IMAGE }} + tags: | + type=raw,value=pr-${{ github.event.pull_request.number }} + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + build-contexts: | + builder=.builder-override + cache-from: type=gha,scope=pr-${{ matrix.platform }} + cache-to: type=gha,scope=pr-${{ matrix.platform }},mode=max,ignore-error=true + outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true + + - name: Create manifest + run: | + TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta.outputs.json }}') + docker buildx imagetools create --append $TAGS \ + ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} 2>/dev/null || \ + docker buildx imagetools create $TAGS \ + ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} + + pr-build-comment: + needs: pr-docker + runs-on: depot-ubuntu-24.04 + permissions: + pull-requests: write + steps: + - name: Comment on PR + uses: actions/github-script@v7 + with: + script: | + const sha = context.payload.pull_request.head.sha.substring(0, 7); + const prNumber = context.payload.pull_request.number; + const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; + const image = `ghcr.io/${context.repo.owner}/${context.repo.repo}`; + const body = [ + '### PR Build', + '', + `Builds for \`${sha}\`:`, + '', + '**Docker**', + '```sh', + `docker pull ${image}:pr-${prNumber}`, + '```', + '', + '**Binaries**', + '```sh', + `gh run download ${context.runId} -n happyview-linux-amd64`, + `gh run download ${context.runId} -n happyview-linux-arm64`, + '```', + '', + `Or download binaries from the [workflow run](${runUrl}).`, + ].join('\n'); + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + const existing = comments.find(c => c.body.startsWith('### PR Build')); + + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body, + }); + } + # --------------------------------------------------------------------------- # Server release # --------------------------------------------------------------------------- diff --git a/migrations/postgres/20260520000000_add_resolved_repos.sql b/migrations/postgres/20260520000000_add_resolved_repos.sql new file mode 100644 index 0000000..da79bf0 --- /dev/null +++ b/migrations/postgres/20260520000000_add_resolved_repos.sql @@ -0,0 +1 @@ +ALTER TABLE backfill_jobs ADD COLUMN resolved_repos INTEGER; diff --git a/migrations/sqlite/20260520000000_add_resolved_repos.sql b/migrations/sqlite/20260520000000_add_resolved_repos.sql new file mode 100644 index 0000000..da79bf0 --- /dev/null +++ b/migrations/sqlite/20260520000000_add_resolved_repos.sql @@ -0,0 +1 @@ +ALTER TABLE backfill_jobs ADD COLUMN resolved_repos INTEGER; diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 553c3a5..26b7253 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -5,9 +5,11 @@ use std::sync::atomic::{AtomicBool, AtomicI32, Ordering}; use axum::Json; use axum::extract::{Path, State}; use axum::http::StatusCode; -use futures_util::stream::{self, StreamExt}; +use futures_util::FutureExt; +use futures_util::stream::{self, FuturesUnordered, StreamExt}; use serde::Deserialize; use serde_json::Value; +use tokio::sync::mpsc; use uuid::Uuid; use crate::AppState; @@ -69,6 +71,7 @@ async fn set_stage(state: &AppState, job_id: &str, stage: &str) { async fn update_job_counter(state: &AppState, job_id: &str, column: &str, value: i32) { let query = match column { "total_repos" => "UPDATE backfill_jobs SET total_repos = ? WHERE id = ?", + "resolved_repos" => "UPDATE backfill_jobs SET resolved_repos = ? WHERE id = ?", "processed_repos" => "UPDATE backfill_jobs SET processed_repos = ? WHERE id = ?", "total_records" => "UPDATE backfill_jobs SET total_records = ? WHERE id = ?", other => { @@ -317,69 +320,448 @@ async fn discover_repos_from_relay( } // --------------------------------------------------------------------------- -// Phase 2: Resolve PDS endpoints +// Pipelined Phase 2+3: Resolve PDS endpoints and fetch records concurrently // --------------------------------------------------------------------------- -async fn run_resolution_phase(state: &AppState, job_id: &str) { - set_stage(state, job_id, "resolving_pds").await; +async fn run_pipelined_resolve_and_fetch( + state: &AppState, + job_id: &str, + collections: &[String], +) -> (i32, i32) { + set_stage(state, job_id, "resolving_and_fetching").await; - let sql = adapt_sql( - "SELECT did FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NULL", + // Count already-resolved and already-completed repos for accurate progress + let already_resolved: i32 = { + let sql = adapt_sql( + "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL", + state.db_backend, + ); + sqlx::query_as::<_, (i32,)>(&sql) + .bind(job_id) + .fetch_one(&state.db) + .await + .map(|(c,)| c) + .unwrap_or(0) + }; + + let already_completed: i32 = { + let sql = adapt_sql( + "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND status = 'completed'", + state.db_backend, + ); + sqlx::query_as::<_, (i32,)>(&sql) + .bind(job_id) + .fetch_one(&state.db) + .await + .map(|(c,)| c) + .unwrap_or(0) + }; + + update_job_counter(state, job_id, "resolved_repos", already_resolved).await; + update_job_counter(state, job_id, "processed_repos", already_completed).await; + + let existing_records: i32 = { + let sql = adapt_sql( + "SELECT total_records FROM backfill_jobs WHERE id = ?", + state.db_backend, + ); + sqlx::query_as::<_, (Option,)>(&sql) + .bind(job_id) + .fetch_one(&state.db) + .await + .map(|(c,)| c.unwrap_or(0)) + .unwrap_or(0) + }; + + // Shared atomics for lock-free counter updates + let resolved_repos = Arc::new(AtomicI32::new(already_resolved)); + let processed_repos = Arc::new(AtomicI32::new(already_completed)); + let total_records = Arc::new(AtomicI32::new(existing_records)); + let cancelled = Arc::new(AtomicBool::new(false)); + + let (tx, mut rx) = mpsc::channel::<(String, String)>(256); + let tx_resolver = tx.clone(); + let tx_backlog = tx.clone(); + + // --- Resolver task --- + let resolver_state = state.clone(); + let resolver_job_id = job_id.to_string(); + let resolver_resolved = Arc::clone(&resolved_repos); + let resolver_cancelled = Arc::clone(&cancelled); + + let resolver_handle = tokio::spawn(async move { + let sql = adapt_sql( + "SELECT did FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NULL", + resolver_state.db_backend, + ); + let unresolved: Vec<(String,)> = sqlx::query_as(&sql) + .bind(&resolver_job_id) + .fetch_all(&resolver_state.db) + .await + .unwrap_or_default(); + + let mut attempted: i32 = 0; + for (did,) in &unresolved { + if resolver_cancelled.load(Ordering::Relaxed) { + break; + } + + match profile::resolve_pds_endpoint( + &resolver_state.http, + &resolver_state.config.plc_url, + did, + ) + .await + { + Ok(pds) => { + let sql = adapt_sql( + "UPDATE backfill_repos SET pds_endpoint = ? WHERE job_id = ? AND did = ?", + resolver_state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(&pds) + .bind(&resolver_job_id) + .bind(did) + .execute(&resolver_state.db) + .await; + + let count = resolver_resolved.fetch_add(1, Ordering::Relaxed) + 1; + if count % 100 == 0 { + update_job_counter( + &resolver_state, + &resolver_job_id, + "resolved_repos", + count, + ) + .await; + } + + if tx_resolver.send((did.clone(), pds)).await.is_err() { + break; + } + } + Err(e) => { + tracing::warn!(did, error = %e, "failed to resolve PDS endpoint, skipping DID"); + } + } + + attempted += 1; + if attempted % 100 == 0 && is_cancelled(&resolver_state, &resolver_job_id).await { + resolver_cancelled.store(true, Ordering::Relaxed); + break; + } + } + + // Persist final resolved count + let final_resolved = resolver_resolved.load(Ordering::Relaxed); + update_job_counter( + &resolver_state, + &resolver_job_id, + "resolved_repos", + final_resolved, + ) + .await; + // tx is dropped here, signalling the fetcher that no more DIDs are coming + }); + + // --- Also send already-resolved-but-unfetched DIDs to the fetcher --- + let pending_sql = adapt_sql( + "SELECT did, pds_endpoint FROM backfill_repos WHERE job_id = ? AND status = 'pending' AND pds_endpoint IS NOT NULL", state.db_backend, ); - let unresolved: Vec<(String,)> = sqlx::query_as(&sql) + let pending_rows: Vec<(String, String)> = sqlx::query_as(&pending_sql) .bind(job_id) .fetch_all(&state.db) .await .unwrap_or_default(); + let backlog_cancelled = Arc::clone(&cancelled); + let backlog_handle = tokio::spawn(async move { + for (did, pds) in pending_rows { + if backlog_cancelled.load(Ordering::Relaxed) { + break; + } + if tx_backlog.send((did, pds)).await.is_err() { + break; + } + } + }); + + // Drop our copy of tx so the channel closes when both senders finish + drop(tx); + + // --- Fetcher: receive (did, pds) pairs and dispatch to PDS workers --- + // Each PDS gets its own worker with a DID channel. Workers acquire a + // semaphore permit before starting, limiting concurrent PDS connections. + // We never hold the workers lock across an `.await` — use `try_send` to + // avoid blocking when a worker's channel is full (overflow goes to a + // retry queue drained on each iteration). + let state = Arc::new(state.clone()); + let collections = Arc::new(collections.to_vec()); + let job_id_arc = Arc::new(job_id.to_string()); + + let pds_semaphore = Arc::new(tokio::sync::Semaphore::new(10)); + let mut pds_workers: HashMap> = HashMap::new(); + let mut worker_handles = FuturesUnordered::new(); + let mut overflow: Vec<(String, String)> = Vec::new(); + + while let Some((did, pds_endpoint)) = rx.recv().await { + // Also drain any overflow from previous iterations + overflow.push((did, pds_endpoint)); + + let mut still_pending = Vec::new(); + for (did, pds_endpoint) in overflow.drain(..) { + if cancelled.load(Ordering::Relaxed) { + break; + } + + // Try to send to an existing PDS worker + if let Some(pds_tx) = pds_workers.get(&pds_endpoint) { + match pds_tx.try_send(did.clone()) { + Ok(()) => continue, + Err(mpsc::error::TrySendError::Full(_)) => { + still_pending.push((did, pds_endpoint)); + continue; + } + Err(mpsc::error::TrySendError::Closed(_)) => { + // Worker finished, will be removed below + } + } + } + + // Remove stale workers whose channels have closed + pds_workers.retain(|_, tx| !tx.is_closed()); + + // Spawn a new PDS worker + let permit = Arc::clone(&pds_semaphore); + let (pds_tx, pds_rx) = mpsc::channel::(64); + let _ = pds_tx.try_send(did); + pds_workers.insert(pds_endpoint.clone(), pds_tx); + + let ctx = FetchContext { + state: Arc::clone(&state), + job_id: Arc::clone(&job_id_arc), + collections: Arc::clone(&collections), + processed_repos: Arc::clone(&processed_repos), + total_records: Arc::clone(&total_records), + cancelled: Arc::clone(&cancelled), + }; + + worker_handles.push(tokio::spawn(async move { + let _permit = permit + .acquire() + .await + .expect("semaphore should not be closed"); + + run_pds_worker(ctx, pds_endpoint, pds_rx).await; + })); + } + overflow = still_pending; + + // Drain any completed worker handles to avoid unbounded accumulation + while let Some(result) = worker_handles.next().now_or_never() { + if let Some(Err(e)) = result { + tracing::warn!(error = %e, "PDS worker task panicked"); + } + } + } + + // Drain remaining overflow after channel closes + for (did, pds_endpoint) in overflow.drain(..) { + if cancelled.load(Ordering::Relaxed) { + break; + } + + // Remove stale workers + pds_workers.retain(|_, tx| !tx.is_closed()); + + if let Some(pds_tx) = pds_workers.get(&pds_endpoint) { + // Channel is bounded; this can block, but all senders are done so it's fine + let _ = pds_tx.send(did).await; + continue; + } + + let permit = Arc::clone(&pds_semaphore); + let (pds_tx, pds_rx) = mpsc::channel::(64); + let _ = pds_tx.try_send(did); + pds_workers.insert(pds_endpoint.clone(), pds_tx); + + let ctx = FetchContext { + state: Arc::clone(&state), + job_id: Arc::clone(&job_id_arc), + collections: Arc::clone(&collections), + processed_repos: Arc::clone(&processed_repos), + total_records: Arc::clone(&total_records), + cancelled: Arc::clone(&cancelled), + }; + + worker_handles.push(tokio::spawn(async move { + let _permit = permit + .acquire() + .await + .expect("semaphore should not be closed"); + + run_pds_worker(ctx, pds_endpoint.clone(), pds_rx).await; + })); + } + + // Drop all PDS senders so workers know no more DIDs are coming + drop(pds_workers); + + // Wait for all PDS workers to finish + while let Some(result) = worker_handles.next().await { + if let Err(e) = result { + tracing::warn!(error = %e, "PDS worker task panicked"); + } + } + + // Wait for resolver and backlog tasks + let _ = resolver_handle.await; + let _ = backlog_handle.await; + + let final_repos = processed_repos.load(Ordering::Relaxed); + let final_records = total_records.load(Ordering::Relaxed); + + // Persist final counts let sql = adapt_sql( - "SELECT COUNT(*) FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL", + "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", state.db_backend, ); - let already_resolved: i32 = sqlx::query_as::<_, (i32,)>(&sql) + let _ = sqlx::query(&sql) + .bind(final_repos) + .bind(final_records) .bind(job_id) - .fetch_one(&state.db) - .await - .map(|(c,)| c) - .unwrap_or(0); + .execute(&state.db) + .await; + + (final_repos, final_records) +} + +struct FetchContext { + state: Arc, + job_id: Arc, + collections: Arc>, + processed_repos: Arc, + total_records: Arc, + cancelled: Arc, +} - let mut resolved_count = already_resolved; +async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::Receiver) { + let FetchContext { + state, + job_id, + collections, + processed_repos, + total_records, + cancelled, + } = ctx; + let mut fetches = FuturesUnordered::new(); + let mut rx_open = true; - let mut attempted = already_resolved; - for (did,) in &unresolved { - match profile::resolve_pds_endpoint(&state.http, &state.config.plc_url, did).await { - Ok(pds) => { + loop { + tokio::select! { + biased; + + Some(result) = fetches.next(), if !fetches.is_empty() => { + let (did, records): (String, i32) = result; + total_records.fetch_add(records, Ordering::Relaxed); + + // Mark DID as completed let sql = adapt_sql( - "UPDATE backfill_repos SET pds_endpoint = ? WHERE job_id = ? AND did = ?", + "UPDATE backfill_repos SET status = 'completed' WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) - .bind(&pds) - .bind(job_id) - .bind(did) + .bind(job_id.as_str()) + .bind(&did) .execute(&state.db) .await; - resolved_count += 1; - } - Err(e) => { - tracing::warn!(did, error = %e, "failed to resolve PDS endpoint, skipping DID"); + + let repos = processed_repos.fetch_add(1, Ordering::Relaxed) + 1; + if repos % 10 == 0 { + let records = total_records.load(Ordering::Relaxed); + let sql = adapt_sql( + "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", + state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(repos) + .bind(records) + .bind(job_id.as_str()) + .execute(&state.db) + .await; + + if is_cancelled(&state, job_id.as_str()).await { + cancelled.store(true, Ordering::Relaxed); + break; + } + } } - } - attempted += 1; - if attempted % 100 == 0 { - update_job_counter(state, job_id, "processed_repos", resolved_count).await; - if is_cancelled(state, job_id).await { - return; + + did = rx.recv(), if rx_open && fetches.len() < 3 => { + match did { + Some(did) if !cancelled.load(Ordering::Relaxed) => { + let state = Arc::clone(&state); + let collections = collections.clone(); + let pds_endpoint = pds_endpoint.clone(); + + fetches.push(async move { + let mut count: i32 = 0; + for collection in collections.iter() { + match fetch_records_from_pds( + &state, + &pds_endpoint, + &did, + collection, + ) + .await + { + Ok(c) => count += c as i32, + Err(e) => { + tracing::warn!( + did, + collection, + pds = %pds_endpoint, + error = %e, + "failed to fetch records from PDS" + ); + } + } + } + (did, count) + }); + } + _ => { + rx_open = false; + } + } } + + else => break, } } - update_job_counter(state, job_id, "processed_repos", resolved_count).await; + // Drain any remaining fetches + while let Some(result) = fetches.next().await { + let (did, records): (String, i32) = result; + total_records.fetch_add(records, Ordering::Relaxed); + + let sql = adapt_sql( + "UPDATE backfill_repos SET status = 'completed' WHERE job_id = ? AND did = ?", + state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(job_id.as_str()) + .bind(&did) + .execute(&state.db) + .await; + + processed_repos.fetch_add(1, Ordering::Relaxed); + } } // --------------------------------------------------------------------------- -// Phase 3: Fetch records from PDS instances +// Phase 3: Fetch records from PDS instances (legacy, for resumed jobs) // --------------------------------------------------------------------------- async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[String]) -> (i32, i32) { @@ -713,20 +1095,15 @@ async fn run_backfill_job(state: AppState, job_id: String) { } } - if matches!( + let (final_processed, final_records) = if matches!( stage.as_str(), - "pending" | "discovering_repos" | "resolving_pds" + "pending" | "discovering_repos" | "resolving_pds" | "resolving_and_fetching" ) { - run_resolution_phase(&state, &job_id).await; - - if is_cancelled(&state, &job_id).await { - tracing::info!(job_id, "backfill job cancelled"); - finalise_cancel(&state, &job_id).await; - return; - } - } - - let (final_processed, final_records) = run_fetching_phase(&state, &job_id, &collections).await; + run_pipelined_resolve_and_fetch(&state, &job_id, &collections).await + } else { + // stage == "fetching_records": resolution already done (legacy or resumed) + run_fetching_phase(&state, &job_id, &collections).await + }; if is_cancelled(&state, &job_id).await { tracing::info!(job_id, "backfill job cancelled"); @@ -871,7 +1248,7 @@ pub(super) async fn backfill_status( let backend = state.db_backend; let sql = adapt_sql( - "SELECT id, collection, did, status, stage, total_repos, processed_repos, total_records, error, started_at, completed_at, created_at FROM backfill_jobs ORDER BY created_at DESC", + "SELECT id, collection, did, status, stage, total_repos, resolved_repos, processed_repos, total_records, error, started_at, completed_at, created_at FROM backfill_jobs ORDER BY created_at DESC", backend, ); #[allow(clippy::type_complexity)] @@ -884,6 +1261,7 @@ pub(super) async fn backfill_status( Option, Option, Option, + Option, Option, Option, Option, @@ -903,6 +1281,7 @@ pub(super) async fn backfill_status( status, stage, total_repos, + resolved_repos, processed_repos, total_records, error, @@ -917,6 +1296,7 @@ pub(super) async fn backfill_status( status, stage, total_repos, + resolved_repos, processed_repos, total_records, error, diff --git a/src/admin/types.rs b/src/admin/types.rs index 4871b2e..3a5c0d1 100644 --- a/src/admin/types.rs +++ b/src/admin/types.rs @@ -76,6 +76,7 @@ pub(crate) struct BackfillJob { pub(crate) status: String, pub(crate) stage: String, pub(crate) total_repos: Option, + pub(crate) resolved_repos: Option, pub(crate) processed_repos: Option, pub(crate) total_records: Option, pub(crate) error: Option, diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index f2ed0b6..e3f1060 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -90,6 +90,7 @@ function statusBadge(job: BackfillJob) { } function phaseIndex(stage: string): number { + if (stage === "resolving_and_fetching") return 1; const idx = PROGRESS_PHASES.indexOf( stage as (typeof PROGRESS_PHASES)[number], ); @@ -229,6 +230,9 @@ function JobDetail({ function hasReached(phase: (typeof PROGRESS_PHASES)[number]): boolean { if (allDone) return true; + if (job.stage === "resolving_and_fetching") { + return phase === "discovering_repos" || phase === "resolving_pds" || phase === "fetching_records"; + } return current >= phaseIndex(phase); } @@ -307,26 +311,36 @@ function JobDetail({ /> Date: Thu, 21 May 2026 11:32:30 -0500 Subject: [PATCH 134/250] feat: add more detailed information to backfill UI Signed-off-by: Trezy Signed-off-by: Trezy --- Cargo.lock | 39 +- Cargo.toml | 1 + .../20260521000000_backfill_diagnostics.sql | 2 + .../20260521000000_backfill_diagnostics.sql | 2 + src/admin/backfill.rs | 396 +++++++++++- src/admin/mod.rs | 14 + src/admin/settings.rs | 1 + src/admin/types.rs | 71 ++ src/lib.rs | 1 + src/lua/atproto_api.rs | 1 + src/lua/db_api.rs | 1 + src/lua/execute.rs | 1 + src/lua/http_api.rs | 1 + src/lua/xrpc_api.rs | 1 + src/main.rs | 10 + tests/common/app.rs | 1 + tests/lua_atproto_api.rs | 1 + tests/lua_db_api.rs | 1 + web/package-lock.json | 28 + web/package.json | 1 + web/src/app/dashboard/backfill/page.tsx | 610 ++++++++++++++++-- .../app/dashboard/settings/general/page.tsx | 44 ++ web/src/lib/api.ts | 32 +- web/src/types/backfill.ts | 45 ++ 24 files changed, 1231 insertions(+), 74 deletions(-) create mode 100644 migrations/postgres/20260521000000_backfill_diagnostics.sql create mode 100644 migrations/sqlite/20260521000000_backfill_diagnostics.sql diff --git a/Cargo.lock b/Cargo.lock index 29026e6..69eeee1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -157,6 +157,28 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "async-trait" version = "0.1.89" @@ -483,7 +505,7 @@ dependencies = [ "cap-primitives", "cap-std", "io-lifetimes", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -512,7 +534,7 @@ dependencies = [ "maybe-owned", "rustix 1.1.3", "rustix-linux-procfs", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "winx", ] @@ -1293,7 +1315,7 @@ checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", "rustix 1.1.3", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1377,7 +1399,7 @@ checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a" dependencies = [ "io-lifetimes", "rustix 1.1.3", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1626,6 +1648,7 @@ dependencies = [ "aes-gcm", "anyhow", "arc-swap", + "async-stream", "atrium-api", "atrium-common", "atrium-identity", @@ -2095,7 +2118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2285ddfe3054097ef4b2fe909ef8c3bcd1ea52a8f0d274416caebeef39f04a65" dependencies = [ "io-lifetimes", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3264,7 +3287,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3975,7 +3998,7 @@ dependencies = [ "fd-lock", "io-lifetimes", "rustix 0.38.44", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "winx", ] @@ -5544,7 +5567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" dependencies = [ "bitflags", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index aaf858d..40bc34f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ wasmtime = { version = "29", features = ["async"] } wasmtime-wasi = "29" regex = "1.12.3" semver = "1.0" +async-stream = "0.3.6" [[bin]] name = "migrate-lua-sql" diff --git a/migrations/postgres/20260521000000_backfill_diagnostics.sql b/migrations/postgres/20260521000000_backfill_diagnostics.sql new file mode 100644 index 0000000..f80f7c7 --- /dev/null +++ b/migrations/postgres/20260521000000_backfill_diagnostics.sql @@ -0,0 +1,2 @@ +ALTER TABLE backfill_repos ADD COLUMN records_fetched INTEGER NOT NULL DEFAULT 0; +CREATE INDEX IF NOT EXISTS idx_backfill_repos_job_status ON backfill_repos (job_id, status); diff --git a/migrations/sqlite/20260521000000_backfill_diagnostics.sql b/migrations/sqlite/20260521000000_backfill_diagnostics.sql new file mode 100644 index 0000000..f80f7c7 --- /dev/null +++ b/migrations/sqlite/20260521000000_backfill_diagnostics.sql @@ -0,0 +1,2 @@ +ALTER TABLE backfill_repos ADD COLUMN records_fetched INTEGER NOT NULL DEFAULT 0; +CREATE INDEX IF NOT EXISTS idx_backfill_repos_job_status ON backfill_repos (job_id, status); diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 26b7253..c9c3d8c 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -12,6 +12,8 @@ use serde_json::Value; use tokio::sync::mpsc; use uuid::Uuid; +use rand::Rng; + use crate::AppState; use crate::db::{adapt_sql, now_rfc3339}; use crate::error::AppError; @@ -66,6 +68,13 @@ async fn set_stage(state: &AppState, job_id: &str, stage: &str) { .bind(job_id) .execute(&state.db) .await; + publish_event( + state, + super::types::BackfillEvent::JobStageChanged { + job_id: job_id.to_string(), + stage: stage.to_string(), + }, + ); } async fn update_job_counter(state: &AppState, job_id: &str, column: &str, value: i32) { @@ -103,12 +112,13 @@ async fn count_repos(state: &AppState, job_id: &str) -> i32 { .unwrap_or(0) } -async fn cleanup_repos(state: &AppState, job_id: &str) { - let sql = adapt_sql( - "DELETE FROM backfill_repos WHERE job_id = ?", - state.db_backend, - ); - let _ = sqlx::query(&sql).bind(job_id).execute(&state.db).await; +fn publish_event(state: &AppState, event: super::types::BackfillEvent) { + let _ = state.backfill_events_tx.send(event); +} + +fn random_batch_threshold(base: i32) -> i32 { + let low = base - base / 10; + rand::rng().random_range(low..=base) } async fn fail_job(state: &AppState, job_id: &str, error: &str) { @@ -123,7 +133,14 @@ async fn fail_job(state: &AppState, job_id: &str, error: &str) { .bind(job_id) .execute(&state.db) .await; - cleanup_repos(state, job_id).await; + publish_event( + state, + super::types::BackfillEvent::JobCompleted { + job_id: job_id.to_string(), + status: "failed".to_string(), + error: Some(error.to_string()), + }, + ); } async fn is_cancelled(state: &AppState, job_id: &str) -> bool { @@ -159,7 +176,14 @@ async fn finalise_cancel(state: &AppState, job_id: &str) { .bind(job_id) .execute(&state.db) .await; - cleanup_repos(state, job_id).await; + publish_event( + state, + super::types::BackfillEvent::JobCompleted { + job_id: job_id.to_string(), + status: "cancelled".to_string(), + error: None, + }, + ); } async fn complete_job( @@ -182,7 +206,14 @@ async fn complete_job( .bind(job_id) .execute(&state.db) .await; - cleanup_repos(state, job_id).await; + publish_event( + state, + super::types::BackfillEvent::JobCompleted { + job_id: job_id.to_string(), + status: "completed".to_string(), + error: error.map(|e| e.to_string()), + }, + ); } // --------------------------------------------------------------------------- @@ -207,6 +238,13 @@ async fn run_discovery_phase( .bind(did) .execute(&state.db) .await; + publish_event( + state, + super::types::BackfillEvent::RepoDiscovered { + job_id: job_id.to_string(), + did: did.to_string(), + }, + ); } else { for collection in collections { if is_cancelled(state, job_id).await { @@ -301,6 +339,15 @@ async fn discover_repos_from_relay( if let Ok(result) = query.execute(&state.db).await { running_total += result.rows_affected() as i32; } + for repo in chunk { + publish_event( + state, + super::types::BackfillEvent::RepoDiscovered { + job_id: job_id.to_string(), + did: repo.did.clone(), + }, + ); + } } } @@ -401,6 +448,8 @@ async fn run_pipelined_resolve_and_fetch( .unwrap_or_default(); let mut attempted: i32 = 0; + let mut next_flush = random_batch_threshold(100); + let mut next_cancel_check = random_batch_threshold(100); for (did,) in &unresolved { if resolver_cancelled.load(Ordering::Relaxed) { break; @@ -425,8 +474,17 @@ async fn run_pipelined_resolve_and_fetch( .execute(&resolver_state.db) .await; + publish_event( + &resolver_state, + super::types::BackfillEvent::RepoResolved { + job_id: resolver_job_id.clone(), + did: did.clone(), + pds_endpoint: pds.clone(), + }, + ); + let count = resolver_resolved.fetch_add(1, Ordering::Relaxed) + 1; - if count % 100 == 0 { + if count >= next_flush { update_job_counter( &resolver_state, &resolver_job_id, @@ -434,7 +492,18 @@ async fn run_pipelined_resolve_and_fetch( count, ) .await; + next_flush = count + random_batch_threshold(100); } + publish_event( + &resolver_state, + super::types::BackfillEvent::JobCounters { + job_id: resolver_job_id.clone(), + total_repos: None, + resolved_repos: Some(count), + processed_repos: None, + total_records: None, + }, + ); if tx_resolver.send((did.clone(), pds)).await.is_err() { break; @@ -446,9 +515,12 @@ async fn run_pipelined_resolve_and_fetch( } attempted += 1; - if attempted % 100 == 0 && is_cancelled(&resolver_state, &resolver_job_id).await { - resolver_cancelled.store(true, Ordering::Relaxed); - break; + if attempted >= next_cancel_check { + if is_cancelled(&resolver_state, &resolver_job_id).await { + resolver_cancelled.store(true, Ordering::Relaxed); + break; + } + next_cancel_check = attempted + random_batch_threshold(100); } } @@ -657,6 +729,7 @@ async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::R } = ctx; let mut fetches = FuturesUnordered::new(); let mut rx_open = true; + let mut next_flush = random_batch_threshold(10); loop { tokio::select! { @@ -668,18 +741,26 @@ async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::R // Mark DID as completed let sql = adapt_sql( - "UPDATE backfill_repos SET status = 'completed' WHERE job_id = ? AND did = ?", + "UPDATE backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) + .bind(records) .bind(job_id.as_str()) .bind(&did) .execute(&state.db) .await; + publish_event(&state, super::types::BackfillEvent::RepoFetched { + job_id: job_id.to_string(), + did: did.clone(), + pds_endpoint: pds_endpoint.clone(), + records_fetched: records, + }); + let repos = processed_repos.fetch_add(1, Ordering::Relaxed) + 1; - if repos % 10 == 0 { - let records = total_records.load(Ordering::Relaxed); + let records = total_records.load(Ordering::Relaxed); + if repos >= next_flush { let sql = adapt_sql( "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", state.db_backend, @@ -695,7 +776,15 @@ async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::R cancelled.store(true, Ordering::Relaxed); break; } + next_flush = repos + random_batch_threshold(10); } + publish_event(&state, super::types::BackfillEvent::JobCounters { + job_id: job_id.to_string(), + total_repos: None, + resolved_repos: None, + processed_repos: Some(repos), + total_records: Some(records), + }); } did = rx.recv(), if rx_open && fetches.len() < 3 => { @@ -747,15 +836,26 @@ async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::R total_records.fetch_add(records, Ordering::Relaxed); let sql = adapt_sql( - "UPDATE backfill_repos SET status = 'completed' WHERE job_id = ? AND did = ?", + "UPDATE backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) + .bind(records) .bind(job_id.as_str()) .bind(&did) .execute(&state.db) .await; + publish_event( + &state, + super::types::BackfillEvent::RepoFetched { + job_id: job_id.to_string(), + did: did.clone(), + pds_endpoint: pds_endpoint.clone(), + records_fetched: records, + }, + ); + processed_repos.fetch_add(1, Ordering::Relaxed); } } @@ -815,6 +915,9 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin let processed_repos = Arc::new(AtomicI32::new(already_completed)); let total_records = Arc::new(AtomicI32::new(existing_records)); let cancelled = Arc::new(AtomicBool::new(false)); + let next_flush = Arc::new(AtomicI32::new( + already_completed + random_batch_threshold(10), + )); let state = Arc::new(state.clone()); let collections = Arc::new(collections.to_vec()); let job_id_arc = Arc::new(job_id.to_string()); @@ -828,6 +931,7 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin let processed_repos = Arc::clone(&processed_repos); let total_records = Arc::clone(&total_records); let cancelled = Arc::clone(&cancelled); + let next_flush = Arc::clone(&next_flush); let job_id = Arc::clone(&job_id_arc); async move { @@ -838,6 +942,7 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin let processed_repos = Arc::clone(&processed_repos); let total_records = Arc::clone(&total_records); let cancelled = Arc::clone(&cancelled); + let next_flush = Arc::clone(&next_flush); let pds_endpoint = pds_endpoint.clone(); let job_id = Arc::clone(&job_id); @@ -846,6 +951,7 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin return; } + let mut did_records: i32 = 0; for collection in collections.iter() { match fetch_records_from_pds( &state, @@ -856,6 +962,7 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin .await { Ok(count) => { + did_records += count as i32; total_records .fetch_add(count as i32, Ordering::Relaxed); } @@ -873,19 +980,23 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin // Mark DID as completed let sql = adapt_sql( - "UPDATE backfill_repos SET status = 'completed' WHERE job_id = ? AND did = ?", + "UPDATE backfill_repos SET status = 'completed', records_fetched = ? WHERE job_id = ? AND did = ?", state.db_backend, ); let _ = sqlx::query(&sql) + .bind(did_records) .bind(job_id.as_str()) .bind(&did) .execute(&state.db) .await; let repos = processed_repos.fetch_add(1, Ordering::Relaxed) + 1; + let records = total_records.load(Ordering::Relaxed); - if repos % 10 == 0 { - let records = total_records.load(Ordering::Relaxed); + let threshold = next_flush.load(Ordering::Relaxed); + if repos >= threshold + && next_flush.compare_exchange(threshold, repos + random_batch_threshold(10), Ordering::Relaxed, Ordering::Relaxed).is_ok() + { let backend = state.db_backend; let sql = adapt_sql( "UPDATE backfill_jobs SET processed_repos = ?, total_records = ? WHERE id = ?", @@ -902,6 +1013,14 @@ async fn run_fetching_phase(state: &AppState, job_id: &str, collections: &[Strin cancelled.store(true, Ordering::Relaxed); } } + + publish_event(&state, super::types::BackfillEvent::JobCounters { + job_id: job_id.to_string(), + total_repos: None, + resolved_repos: None, + processed_repos: Some(repos), + total_records: Some(records), + }); } }) .await; @@ -1311,6 +1430,243 @@ pub(super) async fn backfill_status( Ok(Json(jobs)) } +// --------------------------------------------------------------------------- +// SSE events endpoint +// --------------------------------------------------------------------------- + +pub(super) async fn backfill_events( + State(state): State, + Path(job_id): Path, + auth: UserAuth, +) -> Result< + axum::response::sse::Sse< + impl futures_util::Stream>, + >, + AppError, +> { + auth.require(Permission::BackfillRead).await?; + + let mut rx = state.backfill_events_tx.subscribe(); + + let stream = async_stream::stream! { + loop { + match rx.recv().await { + Ok(event) => { + let event_job_id = match &event { + super::types::BackfillEvent::RepoDiscovered { job_id, .. } + | super::types::BackfillEvent::RepoResolved { job_id, .. } + | super::types::BackfillEvent::RepoFetched { job_id, .. } + | super::types::BackfillEvent::JobCounters { job_id, .. } + | super::types::BackfillEvent::JobStageChanged { job_id, .. } + | super::types::BackfillEvent::JobCompleted { job_id, .. } => job_id, + }; + if *event_job_id != job_id { + continue; + } + if let Ok(json) = serde_json::to_string(&event) { + yield Ok(axum::response::sse::Event::default().event("event").data(json)); + } + } + Err(tokio::sync::broadcast::error::RecvError::Lagged(n)) => { + tracing::warn!(job_id, skipped = n, "SSE client lagged behind"); + continue; + } + Err(tokio::sync::broadcast::error::RecvError::Closed) => break, + } + } + }; + + Ok(axum::response::sse::Sse::new(stream).keep_alive(axum::response::sse::KeepAlive::default())) +} + +// --------------------------------------------------------------------------- +// REST detail endpoints +// --------------------------------------------------------------------------- + +#[derive(Deserialize)] +pub(super) struct ReposQuery { + phase: Option, + cursor: Option, + limit: Option, +} + +pub(super) async fn backfill_repos( + State(state): State, + Path(job_id): Path, + auth: UserAuth, + axum::extract::Query(query): axum::extract::Query, +) -> Result, AppError> { + auth.require(Permission::BackfillRead).await?; + + let limit = query.limit.unwrap_or(50).min(100); + let phase_filter = match query.phase.as_deref() { + Some("resolved") => " AND pds_endpoint IS NOT NULL", + Some("fetched") => " AND status = 'completed'", + _ => "", + }; + let cursor_filter = if query.cursor.is_some() { + " AND did > ?" + } else { + "" + }; + + let sql_str = format!( + "SELECT did, pds_endpoint, status, records_fetched FROM backfill_repos WHERE job_id = ?{phase_filter}{cursor_filter} ORDER BY did ASC LIMIT ?", + ); + let sql = adapt_sql(&sql_str, state.db_backend); + + let mut q = sqlx::query_as::<_, (String, Option, String, i32)>(&sql).bind(&job_id); + if let Some(ref cursor) = query.cursor { + q = q.bind(cursor); + } + q = q.bind(limit + 1); + + let rows: Vec<(String, Option, String, i32)> = q + .fetch_all(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to query backfill repos: {e}")))?; + + let has_more = rows.len() > limit as usize; + let repos: Vec = rows + .into_iter() + .take(limit as usize) + .map( + |(did, pds_endpoint, status, records_fetched)| super::types::BackfillRepoEntry { + did, + pds_endpoint, + status, + records_fetched, + }, + ) + .collect(); + + let cursor = if has_more { + repos.last().map(|r| r.did.clone()) + } else { + None + }; + + Ok(Json(super::types::BackfillReposResponse { repos, cursor })) +} + +pub(super) async fn backfill_pds_summary( + State(state): State, + Path(job_id): Path, + auth: UserAuth, +) -> Result, AppError> { + auth.require(Permission::BackfillRead).await?; + + let sql = adapt_sql( + "SELECT pds_endpoint, COUNT(*) as total_repos, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed_repos, SUM(records_fetched) as total_records FROM backfill_repos WHERE job_id = ? AND pds_endpoint IS NOT NULL GROUP BY pds_endpoint ORDER BY COUNT(*) DESC", + state.db_backend, + ); + + let rows: Vec<(String, i32, i32, i64)> = sqlx::query_as(&sql) + .bind(&job_id) + .fetch_all(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to query PDS summary: {e}")))?; + + let pds_endpoints: Vec = rows + .into_iter() + .map( + |(pds_endpoint, total_repos, completed_repos, total_records)| { + super::types::PdsSummaryEntry { + pds_endpoint, + total_repos, + completed_repos, + total_records: total_records as i32, + } + }, + ) + .collect(); + + Ok(Json(super::types::PdsSummaryResponse { pds_endpoints })) +} + +// --------------------------------------------------------------------------- +// Flush endpoints +// --------------------------------------------------------------------------- + +pub(super) async fn flush_backfill_details( + State(state): State, + Path(job_id): Path, + auth: UserAuth, +) -> Result { + auth.require(Permission::BackfillCreate).await?; + + let sql = adapt_sql( + "DELETE FROM backfill_repos WHERE job_id = ?", + state.db_backend, + ); + let _ = sqlx::query(&sql).bind(&job_id).execute(&state.db).await; + + Ok(StatusCode::NO_CONTENT) +} + +pub(super) async fn flush_all_backfill_details( + State(state): State, + auth: UserAuth, +) -> Result { + auth.require(Permission::BackfillCreate).await?; + + let sql = adapt_sql( + "DELETE FROM backfill_repos WHERE job_id IN (SELECT id FROM backfill_jobs WHERE status IN ('completed', 'cancelled', 'failed'))", + state.db_backend, + ); + let _ = sqlx::query(&sql).execute(&state.db).await; + + Ok(StatusCode::NO_CONTENT) +} + +// --------------------------------------------------------------------------- +// Retention cleanup +// --------------------------------------------------------------------------- + +pub async fn run_backfill_retention_cleanup(state: &AppState) { + use super::settings::get_setting; + + let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(86400)); + interval.tick().await; // first tick is immediate — run once on startup + + loop { + interval.tick().await; + + let retention_days: i64 = + get_setting(&state.db, "backfill_retention_days", state.db_backend) + .await + .and_then(|v| v.parse().ok()) + .unwrap_or(28); + + if retention_days == 0 { + continue; + } + + let cutoff = chrono::Utc::now() - chrono::Duration::days(retention_days); + let cutoff_str = cutoff.to_rfc3339(); + + let sql = adapt_sql( + "DELETE FROM backfill_repos WHERE job_id IN (SELECT id FROM backfill_jobs WHERE completed_at IS NOT NULL AND completed_at < ?)", + state.db_backend, + ); + match sqlx::query(&sql).bind(&cutoff_str).execute(&state.db).await { + Ok(result) => { + let deleted = result.rows_affected(); + if deleted > 0 { + tracing::info!( + deleted, + retention_days, + "cleaned up old backfill detail rows" + ); + } + } + Err(e) => { + tracing::warn!(error = %e, "backfill retention cleanup failed"); + } + } + } +} + // --------------------------------------------------------------------------- // Startup resumption // --------------------------------------------------------------------------- diff --git a/src/admin/mod.rs b/src/admin/mod.rs index fa7722a..5cba8b4 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -37,7 +37,21 @@ pub fn admin_routes(_state: AppState) -> Router { .route("/stats", get(stats::stats)) .route("/backfill", post(backfill::create_backfill)) .route("/backfill/status", get(backfill::backfill_status)) + .route( + "/backfill/details", + delete(backfill::flush_all_backfill_details), + ) .route("/backfill/{id}/cancel", post(backfill::cancel_backfill)) + .route("/backfill/{id}/events", get(backfill::backfill_events)) + .route("/backfill/{id}/repos", get(backfill::backfill_repos)) + .route( + "/backfill/{id}/pds-summary", + get(backfill::backfill_pds_summary), + ) + .route( + "/backfill/{id}/details", + delete(backfill::flush_backfill_details), + ) .route("/events", get(events::list_events)) .route("/users", post(users::create_user).get(users::list_users)) .route("/users/transfer-super", post(users::transfer_super)) diff --git a/src/admin/settings.rs b/src/admin/settings.rs index f86c065..8c6a138 100644 --- a/src/admin/settings.rs +++ b/src/admin/settings.rs @@ -16,6 +16,7 @@ use super::types::{SettingEntry, UpsertSettingBody}; const ENV_FALLBACKS: &[(&str, &str)] = &[ ("app_name", "APP_NAME"), + ("backfill_retention_days", "BACKFILL_RETENTION_DAYS"), ("client_uri", "CLIENT_URI"), ("feature.spaces_enabled", "FEATURE_SPACES_ENABLED"), ("logo_uri", "LOGO_URI"), diff --git a/src/admin/types.rs b/src/admin/types.rs index 3a5c0d1..2e903a8 100644 --- a/src/admin/types.rs +++ b/src/admin/types.rs @@ -85,6 +85,77 @@ pub(crate) struct BackfillJob { pub(crate) created_at: String, } +// --------------------------------------------------------------------------- +// Backfill event types +// --------------------------------------------------------------------------- + +#[derive(Clone, Debug, Serialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum BackfillEvent { + RepoDiscovered { + job_id: String, + did: String, + }, + RepoResolved { + job_id: String, + did: String, + pds_endpoint: String, + }, + RepoFetched { + job_id: String, + did: String, + pds_endpoint: String, + records_fetched: i32, + }, + JobCounters { + job_id: String, + total_repos: Option, + resolved_repos: Option, + processed_repos: Option, + total_records: Option, + }, + JobStageChanged { + job_id: String, + stage: String, + }, + JobCompleted { + job_id: String, + status: String, + error: Option, + }, +} + +// --------------------------------------------------------------------------- +// Backfill detail response types +// --------------------------------------------------------------------------- + +#[derive(Serialize)] +pub(crate) struct BackfillRepoEntry { + pub(crate) did: String, + pub(crate) pds_endpoint: Option, + pub(crate) status: String, + pub(crate) records_fetched: i32, +} + +#[derive(Serialize)] +pub(crate) struct BackfillReposResponse { + pub(crate) repos: Vec, + pub(crate) cursor: Option, +} + +#[derive(Serialize)] +pub(crate) struct PdsSummaryEntry { + pub(crate) pds_endpoint: String, + pub(crate) total_repos: i32, + pub(crate) completed_repos: i32, + pub(crate) total_records: i32, +} + +#[derive(Serialize)] +pub(crate) struct PdsSummaryResponse { + pub(crate) pds_endpoints: Vec, +} + // --------------------------------------------------------------------------- // Network lexicon types // --------------------------------------------------------------------------- diff --git a/src/lib.rs b/src/lib.rs index fe19b38..9ea8e48 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,6 +78,7 @@ pub struct AppState { pub official_registry: SharedRegistry, pub official_registry_config: RegistryConfig, pub proxy_config: Arc>, + pub backfill_events_tx: tokio::sync::broadcast::Sender, } impl axum::extract::FromRef for axum_extra::extract::cookie::Key { diff --git a/src/lua/atproto_api.rs b/src/lua/atproto_api.rs index e70e488..560e638 100644 --- a/src/lua/atproto_api.rs +++ b/src/lua/atproto_api.rs @@ -582,6 +582,7 @@ mod tests { proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( crate::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index 5899bbd..f22725b 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -790,6 +790,7 @@ mod tests { proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( crate::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/src/lua/execute.rs b/src/lua/execute.rs index 2e32cb9..97f5e6b 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -1180,6 +1180,7 @@ mod tests { proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( crate::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/src/lua/http_api.rs b/src/lua/http_api.rs index 39b7a22..2c20331 100644 --- a/src/lua/http_api.rs +++ b/src/lua/http_api.rs @@ -188,6 +188,7 @@ mod tests { proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( crate::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/src/lua/xrpc_api.rs b/src/lua/xrpc_api.rs index 308be59..6cb7860 100644 --- a/src/lua/xrpc_api.rs +++ b/src/lua/xrpc_api.rs @@ -292,6 +292,7 @@ mod tests { proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( crate::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/src/main.rs b/src/main.rs index 16f92fe..595bb0a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -612,6 +612,8 @@ async fn main() { std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new(config))) }; + let (backfill_events_tx, _) = tokio::sync::broadcast::channel(1024); + let state = AppState { config: config.clone(), http, @@ -631,6 +633,7 @@ async fn main() { official_registry, official_registry_config, proxy_config, + backfill_events_tx, }; jetstream::spawn(state.clone(), collections_rx); @@ -646,6 +649,13 @@ async fn main() { happyview::admin::backfill::resume_backfill_jobs(&state).await; + { + let state = state.clone(); + tokio::spawn(async move { + happyview::admin::backfill::run_backfill_retention_cleanup(&state).await; + }); + } + let app = server::router(state); let addr = config.listen_addr(); diff --git a/tests/common/app.rs b/tests/common/app.rs index f39914b..2331947 100644 --- a/tests/common/app.rs +++ b/tests/common/app.rs @@ -167,6 +167,7 @@ impl TestApp { proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( happyview::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, }; let router = server::router(state.clone()).layer(axum::middleware::from_fn( diff --git a/tests/lua_atproto_api.rs b/tests/lua_atproto_api.rs index 4946ced..459a9b6 100644 --- a/tests/lua_atproto_api.rs +++ b/tests/lua_atproto_api.rs @@ -101,6 +101,7 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( happyview::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/tests/lua_db_api.rs b/tests/lua_db_api.rs index 1eb8de3..cd6a621 100644 --- a/tests/lua_db_api.rs +++ b/tests/lua_db_api.rs @@ -104,6 +104,7 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( happyview::proxy_config::ProxyConfig::default(), ))), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, } } diff --git a/web/package-lock.json b/web/package-lock.json index ed30f1a..df10472 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -13,6 +13,7 @@ "@tabler/icons-react": "^3.36.1", "@tailwindcss/typography": "^0.5.19", "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.25", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", @@ -4143,6 +4144,23 @@ "react-dom": ">=16.8" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.13.25", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.25.tgz", + "integrity": "sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.15.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@tanstack/table-core": { "version": "8.21.3", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", @@ -4156,6 +4174,16 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@tanstack/virtual-core": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.15.0.tgz", + "integrity": "sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@ts-morph/common": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz", diff --git a/web/package.json b/web/package.json index 6286c50..517f9d7 100644 --- a/web/package.json +++ b/web/package.json @@ -14,6 +14,7 @@ "@tabler/icons-react": "^3.36.1", "@tailwindcss/typography": "^0.5.19", "@tanstack/react-table": "^8.21.3", + "@tanstack/react-virtual": "^3.13.25", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index e3f1060..3331075 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -1,18 +1,44 @@ "use client"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useCurrentUser } from "@/hooks/use-current-user"; import { cancelBackfillJob, createBackfillJob, getBackfillJobs, + getBackfillRepos, + getBackfillPdsSummary, + flushBackfillDetails, + flushAllBackfillDetails, getLexicons, } from "@/lib/api"; -import type { BackfillJob } from "@/types/backfill"; -import { CheckCircle2, Circle, Loader2 } from "lucide-react"; +import type { + BackfillJob, + BackfillRepoEntry, + PdsSummaryEntry, + BackfillEvent, + BlueskyProfile, +} from "@/types/backfill"; +import { CheckCircle2, ChevronRight, Circle, Loader2 } from "lucide-react"; import { SiteHeader } from "@/components/site-header"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; import { Badge } from "@/components/ui/badge"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; import { Button } from "@/components/ui/button"; import { Combobox, @@ -97,6 +123,257 @@ function phaseIndex(stage: string): number { return idx; } +// SSE hook for backfill events +function useBackfillSSE(jobId: string | null, active: boolean): BackfillEvent[] { + const [events, setEvents] = useState([]); + + useEffect(() => { + if (!jobId || !active) { + setEvents([]); + return; + } + + const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ""; + const es = new EventSource(`${basePath}/admin/backfill/${jobId}/events`, { + withCredentials: true, + }); + + es.addEventListener("event", (e) => { + try { + const event: BackfillEvent = JSON.parse((e as MessageEvent).data); + setEvents((prev) => [...prev, event]); + } catch { /* ignore parse errors */ } + }); + + return () => es.close(); + }, [jobId, active]); + + return events; +} + +// Batch Bluesky profile resolution hook +function useBlueskyProfiles(dids: string[]): Map { + const [profiles, setProfiles] = useState>(new Map()); + const resolvedRef = useRef>(new Set()); + const pendingRef = useRef(false); + + useEffect(() => { + const unresolved = dids.filter((d) => !resolvedRef.current.has(d)); + if (unresolved.length === 0 || pendingRef.current) return; + + pendingRef.current = true; + + const batches: string[][] = []; + for (let i = 0; i < unresolved.length; i += 25) { + batches.push(unresolved.slice(i, i + 25)); + } + + // Mark all as resolved immediately to prevent re-fetching + for (const did of unresolved) { + resolvedRef.current.add(did); + } + + Promise.all( + batches.map(async (batch) => { + const params = batch.map((d) => `actors=${encodeURIComponent(d)}`).join("&"); + try { + const resp = await fetch( + `https://public.api.bsky.app/xrpc/app.bsky.actor.getProfiles?${params}` + ); + if (!resp.ok) return []; + const data = await resp.json(); + return (data.profiles || []) as BlueskyProfile[]; + } catch { + return []; + } + }) + ).then((results) => { + setProfiles((prev) => { + const newProfiles = new Map(prev); + for (const batch of results) { + for (const p of batch) { + newProfiles.set(p.did, p); + } + } + return newProfiles; + }); + pendingRef.current = false; + }); + }, [dids]); + + return profiles; +} + +const BSKY_PDS_SUFFIX = ".bsky.network"; +const BSKY_PDS_HOSTNAMES = ["bsky.social", "staging.bsky.dev"]; +const failedFaviconUrls = new Set(); + +function isBskyPds(pdsEndpoint: string): boolean { + try { + const hostname = new URL(pdsEndpoint).hostname; + return BSKY_PDS_HOSTNAMES.includes(hostname) || hostname.endsWith(BSKY_PDS_SUFFIX); + } catch { + return false; + } +} + +function PdsFavicon({ pdsEndpoint }: { pdsEndpoint: string }) { + let hostname: string; + try { + hostname = new URL(pdsEndpoint).hostname; + } catch { + return ; + } + + if (isBskyPds(pdsEndpoint)) { + return ( + + + + ); + } + + const faviconUrl = `https://twenty-icons.com/${hostname}`; + + if (failedFaviconUrls.has(faviconUrl)) { + return ; + } + + return ; +} + +function PdsFaviconImg({ url }: { url: string }) { + const [failed, setFailed] = useState(false); + + if (failed) return ; + + return ( + { failedFaviconUrls.add(url); setFailed(true); }} + /> + ); +} + +function PdsPlaceholderIcon() { + return ( + + + + + + + + ); +} + +function ScrollSentinel({ onVisible }: { onVisible: () => void }) { + const ref = useRef(null); + const onVisibleRef = useRef(onVisible); + onVisibleRef.current = onVisible; + + useEffect(() => { + const el = ref.current; + if (!el) return; + const observer = new IntersectionObserver( + ([entry]) => { if (entry.isIntersecting) onVisibleRef.current(); }, + { rootMargin: "100px" }, + ); + observer.observe(el); + return () => observer.disconnect(); + }, []); + + return
; +} + +function AnimatedNumber({ value }: { value: number }) { + const targetRef = useRef(value); + const displayedRef = useRef(value); + const [displayed, setDisplayed] = useState(value); + const rafRef = useRef(0); + + targetRef.current = value; + + useEffect(() => { + cancelAnimationFrame(rafRef.current); + + function tick() { + const current = displayedRef.current; + const target = targetRef.current; + const diff = target - current; + + if (Math.abs(diff) < 0.5) { + displayedRef.current = target; + setDisplayed(target); + return; + } + + const next = current + diff * 0.06; + displayedRef.current = next; + setDisplayed(next); + rafRef.current = requestAnimationFrame(tick); + } + + tick(); + return () => cancelAnimationFrame(rafRef.current); + }, [value]); + + return <>{Math.round(displayed).toLocaleString()}; +} + +function CompactRepoRow({ did, profile }: { + did: string; + profile?: BlueskyProfile; +}) { + return ( +
+
+ {profile?.avatar && ( + + )} +
+ + {profile?.handle ? `@${profile.handle}` : {did}} + +
+ ); +} + +function ProfileRow({ did, profile, suffix }: { + did: string; + profile?: BlueskyProfile; + suffix?: React.ReactNode; +}) { + return ( +
+
+ {profile?.avatar && ( + + )} +
+
+

+ {profile?.displayName || profile?.handle || did} +

+ {profile?.handle && ( +

@{profile.handle}

+ )} + {!profile?.handle && ( +

{did}

+ )} +
+ {suffix && ( + {suffix} + )} +
+ ); +} + export default function BackfillPage() { const { hasPermission } = useCurrentUser(); const [jobs, setJobs] = useState([]); @@ -119,6 +396,7 @@ export default function BackfillPage() { }, [load]); const selectedJob = jobs.find((j) => j.id === selectedJobId) ?? null; + const canFlush = hasPermission("backfill:create"); return ( <> @@ -128,9 +406,32 @@ export default function BackfillPage() {

Backfill Jobs

- {hasPermission("backfill:create") && ( - - )} +
+ {canFlush && ( + + + + + + + Clear all job details? + + This will permanently delete per-repo detail data for all backfill jobs. + + + + Cancel + { + await flushAllBackfillDetails(); + }}>Clear + + + + )} + {hasPermission("backfill:create") && ( + + )} +
@@ -201,6 +502,7 @@ export default function BackfillPage() { { await cancelBackfillJob(selectedJob.id); load(); @@ -217,10 +519,12 @@ export default function BackfillPage() { function JobDetail({ job, canCancel, + canFlush, onCancel, }: { job: BackfillJob; canCancel: boolean; + canFlush: boolean; onCancel: () => Promise; }) { const [cancelling, setCancelling] = useState(false); @@ -228,6 +532,21 @@ function JobDetail({ const allDone = job.status === "completed"; const isActive = job.status === "running" || job.status === "cancelling"; + // Detail data state + const [discoveredRepos, setDiscoveredRepos] = useState([]); + const [discoveredCursor, setDiscoveredCursor] = useState(null); + const [discoveredLoaded, setDiscoveredLoaded] = useState(false); + + const [pdsSummary, setPdsSummary] = useState([]); + const [pdsLoaded, setPdsLoaded] = useState(false); + + const [fetchedRepos, setFetchedRepos] = useState([]); + const [fetchedCursor, setFetchedCursor] = useState(null); + const [fetchedLoaded, setFetchedLoaded] = useState(false); + + // SSE events for active jobs + const sseEvents = useBackfillSSE(job.id, isActive); + function hasReached(phase: (typeof PROGRESS_PHASES)[number]): boolean { if (allDone) return true; if (job.stage === "resolving_and_fetching") { @@ -245,6 +564,102 @@ function JobDetail({ } } + // Auto-load detail data when phases are reached + const discoveredReached = hasReached("discovering_repos"); + const pdsReached = hasReached("resolving_pds"); + const fetchedReached = hasReached("fetching_records") || job.stage === "resolving_and_fetching"; + + useEffect(() => { + if (discoveredReached && !discoveredLoaded) { + getBackfillRepos(job.id, { phase: "discovered", limit: 50 }) + .then((resp) => { setDiscoveredRepos(resp.repos); setDiscoveredCursor(resp.cursor); setDiscoveredLoaded(true); }) + .catch(() => {}); + } + }, [job.id, discoveredReached, discoveredLoaded]); + + useEffect(() => { + if (pdsReached && !pdsLoaded) { + getBackfillPdsSummary(job.id) + .then((resp) => { setPdsSummary(resp.pds_endpoints); setPdsLoaded(true); }) + .catch(() => {}); + } + }, [job.id, pdsReached, pdsLoaded]); + + useEffect(() => { + if (fetchedReached && !fetchedLoaded) { + getBackfillRepos(job.id, { phase: "fetched", limit: 50 }) + .then((resp) => { setFetchedRepos(resp.repos); setFetchedCursor(resp.cursor); setFetchedLoaded(true); }) + .catch(() => {}); + } + }, [job.id, fetchedReached, fetchedLoaded]); + + const loadMoreDiscovered = useCallback(async () => { + if (!discoveredCursor) return; + try { + const resp = await getBackfillRepos(job.id, { phase: "discovered", cursor: discoveredCursor, limit: 50 }); + setDiscoveredRepos((prev) => [...prev, ...resp.repos]); + setDiscoveredCursor(resp.cursor); + } catch { /* ignore */ } + }, [job.id, discoveredCursor]); + + const loadMoreFetched = useCallback(async () => { + if (!fetchedCursor) return; + try { + const resp = await getBackfillRepos(job.id, { phase: "fetched", cursor: fetchedCursor, limit: 50 }); + setFetchedRepos((prev) => [...prev, ...resp.repos]); + setFetchedCursor(resp.cursor); + } catch { /* ignore */ } + }, [job.id, fetchedCursor]); + + // Process SSE events + useEffect(() => { + for (const event of sseEvents) { + if (event.type === "repo_discovered" && event.did) { + setDiscoveredRepos((prev) => { + if (prev.some((r) => r.did === event.did)) return prev; + return [{ did: event.did!, pds_endpoint: null, status: "pending", records_fetched: 0 }, ...prev]; + }); + } + if (event.type === "repo_resolved" && event.did && event.pds_endpoint) { + setDiscoveredRepos((prev) => + prev.map((r) => r.did === event.did ? { ...r, pds_endpoint: event.pds_endpoint! } : r) + ); + setPdsSummary((prev) => { + const idx = prev.findIndex((p) => p.pds_endpoint === event.pds_endpoint); + if (idx >= 0) { + const updated = [...prev]; + updated[idx] = { ...updated[idx], total_repos: updated[idx].total_repos + 1 }; + return updated; + } + return [...prev, { pds_endpoint: event.pds_endpoint!, total_repos: 1, completed_repos: 0, total_records: 0 }]; + }); + } + if (event.type === "repo_fetched" && event.did) { + setFetchedRepos((prev) => { + if (prev.some((r) => r.did === event.did)) return prev; + return [{ did: event.did!, pds_endpoint: event.pds_endpoint ?? null, status: "completed", records_fetched: event.records_fetched ?? 0 }, ...prev]; + }); + setPdsSummary((prev) => { + if (!event.pds_endpoint) return prev; + return prev.map((p) => p.pds_endpoint === event.pds_endpoint + ? { ...p, completed_repos: p.completed_repos + 1, total_records: p.total_records + (event.records_fetched ?? 0) } + : p + ); + }); + } + } + }, [sseEvents]); + + // Collect all visible DIDs for profile resolution + const allVisibleDids = useMemo(() => { + const dids = new Set(); + for (const r of discoveredRepos) dids.add(r.did); + for (const r of fetchedRepos) dids.add(r.did); + return Array.from(dids); + }, [discoveredRepos, fetchedRepos]); + + const profiles = useBlueskyProfiles(allVisibleDids); + return ( <> @@ -306,9 +721,27 @@ function JobDetail({ label="Discovering repos" active={isActive && job.stage === "discovering_repos"} reached={hasReached("discovering_repos")} - value={job.total_repos?.toLocaleString()} + value={job.total_repos != null ? : undefined} suffix="repos found" - /> + loading={discoveredReached && !discoveredLoaded} + > + {discoveredRepos.length > 0 ? ( +
+ {discoveredRepos.map((repo) => ( + + ))} + {discoveredCursor && ( + + )} +
+ ) : discoveredLoaded ? ( +

No repos discovered yet.

+ ) : null} + / : undefined } suffix="resolved" - /> + loading={pdsReached && !pdsLoaded} + > + {pdsSummary.length > 0 ? ( +
+ {pdsSummary + .sort((a, b) => b.total_repos - a.total_repos) + .map((pds) => ( +
+ + {new URL(pds.pds_endpoint).hostname} + + / repos · records + +
+ ))} +
+ ) : pdsLoaded ? ( +

No PDS data yet.

+ ) : null} +
/ repos : undefined } suffix={ hasReached("fetching_records") || job.stage === "resolving_and_fetching" - ? `${job.total_records?.toLocaleString() ?? "0"} records` + ? <> records : undefined } - /> + loading={fetchedReached && !fetchedLoaded} + > + {fetchedRepos.filter((r) => r.records_fetched > 0).length > 0 ? ( +
+ {fetchedRepos.filter((r) => r.records_fetched > 0).map((repo) => ( + records} + /> + ))} + {fetchedCursor && ( + + )} +
+ ) : fetchedLoaded ? ( +

No repos fetched yet.

+ ) : null} +
- {canCancel && isActive && ( - + + {canFlush && !isActive && ( + + + + + + + Clear job details? + + This will permanently delete per-repo detail data for this backfill job. + + + + Cancel + { + await flushBackfillDetails(job.id); + setDiscoveredRepos([]); + setDiscoveredCursor(null); + setDiscoveredLoaded(false); + setPdsSummary([]); + setPdsLoaded(false); + setFetchedRepos([]); + setFetchedCursor(null); + setFetchedLoaded(false); + }}>Clear + + + + )} + {canCancel && isActive && ( - - )} + )} + ); } @@ -370,42 +870,64 @@ function ProgressRow({ reached, value, suffix, + loading, + children, }: { label: string; active: boolean; reached: boolean; - value?: string; - suffix?: string; + value?: React.ReactNode; + suffix?: React.ReactNode; + loading?: boolean; + children?: React.ReactNode; }) { + const [open, setOpen] = useState(false); const done = reached && !active; + const expandable = reached; return ( -
- - {active ? ( - - ) : done ? ( - - ) : ( - - )} - - {label} - {reached && value && ( - - {value} - {suffix ? ` · ${suffix}` : ""} - + + +
+ + {active ? ( + + ) : done ? ( + + ) : ( + + )} + + {label} + {reached && value && ( + + {value} + {suffix && <> · {suffix}} + + )} + {expandable && ( + + )} +
+
+ {expandable && ( + +
+ {loading ? ( +
+ +
+ ) : children} +
+
)} -
+ ); } diff --git a/web/src/app/dashboard/settings/general/page.tsx b/web/src/app/dashboard/settings/general/page.tsx index 731ac34..9d04415 100644 --- a/web/src/app/dashboard/settings/general/page.tsx +++ b/web/src/app/dashboard/settings/general/page.tsx @@ -23,6 +23,7 @@ const SETTING_KEYS = [ "logo_uri", "tos_uri", "policy_uri", + "backfill_retention_days", ] as const type FieldKey = (typeof SETTING_KEYS)[number] @@ -80,6 +81,7 @@ export default function GeneralSettingsPage() { logo_uri: "", tos_uri: "", policy_uri: "", + backfill_retention_days: "28", }) const [sources, setSources] = useState>({ app_name: "unset", @@ -87,6 +89,7 @@ export default function GeneralSettingsPage() { logo_uri: "unset", tos_uri: "unset", policy_uri: "unset", + backfill_retention_days: "unset", }) const [logoUploaded, setLogoUploaded] = useState(false) const [error, setError] = useState(null) @@ -104,6 +107,7 @@ export default function GeneralSettingsPage() { logo_uri: byKey.get("logo_uri")?.value ?? "", tos_uri: byKey.get("tos_uri")?.value ?? "", policy_uri: byKey.get("policy_uri")?.value ?? "", + backfill_retention_days: byKey.get("backfill_retention_days")?.value ?? "28", }) setSources({ app_name: (byKey.get("app_name")?.source as "database" | "env" | undefined) ?? "unset", @@ -111,6 +115,7 @@ export default function GeneralSettingsPage() { logo_uri: (byKey.get("logo_uri")?.source as "database" | "env" | undefined) ?? "unset", tos_uri: (byKey.get("tos_uri")?.source as "database" | "env" | undefined) ?? "unset", policy_uri: (byKey.get("policy_uri")?.source as "database" | "env" | undefined) ?? "unset", + backfill_retention_days: (byKey.get("backfill_retention_days")?.source as "database" | "env" | undefined) ?? "unset", }) setLogoUploaded(byKey.has("logo_data")) } catch (e: unknown) { @@ -137,6 +142,14 @@ export default function GeneralSettingsPage() { await upsertSetting(field.key, value) } } + const retentionValue = values["backfill_retention_days"] + if (retentionValue === "") { + if (sources["backfill_retention_days"] === "database") { + await deleteSetting("backfill_retention_days") + } + } else { + await upsertSetting("backfill_retention_days", retentionValue) + } setNotice("Settings saved.") await load() } catch (e: unknown) { @@ -252,6 +265,37 @@ export default function GeneralSettingsPage() {
+
+

Data Retention

+

+ Configure how long HappyView retains detailed data from completed backfill jobs. +

+
+ +
+
+ + {sources["backfill_retention_days"] === "env" && ( + + from env var + + )} +
+ + setValues((v) => ({ ...v, backfill_retention_days: e.target.value })) + } + placeholder="28" + disabled={!canManage} + /> +

+ How long to keep per-repo detail data from completed backfill jobs. Set to 0 to keep indefinitely. +

+
+
+
+

Backfill Performance

+

+ Tune concurrency limits for backfill jobs. Changes apply to the next job started. +

+
+ + {([ + { key: "backfill_concurrent_resolution" as const, id: "backfill_concurrent_resolution", label: "Concurrent PLC Resolutions", placeholder: "100", description: "How many DID document lookups to run in parallel during PDS resolution." }, + { key: "backfill_concurrent_pds" as const, id: "backfill_concurrent_pds", label: "Concurrent PDS Hosts", placeholder: "10", description: "How many PDS servers to fetch records from simultaneously." }, + { key: "backfill_concurrent_dids_per_pds" as const, id: "backfill_concurrent_dids_per_pds", label: "Concurrent DIDs per PDS", placeholder: "3", description: "How many repos to fetch concurrently from each PDS host." }, + ]).map((field) => ( +
+
+ + {sources[field.key] === "env" && ( + from env var + )} +
+ setValues((v) => ({ ...v, [field.key]: e.target.value }))} + placeholder={field.placeholder} + disabled={!canManage} + /> +

{field.description}

+
+ ))} +
{([ @@ -355,7 +391,7 @@ export default function GeneralSettingsPage() {
diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 4438ace..1c43284 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -365,6 +365,17 @@ export function getSettings() { return apiFetch("/admin/settings"); } +export type DbInfo = { + backend: "sqlite" | "postgres"; + server_max_connections: number | null; + main_pool_size: number; + backfill_pool_size: number; +}; + +export function getDbInfo() { + return apiFetch("/admin/settings/db-info"); +} + export function upsertSetting(key: string, value: string) { return apiFetch(`/admin/settings/${encodeURIComponent(key)}`, { method: "PUT", -- 2.51.2 From 92388847ce7c12ac49aa0b04a1bc9a6be5f13245 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 01:20:23 -0500 Subject: [PATCH 138/250] feat: increase backfill record batch inserts Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 131 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 122 insertions(+), 9 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 97b4a61..27b2b01 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -20,7 +20,6 @@ use crate::error::AppError; use crate::event_log::{EventLog, Severity, log_event}; use crate::http_retry::parse_retry_after; use crate::profile; -use crate::record_handler::{self, RecordEvent}; use super::auth::UserAuth; use super::permissions::Permission; @@ -1108,6 +1107,95 @@ async fn run_fetching_phase( (final_repos, final_records) } +struct PreparedRecord { + uri: String, + did: String, + collection: String, + rkey: String, + record_json: String, + cid: String, +} + +async fn batch_upsert_records(state: &AppState, batch: &[PreparedRecord]) { + if batch.is_empty() { + return; + } + + let backend = state.db_backend; + let now = now_rfc3339(); + + // Build multi-row INSERT. 8 params per row; ON CONFLICT uses EXCLUDED. + let placeholders: Vec = (0..batch.len()) + .map(|_| "(?, ?, ?, ?, ?, ?, ?, ?)".to_string()) + .collect(); + let raw_sql = format!( + "INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) VALUES {} ON CONFLICT (uri) DO UPDATE SET record = EXCLUDED.record, cid = EXCLUDED.cid, indexed_at = EXCLUDED.indexed_at", + placeholders.join(", ") + ); + let sql = adapt_sql(&raw_sql, backend); + + let mut query = sqlx::query(&sql); + for rec in batch { + query = query + .bind(&rec.uri) + .bind(&rec.did) + .bind(&rec.collection) + .bind(&rec.rkey) + .bind(&rec.record_json) + .bind(&rec.cid) + .bind(&now) + .bind(&now); + } + + if let Err(e) = query.execute(&state.db).await { + tracing::warn!(batch_size = batch.len(), "batch record upsert failed: {e}"); + } + + // Batch sync_refs: delete old refs for all URIs, then insert new ones. + let uris: Vec<&str> = batch.iter().map(|r| r.uri.as_str()).collect(); + let delete_placeholders: Vec<&str> = (0..uris.len()).map(|_| "?").collect(); + let delete_raw = format!( + "DELETE FROM record_refs WHERE source_uri IN ({})", + delete_placeholders.join(", ") + ); + let delete_sql = adapt_sql(&delete_raw, backend); + let mut del_query = sqlx::query(&delete_sql); + for uri in &uris { + del_query = del_query.bind(*uri); + } + let _ = del_query.execute(&state.db).await; + + // Collect all new refs and batch insert them + let mut all_refs: Vec<(&str, String, &str)> = Vec::new(); + for rec in batch { + let record_val: serde_json::Value = + serde_json::from_str(&rec.record_json).unwrap_or_default(); + for target_uri in crate::record_refs::extract_at_uris(&record_val) { + all_refs.push((&rec.uri, target_uri, &rec.collection)); + } + } + + // Insert refs in chunks to stay within SQLite's param limit (3 params per ref) + for chunk in all_refs.chunks(300) { + let ref_placeholders: Vec<&str> = (0..chunk.len()).map(|_| "(?, ?, ?)").collect(); + let ref_raw = format!( + "INSERT INTO record_refs (source_uri, target_uri, collection) VALUES {} ON CONFLICT DO NOTHING", + ref_placeholders.join(", ") + ); + let ref_sql = adapt_sql(&ref_raw, backend); + let mut ref_query = sqlx::query(&ref_sql); + for (source, target, collection) in chunk { + ref_query = ref_query.bind(*source).bind(target).bind(*collection); + } + let _ = ref_query.execute(&state.db).await; + } + + // Queue label backfill for each record + for rec in batch { + crate::labeler::backfill_labels_for_uri(Arc::new(state.clone()), rec.uri.clone()); + } +} + /// Fetch all records for a given DID and collection from a PDS via /// `com.atproto.repo.listRecords`, paginating and handling rate limits. async fn fetch_records_from_pds( @@ -1153,22 +1241,47 @@ async fn fetch_records_from_pds( let page_count = body.records.len(); + let mut batch: Vec = Vec::with_capacity(page_count); for entry in &body.records { let rkey = entry.uri.rsplit('/').next().unwrap_or_default().to_string(); + let uri = format!("at://{did}/{collection}/{rkey}"); + + let rec_to_store = if let Some(script) = state.lexicons.get_index_hook(collection).await + { + let hook_result = crate::lua::execute_hook_script(&crate::lua::HookEvent { + state, + lexicon_id: collection, + script: &script, + action: "create", + uri: &uri, + did, + collection, + rkey: &rkey, + record: Some(&entry.value), + }) + .await; + + match hook_result { + None => continue, + Some(v) => v, + } + } else { + entry.value.clone() + }; - let event = RecordEvent { + batch.push(PreparedRecord { + uri, did: did.to_string(), collection: collection.to_string(), rkey, - action: "create".to_string(), - record: Some(entry.value.clone()), - cid: Some(entry.cid.clone()), - }; - - record_handler::handle_record_event(state, &event).await; - count += 1; + record_json: serde_json::to_string(&rec_to_store).unwrap_or_default(), + cid: entry.cid.clone(), + }); } + count += batch.len() as u32; + batch_upsert_records(state, &batch).await; + match body.cursor { Some(c) if page_count > 0 => cursor = Some(c), _ => break, -- 2.51.2 From 231a7346c3dd63ef41d05f1ef131d1fe1fef02d3 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 01:23:16 -0500 Subject: [PATCH 139/250] feat: make backfill collection discovery concurrent Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 27b2b01..ba27f63 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -282,14 +282,16 @@ async fn run_discovery_phase( }, ); } else { - for collection in collections { - if is_cancelled(state, job_id).await { - return; - } - if let Err(e) = discover_repos_from_relay(state, job_id, collection).await { - tracing::warn!(collection, error = %e, "failed to discover repos, skipping"); - } - } + stream::iter(collections.iter()) + .for_each_concurrent(collections.len(), |collection| async move { + if is_cancelled(state, job_id).await { + return; + } + if let Err(e) = discover_repos_from_relay(state, job_id, collection).await { + tracing::warn!(collection, error = %e, "failed to discover repos, skipping"); + } + }) + .await; } let total = count_repos(state, job_id).await; -- 2.51.2 From 79e794c04720890c97493b7221b6134e631d8fe8 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:37:18 -0500 Subject: [PATCH 140/250] fix: get max connections from Postgres instead of current connections Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/settings.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/admin/settings.rs b/src/admin/settings.rs index de001a3..b91318e 100644 --- a/src/admin/settings.rs +++ b/src/admin/settings.rs @@ -200,8 +200,8 @@ pub(super) async fn db_info( None }; - let main_pool_size = state.db.size() as i64; - let backfill_pool_size = state.backfill_db.size() as i64; + let main_pool_size = state.db.options().get_max_connections() as i64; + let backfill_pool_size = state.backfill_db.options().get_max_connections() as i64; Ok(Json(serde_json::json!({ "backend": match state.db_backend { -- 2.51.2 From 81a63c87f6f97ff1153cd9acb5fb3760042de94b Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:39:07 -0500 Subject: [PATCH 141/250] fix: use the correct connection pool for record upserts Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index ba27f63..73f5955 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -1149,7 +1149,7 @@ async fn batch_upsert_records(state: &AppState, batch: &[PreparedRecord]) { .bind(&now); } - if let Err(e) = query.execute(&state.db).await { + if let Err(e) = query.execute(&state.backfill_db).await { tracing::warn!(batch_size = batch.len(), "batch record upsert failed: {e}"); } @@ -1165,7 +1165,7 @@ async fn batch_upsert_records(state: &AppState, batch: &[PreparedRecord]) { for uri in &uris { del_query = del_query.bind(*uri); } - let _ = del_query.execute(&state.db).await; + let _ = del_query.execute(&state.backfill_db).await; // Collect all new refs and batch insert them let mut all_refs: Vec<(&str, String, &str)> = Vec::new(); @@ -1189,7 +1189,7 @@ async fn batch_upsert_records(state: &AppState, batch: &[PreparedRecord]) { for (source, target, collection) in chunk { ref_query = ref_query.bind(*source).bind(target).bind(*collection); } - let _ = ref_query.execute(&state.db).await; + let _ = ref_query.execute(&state.backfill_db).await; } // Queue label backfill for each record @@ -1700,7 +1700,7 @@ pub(super) async fn backfill_repos( q = q.bind(limit + 1); let rows: Vec<(String, Option, String, i32)> = q - .fetch_all(&state.db) + .fetch_all(&state.backfill_db) .await .map_err(|e| AppError::Internal(format!("failed to query backfill repos: {e}")))?; @@ -1741,7 +1741,7 @@ pub(super) async fn backfill_pds_summary( let rows: Vec<(String, i32, i32, i64)> = sqlx::query_as(&sql) .bind(&job_id) - .fetch_all(&state.db) + .fetch_all(&state.backfill_db) .await .map_err(|e| AppError::Internal(format!("failed to query PDS summary: {e}")))?; @@ -1777,7 +1777,10 @@ pub(super) async fn flush_backfill_details( "DELETE FROM backfill_repos WHERE job_id = ?", state.db_backend, ); - let _ = sqlx::query(&sql).bind(&job_id).execute(&state.db).await; + let _ = sqlx::query(&sql) + .bind(&job_id) + .execute(&state.backfill_db) + .await; Ok(StatusCode::NO_CONTENT) } @@ -1792,7 +1795,7 @@ pub(super) async fn flush_all_backfill_details( "DELETE FROM backfill_repos WHERE job_id IN (SELECT id FROM backfill_jobs WHERE status IN ('completed', 'cancelled', 'failed'))", state.db_backend, ); - let _ = sqlx::query(&sql).execute(&state.db).await; + let _ = sqlx::query(&sql).execute(&state.backfill_db).await; Ok(StatusCode::NO_CONTENT) } -- 2.51.2 From de42a7f1b20ec60fd15f1f0b5cdad47dd19d0887 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:39:50 -0500 Subject: [PATCH 142/250] fix: clamp backfill concurrency values Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 9 ++++++--- src/db.rs | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 73f5955..2e85569 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -134,11 +134,13 @@ async fn load_concurrency(state: &AppState) -> BackfillConcurrency { ) .await .and_then(|v| v.parse().ok()) - .unwrap_or(100); + .unwrap_or(100usize) + .max(1); let pds = super::settings::get_setting(&state.db, "backfill_concurrent_pds", state.db_backend) .await .and_then(|v| v.parse().ok()) - .unwrap_or(10); + .unwrap_or(10usize) + .max(1); let dids_per_pds = super::settings::get_setting( &state.db, "backfill_concurrent_dids_per_pds", @@ -146,7 +148,8 @@ async fn load_concurrency(state: &AppState) -> BackfillConcurrency { ) .await .and_then(|v| v.parse().ok()) - .unwrap_or(3); + .unwrap_or(3usize) + .max(1); BackfillConcurrency { resolution, pds, diff --git a/src/db.rs b/src/db.rs index 638fc02..6eb5cbc 100644 --- a/src/db.rs +++ b/src/db.rs @@ -286,7 +286,7 @@ pub async fn connect(url: &str, backend: DatabaseBackend) -> AnyPool { pub async fn connect_backfill_pool(url: &str, backend: DatabaseBackend) -> AnyPool { let max_connections: u32 = std::env::var("BACKFILL_DATABASE_MAX_CONNECTIONS") .ok() - .and_then(|v| v.parse().ok()) + .and_then(|v| v.parse::().ok()) .unwrap_or_else(|| { let pds: u32 = std::env::var("BACKFILL_CONCURRENT_PDS") .ok() @@ -308,7 +308,8 @@ pub async fn connect_backfill_pool(url: &str, backend: DatabaseBackend) -> AnyPo DatabaseBackend::Postgres => 256, }; needed.min(ceiling) - }); + }) + .max(1); tracing::info!(max_connections, "backfill pool sized"); -- 2.51.2 From aa5e842a62cd9b4acdd294821dc83466472cf505 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:41:12 -0500 Subject: [PATCH 143/250] fix: remove cleanup delay caused by tick eater Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 2e85569..5e8c230 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -1811,7 +1811,6 @@ pub async fn run_backfill_retention_cleanup(state: &AppState) { use super::settings::get_setting; let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(86400)); - interval.tick().await; // first tick is immediate — run once on startup loop { interval.tick().await; -- 2.51.2 From 80ba1da3e093ac3b59b8416fa73d8e339ac7b318 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:44:15 -0500 Subject: [PATCH 144/250] chore: remove unused module Signed-off-by: Trezy Signed-off-by: Trezy --- web/package-lock.json | 59 ++++++++++++++++++------------------------- web/package.json | 1 - 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index df10472..65bd0ba 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -13,7 +13,6 @@ "@tabler/icons-react": "^3.36.1", "@tailwindcss/typography": "^0.5.19", "@tanstack/react-table": "^8.21.3", - "@tanstack/react-virtual": "^3.13.25", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", @@ -117,6 +116,7 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -774,6 +774,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -2044,6 +2045,7 @@ "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -4144,23 +4146,6 @@ "react-dom": ">=16.8" } }, - "node_modules/@tanstack/react-virtual": { - "version": "3.13.25", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.25.tgz", - "integrity": "sha512-bmNoqMu6gcAW9JGrKVB0Q1tN1i5RONZF8r1fW0bbE4Oyf3DwEGnzzQJ2OW+Ozg1P4s8PyugkHg2ULZoFQN+cqw==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.15.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, "node_modules/@tanstack/table-core": { "version": "8.21.3", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", @@ -4174,16 +4159,6 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@tanstack/virtual-core": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.15.0.tgz", - "integrity": "sha512-0AwPGx0I8QxPYjAxShT/+z+ZOe9u8mW5rsXvivCTjRfRmz9a43+3mRyi4wwlyoUqOC56q/jatKa0Bh9M99BEHQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, "node_modules/@ts-morph/common": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz", @@ -4368,6 +4343,7 @@ "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -4377,6 +4353,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -4387,6 +4364,7 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -4410,8 +4388,7 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/@types/unist": { "version": "3.0.3", @@ -4477,6 +4454,7 @@ "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", @@ -4990,6 +4968,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5376,6 +5355,7 @@ "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/types": "^7.26.0" } @@ -5480,6 +5460,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6441,7 +6422,6 @@ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", "license": "(MPL-2.0 OR Apache-2.0)", - "peer": true, "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -6780,6 +6760,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -6920,6 +6901,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -7398,6 +7380,7 @@ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -8196,6 +8179,7 @@ "integrity": "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -9621,7 +9605,6 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", "license": "MIT", - "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -11778,6 +11761,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -11808,6 +11792,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11854,6 +11839,7 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", + "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -11992,7 +11978,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -13187,7 +13174,8 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.0.tgz", "integrity": "sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.3.0", @@ -13260,6 +13248,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -13537,6 +13526,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14286,6 +14276,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/web/package.json b/web/package.json index 517f9d7..6286c50 100644 --- a/web/package.json +++ b/web/package.json @@ -14,7 +14,6 @@ "@tabler/icons-react": "^3.36.1", "@tailwindcss/typography": "^0.5.19", "@tanstack/react-table": "^8.21.3", - "@tanstack/react-virtual": "^3.13.25", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", -- 2.51.2 From c56bc779af0552b2db3d123bda23967331f98492 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:44:56 -0500 Subject: [PATCH 145/250] fix: prevent reprocessing of sse Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/backfill/page.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index 3331075..b3e59ce 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -546,6 +546,7 @@ function JobDetail({ // SSE events for active jobs const sseEvents = useBackfillSSE(job.id, isActive); + const sseProcessedRef = useRef(0); function hasReached(phase: (typeof PROGRESS_PHASES)[number]): boolean { if (allDone) return true; @@ -611,9 +612,14 @@ function JobDetail({ } catch { /* ignore */ } }, [job.id, fetchedCursor]); - // Process SSE events + // Process SSE events — only handle events added since last render useEffect(() => { - for (const event of sseEvents) { + const start = sseProcessedRef.current; + if (start >= sseEvents.length) return; + sseProcessedRef.current = sseEvents.length; + + for (let i = start; i < sseEvents.length; i++) { + const event = sseEvents[i]; if (event.type === "repo_discovered" && event.did) { setDiscoveredRepos((prev) => { if (prev.some((r) => r.did === event.did)) return prev; -- 2.51.2 From c5b4b8751aa4ebdac6555673aba88ab33ab5691d Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:45:41 -0500 Subject: [PATCH 146/250] fix: prevent concurrency settings from being set to invalid values Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/settings/general/page.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/src/app/dashboard/settings/general/page.tsx b/web/src/app/dashboard/settings/general/page.tsx index c7924a8..bc0180e 100644 --- a/web/src/app/dashboard/settings/general/page.tsx +++ b/web/src/app/dashboard/settings/general/page.tsx @@ -336,6 +336,8 @@ export default function GeneralSettingsPage() { setValues((v) => ({ ...v, backfill_retention_days: e.target.value })) @@ -379,6 +381,8 @@ export default function GeneralSettingsPage() { setValues((v) => ({ ...v, [field.key]: e.target.value }))} placeholder={field.placeholder} -- 2.51.2 From 4e807547fa2e58c542bf8e70cf16b66f41472317 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 09:46:39 -0500 Subject: [PATCH 147/250] fix: make backfill progress headings more accessible Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/backfill/page.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index b3e59ce..c556d9c 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -894,8 +894,9 @@ function ProgressRow({ return ( -
)} -
+
{expandable && ( -- 2.51.2 From 25084fb6095fe06d59bc1f428829cd3e8bdf76f9 Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 20:14:07 -0500 Subject: [PATCH 148/250] feat: allow backfill jobs to be paused and resumed Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 296 +++++++++++++++--- src/admin/mod.rs | 2 + src/admin/settings.rs | 24 ++ web/package-lock.json | 31 +- web/src/app/dashboard/backfill/page.tsx | 107 ++++++- .../app/dashboard/settings/general/page.tsx | 248 +++++++++------ web/src/lib/api.ts | 14 + 7 files changed, 558 insertions(+), 164 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 5e8c230..4e1165d 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -179,23 +179,32 @@ async fn fail_job(state: &AppState, job_id: &str, error: &str) { ); } -async fn is_cancelled(state: &AppState, job_id: &str) -> bool { +async fn should_stop(state: &AppState, job_id: &str) -> Option<&'static str> { let sql = adapt_sql( "SELECT status FROM backfill_jobs WHERE id = ?", state.db_backend, ); - sqlx::query_as::<_, (String,)>(&sql) + let status = sqlx::query_as::<_, (String,)>(&sql) .bind(job_id) .fetch_optional(&state.backfill_db) .await .ok() .flatten() - .is_some_and(|(status,)| status == "cancelling") + .map(|(s,)| s); + match status.as_deref() { + Some("cancelling") => Some("cancelling"), + Some("pausing") => Some("pausing"), + _ => None, + } +} + +async fn should_stop_worker(state: &AppState, job_id: &str) -> bool { + should_stop(state, job_id).await.is_some() } async fn request_cancel(state: &AppState, job_id: &str) { let sql = adapt_sql( - "UPDATE backfill_jobs SET status = 'cancelling' WHERE id = ? AND status = 'running'", + "UPDATE backfill_jobs SET status = 'cancelling' WHERE id = ? AND status IN ('running', 'paused')", state.db_backend, ); let _ = sqlx::query(&sql) @@ -225,6 +234,36 @@ async fn finalise_cancel(state: &AppState, job_id: &str) { ); } +async fn request_pause(state: &AppState, job_id: &str) { + let sql = adapt_sql( + "UPDATE backfill_jobs SET status = 'pausing' WHERE id = ? AND status = 'running'", + state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(job_id) + .execute(&state.backfill_db) + .await; +} + +async fn finalise_pause(state: &AppState, job_id: &str) { + let sql = adapt_sql( + "UPDATE backfill_jobs SET status = 'paused' WHERE id = ?", + state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(job_id) + .execute(&state.backfill_db) + .await; + publish_event( + state, + super::types::BackfillEvent::JobCompleted { + job_id: job_id.to_string(), + status: "paused".to_string(), + error: None, + }, + ); +} + async fn complete_job( state: &AppState, job_id: &str, @@ -287,7 +326,7 @@ async fn run_discovery_phase( } else { stream::iter(collections.iter()) .for_each_concurrent(collections.len(), |collection| async move { - if is_cancelled(state, job_id).await { + if should_stop_worker(state, job_id).await { return; } if let Err(e) = discover_repos_from_relay(state, job_id, collection).await { @@ -394,7 +433,7 @@ async fn discover_repos_from_relay( update_job_counter(state, job_id, "total_repos", running_total).await; - if is_cancelled(state, job_id).await { + if should_stop_worker(state, job_id).await { return Ok(()); } @@ -492,7 +531,7 @@ async fn run_pipelined_resolve_and_fetch( let mut attempted: i32 = 0; let mut next_flush = random_batch_threshold(100); - let mut next_cancel_check = random_batch_threshold(100); + let mut next_cancel_check = random_batch_threshold(10); let stream_state = resolver_state.clone(); let stream_cancelled = Arc::clone(&resolver_cancelled); @@ -572,11 +611,11 @@ async fn run_pipelined_resolve_and_fetch( attempted += 1; if attempted >= next_cancel_check { - if is_cancelled(&resolver_state, &resolver_job_id).await { + if should_stop_worker(&resolver_state, &resolver_job_id).await { resolver_cancelled.store(true, Ordering::Relaxed); break; } - next_cancel_check = attempted + random_batch_threshold(100); + next_cancel_check = attempted + random_batch_threshold(10); } } @@ -633,7 +672,31 @@ async fn run_pipelined_resolve_and_fetch( let mut worker_handles = FuturesUnordered::new(); let mut overflow: Vec<(String, String)> = Vec::new(); - while let Some((did, pds_endpoint)) = rx.recv().await { + loop { + if cancelled.load(Ordering::Relaxed) { + break; + } + + let poll_state = Arc::clone(&state); + let poll_job_id = Arc::clone(&job_id_arc); + let poll_cancelled = Arc::clone(&cancelled); + let pair = tokio::select! { + biased; + result = rx.recv() => result, + _ = async move { + loop { + tokio::time::sleep(std::time::Duration::from_millis(500)).await; + if poll_cancelled.load(Ordering::Relaxed) || should_stop_worker(&poll_state, &poll_job_id).await { + poll_cancelled.store(true, Ordering::Relaxed); + return; + } + } + } => None, + }; + let Some((did, pds_endpoint)) = pair else { + break; + }; + // Also drain any overflow from previous iterations overflow.push((did, pds_endpoint)); @@ -831,13 +894,12 @@ async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::R .bind(job_id.as_str()) .execute(&state.backfill_db) .await; - - if is_cancelled(&state, job_id.as_str()).await { - cancelled.store(true, Ordering::Relaxed); - break; - } next_flush = repos + random_batch_threshold(10); } + if cancelled.load(Ordering::Relaxed) || should_stop_worker(&state, job_id.as_str()).await { + cancelled.store(true, Ordering::Relaxed); + break; + } publish_event(&state, super::types::BackfillEvent::JobCounters { job_id: job_id.to_string(), total_repos: None, @@ -853,15 +915,20 @@ async fn run_pds_worker(ctx: FetchContext, pds_endpoint: String, mut rx: mpsc::R let state = Arc::clone(&state); let collections = collections.clone(); let pds_endpoint = pds_endpoint.clone(); + let cancelled = Arc::clone(&cancelled); fetches.push(async move { let mut count: i32 = 0; for collection in collections.iter() { + if cancelled.load(Ordering::Relaxed) { + break; + } match fetch_records_from_pds( &state, &pds_endpoint, &did, collection, + &cancelled, ) .await { @@ -1019,11 +1086,15 @@ async fn run_fetching_phase( let mut did_records: i32 = 0; for collection in collections.iter() { + if cancelled.load(Ordering::Relaxed) { + break; + } match fetch_records_from_pds( &state, &pds_endpoint, &did, collection, + &cancelled, ) .await { @@ -1075,7 +1146,7 @@ async fn run_fetching_phase( .execute(&state.backfill_db) .await; - if is_cancelled(&state, job_id.as_str()).await { + if should_stop_worker(&state, job_id.as_str()).await { cancelled.store(true, Ordering::Relaxed); } } @@ -1208,12 +1279,17 @@ async fn fetch_records_from_pds( pds_endpoint: &str, did: &str, collection: &str, + cancelled: &AtomicBool, ) -> Result { let base = pds_endpoint.trim_end_matches('/'); let mut cursor: Option = None; let mut count: u32 = 0; loop { + if cancelled.load(Ordering::Relaxed) { + break; + } + let mut url = format!( "{base}/xrpc/com.atproto.repo.listRecords?repo={did}&collection={collection}&limit=100" ); @@ -1365,10 +1441,18 @@ async fn run_backfill_job(state: AppState, job_id: String) { if matches!(stage.as_str(), "pending" | "discovering_repos") { run_discovery_phase(&state, &job_id, &collections, did.as_deref()).await; - if is_cancelled(&state, &job_id).await { - tracing::info!(job_id, "backfill job cancelled"); - finalise_cancel(&state, &job_id).await; - return; + match should_stop(&state, &job_id).await { + Some("cancelling") => { + tracing::info!(job_id, "backfill job cancelled"); + finalise_cancel(&state, &job_id).await; + return; + } + Some("pausing") => { + tracing::info!(job_id, "backfill job paused"); + finalise_pause(&state, &job_id).await; + return; + } + _ => {} } let total = count_repos(&state, &job_id).await; @@ -1405,10 +1489,18 @@ async fn run_backfill_job(state: AppState, job_id: String) { run_fetching_phase(&state, &job_id, &collections, &concurrency).await }; - if is_cancelled(&state, &job_id).await { - tracing::info!(job_id, "backfill job cancelled"); - finalise_cancel(&state, &job_id).await; - return; + match should_stop(&state, &job_id).await { + Some("cancelling") => { + tracing::info!(job_id, "backfill job cancelled"); + finalise_cancel(&state, &job_id).await; + return; + } + Some("pausing") => { + tracing::info!(job_id, "backfill job paused"); + finalise_pause(&state, &job_id).await; + return; + } + _ => {} } complete_job(&state, &job_id, final_processed, final_records, None).await; @@ -1515,6 +1607,24 @@ pub(super) async fn cancel_backfill( Some((ref status,)) if status == "cancelling" || status == "cancelled" => { Ok(Json(serde_json::json!({ "id": job_id, "status": status }))) } + Some((ref status,)) if status == "paused" => { + finalise_cancel(&state, &job_id).await; + log_event( + &state.db, + EventLog { + event_type: "backfill.cancelled".to_string(), + severity: Severity::Info, + actor_did: Some(admin.did.clone()), + subject: None, + detail: serde_json::json!({ "job_id": job_id }), + }, + state.db_backend, + ) + .await; + Ok(Json( + serde_json::json!({ "id": job_id, "status": "cancelled" }), + )) + } Some((status,)) if status != "running" => Err(AppError::BadRequest(format!( "job is not running (status: {status})" ))), @@ -1539,6 +1649,111 @@ pub(super) async fn cancel_backfill( } } +/// POST /admin/backfill/{id}/pause — pause a running backfill job. +pub(super) async fn pause_backfill( + State(state): State, + admin: UserAuth, + Path(job_id): Path, +) -> Result, AppError> { + admin.require(Permission::BackfillCreate).await?; + + let sql = adapt_sql( + "SELECT status FROM backfill_jobs WHERE id = ?", + state.db_backend, + ); + let row: Option<(String,)> = sqlx::query_as(&sql) + .bind(&job_id) + .fetch_optional(&state.backfill_db) + .await + .map_err(|e| AppError::Internal(format!("failed to query backfill job: {e}")))?; + + match row { + None => Err(AppError::NotFound("backfill job not found".into())), + Some((ref status,)) if status == "pausing" || status == "paused" => { + Ok(Json(serde_json::json!({ "id": job_id, "status": status }))) + } + Some((status,)) if status != "running" => Err(AppError::BadRequest(format!( + "job is not running (status: {status})" + ))), + Some(_) => { + request_pause(&state, &job_id).await; + log_event( + &state.db, + EventLog { + event_type: "backfill.pausing".to_string(), + severity: Severity::Info, + actor_did: Some(admin.did.clone()), + subject: None, + detail: serde_json::json!({ "job_id": job_id }), + }, + state.db_backend, + ) + .await; + Ok(Json( + serde_json::json!({ "id": job_id, "status": "pausing" }), + )) + } + } +} + +/// POST /admin/backfill/{id}/resume — resume a paused backfill job. +pub(super) async fn resume_backfill( + State(state): State, + admin: UserAuth, + Path(job_id): Path, +) -> Result, AppError> { + admin.require(Permission::BackfillCreate).await?; + + let sql = adapt_sql( + "SELECT status FROM backfill_jobs WHERE id = ?", + state.db_backend, + ); + let row: Option<(String,)> = sqlx::query_as(&sql) + .bind(&job_id) + .fetch_optional(&state.backfill_db) + .await + .map_err(|e| AppError::Internal(format!("failed to query backfill job: {e}")))?; + + match row { + None => Err(AppError::NotFound("backfill job not found".into())), + Some((status,)) if status != "paused" => Err(AppError::BadRequest(format!( + "job is not paused (status: {status})" + ))), + Some(_) => { + let sql = adapt_sql( + "UPDATE backfill_jobs SET status = 'running' WHERE id = ?", + state.db_backend, + ); + let _ = sqlx::query(&sql) + .bind(&job_id) + .execute(&state.backfill_db) + .await; + + let spawn_state = state.clone(); + let spawn_job_id = job_id.clone(); + tokio::spawn(async move { + run_backfill_job(spawn_state, spawn_job_id).await; + }); + + log_event( + &state.db, + EventLog { + event_type: "backfill.resumed".to_string(), + severity: Severity::Info, + actor_did: Some(admin.did.clone()), + subject: None, + detail: serde_json::json!({ "job_id": job_id }), + }, + state.db_backend, + ) + .await; + Ok(Json( + serde_json::json!({ "id": job_id, "status": "running" }), + )) + } + } +} + /// GET /admin/backfill/status — list all backfill jobs. pub(super) async fn backfill_status( State(state): State, @@ -1865,7 +2080,7 @@ pub async fn run_backfill_retention_cleanup(state: &AppState) { /// Jobs stuck in `cancelling` are finalised immediately. pub async fn resume_backfill_jobs(state: &AppState) { let sql = adapt_sql( - "SELECT id, status FROM backfill_jobs WHERE status IN ('running', 'cancelling')", + "SELECT id, status FROM backfill_jobs WHERE status IN ('running', 'cancelling', 'pausing')", state.db_backend, ); let rows: Vec<(String, String)> = sqlx::query_as(&sql) @@ -1874,18 +2089,25 @@ pub async fn resume_backfill_jobs(state: &AppState) { .unwrap_or_default(); for (job_id, status) in rows { - if status == "cancelling" { - tracing::info!( - job_id, - "finalising cancelled backfill job from previous run" - ); - finalise_cancel(state, &job_id).await; - } else { - tracing::info!(job_id, "resuming interrupted backfill job"); - let spawn_state = state.clone(); - tokio::spawn(async move { - run_backfill_job(spawn_state, job_id).await; - }); + match status.as_str() { + "cancelling" => { + tracing::info!( + job_id, + "finalising cancelled backfill job from previous run" + ); + finalise_cancel(state, &job_id).await; + } + "pausing" => { + tracing::info!(job_id, "finalising paused backfill job from previous run"); + finalise_pause(state, &job_id).await; + } + _ => { + tracing::info!(job_id, "resuming interrupted backfill job"); + let spawn_state = state.clone(); + tokio::spawn(async move { + run_backfill_job(spawn_state, job_id).await; + }); + } } } } diff --git a/src/admin/mod.rs b/src/admin/mod.rs index 0bb7d4f..e0f50fa 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -42,6 +42,8 @@ pub fn admin_routes(_state: AppState) -> Router { delete(backfill::flush_all_backfill_details), ) .route("/backfill/{id}/cancel", post(backfill::cancel_backfill)) + .route("/backfill/{id}/pause", post(backfill::pause_backfill)) + .route("/backfill/{id}/resume", post(backfill::resume_backfill)) .route("/backfill/{id}/events", get(backfill::backfill_events)) .route("/backfill/{id}/repos", get(backfill::backfill_repos)) .route( diff --git a/src/admin/settings.rs b/src/admin/settings.rs index b91318e..f730f7b 100644 --- a/src/admin/settings.rs +++ b/src/admin/settings.rs @@ -203,6 +203,29 @@ pub(super) async fn db_info( let main_pool_size = state.db.options().get_max_connections() as i64; let backfill_pool_size = state.backfill_db.options().get_max_connections() as i64; + let pds: i64 = get_setting(&state.db, "backfill_concurrent_pds", state.db_backend) + .await + .and_then(|v| v.parse().ok()) + .unwrap_or(10); + let dids: i64 = get_setting( + &state.db, + "backfill_concurrent_dids_per_pds", + state.db_backend, + ) + .await + .and_then(|v| v.parse().ok()) + .unwrap_or(3); + let resolution: i64 = get_setting( + &state.db, + "backfill_concurrent_resolution", + state.db_backend, + ) + .await + .and_then(|v| v.parse().ok()) + .unwrap_or(100); + let needed_backfill_pool = (pds * dids) + resolution + 4; + let restart_recommended = needed_backfill_pool > backfill_pool_size; + Ok(Json(serde_json::json!({ "backend": match state.db_backend { DatabaseBackend::Sqlite => "sqlite", @@ -211,6 +234,7 @@ pub(super) async fn db_info( "server_max_connections": server_max, "main_pool_size": main_pool_size, "backfill_pool_size": backfill_pool_size, + "restart_recommended": restart_recommended, }))) } diff --git a/web/package-lock.json b/web/package-lock.json index 65bd0ba..ed30f1a 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -116,7 +116,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -774,7 +773,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -2045,7 +2043,6 @@ "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -4343,7 +4340,6 @@ "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -4353,7 +4349,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -4364,7 +4359,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -4388,7 +4382,8 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/@types/unist": { "version": "3.0.3", @@ -4454,7 +4449,6 @@ "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.0", "@typescript-eslint/types": "8.56.0", @@ -4968,7 +4962,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5355,7 +5348,6 @@ "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/types": "^7.26.0" } @@ -5460,7 +5452,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6422,6 +6413,7 @@ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", "license": "(MPL-2.0 OR Apache-2.0)", + "peer": true, "optionalDependencies": { "@types/trusted-types": "^2.0.7" } @@ -6760,7 +6752,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -6901,7 +6892,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -7380,7 +7370,6 @@ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -8179,7 +8168,6 @@ "integrity": "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -9605,6 +9593,7 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", "license": "MIT", + "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -11761,7 +11750,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -11792,7 +11780,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -11839,7 +11826,6 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", "license": "MIT", - "peer": true, "dependencies": { "@types/use-sync-external-store": "^0.0.6", "use-sync-external-store": "^1.4.0" @@ -11978,8 +11964,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -13174,8 +13159,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.0.tgz", "integrity": "sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.3.0", @@ -13248,7 +13232,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -13526,7 +13509,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14276,7 +14258,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index c556d9c..d344bcc 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -5,6 +5,8 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useCurrentUser } from "@/hooks/use-current-user"; import { cancelBackfillJob, + pauseBackfillJob, + resumeBackfillJob, createBackfillJob, getBackfillJobs, getBackfillRepos, @@ -20,7 +22,7 @@ import type { BackfillEvent, BlueskyProfile, } from "@/types/backfill"; -import { CheckCircle2, ChevronRight, Circle, Loader2 } from "lucide-react"; +import { CheckCircle2, ChevronRight, Circle, Loader2, PauseCircle } from "lucide-react"; import { SiteHeader } from "@/components/site-header"; import { AlertDialog, @@ -104,6 +106,18 @@ function statusBadge(job: BackfillJob) { cancelling ); + case "pausing": + return ( + + pausing + + ); + case "paused": + return ( + + paused + + ); case "running": return ( @@ -507,6 +521,14 @@ export default function BackfillPage() { await cancelBackfillJob(selectedJob.id); load(); }} + onPause={async () => { + await pauseBackfillJob(selectedJob.id); + load(); + }} + onResume={async () => { + await resumeBackfillJob(selectedJob.id); + load(); + }} /> )} @@ -521,16 +543,23 @@ function JobDetail({ canCancel, canFlush, onCancel, + onPause, + onResume, }: { job: BackfillJob; canCancel: boolean; canFlush: boolean; onCancel: () => Promise; + onPause: () => Promise; + onResume: () => Promise; }) { const [cancelling, setCancelling] = useState(false); + const [pausing, setPausing] = useState(false); + const [resuming, setResuming] = useState(false); const current = phaseIndex(job.stage); const allDone = job.status === "completed"; - const isActive = job.status === "running" || job.status === "cancelling"; + const isActive = job.status === "running" || job.status === "cancelling" || job.status === "pausing"; + const isPaused = job.status === "paused" || job.status === "pausing"; // Detail data state const [discoveredRepos, setDiscoveredRepos] = useState([]); @@ -556,6 +585,23 @@ function JobDetail({ return current >= phaseIndex(phase); } + function isPhasePaused(phase: (typeof PROGRESS_PHASES)[number]): boolean { + if (!isPaused) return false; + if (job.stage === "resolving_and_fetching") { + return phase === "resolving_pds" || phase === "fetching_records"; + } + if (job.stage === "discovering_repos") { + return phase === "discovering_repos"; + } + if (job.stage === "resolving_pds") { + return phase === "resolving_pds"; + } + if (job.stage === "fetching_records") { + return phase === "fetching_records"; + } + return false; + } + async function handleCancel() { setCancelling(true); try { @@ -565,6 +611,24 @@ function JobDetail({ } } + async function handlePause() { + setPausing(true); + try { + await onPause(); + } finally { + setPausing(false); + } + } + + async function handleResume() { + setResuming(true); + try { + await onResume(); + } finally { + setResuming(false); + } + } + // Auto-load detail data when phases are reached const discoveredReached = hasReached("discovering_repos"); const pdsReached = hasReached("resolving_pds"); @@ -727,6 +791,7 @@ function JobDetail({ label="Discovering repos" active={isActive && job.stage === "discovering_repos"} reached={hasReached("discovering_repos")} + paused={isPhasePaused("discovering_repos")} value={job.total_repos != null ? : undefined} suffix="repos found" loading={discoveredReached && !discoveredLoaded} @@ -756,6 +821,7 @@ function JobDetail({ job.stage === "resolving_and_fetching") } reached={hasReached("resolving_pds")} + paused={isPhasePaused("resolving_pds")} value={ hasReached("resolving_pds") ? <> / @@ -790,6 +856,7 @@ function JobDetail({ job.stage === "resolving_and_fetching") } reached={hasReached("fetching_records")} + paused={isPhasePaused("fetching_records")} value={ hasReached("fetching_records") || job.stage === "resolving_and_fetching" @@ -855,6 +922,26 @@ function JobDetail({ )} + {canCancel && (job.status === "running" || job.status === "pausing") && ( + + )} + {canCancel && job.status === "paused" && ( + + )} {canCancel && isActive && ( + )} ); @@ -874,6 +971,7 @@ function ProgressRow({ label, active, reached, + paused, value, suffix, loading, @@ -882,13 +980,14 @@ function ProgressRow({ label: string; active: boolean; reached: boolean; + paused?: boolean; value?: React.ReactNode; suffix?: React.ReactNode; loading?: boolean; children?: React.ReactNode; }) { const [open, setOpen] = useState(false); - const done = reached && !active; + const done = reached && !active && !paused; const expandable = reached; return ( @@ -905,6 +1004,8 @@ function ProgressRow({ {active ? ( + ) : paused ? ( + ) : done ? ( ) : ( diff --git a/web/src/app/dashboard/settings/general/page.tsx b/web/src/app/dashboard/settings/general/page.tsx index bc0180e..a6292ef 100644 --- a/web/src/app/dashboard/settings/general/page.tsx +++ b/web/src/app/dashboard/settings/general/page.tsx @@ -1,9 +1,9 @@ -"use client" +"use client"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react" -import { Upload, Trash2 } from "lucide-react" +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { Upload, Trash2 } from "lucide-react"; -import { useCurrentUser } from "@/hooks/use-current-user" +import { useCurrentUser } from "@/hooks/use-current-user"; import { getSettings, getDbInfo, @@ -13,11 +13,11 @@ import { deleteLogo, type SettingEntry, type DbInfo, -} from "@/lib/api" -import { SiteHeader } from "@/components/site-header" -import { Button } from "@/components/ui/button" -import { Input } from "@/components/ui/input" -import { Label } from "@/components/ui/label" +} from "@/lib/api"; +import { SiteHeader } from "@/components/site-header"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; const SETTING_KEYS = [ "app_name", @@ -29,16 +29,16 @@ const SETTING_KEYS = [ "logo_uri", "tos_uri", "policy_uri", -] as const +] as const; -type FieldKey = (typeof SETTING_KEYS)[number] +type FieldKey = (typeof SETTING_KEYS)[number]; type FieldConfig = { - key: FieldKey - label: string - placeholder: string - description: string -} + key: FieldKey; + label: string; + placeholder: string; + description: string; +}; const FIELDS: FieldConfig[] = [ { @@ -74,11 +74,11 @@ const FIELDS: FieldConfig[] = [ placeholder: "https://example.com/privacy", description: "Link to your privacy policy. Optional.", }, -] +]; export default function GeneralSettingsPage() { - const { hasPermission } = useCurrentUser() - const canManage = hasPermission("settings:manage") + const { hasPermission } = useCurrentUser(); + const canManage = hasPermission("settings:manage"); const [values, setValues] = useState>({ app_name: "", @@ -90,8 +90,10 @@ export default function GeneralSettingsPage() { logo_uri: "", tos_uri: "", policy_uri: "", - }) - const [sources, setSources] = useState>({ + }); + const [sources, setSources] = useState< + Record + >({ app_name: "unset", backfill_concurrent_dids_per_pds: "unset", backfill_concurrent_pds: "unset", @@ -101,34 +103,46 @@ export default function GeneralSettingsPage() { logo_uri: "unset", tos_uri: "unset", policy_uri: "unset", - }) - const [logoUploaded, setLogoUploaded] = useState(false) - const [dbInfo, setDbInfo] = useState(null) - const [error, setError] = useState(null) - const [saving, setSaving] = useState(false) - const [notice, setNotice] = useState(null) - const fileInputRef = useRef(null) + }); + const [logoUploaded, setLogoUploaded] = useState(false); + const [dbInfo, setDbInfo] = useState(null); + const [error, setError] = useState(null); + const [saving, setSaving] = useState(false); + const [notice, setNotice] = useState(null); + const fileInputRef = useRef(null); const load = useCallback(async () => { try { - const entries = await getSettings() - const byKey = new Map(entries.map((e) => [e.key, e])) - const val = (key: string, fallback: string) => byKey.get(key)?.value ?? fallback - const src = (key: string) => (byKey.get(key)?.source as "database" | "env" | undefined) ?? "unset" + const entries = await getSettings(); + const byKey = new Map( + entries.map((e) => [e.key, e]), + ); + const val = (key: string, fallback: string) => + byKey.get(key)?.value ?? fallback; + const src = (key: string) => + (byKey.get(key)?.source as "database" | "env" | undefined) ?? "unset"; setValues({ app_name: val("app_name", ""), - backfill_concurrent_dids_per_pds: val("backfill_concurrent_dids_per_pds", "3"), + backfill_concurrent_dids_per_pds: val( + "backfill_concurrent_dids_per_pds", + "3", + ), backfill_concurrent_pds: val("backfill_concurrent_pds", "10"), - backfill_concurrent_resolution: val("backfill_concurrent_resolution", "100"), + backfill_concurrent_resolution: val( + "backfill_concurrent_resolution", + "100", + ), backfill_retention_days: val("backfill_retention_days", "28"), client_uri: val("client_uri", ""), logo_uri: val("logo_uri", ""), tos_uri: val("tos_uri", ""), policy_uri: val("policy_uri", ""), - }) + }); setSources({ app_name: src("app_name"), - backfill_concurrent_dids_per_pds: src("backfill_concurrent_dids_per_pds"), + backfill_concurrent_dids_per_pds: src( + "backfill_concurrent_dids_per_pds", + ), backfill_concurrent_pds: src("backfill_concurrent_pds"), backfill_concurrent_resolution: src("backfill_concurrent_resolution"), backfill_retention_days: src("backfill_retention_days"), @@ -136,35 +150,35 @@ export default function GeneralSettingsPage() { logo_uri: src("logo_uri"), tos_uri: src("tos_uri"), policy_uri: src("policy_uri"), - }) - setLogoUploaded(byKey.has("logo_data")) + }); + setLogoUploaded(byKey.has("logo_data")); try { - setDbInfo(await getDbInfo()) + setDbInfo(await getDbInfo()); } catch { // non-critical } } catch (e: unknown) { - setError(e instanceof Error ? e.message : String(e)) + setError(e instanceof Error ? e.message : String(e)); } - }, []) + }, []); useEffect(() => { - load() - }, [load]) + load(); + }, [load]); async function handleSave() { - setError(null) - setNotice(null) - setSaving(true) + setError(null); + setNotice(null); + setSaving(true); try { for (const field of FIELDS) { - const value = values[field.key] + const value = values[field.key]; if (value === "") { if (sources[field.key] === "database") { - await deleteSetting(field.key) + await deleteSetting(field.key); } } else { - await upsertSetting(field.key, value) + await upsertSetting(field.key, value); } } const backfillKeys = [ @@ -172,77 +186,79 @@ export default function GeneralSettingsPage() { "backfill_concurrent_pds", "backfill_concurrent_resolution", "backfill_retention_days", - ] as const + ] as const; for (const key of backfillKeys) { - const value = values[key] + const value = values[key]; if (value === "") { if (sources[key] === "database") { - await deleteSetting(key) + await deleteSetting(key); } } else { - await upsertSetting(key, value) + await upsertSetting(key, value); } } - setNotice("Settings saved.") - await load() + setNotice("Settings saved."); + await load(); } catch (e: unknown) { - setError(e instanceof Error ? e.message : String(e)) + setError(e instanceof Error ? e.message : String(e)); } finally { - setSaving(false) + setSaving(false); } } async function handleLogoUpload(e: React.ChangeEvent) { - const file = e.target.files?.[0] - if (!file) return - setError(null) + const file = e.target.files?.[0]; + if (!file) return; + setError(null); try { - await uploadLogo(file) - setNotice("Logo uploaded.") - await load() + await uploadLogo(file); + setNotice("Logo uploaded."); + await load(); } catch (err: unknown) { - setError(err instanceof Error ? err.message : String(err)) + setError(err instanceof Error ? err.message : String(err)); } finally { - if (fileInputRef.current) fileInputRef.current.value = "" + if (fileInputRef.current) fileInputRef.current.value = ""; } } async function handleLogoDelete() { - setError(null) + setError(null); try { - await deleteLogo() - setNotice("Logo removed.") - await load() + await deleteLogo(); + setNotice("Logo removed."); + await load(); } catch (err: unknown) { - setError(err instanceof Error ? err.message : String(err)) + setError(err instanceof Error ? err.message : String(err)); } } const connectionEstimate = useMemo(() => { - const pds = parseInt(values.backfill_concurrent_pds) || 10 - const dids = parseInt(values.backfill_concurrent_dids_per_pds) || 3 - const resolution = parseInt(values.backfill_concurrent_resolution) || 100 - const needed = pds * dids + resolution + 4 - const mainPool = dbInfo?.main_pool_size ?? 32 - const total = needed + mainPool - const serverMax = dbInfo?.server_max_connections ?? null - return { needed, mainPool, total, serverMax } - }, [values, dbInfo]) + const pds = parseInt(values.backfill_concurrent_pds) || 10; + const dids = parseInt(values.backfill_concurrent_dids_per_pds) || 3; + const resolution = parseInt(values.backfill_concurrent_resolution) || 100; + const needed = pds * dids + resolution + 4; + const mainPool = dbInfo?.main_pool_size ?? 32; + const total = needed + mainPool; + const serverMax = dbInfo?.server_max_connections ?? null; + return { needed, mainPool, total, serverMax }; + }, [values, dbInfo]); const connectionWarning = useMemo(() => { - if (!connectionEstimate.serverMax) return null + if (!connectionEstimate.serverMax) return null; if (connectionEstimate.total > connectionEstimate.serverMax) { - return `These settings need ~${connectionEstimate.total} connections (${connectionEstimate.needed} backfill + ${connectionEstimate.mainPool} main), but the database allows ${connectionEstimate.serverMax}. Reduce concurrency or increase the database's max_connections.` + return `These settings need ~${connectionEstimate.total} connections (${connectionEstimate.needed} backfill + ${connectionEstimate.mainPool} main), but the database allows ${connectionEstimate.serverMax}. Reduce concurrency or increase the database's max_connections.`; } - return null - }, [connectionEstimate]) + return null; + }, [connectionEstimate]); return ( <>
{error &&

{error}

} - {notice &&

{notice}

} + {notice && ( +

{notice}

+ )}

Instance Identity

@@ -320,13 +336,16 @@ export default function GeneralSettingsPage() {

Data Retention

- Configure how long HappyView retains detailed data from completed backfill jobs. + Configure how long HappyView retains detailed data from completed + backfill jobs.

- + {sources["backfill_retention_days"] === "env" && ( from env var @@ -340,25 +359,31 @@ export default function GeneralSettingsPage() { step={1} value={values["backfill_retention_days"]} onChange={(e) => - setValues((v) => ({ ...v, backfill_retention_days: e.target.value })) + setValues((v) => ({ + ...v, + backfill_retention_days: e.target.value, + })) } placeholder="28" disabled={!canManage} />

- How long to keep per-repo detail data from completed backfill jobs. Set to 0 to keep indefinitely. + How long to keep per-repo detail data from completed backfill jobs. + Set to 0 to keep indefinitely.

Backfill Performance

- Tune concurrency limits for backfill jobs. Changes apply to the next job started. - The backfill connection pool is auto-sized on startup based on these values. + Tune concurrency limits for backfill jobs. Changes only apply to new + or resumed jobs.

{dbInfo?.server_max_connections && (

- Database limit: {dbInfo.server_max_connections} connections · Main pool: {connectionEstimate.mainPool} · Backfill estimate: {connectionEstimate.needed} + Database limit: {dbInfo.server_max_connections} connections · Main + pool: {connectionEstimate.mainPool} · Backfill estimate:{" "} + {connectionEstimate.needed}

)} {connectionWarning && ( @@ -366,16 +391,39 @@ export default function GeneralSettingsPage() { )}
- {([ - { key: "backfill_concurrent_resolution" as const, id: "backfill_concurrent_resolution", label: "Concurrent PLC Resolutions", placeholder: "100", description: "How many DID document lookups to run in parallel during PDS resolution." }, - { key: "backfill_concurrent_pds" as const, id: "backfill_concurrent_pds", label: "Concurrent PDS Hosts", placeholder: "10", description: "How many PDS servers to fetch records from simultaneously." }, - { key: "backfill_concurrent_dids_per_pds" as const, id: "backfill_concurrent_dids_per_pds", label: "Concurrent DIDs per PDS", placeholder: "3", description: "How many repos to fetch concurrently from each PDS host." }, - ]).map((field) => ( + {[ + { + key: "backfill_concurrent_resolution" as const, + id: "backfill_concurrent_resolution", + label: "Concurrent PLC Resolutions", + placeholder: "100", + description: + "How many DID document lookups to run in parallel during PDS resolution.", + }, + { + key: "backfill_concurrent_pds" as const, + id: "backfill_concurrent_pds", + label: "Concurrent PDS Hosts", + placeholder: "10", + description: + "How many PDS servers to fetch records from simultaneously.", + }, + { + key: "backfill_concurrent_dids_per_pds" as const, + id: "backfill_concurrent_dids_per_pds", + label: "Concurrent DIDs per PDS", + placeholder: "3", + description: + "How many repos to fetch concurrently from each PDS host.", + }, + ].map((field) => (
{sources[field.key] === "env" && ( - from env var + + from env var + )}
setValues((v) => ({ ...v, [field.key]: e.target.value }))} + onChange={(e) => + setValues((v) => ({ ...v, [field.key]: e.target.value })) + } placeholder={field.placeholder} disabled={!canManage} /> @@ -402,5 +452,5 @@ export default function GeneralSettingsPage() {
- ) + ); } diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 1c43284..1d93562 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -189,6 +189,20 @@ export function cancelBackfillJob(id: string) { ); } +export function pauseBackfillJob(id: string) { + return apiFetch<{ id: string; status: string }>( + `/admin/backfill/${id}/pause`, + { method: "POST" }, + ); +} + +export function resumeBackfillJob(id: string) { + return apiFetch<{ id: string; status: string }>( + `/admin/backfill/${id}/resume`, + { method: "POST" }, + ); +} + export function getBackfillRepos( jobId: string, params: { phase?: string; cursor?: string; limit?: number } = {}, -- 2.51.2 From 30b97ef674f2de08773951eb35b068b7426f152a Mon Sep 17 00:00:00 2001 From: Trezy Date: Fri, 22 May 2026 20:16:18 -0500 Subject: [PATCH 149/250] feat: recommend restart when backfill concurrency settings dont match existing connection pool size Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/layout.tsx | 25 ++++++----- web/src/components/app-sidebar.tsx | 22 ++++++++++ web/src/components/site-header.tsx | 67 ++++++++++++++++++++++-------- web/src/lib/api.ts | 1 + web/src/lib/restart-context.tsx | 47 +++++++++++++++++++++ 5 files changed, 133 insertions(+), 29 deletions(-) create mode 100644 web/src/lib/restart-context.tsx diff --git a/web/src/app/dashboard/layout.tsx b/web/src/app/dashboard/layout.tsx index 9e5488f..be0b4e3 100644 --- a/web/src/app/dashboard/layout.tsx +++ b/web/src/app/dashboard/layout.tsx @@ -7,6 +7,7 @@ import { useAuth } from "@/lib/auth-context" import { useConfig } from "@/lib/config-context" import { AppSidebar } from "@/components/app-sidebar" import { PluginUpdateProvider } from "@/components/plugin-update-provider" +import { RestartProvider } from "@/lib/restart-context" import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar" import { Toaster } from "@/components/ui/sonner" @@ -33,17 +34,19 @@ export default function DashboardLayout({ return ( - - - {children} - + + + + {children} + + ) diff --git a/web/src/components/app-sidebar.tsx b/web/src/components/app-sidebar.tsx index cc54c77..e9521d8 100644 --- a/web/src/components/app-sidebar.tsx +++ b/web/src/components/app-sidebar.tsx @@ -29,6 +29,8 @@ import { useAuth } from "@/lib/auth-context"; import { useConfig } from "@/lib/config-context"; import { useCurrentUser } from "@/hooks/use-current-user"; import { usePluginUpdates } from "@/components/plugin-update-provider"; +import { useRestart } from "@/lib/restart-context"; +import { getDbInfo } from "@/lib/api"; import { Scroller } from "@/components/ui/scroller"; import { Sidebar, @@ -138,6 +140,7 @@ export function AppSidebar({ ...props }: React.ComponentProps) { const { app_name, logo_url } = useConfig(); const { hasPermission } = useCurrentUser(); const { hasUpdates } = usePluginUpdates(); + const { addReason, removeReason } = useRestart(); const [deadLetterCount, setDeadLetterCount] = useState(0); @@ -160,6 +163,25 @@ export function AppSidebar({ ...props }: React.ComponentProps) { }; }, []); + useEffect(() => { + if (!hasPermission("settings:manage")) return; + let cancelled = false; + getDbInfo() + .then((info) => { + if (!cancelled) { + if (info.restart_recommended) { + addReason("backfill-pool", "Backfill pool is undersized for current concurrency settings."); + } else { + removeReason("backfill-pool"); + } + } + }) + .catch(() => {}); + return () => { + cancelled = true; + }; + }, [hasPermission, addReason, removeReason]); + function filterByPermission(items: NavItem[]) { return items.filter( (item) => diff --git a/web/src/components/site-header.tsx b/web/src/components/site-header.tsx index 741edf2..c5a7eaf 100644 --- a/web/src/components/site-header.tsx +++ b/web/src/components/site-header.tsx @@ -1,8 +1,11 @@ "use client" +import { useState } from "react" import { IconArrowLeft } from "@tabler/icons-react" +import { AlertTriangle, ChevronDown } from "lucide-react" import Link from "next/link" +import { useRestart } from "@/lib/restart-context" import { Button } from "@/components/ui/button" import { Separator } from "@/components/ui/separator" import { SidebarTrigger } from "@/components/ui/sidebar" @@ -15,27 +18,55 @@ export function SiteHeader({ title: string backHref?: string }) { + const { reasons } = useRestart() + const [expanded, setExpanded] = useState(false) + return ( -
-
- - - {backHref && ( - - )} -

{title}

-
- +
+
+
+ + + {backHref && ( + + )} +

{title}

+
+ +
+ {reasons.length > 0 && ( +
+ + {expanded && ( +
    + {reasons.map((reason, i) => ( +
  • + + {reason} +
  • + ))} +
+ )} +
+ )}
) } diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index 1d93562..9612788 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -384,6 +384,7 @@ export type DbInfo = { server_max_connections: number | null; main_pool_size: number; backfill_pool_size: number; + restart_recommended: boolean; }; export function getDbInfo() { diff --git a/web/src/lib/restart-context.tsx b/web/src/lib/restart-context.tsx new file mode 100644 index 0000000..a503e61 --- /dev/null +++ b/web/src/lib/restart-context.tsx @@ -0,0 +1,47 @@ +"use client"; + +import { createContext, useCallback, useContext, useMemo, useRef, useState } from "react"; + +interface RestartContextType { + reasons: string[]; + addReason: (key: string, reason: string) => void; + removeReason: (key: string) => void; +} + +const RestartContext = createContext({ + reasons: [], + addReason: () => {}, + removeReason: () => {}, +}); + +export function RestartProvider({ children }: { children: React.ReactNode }) { + const [reasonMap, setReasonMap] = useState>({}); + const reasonMapRef = useRef(reasonMap); + reasonMapRef.current = reasonMap; + + const addReason = useCallback((key: string, reason: string) => { + if (reasonMapRef.current[key] === reason) return; + setReasonMap((prev) => ({ ...prev, [key]: reason })); + }, []); + + const removeReason = useCallback((key: string) => { + setReasonMap((prev) => { + if (!(key in prev)) return prev; + const next = { ...prev }; + delete next[key]; + return next; + }); + }, []); + + const reasons = useMemo(() => Object.values(reasonMap), [reasonMap]); + + return ( + + {children} + + ); +} + +export function useRestart() { + return useContext(RestartContext); +} -- 2.51.2 From 2d7f51ec4f5f4e7905e5e249adee62c0eb2d20dd Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 12:08:23 -0500 Subject: [PATCH 150/250] feat: make verbose event logs configurable Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/settings.rs | 1 + src/lib.rs | 1 + src/lua/atproto_api.rs | 1 + src/lua/db_api.rs | 1 + src/lua/execute.rs | 38 ++++---- src/lua/http_api.rs | 1 + src/lua/xrpc_api.rs | 1 + src/main.rs | 34 ++++++- src/record_handler.rs | 96 +++++-------------- tests/common/app.rs | 1 + tests/lua_atproto_api.rs | 1 + tests/lua_db_api.rs | 1 + .../app/dashboard/settings/general/page.tsx | 50 +++++++++- web/src/lib/api.ts | 4 + 14 files changed, 136 insertions(+), 95 deletions(-) diff --git a/src/admin/settings.rs b/src/admin/settings.rs index f730f7b..c3c1a1b 100644 --- a/src/admin/settings.rs +++ b/src/admin/settings.rs @@ -31,6 +31,7 @@ const ENV_FALLBACKS: &[(&str, &str)] = &[ ("logo_uri", "LOGO_URI"), ("tos_uri", "TOS_URI"), ("policy_uri", "POLICY_URI"), + ("verbose_event_logging", "VERBOSE_EVENT_LOGGING"), ]; /// Resolve a setting value: check the DB first, then fall back to env var. diff --git a/src/lib.rs b/src/lib.rs index 3b3a061..39a44ef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -80,6 +80,7 @@ pub struct AppState { pub official_registry_config: RegistryConfig, pub proxy_config: Arc>, pub backfill_events_tx: tokio::sync::broadcast::Sender, + pub verbose_event_logging: std::sync::Arc, } impl axum::extract::FromRef for axum_extra::extract::cookie::Key { diff --git a/src/lua/atproto_api.rs b/src/lua/atproto_api.rs index 40af1b0..aeb047c 100644 --- a/src/lua/atproto_api.rs +++ b/src/lua/atproto_api.rs @@ -584,6 +584,7 @@ mod tests { crate::proxy_config::ProxyConfig::default(), ))), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index e8d95b8..5e7f062 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -792,6 +792,7 @@ mod tests { crate::proxy_config::ProxyConfig::default(), ))), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/src/lua/execute.rs b/src/lua/execute.rs index bf50cf3..0e0037d 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -4,6 +4,7 @@ use mlua::LuaSerdeExt; use serde_json::Value; use std::collections::HashMap; use std::sync::Arc; +use std::sync::atomic::Ordering; use std::time::Instant; use crate::AppState; @@ -913,23 +914,25 @@ pub async fn execute_hook_script(event: &HookEvent<'_>) -> Option { match run_hook_once(event).await { Ok(hook_result) => { - log_event( - &event.state.db, - EventLog { - event_type: "hook.executed".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(event.uri.to_string()), - detail: serde_json::json!({ - "lexicon_id": event.lexicon_id, - "action": event.action, - "collection": event.collection, - "attempts": attempt + 1, - }), - }, - backend, - ) - .await; + if event.state.verbose_event_logging.load(Ordering::Relaxed) { + log_event( + &event.state.db, + EventLog { + event_type: "hook.executed".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(event.uri.to_string()), + detail: serde_json::json!({ + "lexicon_id": event.lexicon_id, + "action": event.action, + "collection": event.collection, + "attempts": attempt + 1, + }), + }, + backend, + ) + .await; + } return hook_result; } Err(e) => { @@ -1182,6 +1185,7 @@ mod tests { crate::proxy_config::ProxyConfig::default(), ))), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/src/lua/http_api.rs b/src/lua/http_api.rs index 12b3716..cce9b54 100644 --- a/src/lua/http_api.rs +++ b/src/lua/http_api.rs @@ -190,6 +190,7 @@ mod tests { crate::proxy_config::ProxyConfig::default(), ))), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/src/lua/xrpc_api.rs b/src/lua/xrpc_api.rs index 82c6ed7..6a5b930 100644 --- a/src/lua/xrpc_api.rs +++ b/src/lua/xrpc_api.rs @@ -294,6 +294,7 @@ mod tests { crate::proxy_config::ProxyConfig::default(), ))), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/src/main.rs b/src/main.rs index 9a3bf7c..f6a78b2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,8 +28,11 @@ async fn main() { tracing_subscriber::fmt() .with_env_filter( - tracing_subscriber::EnvFilter::try_from_default_env() - .unwrap_or_else(|_| "happyview=debug,tower_http=debug".parse().unwrap()), + tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| { + "happyview=debug,tower_http=debug,sqlx=warn" + .parse() + .unwrap() + }), ) .init(); @@ -615,6 +618,15 @@ async fn main() { let (backfill_events_tx, _) = tokio::sync::broadcast::channel(1024); + let verbose_event_logging = { + let enabled = + happyview::admin::settings::get_setting(&db_pool, "verbose_event_logging", db_backend) + .await + .map(|v| v.eq_ignore_ascii_case("true")) + .unwrap_or(false); + std::sync::Arc::new(std::sync::atomic::AtomicBool::new(enabled)) + }; + let state = AppState { config: config.clone(), http, @@ -636,6 +648,7 @@ async fn main() { official_registry_config, proxy_config, backfill_events_tx, + verbose_event_logging, }; jetstream::spawn(state.clone(), collections_rx); @@ -649,6 +662,23 @@ async fn main() { state.db_backend, )); + { + let db = state.db.clone(); + let flag = state.verbose_event_logging.clone(); + let backend = state.db_backend; + tokio::spawn(async move { + loop { + tokio::time::sleep(std::time::Duration::from_secs(30)).await; + let enabled = + happyview::admin::settings::get_setting(&db, "verbose_event_logging", backend) + .await + .map(|v| v.eq_ignore_ascii_case("true")) + .unwrap_or(false); + flag.store(enabled, std::sync::atomic::Ordering::Relaxed); + } + }); + } + happyview::admin::backfill::resume_backfill_jobs(&state).await; { diff --git a/src/record_handler.rs b/src/record_handler.rs index e59f75f..34dacee 100644 --- a/src/record_handler.rs +++ b/src/record_handler.rs @@ -1,4 +1,5 @@ use std::sync::Arc; +use std::sync::atomic::Ordering; use serde_json::Value; @@ -74,27 +75,7 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { .await; match hook_result { - None => { - // Hook returned nil — skip indexing this record. - log_event( - db, - EventLog { - event_type: "record.skipped".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(uri.clone()), - detail: serde_json::json!({ - "collection": record.collection, - "did": record.did, - "rkey": record.rkey, - "reason": "hook returned nil", - }), - }, - state.db_backend, - ) - .await; - return; - } + None => return, Some(v) => v, } } else { @@ -138,23 +119,6 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { ) .await; - log_event( - db, - EventLog { - event_type: "record.created".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(uri.clone()), - detail: serde_json::json!({ - "collection": record.collection, - "did": record.did, - "rkey": record.rkey, - }), - }, - backend, - ) - .await; - crate::labeler::backfill_labels_for_uri(Arc::new(state.clone()), uri.clone()); } Err(e) => { @@ -198,48 +162,32 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { .await; if hook_result.is_none() { - // Hook returned nil — skip the delete. - log_event( - db, - EventLog { - event_type: "record.skipped".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(uri.clone()), - detail: serde_json::json!({ - "collection": record.collection, - "did": record.did, - "rkey": record.rkey, - "reason": "hook returned nil", - }), - }, - backend, - ) - .await; + if state.verbose_event_logging.load(Ordering::Relaxed) { + log_event( + db, + EventLog { + event_type: "record.skipped".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.clone()), + detail: serde_json::json!({ + "collection": record.collection, + "did": record.did, + "rkey": record.rkey, + "reason": "hook returned nil", + }), + }, + backend, + ) + .await; + } return; } } let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); match sqlx::query(&delete_sql).bind(&uri).execute(db).await { - Ok(_) => { - log_event( - db, - EventLog { - event_type: "record.deleted".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(uri.clone()), - detail: serde_json::json!({ - "collection": record.collection, - "did": record.did, - "rkey": record.rkey, - }), - }, - backend, - ) - .await; - } + Ok(_) => {} Err(e) => { tracing::warn!(uri = %uri, "failed to delete record: {e}"); log_event( diff --git a/tests/common/app.rs b/tests/common/app.rs index bac7ff8..cd08de7 100644 --- a/tests/common/app.rs +++ b/tests/common/app.rs @@ -169,6 +169,7 @@ impl TestApp { ))), backfill_db: pool.clone(), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), }; let router = server::router(state.clone()).layer(axum::middleware::from_fn( diff --git a/tests/lua_atproto_api.rs b/tests/lua_atproto_api.rs index f0a24c1..396a7ba 100644 --- a/tests/lua_atproto_api.rs +++ b/tests/lua_atproto_api.rs @@ -103,6 +103,7 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> ))), backfill_db: pool.clone(), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/tests/lua_db_api.rs b/tests/lua_db_api.rs index bbf17f2..d32bb90 100644 --- a/tests/lua_db_api.rs +++ b/tests/lua_db_api.rs @@ -106,6 +106,7 @@ async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> ))), backfill_db: pool.clone(), backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), } } diff --git a/web/src/app/dashboard/settings/general/page.tsx b/web/src/app/dashboard/settings/general/page.tsx index a6292ef..47ebe58 100644 --- a/web/src/app/dashboard/settings/general/page.tsx +++ b/web/src/app/dashboard/settings/general/page.tsx @@ -18,6 +18,7 @@ import { SiteHeader } from "@/components/site-header"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; +import { Switch } from "@/components/ui/switch"; const SETTING_KEYS = [ "app_name", @@ -29,6 +30,7 @@ const SETTING_KEYS = [ "logo_uri", "tos_uri", "policy_uri", + "verbose_event_logging", ] as const; type FieldKey = (typeof SETTING_KEYS)[number]; @@ -90,6 +92,7 @@ export default function GeneralSettingsPage() { logo_uri: "", tos_uri: "", policy_uri: "", + verbose_event_logging: "", }); const [sources, setSources] = useState< Record @@ -103,6 +106,7 @@ export default function GeneralSettingsPage() { logo_uri: "unset", tos_uri: "unset", policy_uri: "unset", + verbose_event_logging: "unset", }); const [logoUploaded, setLogoUploaded] = useState(false); const [dbInfo, setDbInfo] = useState(null); @@ -137,6 +141,7 @@ export default function GeneralSettingsPage() { logo_uri: val("logo_uri", ""), tos_uri: val("tos_uri", ""), policy_uri: val("policy_uri", ""), + verbose_event_logging: val("verbose_event_logging", ""), }); setSources({ app_name: src("app_name"), @@ -150,6 +155,7 @@ export default function GeneralSettingsPage() { logo_uri: src("logo_uri"), tos_uri: src("tos_uri"), policy_uri: src("policy_uri"), + verbose_event_logging: src("verbose_event_logging"), }); setLogoUploaded(byKey.has("logo_data")); try { @@ -181,13 +187,14 @@ export default function GeneralSettingsPage() { await upsertSetting(field.key, value); } } - const backfillKeys = [ + const extraKeys = [ "backfill_concurrent_dids_per_pds", "backfill_concurrent_pds", "backfill_concurrent_resolution", "backfill_retention_days", + "verbose_event_logging", ] as const; - for (const key of backfillKeys) { + for (const key of extraKeys) { const value = values[key]; if (value === "") { if (sources[key] === "database") { @@ -442,6 +449,45 @@ export default function GeneralSettingsPage() {
))} +
+

Logging

+

+ Configure event log verbosity. +

+
+ +
+
+
+ + {sources["verbose_event_logging"] === "env" && ( + + from env var + + )} +
+

+ Log every record index, hook execution, and hook skip to the event + log. Generates high write volume and will cause issues if + you're indexing high-traffic collections. Recommended to only use + for debugging. +

+
+ + setValues((v) => ({ + ...v, + verbose_event_logging: checked ? "true" : "", + })) + } + disabled={!canManage} + /> +
+
- - - - - ); - } if (!table.getIsAllPageRowsSelected()) { return ( -- 2.51.2 From e023d39d4b4035970921bc8bc8abba45bdc6e895 Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 12:30:44 -0500 Subject: [PATCH 153/250] fix: better pool size accounting when using sqlite Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/settings.rs | 11 ++++---- src/db.rs | 60 ++++++++++++++++++++++++++----------------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/admin/settings.rs b/src/admin/settings.rs index c3c1a1b..dd9d3d3 100644 --- a/src/admin/settings.rs +++ b/src/admin/settings.rs @@ -204,11 +204,11 @@ pub(super) async fn db_info( let main_pool_size = state.db.options().get_max_connections() as i64; let backfill_pool_size = state.backfill_db.options().get_max_connections() as i64; - let pds: i64 = get_setting(&state.db, "backfill_concurrent_pds", state.db_backend) + let pds: u32 = get_setting(&state.db, "backfill_concurrent_pds", state.db_backend) .await .and_then(|v| v.parse().ok()) .unwrap_or(10); - let dids: i64 = get_setting( + let dids: u32 = get_setting( &state.db, "backfill_concurrent_dids_per_pds", state.db_backend, @@ -216,7 +216,7 @@ pub(super) async fn db_info( .await .and_then(|v| v.parse().ok()) .unwrap_or(3); - let resolution: i64 = get_setting( + let resolution: u32 = get_setting( &state.db, "backfill_concurrent_resolution", state.db_backend, @@ -224,8 +224,9 @@ pub(super) async fn db_info( .await .and_then(|v| v.parse().ok()) .unwrap_or(100); - let needed_backfill_pool = (pds * dids) + resolution + 4; - let restart_recommended = needed_backfill_pool > backfill_pool_size; + let would_be_pool_size = + crate::db::compute_backfill_pool_size(state.db_backend, pds, dids, resolution); + let restart_recommended = would_be_pool_size as i64 > backfill_pool_size; Ok(Json(serde_json::json!({ "backend": match state.db_backend { diff --git a/src/db.rs b/src/db.rs index 6eb5cbc..9572d69 100644 --- a/src/db.rs +++ b/src/db.rs @@ -283,33 +283,47 @@ pub async fn connect(url: &str, backend: DatabaseBackend) -> AnyPool { pool } -pub async fn connect_backfill_pool(url: &str, backend: DatabaseBackend) -> AnyPool { - let max_connections: u32 = std::env::var("BACKFILL_DATABASE_MAX_CONNECTIONS") +pub fn backfill_pool_ceiling(backend: DatabaseBackend) -> u32 { + match backend { + DatabaseBackend::Sqlite => 64, + DatabaseBackend::Postgres => 256, + } +} + +pub fn needed_backfill_connections(pds: u32, dids_per_pds: u32, resolution: u32) -> u32 { + (pds * dids_per_pds) + resolution + 4 +} + +pub fn compute_backfill_pool_size( + backend: DatabaseBackend, + pds: u32, + dids_per_pds: u32, + resolution: u32, +) -> u32 { + std::env::var("BACKFILL_DATABASE_MAX_CONNECTIONS") .ok() .and_then(|v| v.parse::().ok()) .unwrap_or_else(|| { - let pds: u32 = std::env::var("BACKFILL_CONCURRENT_PDS") - .ok() - .and_then(|v| v.parse().ok()) - .unwrap_or(10); - let dids: u32 = std::env::var("BACKFILL_CONCURRENT_DIDS_PER_PDS") - .ok() - .and_then(|v| v.parse().ok()) - .unwrap_or(3); - let resolution: u32 = std::env::var("BACKFILL_CONCURRENT_RESOLUTION") - .ok() - .and_then(|v| v.parse().ok()) - .unwrap_or(100); - // Each concurrent worker may need a connection: PDS×DIDs for fetching + - // resolution concurrency + a few for bookkeeping queries. - let needed = (pds * dids) + resolution + 4; - let ceiling = match backend { - DatabaseBackend::Sqlite => 64, - DatabaseBackend::Postgres => 256, - }; - needed.min(ceiling) + needed_backfill_connections(pds, dids_per_pds, resolution) + .min(backfill_pool_ceiling(backend)) }) - .max(1); + .max(1) +} + +pub async fn connect_backfill_pool(url: &str, backend: DatabaseBackend) -> AnyPool { + let pds: u32 = std::env::var("BACKFILL_CONCURRENT_PDS") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(10); + let dids: u32 = std::env::var("BACKFILL_CONCURRENT_DIDS_PER_PDS") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(3); + let resolution: u32 = std::env::var("BACKFILL_CONCURRENT_RESOLUTION") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(100); + let max_connections = compute_backfill_pool_size(backend, pds, dids, resolution); tracing::info!(max_connections, "backfill pool sized"); -- 2.51.2 From d52b31b88a2107a81c674c64045140dd20f08450 Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 14:53:01 -0500 Subject: [PATCH 154/250] fix: restore missing log events for verbose logging Signed-off-by: Trezy Signed-off-by: Trezy --- src/record_handler.rs | 63 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/src/record_handler.rs b/src/record_handler.rs index 34dacee..9631941 100644 --- a/src/record_handler.rs +++ b/src/record_handler.rs @@ -75,7 +75,28 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { .await; match hook_result { - None => return, + None => { + if state.verbose_event_logging.load(Ordering::Relaxed) { + log_event( + db, + EventLog { + event_type: "record.skipped".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.clone()), + detail: serde_json::json!({ + "collection": record.collection, + "did": record.did, + "rkey": record.rkey, + "reason": "hook returned nil", + }), + }, + state.db_backend, + ) + .await; + } + return; + } Some(v) => v, } } else { @@ -119,6 +140,25 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { ) .await; + if state.verbose_event_logging.load(Ordering::Relaxed) { + log_event( + db, + EventLog { + event_type: "record.created".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.clone()), + detail: serde_json::json!({ + "collection": record.collection, + "did": record.did, + "rkey": record.rkey, + }), + }, + backend, + ) + .await; + } + crate::labeler::backfill_labels_for_uri(Arc::new(state.clone()), uri.clone()); } Err(e) => { @@ -187,7 +227,26 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); match sqlx::query(&delete_sql).bind(&uri).execute(db).await { - Ok(_) => {} + Ok(_) => { + if state.verbose_event_logging.load(Ordering::Relaxed) { + log_event( + db, + EventLog { + event_type: "record.deleted".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.clone()), + detail: serde_json::json!({ + "collection": record.collection, + "did": record.did, + "rkey": record.rkey, + }), + }, + backend, + ) + .await; + } + } Err(e) => { tracing::warn!(uri = %uri, "failed to delete record: {e}"); log_event( -- 2.51.2 From 8d42d38283af16a76e1ae489d5b81567bddd8f2b Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 14:57:36 -0500 Subject: [PATCH 155/250] test: add tests for backfill concurrency Signed-off-by: Trezy Signed-off-by: Trezy --- src/db.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/db.rs b/src/db.rs index 9572d69..a4a6938 100644 --- a/src/db.rs +++ b/src/db.rs @@ -637,6 +637,57 @@ mod tests { // parse_dt // ----------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // backfill pool sizing + // ----------------------------------------------------------------------- + + #[test] + fn needed_backfill_connections_formula() { + assert_eq!(needed_backfill_connections(10, 3, 100), 134); + assert_eq!(needed_backfill_connections(1, 1, 1), 6); + assert_eq!(needed_backfill_connections(0, 0, 0), 4); + } + + #[test] + fn backfill_pool_ceiling_values() { + assert_eq!(backfill_pool_ceiling(DatabaseBackend::Sqlite), 64); + assert_eq!(backfill_pool_ceiling(DatabaseBackend::Postgres), 256); + } + + #[test] + fn needed_connections_capped_by_sqlite_ceiling() { + let needed = needed_backfill_connections(10, 3, 100); + let capped = needed.min(backfill_pool_ceiling(DatabaseBackend::Sqlite)); + assert_eq!(needed, 134); + assert_eq!(capped, 64); + } + + #[test] + fn needed_connections_capped_by_postgres_ceiling() { + let needed = needed_backfill_connections(50, 10, 200); + let capped = needed.min(backfill_pool_ceiling(DatabaseBackend::Postgres)); + assert_eq!(needed, 704); + assert_eq!(capped, 256); + } + + #[test] + fn needed_connections_below_ceiling_unchanged() { + let needed = needed_backfill_connections(2, 2, 10); + let capped = needed.min(backfill_pool_ceiling(DatabaseBackend::Postgres)); + assert_eq!(needed, 18); + assert_eq!(capped, 18); + } + + #[test] + fn needed_connections_minimum_is_overhead() { + let needed = needed_backfill_connections(0, 0, 0); + assert_eq!(needed, 4); + } + + // ----------------------------------------------------------------------- + // parse_dt + // ----------------------------------------------------------------------- + #[test] fn parse_dt_rfc3339() { let dt = parse_dt("2025-03-16T12:34:56Z"); -- 2.51.2 From 92e0a21a5874952890cb410dbef5fbc70ff5d18e Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 15:36:15 -0500 Subject: [PATCH 156/250] fix: prevent backfill jobs from locking locking out pause/cancellation Signed-off-by: Trezy Signed-off-by: Trezy --- .../20260522000000_add_records_collection_indexed_at_index.sql | 2 ++ src/admin/backfill.rs | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 migrations/postgres/20260522000000_add_records_collection_indexed_at_index.sql diff --git a/migrations/postgres/20260522000000_add_records_collection_indexed_at_index.sql b/migrations/postgres/20260522000000_add_records_collection_indexed_at_index.sql new file mode 100644 index 0000000..6ac0175 --- /dev/null +++ b/migrations/postgres/20260522000000_add_records_collection_indexed_at_index.sql @@ -0,0 +1,2 @@ +CREATE INDEX IF NOT EXISTS idx_records_collection_indexed_at +ON records (collection, indexed_at DESC); diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 4e1165d..0418ea4 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -681,7 +681,6 @@ async fn run_pipelined_resolve_and_fetch( let poll_job_id = Arc::clone(&job_id_arc); let poll_cancelled = Arc::clone(&cancelled); let pair = tokio::select! { - biased; result = rx.recv() => result, _ = async move { loop { -- 2.51.2 From a83a4fad11b4a06bebc90a9780d630298ca72163 Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 15:37:32 -0500 Subject: [PATCH 157/250] fix: reset backfill ui when flushing details Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/backfill/page.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index 347feba..8ab0cb2 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -423,6 +423,8 @@ export default function BackfillPage() { Cancel { await flushAllBackfillDetails(); + setSelectedJobId(null); + load(); }}>Clear -- 2.51.2 From 7f5cd379e0f95761148b7afc66b05cbd5c58b59b Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 15:39:24 -0500 Subject: [PATCH 158/250] docs: update docs to cover backfill updates Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/api-reference/admin/admin-api.md | 16 +- .../docs/api-reference/admin/backfill.md | 150 +++++++++++++++++- .../docs/api-reference/admin/meta.json | 1 + .../docs/api-reference/admin/records.md | 117 ++++++++++++++ .../docs/api-reference/admin/settings.md | 49 +++++- .../docs/getting-started/configuration.md | 15 +- packages/docs/content/docs/guides/backfill.md | 34 +++- .../content/docs/reference/architecture.md | 57 ++++--- 8 files changed, 409 insertions(+), 30 deletions(-) create mode 100644 packages/docs/content/docs/api-reference/admin/records.md diff --git a/packages/docs/content/docs/api-reference/admin/admin-api.md b/packages/docs/content/docs/api-reference/admin/admin-api.md index 706bf14..409c601 100644 --- a/packages/docs/content/docs/api-reference/admin/admin-api.md +++ b/packages/docs/content/docs/api-reference/admin/admin-api.md @@ -50,7 +50,8 @@ AUTH="Authorization: Bearer $TOKEN" | [API Keys](api-keys.md) | Create, list, and revoke API keys | | [Users](users.md) | Create, list, update, and delete admin users | | [Labelers](labelers.md) | Manage external labeler subscriptions | -| [Instance Settings](settings.md) | Configure app name, logo, and policy URLs | +| [Records](records.md) | List and delete indexed records | +| [Instance Settings](settings.md) | Configure app name, logo, policy URLs, and concurrency settings | | [Domains](domains.md) | Manage domains and their OAuth client identities | | [Script Variables](script-variables.md) | Encrypted key/value pairs for Lua scripts | | [API Clients](api-clients.md) | Register and manage third-party XRPC clients | @@ -72,6 +73,14 @@ Each admin API endpoint requires a specific permission. See the [Permissions gui | `GET /admin/stats` | `stats:read` | | `POST /admin/backfill` | `backfill:create` | | `GET /admin/backfill/status` | `backfill:read` | +| `POST /admin/backfill/{id}/cancel` | `backfill:create` | +| `POST /admin/backfill/{id}/pause` | `backfill:create` | +| `POST /admin/backfill/{id}/resume` | `backfill:create` | +| `GET /admin/backfill/{id}/events` | `backfill:read` | +| `GET /admin/backfill/{id}/repos` | `backfill:read` | +| `GET /admin/backfill/{id}/pds-summary` | `backfill:read` | +| `DELETE /admin/backfill/{id}/details` | `backfill:create` | +| `DELETE /admin/backfill/details` | `backfill:create` | | `GET /admin/events` | `events:read` | | `POST /admin/api-keys` | `api-keys:create` | | `GET /admin/api-keys` | `api-keys:read` | @@ -89,7 +98,12 @@ Each admin API endpoint requires a specific permission. See the [Permissions gui | `GET /admin/labelers` | `labelers:read` | | `PATCH /admin/labelers/{did}` | `labelers:create` | | `DELETE /admin/labelers/{did}` | `labelers:delete` | +| `GET /admin/records` | `records:read` | +| `GET /admin/records/collections` | `records:read` | +| `DELETE /admin/records` | `records:delete` | +| `DELETE /admin/records/collection` | `records:delete-collection`| | `GET /admin/settings` | `settings:manage` | +| `GET /admin/settings/db-info` | `settings:manage` | | `PUT /admin/settings/{key}` | `settings:manage` | | `DELETE /admin/settings/{key}` | `settings:manage` | | `PUT /admin/settings/logo` | `settings:manage` | diff --git a/packages/docs/content/docs/api-reference/admin/backfill.md b/packages/docs/content/docs/api-reference/admin/backfill.md index b4a5a2e..2749488 100644 --- a/packages/docs/content/docs/api-reference/admin/backfill.md +++ b/packages/docs/content/docs/api-reference/admin/backfill.md @@ -151,6 +151,52 @@ curl -X POST "http://127.0.0.1:3000/admin/backfill/$JOB_ID/cancel" -H "$AUTH" Returns `400` if the job is not currently running, or `404` if the job ID is not found. +## Pause a backfill job + +``` +POST /admin/backfill/{id}/pause +``` + +Requests a running backfill job to pause. The job status transitions to `pausing` immediately; the background worker will stop at its next checkpoint and set the status to `paused`. Paused jobs retain all progress and can be resumed later. + +```sh tab="cURL" tab-group="language" +curl -X POST "http://127.0.0.1:3000/admin/backfill/$JOB_ID/pause" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "id": "550e8400-e29b-41d4-a716-446655440000", + "status": "pausing" +} +``` + +Returns `400` if the job is not currently running, or `404` if the job ID is not found. + +## Resume a backfill job + +``` +POST /admin/backfill/{id}/resume +``` + +Resume a paused backfill job. The job status transitions back to `running` and processing continues from where it left off. + +```sh tab="cURL" tab-group="language" +curl -X POST "http://127.0.0.1:3000/admin/backfill/$JOB_ID/resume" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "id": "550e8400-e29b-41d4-a716-446655440000", + "status": "running" +} +``` + +Returns `400` if the job is not currently paused, or `404` if the job ID is not found. + ## List backfill jobs ``` @@ -165,6 +211,7 @@ interface BackfillJob { status: string; stage: string; total_repos: number | null; + resolved_repos: number | null; processed_repos: number | null; total_records: number | null; error: string | null; @@ -212,6 +259,7 @@ curl http://127.0.0.1:3000/admin/backfill/status -H "$AUTH" "status": "completed", "stage": "completed", "total_repos": 42, + "resolved_repos": 42, "processed_repos": 42, "total_records": 1000, "error": null, @@ -222,4 +270,104 @@ curl http://127.0.0.1:3000/admin/backfill/status -H "$AUTH" ] ``` -The `status` field tracks the overall job state (`running`, `cancelling`, `cancelled`, `completed`, `failed`). The `stage` field tracks the current processing phase (`pending`, `discovering_repos`, `resolving_pds`, `fetching_records`, `completed`, `failed`, `cancelled`). +The `status` field tracks the overall job state (`running`, `pausing`, `paused`, `cancelling`, `cancelled`, `completed`, `failed`). The `stage` field tracks the current processing phase (`pending`, `discovering_repos`, `resolving_and_fetching`, `completed`, `failed`, `cancelled`). The `resolved_repos` counter tracks PDS resolution progress during the pipelined phase, while `processed_repos` tracks record fetching progress. + +## List repos for a job + +``` +GET /admin/backfill/{id}/repos +``` + +Paginated list of per-DID tracking rows for a backfill job. Requires `BackfillRead`. + +| Param | Type | Required | Description | +| -------- | ------ | -------- | ---------------------------------------------------------------------------------- | +| `phase` | string | no | Filter: `discovered` (all), `resolved` (PDS known), `fetched` (completed) | +| `cursor` | string | no | Keyset cursor (DID) for pagination | +| `limit` | number | no | Max results per page (default 50, max 100) | + +```sh tab="cURL" tab-group="language" +curl "http://127.0.0.1:3000/admin/backfill/$JOB_ID/repos?phase=fetched&limit=10" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "repos": [ + { "did": "did:plc:abc", "pds_endpoint": "https://pds.example.com", "status": "completed", "records_fetched": 42 } + ], + "cursor": "did:plc:def" +} +``` + +`cursor` is `null` when there are no more results. + +## PDS summary for a job + +``` +GET /admin/backfill/{id}/pds-summary +``` + +Aggregated PDS breakdown for a backfill job. Requires `BackfillRead`. No pagination — returns all PDS endpoints in one response, sorted by repo count descending. + +```sh tab="cURL" tab-group="language" +curl "http://127.0.0.1:3000/admin/backfill/$JOB_ID/pds-summary" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "pds_endpoints": [ + { "pds_endpoint": "https://morel.us-east.host.bsky.network", "total_repos": 1200, "completed_repos": 800, "total_records": 5000 } + ] +} +``` + +## Stream backfill events (SSE) + +``` +GET /admin/backfill/{id}/events +``` + +Server-Sent Events stream of real-time backfill progress. Requires `BackfillRead`. The connection stays open until the job completes or the client disconnects. A keepalive comment is sent periodically to prevent timeouts. + +Events are sent with `event: event` and a JSON `data` payload. Each event has a `type` field: + +| Event type | Description | +| ------------------ | ------------------------------------------------- | +| `repo_discovered` | A new DID was found during the discovery phase | +| `repo_resolved` | A DID's PDS endpoint was resolved | +| `repo_fetched` | Record fetching completed for a DID | +| `job_counters` | Updated progress counters | +| `job_stage_changed`| The job moved to a new processing stage | +| `job_completed` | The job finished (completed, failed, or cancelled) | + +## Flush job details + +``` +DELETE /admin/backfill/{id}/details +``` + +Delete all per-repo tracking rows for a single backfill job. Requires `BackfillCreate`. + +```sh tab="cURL" tab-group="language" +curl -X DELETE "http://127.0.0.1:3000/admin/backfill/$JOB_ID/details" -H "$AUTH" +``` + +**Response**: `204 No Content` + +## Flush all job details + +``` +DELETE /admin/backfill/details +``` + +Delete per-repo tracking rows for all completed, cancelled, and failed backfill jobs. Requires `BackfillCreate`. + +```sh tab="cURL" tab-group="language" +curl -X DELETE "http://127.0.0.1:3000/admin/backfill/details" -H "$AUTH" +``` + +**Response**: `204 No Content` diff --git a/packages/docs/content/docs/api-reference/admin/meta.json b/packages/docs/content/docs/api-reference/admin/meta.json index 5582234..d5851f1 100644 --- a/packages/docs/content/docs/api-reference/admin/meta.json +++ b/packages/docs/content/docs/api-reference/admin/meta.json @@ -3,6 +3,7 @@ "pages": [ "admin-api", "lexicons", + "records", "stats", "backfill", "events", diff --git a/packages/docs/content/docs/api-reference/admin/records.md b/packages/docs/content/docs/api-reference/admin/records.md new file mode 100644 index 0000000..1a874aa --- /dev/null +++ b/packages/docs/content/docs/api-reference/admin/records.md @@ -0,0 +1,117 @@ +--- +title: "Records" +--- + +Browse and manage indexed records. All endpoints require the appropriate `records:*` permission. + +```sh tab="cURL" tab-group="language" +# All examples assume $TOKEN is an API key (hv_...) +AUTH="Authorization: Bearer $TOKEN" +``` + +## List records + +``` +GET /admin/records +``` + +Paginated list of records in a collection, ordered by `indexed_at` descending. + +| Param | Type | Required | Description | +| ------------ | ------ | -------- | ----------------------------------------- | +| `collection` | string | yes | Collection NSID to list records from | +| `limit` | number | no | Max results per page (default 20, max 100)| +| `cursor` | string | no | Pagination cursor from a previous response| + +```sh tab="cURL" tab-group="language" +curl "http://127.0.0.1:3000/admin/records?collection=xyz.statusphere.status&limit=10" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "records": [ + { + "uri": "at://did:plc:abc/xyz.statusphere.status/3k...", + "did": "did:plc:abc", + "collection": "xyz.statusphere.status", + "rkey": "3k...", + "cid": "bafyrei...", + "indexed_at": "2025-01-01T00:00:00Z", + "record": { "...": "..." }, + "labels": [] + } + ], + "cursor": "20" +} +``` + +`cursor` is omitted when there are no more results. + +## List collections + +``` +GET /admin/records/collections +``` + +Returns the list of collection NSIDs from registered record-type lexicons. This is a fast lookup (no record counting). + +```sh tab="cURL" tab-group="language" +curl http://127.0.0.1:3000/admin/records/collections -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "collections": [ + "xyz.statusphere.status", + "app.bsky.feed.post" + ] +} +``` + +## Delete a record + +``` +DELETE /admin/records +``` + +Delete a single record by AT URI. + +| Param | Type | Required | Description | +| ----- | ------ | -------- | ------------------------------------ | +| `uri` | string | yes | AT URI of the record to delete | + +```sh tab="cURL" tab-group="language" +curl -X DELETE "http://127.0.0.1:3000/admin/records?uri=at://did:plc:abc/xyz.statusphere.status/3k..." -H "$AUTH" +``` + +**Response**: `204 No Content` + +Returns `404` if the record is not found. + +## Delete all records in a collection + +``` +DELETE /admin/records/collection +``` + +Delete all indexed records for a given collection. Requires both `records:delete` and `records:delete-collection` permissions. + +| Param | Type | Required | Description | +| ------------ | ------ | -------- | ------------------------------------ | +| `collection` | string | yes | Collection NSID to delete from | + +```sh tab="cURL" tab-group="language" +curl -X DELETE "http://127.0.0.1:3000/admin/records/collection?collection=xyz.statusphere.status" -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "deleted": 42 +} +``` diff --git a/packages/docs/content/docs/api-reference/admin/settings.md b/packages/docs/content/docs/api-reference/admin/settings.md index 189e40d..d4ecb49 100644 --- a/packages/docs/content/docs/api-reference/admin/settings.md +++ b/packages/docs/content/docs/api-reference/admin/settings.md @@ -58,7 +58,22 @@ resp, err := http.DefaultClient.Do(req) curl http://127.0.0.1:3000/admin/settings -H "$AUTH" ``` -Returns all key/value pairs stored in the `instance_settings` table. +Returns all key/value pairs stored in the `instance_settings` table, plus any env-var fallback values for keys not stored in the database. Each entry includes a `source` field: `"database"` for stored values, `"env"` for env-var fallbacks. + +### Known settings + +| Key | Env var | Default | Description | +|-----|---------|---------|-------------| +| `app_name` | `APP_NAME` | --- | Application name shown in sidebar and OAuth consent screen | +| `client_uri` | `CLIENT_URI` | --- | Public URL for this instance, linked from OAuth consent screen | +| `logo_uri` | `LOGO_URI` | --- | External URL to a logo image | +| `tos_uri` | `TOS_URI` | --- | Link to terms of service | +| `policy_uri` | `POLICY_URI` | --- | Link to privacy policy | +| `backfill_concurrent_pds` | `BACKFILL_CONCURRENT_PDS` | `10` | How many PDS servers to fetch from simultaneously during backfill | +| `backfill_concurrent_dids_per_pds` | `BACKFILL_CONCURRENT_DIDS_PER_PDS` | `3` | How many repos to fetch concurrently from each PDS | +| `backfill_concurrent_resolution` | `BACKFILL_CONCURRENT_RESOLUTION` | `100` | How many DID document lookups to run in parallel during PDS resolution | +| `backfill_retention_days` | `BACKFILL_RETENTION_DAYS` | `28` | Days to keep per-repo detail data from completed backfill jobs. `0` = keep indefinitely | +| `verbose_event_logging` | `VERBOSE_EVENT_LOGGING` | `false` | Log every record index, hook execution, and hook skip to the event log. High write volume — recommended only for debugging | ## Upsert a setting @@ -116,6 +131,38 @@ DELETE /admin/settings/{key} Removes the override; the corresponding environment variable (if any) takes effect again. +## Database info + +``` +GET /admin/settings/db-info +``` + +Returns database backend, connection pool sizes, and whether a server restart is recommended to resize the backfill pool for current concurrency settings. + +```sh tab="cURL" tab-group="language" +curl http://127.0.0.1:3000/admin/settings/db-info -H "$AUTH" +``` + +**Response**: `200 OK` + +```json +{ + "backend": "sqlite", + "server_max_connections": null, + "main_pool_size": 32, + "backfill_pool_size": 64, + "restart_recommended": false +} +``` + +| Field | Type | Description | +|-------|------|-------------| +| `backend` | string | `"sqlite"` or `"postgres"` | +| `server_max_connections` | number \| null | Postgres `max_connections` setting. `null` for SQLite | +| `main_pool_size` | number | Current main connection pool size | +| `backfill_pool_size` | number | Current backfill connection pool size | +| `restart_recommended` | boolean | `true` if concurrency settings have changed and a restart would resize the pool | + ## Upload / delete logo ``` diff --git a/packages/docs/content/docs/getting-started/configuration.md b/packages/docs/content/docs/getting-started/configuration.md index 5b40060..207a888 100644 --- a/packages/docs/content/docs/getting-started/configuration.md +++ b/packages/docs/content/docs/getting-started/configuration.md @@ -26,7 +26,13 @@ HappyView is configured via environment variables. A `.env` file in the project | `ATTESTATION_PRIVATE_KEY` | no | auto-generated | Hex-encoded 32-byte secp256k1 private key for [attestation signing](../guides/attestation-signing.md). Auto-generated and persisted to database on first run | | `ATTESTATION_KEY_ID` | no | `did:web:{host}#attestation` | Key identifier included in attestation signatures. Derived from `PUBLIC_URL` by default | | `ATTESTATION_SIG_TYPE` | no | app-specific NSID | `$type` value used in attestation signature objects | -| `RUST_LOG` | no | `happyview=debug,tower_http=debug` | Log filter (uses `tracing_subscriber::EnvFilter`) | +| `BACKFILL_CONCURRENT_PDS` | no | `10` | How many PDS servers to fetch from simultaneously during backfill. Overridden by database setting if set via admin API | +| `BACKFILL_CONCURRENT_DIDS_PER_PDS` | no | `3` | How many repos to fetch concurrently from each PDS during backfill. Overridden by database setting if set via admin API | +| `BACKFILL_CONCURRENT_RESOLUTION` | no | `100` | How many DID document lookups to run in parallel during PDS resolution. Overridden by database setting if set via admin API | +| `BACKFILL_RETENTION_DAYS` | no | `28` | Days to keep per-repo detail data from completed backfill jobs. `0` to keep indefinitely. Overridden by database setting if set via admin API | +| `BACKFILL_DATABASE_MAX_CONNECTIONS` | no | auto-calculated | Override the backfill connection pool size. Auto-calculated from concurrency settings if not set | +| `VERBOSE_EVENT_LOGGING` | no | `false` | Log every record index, hook execution, and hook skip to the event log. High write volume — recommended only for debugging. Overridden by database setting if set via admin API | +| `RUST_LOG` | no | `happyview=debug,tower_http=debug,sqlx=warn` | Log filter (uses `tracing_subscriber::EnvFilter`) | | `APP_NAME` | no | --- | Application name shown on OAuth authorization screens. Overridden by database setting if set via admin API | | `LOGO_URI` | no | --- | URL to application logo for OAuth screens. Overridden by database setting or logo upload | | `TOS_URI` | no | --- | URL to terms of service. Overridden by database setting if set via admin API | @@ -59,7 +65,12 @@ SESSION_SECRET=change-me-in-production # TOKEN_ENCRYPTION_KEY=base64-encoded-32-byte-key # DEFAULT_RATE_LIMIT_CAPACITY=100 # DEFAULT_RATE_LIMIT_REFILL_RATE=2.0 -# RUST_LOG=happyview=debug,tower_http=debug +# BACKFILL_CONCURRENT_PDS=10 +# BACKFILL_CONCURRENT_DIDS_PER_PDS=3 +# BACKFILL_CONCURRENT_RESOLUTION=100 +# BACKFILL_RETENTION_DAYS=28 +# VERBOSE_EVENT_LOGGING=false +# RUST_LOG=happyview=debug,tower_http=debug,sqlx=warn # APP_NAME=My App # LOGO_URI=https://example.com/logo.png # TOS_URI=https://example.com/tos diff --git a/packages/docs/content/docs/guides/backfill.md b/packages/docs/content/docs/guides/backfill.md index 642343a..414ebc0 100644 --- a/packages/docs/content/docs/guides/backfill.md +++ b/packages/docs/content/docs/guides/backfill.md @@ -13,13 +13,12 @@ See the [admin API](../api-reference/admin/backfill.md) for endpoint details. ## How it works -A backfill job runs through three sequential phases: +A backfill job starts with a discovery phase and then pipelines resolution and fetching concurrently: 1. **Discovering repos** — HappyView calls the relay's `com.atproto.sync.listReposByCollection` to find repos that contain records for each target collection. Discovered DIDs are stored in a tracking table so progress can be resumed. -2. **Resolving PDS** — For each discovered DID, HappyView resolves the DID document (via PLC directory or `did:web`) to find the user's PDS endpoint. -3. **Fetching records** — HappyView calls `com.atproto.repo.listRecords` on each PDS for the target collection(s), upserting each record into the local database. PDS endpoints are processed concurrently (up to 10 PDS hosts, 3 DIDs per host). +2. **Resolving PDS + Fetching records** (pipelined) — Resolution and fetching run concurrently. As each DID is resolved (via PLC directory or `did:web`), it's immediately handed off for record fetching — there's no need to wait for all DIDs to resolve before fetching begins. HappyView calls `com.atproto.repo.listRecords` on each PDS for the target collection(s), upserting each record into the local database. PDS endpoints are processed concurrently (up to 10 PDS hosts, 3 DIDs per host). -Progress counters (`total_repos`, `processed_repos`, `total_records`) and the current `stage` are updated in real time. The dashboard's Backfill page shows live progress, and clicking a job opens a detail sheet with a stage-by-stage progress log. +Progress counters (`total_repos`, `resolved_repos`, `processed_repos`, `total_records`) and the current `stage` are updated in real time. The dashboard's Backfill page shows live progress, and clicking a job opens a detail sheet with a stage-by-stage progress log. ### Rate limiting @@ -37,7 +36,7 @@ A backfill job has both a `status` (overall state) and a `stage` (current phase) | `completed` | Worker finished processing all resolvable repos | | `failed` | An error occurred | -The `stage` field tracks which phase the job is in: `pending`, `discovering_repos`, `resolving_pds`, `fetching_records`, `completed`, `failed`, or `cancelled`. +The `stage` field tracks which phase the job is in: `pending`, `discovering_repos`, `resolving_and_fetching`, `completed`, `failed`, or `cancelled`. ## Cancelling a job @@ -65,6 +64,31 @@ Re-running a backfill for a collection that's already been backfilled is safe. E Deleting records from HappyView (via the dashboard or API) only removes them from the local database — the records still exist on the atproto network. To restore deleted records, create a backfill job for the affected collection. The backfill will re-discover the repos and re-fetch all records from each PDS, restoring any that were previously deleted. +## Diagnostics + +The dashboard's backfill detail panel includes expandable sections for each processing phase. Clicking a phase row reveals per-repo and per-PDS detail data in real time. + +### Per-repo tracking + +Every DID discovered during a backfill job is tracked in the database with its PDS endpoint, processing status, and record count. This data powers three expandable sections: + +- **Discovering repos** — lists all DIDs discovered for the job, with profile avatars and handles resolved from the Bluesky API. +- **Resolving PDS** — summarises PDS endpoints involved in the job, showing how many repos each PDS is responsible for and how many have been processed. +- **Fetching records** — lists completed repos with their record counts and PDS hostnames. + +All three sections update in real time via SSE (Server-Sent Events) while the job is running. + +### Data retention + +Per-repo detail data is retained after job completion to support post-mortem analysis. A background task runs daily and deletes detail rows for jobs completed more than 28 days ago (configurable via the `backfill_retention_days` setting in **Settings > General**, or the `BACKFILL_RETENTION_DAYS` environment variable). Set to `0` to keep data indefinitely. + +You can also manually clear detail data: + +- **Per-job**: "Clear details" button in the job detail panel footer. +- **All completed jobs**: "Clear all details" button on the Backfill page header. + +Both actions require the `backfill:create` permission. + ## Next steps - [Lexicons](lexicons.md#backfill-flag): Control whether lexicons trigger backfill on upload diff --git a/packages/docs/content/docs/reference/architecture.md b/packages/docs/content/docs/reference/architecture.md index ab58e21..0563cef 100644 --- a/packages/docs/content/docs/reference/architecture.md +++ b/packages/docs/content/docs/reference/architecture.md @@ -154,16 +154,31 @@ sequenceDiagram A->>H: POST /admin/backfill H->>D: Create backfill_jobs record (status = running) + + rect rgb(240, 248, 255) + note over H,Relay: Phase 1: Discovery H->>Relay: listReposByCollection (paginated) Relay-->>H: List of DIDs - loop For each DID - H->>PLC: Resolve DID document - PLC-->>H: PDS endpoint - H->>PDS: listRecords (paginated) - PDS-->>H: Records - H->>D: UPSERT each record - H->>D: Update processed_repos / total_records + H->>D: Insert backfill_repos rows end + + rect rgb(240, 255, 240) + note over H,PDS: Phase 2: Pipelined resolve + fetch (concurrent) + par Resolver task + loop Unresolved DIDs + H->>PLC: Resolve DID document + PLC-->>H: PDS endpoint + H->>D: Update backfill_repos.pds_endpoint + end + and Fetcher task + loop Resolved DIDs (as they arrive) + H->>PDS: listRecords (paginated) + PDS-->>H: Records + H->>D: UPSERT each record + end + end + end + H->>D: Mark job completed (or failed) ``` @@ -274,19 +289,21 @@ sequenceDiagram ### `backfill_jobs` -| Column | Type | Description | -| ----------------- | ----------- | ----------------------------------- | -| `id` | uuid (PK) | | -| `collection` | text | Target collection (null = all) | -| `did` | text | Target DID (null = all) | -| `status` | text | pending, running, completed, failed | -| `total_repos` | integer | | -| `processed_repos` | integer | | -| `total_records` | integer | | -| `error` | text | Error message if failed | -| `started_at` | timestamptz | | -| `completed_at` | timestamptz | | -| `created_at` | timestamptz | | +| Column | Type | Description | +| ----------------- | ----------- | -------------------------------------------------------- | +| `id` | uuid (PK) | | +| `collection` | text | Target collection (null = all) | +| `did` | text | Target DID (null = all) | +| `status` | text | pending, running, pausing, paused, cancelling, cancelled, completed, failed | +| `stage` | text | pending, discovering_repos, resolving_and_fetching, completed, failed, cancelled | +| `total_repos` | integer | Total DIDs discovered | +| `resolved_repos` | integer | DIDs with PDS endpoint resolved | +| `processed_repos` | integer | DIDs with records fetched | +| `total_records` | integer | Total records indexed | +| `error` | text | Error message if failed | +| `started_at` | timestamptz | | +| `completed_at` | timestamptz | | +| `created_at` | timestamptz | | ## Testing -- 2.51.2 From fe191ceeb58c4f3db3f3bffc43326236b2f9187a Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 18:05:55 -0500 Subject: [PATCH 159/250] fix: allow log verbosity toggle to override env var Signed-off-by: Trezy Signed-off-by: Trezy --- web/src/app/dashboard/settings/general/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/dashboard/settings/general/page.tsx b/web/src/app/dashboard/settings/general/page.tsx index 47ebe58..1319841 100644 --- a/web/src/app/dashboard/settings/general/page.tsx +++ b/web/src/app/dashboard/settings/general/page.tsx @@ -481,7 +481,7 @@ export default function GeneralSettingsPage() { onCheckedChange={(checked) => setValues((v) => ({ ...v, - verbose_event_logging: checked ? "true" : "", + verbose_event_logging: checked ? "true" : "false", })) } disabled={!canManage} -- 2.51.2 From 13e2e638edbee1c2206cdf21fe5ac32d3d2a7cc4 Mon Sep 17 00:00:00 2001 From: Trezy Date: Sat, 23 May 2026 20:51:50 -0500 Subject: [PATCH 160/250] fix: prevent opening "discovering trepos stage" from locking the ui thread Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 20 +++- web/src/app/dashboard/backfill/page.tsx | 129 ++++++++++++++---------- web/src/workers/backfill-sse.worker.ts | 8 +- 3 files changed, 93 insertions(+), 64 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 0418ea4..24d48ee 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -325,7 +325,7 @@ async fn run_discovery_phase( ); } else { stream::iter(collections.iter()) - .for_each_concurrent(collections.len(), |collection| async move { + .for_each_concurrent(5, |collection| async move { if should_stop_worker(state, job_id).await { return; } @@ -432,6 +432,16 @@ async fn discover_repos_from_relay( } update_job_counter(state, job_id, "total_repos", running_total).await; + publish_event( + state, + super::types::BackfillEvent::JobCounters { + job_id: job_id.to_string(), + total_repos: Some(running_total), + resolved_repos: None, + processed_repos: None, + total_records: None, + }, + ); if should_stop_worker(state, job_id).await { return Ok(()); @@ -1283,6 +1293,7 @@ async fn fetch_records_from_pds( let base = pds_endpoint.trim_end_matches('/'); let mut cursor: Option = None; let mut count: u32 = 0; + let index_hook = state.lexicons.get_index_hook(collection).await; loop { if cancelled.load(Ordering::Relaxed) { @@ -1326,12 +1337,11 @@ async fn fetch_records_from_pds( let rkey = entry.uri.rsplit('/').next().unwrap_or_default().to_string(); let uri = format!("at://{did}/{collection}/{rkey}"); - let rec_to_store = if let Some(script) = state.lexicons.get_index_hook(collection).await - { + let rec_to_store = if let Some(ref script) = index_hook { let hook_result = crate::lua::execute_hook_script(&crate::lua::HookEvent { state, lexicon_id: collection, - script: &script, + script, action: "create", uri: &uri, did, @@ -1781,7 +1791,7 @@ pub(super) async fn backfill_status( Option, String, )> = sqlx::query_as(&sql) - .fetch_all(&state.db) + .fetch_all(&state.backfill_db) .await .map_err(|e| AppError::Internal(format!("failed to list backfill jobs: {e}")))?; diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index 8ab0cb2..640c532 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -161,7 +161,7 @@ function useBackfillSSE( }); const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ""; - worker.postMessage({ type: "connect", jobId, basePath }); + worker.postMessage({ type: "connect", jobId, baseUrl: `${location.origin}${basePath}` }); return () => { worker.postMessage({ type: "disconnect" }); @@ -390,12 +390,14 @@ export default function BackfillPage() { load(); }, [load]); + const selectedJob = jobs.find((j) => j.id === selectedJobId) ?? null; + const sseActive = selectedJob != null && (selectedJob.status === "running" || selectedJob.status === "cancelling" || selectedJob.status === "pausing"); + useEffect(() => { + if (sseActive) return; const interval = setInterval(load, 5000); return () => clearInterval(interval); - }, [load]); - - const selectedJob = jobs.find((j) => j.id === selectedJobId) ?? null; + }, [load, sseActive]); const canFlush = hasPermission("backfill:create"); return ( @@ -496,7 +498,10 @@ export default function BackfillPage() { { - if (!open) setSelectedJobId(null); + if (!open) { + setSelectedJobId(null); + load(); + } }} > @@ -505,6 +510,13 @@ export default function BackfillPage() { job={selectedJob} canCancel={hasPermission("backfill:create")} canFlush={canFlush} + onJobUpdate={(updater) => { + setJobs((prev) => + prev.map((j) => + j.id === selectedJob.id ? updater(j) : j, + ), + ); + }} onCancel={async () => { await cancelBackfillJob(selectedJob.id); load(); @@ -530,6 +542,7 @@ function JobDetail({ job, canCancel, canFlush, + onJobUpdate, onCancel, onPause, onResume, @@ -537,6 +550,7 @@ function JobDetail({ job: BackfillJob; canCancel: boolean; canFlush: boolean; + onJobUpdate: (updater: (job: BackfillJob) => BackfillJob) => void; onCancel: () => Promise; onPause: () => Promise; onResume: () => Promise; @@ -561,10 +575,11 @@ function JobDetail({ const [fetchedCursor, setFetchedCursor] = useState(null); const [fetchedLoaded, setFetchedLoaded] = useState(false); - // Refs for open state so the SSE callback doesn't need to re-bind on toggle - const discoveredOpenRef = useRef(false); + // Refs for open state and callbacks so the SSE callback doesn't need to re-bind on toggle const pdsOpenRef = useRef(false); const fetchedOpenRef = useRef(false); + const onJobUpdateRef = useRef(onJobUpdate); + onJobUpdateRef.current = onJobUpdate; function hasReached(phase: (typeof PROGRESS_PHASES)[number]): boolean { if (allDone) return true; @@ -626,7 +641,6 @@ function JobDetail({ const [discoveredOpen, setDiscoveredOpen] = useState(false); const [pdsOpen, setPdsOpen] = useState(false); const [fetchedOpen, setFetchedOpen] = useState(false); - discoveredOpenRef.current = discoveredOpen; pdsOpenRef.current = pdsOpen; fetchedOpenRef.current = fetchedOpen; @@ -677,52 +691,33 @@ function JobDetail({ // Uses refs for open state so the callback identity is stable and doesn't // cause the worker to reconnect when sections are toggled. const handleSSEBatch = useCallback((events: BackfillEvent[]) => { - const dOpen = discoveredOpenRef.current; const pOpen = pdsOpenRef.current; const fOpen = fetchedOpenRef.current; - if (dOpen) { - const discovered = events.filter((e) => e.type === "repo_discovered" && e.did); - const resolved = events.filter((e) => e.type === "repo_resolved" && e.did); - if (discovered.length > 0 || resolved.length > 0) { - setDiscoveredRepos((prev) => { - let next = prev; - for (const e of discovered) { - if (!next.some((r) => r.did === e.did)) { - next = [{ did: e.did!, pds_endpoint: null, status: "pending", records_fetched: 0 }, ...next]; - } - } - for (const e of resolved) { - next = next.map((r) => r.did === e.did ? { ...r, pds_endpoint: e.pds_endpoint! } : r); - } - return next; - }); - } - } - if (pOpen) { const pdsEvents = events.filter( (e) => (e.type === "repo_resolved" || e.type === "repo_fetched") && e.pds_endpoint, ); if (pdsEvents.length > 0) { setPdsSummary((prev) => { - let next = [...prev]; + const byEndpoint = new Map(prev.map((p, i) => [p.pds_endpoint, i])); + const next = [...prev]; for (const e of pdsEvents) { - const idx = next.findIndex((p) => p.pds_endpoint === e.pds_endpoint); + const idx = byEndpoint.get(e.pds_endpoint!); if (e.type === "repo_resolved") { - if (idx >= 0) { + if (idx != null) { next[idx] = { ...next[idx], total_repos: next[idx].total_repos + 1 }; } else { + const newIdx = next.length; next.push({ pds_endpoint: e.pds_endpoint!, total_repos: 1, completed_repos: 0, total_records: 0 }); + byEndpoint.set(e.pds_endpoint!, newIdx); } - } else if (e.type === "repo_fetched") { - if (idx >= 0) { - next[idx] = { - ...next[idx], - completed_repos: next[idx].completed_repos + 1, - total_records: next[idx].total_records + (e.records_fetched ?? 0), - }; - } + } else if (e.type === "repo_fetched" && idx != null) { + next[idx] = { + ...next[idx], + completed_repos: next[idx].completed_repos + 1, + total_records: next[idx].total_records + (e.records_fetched ?? 0), + }; } } return next; @@ -734,16 +729,44 @@ function JobDetail({ const fetched = events.filter((e) => e.type === "repo_fetched" && e.did); if (fetched.length > 0) { setFetchedRepos((prev) => { - let next = prev; - for (const e of fetched) { - if (!next.some((r) => r.did === e.did)) { - next = [{ did: e.did!, pds_endpoint: e.pds_endpoint ?? null, status: "completed", records_fetched: e.records_fetched ?? 0 }, ...next]; - } - } - return next; + const existing = new Set(prev.map((r) => r.did)); + const newItems = fetched + .filter((e) => !existing.has(e.did!)) + .map((e) => ({ did: e.did!, pds_endpoint: e.pds_endpoint ?? null, status: "completed" as const, records_fetched: e.records_fetched ?? 0 })); + + if (newItems.length === 0) return prev; + return [...newItems, ...prev]; }); } } + + // Update job counters, stage, and status from SSE + const update = onJobUpdateRef.current; + + // Increment total_repos from repo_discovered events + const discoveredCount = events.filter((e) => e.type === "repo_discovered").length; + const resolvedCount = events.filter((e) => e.type === "repo_resolved").length; + const fetchedEvents = events.filter((e) => e.type === "repo_fetched"); + const fetchedCount = fetchedEvents.length; + const fetchedRecords = fetchedEvents.reduce((sum, e) => sum + (e.records_fetched ?? 0), 0); + + if (discoveredCount > 0 || resolvedCount > 0 || fetchedCount > 0) { + update((j) => ({ + ...j, + total_repos: (j.total_repos ?? 0) + discoveredCount, + resolved_repos: (j.resolved_repos ?? 0) + resolvedCount, + processed_repos: (j.processed_repos ?? 0) + fetchedCount, + total_records: (j.total_records ?? 0) + fetchedRecords, + })); + } + + for (const e of events) { + if (e.type === "job_stage_changed" && e.stage) { + update((j) => ({ ...j, stage: e.stage! })); + } else if (e.type === "job_completed" && e.status) { + update((j) => ({ ...j, status: e.status!, error: e.error ?? null })); + } + } }, []); useBackfillSSE(job.id, isActive, handleSSEBatch); @@ -837,7 +860,6 @@ function JobDetail({ {discoveredRepos.length > 0 ? ( 0 ? ( - {job.status === "pausing" ? "Pausing…" : "Pause Job"} + {pausing || job.status === "pausing" ? "Pausing…" : "Pause Job"} )} {canCancel && job.status === "paused" && ( @@ -1015,7 +1036,6 @@ function JobDetail({ function VirtualRepoList({ repos, - profiles, onVisibleDidsChange, hasMore, onLoadMore, @@ -1023,7 +1043,6 @@ function VirtualRepoList({ renderRow, }: { repos: BackfillRepoEntry[]; - profiles: Map; onVisibleDidsChange: (dids: string[]) => void; hasMore: boolean; onLoadMore: () => void; @@ -1042,10 +1061,10 @@ function VirtualRepoList({ const virtualItems = virtualizer.getVirtualItems(); + const visibleDidsKey = virtualItems.map((item) => repos[item.index]?.did).filter(Boolean).join(","); useEffect(() => { - const dids = virtualItems.map((item) => repos[item.index]?.did).filter(Boolean) as string[]; - onVisibleDidsChange(dids); - }, [virtualItems, repos, onVisibleDidsChange]); + onVisibleDidsChange(visibleDidsKey.split(",").filter(Boolean)); + }, [visibleDidsKey, onVisibleDidsChange]); useEffect(() => { if (!hasMore) return; diff --git a/web/src/workers/backfill-sse.worker.ts b/web/src/workers/backfill-sse.worker.ts index cfdcc82..36d4040 100644 --- a/web/src/workers/backfill-sse.worker.ts +++ b/web/src/workers/backfill-sse.worker.ts @@ -8,7 +8,7 @@ interface BackfillEvent { interface ConnectMessage { type: "connect"; jobId: string; - basePath: string; + baseUrl: string; } interface DisconnectMessage { @@ -30,10 +30,10 @@ function flush() { self.postMessage({ type: "batch", events: batch }); } -function connect(jobId: string, basePath: string) { +function connect(jobId: string, baseUrl: string) { disconnect(); - eventSource = new EventSource(`${basePath}/admin/backfill/${jobId}/events`, { + eventSource = new EventSource(`${baseUrl}/admin/backfill/${jobId}/events`, { withCredentials: true, }); @@ -68,7 +68,7 @@ function disconnect() { self.addEventListener("message", (e: MessageEvent) => { const msg = e.data; if (msg.type === "connect") { - connect(msg.jobId, msg.basePath); + connect(msg.jobId, msg.baseUrl); } else if (msg.type === "disconnect") { disconnect(); } -- 2.51.2 From 8a094893395c1894c00484b1ca692ff053f85f32 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 11:33:33 -0500 Subject: [PATCH 161/250] fix(sdk): support the `kid` param from `@atproto/jwk-webcrypto` Signed-off-by: Trezy Signed-off-by: Trezy --- packages/oauth-client/src/__tests__/session.test.ts | 2 +- packages/oauth-client/src/import-jwk.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/oauth-client/src/__tests__/session.test.ts b/packages/oauth-client/src/__tests__/session.test.ts index ef73e26..9177a28 100644 --- a/packages/oauth-client/src/__tests__/session.test.ts +++ b/packages/oauth-client/src/__tests__/session.test.ts @@ -8,7 +8,7 @@ async function generateTestKey(): Promise { true, ["sign", "verify"], ); - return WebcryptoKey.fromKeypair(keyPair); + return WebcryptoKey.fromKeypair(keyPair, crypto.randomUUID()); } function createSession(overrides?: { diff --git a/packages/oauth-client/src/import-jwk.ts b/packages/oauth-client/src/import-jwk.ts index 764b349..be7edb7 100644 --- a/packages/oauth-client/src/import-jwk.ts +++ b/packages/oauth-client/src/import-jwk.ts @@ -23,5 +23,6 @@ export async function importJwk(jwk: JsonWebKey): Promise { ["verify"], ); - return WebcryptoKey.fromKeypair({ privateKey, publicKey }); + const kid = (jwk as JsonWebKey & { kid?: string }).kid ?? crypto.randomUUID(); + return WebcryptoKey.fromKeypair({ privateKey, publicKey }, kid); } -- 2.51.2 From 9a3b93d4d5f50033df63a23ae96ad5ef2b688591 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 11:36:42 -0500 Subject: [PATCH 162/250] fix: reduce backfill db contention and sse event flooding for pds discovery and record fetching during backfill Signed-off-by: Trezy Signed-off-by: Trezy --- src/admin/backfill.rs | 38 +++-- src/admin/dead_letters.rs | 1 + src/lua/db_api.rs | 195 ++++++++++++++++++++++++ src/lua/execute.rs | 43 +++++- src/lua/mod.rs | 3 +- src/main.rs | 2 +- src/record_handler.rs | 2 + web/src/app/dashboard/backfill/page.tsx | 167 +++++++------------- 8 files changed, 327 insertions(+), 124 deletions(-) diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 24d48ee..5d6cb36 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -338,6 +338,16 @@ async fn run_discovery_phase( let total = count_repos(state, job_id).await; update_job_counter(state, job_id, "total_repos", total).await; + publish_event( + state, + super::types::BackfillEvent::JobCounters { + job_id: job_id.to_string(), + total_repos: Some(total), + resolved_repos: None, + processed_repos: None, + total_records: None, + }, + ); } async fn discover_repos_from_relay( @@ -419,15 +429,6 @@ async fn discover_repos_from_relay( if let Ok(result) = query.execute(&state.backfill_db).await { running_total += result.rows_affected() as i32; } - for repo in chunk { - publish_event( - state, - super::types::BackfillEvent::RepoDiscovered { - job_id: job_id.to_string(), - did: repo.did.clone(), - }, - ); - } } } @@ -1275,9 +1276,20 @@ async fn batch_upsert_records(state: &AppState, batch: &[PreparedRecord]) { let _ = ref_query.execute(&state.backfill_db).await; } - // Queue label backfill for each record - for rec in batch { - crate::labeler::backfill_labels_for_uri(Arc::new(state.clone()), rec.uri.clone()); + // Queue label backfill only if there are active labeler subscriptions. + // Check once per batch instead of spawning a task per record. + let has_subscriptions: bool = sqlx::query_as::<_, (i64,)>( + "SELECT COUNT(*) FROM labeler_subscriptions WHERE status = 'active'", + ) + .fetch_one(&state.db) + .await + .map(|(c,)| c > 0) + .unwrap_or(false); + + if has_subscriptions { + for rec in batch { + crate::labeler::backfill_labels_for_uri(Arc::new(state.clone()), rec.uri.clone()); + } } } @@ -1294,6 +1306,7 @@ async fn fetch_records_from_pds( let mut cursor: Option = None; let mut count: u32 = 0; let index_hook = state.lexicons.get_index_hook(collection).await; + let env_vars = crate::lua::load_env_vars_cached(&state.db, state.db_backend).await; loop { if cancelled.load(Ordering::Relaxed) { @@ -1348,6 +1361,7 @@ async fn fetch_records_from_pds( collection, rkey: &rkey, record: Some(&entry.value), + cached_env_vars: Some(&env_vars), }) .await; diff --git a/src/admin/dead_letters.rs b/src/admin/dead_letters.rs index 7a79d0f..1ddf68d 100644 --- a/src/admin/dead_letters.rs +++ b/src/admin/dead_letters.rs @@ -527,6 +527,7 @@ async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { collection: &dl.collection, rkey: &dl.rkey, record: record.as_ref(), + cached_env_vars: None, }; match run_hook_once(&event).await { diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index 5e7f062..3afea15 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -42,6 +42,7 @@ fn is_valid_json_field_path(path: &str) -> bool { true } +#[derive(Debug)] enum FilterNode { Condition { field: String, @@ -945,6 +946,200 @@ mod tests { assert!(super::decode_cursor(&encoded).is_none()); } + // ----------------------------------------------------------------------- + // parse_filter_node / build_filter_sql + // ----------------------------------------------------------------------- + + fn make_condition_table(lua: &Lua, field: &str, op: &str, value: &str) -> mlua::Table { + let t = lua.create_table().unwrap(); + t.set("field", field).unwrap(); + t.set("op", op).unwrap(); + t.set("value", value).unwrap(); + t + } + + #[test] + fn filter_simple_condition() { + let lua = Lua::new(); + let t = make_condition_table(&lua, "name", "=", "alice"); + let node = parse_filter_node(&t, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!(sql, "json_extract(record, '$.value.name') = ?"); + assert_eq!(binds, vec!["alice"]); + } + + #[test] + fn filter_defaults_op_to_equals() { + let lua = Lua::new(); + let t = lua.create_table().unwrap(); + t.set("field", "status").unwrap(); + t.set("value", "active").unwrap(); + let node = parse_filter_node(&t, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!(sql, "json_extract(record, '$.value.status') = ?"); + } + + #[test] + fn filter_rejects_invalid_op() { + let lua = Lua::new(); + let t = make_condition_table(&lua, "name", "DROP", "x"); + let err = parse_filter_node(&t, 0).unwrap_err(); + assert!(err.to_string().contains("invalid filter op")); + } + + #[test] + fn filter_rejects_invalid_field() { + let lua = Lua::new(); + let t = make_condition_table(&lua, "name; DROP TABLE", "=", "x"); + let err = parse_filter_node(&t, 0).unwrap_err(); + assert!(err.to_string().contains("invalid filter field")); + } + + #[test] + fn filter_and_group() { + let lua = Lua::new(); + let group = lua.create_table().unwrap(); + group.set("combine", "AND").unwrap(); + let c1 = make_condition_table(&lua, "status", "=", "active"); + let c2 = make_condition_table(&lua, "age", ">", "18"); + group.set(1, c1).unwrap(); + group.set(2, c2).unwrap(); + let node = parse_filter_node(&group, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!( + sql, + "(json_extract(record, '$.value.status') = ? AND json_extract(record, '$.value.age') > ?)" + ); + assert_eq!(binds, vec!["active", "18"]); + } + + #[test] + fn filter_or_group() { + let lua = Lua::new(); + let group = lua.create_table().unwrap(); + group.set("combine", "OR").unwrap(); + let c1 = make_condition_table(&lua, "role", "=", "admin"); + let c2 = make_condition_table(&lua, "role", "=", "mod"); + group.set(1, c1).unwrap(); + group.set(2, c2).unwrap(); + let node = parse_filter_node(&group, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!( + sql, + "(json_extract(record, '$.value.role') = ? OR json_extract(record, '$.value.role') = ?)" + ); + assert_eq!(binds, vec!["admin", "mod"]); + } + + #[test] + fn filter_single_child_group_unwraps() { + let lua = Lua::new(); + let group = lua.create_table().unwrap(); + group.set("combine", "AND").unwrap(); + let c1 = make_condition_table(&lua, "x", "=", "1"); + group.set(1, c1).unwrap(); + let node = parse_filter_node(&group, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!(sql, "json_extract(record, '$.value.x') = ?"); + } + + #[test] + fn filter_rejects_invalid_combine() { + let lua = Lua::new(); + let group = lua.create_table().unwrap(); + group.set("combine", "XOR").unwrap(); + let c1 = make_condition_table(&lua, "x", "=", "1"); + group.set(1, c1).unwrap(); + let err = parse_filter_node(&group, 0).unwrap_err(); + assert!(err.to_string().contains("invalid filter combine")); + } + + #[test] + fn filter_rejects_empty_group() { + let lua = Lua::new(); + let group = lua.create_table().unwrap(); + group.set("combine", "AND").unwrap(); + let err = parse_filter_node(&group, 0).unwrap_err(); + assert!(err.to_string().contains("filter group has no conditions")); + } + + #[test] + fn filter_rejects_excessive_depth() { + let lua = Lua::new(); + let c = make_condition_table(&lua, "x", "=", "1"); + let err = parse_filter_node(&c, MAX_FILTER_DEPTH).unwrap_err(); + assert!(err.to_string().contains("filter nesting too deep")); + } + + #[test] + fn filter_accepts_all_ops() { + let lua = Lua::new(); + for op in ALLOWED_OPS { + let t = make_condition_table(&lua, "field", op, "val"); + assert!( + parse_filter_node(&t, 0).is_ok(), + "op '{op}' should be accepted" + ); + } + } + + #[test] + fn filter_op_case_insensitive() { + let lua = Lua::new(); + let t = make_condition_table(&lua, "name", "like", "alice%"); + let node = parse_filter_node(&t, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!(sql, "json_extract(record, '$.value.name') LIKE ?"); + } + + #[test] + fn filter_integer_value() { + let lua = Lua::new(); + let t = lua.create_table().unwrap(); + t.set("field", "count").unwrap(); + t.set("op", ">").unwrap(); + t.set("value", 42).unwrap(); + let node = parse_filter_node(&t, 0).unwrap(); + let mut binds = Vec::new(); + build_filter_sql(&node, &mut binds); + assert_eq!(binds, vec!["42"]); + } + + #[test] + fn filter_boolean_value() { + let lua = Lua::new(); + let t = lua.create_table().unwrap(); + t.set("field", "active").unwrap(); + t.set("value", true).unwrap(); + let node = parse_filter_node(&t, 0).unwrap(); + let mut binds = Vec::new(); + build_filter_sql(&node, &mut binds); + assert_eq!(binds, vec!["true"]); + } + + #[test] + fn filter_nested_field_path() { + let lua = Lua::new(); + let t = make_condition_table(&lua, "author.websites[0].url", "=", "https://example.com"); + let node = parse_filter_node(&t, 0).unwrap(); + let mut binds = Vec::new(); + let sql = build_filter_sql(&node, &mut binds); + assert_eq!( + sql, + "json_extract(record, '$.value.author.websites[0].url') = ?" + ); + } + + // ----------------------------------------------------------------------- + // query sort direction + // ----------------------------------------------------------------------- + #[tokio::test] async fn query_accepts_valid_sort_direction() { let state = test_state(); diff --git a/src/lua/execute.rs b/src/lua/execute.rs index 0e0037d..a4f7977 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -33,6 +33,38 @@ async fn load_env_vars(db: &sqlx::AnyPool, backend: DatabaseBackend) -> HashMap< .collect() } +/// Load env vars, reusing a cached result if less than 30 seconds old. +/// Avoids per-record DB queries during backfill. +pub(crate) async fn load_env_vars_cached( + db: &sqlx::AnyPool, + backend: DatabaseBackend, +) -> HashMap { + use std::sync::Mutex; + + static CACHE: std::sync::OnceLock)>> = + std::sync::OnceLock::new(); + + let cache = CACHE.get_or_init(|| { + Mutex::new(( + Instant::now() - std::time::Duration::from_secs(60), + HashMap::new(), + )) + }); + { + let guard = cache.lock().unwrap(); + if guard.0.elapsed() < std::time::Duration::from_secs(30) { + return guard.1.clone(); + } + } + + let vars = load_env_vars(db, backend).await; + { + let mut guard = cache.lock().unwrap(); + *guard = (Instant::now(), vars.clone()); + } + vars +} + /// Execute a Lua script for a procedure endpoint. #[allow(clippy::too_many_arguments)] pub async fn execute_procedure_script( @@ -889,6 +921,7 @@ pub struct HookEvent<'a> { pub collection: &'a str, pub rkey: &'a str, pub record: Option<&'a Value>, + pub cached_env_vars: Option<&'a HashMap>, } /// Execute a Lua hook script triggered by a record index event. @@ -1040,7 +1073,14 @@ pub async fn run_hook_once(event: &HookEvent<'_>) -> Result, Strin ) .map_err(|e| format!("failed to set hook context: {e}"))?; - context::set_env_context(&lua, &load_env_vars(&event.state.db, backend).await) + let owned_env_vars; + let env_vars = if let Some(cached) = event.cached_env_vars { + cached + } else { + owned_env_vars = load_env_vars(&event.state.db, backend).await; + &owned_env_vars + }; + context::set_env_context(&lua, env_vars) .map_err(|e| format!("failed to set env context: {e}"))?; lua.load(event.script) @@ -1205,6 +1245,7 @@ mod tests { collection: "test.collection", rkey: "rkey1", record, + cached_env_vars: None, } } diff --git a/src/lua/mod.rs b/src/lua/mod.rs index 58733eb..a535d21 100644 --- a/src/lua/mod.rs +++ b/src/lua/mod.rs @@ -11,6 +11,7 @@ mod xrpc_api; #[allow(unused_imports)] pub(crate) use context::SpaceContext; pub(crate) use execute::{ - HookEvent, execute_hook_script, execute_procedure_script, execute_query_script, run_hook_once, + HookEvent, execute_hook_script, execute_procedure_script, execute_query_script, + load_env_vars_cached, run_hook_once, }; pub(crate) use sandbox::validate_script; diff --git a/src/main.rs b/src/main.rs index f6a78b2..aae42b4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -616,7 +616,7 @@ async fn main() { std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new(config))) }; - let (backfill_events_tx, _) = tokio::sync::broadcast::channel(1024); + let (backfill_events_tx, _) = tokio::sync::broadcast::channel(16384); let verbose_event_logging = { let enabled = diff --git a/src/record_handler.rs b/src/record_handler.rs index 9631941..bc3704e 100644 --- a/src/record_handler.rs +++ b/src/record_handler.rs @@ -71,6 +71,7 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { collection: &record.collection, rkey: &record.rkey, record: Some(rec), + cached_env_vars: None, }) .await; @@ -198,6 +199,7 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { collection: &record.collection, rkey: &record.rkey, record: None, + cached_env_vars: None, }) .await; diff --git a/web/src/app/dashboard/backfill/page.tsx b/web/src/app/dashboard/backfill/page.tsx index 640c532..27e007b 100644 --- a/web/src/app/dashboard/backfill/page.tsx +++ b/web/src/app/dashboard/backfill/page.tsx @@ -576,8 +576,6 @@ function JobDetail({ const [fetchedLoaded, setFetchedLoaded] = useState(false); // Refs for open state and callbacks so the SSE callback doesn't need to re-bind on toggle - const pdsOpenRef = useRef(false); - const fetchedOpenRef = useRef(false); const onJobUpdateRef = useRef(onJobUpdate); onJobUpdateRef.current = onJobUpdate; @@ -641,8 +639,6 @@ function JobDetail({ const [discoveredOpen, setDiscoveredOpen] = useState(false); const [pdsOpen, setPdsOpen] = useState(false); const [fetchedOpen, setFetchedOpen] = useState(false); - pdsOpenRef.current = pdsOpen; - fetchedOpenRef.current = fetchedOpen; // Lazy-load detail data only when sections are expanded useEffect(() => { @@ -691,77 +687,18 @@ function JobDetail({ // Uses refs for open state so the callback identity is stable and doesn't // cause the worker to reconnect when sections are toggled. const handleSSEBatch = useCallback((events: BackfillEvent[]) => { - const pOpen = pdsOpenRef.current; - const fOpen = fetchedOpenRef.current; - - if (pOpen) { - const pdsEvents = events.filter( - (e) => (e.type === "repo_resolved" || e.type === "repo_fetched") && e.pds_endpoint, - ); - if (pdsEvents.length > 0) { - setPdsSummary((prev) => { - const byEndpoint = new Map(prev.map((p, i) => [p.pds_endpoint, i])); - const next = [...prev]; - for (const e of pdsEvents) { - const idx = byEndpoint.get(e.pds_endpoint!); - if (e.type === "repo_resolved") { - if (idx != null) { - next[idx] = { ...next[idx], total_repos: next[idx].total_repos + 1 }; - } else { - const newIdx = next.length; - next.push({ pds_endpoint: e.pds_endpoint!, total_repos: 1, completed_repos: 0, total_records: 0 }); - byEndpoint.set(e.pds_endpoint!, newIdx); - } - } else if (e.type === "repo_fetched" && idx != null) { - next[idx] = { - ...next[idx], - completed_repos: next[idx].completed_repos + 1, - total_records: next[idx].total_records + (e.records_fetched ?? 0), - }; - } - } - return next; - }); - } - } - - if (fOpen) { - const fetched = events.filter((e) => e.type === "repo_fetched" && e.did); - if (fetched.length > 0) { - setFetchedRepos((prev) => { - const existing = new Set(prev.map((r) => r.did)); - const newItems = fetched - .filter((e) => !existing.has(e.did!)) - .map((e) => ({ did: e.did!, pds_endpoint: e.pds_endpoint ?? null, status: "completed" as const, records_fetched: e.records_fetched ?? 0 })); - - if (newItems.length === 0) return prev; - return [...newItems, ...prev]; - }); - } - } - - // Update job counters, stage, and status from SSE const update = onJobUpdateRef.current; - // Increment total_repos from repo_discovered events - const discoveredCount = events.filter((e) => e.type === "repo_discovered").length; - const resolvedCount = events.filter((e) => e.type === "repo_resolved").length; - const fetchedEvents = events.filter((e) => e.type === "repo_fetched"); - const fetchedCount = fetchedEvents.length; - const fetchedRecords = fetchedEvents.reduce((sum, e) => sum + (e.records_fetched ?? 0), 0); - - if (discoveredCount > 0 || resolvedCount > 0 || fetchedCount > 0) { - update((j) => ({ - ...j, - total_repos: (j.total_repos ?? 0) + discoveredCount, - resolved_repos: (j.resolved_repos ?? 0) + resolvedCount, - processed_repos: (j.processed_repos ?? 0) + fetchedCount, - total_records: (j.total_records ?? 0) + fetchedRecords, - })); - } - for (const e of events) { - if (e.type === "job_stage_changed" && e.stage) { + if (e.type === "job_counters") { + update((j) => ({ + ...j, + ...(e.total_repos != null && { total_repos: e.total_repos }), + ...(e.resolved_repos != null && { resolved_repos: e.resolved_repos }), + ...(e.processed_repos != null && { processed_repos: e.processed_repos }), + ...(e.total_records != null && { total_records: e.total_records }), + })); + } else if (e.type === "job_stage_changed" && e.stage) { update((j) => ({ ...j, stage: e.stage! })); } else if (e.type === "job_completed" && e.status) { update((j) => ({ ...j, status: e.status!, error: e.error ?? null })); @@ -784,6 +721,11 @@ function JobDetail({ const profiles = useBlueskyProfiles(allVisibleDids); + const sortedPdsSummary = useMemo( + () => [...pdsSummary].sort((a, b) => b.total_repos - a.total_repos), + [pdsSummary], + ); + const fetchedWithRecords = useMemo( () => fetchedRepos.filter((r) => r.records_fetched > 0), [fetchedRepos], @@ -858,9 +800,10 @@ function JobDetail({ onOpenChange={setDiscoveredOpen} > {discoveredRepos.length > 0 ? ( - r.did} + onVisibleKeysChange={setVisibleDiscoveredDids} hasMore={!!discoveredCursor} onLoadMore={loadMoreDiscovered} rowHeight={28} @@ -894,20 +837,23 @@ function JobDetail({ open={pdsOpen} onOpenChange={setPdsOpen} > - {pdsSummary.length > 0 ? ( -
- {pdsSummary - .sort((a, b) => b.total_repos - a.total_repos) - .map((pds) => ( -
- - {new URL(pds.pds_endpoint).hostname} - - / repos · records - -
- ))} -
+ {sortedPdsSummary.length > 0 ? ( + p.pds_endpoint} + hasMore={false} + onLoadMore={() => {}} + rowHeight={32} + renderRow={(pds) => ( +
+ + {new URL(pds.pds_endpoint).hostname} + + / repos · records + +
+ )} + /> ) : pdsLoaded ? (

No PDS data yet.

) : null} @@ -938,9 +884,10 @@ function JobDetail({ onOpenChange={setFetchedOpen} > {fetchedWithRecords.length > 0 ? ( - r.did} + onVisibleKeysChange={setVisibleFetchedDids} hasMore={!!fetchedCursor} onLoadMore={loadMoreFetched} rowHeight={40} @@ -1034,26 +981,28 @@ function JobDetail({ ); } -function VirtualRepoList({ - repos, - onVisibleDidsChange, +function VirtualList({ + items, + getKey, hasMore, onLoadMore, rowHeight, renderRow, + onVisibleKeysChange, }: { - repos: BackfillRepoEntry[]; - onVisibleDidsChange: (dids: string[]) => void; + items: T[]; + getKey: (item: T) => string; hasMore: boolean; onLoadMore: () => void; rowHeight: number; - renderRow: (repo: BackfillRepoEntry) => React.ReactNode; + renderRow: (item: T) => React.ReactNode; + onVisibleKeysChange?: (keys: string[]) => void; }) { const parentRef = useRef(null); const loadMoreTriggered = useRef(false); const virtualizer = useVirtualizer({ - count: repos.length, + count: items.length, getScrollElement: () => parentRef.current, estimateSize: () => rowHeight, overscan: 5, @@ -1061,22 +1010,22 @@ function VirtualRepoList({ const virtualItems = virtualizer.getVirtualItems(); - const visibleDidsKey = virtualItems.map((item) => repos[item.index]?.did).filter(Boolean).join(","); + const visibleKeysStr = virtualItems.map((item) => getKey(items[item.index])).filter(Boolean).join(","); useEffect(() => { - onVisibleDidsChange(visibleDidsKey.split(",").filter(Boolean)); - }, [visibleDidsKey, onVisibleDidsChange]); + onVisibleKeysChange?.(visibleKeysStr.split(",").filter(Boolean)); + }, [visibleKeysStr, onVisibleKeysChange]); useEffect(() => { if (!hasMore) return; const lastItem = virtualItems[virtualItems.length - 1]; - if (lastItem && lastItem.index >= repos.length - 5 && !loadMoreTriggered.current) { + if (lastItem && lastItem.index >= items.length - 5 && !loadMoreTriggered.current) { loadMoreTriggered.current = true; onLoadMore(); } - if (lastItem && lastItem.index < repos.length - 5) { + if (lastItem && lastItem.index < items.length - 5) { loadMoreTriggered.current = false; } - }, [virtualItems, repos.length, hasMore, onLoadMore]); + }, [virtualItems, items.length, hasMore, onLoadMore]); return (
@@ -1084,11 +1033,11 @@ function VirtualRepoList({ style={{ height: virtualizer.getTotalSize(), width: "100%", position: "relative" }} > {virtualItems.map((virtualRow) => { - const repo = repos[virtualRow.index]; - if (!repo) return null; + const item = items[virtualRow.index]; + if (!item) return null; return (
- {renderRow(repo)} + {renderRow(item)}
); })} -- 2.51.2 From 28f7fa6430c1e29705c64d3c4f69c1f9b9a37eb9 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 13:22:40 -0500 Subject: [PATCH 163/250] fix: use dpop thumbprints to enable multi-device auth Signed-off-by: Trezy Signed-off-by: Trezy --- ...20260526000000_dpop_session_per_device.sql | 2 + .../20260526000001_drop_access_token_hash.sql | 2 + ...20260526000000_dpop_session_per_device.sql | 2 + .../20260526000001_drop_access_token_hash.sql | 2 + src/auth/middleware.rs | 41 +- src/delegation/unlink_account.rs | 6 +- src/lua/execute.rs | 5 + src/oauth/dpop_proof.rs | 72 +++ src/oauth/keys.rs | 23 + src/oauth/pds_write.rs | 20 +- src/oauth/routes.rs | 472 ++++++++++++------ src/oauth/sessions.rs | 244 +++++++-- src/repo/pds.rs | 3 + src/repo/upload_blob.rs | 4 + src/xrpc/procedure.rs | 78 +-- tests/dpop_auth.rs | 446 ++++++++++++++++- 16 files changed, 1179 insertions(+), 243 deletions(-) create mode 100644 migrations/postgres/20260526000000_dpop_session_per_device.sql create mode 100644 migrations/postgres/20260526000001_drop_access_token_hash.sql create mode 100644 migrations/sqlite/20260526000000_dpop_session_per_device.sql create mode 100644 migrations/sqlite/20260526000001_drop_access_token_hash.sql diff --git a/migrations/postgres/20260526000000_dpop_session_per_device.sql b/migrations/postgres/20260526000000_dpop_session_per_device.sql new file mode 100644 index 0000000..c865644 --- /dev/null +++ b/migrations/postgres/20260526000000_dpop_session_per_device.sql @@ -0,0 +1,2 @@ +DROP INDEX idx_dpop_sessions_client_user; +CREATE UNIQUE INDEX idx_dpop_sessions_client_user_key ON dpop_sessions(api_client_id, user_did, dpop_key_id); diff --git a/migrations/postgres/20260526000001_drop_access_token_hash.sql b/migrations/postgres/20260526000001_drop_access_token_hash.sql new file mode 100644 index 0000000..1dc42ac --- /dev/null +++ b/migrations/postgres/20260526000001_drop_access_token_hash.sql @@ -0,0 +1,2 @@ +DROP INDEX IF EXISTS idx_dpop_sessions_token_hash; +ALTER TABLE dpop_sessions DROP COLUMN access_token_hash; diff --git a/migrations/sqlite/20260526000000_dpop_session_per_device.sql b/migrations/sqlite/20260526000000_dpop_session_per_device.sql new file mode 100644 index 0000000..c865644 --- /dev/null +++ b/migrations/sqlite/20260526000000_dpop_session_per_device.sql @@ -0,0 +1,2 @@ +DROP INDEX idx_dpop_sessions_client_user; +CREATE UNIQUE INDEX idx_dpop_sessions_client_user_key ON dpop_sessions(api_client_id, user_did, dpop_key_id); diff --git a/migrations/sqlite/20260526000001_drop_access_token_hash.sql b/migrations/sqlite/20260526000001_drop_access_token_hash.sql new file mode 100644 index 0000000..1dc42ac --- /dev/null +++ b/migrations/sqlite/20260526000001_drop_access_token_hash.sql @@ -0,0 +1,2 @@ +DROP INDEX IF EXISTS idx_dpop_sessions_token_hash; +ALTER TABLE dpop_sessions DROP COLUMN access_token_hash; diff --git a/src/auth/middleware.rs b/src/auth/middleware.rs index f4cc387..4715311 100644 --- a/src/auth/middleware.rs +++ b/src/auth/middleware.rs @@ -17,6 +17,8 @@ pub struct Claims { did: String, /// The API client key (e.g. "hvc_...") if the user authenticated via an API client. client_key: Option, + /// The DPoP key ID identifying the specific device session. + dpop_key_id: Option, } /// Separator used to encode `did` and `client_key` in a single cookie value. @@ -34,11 +36,17 @@ impl Claims { self.client_key.as_deref() } + /// The DPoP key ID, if the user authenticated via a DPoP session. + pub fn dpop_key_id(&self) -> Option<&str> { + self.dpop_key_id.as_deref() + } + /// Create claims for an internal call (e.g. Lua xrpc lib) with no client key. pub fn internal(did: String) -> Self { Self { did, client_key: None, + dpop_key_id: None, } } @@ -68,7 +76,11 @@ impl FromRequestParts for Claims { } else { (value, None) }; - return Ok(Claims { did, client_key }); + return Ok(Claims { + did, + client_key, + dpop_key_id: None, + }); } // Path 2: Authorization header @@ -90,6 +102,7 @@ impl FromRequestParts for Claims { return Ok(Claims { did, client_key: None, + dpop_key_id: None, }); } @@ -98,6 +111,7 @@ impl FromRequestParts for Claims { return Ok(Claims { did: service_auth.did, client_key: None, + dpop_key_id: None, }); } @@ -163,13 +177,23 @@ pub async fn resolve_dpop_claims( crate::oauth::client_auth::resolve_client_by_key(&state.db, state.db_backend, client_key) .await?; - // Look up the session by token - let session = crate::oauth::sessions::get_dpop_session_by_token_hash( + // Extract JWK thumbprint from the DPoP proof and resolve the key ID + let thumbprint = crate::oauth::dpop_proof::extract_proof_thumbprint(dpop_proof)?; + let dpop_key_id = crate::oauth::keys::get_dpop_key_id_by_thumbprint( + &state.db, + state.db_backend, + &client.id, + &thumbprint, + ) + .await?; + + // Look up the session by key ID (stable across token rotations) + let session = crate::oauth::sessions::get_dpop_session_by_key_id( &state.db, state.db_backend, encryption_key, &client.id, - access_token, + &dpop_key_id, ) .await?; @@ -181,14 +205,6 @@ pub async fn resolve_dpop_claims( return Err(AppError::Auth("token_expired".into())); } - // Get the DPoP key thumbprint for proof validation - let thumbprint = crate::oauth::keys::get_dpop_key_thumbprint( - &state.db, - state.db_backend, - &session.dpop_key_id, - ) - .await?; - // Build the request URL for htu validation let scheme = if state.config.public_url.starts_with("https") { "https" @@ -215,6 +231,7 @@ pub async fn resolve_dpop_claims( Ok(Claims { did: session.user_did, client_key: Some(client_key.to_string()), + dpop_key_id: Some(dpop_key_id), }) } diff --git a/src/delegation/unlink_account.rs b/src/delegation/unlink_account.rs index 1a1e6e6..1feb4c8 100644 --- a/src/delegation/unlink_account.rs +++ b/src/delegation/unlink_account.rs @@ -54,9 +54,9 @@ pub async fn unlink_account( // Delete delegated account (CASCADE deletes all delegates) db::delete_delegated_account(&state.db, state.db_backend, account_did).await?; - // Delete the DPoP session for the target account using the stored api_client_id + // Delete all DPoP sessions for the target account using the stored api_client_id if let Some(api_client_id) = stored_api_client_id - && let Err(e) = crate::oauth::sessions::delete_dpop_session( + && let Err(e) = crate::oauth::sessions::delete_all_dpop_sessions( &state.db, state.db_backend, &api_client_id, @@ -64,7 +64,7 @@ pub async fn unlink_account( ) .await { - tracing::warn!(account_did, %e, "failed to clean up DPoP session on unlink"); + tracing::warn!(account_did, %e, "failed to clean up DPoP sessions on unlink"); } log_event( diff --git a/src/lua/execute.rs b/src/lua/execute.rs index a4f7977..5f54131 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -125,8 +125,13 @@ pub async fn execute_procedure_script( return Err(e); } }; + let dpop_key_id = claims + .dpop_key_id() + .ok_or_else(|| AppError::Internal("DPoP key ID not available in claims".into()))? + .to_string(); repo::PdsAuth::Dpop { api_client_id, + dpop_key_id, encryption_key: *encryption_key, } } else { diff --git a/src/oauth/dpop_proof.rs b/src/oauth/dpop_proof.rs index 6ff4422..376680d 100644 --- a/src/oauth/dpop_proof.rs +++ b/src/oauth/dpop_proof.rs @@ -23,6 +23,23 @@ struct DpopPayload { jti: String, } +/// Extract the JWK thumbprint from a DPoP proof JWT header without full validation. +pub fn extract_proof_thumbprint(proof_jwt: &str) -> Result { + let header_b64 = proof_jwt + .split('.') + .next() + .ok_or_else(|| AppError::Auth("invalid DPoP proof format".into()))?; + + let header_bytes = URL_SAFE_NO_PAD + .decode(header_b64) + .map_err(|_| AppError::Auth("invalid DPoP proof header encoding".into()))?; + + let header: DpopHeader = serde_json::from_slice(&header_bytes) + .map_err(|_| AppError::Auth("invalid DPoP proof header".into()))?; + + super::keys::compute_jwk_thumbprint(&header.jwk) +} + /// Validate a DPoP proof JWT. /// /// Checks: @@ -216,4 +233,59 @@ mod tests { assert!(result.is_err()); assert!(result.unwrap_err().to_string().contains("dpop+jwt")); } + + #[test] + fn extract_proof_thumbprint_from_real_proof() { + let keypair = crate::oauth::keys::generate_dpop_keypair().unwrap(); + + let proof = crate::oauth::pds_write::generate_dpop_proof( + &keypair.private_jwk, + "POST", + "https://pds.example.com/xrpc/test", + "token", + None, + ) + .unwrap(); + + let thumbprint = extract_proof_thumbprint(&proof).unwrap(); + assert_eq!(thumbprint, keypair.thumbprint); + } + + #[test] + fn extract_proof_thumbprint_rejects_garbage() { + assert!(extract_proof_thumbprint("not-a-jwt").is_err()); + } + + #[test] + fn extract_proof_thumbprint_rejects_bad_base64() { + assert!(extract_proof_thumbprint("!!!.payload.sig").is_err()); + } + + #[test] + fn extract_proof_thumbprint_different_keys_differ() { + let kp1 = crate::oauth::keys::generate_dpop_keypair().unwrap(); + let kp2 = crate::oauth::keys::generate_dpop_keypair().unwrap(); + + let proof1 = crate::oauth::pds_write::generate_dpop_proof( + &kp1.private_jwk, + "GET", + "https://example.com", + "t", + None, + ) + .unwrap(); + + let proof2 = crate::oauth::pds_write::generate_dpop_proof( + &kp2.private_jwk, + "GET", + "https://example.com", + "t", + None, + ) + .unwrap(); + + let t1 = extract_proof_thumbprint(&proof1).unwrap(); + let t2 = extract_proof_thumbprint(&proof2).unwrap(); + assert_ne!(t1, t2); + } } diff --git a/src/oauth/keys.rs b/src/oauth/keys.rs index 7990efd..96559e0 100644 --- a/src/oauth/keys.rs +++ b/src/oauth/keys.rs @@ -186,6 +186,29 @@ pub async fn get_dpop_key_thumbprint( .ok_or_else(|| AppError::NotFound("DPoP key not found".into())) } +/// Look up a DPoP key ID by api_client_id and JWK thumbprint. +pub async fn get_dpop_key_id_by_thumbprint( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + api_client_id: &str, + thumbprint: &str, +) -> Result { + let sql = adapt_sql( + "SELECT id FROM dpop_keys WHERE api_client_id = ? AND jwk_thumbprint = ?", + backend, + ); + + let row: Option<(String,)> = sqlx::query_as(&sql) + .bind(api_client_id) + .bind(thumbprint) + .fetch_optional(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to look up DPoP key: {e}")))?; + + row.map(|(id,)| id) + .ok_or_else(|| AppError::Auth("no DPoP key matching proof thumbprint".into())) +} + /// Delete a DPoP key and its associated session. pub async fn delete_dpop_key( pool: &sqlx::AnyPool, diff --git a/src/oauth/pds_write.rs b/src/oauth/pds_write.rs index 3da90b4..c31fb36 100644 --- a/src/oauth/pds_write.rs +++ b/src/oauth/pds_write.rs @@ -20,6 +20,7 @@ struct DpopCredentials { } /// Resolve DPoP credentials: session, PDS URL, and decrypted private key. +#[allow(clippy::too_many_arguments)] async fn resolve_credentials( http: &reqwest::Client, pool: &sqlx::AnyPool, @@ -28,10 +29,17 @@ async fn resolve_credentials( plc_url: &str, api_client_id: &str, user_did: &str, + dpop_key_id: &str, ) -> Result { - let session = - super::sessions::get_dpop_session(pool, backend, encryption_key, api_client_id, user_did) - .await?; + let session = super::sessions::get_dpop_session( + pool, + backend, + encryption_key, + api_client_id, + user_did, + dpop_key_id, + ) + .await?; let pds_url = match session.pds_url { Some(ref url) => url.clone(), @@ -172,6 +180,7 @@ async fn retry_after_refresh( encryption_key, &creds.session.api_client_id, &creds.session.user_did, + &creds.session.dpop_key_id, ) .await?; @@ -195,6 +204,7 @@ async fn retry_after_refresh( backend, &creds.session.api_client_id, &creds.session.user_did, + &creds.session.dpop_key_id, ) .await { @@ -258,6 +268,7 @@ pub async fn dpop_pds_post( plc_url: &str, api_client_id: &str, user_did: &str, + dpop_key_id: &str, xrpc_method: &str, body: &serde_json::Value, ) -> Result { @@ -269,6 +280,7 @@ pub async fn dpop_pds_post( plc_url, api_client_id, user_did, + dpop_key_id, ) .await?; @@ -310,6 +322,7 @@ pub async fn dpop_pds_post_blob( plc_url: &str, api_client_id: &str, user_did: &str, + dpop_key_id: &str, content_type: &str, blob: bytes::Bytes, ) -> Result { @@ -321,6 +334,7 @@ pub async fn dpop_pds_post_blob( plc_url, api_client_id, user_did, + dpop_key_id, ) .await?; diff --git a/src/oauth/routes.rs b/src/oauth/routes.rs index 4f85a4e..5ec26ca 100644 --- a/src/oauth/routes.rs +++ b/src/oauth/routes.rs @@ -18,6 +18,11 @@ pub fn routes() -> Router { .route("/dpop-keys", post(provision_dpop_key)) .route("/sessions", post(register_session)) .route("/sessions/{did}", get(get_session).delete(delete_session)) + .route("/sessions/{did}/devices", get(list_device_sessions)) + .route( + "/sessions/{did}/devices/{session_id}", + axum::routing::delete(delete_device_session), + ) } // --- Request / response types --- @@ -59,6 +64,15 @@ struct GetSessionResponse { scopes: Vec, } +#[derive(Serialize)] +struct DeviceSessionInfo { + id: String, + dpop_key_id: String, + scopes: Vec, + created_at: String, + updated_at: String, +} + // --- Handlers --- /// POST /oauth/dpop-keys — provision a new DPoP keypair. @@ -233,29 +247,6 @@ async fn register_session( // Validate scopes client_auth::validate_scopes(&body.scopes, &client.scopes, &state.lexicons).await?; - // Clean up any existing session's DPoP key before upserting - // (the ON CONFLICT upsert would orphan the old key otherwise) - { - let lookup_sql = crate::db::adapt_sql( - "SELECT dpop_key_id FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", - state.db_backend, - ); - if let Ok(Some((old_key_id,))) = sqlx::query_as::<_, (String,)>(&lookup_sql) - .bind(&client.id) - .bind(&body.did) - .fetch_optional(&state.db) - .await - && old_key_id != dpop_key_id - { - let del_sql = - crate::db::adapt_sql("DELETE FROM dpop_keys WHERE id = ?", state.db_backend); - let _ = sqlx::query(&del_sql) - .bind(&old_key_id) - .execute(&state.db) - .await; - } - } - // Store the session let session_id = Uuid::new_v4().to_string(); sessions::store_dpop_session( @@ -330,78 +321,90 @@ async fn get_session( .as_ref() .ok_or_else(|| AppError::Internal("TOKEN_ENCRYPTION_KEY not configured".into()))?; - let client = if let Some(ref secret) = client_secret { - client_auth::authenticate_confidential(&state.db, state.db_backend, &client_key, secret) - .await? + let session = if let Some(ref secret) = client_secret { + let c = client_auth::authenticate_confidential( + &state.db, + state.db_backend, + &client_key, + secret, + ) + .await?; + // Confidential clients: look up by (client, user) — no DPoP proof needed + sessions::get_dpop_session_for_user( + &state.db, + state.db_backend, + encryption_key, + &c.id, + &did, + ) + .await? } else { let resolved = client_auth::resolve_client_by_key(&state.db, state.db_backend, &client_key).await?; - if resolved.client_type == "public" { - let auth_header = req - .headers() - .get("authorization") - .and_then(|v| v.to_str().ok()) - .ok_or_else(|| { - AppError::Auth("public clients must provide Authorization: DPoP ".into()) - })?; - let access_token = auth_header.strip_prefix("DPoP ").ok_or_else(|| { - AppError::Auth("public clients must use DPoP authorization scheme".into()) - })?; - let dpop_proof = req - .headers() - .get("dpop") - .and_then(|v| v.to_str().ok()) - .ok_or_else(|| { - AppError::Auth("public clients must provide DPoP proof header".into()) - })?; - - let session = sessions::get_dpop_session_by_token_hash( - &state.db, - state.db_backend, - encryption_key, - &resolved.id, - access_token, - ) - .await?; + if resolved.client_type != "public" { + return Err(AppError::Auth( + "non-public clients must provide X-Client-Secret".into(), + )); + } - let thumbprint = - keys::get_dpop_key_thumbprint(&state.db, state.db_backend, &session.dpop_key_id) - .await?; + let auth_header = req + .headers() + .get("authorization") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| { + AppError::Auth("public clients must provide Authorization: DPoP ".into()) + })?; + let access_token = auth_header.strip_prefix("DPoP ").ok_or_else(|| { + AppError::Auth("public clients must use DPoP authorization scheme".into()) + })?; + let dpop_proof = req + .headers() + .get("dpop") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| { + AppError::Auth("public clients must provide DPoP proof header".into()) + })?; - let scheme = if state.config.public_url.starts_with("https") { - "https" - } else { - "http" - }; - let host = req - .headers() - .get("host") - .and_then(|v| v.to_str().ok()) - .unwrap_or("localhost"); - let request_url = format!("{}://{}/oauth/sessions/{}", scheme, host, did); - - crate::oauth::dpop_proof::validate_dpop_proof( - dpop_proof, - "GET", - &request_url, - access_token, - &thumbprint, - )?; - } + let thumbprint = crate::oauth::dpop_proof::extract_proof_thumbprint(dpop_proof)?; + let dpop_key_id = keys::get_dpop_key_id_by_thumbprint( + &state.db, + state.db_backend, + &resolved.id, + &thumbprint, + ) + .await?; - resolved + let scheme = if state.config.public_url.starts_with("https") { + "https" + } else { + "http" + }; + let host = req + .headers() + .get("host") + .and_then(|v| v.to_str().ok()) + .unwrap_or("localhost"); + let request_url = format!("{}://{}/oauth/sessions/{}", scheme, host, did); + + crate::oauth::dpop_proof::validate_dpop_proof( + dpop_proof, + "GET", + &request_url, + access_token, + &thumbprint, + )?; + + sessions::get_dpop_session_by_key_id( + &state.db, + state.db_backend, + encryption_key, + &resolved.id, + &dpop_key_id, + ) + .await? }; - let session = sessions::get_dpop_session( - &state.db, - state.db_backend, - encryption_key, - &client.id, - &did, - ) - .await?; - let scopes: Vec = session .scopes .split_whitespace() @@ -433,87 +436,203 @@ async fn delete_session( .and_then(|v| v.to_str().ok()) .map(|s| s.to_string()); - let client = if let Some(ref secret) = client_secret { - client_auth::authenticate_confidential(&state.db, state.db_backend, &client_key, secret) - .await? + if let Some(ref secret) = client_secret { + let client = client_auth::authenticate_confidential( + &state.db, + state.db_backend, + &client_key, + secret, + ) + .await?; + // Confidential clients: delete all sessions for this user+client + sessions::delete_all_dpop_sessions(&state.db, state.db_backend, &client.id, &did).await?; + + log_event( + &state.db, + EventLog { + event_type: "dpop_session.deleted".to_string(), + severity: Severity::Info, + actor_did: Some(did), + subject: Some(client.client_key), + detail: serde_json::json!({}), + }, + state.db_backend, + ) + .await; } else { let resolved = client_auth::resolve_client_by_key(&state.db, state.db_backend, &client_key).await?; - // Public clients must prove they hold the DPoP key + token - if resolved.client_type == "public" { - let auth_header = req + if resolved.client_type != "public" { + return Err(AppError::Auth( + "non-public clients must provide X-Client-Secret".into(), + )); + } + + let auth_header = req + .headers() + .get("authorization") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| { + AppError::Auth("public clients must provide Authorization: DPoP ".into()) + })?; + let access_token = auth_header.strip_prefix("DPoP ").ok_or_else(|| { + AppError::Auth("public clients must use DPoP authorization scheme".into()) + })?; + let dpop_proof = req + .headers() + .get("dpop") + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| { + AppError::Auth("public clients must provide DPoP proof header".into()) + })?; + + let thumbprint = crate::oauth::dpop_proof::extract_proof_thumbprint(dpop_proof)?; + let dpop_key_id = keys::get_dpop_key_id_by_thumbprint( + &state.db, + state.db_backend, + &resolved.id, + &thumbprint, + ) + .await?; + + let scheme = if state.config.public_url.starts_with("https") { + "https" + } else { + "http" + }; + let host = req + .headers() + .get("host") + .and_then(|v| v.to_str().ok()) + .unwrap_or("localhost"); + let request_url = format!("{}://{}/oauth/sessions/{}", scheme, host, did); + + crate::oauth::dpop_proof::validate_dpop_proof( + dpop_proof, + "DELETE", + &request_url, + access_token, + &thumbprint, + )?; + + sessions::delete_dpop_session( + &state.db, + state.db_backend, + &resolved.id, + &did, + &dpop_key_id, + ) + .await?; + + log_event( + &state.db, + EventLog { + event_type: "dpop_session.deleted".to_string(), + severity: Severity::Info, + actor_did: Some(did), + subject: Some(resolved.client_key), + detail: serde_json::json!({}), + }, + state.db_backend, + ) + .await; + } + + Ok(StatusCode::NO_CONTENT) +} + +/// Extracted headers for session endpoint authentication. +struct SessionAuthHeaders { + client_key: String, + client_secret: Option, + auth_header: Option, + dpop_proof: Option, + host: String, +} + +impl SessionAuthHeaders { + fn from_request(req: &axum::extract::Request) -> Self { + Self { + client_key: req + .headers() + .get("x-client-key") + .and_then(|v| v.to_str().ok()) + .unwrap_or("") + .to_string(), + client_secret: req + .headers() + .get("x-client-secret") + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()), + auth_header: req .headers() .get("authorization") .and_then(|v| v.to_str().ok()) - .ok_or_else(|| { - AppError::Auth("public clients must provide Authorization: DPoP ".into()) - })?; - let access_token = auth_header.strip_prefix("DPoP ").ok_or_else(|| { - AppError::Auth("public clients must use DPoP authorization scheme".into()) - })?; - let dpop_proof = req + .map(|s| s.to_string()), + dpop_proof: req .headers() .get("dpop") .and_then(|v| v.to_str().ok()) - .ok_or_else(|| { - AppError::Auth("public clients must provide DPoP proof header".into()) - })?; - - let encryption_key = - state.config.token_encryption_key.as_ref().ok_or_else(|| { - AppError::Internal("TOKEN_ENCRYPTION_KEY not configured".into()) - })?; - - // Look up the session to get the DPoP key thumbprint - let session = sessions::get_dpop_session_by_token_hash( - &state.db, - state.db_backend, - encryption_key, - &resolved.id, - access_token, - ) - .await?; - - let thumbprint = - keys::get_dpop_key_thumbprint(&state.db, state.db_backend, &session.dpop_key_id) - .await?; - - // Build request URL for htu validation - let scheme = if state.config.public_url.starts_with("https") { - "https" - } else { - "http" - }; - let host = req + .map(|s| s.to_string()), + host: req .headers() .get("host") .and_then(|v| v.to_str().ok()) - .unwrap_or("localhost"); - let request_url = format!("{}://{}/oauth/sessions/{}", scheme, host, did); - - crate::oauth::dpop_proof::validate_dpop_proof( - dpop_proof, - "DELETE", - &request_url, - access_token, - &thumbprint, - )?; + .unwrap_or("localhost") + .to_string(), } + } +} - resolved - }; +/// GET /oauth/sessions/:did/devices — list all device sessions for a user. +async fn list_device_sessions( + State(state): State, + Path(did): Path, + req: axum::extract::Request, +) -> Result>, AppError> { + let request_path = req.uri().path().to_string(); + let headers = SessionAuthHeaders::from_request(&req); + let client = resolve_session_client(&state, &headers, &request_path, "GET").await?; + + let sessions = + sessions::list_dpop_sessions(&state.db, state.db_backend, &client.id, &did).await?; + + let result: Vec = sessions + .into_iter() + .map(|s| DeviceSessionInfo { + id: s.id, + dpop_key_id: s.dpop_key_id, + scopes: s.scopes.split_whitespace().map(String::from).collect(), + created_at: s.created_at, + updated_at: s.updated_at, + }) + .collect(); - sessions::delete_dpop_session(&state.db, state.db_backend, &client.id, &did).await?; + Ok(Json(result)) +} + +/// DELETE /oauth/sessions/:did/devices/:session_id — revoke a specific device session. +async fn delete_device_session( + State(state): State, + Path((did, session_id)): Path<(String, String)>, + req: axum::extract::Request, +) -> Result { + let request_path = req.uri().path().to_string(); + let headers = SessionAuthHeaders::from_request(&req); + let client = resolve_session_client(&state, &headers, &request_path, "DELETE").await?; + + sessions::delete_dpop_session_by_id(&state.db, state.db_backend, &session_id, &client.id, &did) + .await?; log_event( &state.db, EventLog { - event_type: "dpop_session.deleted".to_string(), + event_type: "dpop_session.device_deleted".to_string(), severity: Severity::Info, actor_did: Some(did), subject: Some(client.client_key), - detail: serde_json::json!({}), + detail: serde_json::json!({ "session_id": session_id }), }, state.db_backend, ) @@ -521,3 +640,68 @@ async fn delete_session( Ok(StatusCode::NO_CONTENT) } + +/// Shared client authentication for session endpoints. +async fn resolve_session_client( + state: &AppState, + headers: &SessionAuthHeaders, + request_path: &str, + method: &str, +) -> Result { + if headers.client_key.is_empty() { + return Err(AppError::Auth("X-Client-Key header required".into())); + } + + if let Some(ref secret) = headers.client_secret { + return client_auth::authenticate_confidential( + &state.db, + state.db_backend, + &headers.client_key, + secret, + ) + .await; + } + + let resolved = + client_auth::resolve_client_by_key(&state.db, state.db_backend, &headers.client_key) + .await?; + + if resolved.client_type != "public" { + return Err(AppError::Auth( + "non-public clients must provide X-Client-Secret".into(), + )); + } + + let auth_header = headers.auth_header.as_deref().ok_or_else(|| { + AppError::Auth("public clients must provide Authorization: DPoP ".into()) + })?; + let access_token = auth_header.strip_prefix("DPoP ").ok_or_else(|| { + AppError::Auth("public clients must use DPoP authorization scheme".into()) + })?; + let dpop_proof = headers + .dpop_proof + .as_deref() + .ok_or_else(|| AppError::Auth("public clients must provide DPoP proof header".into()))?; + + let thumbprint = crate::oauth::dpop_proof::extract_proof_thumbprint(dpop_proof)?; + let _dpop_key_id = + keys::get_dpop_key_id_by_thumbprint(&state.db, state.db_backend, &resolved.id, &thumbprint) + .await?; + + let scheme = if state.config.public_url.starts_with("https") { + "https" + } else { + "http" + }; + let request_url = format!("{}://{}{}", scheme, headers.host, request_path); + + crate::oauth::dpop_proof::validate_dpop_proof( + dpop_proof, + method, + &request_url, + access_token, + &thumbprint, + )?; + + Ok(resolved) +} diff --git a/src/oauth/sessions.rs b/src/oauth/sessions.rs index 9258d29..7f5b788 100644 --- a/src/oauth/sessions.rs +++ b/src/oauth/sessions.rs @@ -1,14 +1,7 @@ -use sha2::{Digest, Sha256}; - use crate::db::{DatabaseBackend, adapt_sql, now_rfc3339}; use crate::error::AppError; use crate::plugin::encryption::{decrypt, encrypt}; -/// Compute a hex-encoded SHA-256 hash of a token for indexed lookup. -fn token_hash(token: &str) -> String { - hex::encode(Sha256::digest(token.as_bytes())) -} - /// Stored DPoP session data (decrypted). pub struct DpopSession { pub id: String, @@ -23,10 +16,19 @@ pub struct DpopSession { pub issuer: Option, } +/// Session metadata returned by list_dpop_sessions (no decrypted tokens). +pub struct DpopSessionInfo { + pub id: String, + pub dpop_key_id: String, + pub scopes: String, + pub created_at: String, + pub updated_at: String, +} + /// Store or update a DPoP session. /// /// Uses ON CONFLICT to upsert — if a session already exists for this -/// (api_client_id, user_did), it updates the token data. +/// (api_client_id, user_did, dpop_key_id), it updates the token data. #[allow(clippy::too_many_arguments)] pub async fn store_dpop_session( pool: &sqlx::AnyPool, @@ -46,8 +48,6 @@ pub async fn store_dpop_session( let access_enc = encrypt(encryption_key, access_token.as_bytes()) .map_err(|e| AppError::Internal(format!("failed to encrypt access token: {e}")))?; - let access_hash = token_hash(access_token); - let refresh_enc = refresh_token .map(|t| { encrypt(encryption_key, t.as_bytes()) @@ -57,12 +57,10 @@ pub async fn store_dpop_session( let now = now_rfc3339(); let sql = adapt_sql( - r#"INSERT INTO dpop_sessions (id, api_client_id, dpop_key_id, user_did, access_token_enc, access_token_hash, refresh_token_enc, token_expires_at, scopes, pds_url, issuer, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT (api_client_id, user_did) DO UPDATE SET - dpop_key_id = EXCLUDED.dpop_key_id, + r#"INSERT INTO dpop_sessions (id, api_client_id, dpop_key_id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT (api_client_id, user_did, dpop_key_id) DO UPDATE SET access_token_enc = EXCLUDED.access_token_enc, - access_token_hash = EXCLUDED.access_token_hash, refresh_token_enc = EXCLUDED.refresh_token_enc, token_expires_at = EXCLUDED.token_expires_at, scopes = EXCLUDED.scopes, @@ -78,7 +76,6 @@ pub async fn store_dpop_session( .bind(dpop_key_id) .bind(user_did) .bind(&access_enc) - .bind(&access_hash) .bind(&refresh_enc) .bind(token_expires_at) .bind(scopes) @@ -93,22 +90,22 @@ pub async fn store_dpop_session( Ok(()) } -/// Look up a DPoP session by api_client_id and user_did, decrypting tokens. +/// Look up a DPoP session by api_client_id, user_did, and dpop_key_id, decrypting tokens. pub async fn get_dpop_session( pool: &sqlx::AnyPool, backend: DatabaseBackend, encryption_key: &[u8; 32], api_client_id: &str, user_did: &str, + dpop_key_id: &str, ) -> Result { let sql = adapt_sql( - "SELECT id, dpop_key_id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + "SELECT id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND user_did = ? AND dpop_key_id = ?", backend, ); #[allow(clippy::type_complexity)] let row: Option<( - String, String, Vec, Option>, @@ -119,11 +116,12 @@ pub async fn get_dpop_session( )> = sqlx::query_as(&sql) .bind(api_client_id) .bind(user_did) + .bind(dpop_key_id) .fetch_optional(pool) .await .map_err(|e| AppError::Internal(format!("failed to look up DPoP session: {e}")))?; - let (id, dpop_key_id, access_enc, refresh_enc, token_expires_at, scopes, pds_url, issuer) = + let (id, access_enc, refresh_enc, token_expires_at, scopes, pds_url, issuer) = row.ok_or_else(|| AppError::NotFound("DPoP session not found".into()))?; let access_token = String::from_utf8( @@ -144,7 +142,7 @@ pub async fn get_dpop_session( Ok(DpopSession { id, api_client_id: api_client_id.to_string(), - dpop_key_id, + dpop_key_id: dpop_key_id.to_string(), user_did: user_did.to_string(), access_token, refresh_token, @@ -155,25 +153,22 @@ pub async fn get_dpop_session( }) } -/// Look up a DPoP session by api_client_id and access token. -/// Uses the `access_token_hash` column for indexed lookup instead of -/// decrypting every session. -pub async fn get_dpop_session_by_token_hash( +/// Look up a DPoP session by api_client_id and dpop_key_id, decrypting tokens. +/// Used by the auth middleware where the key ID is derived from the DPoP proof thumbprint. +pub async fn get_dpop_session_by_key_id( pool: &sqlx::AnyPool, backend: DatabaseBackend, encryption_key: &[u8; 32], api_client_id: &str, - access_token: &str, + dpop_key_id: &str, ) -> Result { - let hash = token_hash(access_token); let sql = adapt_sql( - "SELECT id, dpop_key_id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND access_token_hash = ?", + "SELECT id, user_did, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND dpop_key_id = ?", backend, ); #[allow(clippy::type_complexity)] let row: Option<( - String, String, String, Vec, @@ -184,24 +179,179 @@ pub async fn get_dpop_session_by_token_hash( Option, )> = sqlx::query_as(&sql) .bind(api_client_id) - .bind(&hash) + .bind(dpop_key_id) .fetch_optional(pool) .await .map_err(|e| AppError::Internal(format!("failed to look up DPoP session: {e}")))?; - let ( + let (id, user_did, access_enc, refresh_enc, token_expires_at, scopes, pds_url, issuer) = + row.ok_or_else(|| AppError::Auth("no matching DPoP session".into()))?; + + let access_token = String::from_utf8( + decrypt(encryption_key, &access_enc) + .map_err(|e| AppError::Internal(format!("failed to decrypt access token: {e}")))?, + ) + .map_err(|e| AppError::Internal(format!("invalid access token bytes: {e}")))?; + + let refresh_token = refresh_enc + .map(|enc| { + let bytes = decrypt(encryption_key, &enc) + .map_err(|e| AppError::Internal(format!("failed to decrypt refresh token: {e}")))?; + String::from_utf8(bytes) + .map_err(|e| AppError::Internal(format!("invalid refresh token bytes: {e}"))) + }) + .transpose()?; + + Ok(DpopSession { id, - dpop_key_id, + api_client_id: api_client_id.to_string(), + dpop_key_id: dpop_key_id.to_string(), user_did, - access_enc, - refresh_enc, + access_token, + refresh_token, token_expires_at, scopes, pds_url, issuer, - ) = row.ok_or_else(|| AppError::Auth("no matching DPoP session".into()))?; + }) +} + +/// Delete a DPoP session by api_client_id, user_did, and dpop_key_id (device-specific). +pub async fn delete_dpop_session( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + api_client_id: &str, + user_did: &str, + dpop_key_id: &str, +) -> Result { + let del_session_sql = adapt_sql( + "DELETE FROM dpop_sessions WHERE api_client_id = ? AND user_did = ? AND dpop_key_id = ?", + backend, + ); + sqlx::query(&del_session_sql) + .bind(api_client_id) + .bind(user_did) + .bind(dpop_key_id) + .execute(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to delete DPoP session: {e}")))?; + + let del_key_sql = adapt_sql("DELETE FROM dpop_keys WHERE id = ?", backend); + sqlx::query(&del_key_sql) + .bind(dpop_key_id) + .execute(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to delete DPoP key: {e}")))?; + + Ok(dpop_key_id.to_string()) +} + +/// Delete all DPoP sessions for a user+client pair (e.g. on account unlink). +pub async fn delete_all_dpop_sessions( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + api_client_id: &str, + user_did: &str, +) -> Result<(), AppError> { + let key_ids_sql = adapt_sql( + "SELECT dpop_key_id FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + backend, + ); + let key_ids: Vec<(String,)> = sqlx::query_as(&key_ids_sql) + .bind(api_client_id) + .bind(user_did) + .fetch_all(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to list DPoP sessions: {e}")))?; + + let del_sessions_sql = adapt_sql( + "DELETE FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + backend, + ); + sqlx::query(&del_sessions_sql) + .bind(api_client_id) + .bind(user_did) + .execute(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to delete DPoP sessions: {e}")))?; + + let del_key_sql = adapt_sql("DELETE FROM dpop_keys WHERE id = ?", backend); + for (key_id,) in key_ids { + let _ = sqlx::query(&del_key_sql).bind(&key_id).execute(pool).await; + } + + Ok(()) +} + +/// List all DPoP sessions for a user+client pair (metadata only, no decrypted tokens). +pub async fn list_dpop_sessions( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + api_client_id: &str, + user_did: &str, +) -> Result, AppError> { + let sql = adapt_sql( + "SELECT id, dpop_key_id, scopes, created_at, updated_at FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + backend, + ); - let access_token_dec = String::from_utf8( + let rows: Vec<(String, String, String, String, String)> = sqlx::query_as(&sql) + .bind(api_client_id) + .bind(user_did) + .fetch_all(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to list DPoP sessions: {e}")))?; + + Ok(rows + .into_iter() + .map( + |(id, dpop_key_id, scopes, created_at, updated_at)| DpopSessionInfo { + id, + dpop_key_id, + scopes, + created_at, + updated_at, + }, + ) + .collect()) +} + +/// Look up a DPoP session by api_client_id and user_did only (without dpop_key_id). +/// Used when the caller doesn't know the specific device key — delegation writes +/// and confidential client session lookups. Returns the first matching session. +pub async fn get_dpop_session_for_user( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + encryption_key: &[u8; 32], + api_client_id: &str, + user_did: &str, +) -> Result { + let sql = adapt_sql( + "SELECT id, dpop_key_id, access_token_enc, refresh_token_enc, token_expires_at, scopes, pds_url, issuer FROM dpop_sessions WHERE api_client_id = ? AND user_did = ? LIMIT 1", + backend, + ); + + #[allow(clippy::type_complexity)] + let row: Option<( + String, + String, + Vec, + Option>, + Option, + String, + Option, + Option, + )> = sqlx::query_as(&sql) + .bind(api_client_id) + .bind(user_did) + .fetch_optional(pool) + .await + .map_err(|e| AppError::Internal(format!("failed to look up DPoP session: {e}")))?; + + let (id, dpop_key_id, access_enc, refresh_enc, token_expires_at, scopes, pds_url, issuer) = + row.ok_or_else(|| AppError::NotFound("DPoP session not found".into()))?; + + let access_token = String::from_utf8( decrypt(encryption_key, &access_enc) .map_err(|e| AppError::Internal(format!("failed to decrypt access token: {e}")))?, ) @@ -220,8 +370,8 @@ pub async fn get_dpop_session_by_token_hash( id, api_client_id: api_client_id.to_string(), dpop_key_id, - user_did, - access_token: access_token_dec, + user_did: user_did.to_string(), + access_token, refresh_token, token_expires_at, scopes, @@ -230,20 +380,20 @@ pub async fn get_dpop_session_by_token_hash( }) } -/// Delete a DPoP session by api_client_id and user_did. -pub async fn delete_dpop_session( +/// Delete a specific DPoP session by its ID, verifying it belongs to the given client and user. +pub async fn delete_dpop_session_by_id( pool: &sqlx::AnyPool, backend: DatabaseBackend, + session_id: &str, api_client_id: &str, user_did: &str, ) -> Result { - // Look up the dpop_key_id before deleting so we can clean up the key too let lookup_sql = adapt_sql( - "SELECT dpop_key_id FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", + "SELECT dpop_key_id FROM dpop_sessions WHERE id = ? AND api_client_id = ? AND user_did = ?", backend, ); - let row: Option<(String,)> = sqlx::query_as(&lookup_sql) + .bind(session_id) .bind(api_client_id) .bind(user_did) .fetch_optional(pool) @@ -252,13 +402,9 @@ pub async fn delete_dpop_session( let (dpop_key_id,) = row.ok_or_else(|| AppError::NotFound("DPoP session not found".into()))?; - let del_session_sql = adapt_sql( - "DELETE FROM dpop_sessions WHERE api_client_id = ? AND user_did = ?", - backend, - ); + let del_session_sql = adapt_sql("DELETE FROM dpop_sessions WHERE id = ?", backend); sqlx::query(&del_session_sql) - .bind(api_client_id) - .bind(user_did) + .bind(session_id) .execute(pool) .await .map_err(|e| AppError::Internal(format!("failed to delete DPoP session: {e}")))?; diff --git a/src/repo/pds.rs b/src/repo/pds.rs index db7c7bd..8bba3c7 100644 --- a/src/repo/pds.rs +++ b/src/repo/pds.rs @@ -19,6 +19,7 @@ pub(crate) enum PdsAuth { OAuth(Arc), Dpop { api_client_id: String, + dpop_key_id: String, encryption_key: [u8; 32], }, } @@ -35,6 +36,7 @@ impl PdsAuth { PdsAuth::OAuth(session) => pds_post_json_raw(state, session, xrpc_method, body).await, PdsAuth::Dpop { api_client_id, + dpop_key_id, encryption_key, } => { crate::oauth::pds_write::dpop_pds_post( @@ -46,6 +48,7 @@ impl PdsAuth { &state.config.plc_url, api_client_id, user_did, + dpop_key_id, xrpc_method, body, ) diff --git a/src/repo/upload_blob.rs b/src/repo/upload_blob.rs index 452d1fd..4af810f 100644 --- a/src/repo/upload_blob.rs +++ b/src/repo/upload_blob.rs @@ -55,6 +55,9 @@ pub async fn upload_blob( .ok_or_else(|| AppError::Internal("TOKEN_ENCRYPTION_KEY not configured".into()))?; let api_client_id = crate::repo::get_dpop_client_id(&state, client_key).await?; + let dpop_key_id = claims + .dpop_key_id() + .ok_or_else(|| AppError::Internal("DPoP key ID not available in claims".into()))?; let resp = crate::oauth::pds_write::dpop_pds_post_blob( &state.http, @@ -65,6 +68,7 @@ pub async fn upload_blob( &state.config.plc_url, &api_client_id, claims.did(), + dpop_key_id, content_type, body, ) diff --git a/src/xrpc/procedure.rs b/src/xrpc/procedure.rs index ab1d618..55d5523 100644 --- a/src/xrpc/procedure.rs +++ b/src/xrpc/procedure.rs @@ -359,39 +359,56 @@ async fn handle_dpop_procedure( ) -> Result { // If delegating, verify the caller has write access and resolve the // api_client_id that owns the delegated session. - let (target_did, effective_api_client_id) = if let Some(did) = delegate_did { - let role = crate::delegation::db::get_delegate_role( - &state.db, - state.db_backend, - did, - claims.did(), - ) - .await? - .ok_or_else(|| AppError::Forbidden("you are not a delegate of this account".into()))?; + let (target_did, effective_api_client_id, effective_dpop_key_id) = + if let Some(did) = delegate_did { + let role = crate::delegation::db::get_delegate_role( + &state.db, + state.db_backend, + did, + claims.did(), + ) + .await? + .ok_or_else(|| AppError::Forbidden("you are not a delegate of this account".into()))?; - if !role.can_write() { - return Err(AppError::Forbidden( - "your role does not have write access to this account".into(), - )); - } + if !role.can_write() { + return Err(AppError::Forbidden( + "your role does not have write access to this account".into(), + )); + } - let stored_client_id = - crate::delegation::db::get_api_client_id(&state.db, state.db_backend, did) - .await? - .ok_or_else(|| { - AppError::Internal("delegated account missing api_client_id".into()) - })?; - - if api_client_id != stored_client_id { - return Err(AppError::Forbidden( - "delegation is scoped to a different application".into(), - )); - } + let stored_client_id = + crate::delegation::db::get_api_client_id(&state.db, state.db_backend, did) + .await? + .ok_or_else(|| { + AppError::Internal("delegated account missing api_client_id".into()) + })?; - (did, stored_client_id) - } else { - (claims.did(), api_client_id.to_string()) - }; + if api_client_id != stored_client_id { + return Err(AppError::Forbidden( + "delegation is scoped to a different application".into(), + )); + } + + // TODO: delegated_accounts needs a dpop_key_id column to identify + // which session to use for PDS writes. For now, look up by + // (api_client_id, user_did) which works when there's one session. + let target_session = crate::oauth::sessions::get_dpop_session_for_user( + &state.db, + state.db_backend, + encryption_key, + &stored_client_id, + did, + ) + .await?; + + (did, stored_client_id, target_session.dpop_key_id) + } else { + let dpop_key_id = claims + .dpop_key_id() + .ok_or_else(|| AppError::Internal("DPoP key ID not available in claims".into()))? + .to_string(); + (claims.did(), api_client_id.to_string(), dpop_key_id) + }; // Strip delegateDid from input — it's a control field, not record data let mut input = input.clone(); @@ -512,6 +529,7 @@ async fn handle_dpop_procedure( &state.config.plc_url, &effective_api_client_id, target_did, + &effective_dpop_key_id, xrpc_method, &pds_body, ) diff --git a/tests/dpop_auth.rs b/tests/dpop_auth.rs index 3eda9a6..98aa721 100644 --- a/tests/dpop_auth.rs +++ b/tests/dpop_auth.rs @@ -27,6 +27,18 @@ fn post_json_with_headers( .unwrap() } +/// Helper to make a GET request with headers +fn get_with_headers(uri: &str, headers: Vec<(&str, &str)>) -> Request { + let mut builder = Request::builder() + .method("GET") + .uri(uri) + .header("host", "127.0.0.1"); + for (name, value) in headers { + builder = builder.header(name, value); + } + builder.body(Body::empty()).unwrap() +} + /// Helper to make a DELETE request with headers fn delete_with_headers(uri: &str, headers: Vec<(&str, &str)>) -> Request { let mut builder = Request::builder() @@ -256,7 +268,7 @@ async fn test_full_flow_provision_register_delete() { let delete_resp = app.router.clone().oneshot(delete_req).await.unwrap(); assert_eq!(delete_resp.status(), StatusCode::NO_CONTENT); - // 4. Verify session is gone (try to delete again) + // 4. Verify session is gone (delete is idempotent for confidential clients) let delete_req2 = delete_with_headers( "/oauth/sessions/did:plc:testuser", vec![ @@ -265,7 +277,7 @@ async fn test_full_flow_provision_register_delete() { ], ); let delete_resp2 = app.router.clone().oneshot(delete_req2).await.unwrap(); - assert_eq!(delete_resp2.status(), StatusCode::NOT_FOUND); + assert_eq!(delete_resp2.status(), StatusCode::NO_CONTENT); } #[tokio::test] @@ -411,3 +423,433 @@ async fn test_xrpc_dpop_auth_accepted() { "DPoP-authenticated XRPC request should not get 401" ); } + +/// Helper: provision a DPoP key and register a session. Returns (provision_id, dpop_key, session_id). +async fn provision_and_register( + app: &common::app::TestApp, + client_key: &str, + client_secret: &str, + did: &str, + access_token: &str, +) -> (String, serde_json::Value, String) { + let key_req = post_json_with_headers( + "/oauth/dpop-keys", + &json!({}), + vec![ + ("x-client-key", client_key), + ("x-client-secret", client_secret), + ], + ); + let key_resp = app.router.clone().oneshot(key_req).await.unwrap(); + assert_eq!(key_resp.status(), StatusCode::CREATED); + let key_body = response_json(key_resp).await; + let provision_id = key_body["provision_id"].as_str().unwrap().to_string(); + let dpop_key = key_body["dpop_key"].clone(); + + let session_req = post_json_with_headers( + "/oauth/sessions", + &json!({ + "provision_id": provision_id, + "did": did, + "access_token": access_token, + "scopes": "atproto", + "pds_url": "https://pds.example.com", + }), + vec![ + ("x-client-key", client_key), + ("x-client-secret", client_secret), + ], + ); + let session_resp = app.router.clone().oneshot(session_req).await.unwrap(); + assert_eq!(session_resp.status(), StatusCode::CREATED); + let session_body = response_json(session_resp).await; + let session_id = session_body["session_id"].as_str().unwrap().to_string(); + + (provision_id, dpop_key, session_id) +} + +#[tokio::test] +#[serial] +async fn test_multi_device_sessions_coexist() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + let did = "did:plc:multidevice"; + + let (_prov1, _key1, session_id_1) = + provision_and_register(&app, &client_key, &client_secret, did, "token-device-1").await; + let (_prov2, _key2, session_id_2) = + provision_and_register(&app, &client_key, &client_secret, did, "token-device-2").await; + + assert_ne!(session_id_1, session_id_2); + + // Both sessions should appear in the device list + let list_req = get_with_headers( + &format!("/oauth/sessions/{}/devices", did), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let list_resp = app.router.clone().oneshot(list_req).await.unwrap(); + assert_eq!(list_resp.status(), StatusCode::OK); + let devices: Vec = + serde_json::from_value(response_json(list_resp).await).unwrap(); + assert_eq!(devices.len(), 2); + + let ids: Vec<&str> = devices.iter().map(|d| d["id"].as_str().unwrap()).collect(); + assert!(ids.contains(&session_id_1.as_str())); + assert!(ids.contains(&session_id_2.as_str())); +} + +#[tokio::test] +#[serial] +async fn test_list_device_sessions_empty() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + + let list_req = get_with_headers( + "/oauth/sessions/did:plc:nobody/devices", + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let list_resp = app.router.clone().oneshot(list_req).await.unwrap(); + assert_eq!(list_resp.status(), StatusCode::OK); + let devices: Vec = + serde_json::from_value(response_json(list_resp).await).unwrap(); + assert!(devices.is_empty()); +} + +#[tokio::test] +#[serial] +async fn test_delete_device_session_by_id() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + let did = "did:plc:deletedevice"; + + let (_prov1, _key1, session_id_1) = + provision_and_register(&app, &client_key, &client_secret, did, "token-a").await; + let (_prov2, _key2, session_id_2) = + provision_and_register(&app, &client_key, &client_secret, did, "token-b").await; + + // Delete session 1 + let del_req = delete_with_headers( + &format!("/oauth/sessions/{}/devices/{}", did, session_id_1), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let del_resp = app.router.clone().oneshot(del_req).await.unwrap(); + assert_eq!(del_resp.status(), StatusCode::NO_CONTENT); + + // Only session 2 should remain + let list_req = get_with_headers( + &format!("/oauth/sessions/{}/devices", did), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let list_resp = app.router.clone().oneshot(list_req).await.unwrap(); + let devices: Vec = + serde_json::from_value(response_json(list_resp).await).unwrap(); + assert_eq!(devices.len(), 1); + assert_eq!(devices[0]["id"].as_str().unwrap(), session_id_2); +} + +#[tokio::test] +#[serial] +async fn test_delete_device_session_not_found() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + + let del_req = delete_with_headers( + "/oauth/sessions/did:plc:nobody/devices/nonexistent-id", + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let del_resp = app.router.clone().oneshot(del_req).await.unwrap(); + assert_eq!(del_resp.status(), StatusCode::NOT_FOUND); +} + +#[tokio::test] +#[serial] +async fn test_session_upsert_same_device() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + let did = "did:plc:upsertuser"; + + // Provision one key + let key_req = post_json_with_headers( + "/oauth/dpop-keys", + &json!({}), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let key_resp = app.router.clone().oneshot(key_req).await.unwrap(); + let key_body = response_json(key_resp).await; + let provision_id = key_body["provision_id"].as_str().unwrap(); + + // Register session with token-v1 + let reg1 = post_json_with_headers( + "/oauth/sessions", + &json!({ + "provision_id": provision_id, + "did": did, + "access_token": "token-v1", + "scopes": "atproto", + }), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let resp1 = app.router.clone().oneshot(reg1).await.unwrap(); + assert_eq!(resp1.status(), StatusCode::CREATED); + + // Re-register with same provision_id (same device key) but new token + let reg2 = post_json_with_headers( + "/oauth/sessions", + &json!({ + "provision_id": provision_id, + "did": did, + "access_token": "token-v2", + "scopes": "atproto", + }), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let resp2 = app.router.clone().oneshot(reg2).await.unwrap(); + assert_eq!(resp2.status(), StatusCode::CREATED); + + // Should still be exactly one device session (upsert, not duplicate) + let list_req = get_with_headers( + &format!("/oauth/sessions/{}/devices", did), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let list_resp = app.router.clone().oneshot(list_req).await.unwrap(); + let devices: Vec = + serde_json::from_value(response_json(list_resp).await).unwrap(); + assert_eq!(devices.len(), 1); +} + +#[tokio::test] +#[serial] +async fn test_get_session_with_confidential_client() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + let did = "did:plc:getsession"; + + provision_and_register(&app, &client_key, &client_secret, did, "some-token").await; + + let get_req = get_with_headers( + &format!("/oauth/sessions/{}", did), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let get_resp = app.router.clone().oneshot(get_req).await.unwrap(); + assert_eq!(get_resp.status(), StatusCode::OK); + let body = response_json(get_resp).await; + assert_eq!(body["did"], did); + assert!(body["scopes"].is_array()); +} + +#[tokio::test] +#[serial] +async fn test_device_list_response_format() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, client_secret, _id) = app.create_api_client("confidential", None).await; + let did = "did:plc:formatcheck"; + + provision_and_register(&app, &client_key, &client_secret, did, "token-fmt").await; + + let list_req = get_with_headers( + &format!("/oauth/sessions/{}/devices", did), + vec![ + ("x-client-key", &client_key), + ("x-client-secret", &client_secret), + ], + ); + let list_resp = app.router.clone().oneshot(list_req).await.unwrap(); + assert_eq!(list_resp.status(), StatusCode::OK); + let devices: Vec = + serde_json::from_value(response_json(list_resp).await).unwrap(); + assert_eq!(devices.len(), 1); + + let device = &devices[0]; + assert!(device["id"].is_string()); + assert!(device["dpop_key_id"].is_string()); + assert!(device["scopes"].is_array()); + assert!(device["created_at"].is_string()); + assert!(device["updated_at"].is_string()); +} + +#[tokio::test] +#[serial] +async fn test_public_client_dpop_get_session() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, _secret, _id) = app + .create_api_client("public", Some(vec!["http://localhost:3000".to_string()])) + .await; + + use base64::Engine; + use base64::engine::general_purpose::URL_SAFE_NO_PAD; + use sha2::{Digest, Sha256}; + + let verifier = "test-verifier-for-public-client-session"; + let challenge = URL_SAFE_NO_PAD.encode(Sha256::digest(verifier.as_bytes())); + + // Provision key with PKCE + let key_req = post_json_with_headers( + "/oauth/dpop-keys", + &json!({ "pkce_challenge": challenge }), + vec![ + ("x-client-key", &client_key), + ("origin", "http://localhost:3000"), + ], + ); + let key_resp = app.router.clone().oneshot(key_req).await.unwrap(); + assert_eq!(key_resp.status(), StatusCode::CREATED); + let key_body = response_json(key_resp).await; + let provision_id = key_body["provision_id"].as_str().unwrap(); + let dpop_key = &key_body["dpop_key"]; + + let did = "did:plc:publicuser"; + let access_token = "public-client-access-token"; + + // Register session with PKCE verifier + let session_req = post_json_with_headers( + "/oauth/sessions", + &json!({ + "provision_id": provision_id, + "pkce_verifier": verifier, + "did": did, + "access_token": access_token, + "scopes": "atproto", + "pds_url": "https://pds.example.com", + }), + vec![("x-client-key", &client_key)], + ); + let session_resp = app.router.clone().oneshot(session_req).await.unwrap(); + assert_eq!(session_resp.status(), StatusCode::CREATED); + + // GET session with DPoP proof + let request_url = format!("http://127.0.0.1/oauth/sessions/{}", did); + let proof = generate_dpop_proof(dpop_key, "GET", &request_url, access_token, None) + .expect("failed to generate DPoP proof"); + + let get_req = get_with_headers( + &format!("/oauth/sessions/{}", did), + vec![ + ("x-client-key", &client_key), + ("authorization", &format!("DPoP {}", access_token)), + ("dpop", &proof), + ], + ); + let get_resp = app.router.clone().oneshot(get_req).await.unwrap(); + assert_eq!(get_resp.status(), StatusCode::OK); + let body = response_json(get_resp).await; + assert_eq!(body["did"], did); +} + +#[tokio::test] +#[serial] +async fn test_public_client_dpop_delete_session() { + common::require_db!(); + let app = common::app::TestApp::new_with_encryption().await; + let (client_key, _secret, _id) = app + .create_api_client("public", Some(vec!["http://localhost:3000".to_string()])) + .await; + + use base64::Engine; + use base64::engine::general_purpose::URL_SAFE_NO_PAD; + use sha2::{Digest, Sha256}; + + let verifier = "test-verifier-for-public-delete"; + let challenge = URL_SAFE_NO_PAD.encode(Sha256::digest(verifier.as_bytes())); + + let key_req = post_json_with_headers( + "/oauth/dpop-keys", + &json!({ "pkce_challenge": challenge }), + vec![ + ("x-client-key", &client_key), + ("origin", "http://localhost:3000"), + ], + ); + let key_resp = app.router.clone().oneshot(key_req).await.unwrap(); + assert_eq!(key_resp.status(), StatusCode::CREATED); + let key_body = response_json(key_resp).await; + let provision_id = key_body["provision_id"].as_str().unwrap(); + let dpop_key = &key_body["dpop_key"]; + + let did = "did:plc:publicdelete"; + let access_token = "public-delete-token"; + + let session_req = post_json_with_headers( + "/oauth/sessions", + &json!({ + "provision_id": provision_id, + "pkce_verifier": verifier, + "did": did, + "access_token": access_token, + "scopes": "atproto", + "pds_url": "https://pds.example.com", + }), + vec![("x-client-key", &client_key)], + ); + let session_resp = app.router.clone().oneshot(session_req).await.unwrap(); + assert_eq!(session_resp.status(), StatusCode::CREATED); + + // DELETE session with DPoP proof + let request_url = format!("http://127.0.0.1/oauth/sessions/{}", did); + let proof = generate_dpop_proof(dpop_key, "DELETE", &request_url, access_token, None) + .expect("failed to generate DPoP proof"); + + let del_req = delete_with_headers( + &format!("/oauth/sessions/{}", did), + vec![ + ("x-client-key", &client_key), + ("authorization", &format!("DPoP {}", access_token)), + ("dpop", &proof), + ], + ); + let del_resp = app.router.clone().oneshot(del_req).await.unwrap(); + assert_eq!(del_resp.status(), StatusCode::NO_CONTENT); + + // Verify session is gone — GET should fail + let request_url2 = format!("http://127.0.0.1/oauth/sessions/{}", did); + let proof2 = generate_dpop_proof(dpop_key, "GET", &request_url2, access_token, None) + .expect("failed to generate DPoP proof"); + + let get_req = get_with_headers( + &format!("/oauth/sessions/{}", did), + vec![ + ("x-client-key", &client_key), + ("authorization", &format!("DPoP {}", access_token)), + ("dpop", &proof2), + ], + ); + let get_resp = app.router.clone().oneshot(get_req).await.unwrap(); + assert_ne!(get_resp.status(), StatusCode::OK); +} -- 2.51.2 From 63f3a323bded62c9c535d2e7572eb1bbe3317e51 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 13:35:30 -0500 Subject: [PATCH 164/250] ci: fix npm releases Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 3 +++ packages/lex-agent/.releaserc.json | 2 +- packages/oauth-client-browser/.releaserc.json | 2 +- packages/oauth-client-node/.releaserc.json | 2 +- packages/oauth-client/.releaserc.json | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ee8050..e6ea1b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,9 @@ on: env: SQLX_OFFLINE: true +permissions: + id-token: write # Required for OIDC + jobs: # --------------------------------------------------------------------------- # Path detection — determines which job groups should run. diff --git a/packages/lex-agent/.releaserc.json b/packages/lex-agent/.releaserc.json index f52c72e..667edc0 100644 --- a/packages/lex-agent/.releaserc.json +++ b/packages/lex-agent/.releaserc.json @@ -9,7 +9,7 @@ "@semantic-release/release-notes-generator", ["@semantic-release/exec", { "prepareCmd": "node -e \"const fs=require('fs');const p=JSON.parse(fs.readFileSync('package.json','utf8'));p.version='${nextRelease.version}';fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\\n')\"", - "publishCmd": "bun publish --access public --tag ${nextRelease.channel || 'latest'}" + "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || npm publish --access public --tag ${nextRelease.channel || 'latest'}" }], "@semantic-release/github" ] diff --git a/packages/oauth-client-browser/.releaserc.json b/packages/oauth-client-browser/.releaserc.json index 02e61cd..667edc0 100644 --- a/packages/oauth-client-browser/.releaserc.json +++ b/packages/oauth-client-browser/.releaserc.json @@ -9,7 +9,7 @@ "@semantic-release/release-notes-generator", ["@semantic-release/exec", { "prepareCmd": "node -e \"const fs=require('fs');const p=JSON.parse(fs.readFileSync('package.json','utf8'));p.version='${nextRelease.version}';fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\\n')\"", - "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || bun publish --access public --tag ${nextRelease.channel || 'latest'}" + "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || npm publish --access public --tag ${nextRelease.channel || 'latest'}" }], "@semantic-release/github" ] diff --git a/packages/oauth-client-node/.releaserc.json b/packages/oauth-client-node/.releaserc.json index 02e61cd..667edc0 100644 --- a/packages/oauth-client-node/.releaserc.json +++ b/packages/oauth-client-node/.releaserc.json @@ -9,7 +9,7 @@ "@semantic-release/release-notes-generator", ["@semantic-release/exec", { "prepareCmd": "node -e \"const fs=require('fs');const p=JSON.parse(fs.readFileSync('package.json','utf8'));p.version='${nextRelease.version}';fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\\n')\"", - "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || bun publish --access public --tag ${nextRelease.channel || 'latest'}" + "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || npm publish --access public --tag ${nextRelease.channel || 'latest'}" }], "@semantic-release/github" ] diff --git a/packages/oauth-client/.releaserc.json b/packages/oauth-client/.releaserc.json index 02e61cd..667edc0 100644 --- a/packages/oauth-client/.releaserc.json +++ b/packages/oauth-client/.releaserc.json @@ -9,7 +9,7 @@ "@semantic-release/release-notes-generator", ["@semantic-release/exec", { "prepareCmd": "node -e \"const fs=require('fs');const p=JSON.parse(fs.readFileSync('package.json','utf8'));p.version='${nextRelease.version}';fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\\n')\"", - "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || bun publish --access public --tag ${nextRelease.channel || 'latest'}" + "publishCmd": "npm view $(node -p \"require('./package.json').name\")@${nextRelease.version} version 2>/dev/null && echo 'Version already published, skipping' || npm publish --access public --tag ${nextRelease.channel || 'latest'}" }], "@semantic-release/github" ] -- 2.51.2 From 230b4d440b39cc9cb880511232d9f1b8e9b2d797 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 16:01:41 -0500 Subject: [PATCH 165/250] fix: remove prefix typo from db.query filter generation Signed-off-by: Trezy Signed-off-by: Trezy --- src/lua/db_api.rs | 21 +++---- tests/lua_db_api.rs | 143 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+), 12 deletions(-) diff --git a/src/lua/db_api.rs b/src/lua/db_api.rs index 3afea15..e97fa7f 100644 --- a/src/lua/db_api.rs +++ b/src/lua/db_api.rs @@ -126,7 +126,7 @@ fn build_filter_sql(node: &FilterNode, binds: &mut Vec) -> String { match node { FilterNode::Condition { field, op, value } => { binds.push(value.clone()); - format!("json_extract(record, '$.value.{field}') {op} ?") + format!("json_extract(record, '$.{field}') {op} ?") } FilterNode::Group { combine, children } => { let parts: Vec = children @@ -205,7 +205,7 @@ pub fn register_db_api(lua: &Lua, state: Arc) -> LuaResult<()> { let order_expr = if top_level_columns.contains(&sort_field.as_str()) { format!("{sort_field} {direction}") } else { - format!("json_extract(record, '$.value.{sort_field}') {direction}") + format!("json_extract(record, '$.{sort_field}') {direction}") }; let did_clause = if did.is_some() { " AND did = ?" } else { "" }; @@ -965,7 +965,7 @@ mod tests { let node = parse_filter_node(&t, 0).unwrap(); let mut binds = Vec::new(); let sql = build_filter_sql(&node, &mut binds); - assert_eq!(sql, "json_extract(record, '$.value.name') = ?"); + assert_eq!(sql, "json_extract(record, '$.name') = ?"); assert_eq!(binds, vec!["alice"]); } @@ -978,7 +978,7 @@ mod tests { let node = parse_filter_node(&t, 0).unwrap(); let mut binds = Vec::new(); let sql = build_filter_sql(&node, &mut binds); - assert_eq!(sql, "json_extract(record, '$.value.status') = ?"); + assert_eq!(sql, "json_extract(record, '$.status') = ?"); } #[test] @@ -1011,7 +1011,7 @@ mod tests { let sql = build_filter_sql(&node, &mut binds); assert_eq!( sql, - "(json_extract(record, '$.value.status') = ? AND json_extract(record, '$.value.age') > ?)" + "(json_extract(record, '$.status') = ? AND json_extract(record, '$.age') > ?)" ); assert_eq!(binds, vec!["active", "18"]); } @@ -1030,7 +1030,7 @@ mod tests { let sql = build_filter_sql(&node, &mut binds); assert_eq!( sql, - "(json_extract(record, '$.value.role') = ? OR json_extract(record, '$.value.role') = ?)" + "(json_extract(record, '$.role') = ? OR json_extract(record, '$.role') = ?)" ); assert_eq!(binds, vec!["admin", "mod"]); } @@ -1045,7 +1045,7 @@ mod tests { let node = parse_filter_node(&group, 0).unwrap(); let mut binds = Vec::new(); let sql = build_filter_sql(&node, &mut binds); - assert_eq!(sql, "json_extract(record, '$.value.x') = ?"); + assert_eq!(sql, "json_extract(record, '$.x') = ?"); } #[test] @@ -1095,7 +1095,7 @@ mod tests { let node = parse_filter_node(&t, 0).unwrap(); let mut binds = Vec::new(); let sql = build_filter_sql(&node, &mut binds); - assert_eq!(sql, "json_extract(record, '$.value.name') LIKE ?"); + assert_eq!(sql, "json_extract(record, '$.name') LIKE ?"); } #[test] @@ -1130,10 +1130,7 @@ mod tests { let node = parse_filter_node(&t, 0).unwrap(); let mut binds = Vec::new(); let sql = build_filter_sql(&node, &mut binds); - assert_eq!( - sql, - "json_extract(record, '$.value.author.websites[0].url') = ?" - ); + assert_eq!(sql, "json_extract(record, '$.author.websites[0].url') = ?"); } // ----------------------------------------------------------------------- diff --git a/tests/lua_db_api.rs b/tests/lua_db_api.rs index d32bb90..3fa11aa 100644 --- a/tests/lua_db_api.rs +++ b/tests/lua_db_api.rs @@ -345,3 +345,146 @@ async fn db_raw_select_works() { let cnt: i64 = first_row.get("cnt").unwrap(); assert_eq!(cnt, 3); } + +#[tokio::test] +#[serial] +async fn db_query_filter_equals() { + common::require_db!(); + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + seed_records(&pool, backend).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_lua(&state); + + let result: mlua::Table = lua + .load( + r#"return db.query({ + collection = "test.collection", + filter = { field = "name", value = "Test One" } + })"#, + ) + .eval_async() + .await + .unwrap(); + + let records: mlua::Table = result.get("records").unwrap(); + assert_eq!(records.raw_len(), 1); + let first: mlua::Table = records.get(1).unwrap(); + assert_eq!(first.get::("name").unwrap(), "Test One"); +} + +#[tokio::test] +#[serial] +async fn db_query_filter_not_equals() { + common::require_db!(); + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + seed_records(&pool, backend).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_lua(&state); + + let result: mlua::Table = lua + .load( + r#"return db.query({ + collection = "test.collection", + filter = { field = "name", op = "!=", value = "Test One" } + })"#, + ) + .eval_async() + .await + .unwrap(); + + let records: mlua::Table = result.get("records").unwrap(); + assert_eq!(records.raw_len(), 2); +} + +#[tokio::test] +#[serial] +async fn db_query_filter_no_match_returns_empty() { + common::require_db!(); + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + seed_records(&pool, backend).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_lua(&state); + + let result: mlua::Table = lua + .load( + r#"return db.query({ + collection = "test.collection", + filter = { field = "name", value = "Nonexistent" } + })"#, + ) + .eval_async() + .await + .unwrap(); + + let records: mlua::Table = result.get("records").unwrap(); + assert_eq!(records.raw_len(), 0); +} + +#[tokio::test] +#[serial] +async fn db_query_filter_and_group() { + common::require_db!(); + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + seed_records(&pool, backend).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_lua(&state); + + let result: mlua::Table = lua + .load( + r#"return db.query({ + collection = "test.collection", + filter = { + combine = "AND", + { field = "name", op = "LIKE", value = "Test%" }, + { field = "value", op = ">", value = "1" } + } + })"#, + ) + .eval_async() + .await + .unwrap(); + + let records: mlua::Table = result.get("records").unwrap(); + assert_eq!(records.raw_len(), 1); + let first: mlua::Table = records.get(1).unwrap(); + assert_eq!(first.get::("name").unwrap(), "Test Two"); +} + +#[tokio::test] +#[serial] +async fn db_query_sort_by_json_field() { + common::require_db!(); + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + seed_records(&pool, backend).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_lua(&state); + + let result: mlua::Table = lua + .load( + r#"return db.query({ + collection = "test.collection", + sort = "name", + sortDirection = "asc" + })"#, + ) + .eval_async() + .await + .unwrap(); + + let records: mlua::Table = result.get("records").unwrap(); + assert_eq!(records.raw_len(), 3); + let first: mlua::Table = records.get(1).unwrap(); + let last: mlua::Table = records.get(3).unwrap(); + assert_eq!(first.get::("name").unwrap(), "Other Record"); + assert_eq!(last.get::("name").unwrap(), "Test Two"); +} -- 2.51.2 From 7e4e3c375814dfbe86b4870ed03c0648c0899e68 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 16:31:08 -0500 Subject: [PATCH 166/250] docs: update auth docs to cover new dpop requirements Signed-off-by: Trezy Signed-off-by: Trezy --- .../docs/getting-started/authentication.md | 62 +++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/packages/docs/content/docs/getting-started/authentication.md b/packages/docs/content/docs/getting-started/authentication.md index b46e894..3251c48 100644 --- a/packages/docs/content/docs/getting-started/authentication.md +++ b/packages/docs/content/docs/getting-started/authentication.md @@ -241,7 +241,7 @@ A request that only carries an `X-Client-Key` header (no DPoP token) can hit que Third-party apps that want HappyView to make PDS writes on behalf of their users use the **DPoP key provisioning** flow. This avoids browser-based redirects through HappyView's domain, which can be blocked by Firefox's Bounce Tracker Protection. -The idea: the app gets a DPoP keypair from HappyView, uses that keypair during its own OAuth flow with the user's PDS, then registers the resulting tokens back with HappyView. From that point on, XRPC requests authenticated with `Authorization: DPoP ` plus a `DPoP` proof header and `X-Client-Key` will have HappyView proxy writes using the stored session. +The idea: for each device, the app gets a DPoP keypair from HappyView, uses that keypair during its own OAuth flow with the user's PDS, then registers the resulting tokens back with HappyView. Each device gets its own keypair and session, so a user can be signed in on multiple devices simultaneously. From that point on, XRPC requests authenticated with `Authorization: DPoP ` plus a `DPoP` proof header and `X-Client-Key` will have HappyView proxy writes using the stored session that matches the request's DPoP key. The client app and HappyView share the same DPoP keypair, so both can generate valid proofs that the PDS will accept. The PDS binds tokens to a key's thumbprint but it doesn't care who signs the proof, only that it was signed by the right key. @@ -466,7 +466,7 @@ HappyView validates the DPoP proof, looks up the stored session, and proxies the #### 5. Logout -Confidential clients authenticate with `X-Client-Key` + `X-Client-Secret`: +Confidential clients authenticate with `X-Client-Key` + `X-Client-Secret`. This revokes **all** device sessions for the user under this client — useful for a full sign-out: ``` DELETE /oauth/sessions/did:plc:user123 @@ -474,7 +474,7 @@ X-Client-Key: hvc_... X-Client-Secret: hvs_... ``` -Public clients must provide a valid DPoP proof to prove they hold the key: +Public clients must provide a valid DPoP proof to prove they hold the key. This revokes only the session that matches the DPoP key used in the proof — other device sessions for the same user are unaffected: ``` DELETE /oauth/sessions/did:plc:user123 @@ -483,7 +483,61 @@ Authorization: DPoP DPoP: ``` -This deletes the stored session and the associated DPoP key. +To revoke a specific device session (for either client type), use the [device management endpoints](#6-managing-device-sessions) instead. + +#### 6. Managing device sessions + +When a user registers sessions from multiple devices (each with its own DPoP keypair), each session is tracked separately. You can list and revoke individual device sessions without affecting the others. + +**List device sessions:** + +Confidential clients authenticate with `X-Client-Key` + `X-Client-Secret`. Public clients authenticate with DPoP proof. + +``` +GET /oauth/sessions/did:plc:user123/devices +X-Client-Key: hvc_... +X-Client-Secret: hvs_... +``` + +Response: + +```json +[ + { + "id": "uuid-session-1", + "dpop_key_id": "uuid-key-1", + "scopes": ["atproto", "transition:generic"], + "created_at": "2026-05-20T12:00:00Z", + "updated_at": "2026-05-20T12:00:00Z" + }, + { + "id": "uuid-session-2", + "dpop_key_id": "uuid-key-2", + "scopes": ["atproto", "transition:generic"], + "created_at": "2026-05-21T08:30:00Z", + "updated_at": "2026-05-21T08:30:00Z" + } +] +``` + +**Delete a specific device session:** + +``` +DELETE /oauth/sessions/did:plc:user123/devices/uuid-session-1 +X-Client-Key: hvc_... +X-Client-Secret: hvs_... +``` + +For public clients, use DPoP auth instead of `X-Client-Secret`: + +``` +DELETE /oauth/sessions/did:plc:user123/devices/uuid-session-1 +X-Client-Key: hvc_... +Authorization: DPoP +DPoP: +``` + +Returns `204 No Content` on success, `404 Not Found` if the session doesn't exist or doesn't belong to the client/user. ### Security notes -- 2.51.2 From 2950160b3f753b03525fd0bca91aafb152cc5306 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 16:38:15 -0500 Subject: [PATCH 167/250] ci: prevent pr-builds from running when merging `dev` (taken care of by regular release process) Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6ea1b3..65f7bb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -169,6 +169,7 @@ jobs: needs: changes if: >- github.event_name == 'pull_request' + && github.head_ref != 'dev' && needs.changes.outputs.server == 'true' runs-on: ${{ matrix.runs-on }} strategy: -- 2.51.2 From d1da97b34897ac59e1d49ed75b45addad6f91204 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 17:15:32 -0500 Subject: [PATCH 168/250] fix: allow docker containers to execute HappyView binaries Signed-off-by: Trezy Signed-off-by: Trezy --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 97108be..ad103be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,6 +33,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ WORKDIR /app COPY --from=builder /app/target/release/happyview /usr/local/bin/happyview +RUN chmod +x /usr/local/bin/happyview COPY migrations/ /app/migrations COPY --from=frontend /app/web/out /srv/static COPY entrypoint.sh /entrypoint.sh -- 2.51.2 From dfbe2a2a8c18efbbe7f89d255fb30729aa940472 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 17:33:54 -0500 Subject: [PATCH 169/250] ci: merge binary and docker builds for better concurrency Signed-off-by: Trezy Signed-off-by: Trezy --- .github/workflows/ci.yml | 299 ++++++++++++++++----------------------- 1 file changed, 125 insertions(+), 174 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 65f7bb2..3b2d737 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -163,23 +163,30 @@ jobs: run: cargo clippy --all-targets -- -D warnings # --------------------------------------------------------------------------- - # PR binaries — build on every PR push so reviewers can test + # PR builds — compile + Docker on every PR push so reviewers can test # --------------------------------------------------------------------------- - pr-binary: + pr-build: needs: changes if: >- github.event_name == 'pull_request' && github.head_ref != 'dev' && needs.changes.outputs.server == 'true' runs-on: ${{ matrix.runs-on }} + permissions: + contents: read + packages: write strategy: fail-fast: false matrix: include: - - runs-on: depot-ubuntu-24.04 + - platform: linux/amd64 + runs-on: depot-ubuntu-24.04 arch: amd64 - - runs-on: depot-ubuntu-24.04-arm + - platform: linux/arm64 + runs-on: depot-ubuntu-24.04-arm arch: arm64 + env: + GHCR_IMAGE: ghcr.io/${{ github.repository }} steps: - name: Checkout repository uses: actions/checkout@v6 @@ -211,38 +218,10 @@ jobs: name: happyview-linux-${{ matrix.arch }} path: target/release/happyview - pr-docker: - needs: pr-binary - runs-on: ${{ matrix.runs-on }} - permissions: - contents: read - packages: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runs-on: depot-ubuntu-24.04 - arch: amd64 - - platform: linux/arm64 - runs-on: depot-ubuntu-24.04-arm - arch: arm64 - env: - GHCR_IMAGE: ghcr.io/${{ github.repository }} - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Download pre-built binary - uses: actions/download-artifact@v4 - with: - name: happyview-linux-${{ matrix.arch }} - path: .binary - - name: Prepare binary override run: | mkdir -p .builder-override/app/target/release - cp .binary/happyview .builder-override/app/target/release/happyview + cp target/release/happyview .builder-override/app/target/release/happyview - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -284,7 +263,7 @@ jobs: ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} pr-build-comment: - needs: pr-docker + needs: pr-build runs-on: depot-ubuntu-24.04 permissions: pull-requests: write @@ -370,14 +349,16 @@ jobs: run: npx -p semantic-release -p semantic-release-gha-output semantic-release # --------------------------------------------------------------------------- - # Build binaries — compile per-platform and upload to GitHub release + # Build + Docker — compile per-platform, upload to GitHub release, push image # --------------------------------------------------------------------------- - build-binary: + build: needs: release if: needs.release.outputs.version != '' runs-on: ${{ matrix.runs-on }} permissions: contents: write + packages: write + id-token: write strategy: fail-fast: false matrix: @@ -388,6 +369,9 @@ jobs: - platform: linux/arm64 runs-on: depot-ubuntu-24.04-arm arch: arm64 + env: + GHCR_IMAGE: ghcr.io/${{ github.repository }} + ATCR_IMAGE: atcr.io/${{ secrets.ATCR_NAMESPACE }}/happyview steps: - name: Checkout repository uses: actions/checkout@v6 @@ -423,6 +407,111 @@ jobs: happyview-linux-${{ matrix.arch }} \ --clobber + - name: Prepare binary override + run: | + mkdir -p .builder-override/app/target/release + cp target/release/happyview .builder-override/app/target/release/happyview + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Log in to ATCR + # uses: docker/login-action@v3 + # with: + # registry: atcr.io + # username: ${{ secrets.ATCR_USERNAME }} + # password: ${{ secrets.ATCR_PASSWORD }} + + - name: Parse version + id: version + run: | + VERSION="${{ needs.release.outputs.version }}" + MAJOR="${VERSION%%.*}" + MINOR="${VERSION#*.}" + MINOR="${MINOR%%.*}" + echo "full=${VERSION}" >> "$GITHUB_OUTPUT" + echo "major=${MAJOR}" >> "$GITHUB_OUTPUT" + echo "major_minor=${MAJOR}.${MINOR}" >> "$GITHUB_OUTPUT" + + - name: Extract GHCR metadata + id: meta-ghcr + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_IMAGE }} + tags: | + type=raw,value=${{ steps.version.outputs.full }} + type=raw,value=${{ steps.version.outputs.major_minor }} + type=raw,value=${{ steps.version.outputs.major }} + type=sha + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Extract ATCR metadata + # id: meta-atcr + # uses: docker/metadata-action@v5 + # with: + # images: ${{ env.ATCR_IMAGE }} + # tags: | + # type=semver,pattern={{version}} + # type=semver,pattern={{major}}.{{minor}} + # type=semver,pattern={{major}} + # type=sha + + - name: Build and push to GHCR by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta-ghcr.outputs.labels }} + build-contexts: | + builder=.builder-override + cache-from: type=gha,scope=build-${{ matrix.platform }} + cache-to: type=gha,scope=build-${{ matrix.platform }},mode=max,ignore-error=true + outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Push to ATCR by digest + # id: build-atcr + # continue-on-error: true + # uses: docker/build-push-action@v5 + # with: + # context: . + # platforms: ${{ matrix.platform }} + # labels: ${{ steps.meta-atcr.outputs.labels }} + # build-contexts: | + # builder=.builder-override + # cache-from: type=gha,scope=build-${{ matrix.platform }} + # outputs: type=image,"name=${{ env.ATCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true + + - name: Create GHCR manifest + run: | + GHCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-ghcr.outputs.json }}') + docker buildx imagetools create --append $GHCR_TAGS \ + ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} 2>/dev/null || \ + docker buildx imagetools create $GHCR_TAGS \ + ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} + + # TODO: Re-enable once ATCR rate limit issue is resolved + # - name: Create ATCR manifest + # if: steps.build-atcr.outcome == 'success' + # continue-on-error: true + # run: | + # ATCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-atcr.outputs.json }}') + # if [ -n "$ATCR_TAGS" ]; then + # docker buildx imagetools create --append $ATCR_TAGS \ + # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} 2>/dev/null || \ + # docker buildx imagetools create $ATCR_TAGS \ + # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} + # fi + # --------------------------------------------------------------------------- # SDK — per-package tests + releases # --------------------------------------------------------------------------- @@ -739,144 +828,6 @@ jobs: working-directory: packages/lex-agent run: npx semantic-release - # --------------------------------------------------------------------------- - # Docker — main app image (triggered by GitHub release) - # --------------------------------------------------------------------------- - docker: - needs: [release, build-binary] - if: needs.release.outputs.version != '' - runs-on: ${{ matrix.runs-on }} - permissions: - contents: read - packages: write - id-token: write - strategy: - fail-fast: false - matrix: - include: - - platform: linux/amd64 - runs-on: depot-ubuntu-24.04 - arch: amd64 - - platform: linux/arm64 - runs-on: depot-ubuntu-24.04-arm - arch: arm64 - env: - GHCR_IMAGE: ghcr.io/${{ github.repository }} - ATCR_IMAGE: atcr.io/${{ secrets.ATCR_NAMESPACE }}/happyview - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Download pre-built binary - env: - GH_TOKEN: ${{ secrets.DISPATCH_GH_TOKEN }} - run: | - gh release download "v${{ needs.release.outputs.version }}" \ - --pattern "happyview-linux-${{ matrix.arch }}" \ - --dir . - mkdir -p .builder-override/app/target/release - cp happyview-linux-${{ matrix.arch }} .builder-override/app/target/release/happyview - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Log in to ATCR - # uses: docker/login-action@v3 - # with: - # registry: atcr.io - # username: ${{ secrets.ATCR_USERNAME }} - # password: ${{ secrets.ATCR_PASSWORD }} - - - name: Parse version - id: version - run: | - VERSION="${{ needs.release.outputs.version }}" - MAJOR="${VERSION%%.*}" - MINOR="${VERSION#*.}" - MINOR="${MINOR%%.*}" - echo "full=${VERSION}" >> "$GITHUB_OUTPUT" - echo "major=${MAJOR}" >> "$GITHUB_OUTPUT" - echo "major_minor=${MAJOR}.${MINOR}" >> "$GITHUB_OUTPUT" - - - name: Extract GHCR metadata - id: meta-ghcr - uses: docker/metadata-action@v5 - with: - images: ${{ env.GHCR_IMAGE }} - tags: | - type=raw,value=${{ steps.version.outputs.full }} - type=raw,value=${{ steps.version.outputs.major_minor }} - type=raw,value=${{ steps.version.outputs.major }} - type=sha - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Extract ATCR metadata - # id: meta-atcr - # uses: docker/metadata-action@v5 - # with: - # images: ${{ env.ATCR_IMAGE }} - # tags: | - # type=semver,pattern={{version}} - # type=semver,pattern={{major}}.{{minor}} - # type=semver,pattern={{major}} - # type=sha - - - name: Build and push to GHCR by digest - id: build - uses: docker/build-push-action@v5 - with: - context: . - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta-ghcr.outputs.labels }} - build-contexts: | - builder=.builder-override - cache-from: type=gha,scope=build-${{ matrix.platform }} - cache-to: type=gha,scope=build-${{ matrix.platform }},mode=max,ignore-error=true - outputs: type=image,"name=${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Push to ATCR by digest - # id: build-atcr - # continue-on-error: true - # uses: docker/build-push-action@v5 - # with: - # context: . - # platforms: ${{ matrix.platform }} - # labels: ${{ steps.meta-atcr.outputs.labels }} - # build-contexts: | - # builder=.builder-override - # cache-from: type=gha,scope=build-${{ matrix.platform }} - # outputs: type=image,"name=${{ env.ATCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true - - - name: Create GHCR manifest - run: | - GHCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-ghcr.outputs.json }}') - docker buildx imagetools create --append $GHCR_TAGS \ - ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} 2>/dev/null || \ - docker buildx imagetools create $GHCR_TAGS \ - ${{ env.GHCR_IMAGE }}@${{ steps.build.outputs.digest }} - - # TODO: Re-enable once ATCR rate limit issue is resolved - # - name: Create ATCR manifest - # if: steps.build-atcr.outcome == 'success' - # continue-on-error: true - # run: | - # ATCR_TAGS=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< '${{ steps.meta-atcr.outputs.json }}') - # if [ -n "$ATCR_TAGS" ]; then - # docker buildx imagetools create --append $ATCR_TAGS \ - # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} 2>/dev/null || \ - # docker buildx imagetools create $ATCR_TAGS \ - # ${{ env.ATCR_IMAGE }}@${{ steps.build-atcr.outputs.digest }} - # fi - # --------------------------------------------------------------------------- # Mirror to Tangled # --------------------------------------------------------------------------- -- 2.51.2 From c274314de6a4718962f14b3786c210c5d74d2158 Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 21:34:57 -0500 Subject: [PATCH 170/250] fix: remove superfluous early exit on invalid session token (pds concern, not happyview concern) Signed-off-by: Trezy Signed-off-by: Trezy --- src/auth/middleware.rs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/auth/middleware.rs b/src/auth/middleware.rs index 4715311..250d98c 100644 --- a/src/auth/middleware.rs +++ b/src/auth/middleware.rs @@ -197,14 +197,6 @@ pub async fn resolve_dpop_claims( ) .await?; - // Check token expiry - if let Some(ref expires_at) = session.token_expires_at - && let Ok(exp) = chrono::DateTime::parse_from_rfc3339(expires_at) - && exp < chrono::Utc::now() - { - return Err(AppError::Auth("token_expired".into())); - } - // Build the request URL for htu validation let scheme = if state.config.public_url.starts_with("https") { "https" -- 2.51.2 From b80393b794c6bf5f41d5776fbeb5523b1c1611fc Mon Sep 17 00:00:00 2001 From: Trezy Date: Tue, 26 May 2026 23:30:15 -0500 Subject: [PATCH 171/250] docs: blog for 2.9 release Signed-off-by: Trezy Signed-off-by: Trezy --- packages/docs/content/blog/happyview-2.9.md | 81 +++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 packages/docs/content/blog/happyview-2.9.md diff --git a/packages/docs/content/blog/happyview-2.9.md b/packages/docs/content/blog/happyview-2.9.md new file mode 100644 index 0000000..5421367 --- /dev/null +++ b/packages/docs/content/blog/happyview-2.9.md @@ -0,0 +1,81 @@ +--- +title: "HappyView v2.9" +description: "Backfill concurrency, db.query filters, multi-device DPoP sessions, and a mountain of performance fixes." +date: 2026-05-26 +author: + name: "Trezy" + avatar: "/authors/trezy.webp" +tags: + - announcements +--- + +While there's not a lot of big, shiny new features this time around, 2.9 is chock full of performance improvements and bug fixes to make everybody's life better. + +## Backfill, but make it concurrent + +The biggest change is that PDS resolution and record fetching now run concurrently. Previously, HappyView resolved every DID's PDS endpoint before it started fetching any records. For large backfills with hundreds of thousands of DIDs, that meant the fetcher sat idle for potentially hours. Now fetching starts as soon as the first DIDs are resolved and runs alongside resolution for the rest of the job. + +On top of that: + +- **Pause and resume** — you can now manually pause a running backfill and pick it back up later. No lost progress. +- **Concurrency settings** — new settings in the dashboard let you tune PDS concurrency, DID concurrency per PDS, and PLC directory concurrency. HappyView will recommend a restart if the settings require a larger connection pool than the one currently running. +- **Concurrent collection discovery** — the repo discovery phase now runs multiple collection queries in parallel instead of sequentially. +- **Batch record inserts** — record inserts are now batched, significantly reducing database round trips during the fetch phase. +- **Separate connection pool** — backfill jobs now use their own database connection pool so they can't starve the main app of connections during heavy backfills. + +The backfill details view got a significant overhaul: progress indicators are more detailed and more accessible. + +## `db.query` filters + +You can now filter records directly in `db.query` without writing raw SQL or post-processing in Lua: + +```lua +local result = db.query({ + collection = "com.example.post", + filter = { field = "status", value = "published" }, +}) +``` + +Filters support comparison operators (`=`, `!=`, `>`, `<`, `>=`, `<=`), `AND`/`OR` groups, and nesting up to 5 levels deep. Field paths use the same dot notation and array indices as `sort` (e.g. `author.handle`, `scores[0]`). + +```lua +local result = db.query({ + collection = "com.example.post", + filter = { + op = "AND", + conditions = { + { field = "status", value = "published" }, + { field = "views", op = ">", value = 100 }, + }, + }, +}) +``` + +Full docs are in the [Database API reference](/docs/api-reference/lua/database-api). + +## Auth fixes + +There were actually bugs that have been making my life hard, but I _finally_ figured them out. + +First, users were basically limited to one auth session per client. If you signed into [Cartridge](https://cartridge.dev) from a second device, it would kill your other auth session. Whoops. + +Second, there were scenarios where the PDS may refresh the auth session while a HappyView XRPC was in-progress. IF that happened, HappyView would handle it internally so any other requests in that XRPC worked, but _it didn't return the refreshed tokens to the client._ Follow up requests from the client would break. Double whoops. + +Both of these are fixed properly now, AND I added a couple new endpoints so clients can allow users to see and manage their active sessions: + +- `GET /oauth/sessions/{did}/devices` — list all active sessions +- `DELETE /oauth/sessions/{did}/devices/{session_id}` — revoke a session + +The existing `DELETE /oauth/sessions/{did}` endpoint still works: confidential clients revoke all device sessions for the user, and public clients revoke the session matching their DPoP key. Full details in the [Authentication guide](/docs/getting-started/authentication#6-managing-device-sessions). + +## SDK fix + +If you tried to use `@happyview/oauth-client` with the latest versions of the `@atproto/*` SDKs, things would break because of a missing parameter. `@happyview/oauth-client` now provides that parameter and should also be backwards-compatible. + +## CI & infrastructure + +- **Binary releases** — Rust binaries are now published to GitHub Releases alongside Docker images, so you can grab a prebuilt binary directly. + +## Go play + +Full changelog is on [GitHub](https://github.com/gamesgamesgamesgamesgames/happyview/releases/tag/v2.9.0). If you have questions, feature requests, or just need a little help, join the [Cartridge](https://cartridge.dev) [Discord Server](https://discord.gg/BUPnjaBwRZ) and hop into the `#happyview` channel. -- 2.51.2 From fe4f84f1eebdd7aea006c056576e54981f379e5a Mon Sep 17 00:00:00 2001 From: Chris Pardy Date: Fri, 1 May 2026 07:46:55 -0400 Subject: [PATCH 172/250] feat(scripts): trigger-keyed scripts subsystem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the legacy `index_hook` lookup with a trigger-keyed scripts table where each row's PK IS the trigger string the dispatcher resolves on. There's no separate "name" or "host column" — bindings, names, and inline-vs-named all collapse into one column. Trigger grammar: record.index: — wildcard for any record event record.create: — specifically a create event record.update: — specifically an update event record.delete: — specifically a delete event xrpc.query: — XRPC query handler xrpc.procedure: — XRPC procedure handler labeler.apply: — label whose uri is at://// labeler.apply:_actor — label whose uri is a bare DID Cascade for record events ONLY: the dispatcher tries `record.:` first, falls back to `record.index:`. No cascade for XRPC or labeler triggers. Schema (one new migration, no data copy — origin/dev had no host columns to migrate from): - New `scripts` table (id PK + body / description / script_type + timestamps). - New `dead_letter_scripts` table (script_ref carries the trigger id). - Re-grants `scripts:read` to lexicon-readers, `scripts:manage` to lexicon-managers. Code surface: - New `src/lua/scripts.rs` dispatcher: ParsedTrigger grammar + validator, ScriptRow / ResolvedScript, `resolve` / `resolve_record_event` (with cascade), `run_record_event_script` (fail-open + retry + dead-letter), `run_label_applied_script`, `trigger_for_label_uri` (at:// → nsid, bare DID → _actor), and `run_record_event_once` for the dead-letter retry path. - New `src/admin/scripts.rs` CRUD (list / get / upsert / patch / delete) with trigger-id grammar validation at write-time and Lua body validation via `crate::lua::validate_script`. - New `Permission::ScriptsRead` / `Permission::ScriptsManage`. - `src/labeler.rs::apply_label` computes the trigger from `label.uri` and runs the script chain before persisting; rewritten labels persist; nil-returning scripts skip. - `src/record_handler.rs::handle_record_event` calls `run_record_event_script(state, &collection, &action, ...)` for both create/update and delete actions. - `src/xrpc/procedure.rs` and `src/xrpc/query.rs` look up via the new dispatcher (trigger `xrpc.procedure:` / `xrpc.query:`) before falling through to the default PDS-write / list flows. - `src/admin/dead_letters.rs::retry_single` resolves via the new dispatcher's cascade (404s if no script matches now). - Legacy `execute_hook_script`, `HookEvent`, and `run_hook_once` removed from `src/lua/execute.rs`. - `register_record_api` refactored to take Optional Claims / PdsAuth; new `register_record_api_no_auth` public wrapper for the no-auth contexts (record / labeler / query). PDS-touching methods (`r:save`, `r:delete`, `Record.save_all`) error cleanly with "no PDS auth in this script context" when registered without auth. - `r:save_local()` / `r:delete_local()` instance methods + `Record.delete_local(uri)` static for local-only mutation in any script context. - `r:delete()` proceeds with the local delete even on PDS failure (operator's logical action is removal regardless of PDS state). Legacy `lexicons.index_hook` column is retained but inert — operators with existing data manually port into a `record.index:` script row via the dashboard. Tests: - 12 new lib tests in `src/lua/scripts.rs` covering trigger grammar, NSID validation, label URI routing, and the `_actor` special case. - 8 integration tests in `tests/lua_record_api.rs` covering the Record local API + the no-PDS-auth boundary. - 18 e2e tests in `tests/e2e_scripts.rs` covering admin CRUD, trigger validation, the cascade rule, label-script + record-event Record local mutation, and the dead-letter behavior when a label script reaches for `r:save()`. - The 4 query-script lib tests in `src/lua/xrpc_api.rs` updated to seed scripts via the new table (plus a single-connection test pool so the in-memory sqlite is shared). Signed-off-by: Chris Pardy Signed-off-by: Trezy --- .../20260501000000_scripts_by_trigger.sql | 58 ++ .../20260501000000_scripts_by_trigger.sql | 52 ++ src/admin/backfill.rs | 37 +- src/admin/dead_letters.rs | 57 +- src/admin/mod.rs | 8 + src/admin/permissions.rs | 23 + src/admin/scripts.rs | 373 ++++++++ src/labeler.rs | 59 +- src/lua/execute.rs | 517 +---------- src/lua/mod.rs | 13 +- src/lua/record.rs | 262 +++++- src/lua/scripts.rs | 855 ++++++++++++++++++ src/lua/xrpc_api.rs | 90 +- src/record_handler.rs | 151 ++-- src/xrpc/procedure.rs | 12 +- src/xrpc/query.rs | 14 +- tests/common/db.rs | 4 +- tests/common/mod.rs | 2 + tests/e2e_scripts.rs | 833 +++++++++++++++++ tests/lua_record_api.rs | 478 ++++++++++ 20 files changed, 3210 insertions(+), 688 deletions(-) create mode 100644 migrations/postgres/20260501000000_scripts_by_trigger.sql create mode 100644 migrations/sqlite/20260501000000_scripts_by_trigger.sql create mode 100644 src/admin/scripts.rs create mode 100644 src/lua/scripts.rs create mode 100644 tests/e2e_scripts.rs create mode 100644 tests/lua_record_api.rs diff --git a/migrations/postgres/20260501000000_scripts_by_trigger.sql b/migrations/postgres/20260501000000_scripts_by_trigger.sql new file mode 100644 index 0000000..a277839 --- /dev/null +++ b/migrations/postgres/20260501000000_scripts_by_trigger.sql @@ -0,0 +1,58 @@ +-- Trigger-keyed scripts subsystem. +-- +-- Each row's `id` IS the trigger string the dispatcher resolves on: +-- record.index: — wildcard for any record event +-- record.create: — specifically a create event (cascades to wildcard) +-- record.update: — specifically an update event +-- record.delete: — specifically a delete event +-- xrpc.query: — XRPC query handler +-- xrpc.procedure: — XRPC procedure handler +-- labeler.apply: — label arrives whose subject is at://// +-- labeler.apply:_actor — label arrives whose subject is a bare DID +-- +-- Cascade rule (record events ONLY): the dispatcher tries +-- `record.:` first, falls back to `record.index:` if no +-- specific row exists. No cascade for XRPC or labeler triggers — those +-- resolve directly. Operators express per-action surgical control by +-- creating action-specific rows; the wildcard `record.index:` covers +-- "one body for everything" with branching on `event.action`. +CREATE TABLE scripts ( + id TEXT PRIMARY KEY, + body TEXT NOT NULL, + description TEXT, + script_type TEXT NOT NULL DEFAULT 'lua', + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +-- Permanently-failed runs from the firehose-driven runners (record / label +-- events). XRPC scripts fail-closed and never land here. +CREATE TABLE dead_letter_scripts ( + id BIGSERIAL PRIMARY KEY, + script_ref TEXT NOT NULL, -- = the trigger id whose script failed + host_kind TEXT NOT NULL, -- 'record' | 'label' + host_id TEXT NOT NULL, -- e.g. ':' for record, '' for label + payload JSONB NOT NULL, -- event payload for re-run + error TEXT NOT NULL, + attempts INT NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + resolved_at TIMESTAMPTZ +); + +CREATE INDEX idx_dead_letter_scripts_host + ON dead_letter_scripts (host_kind, host_id, created_at DESC); +CREATE INDEX idx_dead_letter_scripts_resolved_at + ON dead_letter_scripts (resolved_at); + +-- Permissions: management for users who can manage lexicons; read for those who can read. +INSERT INTO user_permissions (user_id, permission) +SELECT user_id, 'scripts:manage' + FROM user_permissions + WHERE permission = 'lexicons:create' +ON CONFLICT (user_id, permission) DO NOTHING; + +INSERT INTO user_permissions (user_id, permission) +SELECT user_id, 'scripts:read' + FROM user_permissions + WHERE permission = 'lexicons:read' +ON CONFLICT (user_id, permission) DO NOTHING; diff --git a/migrations/sqlite/20260501000000_scripts_by_trigger.sql b/migrations/sqlite/20260501000000_scripts_by_trigger.sql new file mode 100644 index 0000000..c1420c1 --- /dev/null +++ b/migrations/sqlite/20260501000000_scripts_by_trigger.sql @@ -0,0 +1,52 @@ +-- Trigger-keyed scripts subsystem. +-- +-- Each row's `id` IS the trigger string the dispatcher resolves on: +-- record.index: — wildcard for any record event +-- record.create: — specifically a create event (cascades to wildcard) +-- record.update: — specifically an update event +-- record.delete: — specifically a delete event +-- xrpc.query: — XRPC query handler +-- xrpc.procedure: — XRPC procedure handler +-- labeler.apply: — label arrives whose subject is at://// +-- labeler.apply:_actor — label arrives whose subject is a bare DID +-- +-- See migrations/postgres/20260501000000_scripts_by_trigger.sql for design notes. +-- SQLite mirror. +CREATE TABLE scripts ( + id TEXT PRIMARY KEY, + body TEXT NOT NULL, + description TEXT, + script_type TEXT NOT NULL DEFAULT 'lua', + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')) +); + +CREATE TABLE dead_letter_scripts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + script_ref TEXT NOT NULL, -- = the trigger id whose script failed + host_kind TEXT NOT NULL, -- 'record' | 'label' (xrpc fails-closed; never dead-letters) + host_id TEXT NOT NULL, -- e.g. ':' for record, '' for label + payload TEXT NOT NULL, -- JSON-serialized event for re-run + error TEXT NOT NULL, + attempts INTEGER NOT NULL DEFAULT 0, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + resolved_at TEXT +); + +CREATE INDEX idx_dead_letter_scripts_host + ON dead_letter_scripts (host_kind, host_id, created_at DESC); +CREATE INDEX idx_dead_letter_scripts_resolved_at + ON dead_letter_scripts (resolved_at); + +-- Permissions: management for users who can manage lexicons; read for those who can read. +INSERT INTO user_permissions (user_id, permission, granted_at) +SELECT user_id, 'scripts:manage', datetime('now') + FROM user_permissions + WHERE permission = 'lexicons:create' +ON CONFLICT (user_id, permission) DO NOTHING; + +INSERT INTO user_permissions (user_id, permission, granted_at) +SELECT user_id, 'scripts:read', datetime('now') + FROM user_permissions + WHERE permission = 'lexicons:read' +ON CONFLICT (user_id, permission) DO NOTHING; diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 5d6cb36..4300ae1 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -1305,9 +1305,6 @@ async fn fetch_records_from_pds( let base = pds_endpoint.trim_end_matches('/'); let mut cursor: Option = None; let mut count: u32 = 0; - let index_hook = state.lexicons.get_index_hook(collection).await; - let env_vars = crate::lua::load_env_vars_cached(&state.db, state.db_backend).await; - loop { if cancelled.load(Ordering::Relaxed) { break; @@ -1350,27 +1347,19 @@ async fn fetch_records_from_pds( let rkey = entry.uri.rsplit('/').next().unwrap_or_default().to_string(); let uri = format!("at://{did}/{collection}/{rkey}"); - let rec_to_store = if let Some(ref script) = index_hook { - let hook_result = crate::lua::execute_hook_script(&crate::lua::HookEvent { - state, - lexicon_id: collection, - script, - action: "create", - uri: &uri, - did, - collection, - rkey: &rkey, - record: Some(&entry.value), - cached_env_vars: Some(&env_vars), - }) - .await; - - match hook_result { - None => continue, - Some(v) => v, - } - } else { - entry.value.clone() + let rec_to_store = match crate::lua::run_record_event_script( + state, + collection, + "create", + &uri, + did, + &rkey, + Some(&entry.value), + ) + .await + { + None => continue, + Some(v) => v, }; batch.push(PreparedRecord { diff --git a/src/admin/dead_letters.rs b/src/admin/dead_letters.rs index 1ddf68d..c5a1018 100644 --- a/src/admin/dead_letters.rs +++ b/src/admin/dead_letters.rs @@ -10,7 +10,7 @@ use super::permissions::Permission; use crate::AppState; use crate::db::{adapt_sql, now_rfc3339, parse_dt}; use crate::error::AppError; -use crate::lua::{HookEvent, run_hook_once}; +use crate::lua::{resolve_record_event, run_record_event_once}; use crate::record_handler::RecordEvent; // --------------------------------------------------------------------------- @@ -487,29 +487,22 @@ async fn resolve_bulk_ids(state: &AppState, body: &BulkRequest) -> Result Result, AppError> { - let backend = state.db_backend; - let sql = adapt_sql("SELECT index_hook FROM lexicons WHERE id = ?", backend); - let row: Option<(Option,)> = sqlx::query_as(&sql) - .bind(lexicon_id) - .fetch_optional(&state.db) - .await - .map_err(|e| AppError::Internal(format!("failed to fetch index hook: {e}")))?; - Ok(row.and_then(|r| r.0)) -} - -/// Retry a single dead letter by re-running its hook script. +/// Retry a single dead letter by re-running its trigger-keyed script. +/// +/// Resolves the script via the new dispatcher's cascade +/// (`record.:` → `record.index:`). If no script is +/// bound for the cascade now, returns 404 — the operator either deleted +/// the script or never re-bound it under the new naming. async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { let dl = fetch_dead_letter_for_action(state, id).await?; - let script = get_index_hook_from_db(state, &dl.lexicon_id) - .await? + let resolved = resolve_record_event(state, &dl.collection, &dl.action) + .await .ok_or_else(|| { - AppError::NotFound(format!("no index hook found for lexicon {}", dl.lexicon_id)) + AppError::NotFound(format!( + "no script bound for record.{}:{} (or record.index:{})", + dl.action, dl.collection, dl.collection + )) })?; let record: Option = dl @@ -517,20 +510,18 @@ async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { .as_deref() .and_then(|r| serde_json::from_str(r).ok()); - let event = HookEvent { + match run_record_event_once( state, - lexicon_id: &dl.lexicon_id, - script: &script, - action: &dl.action, - uri: &dl.uri, - did: &dl.did, - collection: &dl.collection, - rkey: &dl.rkey, - record: record.as_ref(), - cached_env_vars: None, - }; - - match run_hook_once(&event).await { + &resolved, + &dl.action, + &dl.uri, + &dl.did, + &dl.collection, + &dl.rkey, + record.as_ref(), + ) + .await + { Ok(_) => { mark_resolved(state, id).await?; Ok(()) diff --git a/src/admin/mod.rs b/src/admin/mod.rs index f168637..1446af2 100644 --- a/src/admin/mod.rs +++ b/src/admin/mod.rs @@ -14,6 +14,7 @@ mod plugins; mod proxy_config; mod records; mod script_variables; +mod scripts; pub mod settings; mod stats; pub(crate) mod types; @@ -90,6 +91,13 @@ pub fn admin_routes(_state: AppState) -> Router { post(script_variables::upsert).get(script_variables::list), ) .route("/script-variables/{key}", delete(script_variables::delete)) + .route("/scripts", get(scripts::list).post(scripts::upsert)) + .route( + "/scripts/{id}", + get(scripts::get) + .patch(scripts::patch) + .delete(scripts::delete), + ) .route("/labelers", post(labelers::add).get(labelers::list)) .route( "/labelers/{did}", diff --git a/src/admin/permissions.rs b/src/admin/permissions.rs index 1bc0977..9105490 100644 --- a/src/admin/permissions.rs +++ b/src/admin/permissions.rs @@ -108,6 +108,11 @@ pub enum Permission { SpacesManageRecords, #[serde(rename = "spaces:manage-credentials")] SpacesManageCredentials, + + #[serde(rename = "scripts:read")] + ScriptsRead, + #[serde(rename = "scripts:manage")] + ScriptsManage, } impl Permission { @@ -155,6 +160,8 @@ impl Permission { Self::SpacesManageInvites => "spaces:manage-invites", Self::SpacesManageRecords => "spaces:manage-records", Self::SpacesManageCredentials => "spaces:manage-credentials", + Self::ScriptsRead => "scripts:read", + Self::ScriptsManage => "scripts:manage", } } @@ -406,6 +413,18 @@ impl Permission { description: "Issue and revoke space access credentials", category: "Spaces", }, + Self::ScriptsRead => PermissionInfo { + key: "scripts:read", + name: "View Scripts", + description: "View trigger-keyed scripts", + category: "Scripts", + }, + Self::ScriptsManage => PermissionInfo { + key: "scripts:manage", + name: "Manage Scripts", + description: "Create, update, and delete trigger-keyed scripts", + category: "Scripts", + }, } } @@ -453,6 +472,8 @@ impl Permission { Self::SpacesManageInvites, Self::SpacesManageRecords, Self::SpacesManageCredentials, + Self::ScriptsRead, + Self::ScriptsManage, ]) } } @@ -571,6 +592,7 @@ impl Template { Permission::LexiconsRead, Permission::RecordsRead, Permission::ScriptVariablesRead, + Permission::ScriptsRead, Permission::UsersRead, Permission::ApiKeysRead, Permission::BackfillRead, @@ -592,6 +614,7 @@ impl Template { perms.insert(Permission::LexiconsDelete); perms.insert(Permission::ScriptVariablesCreate); perms.insert(Permission::ScriptVariablesDelete); + perms.insert(Permission::ScriptsManage); perms.insert(Permission::RecordsDelete); perms.insert(Permission::LabelersCreate); perms.insert(Permission::LabelersRead); diff --git a/src/admin/scripts.rs b/src/admin/scripts.rs new file mode 100644 index 0000000..76a1279 --- /dev/null +++ b/src/admin/scripts.rs @@ -0,0 +1,373 @@ +//! `/admin/scripts` CRUD — trigger-keyed scripts. +//! +//! Each script row's `id` IS its trigger string (e.g. +//! `record.create:com.example.thing`, `xrpc.query:com.foo.list`, +//! `labeler.apply:_actor`). The dispatcher in [`crate::lua::scripts`] +//! looks up scripts by id at firing time; this admin surface lets +//! operators CRUD those rows. +//! +//! Validation: +//! - On create / patch the body is parsed against the script_type +//! (lua → [`crate::lua::validate_script`]). Invalid bodies are +//! rejected at write-time with a 400. +//! - The trigger id is parsed against +//! [`crate::lua::ParsedTrigger::parse`]; unknown prefixes / invalid +//! NSIDs are rejected at write-time with a 400. +//! +//! Permissions: `scripts:read` for GETs; `scripts:manage` for the +//! mutating endpoints. + +use axum::Json; +use axum::extract::{Path, State}; +use axum::http::StatusCode; +use serde::{Deserialize, Serialize}; + +use crate::AppState; +use crate::db::{adapt_sql, now_rfc3339}; +use crate::error::AppError; +use crate::event_log::{EventLog, Severity, log_event}; +use crate::lua::{ParsedTrigger, ScriptLanguage}; + +use super::auth::UserAuth; +use super::permissions::Permission; + +// --------------------------------------------------------------------------- +// Wire types +// --------------------------------------------------------------------------- + +/// One row from the `scripts` table — what GET endpoints return. +#[derive(Debug, Clone, Serialize)] +pub(super) struct ScriptResponse { + /// The trigger id; identifies the row. + pub id: String, + pub script_type: String, + pub body: String, + pub description: Option, + pub created_at: String, + pub updated_at: String, +} + +/// Body for `POST /admin/scripts` (create or replace by `id`). +#[derive(Debug, Deserialize)] +pub(super) struct UpsertBody { + pub id: String, + /// Defaults to `"lua"` server-side if omitted. + #[serde(default)] + pub script_type: Option, + pub body: String, + #[serde(default)] + pub description: Option, +} + +/// Body for `PATCH /admin/scripts/{id}`. All fields optional. +#[derive(Debug, Deserialize)] +pub(super) struct PatchBody { + #[serde(default)] + pub script_type: Option, + #[serde(default)] + pub body: Option, + /// Set to `Some(None)` to clear via JSON `null`. + #[serde(default, deserialize_with = "deserialize_optional_field")] + pub description: Option>, +} + +/// Three-state field deserializer: missing → `None`, `null` → `Some(None)`, +/// string → `Some(Some(s))`. Lets PATCH distinguish "leave as-is" from +/// "clear to NULL". +fn deserialize_optional_field<'de, D>(d: D) -> Result>, D::Error> +where + D: serde::Deserializer<'de>, +{ + let v: Option = Option::deserialize(d)?; + Ok(Some(v)) +} + +// --------------------------------------------------------------------------- +// Routes +// --------------------------------------------------------------------------- + +/// `GET /admin/scripts` — list all rows. Clients group by trigger family +/// in the UI. +pub(super) async fn list( + State(state): State, + auth: UserAuth, +) -> Result>, AppError> { + auth.require(Permission::ScriptsRead).await?; + + let backend = state.db_backend; + let sql = adapt_sql( + "SELECT id, script_type, body, description, created_at, updated_at + FROM scripts + ORDER BY id", + backend, + ); + #[allow(clippy::type_complexity)] + let rows: Vec<(String, String, String, Option, String, String)> = sqlx::query_as(&sql) + .fetch_all(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to list scripts: {e}")))?; + + let scripts: Vec = rows + .into_iter() + .map( + |(id, script_type, body, description, created_at, updated_at)| ScriptResponse { + id, + script_type, + body, + description, + created_at, + updated_at, + }, + ) + .collect(); + + Ok(Json(scripts)) +} + +/// `GET /admin/scripts/{id}` — fetch one row. +pub(super) async fn get( + State(state): State, + auth: UserAuth, + Path(id): Path, +) -> Result, AppError> { + auth.require(Permission::ScriptsRead).await?; + fetch_one(&state, &id).await.map(Json) +} + +/// `POST /admin/scripts` — create or replace a row by `id`. Returns the +/// upserted row. Status `201 Created` for a new row, `200 OK` for an +/// update. +pub(super) async fn upsert( + State(state): State, + auth: UserAuth, + Json(body): Json, +) -> Result<(StatusCode, Json), AppError> { + auth.require(Permission::ScriptsManage).await?; + + // Validate the trigger id grammar up-front (400 with a clear message). + let _trigger = ParsedTrigger::parse(&body.id).map_err(AppError::BadRequest)?; + + let script_type = body.script_type.unwrap_or_default(); + validate_body_for_type(&body.body, script_type)?; + + let backend = state.db_backend; + let now = now_rfc3339(); + let description = body.description.as_deref().filter(|s| !s.is_empty()); + + // Distinguish create vs update so we can return 201 vs 200. + let pre_exists: Option<(String,)> = + sqlx::query_as(&adapt_sql("SELECT id FROM scripts WHERE id = ?", backend)) + .bind(&body.id) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to check script existence: {e}")))?; + let was_new = pre_exists.is_none(); + + let sql = adapt_sql( + r#" + INSERT INTO scripts (id, script_type, body, description, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?) + ON CONFLICT (id) DO UPDATE SET + script_type = EXCLUDED.script_type, + body = EXCLUDED.body, + description = EXCLUDED.description, + updated_at = EXCLUDED.updated_at + "#, + backend, + ); + sqlx::query(&sql) + .bind(&body.id) + .bind(script_type.as_str()) + .bind(&body.body) + .bind(description) + .bind(&now) + .bind(&now) + .execute(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to upsert script: {e}")))?; + + log_event( + &state.db, + EventLog { + event_type: if was_new { + "script.created".to_string() + } else { + "script.updated".to_string() + }, + severity: Severity::Info, + actor_did: Some(auth.did.clone()), + subject: Some(body.id.clone()), + detail: serde_json::json!({ + "script_type": script_type.as_str(), + }), + }, + backend, + ) + .await; + + let row = fetch_one(&state, &body.id).await?; + let status = if was_new { + StatusCode::CREATED + } else { + StatusCode::OK + }; + Ok((status, Json(row))) +} + +/// `PATCH /admin/scripts/{id}` — partial update. At least one of +/// `script_type` / `body` / `description` must be present. +pub(super) async fn patch( + State(state): State, + auth: UserAuth, + Path(id): Path, + Json(body): Json, +) -> Result, AppError> { + auth.require(Permission::ScriptsManage).await?; + + if body.script_type.is_none() && body.body.is_none() && body.description.is_none() { + return Err(AppError::BadRequest( + "patch requires at least one of: script_type, body, description".into(), + )); + } + // Patching a body or script_type? We need a body to validate against + // the (possibly new) language. Patching script_type alone is + // ambiguous (we'd be validating the existing body against the new + // language without re-checking it makes sense), so reject it. + if body.script_type.is_some() && body.body.is_none() { + return Err(AppError::BadRequest( + "patching script_type requires body alongside (so the server can re-validate)".into(), + )); + } + if let Some(ref new_body) = body.body { + let lang = body.script_type.unwrap_or_default(); + validate_body_for_type(new_body, lang)?; + } + + // Existence check + fetch current values. + let existing = fetch_one(&state, &id).await?; + + let backend = state.db_backend; + let now = now_rfc3339(); + let new_script_type = body + .script_type + .map(|s| s.as_str().to_string()) + .unwrap_or(existing.script_type); + let new_body = body.body.unwrap_or(existing.body); + let new_description = match body.description { + Some(desc_opt) => desc_opt, + None => existing.description, + }; + + let sql = adapt_sql( + r#" + UPDATE scripts + SET script_type = ?, + body = ?, + description = ?, + updated_at = ? + WHERE id = ? + "#, + backend, + ); + sqlx::query(&sql) + .bind(&new_script_type) + .bind(&new_body) + .bind(new_description.as_deref()) + .bind(&now) + .bind(&id) + .execute(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to patch script: {e}")))?; + + log_event( + &state.db, + EventLog { + event_type: "script.updated".to_string(), + severity: Severity::Info, + actor_did: Some(auth.did.clone()), + subject: Some(id.clone()), + detail: serde_json::json!({ + "script_type": new_script_type, + }), + }, + backend, + ) + .await; + + let row = fetch_one(&state, &id).await?; + Ok(Json(row)) +} + +/// `DELETE /admin/scripts/{id}` — remove a row. 204 on success, 404 if +/// no row matched. +pub(super) async fn delete( + State(state): State, + auth: UserAuth, + Path(id): Path, +) -> Result { + auth.require(Permission::ScriptsManage).await?; + + let backend = state.db_backend; + let sql = adapt_sql("DELETE FROM scripts WHERE id = ?", backend); + let result = sqlx::query(&sql) + .bind(&id) + .execute(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to delete script: {e}")))?; + if result.rows_affected() == 0 { + return Err(AppError::NotFound(format!("script '{id}' not found"))); + } + + log_event( + &state.db, + EventLog { + event_type: "script.deleted".to_string(), + severity: Severity::Info, + actor_did: Some(auth.did.clone()), + subject: Some(id), + detail: serde_json::json!({}), + }, + backend, + ) + .await; + Ok(StatusCode::NO_CONTENT) +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/// Look up a single script row; 404 if missing. +async fn fetch_one(state: &AppState, id: &str) -> Result { + let backend = state.db_backend; + let sql = adapt_sql( + "SELECT id, script_type, body, description, created_at, updated_at + FROM scripts WHERE id = ?", + backend, + ); + #[allow(clippy::type_complexity)] + let row: Option<(String, String, String, Option, String, String)> = + sqlx::query_as(&sql) + .bind(id) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to fetch script: {e}")))?; + let (id, script_type, body, description, created_at, updated_at) = + row.ok_or_else(|| AppError::NotFound(format!("script '{id}' not found")))?; + Ok(ScriptResponse { + id, + script_type, + body, + description, + created_at, + updated_at, + }) +} + +/// Validate the script body against its declared language. Rejects +/// invalid bodies with a 400 at write-time. +fn validate_body_for_type(body: &str, lang: ScriptLanguage) -> Result<(), AppError> { + match lang { + ScriptLanguage::Lua => crate::lua::validate_script(body).map_err(AppError::BadRequest), + } +} diff --git a/src/labeler.rs b/src/labeler.rs index 52fe0ab..5e79cc0 100644 --- a/src/labeler.rs +++ b/src/labeler.rs @@ -253,7 +253,7 @@ async fn run_subscription_once( last_seq = message.seq; for label in &message.labels { - apply_label(&state.db, label, state.db_backend).await; + apply_label(state, label).await; } events_since_cursor_save += 1; @@ -323,22 +323,53 @@ fn http_to_ws(url: &str) -> String { } } -async fn apply_label(db: &sqlx::AnyPool, label: &Label, backend: DatabaseBackend) { - if label.neg { +/// Persist a label received from a subscribed upstream labeler. +/// +/// Before touching the DB we run the trigger-keyed script chain (computed +/// from `label.uri` — `labeler.apply:` for at-uri subjects, +/// `labeler.apply:_actor` for bare DIDs). The script can rewrite any field +/// of the label (including `val` or `neg`) or return nil to skip +/// persistence. Failure is fail-open: a dead-lettered script proceeds with +/// the original label, so a buggy script can't permanently break the +/// firehose. +async fn apply_label(state: &AppState, label: &Label) { + let event = crate::lua::LabelAppliedEvent { + src: label.src.clone(), + uri: label.uri.clone(), + val: label.val.clone(), + neg: label.neg, + cts: label.cts.clone(), + exp: label.exp.clone(), + }; + let final_label = match crate::lua::run_label_applied_script(state, event).await { + crate::lua::LabelHookOutcome::Continue(next) => next, + crate::lua::LabelHookOutcome::Skip => { + tracing::debug!( + src = %label.src, uri = %label.uri, val = %label.val, + "label.applied script skipped persistence" + ); + return; + } + }; + + let db = &state.db; + let backend = state.db_backend; + + if final_label.neg { // Negation label — remove it. let delete_sql = adapt_sql( "DELETE FROM labels WHERE src = ? AND uri = ? AND val = ?", backend, ); if let Err(e) = sqlx::query(&delete_sql) - .bind(&label.src) - .bind(&label.uri) - .bind(&label.val) + .bind(&final_label.src) + .bind(&final_label.uri) + .bind(&final_label.val) .execute(db) .await { tracing::warn!( - src = %label.src, uri = %label.uri, val = %label.val, + src = %final_label.src, uri = %final_label.uri, val = %final_label.val, "failed to delete negated label: {e}" ); } @@ -356,16 +387,16 @@ async fn apply_label(db: &sqlx::AnyPool, label: &Label, backend: DatabaseBackend ); if let Err(e) = sqlx::query(&insert_sql) - .bind(&label.src) - .bind(&label.uri) - .bind(&label.val) - .bind(&label.cts) - .bind(&label.exp) + .bind(&final_label.src) + .bind(&final_label.uri) + .bind(&final_label.val) + .bind(&final_label.cts) + .bind(&final_label.exp) .execute(db) .await { tracing::warn!( - src = %label.src, uri = %label.uri, val = %label.val, + src = %final_label.src, uri = %final_label.uri, val = %final_label.val, "failed to upsert label: {e}" ); } @@ -452,7 +483,7 @@ async fn backfill_from_labeler( let response: QueryLabelsResponse = resp.json().await?; for label in &response.labels { - apply_label(&state.db, label, state.db_backend).await; + apply_label(state, label).await; } Ok(()) diff --git a/src/lua/execute.rs b/src/lua/execute.rs index 5f54131..3ed5a23 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -4,12 +4,11 @@ use mlua::LuaSerdeExt; use serde_json::Value; use std::collections::HashMap; use std::sync::Arc; -use std::sync::atomic::Ordering; use std::time::Instant; use crate::AppState; use crate::auth::Claims; -use crate::db::{DatabaseBackend, adapt_sql, now_rfc3339}; +use crate::db::{DatabaseBackend, adapt_sql}; use crate::error::{AppError, LUA_AUTH_ERROR_PREFIX, ScriptErrorType, parse_lua_line}; use crate::event_log::{EventLog, Severity, log_event}; use crate::lexicon::ParsedLexicon; @@ -33,38 +32,6 @@ async fn load_env_vars(db: &sqlx::AnyPool, backend: DatabaseBackend) -> HashMap< .collect() } -/// Load env vars, reusing a cached result if less than 30 seconds old. -/// Avoids per-record DB queries during backfill. -pub(crate) async fn load_env_vars_cached( - db: &sqlx::AnyPool, - backend: DatabaseBackend, -) -> HashMap { - use std::sync::Mutex; - - static CACHE: std::sync::OnceLock)>> = - std::sync::OnceLock::new(); - - let cache = CACHE.get_or_init(|| { - Mutex::new(( - Instant::now() - std::time::Duration::from_secs(60), - HashMap::new(), - )) - }); - { - let guard = cache.lock().unwrap(); - if guard.0.elapsed() < std::time::Duration::from_secs(30) { - return guard.1.clone(); - } - } - - let vars = load_env_vars(db, backend).await; - { - let mut guard = cache.lock().unwrap(); - *guard = (Instant::now(), vars.clone()); - } - vars -} - /// Execute a Lua script for a procedure endpoint. #[allow(clippy::too_many_arguments)] pub async fn execute_procedure_script( @@ -294,9 +261,9 @@ pub async fn execute_procedure_script( if let Err(e) = record::register_record_api( &lua, - state_arc, - claims_arc, - pds_auth_arc, + state_arc.clone(), + Some(claims_arc), + Some(pds_auth_arc), delegate_did.map(|s| s.to_string()), ) { let error_message = format!("failed to register Record API: {e}"); @@ -673,7 +640,9 @@ pub async fn execute_query_script( return Err(AppError::Internal(error_message)); } - if let Err(e) = atproto_api::register_atproto_api(&lua, state_arc, claims.map(|c| c.did())) { + if let Err(e) = + atproto_api::register_atproto_api(&lua, state_arc.clone(), claims.map(|c| c.did())) + { let error_message = format!("failed to register atproto API: {e}"); log_event( &state.db, @@ -695,6 +664,32 @@ pub async fn execute_query_script( return Err(AppError::Internal(error_message)); } + // Register the Record API in no-auth mode. Queries don't have a PDS + // auth context — the local-only methods (Record.load, :save_local, + // :delete_local, Record.delete_local) work; PDS-touching variants + // error with the no-PDS-auth message. + if let Err(e) = record::register_record_api_no_auth(&lua, state_arc) { + let error_message = format!("failed to register Record API: {e}"); + log_event( + &state.db, + EventLog { + event_type: "script.error".to_string(), + severity: Severity::Error, + actor_did: None, + subject: Some(method.to_string()), + detail: serde_json::json!({ + "error": error_message, + "script_source": script_source, + "method": method, + "duration_ms": start.elapsed().as_millis() as u64, + }), + }, + backend, + ) + .await; + return Err(AppError::Internal(error_message)); + } + if let Err(e) = context::set_query_context( &lua, method, @@ -914,449 +909,3 @@ pub async fn execute_query_script( Ok(Json(json_value).into_response()) } - -/// Context for a hook execution triggered by a record index event. -pub struct HookEvent<'a> { - pub state: &'a AppState, - pub lexicon_id: &'a str, - pub script: &'a str, - pub action: &'a str, - pub uri: &'a str, - pub did: &'a str, - pub collection: &'a str, - pub rkey: &'a str, - pub record: Option<&'a Value>, - pub cached_env_vars: Option<&'a HashMap>, -} - -/// Execute a Lua hook script triggered by a record index event. -/// -/// Runs **before** the record is indexed. The return value determines what -/// gets stored: -/// - `None` → skip the DB operation entirely -/// - `Some(value)` → use that value for the insert/update -/// -/// Retries up to 3 times with exponential backoff (1s, 2s, 4s). -/// On final failure, dead-letters the event and returns `Some(original_record)` -/// (fail-open so indexing is not permanently blocked). -pub async fn execute_hook_script(event: &HookEvent<'_>) -> Option { - let max_attempts: i32 = 4; // 1 initial + 3 retries - let mut last_error = String::new(); - let backend = event.state.db_backend; - - for attempt in 0..max_attempts { - if attempt > 0 { - let delay = std::time::Duration::from_secs(1 << (attempt - 1)); // 1s, 2s, 4s - tokio::time::sleep(delay).await; - } - - match run_hook_once(event).await { - Ok(hook_result) => { - if event.state.verbose_event_logging.load(Ordering::Relaxed) { - log_event( - &event.state.db, - EventLog { - event_type: "hook.executed".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(event.uri.to_string()), - detail: serde_json::json!({ - "lexicon_id": event.lexicon_id, - "action": event.action, - "collection": event.collection, - "attempts": attempt + 1, - }), - }, - backend, - ) - .await; - } - return hook_result; - } - Err(e) => { - last_error = e; - tracing::warn!( - uri = event.uri, - lexicon_id = event.lexicon_id, - attempt = attempt + 1, - "hook execution failed: {last_error}" - ); - } - } - } - - // All retries exhausted — dead-letter the event and fail-open with the - // original record so indexing is not permanently blocked. - tracing::error!( - uri = event.uri, - lexicon_id = event.lexicon_id, - "hook dead-lettered after {max_attempts} attempts" - ); - - let record_str = event - .record - .map(|r| serde_json::to_string(r).unwrap_or_default()); - let dead_letter_sql = adapt_sql( - r#" - INSERT INTO dead_letter_hooks (id, lexicon_id, uri, did, collection, rkey, action, record, error, attempts, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - "#, - backend, - ); - if let Err(e) = sqlx::query(&dead_letter_sql) - .bind(uuid::Uuid::new_v4().to_string()) - .bind(event.lexicon_id) - .bind(event.uri) - .bind(event.did) - .bind(event.collection) - .bind(event.rkey) - .bind(event.action) - .bind(&record_str) - .bind(&last_error) - .bind(max_attempts) - .bind(now_rfc3339()) - .execute(&event.state.db) - .await - { - tracing::error!(uri = event.uri, "failed to insert dead letter hook: {e}"); - } - - log_event( - &event.state.db, - EventLog { - event_type: "hook.dead_lettered".to_string(), - severity: Severity::Error, - actor_did: None, - subject: Some(event.uri.to_string()), - detail: serde_json::json!({ - "lexicon_id": event.lexicon_id, - "action": event.action, - "collection": event.collection, - "error": last_error, - "attempts": max_attempts, - }), - }, - backend, - ) - .await; - - // Fail-open: return the original record so indexing proceeds. - event.record.cloned() -} - -/// Execute a hook script once. -/// -/// Returns `Ok(None)` when `handle()` returns nil (meaning "skip indexing"), -/// `Ok(Some(value))` when it returns a table (use that as the record), or -/// `Ok(Some(original))` for other non-nil types. -pub async fn run_hook_once(event: &HookEvent<'_>) -> Result, String> { - let lua = sandbox::create_sandbox().map_err(|e| format!("failed to create Lua VM: {e}"))?; - let backend = event.state.db_backend; - - let state_arc = Arc::new(event.state.clone()); - - db_api::register_db_api(&lua, state_arc.clone()) - .map_err(|e| format!("failed to register db API: {e}"))?; - - http_api::register_http_api(&lua, state_arc.clone()) - .map_err(|e| format!("failed to register http API: {e}"))?; - - super::xrpc_api::register_xrpc_api(&lua, state_arc.clone(), Some(event.did.to_string())) - .map_err(|e| format!("failed to register xrpc API: {e}"))?; - - atproto_api::register_atproto_api(&lua, state_arc, None) - .map_err(|e| format!("failed to register atproto API: {e}"))?; - - context::set_hook_context( - &lua, - event.action, - event.uri, - event.did, - event.collection, - event.rkey, - event.record, - ) - .map_err(|e| format!("failed to set hook context: {e}"))?; - - let owned_env_vars; - let env_vars = if let Some(cached) = event.cached_env_vars { - cached - } else { - owned_env_vars = load_env_vars(&event.state.db, backend).await; - &owned_env_vars - }; - context::set_env_context(&lua, env_vars) - .map_err(|e| format!("failed to set env context: {e}"))?; - - lua.load(event.script) - .exec() - .map_err(|e| format!("script load failed: {e}"))?; - - let handle: mlua::Function = lua - .globals() - .get("handle") - .map_err(|e| format!("script missing handle function: {e}"))?; - - let result: mlua::Value = handle - .call_async::(()) - .await - .map_err(|e| e.to_string())?; - - match result { - mlua::Value::Nil => Ok(None), - mlua::Value::Table(_) => { - let json_value: Value = lua - .from_value(result) - .map_err(|e| format!("failed to convert lua table to JSON: {e}"))?; - Ok(Some(json_value)) - } - _ => { - // Non-nil, non-table return — proceed with the original record. - Ok(event.record.cloned()) - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::config::Config; - use crate::db::DatabaseBackend; - use crate::lexicon::LexiconRegistry; - use serde_json::json; - use tokio::sync::watch; - - fn test_state() -> AppState { - let config = Config { - host: "127.0.0.1".into(), - port: 3000, - database_url: String::new(), - database_backend: crate::db::DatabaseBackend::Sqlite, - public_url: String::new(), - session_secret: "test-secret".into(), - jetstream_url: String::new(), - relay_url: String::new(), - plc_url: String::new(), - static_dir: String::new(), - base_path: None, - event_log_retention_days: 30, - app_name: None, - logo_uri: None, - tos_uri: None, - policy_uri: None, - token_encryption_key: None, - default_rate_limit_capacity: 100, - default_rate_limit_refill_rate: 2.0, - }; - let (tx, _) = watch::channel(vec![]); - let (labeler_tx, _) = watch::channel(()); - sqlx::any::install_default_drivers(); - let test_db = sqlx::AnyPool::connect_lazy("sqlite::memory:").unwrap(); - let atrium_http = std::sync::Arc::new(atrium_oauth::DefaultHttpClient::default()); - let did_resolver = atrium_identity::did::CommonDidResolver::new( - atrium_identity::did::CommonDidResolverConfig { - plc_directory_url: "https://plc.directory".into(), - http_client: std::sync::Arc::clone(&atrium_http), - }, - ); - let handle_resolver = atrium_identity::handle::AtprotoHandleResolver::new( - atrium_identity::handle::AtprotoHandleResolverConfig { - dns_txt_resolver: crate::dns::NativeDnsResolver::new(), - http_client: atrium_http, - }, - ); - let oauth = atrium_oauth::OAuthClient::new(atrium_oauth::OAuthClientConfig { - client_metadata: atrium_oauth::AtprotoLocalhostClientMetadata { - redirect_uris: Some(vec!["http://127.0.0.1:0/auth/callback".into()]), - scopes: Some(vec![atrium_oauth::Scope::Known( - atrium_oauth::KnownScope::Atproto, - )]), - }, - keys: None, - state_store: crate::auth::oauth_store::DbStateStore::new( - test_db.clone(), - crate::db::DatabaseBackend::Sqlite, - ), - session_store: crate::auth::oauth_store::DbSessionStore::new( - test_db.clone(), - crate::db::DatabaseBackend::Sqlite, - ), - resolver: atrium_oauth::OAuthResolverConfig { - did_resolver, - handle_resolver, - authorization_server_metadata: Default::default(), - protected_resource_metadata: Default::default(), - }, - }) - .expect("Failed to create test OAuth client"); - AppState { - config, - http: reqwest::Client::new(), - db: test_db.clone(), - backfill_db: test_db.clone(), - db_backend: DatabaseBackend::Sqlite, - domain_cache: crate::domain::DomainCache::new(), - lexicons: LexiconRegistry::new(), - collections_tx: tx, - labeler_subscriptions_tx: labeler_tx, - rate_limiter: crate::rate_limit::RateLimiter::new( - crate::rate_limit::RateLimitDefaults { - query_cost: 1, - procedure_cost: 1, - proxy_cost: 1, - }, - ), - oauth: std::sync::Arc::new(crate::auth::OAuthClientRegistry::new(std::sync::Arc::new( - oauth, - ))), - oauth_state_store: crate::auth::oauth_store::DbStateStore::new( - test_db.clone(), - crate::db::DatabaseBackend::Sqlite, - ), - cookie_key: axum_extra::extract::cookie::Key::derive_from( - b"test-secret-for-tests-only-not-production", - ), - plugin_registry: std::sync::Arc::new(crate::plugin::PluginRegistry::new()), - wasm_runtime: std::sync::Arc::new( - crate::plugin::WasmRuntime::new().expect("wasm runtime"), - ), - attestation_signer: None, - official_registry: std::sync::Arc::new(tokio::sync::RwLock::new( - crate::plugin::official_registry::OfficialRegistryState::default(), - )), - official_registry_config: crate::plugin::official_registry::RegistryConfig::production( - ), - proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( - crate::proxy_config::ProxyConfig::default(), - ))), - backfill_events_tx: tokio::sync::broadcast::channel(16).0, - verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), - } - } - - fn make_event<'a>( - state: &'a AppState, - script: &'a str, - action: &'a str, - record: Option<&'a Value>, - ) -> HookEvent<'a> { - HookEvent { - state, - lexicon_id: "test.lexicon", - script, - action, - uri: "at://did:plc:test/test.collection/rkey1", - did: "did:plc:test", - collection: "test.collection", - rkey: "rkey1", - record, - cached_env_vars: None, - } - } - - #[tokio::test] - async fn hook_runs_simple_script() { - let state = test_state(); - let event = make_event(&state, "function handle() end", "create", None); - let result = run_hook_once(&event).await; - assert!(result.is_ok(), "expected Ok, got: {:?}", result); - // handle() returns nil implicitly, so result should be None (skip). - assert!(result.unwrap().is_none()); - } - - #[tokio::test] - async fn hook_returns_nil_to_skip() { - let state = test_state(); - let record = json!({"name": "Test"}); - let event = make_event( - &state, - "function handle() return nil end", - "create", - Some(&record), - ); - let result = run_hook_once(&event).await; - assert!(result.is_ok(), "expected Ok, got: {:?}", result); - assert!(result.unwrap().is_none(), "nil return should produce None"); - } - - #[tokio::test] - async fn hook_returns_modified_record() { - let state = test_state(); - let record = json!({"name": "Original"}); - let script = r#" - function handle() - return { name = "Modified", extra = true } - end - "#; - let event = make_event(&state, script, "create", Some(&record)); - let result = run_hook_once(&event).await; - assert!(result.is_ok(), "expected Ok, got: {:?}", result); - let value = result.unwrap(); - assert!(value.is_some(), "table return should produce Some"); - let v = value.unwrap(); - assert_eq!(v["name"], "Modified"); - assert_eq!(v["extra"], true); - } - - #[tokio::test] - async fn hook_fails_on_missing_handle() { - let state = test_state(); - let event = make_event(&state, "function other() end", "create", None); - let result = run_hook_once(&event).await; - assert!(result.is_err()); - let err = result.unwrap_err(); - assert!(err.contains("handle"), "expected handle error, got: {err}"); - } - - #[tokio::test] - async fn hook_fails_on_syntax_error() { - let state = test_state(); - let event = make_event(&state, "function handle(", "create", None); - let result = run_hook_once(&event).await; - assert!(result.is_err()); - } - - #[tokio::test] - async fn hook_has_access_to_context_globals() { - let state = test_state(); - let script = r#" - function handle() - if action ~= "create" then error("wrong action: " .. tostring(action)) end - if uri ~= "at://did:plc:test/test.collection/rkey1" then error("wrong uri") end - if did ~= "did:plc:test" then error("wrong did") end - if collection ~= "test.collection" then error("wrong collection") end - if rkey ~= "rkey1" then error("wrong rkey") end - end - "#; - let event = make_event(&state, script, "create", None); - let result = run_hook_once(&event).await; - assert!(result.is_ok(), "expected Ok, got: {:?}", result); - } - - #[tokio::test] - async fn hook_has_access_to_record() { - let state = test_state(); - let record = json!({"name": "Test"}); - let script = r#" - function handle() - if record.name ~= "Test" then error("wrong name: " .. tostring(record.name)) end - end - "#; - let event = make_event(&state, script, "create", Some(&record)); - let result = run_hook_once(&event).await; - assert!(result.is_ok(), "expected Ok, got: {:?}", result); - } - - #[tokio::test] - async fn hook_record_nil_on_delete() { - let state = test_state(); - let script = r#" - function handle() - if record ~= nil then error("expected nil record") end - end - "#; - let event = make_event(&state, script, "delete", None); - let result = run_hook_once(&event).await; - assert!(result.is_ok(), "expected Ok, got: {:?}", result); - } -} diff --git a/src/lua/mod.rs b/src/lua/mod.rs index a535d21..7177414 100644 --- a/src/lua/mod.rs +++ b/src/lua/mod.rs @@ -3,15 +3,18 @@ mod context; pub mod db_api; mod execute; mod http_api; -mod record; +pub mod record; pub(crate) mod sandbox; +pub mod scripts; pub(crate) mod tid; mod xrpc_api; #[allow(unused_imports)] pub(crate) use context::SpaceContext; -pub(crate) use execute::{ - HookEvent, execute_hook_script, execute_procedure_script, execute_query_script, - load_env_vars_cached, run_hook_once, -}; +pub(crate) use execute::{execute_procedure_script, execute_query_script}; pub(crate) use sandbox::validate_script; +pub use scripts::{ + LabelAppliedEvent, LabelHookOutcome, ParsedTrigger, ResolvedScript, ScriptLanguage, ScriptRow, + TriggerKind, resolve, resolve_record_event, run_label_applied_script, run_record_event_once, + run_record_event_script, trigger_for_label_uri, +}; diff --git a/src/lua/record.rs b/src/lua/record.rs index 16c7e3d..71bea79 100644 --- a/src/lua/record.rs +++ b/src/lua/record.rs @@ -30,16 +30,44 @@ const INTERNAL_FIELDS: &[&str] = &[ "_repo_override", ]; +/// Error message returned when a script calls a PDS-touching method +/// (`:save()` / `:delete()` / `Record.save_all`) from a context without +/// caller credentials — e.g. label scripts, record-event scripts, or +/// query handlers. +const NO_PDS_AUTH_MSG: &str = "no PDS auth in this script context — \ + use :save_local() / :delete_local() / Record.delete_local(uri) for local-only mutation"; + +/// Register the `Record` global with only the local-only surface +/// (`Record.load`, `:save_local`, `:delete_local`, `Record.delete_local`). +/// PDS-touching methods (`:save`, `:delete`, `Record.save_all`) are still +/// exposed but error with [`NO_PDS_AUTH_MSG`] when called. +/// +/// This is the entry point for label scripts, record-event scripts, and +/// query handlers — contexts that have no caller credentials to round-trip +/// records through a PDS. +pub fn register_record_api_no_auth(lua: &Lua, state: Arc) -> LuaResult<()> { + register_record_api(lua, state, None, None, None) +} + /// Register the `Record` global constructor and static methods. -/// Only registered for procedure scripts (not queries). /// -/// When `delegate_did` is `Some`, record writes default to the delegate's repo -/// instead of the caller's DID. Scripts can still override via `record:set_repo()`. -pub fn register_record_api( +/// `claims` / `pds_auth` are optional: when both are `Some`, the full +/// surface (`:save()`, `:delete()`, `Record.save_all`) round-trips through +/// the PDS. When either is `None` (label scripts, record-event scripts, +/// query handlers), only the local-only methods are usable +/// (`:save_local()`, `:delete_local()`, `Record.delete_local(uri)`); the +/// PDS-touching methods error with [`NO_PDS_AUTH_MSG`]. Most callers want +/// [`register_record_api_no_auth`] instead — this lower-level entry point +/// exposes the internal `PdsAuth` type and is only public to the crate. +/// +/// When `delegate_did` is `Some`, record writes default to the delegate's +/// repo instead of the caller's DID. Scripts can still override via +/// `record:set_repo()`. +pub(crate) fn register_record_api( lua: &Lua, state: Arc, - claims: Arc, - pds_auth: Arc, + claims: Option>, + pds_auth: Option>, delegate_did: Option, ) -> LuaResult<()> { // -- methods table (shared by all Record instances) -- @@ -57,6 +85,8 @@ pub fn register_record_api( let pds_auth = pds_auth.clone(); let delegate_did = delegate_did.clone(); async move { + let claims = claims.ok_or_else(|| mlua::Error::runtime(NO_PDS_AUTH_MSG))?; + let pds_auth = pds_auth.ok_or_else(|| mlua::Error::runtime(NO_PDS_AUTH_MSG))?; let backend = state.db_backend; let collection: String = this.raw_get("_collection")?; let schema: mlua::Value = this.raw_get("_schema")?; @@ -232,6 +262,8 @@ pub fn register_record_api( let pds_auth = pds_auth.clone(); let delegate_did = delegate_did.clone(); async move { + let claims = claims.ok_or_else(|| mlua::Error::runtime(NO_PDS_AUTH_MSG))?; + let pds_auth = pds_auth.ok_or_else(|| mlua::Error::runtime(NO_PDS_AUTH_MSG))?; let backend = state.db_backend; let uri: String = this.raw_get::>("_uri")?.ok_or_else(|| { mlua::Error::runtime("cannot delete a Record that has no _uri") @@ -255,24 +287,39 @@ pub fn register_record_api( "rkey": rkey, }); - let resp = pds_auth + // Try the PDS delete. We log-and-continue on failure so the + // operator's intent ("remove this record") is still + // reflected in the local DB even when the PDS is down or + // refuses the call. The local row is the source of truth + // for the index. + match pds_auth .post_json(&state, repo, "com.atproto.repo.deleteRecord", &pds_body) .await - .map_err(|e| pds_error("deleteRecord", e))?; - - if !resp.status().is_success() { - let status = resp.status(); - let body = resp.text().await.unwrap_or_default(); - return Err(mlua::Error::runtime(format!( - "PDS deleteRecord returned {status}: {body}" - ))); + { + Ok(resp) if resp.status().is_success() => {} + Ok(resp) => { + let status = resp.status(); + let body = resp.text().await.unwrap_or_default(); + tracing::warn!( + uri = %uri, + "PDS deleteRecord returned {status}: {body} \ + — proceeding with local delete anyway" + ); + } + Err(e) => { + tracing::warn!( + uri = %uri, + "PDS deleteRecord failed: {e} \ + — proceeding with local delete anyway" + ); + } } - // Delete from local DB + // Always delete locally — operator's logical action is + // "remove this record from view" regardless of PDS outcome. let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); let _ = sqlx::query(&delete_sql).bind(&uri).execute(&state.db).await; - // Clear _uri and _cid this.raw_set("_uri", mlua::Value::Nil)?; this.raw_set("_cid", mlua::Value::Nil)?; @@ -282,6 +329,156 @@ pub fn register_record_api( methods.set("delete", delete_fn)?; } + // :save_local() — upsert into local DB only, never touches a PDS. + // Works in any script context (no auth required). + // + // For records loaded via `Record.load(uri)` or saved via `:save()` + // (i.e. those with an `_uri`), the repo+rkey are parsed back out of + // the URI. For brand-new records (no `_uri`), we fall back to + // `_repo_override` / `claims.did()` for the repo, and generate an + // rkey via `_key_type` if `_rkey` isn't set. Errors clearly when no + // DID can be determined. + { + let state = state.clone(); + let claims = claims.clone(); + let save_local_fn = lua.create_async_function(move |lua, this: mlua::Table| { + let state = state.clone(); + let claims = claims.clone(); + async move { + let backend = state.db_backend; + let collection: String = this.raw_get("_collection")?; + let schema: mlua::Value = this.raw_get("_schema")?; + + if let mlua::Value::Table(ref schema_table) = schema { + validate_required_fields(&this, schema_table)?; + } + + let data = extract_record_data(&lua, &this, &collection)?; + let data_str = serde_json::to_string(&data).unwrap_or_default(); + let now = now_rfc3339(); + + let existing_uri: Option = this.raw_get("_uri")?; + let (uri, repo, rkey) = if let Some(uri) = existing_uri { + // Parse repo (DID) and rkey out of the URI: + // at://// + let trimmed = uri + .strip_prefix("at://") + .ok_or_else(|| mlua::Error::runtime(format!("invalid AT URI: {uri}")))?; + let mut parts = trimmed.splitn(3, '/'); + let repo = parts + .next() + .ok_or_else(|| mlua::Error::runtime(format!("invalid AT URI: {uri}")))? + .to_string(); + let _col = parts.next(); + let rkey = parts + .next() + .ok_or_else(|| mlua::Error::runtime(format!("invalid AT URI: {uri}")))? + .to_string(); + (uri, repo, rkey) + } else { + // CREATE path — no URI yet. Compute repo + rkey, build URI. + let repo_override: Option = this.raw_get("_repo_override")?; + let repo = repo_override + .or_else(|| claims.as_ref().map(|c| c.did().to_string())) + .ok_or_else(|| { + mlua::Error::runtime( + "save_local() needs a DID — call :set_repo(\"did:plc:...\") \ + or load the record first", + ) + })?; + + let rkey: Option = this.raw_get("_rkey")?; + let rkey = if let Some(rk) = rkey { + rk + } else { + let key_type: Option = this.raw_get("_key_type")?; + match key_type.as_deref() { + Some("tid") | Some("any") | None => generate_tid(), + Some(s) if s.starts_with("literal:") => { + s["literal:".len()..].to_string() + } + Some("nsid") => { + return Err(mlua::Error::runtime( + "cannot auto-generate rkey for nsid key type — \ + call set_rkey() first", + )); + } + Some(other) => { + return Err(mlua::Error::runtime(format!( + "unknown key type '{other}'" + ))); + } + } + }; + let uri = format!("at://{repo}/{collection}/{rkey}"); + (uri, repo, rkey) + }; + + // Upsert. Sentinel CID `""` — no PDS round-trip means we + // have no real CID to record; consumers reading the row + // should treat empty CID as "local-only write". + let upsert_sql = adapt_sql( + r#"INSERT INTO records (uri, did, collection, rkey, record, cid, indexed_at, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT (uri) DO UPDATE + SET record = EXCLUDED.record, + cid = EXCLUDED.cid, + indexed_at = ?"#, + backend, + ); + sqlx::query(&upsert_sql) + .bind(&uri) + .bind(&repo) + .bind(&collection) + .bind(&rkey) + .bind(&data_str) + .bind("") + .bind(&now) + .bind(&now) + .bind(&now) + .execute(&state.db) + .await + .map_err(|e| mlua::Error::runtime(format!("save_local upsert failed: {e}")))?; + + let _ = sync_refs(&state.db, &uri, &collection, &data, backend).await; + + this.raw_set("_uri", uri.as_str())?; + this.raw_set("_cid", "")?; + + Ok(this) + } + })?; + methods.set("save_local", save_local_fn)?; + } + + // :delete_local() — local DB delete only, never touches a PDS. + // Idempotent: succeeds whether or not a row existed at the URI. + { + let state = state.clone(); + let delete_local_fn = lua.create_async_function(move |_lua, this: mlua::Table| { + let state = state.clone(); + async move { + let backend = state.db_backend; + let uri: String = this.raw_get::>("_uri")?.ok_or_else(|| { + mlua::Error::runtime("cannot delete_local a Record that has no _uri") + })?; + + let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + sqlx::query(&delete_sql) + .bind(&uri) + .execute(&state.db) + .await + .map_err(|e| mlua::Error::runtime(format!("delete_local failed: {e}")))?; + + this.raw_set("_uri", mlua::Value::Nil)?; + this.raw_set("_cid", mlua::Value::Nil)?; + + Ok(this) + } + })?; + methods.set("delete_local", delete_local_fn)?; + } + // :set_key_type(type) { let set_key_type_fn = @@ -470,6 +667,8 @@ pub fn register_record_api( let pds_auth = pds_auth.clone(); let delegate_did = delegate_did.clone(); async move { + let claims = claims.ok_or_else(|| mlua::Error::runtime(NO_PDS_AUTH_MSG))?; + let pds_auth = pds_auth.ok_or_else(|| mlua::Error::runtime(NO_PDS_AUTH_MSG))?; let backend = state.db_backend; // Extract save data from each record (sync) type SaveItem = (mlua::Table, String, Option, Option, Option, Value); @@ -729,8 +928,8 @@ pub fn register_record_api( // Record.load_all(uris) { - let state = state; - let metatable_c = metatable; + let state = state.clone(); + let metatable_c = metatable.clone(); let load_all_fn = lua.create_async_function(move |lua, uris_table: mlua::Table| { let state = state.clone(); let metatable = metatable_c.clone(); @@ -811,6 +1010,31 @@ pub fn register_record_api( record_table.set("load_all", load_all_fn)?; } + // Record.delete_local(uri) — fire-and-forget local-only delete by URI. + // The common one-liner for label-script reactions like: + // if event.val == "spam" then Record.delete_local(event.uri) end + // Returns true if a row was deleted, false if no row matched. + // Always succeeds (no error) regardless of whether the row existed. + { + let state = state; + let delete_local_static_fn = lua.create_async_function(move |_lua, uri: String| { + let state = state.clone(); + async move { + let backend = state.db_backend; + let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); + let res = sqlx::query(&delete_sql) + .bind(&uri) + .execute(&state.db) + .await + .map_err(|e| { + mlua::Error::runtime(format!("Record.delete_local failed: {e}")) + })?; + Ok(res.rows_affected() > 0) + } + })?; + record_table.set("delete_local", delete_local_static_fn)?; + } + // -- Make Record callable via __call metamethod -- let record_mt = lua.create_table()?; { diff --git a/src/lua/scripts.rs b/src/lua/scripts.rs new file mode 100644 index 0000000..43970dc --- /dev/null +++ b/src/lua/scripts.rs @@ -0,0 +1,855 @@ +//! Trigger-keyed scripts dispatcher. +//! +//! Each row in the `scripts` table is identified by a TRIGGER STRING — the +//! `id` column IS the binding. There's no separate "name" or "host column." +//! +//! Trigger grammar: +//! +//! - `record.index:` — fires for any record event on `` +//! (wildcard fallback). +//! - `record.create:` / `record.update:` / +//! `record.delete:` — fires only for that specific action. +//! - `xrpc.query:` / `xrpc.procedure:` — fires when the +//! matching XRPC method is invoked. +//! - `labeler.apply:` — fires when a label arrives whose `uri` +//! is `at:////`. +//! - `labeler.apply:_actor` — fires when a label arrives whose `uri` +//! is a bare DID (actor-level label). +//! +//! **Cascade for record events ONLY**: the dispatcher tries +//! `record.:` first, falls back to `record.index:` +//! if no specific row exists. No cascade for XRPC or labeler triggers. +//! +//! Fail mode varies by host: +//! +//! - **Record / label events**: fail-OPEN — a buggy script eats its +//! retry budget then dead-letters; the upstream operation proceeds +//! with whatever the dispatcher returns (original record / original +//! label). The firehose has no caller to surface errors to. +//! - **XRPC procedures / queries**: fail-CLOSED, single-shot — a script +//! error becomes a 5xx response. The XRPC dispatchers in +//! [`crate::xrpc`] resolve the script via [`resolve`] and call +//! [`super::execute::execute_procedure_script`] / +//! [`super::execute::execute_query_script`] directly. + +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::sync::Arc; + +use crate::AppState; +use crate::db::{DatabaseBackend, adapt_sql, now_rfc3339}; +use crate::event_log::{EventLog, Severity, log_event}; + +use super::{atproto_api, context, db_api, http_api, record, sandbox, xrpc_api}; + +/// Number of attempts (1 initial + 3 retries) before dead-lettering. +const MAX_ATTEMPTS: u32 = 4; + +// --------------------------------------------------------------------------- +// Trigger grammar +// --------------------------------------------------------------------------- + +/// Which family a trigger belongs to. Determines auth context, fail mode, +/// and which event payload shape the script expects. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum TriggerKind { + RecordIndex, + RecordCreate, + RecordUpdate, + RecordDelete, + XrpcQuery, + XrpcProcedure, + LabelerApply, +} + +/// A trigger id parsed into `(kind, suffix)`. The suffix is either an NSID +/// (`record.*`, `xrpc.*`, `labeler.apply:`) or the literal `"_actor"` +/// for `labeler.apply:_actor`. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ParsedTrigger { + pub kind: TriggerKind, + pub suffix: String, +} + +impl ParsedTrigger { + /// Reconstruct the canonical trigger id from `(kind, suffix)`. + pub fn id(&self) -> String { + match self.kind { + TriggerKind::RecordIndex => format!("record.index:{}", self.suffix), + TriggerKind::RecordCreate => format!("record.create:{}", self.suffix), + TriggerKind::RecordUpdate => format!("record.update:{}", self.suffix), + TriggerKind::RecordDelete => format!("record.delete:{}", self.suffix), + TriggerKind::XrpcQuery => format!("xrpc.query:{}", self.suffix), + TriggerKind::XrpcProcedure => format!("xrpc.procedure:{}", self.suffix), + TriggerKind::LabelerApply => format!("labeler.apply:{}", self.suffix), + } + } + + /// Parse a trigger id. Returns a structured error message naming the + /// valid prefixes when the input doesn't match the grammar. + pub fn parse(id: &str) -> Result { + let (prefix, suffix) = id.split_once(':').ok_or_else(|| { + format!( + "trigger id '{id}' must contain a ':' separator; \ + valid prefixes: record.{{index,create,update,delete}}:, \ + xrpc.{{query,procedure}}:, labeler.apply:" + ) + })?; + + if suffix.is_empty() { + return Err(format!("trigger id '{id}' has empty suffix")); + } + + let kind = match prefix { + "record.index" => TriggerKind::RecordIndex, + "record.create" => TriggerKind::RecordCreate, + "record.update" => TriggerKind::RecordUpdate, + "record.delete" => TriggerKind::RecordDelete, + "xrpc.query" => TriggerKind::XrpcQuery, + "xrpc.procedure" => TriggerKind::XrpcProcedure, + "labeler.apply" => TriggerKind::LabelerApply, + other => { + return Err(format!( + "unknown trigger prefix '{other}'; valid prefixes: \ + record.{{index,create,update,delete}}, xrpc.{{query,procedure}}, \ + labeler.apply" + )); + } + }; + + // Suffix validation: NSID for everything except `labeler.apply:_actor`. + match (kind, suffix) { + (TriggerKind::LabelerApply, "_actor") => {} + _ => validate_nsid(suffix)?, + } + + Ok(Self { + kind, + suffix: suffix.to_string(), + }) + } +} + +/// Minimal NSID validation: at least two dot-separated segments, each +/// non-empty and matching `[a-zA-Z][a-zA-Z0-9-]*`. Mirrors the AT Protocol +/// spec's character class for everyday use; full Unicode strictness lives +/// in atrium downstream. +fn validate_nsid(nsid: &str) -> Result<(), String> { + let segments: Vec<&str> = nsid.split('.').collect(); + if segments.len() < 2 { + return Err(format!( + "invalid NSID '{nsid}': need at least 2 dot-separated segments" + )); + } + for (idx, seg) in segments.iter().enumerate() { + if seg.is_empty() { + return Err(format!("invalid NSID '{nsid}': empty segment")); + } + let mut chars = seg.chars(); + let first = chars.next().unwrap(); + if !first.is_ascii_alphabetic() { + return Err(format!( + "invalid NSID '{nsid}': segment {idx} must start with a letter" + )); + } + for c in chars { + if !c.is_ascii_alphanumeric() && c != '-' { + return Err(format!( + "invalid NSID '{nsid}': segment {idx} contains invalid character '{c}'" + )); + } + } + } + Ok(()) +} + +// --------------------------------------------------------------------------- +// ScriptLanguage +// --------------------------------------------------------------------------- + +/// Runtime a script is written for. Today only [`ScriptLanguage::Lua`] ships; +/// the column is stamped per row so a future runtime (e.g. TypeScript) can +/// land without a schema migration. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum ScriptLanguage { + #[default] + Lua, +} + +impl ScriptLanguage { + pub fn as_str(&self) -> &'static str { + match self { + Self::Lua => "lua", + } + } + + pub fn parse_str(s: &str) -> Option { + match s { + "lua" => Some(Self::Lua), + _ => None, + } + } + + pub fn supported() -> &'static [&'static str] { + &["lua"] + } +} + +// --------------------------------------------------------------------------- +// Script row + resolution +// --------------------------------------------------------------------------- + +/// A row from the `scripts` table — the wire shape the admin API returns. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct ScriptRow { + pub id: String, + pub body: String, + pub description: Option, + pub script_type: String, + pub created_at: String, + pub updated_at: String, +} + +/// A script ready to execute. +#[derive(Clone, Debug)] +pub struct ResolvedScript { + pub id: String, + pub language: ScriptLanguage, + pub body: String, +} + +/// Look up a single trigger id. Returns `None` when no row matches OR when +/// the row's `script_type` is unknown to this binary (logged at warn). +pub async fn resolve(state: &AppState, trigger_id: &str) -> Option { + let sql = adapt_sql( + "SELECT id, body, script_type FROM scripts WHERE id = ?", + state.db_backend, + ); + let row: Option<(String, String, String)> = match sqlx::query_as(&sql) + .bind(trigger_id) + .fetch_optional(&state.db) + .await + { + Ok(r) => r, + Err(e) => { + tracing::warn!(trigger_id, "scripts lookup failed: {e}"); + return None; + } + }; + let (id, body, script_type) = row?; + let language = match ScriptLanguage::parse_str(&script_type) { + Some(l) => l, + None => { + tracing::warn!( + id, + script_type, + "unknown script_type; this binary supports: {}", + ScriptLanguage::supported().join(", ") + ); + return None; + } + }; + Some(ResolvedScript { id, language, body }) +} + +/// Resolve a record-event trigger with the cascade rule: +/// `record.:` first, then `record.index:`. +pub async fn resolve_record_event( + state: &AppState, + nsid: &str, + action: &str, +) -> Option { + let action_trigger = match action { + "create" => Some(format!("record.create:{nsid}")), + "update" => Some(format!("record.update:{nsid}")), + "delete" => Some(format!("record.delete:{nsid}")), + _ => None, + }; + if let Some(t) = action_trigger + && let Some(s) = resolve(state, &t).await + { + return Some(s); + } + resolve(state, &format!("record.index:{nsid}")).await +} + +// --------------------------------------------------------------------------- +// Record-event runner (fail-open, retry + dead-letter) +// --------------------------------------------------------------------------- + +/// Run the record-event script (if any) for a given event. Returns the +/// record body the indexer should store: `Some(record)` to proceed, +/// `None` to skip indexing. +/// +/// Failure mode is fail-open: a script that exhausts its retry budget is +/// dead-lettered and the indexer proceeds with the original record. +#[allow(clippy::too_many_arguments)] +pub async fn run_record_event_script( + state: &AppState, + nsid: &str, + action: &str, + uri: &str, + did: &str, + rkey: &str, + record: Option<&Value>, +) -> Option { + let resolved = match resolve_record_event(state, nsid, action).await { + Some(s) => s, + // No script for this trigger → indexer keeps the original record. + None => return record.cloned(), + }; + + let host_id = format!("{nsid}:{action}"); + let payload = serde_json::json!({ + "trigger": resolved.id, + "action": action, + "uri": uri, + "did": did, + "collection": nsid, + "rkey": rkey, + "record": record, + }); + + let mut last_error = String::new(); + for attempt in 0..MAX_ATTEMPTS { + if attempt > 0 { + let delay = std::time::Duration::from_secs(1 << (attempt - 1)); + tokio::time::sleep(delay).await; + } + match run_record_event_once(state, &resolved, action, uri, did, nsid, rkey, record).await { + Ok(outcome) => { + log_event( + &state.db, + EventLog { + event_type: "script.executed".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.to_string()), + detail: serde_json::json!({ + "host_kind": "record", + "host_id": host_id, + "trigger": resolved.id, + "attempts": attempt + 1, + }), + }, + state.db_backend, + ) + .await; + return outcome; + } + Err(e) => { + last_error = e; + tracing::warn!( + %uri, + trigger = %resolved.id, + attempt = attempt + 1, + "record script attempt failed: {last_error}" + ); + } + } + } + + write_dead_letter( + state, + &resolved, + "record", + &host_id, + &payload, + &last_error, + MAX_ATTEMPTS, + ) + .await; + log_event( + &state.db, + EventLog { + event_type: "script.dead_lettered".to_string(), + severity: Severity::Error, + actor_did: None, + subject: Some(uri.to_string()), + detail: serde_json::json!({ + "host_kind": "record", + "host_id": host_id, + "trigger": resolved.id, + "error": last_error, + }), + }, + state.db_backend, + ) + .await; + + // Fail-open: indexer proceeds with the original record. + record.cloned() +} + +/// Single attempt at the record-event Lua script. Used internally by the +/// retry loop and externally by admin retry endpoints. +/// +/// Returns `Ok(Some(value))` to continue indexing with `value`, +/// `Ok(None)` when the script returned `nil` (skip), or `Err(msg)` on +/// any execution failure. +#[allow(clippy::too_many_arguments)] +pub async fn run_record_event_once( + state: &AppState, + script: &ResolvedScript, + action: &str, + uri: &str, + did: &str, + collection: &str, + rkey: &str, + record: Option<&Value>, +) -> Result, String> { + if script.language != ScriptLanguage::Lua { + return Err(format!( + "this binary cannot run {} scripts", + script.language.as_str() + )); + } + let lua = sandbox::create_sandbox().map_err(|e| format!("create sandbox: {e}"))?; + let state_arc = Arc::new(state.clone()); + register_default_apis(&lua, &state_arc, Some(did))?; + + // Legacy globals (action, uri, did, collection, rkey, record) for + // back-compat with scripts written against the old `index_hook` + // surface. + context::set_hook_context(&lua, action, uri, did, collection, rkey, record) + .map_err(|e| format!("set hook context: {e}"))?; + + // Also expose an `event` table — same fields, different idiom. New + // scripts can read `event.action` / `event.record.title` instead of + // the bare globals; both styles work. + use mlua::LuaSerdeExt; + let event_value = serde_json::json!({ + "action": action, + "uri": uri, + "did": did, + "collection": collection, + "rkey": rkey, + "record": record, + }); + lua.globals() + .set( + "event", + lua.to_value(&event_value) + .map_err(|e| format!("event lua-conv: {e}"))?, + ) + .map_err(|e| format!("set event global: {e}"))?; + + context::set_env_context(&lua, &load_env_vars(&state.db, state.db_backend).await) + .map_err(|e| format!("set env: {e}"))?; + + lua.load(script.body.as_str()) + .exec() + .map_err(|e| format!("script load: {e}"))?; + let handle: mlua::Function = lua + .globals() + .get("handle") + .map_err(|e| format!("missing handle(): {e}"))?; + let result: mlua::Value = handle + .call_async::(()) + .await + .map_err(|e| e.to_string())?; + + match result { + mlua::Value::Nil => Ok(None), + mlua::Value::Table(_) => { + let v: Value = lua + .from_value(result) + .map_err(|e| format!("convert lua return to JSON: {e}"))?; + Ok(Some(v)) + } + // Non-nil, non-table return — pass-through: keep the original record. + _ => Ok(record.cloned()), + } +} + +// --------------------------------------------------------------------------- +// Label-applied dispatcher (fail-open, retry + dead-letter) +// --------------------------------------------------------------------------- + +/// Payload passed to `labeler.apply:*` scripts. Mirrors the AT Proto label +/// shape from `com.atproto.label.subscribeLabels`. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct LabelAppliedEvent { + pub src: String, + pub uri: String, + pub val: String, + #[serde(default)] + pub neg: bool, + pub cts: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub exp: Option, +} + +/// What an `on_label_applied` script chain decided. +#[derive(Debug)] +pub enum LabelHookOutcome { + /// Persist the (possibly rewritten) label. + Continue(LabelAppliedEvent), + /// Skip persistence — the script returned `nil`. + Skip, +} + +/// Compute the trigger string for a given label. `at://` URIs route to +/// `labeler.apply:` (using the second path segment); everything else +/// (bare DIDs, malformed) routes to `labeler.apply:_actor`. +pub fn trigger_for_label_uri(uri: &str) -> String { + if let Some(rest) = uri.strip_prefix("at://") { + match rest.split('/').nth(1) { + Some(nsid) if !nsid.is_empty() => format!("labeler.apply:{nsid}"), + _ => "labeler.apply:_actor".to_string(), + } + } else { + "labeler.apply:_actor".to_string() + } +} + +/// Run the label-applied script (if any) for an inbound label. Fail-open: +/// dead-lettered failures fall through with the original label. +pub async fn run_label_applied_script( + state: &AppState, + event: LabelAppliedEvent, +) -> LabelHookOutcome { + let trigger = trigger_for_label_uri(&event.uri); + let resolved = match resolve(state, &trigger).await { + Some(s) => s, + None => return LabelHookOutcome::Continue(event), + }; + + let payload = serde_json::to_value(&event).unwrap_or(Value::Null); + let host_id = event.src.clone(); + let original = event.clone(); + + let mut last_error = String::new(); + for attempt in 0..MAX_ATTEMPTS { + if attempt > 0 { + let delay = std::time::Duration::from_secs(1 << (attempt - 1)); + tokio::time::sleep(delay).await; + } + match run_label_lua_once(state, &resolved, &event).await { + Ok(outcome) => return outcome, + Err(e) => { + last_error = e; + tracing::warn!( + src = %event.src, uri = %event.uri, + trigger = %resolved.id, + attempt = attempt + 1, + "label script attempt failed: {last_error}" + ); + } + } + } + write_dead_letter( + state, + &resolved, + "label", + &host_id, + &payload, + &last_error, + MAX_ATTEMPTS, + ) + .await; + LabelHookOutcome::Continue(original) +} + +async fn run_label_lua_once( + state: &AppState, + script: &ResolvedScript, + event: &LabelAppliedEvent, +) -> Result { + if script.language != ScriptLanguage::Lua { + return Err(format!( + "this binary cannot run {} scripts", + script.language.as_str() + )); + } + let lua = sandbox::create_sandbox().map_err(|e| format!("create sandbox: {e}"))?; + let state_arc = Arc::new(state.clone()); + register_default_apis(&lua, &state_arc, None)?; + + use mlua::LuaSerdeExt; + let globals = lua.globals(); + globals + .set("src", event.src.clone()) + .map_err(|e| format!("set src: {e}"))?; + globals + .set("uri", event.uri.clone()) + .map_err(|e| format!("set uri: {e}"))?; + globals + .set("val", event.val.clone()) + .map_err(|e| format!("set val: {e}"))?; + globals + .set("neg", event.neg) + .map_err(|e| format!("set neg: {e}"))?; + globals + .set("cts", event.cts.clone()) + .map_err(|e| format!("set cts: {e}"))?; + match &event.exp { + Some(exp) => globals.set("exp", exp.clone()), + None => globals.set("exp", mlua::Value::Nil), + } + .map_err(|e| format!("set exp: {e}"))?; + let event_value = serde_json::to_value(event).map_err(|e| format!("encode event: {e}"))?; + globals + .set( + "event", + lua.to_value(&event_value) + .map_err(|e| format!("event lua-conv: {e}"))?, + ) + .map_err(|e| format!("set event: {e}"))?; + context::set_env_context(&lua, &load_env_vars(&state.db, state.db_backend).await) + .map_err(|e| format!("set env: {e}"))?; + + lua.load(script.body.as_str()) + .exec() + .map_err(|e| format!("script load: {e}"))?; + let handle: mlua::Function = lua + .globals() + .get("handle") + .map_err(|e| format!("missing handle(): {e}"))?; + let result: mlua::Value = handle + .call_async::(()) + .await + .map_err(|e| e.to_string())?; + + match result { + mlua::Value::Nil => Ok(LabelHookOutcome::Skip), + mlua::Value::Table(_) => { + let v: Value = lua + .from_value(result) + .map_err(|e| format!("convert lua return: {e}"))?; + // Merge: any field the script omitted falls back to the + // original. This makes "filter only" scripts (return `event`) + // and "rewrite val" scripts (return `{ val = "..." }`) both + // ergonomic. + let next = LabelAppliedEvent { + src: extract_string(&v, "src").unwrap_or_else(|| event.src.clone()), + uri: extract_string(&v, "uri").unwrap_or_else(|| event.uri.clone()), + val: extract_string(&v, "val").unwrap_or_else(|| event.val.clone()), + neg: extract_bool(&v, "neg").unwrap_or(event.neg), + cts: extract_string(&v, "cts").unwrap_or_else(|| event.cts.clone()), + exp: extract_string(&v, "exp").or_else(|| event.exp.clone()), + }; + Ok(LabelHookOutcome::Continue(next)) + } + _ => Ok(LabelHookOutcome::Continue(event.clone())), + } +} + +fn extract_string(v: &Value, key: &str) -> Option { + v.get(key).and_then(|x| x.as_str()).map(String::from) +} + +fn extract_bool(v: &Value, key: &str) -> Option { + v.get(key).and_then(|x| x.as_bool()) +} + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +/// Register the default API surface on a fresh sandbox: db / http / xrpc / +/// atproto / Record. `caller_did` flows into xrpc so authenticated calls +/// work; pass `None` for unauthenticated contexts. +/// +/// The Record API is registered in **no-auth mode** here — fine for +/// record-event and label scripts which have no caller credentials. +/// Calling `:save()` / `:delete()` (the PDS-touching variants) errors +/// clearly with the no-PDS-auth message; the local-only variants +/// (`:save_local`, `:delete_local`, `Record.delete_local`) work. +fn register_default_apis( + lua: &mlua::Lua, + state: &Arc, + caller_did: Option<&str>, +) -> Result<(), String> { + db_api::register_db_api(lua, state.clone()).map_err(|e| format!("db api: {e}"))?; + http_api::register_http_api(lua, state.clone()).map_err(|e| format!("http api: {e}"))?; + xrpc_api::register_xrpc_api(lua, state.clone(), caller_did.map(String::from)) + .map_err(|e| format!("xrpc api: {e}"))?; + atproto_api::register_atproto_api(lua, state.clone(), None) + .map_err(|e| format!("atproto api: {e}"))?; + record::register_record_api_no_auth(lua, state.clone()) + .map_err(|e| format!("record api: {e}"))?; + Ok(()) +} + +/// Load `script_variables` as a flat key→value map for the `env` global. +async fn load_env_vars( + db: &sqlx::AnyPool, + backend: DatabaseBackend, +) -> std::collections::HashMap { + let sql = adapt_sql("SELECT key, value FROM script_variables", backend); + sqlx::query_as::<_, (String, String)>(&sql) + .fetch_all(db) + .await + .unwrap_or_default() + .into_iter() + .collect() +} + +/// Persist a permanently-failed run for later admin triage. +async fn write_dead_letter( + state: &AppState, + script: &ResolvedScript, + host_kind: &str, + host_id: &str, + payload: &Value, + error: &str, + attempts: u32, +) { + let payload_str = serde_json::to_string(payload).unwrap_or_else(|_| "{}".to_string()); + let sql = adapt_sql( + "INSERT INTO dead_letter_scripts + (script_ref, host_kind, host_id, payload, error, attempts, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?)", + state.db_backend, + ); + if let Err(e) = sqlx::query(&sql) + .bind(script.id.as_str()) + .bind(host_kind) + .bind(host_id) + .bind(&payload_str) + .bind(error) + .bind(attempts as i64) + .bind(now_rfc3339()) + .execute(&state.db) + .await + { + tracing::error!( + host_kind, + host_id, + trigger = %script.id, + "failed to write dead_letter_scripts: {e}" + ); + } +} + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parse_record_index_trigger() { + let t = ParsedTrigger::parse("record.index:com.example.thing").unwrap(); + assert_eq!(t.kind, TriggerKind::RecordIndex); + assert_eq!(t.suffix, "com.example.thing"); + assert_eq!(t.id(), "record.index:com.example.thing"); + } + + #[test] + fn parse_record_action_triggers() { + for (prefix, kind) in [ + ("record.create", TriggerKind::RecordCreate), + ("record.update", TriggerKind::RecordUpdate), + ("record.delete", TriggerKind::RecordDelete), + ] { + let id = format!("{prefix}:com.example.thing"); + let t = ParsedTrigger::parse(&id).unwrap(); + assert_eq!(t.kind, kind); + assert_eq!(t.id(), id); + } + } + + #[test] + fn parse_xrpc_triggers() { + let q = ParsedTrigger::parse("xrpc.query:com.example.list").unwrap(); + assert_eq!(q.kind, TriggerKind::XrpcQuery); + let p = ParsedTrigger::parse("xrpc.procedure:com.example.create").unwrap(); + assert_eq!(p.kind, TriggerKind::XrpcProcedure); + } + + #[test] + fn parse_labeler_apply_with_nsid() { + let t = ParsedTrigger::parse("labeler.apply:app.bsky.feed.post").unwrap(); + assert_eq!(t.kind, TriggerKind::LabelerApply); + assert_eq!(t.suffix, "app.bsky.feed.post"); + } + + #[test] + fn parse_labeler_apply_actor_special_case() { + let t = ParsedTrigger::parse("labeler.apply:_actor").unwrap(); + assert_eq!(t.kind, TriggerKind::LabelerApply); + assert_eq!(t.suffix, "_actor"); + } + + #[test] + fn rejects_no_colon() { + let err = ParsedTrigger::parse("record.index").unwrap_err(); + assert!(err.contains("must contain a ':' separator")); + assert!(err.contains("valid prefixes")); + } + + #[test] + fn rejects_unknown_prefix() { + let err = ParsedTrigger::parse("garbage:com.example.thing").unwrap_err(); + assert!(err.contains("unknown trigger prefix 'garbage'")); + } + + #[test] + fn rejects_bad_nsid() { + // single segment + assert!(ParsedTrigger::parse("record.index:foo").is_err()); + // empty suffix + assert!(ParsedTrigger::parse("record.index:").is_err()); + // non-letter start + assert!(ParsedTrigger::parse("record.index:1.foo").is_err()); + // invalid char + assert!(ParsedTrigger::parse("record.index:com.foo!bar").is_err()); + } + + #[test] + fn allows_only_actor_special_case_for_labeler() { + // _actor is not a valid NSID, but it's the literal special case. + assert!(ParsedTrigger::parse("labeler.apply:_actor").is_ok()); + // Other prefixes don't get the _actor escape hatch. + assert!(ParsedTrigger::parse("record.index:_actor").is_err()); + } + + #[test] + fn label_uri_routes_at_uri_to_nsid() { + assert_eq!( + trigger_for_label_uri("at://did:plc:abc/app.bsky.feed.post/rkey1"), + "labeler.apply:app.bsky.feed.post" + ); + } + + #[test] + fn label_uri_routes_bare_did_to_actor() { + assert_eq!(trigger_for_label_uri("did:plc:abc"), "labeler.apply:_actor"); + } + + #[test] + fn label_uri_routes_malformed_at_uri_to_actor() { + // `at://` with no path → no second segment → actor. + assert_eq!( + trigger_for_label_uri("at://did:plc:abc"), + "labeler.apply:_actor" + ); + // `at:///` → second segment exists but is empty → actor. + assert_eq!( + trigger_for_label_uri("at://did:plc:abc/"), + "labeler.apply:_actor" + ); + } + + #[test] + fn script_language_round_trip() { + assert_eq!(ScriptLanguage::Lua.as_str(), "lua"); + assert_eq!(ScriptLanguage::parse_str("lua"), Some(ScriptLanguage::Lua)); + assert_eq!(ScriptLanguage::parse_str("typescript"), None); + assert_eq!(ScriptLanguage::default(), ScriptLanguage::Lua); + } + + #[test] + fn extract_helpers() { + let v = serde_json::json!({"a": "x", "b": true, "c": null}); + assert_eq!(extract_string(&v, "a"), Some("x".into())); + assert_eq!(extract_string(&v, "missing"), None); + assert_eq!(extract_bool(&v, "b"), Some(true)); + assert_eq!(extract_bool(&v, "a"), None); + } +} diff --git a/src/lua/xrpc_api.rs b/src/lua/xrpc_api.rs index 6a5b930..11a8f23 100644 --- a/src/lua/xrpc_api.rs +++ b/src/lua/xrpc_api.rs @@ -215,7 +215,13 @@ mod tests { let (tx, _) = watch::channel(vec![]); let (labeler_tx, _) = watch::channel(()); sqlx::any::install_default_drivers(); - let test_db = sqlx::AnyPool::connect_lazy("sqlite::memory:").unwrap(); + // Single-connection pool so the in-memory DB is shared across the + // pool's queries (separate connections to `sqlite::memory:` get + // independent DBs otherwise). + let test_db = sqlx::pool::PoolOptions::::new() + .max_connections(1) + .connect_lazy("sqlite::memory:") + .unwrap(); let atrium_http = std::sync::Arc::new(atrium_oauth::DefaultHttpClient::default()); let did_resolver = atrium_identity::did::CommonDidResolver::new( atrium_identity::did::CommonDidResolverConfig { @@ -298,6 +304,38 @@ mod tests { } } + /// Create the `scripts` table on the in-memory test DB and insert one + /// row keyed by trigger id. The trigger-keyed dispatcher reads from + /// here at firing time; `make_*_lexicon`'s `script` field is now + /// inert (kept on the struct for forward-compat with row loaders but + /// not consulted by dispatch). + async fn seed_script(state: &AppState, trigger: &str, body: &str) { + sqlx::query( + r#" + CREATE TABLE IF NOT EXISTS scripts ( + id TEXT PRIMARY KEY, + body TEXT NOT NULL, + description TEXT, + script_type TEXT NOT NULL DEFAULT 'lua', + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')) + ) + "#, + ) + .execute(&state.db) + .await + .unwrap(); + sqlx::query( + "INSERT OR REPLACE INTO scripts (id, body, script_type, created_at, updated_at) + VALUES (?, ?, 'lua', datetime('now'), datetime('now'))", + ) + .bind(trigger) + .bind(body) + .execute(&state.db) + .await + .unwrap(); + } + fn make_query_lexicon(id: &str, script: Option<&str>) -> ParsedLexicon { ParsedLexicon { id: id.to_string(), @@ -425,11 +463,14 @@ mod tests { let state = test_state(); // Register a scripted query that returns a static response - let lexicon = make_query_lexicon( - "test.echo", - Some(r#"function handle() return { greeting = "hello" } end"#), - ); + let lexicon = make_query_lexicon("test.echo", None); state.lexicons.upsert(lexicon).await; + seed_script( + &state, + "xrpc.query:test.echo", + r#"function handle() return { greeting = "hello" } end"#, + ) + .await; let mut params = HashMap::new(); let result = execute_local_query(&state, "test.echo", &mut params, None).await; @@ -447,11 +488,14 @@ mod tests { async fn query_local_script_receives_params() { let state = test_state(); - let lexicon = make_query_lexicon( - "test.greet", - Some(r#"function handle() return { greeting = "hello " .. params.name } end"#), - ); + let lexicon = make_query_lexicon("test.greet", None); state.lexicons.upsert(lexicon).await; + seed_script( + &state, + "xrpc.query:test.greet", + r#"function handle() return { greeting = "hello " .. params.name } end"#, + ) + .await; let mut params = HashMap::new(); params.insert("name".into(), Value::String("world".into())); @@ -473,15 +517,16 @@ mod tests { async fn query_local_script_receives_caller_did() { let state = test_state(); - let lexicon = make_query_lexicon( - "test.whoami", - Some( - r#"function handle() - return { did = caller_did or "anonymous" } - end"#, - ), - ); + let lexicon = make_query_lexicon("test.whoami", None); state.lexicons.upsert(lexicon).await; + seed_script( + &state, + "xrpc.query:test.whoami", + r#"function handle() + return { did = caller_did or "anonymous" } + end"#, + ) + .await; // With caller_did let claims = Claims::internal("did:plc:testuser".into()); @@ -552,11 +597,14 @@ mod tests { let state = test_state(); // Register a simple query that the outer script will call - let inner_lexicon = make_query_lexicon( - "test.inner", - Some(r#"function handle() return { value = 42 } end"#), - ); + let inner_lexicon = make_query_lexicon("test.inner", None); state.lexicons.upsert(inner_lexicon).await; + seed_script( + &state, + "xrpc.query:test.inner", + r#"function handle() return { value = 42 } end"#, + ) + .await; let state_arc = Arc::new(state); let lua = sandbox::create_sandbox().unwrap(); diff --git a/src/record_handler.rs b/src/record_handler.rs index bc3704e..e3c5173 100644 --- a/src/record_handler.rs +++ b/src/record_handler.rs @@ -57,53 +57,45 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { }; let cid = record.cid.as_deref().unwrap_or_default(); - // Run index hook before storing, if configured. The hook's return - // value determines what (if anything) gets written to the DB. - let rec_to_store = - if let Some(script) = state.lexicons.get_index_hook(&record.collection).await { - let hook_result = crate::lua::execute_hook_script(&crate::lua::HookEvent { - state, - lexicon_id: &record.collection, - script: &script, - action: &record.action, - uri: &uri, - did: &record.did, - collection: &record.collection, - rkey: &record.rkey, - record: Some(rec), - cached_env_vars: None, - }) + // Run record-event script (if any) before storing. The script's + // return value determines what gets written: + // None → skip indexing entirely + // Some(record) → upsert with that record body + // The dispatcher cascades `record.:` → + // `record.index:`; failures are dead-lettered fail-open. + let hook_result = crate::lua::run_record_event_script( + state, + &record.collection, + &record.action, + &uri, + &record.did, + &record.rkey, + Some(rec), + ) + .await; + let rec_to_store = match hook_result { + None => { + log_event( + db, + EventLog { + event_type: "record.skipped".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.clone()), + detail: serde_json::json!({ + "collection": record.collection, + "did": record.did, + "rkey": record.rkey, + "reason": "script returned nil", + }), + }, + state.db_backend, + ) .await; - - match hook_result { - None => { - if state.verbose_event_logging.load(Ordering::Relaxed) { - log_event( - db, - EventLog { - event_type: "record.skipped".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(uri.clone()), - detail: serde_json::json!({ - "collection": record.collection, - "did": record.did, - "rkey": record.rkey, - "reason": "hook returned nil", - }), - }, - state.db_backend, - ) - .await; - } - return; - } - Some(v) => v, - } - } else { - // No hook — store the original record as-is. - rec.clone() - }; + return; + } + Some(v) => v, + }; let now = now_rfc3339(); let backend = state.db_backend; @@ -187,44 +179,37 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { "delete" => { let backend = state.db_backend; - // Run index hook before deleting, if configured. - if let Some(script) = state.lexicons.get_index_hook(&record.collection).await { - let hook_result = crate::lua::execute_hook_script(&crate::lua::HookEvent { - state, - lexicon_id: &record.collection, - script: &script, - action: "delete", - uri: &uri, - did: &record.did, - collection: &record.collection, - rkey: &record.rkey, - record: None, - cached_env_vars: None, - }) + // Run record-event script (if any) before deleting. A nil + // return aborts the delete; any other return continues. + let hook_result = crate::lua::run_record_event_script( + state, + &record.collection, + "delete", + &uri, + &record.did, + &record.rkey, + None, + ) + .await; + if hook_result.is_none() { + log_event( + db, + EventLog { + event_type: "record.skipped".to_string(), + severity: Severity::Info, + actor_did: None, + subject: Some(uri.clone()), + detail: serde_json::json!({ + "collection": record.collection, + "did": record.did, + "rkey": record.rkey, + "reason": "script returned nil", + }), + }, + backend, + ) .await; - - if hook_result.is_none() { - if state.verbose_event_logging.load(Ordering::Relaxed) { - log_event( - db, - EventLog { - event_type: "record.skipped".to_string(), - severity: Severity::Info, - actor_did: None, - subject: Some(uri.clone()), - detail: serde_json::json!({ - "collection": record.collection, - "did": record.did, - "rkey": record.rkey, - "reason": "hook returned nil", - }), - }, - backend, - ) - .await; - } - return; - } + return; } let delete_sql = adapt_sql("DELETE FROM records WHERE uri = ?", backend); diff --git a/src/xrpc/procedure.rs b/src/xrpc/procedure.rs index 55d5523..a652dd7 100644 --- a/src/xrpc/procedure.rs +++ b/src/xrpc/procedure.rs @@ -18,7 +18,15 @@ pub(crate) async fn handle_procedure( params: &std::collections::HashMap, lexicon: &crate::lexicon::ParsedLexicon, ) -> Result { - if let Some(ref script) = lexicon.script { + // Trigger-keyed dispatch: a script bound at `xrpc.procedure:` + // overrides the default PDS-write flow. The legacy `lexicon.script` + // column is no longer read. + let trigger = format!("xrpc.procedure:{}", lexicon.id); + if let Some(resolved) = crate::lua::resolve(state, &trigger).await { + // Delegation guard preserved from origin/dev: scripts that run + // under a `delegateDid` must come from a caller who is an + // active write-capable delegate of that account, scoped to the + // calling api_client. let delegate_did = input .get("delegateDid") .and_then(|v| v.as_str()) @@ -71,7 +79,7 @@ pub(crate) async fn handle_procedure( &script_input, params, lexicon, - script, + &resolved.body, None, delegate_did.as_deref(), ) diff --git a/src/xrpc/query.rs b/src/xrpc/query.rs index 1c2a126..14bd9ad 100644 --- a/src/xrpc/query.rs +++ b/src/xrpc/query.rs @@ -15,9 +15,19 @@ pub(crate) async fn handle_query( lexicon: &crate::lexicon::ParsedLexicon, claims: Option<&Claims>, ) -> Result { - if let Some(ref script) = lexicon.script { + // Trigger-keyed dispatch: a script bound at `xrpc.query:` + // overrides the default list / get-record flow. The legacy + // `lexicon.script` column is no longer read. + let trigger = format!("xrpc.query:{}", lexicon.id); + if let Some(resolved) = crate::lua::resolve(state, &trigger).await { return crate::lua::execute_query_script( - state, method, params, lexicon, script, claims, None, + state, + method, + params, + lexicon, + &resolved.body, + claims, + None, ) .await; } diff --git a/tests/common/db.rs b/tests/common/db.rs index d4fc0df..15c7244 100644 --- a/tests/common/db.rs +++ b/tests/common/db.rs @@ -20,7 +20,7 @@ pub async fn truncate_all(pool: &AnyPool) { match backend { DatabaseBackend::Postgres => { sqlx::query( - "TRUNCATE records, lexicons, backfill_jobs, users, user_permissions, api_keys, event_logs, script_variables, dead_letter_hooks, record_refs, labeler_subscriptions, labels, instance_settings, domains, dpop_sessions, dpop_keys, api_clients, delegated_accounts, account_delegates RESTART IDENTITY CASCADE", + "TRUNCATE records, lexicons, backfill_jobs, users, user_permissions, api_keys, event_logs, script_variables, scripts, dead_letter_scripts, dead_letter_hooks, record_refs, labeler_subscriptions, labels, instance_settings, domains, dpop_sessions, dpop_keys, api_clients, delegated_accounts, account_delegates RESTART IDENTITY CASCADE", ) .execute(pool) .await @@ -41,6 +41,8 @@ pub async fn truncate_all(pool: &AnyPool) { "api_keys", "event_logs", "script_variables", + "scripts", + "dead_letter_scripts", "dead_letter_hooks", "record_refs", "labeler_subscriptions", diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 6c27470..70ada54 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -7,6 +7,7 @@ pub mod db; #[allow(dead_code, unused_imports)] pub mod fixtures; +#[allow(unused_macros)] macro_rules! require_db { () => { if std::env::var("TEST_DATABASE_URL").is_err() { @@ -16,4 +17,5 @@ macro_rules! require_db { }; } +#[allow(unused_imports)] pub(crate) use require_db; diff --git a/tests/e2e_scripts.rs b/tests/e2e_scripts.rs new file mode 100644 index 0000000..78994ec --- /dev/null +++ b/tests/e2e_scripts.rs @@ -0,0 +1,833 @@ +//! End-to-end tests for the trigger-keyed scripts subsystem. +//! +//! Covers: +//! - Admin CRUD on `/admin/scripts` with trigger-id validation. +//! - Dispatcher cascade for record events +//! (`record.:` → `record.index:`). +//! - Label scripts: URI-routed dispatch + Record local mutation +//! (`Record.delete_local`, `:save_local`). +//! - The no-PDS-auth boundary: a label script that calls `r:save()` +//! gets dead-lettered fail-open with the original record untouched. + +mod common; + +use axum::body::Body; +use axum::http::{Request, StatusCode}; +use happyview::db::{adapt_sql, now_rfc3339}; +use happyview::lua::{LabelAppliedEvent, LabelHookOutcome, run_label_applied_script}; +use happyview::record_handler::{RecordEvent, handle_record_event}; +use http_body_util::BodyExt; +use serde_json::{Value, json}; +use serial_test::serial; +use tower::ServiceExt; + +use common::app::TestApp; +use common::fixtures; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +async fn json_body(resp: axum::response::Response) -> Value { + let body = resp.into_body().collect().await.unwrap().to_bytes(); + serde_json::from_slice(&body).unwrap() +} + +fn admin_get( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), +) -> Request { + Request::builder() + .uri(uri) + .header(cookie.0, cookie.1) + .body(Body::empty()) + .unwrap() +} + +fn admin_post( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), + body: &Value, +) -> Request { + Request::builder() + .method("POST") + .uri(uri) + .header(cookie.0, cookie.1) + .header("content-type", "application/json") + .body(Body::from(serde_json::to_vec(body).unwrap())) + .unwrap() +} + +fn admin_patch( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), + body: &Value, +) -> Request { + Request::builder() + .method("PATCH") + .uri(uri) + .header(cookie.0, cookie.1) + .header("content-type", "application/json") + .body(Body::from(serde_json::to_vec(body).unwrap())) + .unwrap() +} + +fn admin_delete( + uri: &str, + cookie: (axum::http::HeaderName, axum::http::HeaderValue), +) -> Request { + Request::builder() + .method("DELETE") + .uri(uri) + .header(cookie.0, cookie.1) + .body(Body::empty()) + .unwrap() +} + +/// Seed a record-type lexicon (no scripts bound — scripts live in their +/// own table now, addressed by trigger id). +async fn seed_lexicon(app: &TestApp, lexicon: Value) { + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/lexicons", + app.admin_cookie(), + &json!({ "lexicon_json": lexicon }), + )) + .await + .unwrap(); + assert!( + resp.status().is_success(), + "seeding lexicon failed: {:?}", + resp.status() + ); +} + +/// Create a script via the admin API. Returns the created row. +async fn create_script(app: &TestApp, id: &str, body: &str) -> Value { + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/scripts", + app.admin_cookie(), + &json!({ "id": id, "body": body }), + )) + .await + .unwrap(); + assert_eq!( + resp.status(), + StatusCode::CREATED, + "create '{id}' failed; body: {:?}", + json_body(resp).await + ); + let resp = app + .router + .clone() + .oneshot(admin_get( + &format!("/admin/scripts/{}", urlencoding::encode(id)), + app.admin_cookie(), + )) + .await + .unwrap(); + json_body(resp).await +} + +async fn seed_record_row( + app: &TestApp, + uri: &str, + did: &str, + collection: &str, + rkey: &str, + body: Value, +) { + let sql = adapt_sql( + "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?)", + app.state.db_backend, + ); + sqlx::query(&sql) + .bind(uri) + .bind(did) + .bind(collection) + .bind(rkey) + .bind(serde_json::to_string(&body).unwrap_or_default()) + .bind("bafyseed") + .bind(now_rfc3339()) + .execute(&app.state.db) + .await + .expect("failed to seed records row"); +} + +async fn count_records(app: &TestApp, uri: &str) -> i64 { + let (count,): (i64,) = sqlx::query_as(&adapt_sql( + "SELECT COUNT(*) FROM records WHERE uri = ?", + app.state.db_backend, + )) + .bind(uri) + .fetch_one(&app.state.db) + .await + .unwrap(); + count +} + +async fn fetch_record_body(app: &TestApp, uri: &str) -> Option { + let row: Option<(String,)> = sqlx::query_as(&adapt_sql( + "SELECT record FROM records WHERE uri = ?", + app.state.db_backend, + )) + .bind(uri) + .fetch_optional(&app.state.db) + .await + .unwrap(); + row.map(|(s,)| serde_json::from_str(&s).unwrap()) +} + +// --------------------------------------------------------------------------- +// Admin CRUD +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn create_then_get_script_round_trips() { + let app = TestApp::new().await; + let id = "record.create:com.example.thing"; + create_script(&app, id, "function handle() return event.record end").await; + + let resp = app + .router + .clone() + .oneshot(admin_get( + &format!("/admin/scripts/{}", urlencoding::encode(id)), + app.admin_cookie(), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::OK); + let row = json_body(resp).await; + assert_eq!(row["id"], id); + assert_eq!(row["script_type"], "lua"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn list_scripts_returns_all_rows() { + let app = TestApp::new().await; + create_script( + &app, + "record.create:com.example.thing", + "function handle() return event.record end", + ) + .await; + create_script( + &app, + "labeler.apply:_actor", + "function handle() return event end", + ) + .await; + + let resp = app + .router + .clone() + .oneshot(admin_get("/admin/scripts", app.admin_cookie())) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::OK); + let rows = json_body(resp).await; + let arr = rows.as_array().unwrap(); + assert_eq!(arr.len(), 2); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn create_rejects_invalid_trigger_prefix() { + let app = TestApp::new().await; + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/scripts", + app.admin_cookie(), + &json!({ + "id": "garbage:com.example.thing", + "body": "function handle() end", + }), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::BAD_REQUEST); + let err = json_body(resp).await; + let msg = err["error"].as_str().unwrap_or(""); + assert!( + msg.contains("unknown trigger prefix"), + "expected validation error, got: {msg}" + ); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn create_rejects_invalid_nsid_suffix() { + let app = TestApp::new().await; + // Single-segment NSID — too few segments. + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/scripts", + app.admin_cookie(), + &json!({ + "id": "record.create:foo", + "body": "function handle() end", + }), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::BAD_REQUEST); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn create_allows_labeler_apply_actor_special_case() { + let app = TestApp::new().await; + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/scripts", + app.admin_cookie(), + &json!({ + "id": "labeler.apply:_actor", + "body": "function handle() return event end", + }), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::CREATED); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn create_rejects_invalid_lua_body() { + let app = TestApp::new().await; + let resp = app + .router + .clone() + .oneshot(admin_post( + "/admin/scripts", + app.admin_cookie(), + &json!({ + "id": "record.create:com.example.thing", + "body": "function handle(", // syntax error + }), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::BAD_REQUEST); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn patch_updates_body() { + let app = TestApp::new().await; + let id = "record.create:com.example.thing"; + create_script(&app, id, "function handle() return event.record end").await; + + let resp = app + .router + .clone() + .oneshot(admin_patch( + &format!("/admin/scripts/{}", urlencoding::encode(id)), + app.admin_cookie(), + &json!({ "body": "function handle() return nil end" }), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::OK); + let row = json_body(resp).await; + assert!(row["body"].as_str().unwrap().contains("return nil")); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn delete_removes_script() { + let app = TestApp::new().await; + let id = "record.delete:com.example.thing"; + create_script(&app, id, "function handle() return event.record end").await; + + let resp = app + .router + .clone() + .oneshot(admin_delete( + &format!("/admin/scripts/{}", urlencoding::encode(id)), + app.admin_cookie(), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::NO_CONTENT); + + let resp = app + .router + .clone() + .oneshot(admin_get( + &format!("/admin/scripts/{}", urlencoding::encode(id)), + app.admin_cookie(), + )) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::NOT_FOUND); +} + +// --------------------------------------------------------------------------- +// Cascade resolution: action-specific row wins over wildcard +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn cascade_wildcard_runs_when_no_action_specific() { + let app = TestApp::new().await; + seed_lexicon(&app, fixtures::game_record_lexicon()).await; + + create_script( + &app, + "record.index:games.gamesgamesgamesgames.game", + // Wildcard — uppercases the title for any action. + "function handle() event.record.title = string.upper(event.record.title); return event.record end", + ) + .await; + + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "rkey1".into(), + action: "create".into(), + record: Some(json!({"title": "test game"})), + cid: Some("bafy".into()), + }, + ) + .await; + + let body = fetch_record_body( + &app, + "at://did:plc:test/games.gamesgamesgamesgames.game/rkey1", + ) + .await + .unwrap(); + assert_eq!(body["title"], "TEST GAME"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn cascade_action_specific_wins_over_wildcard() { + let app = TestApp::new().await; + seed_lexicon(&app, fixtures::game_record_lexicon()).await; + + create_script( + &app, + "record.index:games.gamesgamesgamesgames.game", + "function handle() event.record.title = 'WILDCARD'; return event.record end", + ) + .await; + create_script( + &app, + "record.create:games.gamesgamesgamesgames.game", + "function handle() event.record.title = 'CREATE-SPECIFIC'; return event.record end", + ) + .await; + + // Create action — specific should win. + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "rk-create".into(), + action: "create".into(), + record: Some(json!({"title": "x"})), + cid: Some("bafy".into()), + }, + ) + .await; + let body = fetch_record_body( + &app, + "at://did:plc:test/games.gamesgamesgamesgames.game/rk-create", + ) + .await + .unwrap(); + assert_eq!(body["title"], "CREATE-SPECIFIC"); + + // Update action — no record.update binding → cascades to wildcard. + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "rk-update".into(), + action: "update".into(), + record: Some(json!({"title": "x"})), + cid: Some("bafy".into()), + }, + ) + .await; + let body = fetch_record_body( + &app, + "at://did:plc:test/games.gamesgamesgamesgames.game/rk-update", + ) + .await + .unwrap(); + assert_eq!(body["title"], "WILDCARD"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn no_script_passes_record_through_unchanged() { + let app = TestApp::new().await; + seed_lexicon(&app, fixtures::game_record_lexicon()).await; + + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "rk1".into(), + action: "create".into(), + record: Some(json!({"title": "untouched"})), + cid: Some("bafy".into()), + }, + ) + .await; + let body = fetch_record_body( + &app, + "at://did:plc:test/games.gamesgamesgamesgames.game/rk1", + ) + .await + .unwrap(); + assert_eq!(body["title"], "untouched"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn record_create_returning_nil_skips_indexing() { + let app = TestApp::new().await; + seed_lexicon(&app, fixtures::game_record_lexicon()).await; + + create_script( + &app, + "record.create:games.gamesgamesgamesgames.game", + "function handle() return nil end", + ) + .await; + + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "rk1".into(), + action: "create".into(), + record: Some(json!({"title": "doomed"})), + cid: Some("bafy".into()), + }, + ) + .await; + assert_eq!( + count_records( + &app, + "at://did:plc:test/games.gamesgamesgamesgames.game/rk1" + ) + .await, + 0, + "nil return should drop the record" + ); +} + +// --------------------------------------------------------------------------- +// Label scripts via URI routing +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn label_script_can_drop_record_via_record_delete_local() { + let app = TestApp::new().await; + + let uri = "at://did:plc:victim/app.bsky.feed.post/rkey1"; + seed_record_row( + &app, + uri, + "did:plc:victim", + "app.bsky.feed.post", + "rkey1", + json!({"text": "hello"}), + ) + .await; + + create_script( + &app, + "labeler.apply:app.bsky.feed.post", + "function handle() \ + if event.val == 'spam' then Record.delete_local(event.uri) end \ + return event \ + end", + ) + .await; + + let outcome = run_label_applied_script( + &app.state, + LabelAppliedEvent { + src: "did:plc:labeler".into(), + uri: uri.into(), + val: "spam".into(), + neg: false, + cts: now_rfc3339(), + exp: None, + }, + ) + .await; + assert!(matches!(outcome, LabelHookOutcome::Continue(_))); + assert_eq!(count_records(&app, uri).await, 0); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn label_script_can_redact_record_via_save_local() { + let app = TestApp::new().await; + + let uri = "at://did:plc:author/app.bsky.feed.post/rkey1"; + seed_record_row( + &app, + uri, + "did:plc:author", + "app.bsky.feed.post", + "rkey1", + json!({"text": "original content"}), + ) + .await; + + create_script( + &app, + "labeler.apply:app.bsky.feed.post", + "function handle() \ + if event.val == 'redact' then \ + local r = Record.load(event.uri) \ + if r then r.text = '[redacted by ' .. event.src .. ']'; r:save_local() end \ + end; \ + return event \ + end", + ) + .await; + + let outcome = run_label_applied_script( + &app.state, + LabelAppliedEvent { + src: "did:plc:labeler".into(), + uri: uri.into(), + val: "redact".into(), + neg: false, + cts: now_rfc3339(), + exp: None, + }, + ) + .await; + assert!(matches!(outcome, LabelHookOutcome::Continue(_))); + + let body = fetch_record_body(&app, uri).await.unwrap(); + assert_eq!(body["text"], "[redacted by did:plc:labeler]"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn label_script_uri_routes_actor_special_case() { + let app = TestApp::new().await; + + create_script( + &app, + "labeler.apply:_actor", + // Sentinel: write a row into records-table-as-flag so we can + // detect that the script ran. + "function handle() \ + db.raw('INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) \ + VALUES (?, ?, ?, ?, ?, ?, ?)', \ + {'at://did:plc:flag/flag.col/k', 'did:plc:flag', 'flag.col', 'k', '{}', 'b', '2026-05-01'}) \ + return event \ + end", + ) + .await; + + // Bare DID URI should route to `labeler.apply:_actor`. + let outcome = run_label_applied_script( + &app.state, + LabelAppliedEvent { + src: "did:plc:labeler".into(), + uri: "did:plc:somebody".into(), + val: "imposter".into(), + neg: false, + cts: now_rfc3339(), + exp: None, + }, + ) + .await; + assert!(matches!(outcome, LabelHookOutcome::Continue(_))); + + // Sentinel row should exist if the script ran. + assert_eq!( + count_records(&app, "at://did:plc:flag/flag.col/k").await, + 1, + "labeler.apply:_actor should have fired for bare-DID label" + ); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn label_script_calling_record_save_dead_letters_with_clear_message() { + let app = TestApp::new().await; + + let uri = "at://did:plc:author/app.bsky.feed.post/rkey1"; + seed_record_row( + &app, + uri, + "did:plc:author", + "app.bsky.feed.post", + "rkey1", + json!({"text": "untouched"}), + ) + .await; + + create_script( + &app, + "labeler.apply:app.bsky.feed.post", + "function handle() \ + local r = Record.load(event.uri) \ + if r then r.text = 'should fail'; r:save() end \ + return event \ + end", + ) + .await; + + let outcome = run_label_applied_script( + &app.state, + LabelAppliedEvent { + src: "did:plc:labeler".into(), + uri: uri.into(), + val: "anything".into(), + neg: false, + cts: now_rfc3339(), + exp: None, + }, + ) + .await; + // Fail-open: the original label still continues even after the script + // fails its retry budget. + assert!(matches!(outcome, LabelHookOutcome::Continue(_))); + + // The original record is unchanged. + let body = fetch_record_body(&app, uri).await.unwrap(); + assert_eq!(body["text"], "untouched"); + + // A dead-letter row exists with the NO_PDS_AUTH message. + let dl: (String,) = sqlx::query_as(&adapt_sql( + "SELECT error FROM dead_letter_scripts WHERE host_kind = 'label' \ + AND host_id = 'did:plc:labeler' ORDER BY id DESC LIMIT 1", + app.state.db_backend, + )) + .fetch_one(&app.state.db) + .await + .expect("expected a dead_letter_scripts row"); + assert!( + dl.0.contains("no PDS auth"), + "expected NO_PDS_AUTH message in dead-letter, got: {}", + dl.0 + ); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn record_event_script_can_call_record_delete_local() { + let app = TestApp::new().await; + seed_lexicon(&app, fixtures::game_record_lexicon()).await; + + let victim_uri = "at://did:plc:test/games.gamesgamesgamesgames.game/old"; + seed_record_row( + &app, + victim_uri, + "did:plc:test", + "games.gamesgamesgamesgames.game", + "old", + json!({"title": "should-be-gone"}), + ) + .await; + + create_script( + &app, + "record.create:games.gamesgamesgamesgames.game", + "function handle() \ + Record.delete_local('at://did:plc:test/games.gamesgamesgamesgames.game/old') \ + return event.record \ + end", + ) + .await; + + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "new1".into(), + action: "create".into(), + record: Some(json!({"title": "fresh game"})), + cid: Some("bafy".into()), + }, + ) + .await; + + assert_eq!(count_records(&app, victim_uri).await, 0); + assert_eq!( + count_records( + &app, + "at://did:plc:test/games.gamesgamesgamesgames.game/new1" + ) + .await, + 1 + ); +} + +// --------------------------------------------------------------------------- +// Permission gating +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn no_auth_returns_401() { + let app = TestApp::new().await; + let resp = app + .router + .clone() + .oneshot( + Request::builder() + .uri("/admin/scripts") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!(resp.status(), StatusCode::UNAUTHORIZED); +} diff --git a/tests/lua_record_api.rs b/tests/lua_record_api.rs new file mode 100644 index 0000000..6de7cdb --- /dev/null +++ b/tests/lua_record_api.rs @@ -0,0 +1,478 @@ +//! Integration tests for the local-only Record API surface +//! (`Record.delete_local`, `r:save_local`, `r:delete_local`) and the +//! auth-boundary errors when label / record-event / query scripts reach +//! for PDS-touching methods (`r:save`, `r:delete`). + +mod common; + +use atrium_identity::did::{CommonDidResolver, CommonDidResolverConfig}; +use atrium_identity::handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig}; +use atrium_oauth::{ + AtprotoLocalhostClientMetadata, DefaultHttpClient, KnownScope, OAuthClientConfig, + OAuthResolverConfig, Scope, +}; +use happyview::AppState; +use happyview::config::Config; +use happyview::db::{DatabaseBackend, adapt_sql, now_rfc3339}; +use happyview::lexicon::LexiconRegistry; +use happyview::lua::record::register_record_api_no_auth; +use mlua::Lua; +use serial_test::serial; +use std::sync::Arc; +use tokio::sync::watch; + +use common::db; + +async fn test_state_with_pool(pool: sqlx::AnyPool, backend: DatabaseBackend) -> AppState { + let config = Config { + host: "127.0.0.1".into(), + port: 3000, + database_url: String::new(), + database_backend: backend, + public_url: String::new(), + base_path: None, + session_secret: "test-secret".into(), + jetstream_url: String::new(), + relay_url: String::new(), + plc_url: String::new(), + static_dir: String::new(), + event_log_retention_days: 30, + app_name: None, + logo_uri: None, + tos_uri: None, + policy_uri: None, + token_encryption_key: None, + default_rate_limit_capacity: 100, + default_rate_limit_refill_rate: 2.0, + }; + let (tx, _) = watch::channel(vec![]); + let (labeler_tx, _) = watch::channel(()); + let atrium_http = std::sync::Arc::new(DefaultHttpClient::default()); + let did_resolver = CommonDidResolver::new(CommonDidResolverConfig { + plc_directory_url: "https://plc.directory".into(), + http_client: std::sync::Arc::clone(&atrium_http), + }); + let handle_resolver = AtprotoHandleResolver::new(AtprotoHandleResolverConfig { + dns_txt_resolver: happyview::dns::NativeDnsResolver::new(), + http_client: atrium_http, + }); + let oauth_pool = db::test_pool().await; + let oauth = atrium_oauth::OAuthClient::new(OAuthClientConfig { + client_metadata: AtprotoLocalhostClientMetadata { + redirect_uris: Some(vec!["http://127.0.0.1:0/auth/callback".into()]), + scopes: Some(vec![Scope::Known(KnownScope::Atproto)]), + }, + keys: None, + state_store: happyview::auth::oauth_store::DbStateStore::new(oauth_pool.clone(), backend), + session_store: happyview::auth::oauth_store::DbSessionStore::new(oauth_pool, backend), + resolver: OAuthResolverConfig { + did_resolver, + handle_resolver, + authorization_server_metadata: Default::default(), + protected_resource_metadata: Default::default(), + }, + }) + .expect("Failed to create test OAuth client"); + AppState { + config, + http: reqwest::Client::new(), + db: pool.clone(), + db_backend: backend, + lexicons: LexiconRegistry::new(), + collections_tx: tx, + labeler_subscriptions_tx: labeler_tx, + rate_limiter: happyview::rate_limit::RateLimiter::new( + happyview::rate_limit::RateLimitDefaults { + query_cost: 1, + procedure_cost: 1, + proxy_cost: 1, + }, + ), + oauth: std::sync::Arc::new(happyview::auth::OAuthClientRegistry::new( + std::sync::Arc::new(oauth), + )), + oauth_state_store: happyview::auth::oauth_store::DbStateStore::new(pool.clone(), backend), + cookie_key: axum_extra::extract::cookie::Key::derive_from( + b"test-secret-that-is-at-least-32-bytes-long", + ), + plugin_registry: std::sync::Arc::new(happyview::plugin::PluginRegistry::new()), + wasm_runtime: std::sync::Arc::new( + happyview::plugin::WasmRuntime::new().expect("wasm runtime"), + ), + attestation_signer: None, + official_registry: std::sync::Arc::new(tokio::sync::RwLock::new( + happyview::plugin::official_registry::OfficialRegistryState::default(), + )), + official_registry_config: happyview::plugin::official_registry::RegistryConfig::production( + ), + domain_cache: happyview::domain::DomainCache::new(), + proxy_config: std::sync::Arc::new(arc_swap::ArcSwap::new(std::sync::Arc::new( + happyview::proxy_config::ProxyConfig::default(), + ))), + backfill_db: pool.clone(), + backfill_events_tx: tokio::sync::broadcast::channel(16).0, + verbose_event_logging: std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false)), + } +} + +async fn seed_record( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + uri: &str, + did: &str, + collection: &str, + rkey: &str, + record: serde_json::Value, +) { + let sql = adapt_sql( + "INSERT INTO records (uri, did, collection, rkey, record, cid, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?)", + backend, + ); + sqlx::query(&sql) + .bind(uri) + .bind(did) + .bind(collection) + .bind(rkey) + .bind(serde_json::to_string(&record).unwrap_or_default()) + .bind("bafyseed") + .bind(now_rfc3339()) + .execute(pool) + .await + .expect("failed to seed record"); +} + +async fn count_records(pool: &sqlx::AnyPool, backend: DatabaseBackend, uri: &str) -> i64 { + let sql = adapt_sql("SELECT COUNT(*) FROM records WHERE uri = ?", backend); + let (count,): (i64,) = sqlx::query_as(&sql) + .bind(uri) + .fetch_one(pool) + .await + .expect("count query"); + count +} + +async fn fetch_record_body( + pool: &sqlx::AnyPool, + backend: DatabaseBackend, + uri: &str, +) -> Option { + let sql = adapt_sql("SELECT record FROM records WHERE uri = ?", backend); + let row: Option<(String,)> = sqlx::query_as(&sql) + .bind(uri) + .fetch_optional(pool) + .await + .expect("fetch record"); + row.map(|(s,)| serde_json::from_str(&s).expect("record json")) +} + +/// Build a sandbox with the Record API registered in **no-auth mode** — +/// the same shape label / record-event / query scripts get. +fn setup_no_auth_lua(state: &AppState) -> Lua { + let lua = Lua::new(); + register_record_api_no_auth(&lua, Arc::new(state.clone())).expect("register record api"); + lua +} + +// --------------------------------------------------------------------------- +// Record.delete_local(uri) static +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn record_static_delete_local_returns_true_when_row_existed() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + + let uri = "at://did:plc:test/test.collection/rkey1"; + seed_record( + &pool, + backend, + uri, + "did:plc:test", + "test.collection", + "rkey1", + serde_json::json!({"name": "kept"}), + ) + .await; + + let state = test_state_with_pool(pool.clone(), backend).await; + let lua = setup_no_auth_lua(&state); + + let deleted: bool = lua + .load(format!(r#"return Record.delete_local("{uri}")"#)) + .eval_async() + .await + .expect("delete_local call"); + assert!(deleted, "expected true (row existed before)"); + + let after = count_records(&pool, backend, uri).await; + assert_eq!(after, 0, "row should be gone"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn record_static_delete_local_returns_false_when_row_absent() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_no_auth_lua(&state); + + let deleted: bool = lua + .load(r#"return Record.delete_local("at://did:plc:nope/test.collection/none")"#) + .eval_async() + .await + .expect("delete_local call"); + assert!(!deleted, "no row → false (idempotent)"); +} + +// --------------------------------------------------------------------------- +// r:delete_local() instance method +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn record_instance_delete_local_removes_row_and_clears_uri() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + + let uri = "at://did:plc:test/test.collection/rkey1"; + seed_record( + &pool, + backend, + uri, + "did:plc:test", + "test.collection", + "rkey1", + serde_json::json!({"name": "doomed"}), + ) + .await; + + let state = test_state_with_pool(pool.clone(), backend).await; + let lua = setup_no_auth_lua(&state); + + // Load via Record.load(), then call :delete_local() — this is the + // primary shape we expect from a label-script reaction. + let uri_after: mlua::Value = lua + .load(format!( + r#" + local r = Record.load("{uri}") + assert(r ~= nil, "record not loaded") + r:delete_local() + return r._uri + "# + )) + .eval_async() + .await + .expect("delete_local instance call"); + + assert!(matches!(uri_after, mlua::Value::Nil), "_uri should be nil"); + assert_eq!(count_records(&pool, backend, uri).await, 0); +} + +// --------------------------------------------------------------------------- +// r:save_local() instance method +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn record_instance_save_local_updates_existing_row() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + + let uri = "at://did:plc:test/test.collection/rkey1"; + seed_record( + &pool, + backend, + uri, + "did:plc:test", + "test.collection", + "rkey1", + serde_json::json!({"text": "original"}), + ) + .await; + + let state = test_state_with_pool(pool.clone(), backend).await; + let lua = setup_no_auth_lua(&state); + + // Redact-style flow: load, mutate, save_local. + lua.load(format!( + r#" + local r = Record.load("{uri}") + assert(r ~= nil) + r.text = "[redacted]" + r:save_local() + "# + )) + .exec_async() + .await + .expect("save_local instance call"); + + let body = fetch_record_body(&pool, backend, uri).await.unwrap(); + assert_eq!(body["text"], "[redacted]"); + // $type is injected automatically by the serializer. + assert_eq!(body["$type"], "test.collection"); + // Row count unchanged (upsert). + assert_eq!(count_records(&pool, backend, uri).await, 1); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn record_save_local_creates_new_row_when_repo_set() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + let state = test_state_with_pool(pool.clone(), backend).await; + let lua = setup_no_auth_lua(&state); + + // Build a fresh record. `:set_repo` provides the DID for the URI; + // without auth there's no fallback. We also manually `:set_rkey` + // since there's no key_type from a (missing) lexicon. + let uri: String = lua + .load( + r#" + local r = Record.new("test.collection", { value = 42 }) + r:set_repo("did:plc:newowner") + r:set_rkey("brandnew") + r:save_local() + return r._uri + "#, + ) + .eval_async() + .await + .expect("save_local creating call"); + + assert_eq!(uri, "at://did:plc:newowner/test.collection/brandnew"); + let body = fetch_record_body(&pool, backend, &uri).await.unwrap(); + assert_eq!(body["value"], 42); + assert_eq!(body["$type"], "test.collection"); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn record_save_local_errors_without_did_when_no_uri() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + let state = test_state_with_pool(pool, backend).await; + let lua = setup_no_auth_lua(&state); + + // No `:set_repo` and no claims → :save_local() must error. + let err = lua + .load( + r#" + local r = Record.new("test.collection", { value = 1 }) + r:save_local() + "#, + ) + .exec_async() + .await + .expect_err("expected error: no DID resolvable"); + let msg = err.to_string(); + assert!( + msg.contains("save_local() needs a DID"), + "expected DID-required message, got: {msg}" + ); +} + +// --------------------------------------------------------------------------- +// PDS-touching methods error cleanly when no auth present +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn record_save_errors_without_pds_auth() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + + let uri = "at://did:plc:test/test.collection/rkey1"; + seed_record( + &pool, + backend, + uri, + "did:plc:test", + "test.collection", + "rkey1", + serde_json::json!({"value": 1}), + ) + .await; + + let state = test_state_with_pool(pool.clone(), backend).await; + let lua = setup_no_auth_lua(&state); + + let err = lua + .load(format!( + r#" + local r = Record.load("{uri}") + r:save() + "# + )) + .exec_async() + .await + .expect_err("expected NO_PDS_AUTH error"); + let msg = err.to_string(); + assert!( + msg.contains("no PDS auth"), + "expected NO_PDS_AUTH message, got: {msg}" + ); + + // The original row should be untouched. + let body = fetch_record_body(&pool, backend, uri).await.unwrap(); + assert_eq!(body["value"], 1); +} + +#[tokio::test] +#[serial] +#[ignore] +async fn record_delete_errors_without_pds_auth() { + let pool = db::test_pool().await; + let backend = db::test_backend(); + db::truncate_all(&pool).await; + + let uri = "at://did:plc:test/test.collection/rkey1"; + seed_record( + &pool, + backend, + uri, + "did:plc:test", + "test.collection", + "rkey1", + serde_json::json!({"value": 1}), + ) + .await; + + let state = test_state_with_pool(pool.clone(), backend).await; + let lua = setup_no_auth_lua(&state); + + let err = lua + .load(format!( + r#" + local r = Record.load("{uri}") + r:delete() + "# + )) + .exec_async() + .await + .expect_err("expected NO_PDS_AUTH error"); + let msg = err.to_string(); + assert!( + msg.contains("no PDS auth"), + "expected NO_PDS_AUTH message, got: {msg}" + ); + + // No-auth :delete() must NOT touch the local DB either — + // the row should still be there. + assert_eq!(count_records(&pool, backend, uri).await, 1); +} -- 2.51.2 From fb9dfaa1dc3daf1e401b652a17b48042a4709a26 Mon Sep 17 00:00:00 2001 From: Chris Pardy Date: Fri, 1 May 2026 10:02:00 -0400 Subject: [PATCH 173/250] feat(scripts): promote log() to write into event_logs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Lua `log("...")` primitive used to call `tracing::debug!` only — fine for ops who tail server stderr, useless for operators who use the dashboard. Wire it into `event_logs` so script output is queryable from `/dashboard/events` without shell access. New `register_log_event_api(lua, state, trigger_id, caller_did)` in `src/lua/scripts.rs` registers a Lua `log(msg)` global that does both: - Emits `tracing::debug!(lua_log = msg, trigger = trigger_id, ...)` for ops who do tail. - Inserts a row into `event_logs` with: event_type = "script.log" severity = Info actor_did = caller_did (XRPC handlers; None for record / label) subject = trigger_id (queryable per script) detail = { trigger, message } This intentionally OVERRIDES the basic `log()` from `sandbox::create_sandbox()`. All four script runners (record-event, label-applied, xrpc.procedure, xrpc.query) now wire it through: - `register_default_apis(lua, state, trigger_id, caller_did)` gains the `trigger_id` parameter and calls `register_log_event_api` after the other registrations. - `execute_procedure_script` and `execute_query_script` register the log API directly with `xrpc.{procedure,query}:` as the trigger. E2E test in `tests/e2e_scripts.rs` verifies a record-event script's `log("hello from script")` produces a `script.log` row whose subject is the trigger id and detail carries `{ trigger, message }`. Signed-off-by: Chris Pardy Signed-off-by: Trezy --- src/lua/execute.rs | 63 +++++++++++++++++++++++++++++++++++++++++++- src/lua/sandbox.rs | 14 ++++++---- src/lua/scripts.rs | 61 ++++++++++++++++++++++++++++++++++++++++-- tests/e2e_scripts.rs | 51 +++++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+), 8 deletions(-) diff --git a/src/lua/execute.rs b/src/lua/execute.rs index 3ed5a23..7ee6f3c 100644 --- a/src/lua/execute.rs +++ b/src/lua/execute.rs @@ -289,6 +289,37 @@ pub async fn execute_procedure_script( return Err(AppError::Internal(error_message)); } + // Override the sandbox's tracing-only `log()` with a version that + // also writes a `script.log` row to `event_logs` so operators can + // see script output from the dashboard. The xrpc trigger id is + // computed from the lexicon's id + procedure type. + let trigger_id = format!("xrpc.procedure:{}", lexicon.id); + if let Err(e) = + super::scripts::register_log_event_api(&lua, &state_arc, &trigger_id, Some(claims.did())) + { + let error_message = format!("failed to register log API: {e}"); + log_event( + &state.db, + EventLog { + event_type: "script.error".to_string(), + severity: Severity::Error, + actor_did: Some(claims.did().to_string()), + subject: Some(method.to_string()), + detail: serde_json::json!({ + "error": error_message, + "script_source": script_source, + "input": input_json, + "caller_did": claims.did(), + "method": method, + "duration_ms": start.elapsed().as_millis() as u64, + }), + }, + backend, + ) + .await; + return Err(AppError::Internal(error_message)); + } + if let Err(e) = context::set_procedure_context( &lua, method, @@ -668,7 +699,7 @@ pub async fn execute_query_script( // auth context — the local-only methods (Record.load, :save_local, // :delete_local, Record.delete_local) work; PDS-touching variants // error with the no-PDS-auth message. - if let Err(e) = record::register_record_api_no_auth(&lua, state_arc) { + if let Err(e) = record::register_record_api_no_auth(&lua, state_arc.clone()) { let error_message = format!("failed to register Record API: {e}"); log_event( &state.db, @@ -690,6 +721,36 @@ pub async fn execute_query_script( return Err(AppError::Internal(error_message)); } + // Override the sandbox's tracing-only `log()` with a version that + // also writes a `script.log` row to `event_logs`. + let trigger_id = format!("xrpc.query:{}", lexicon.id); + if let Err(e) = super::scripts::register_log_event_api( + &lua, + &state_arc, + &trigger_id, + claims.map(|c| c.did()), + ) { + let error_message = format!("failed to register log API: {e}"); + log_event( + &state.db, + EventLog { + event_type: "script.error".to_string(), + severity: Severity::Error, + actor_did: None, + subject: Some(method.to_string()), + detail: serde_json::json!({ + "error": error_message, + "script_source": script_source, + "method": method, + "duration_ms": start.elapsed().as_millis() as u64, + }), + }, + backend, + ) + .await; + return Err(AppError::Internal(error_message)); + } + if let Err(e) = context::set_query_context( &lua, method, diff --git a/src/lua/sandbox.rs b/src/lua/sandbox.rs index fe7fe3d..833f83d 100644 --- a/src/lua/sandbox.rs +++ b/src/lua/sandbox.rs @@ -55,11 +55,15 @@ pub fn create_sandbox() -> LuaResult { let now_fn = lua.create_function(|_, ()| Ok(chrono::Utc::now().to_rfc3339()))?; globals.set("now", now_fn)?; - // Utility: log(message) logs via tracing::debug - let log_fn = lua.create_function(|_, msg: String| { - tracing::debug!(lua_log = %msg, "lua script log"); - Ok(()) - })?; + // `log(message)` no-op stub. The real implementation lives in + // `super::scripts::register_log_event_api` and is registered by + // every runner so the trigger context can be threaded into each + // `event_logs` row. The stub here exists only so paths that exec + // a script body OUTSIDE a runner — namely `validate_script` + // (admin write-time linting) and the in-process xrpc_api tests — + // don't break on top-level `log("...")` calls in user scripts. + // The runner-level registration always overrides this stub. + let log_fn = lua.create_function(|_, _msg: String| Ok(()))?; globals.set("log", log_fn)?; // Utility: TID table — callable as TID() to generate, plus conversion methods diff --git a/src/lua/scripts.rs b/src/lua/scripts.rs index 43970dc..870d373 100644 --- a/src/lua/scripts.rs +++ b/src/lua/scripts.rs @@ -407,7 +407,7 @@ pub async fn run_record_event_once( } let lua = sandbox::create_sandbox().map_err(|e| format!("create sandbox: {e}"))?; let state_arc = Arc::new(state.clone()); - register_default_apis(&lua, &state_arc, Some(did))?; + register_default_apis(&lua, &state_arc, &script.id, Some(did))?; // Legacy globals (action, uri, did, collection, rkey, record) for // back-compat with scripts written against the old `index_hook` @@ -565,7 +565,7 @@ async fn run_label_lua_once( } let lua = sandbox::create_sandbox().map_err(|e| format!("create sandbox: {e}"))?; let state_arc = Arc::new(state.clone()); - register_default_apis(&lua, &state_arc, None)?; + register_default_apis(&lua, &state_arc, &script.id, None)?; use mlua::LuaSerdeExt; let globals = lua.globals(); @@ -660,6 +660,7 @@ fn extract_bool(v: &Value, key: &str) -> Option { fn register_default_apis( lua: &mlua::Lua, state: &Arc, + trigger_id: &str, caller_did: Option<&str>, ) -> Result<(), String> { db_api::register_db_api(lua, state.clone()).map_err(|e| format!("db api: {e}"))?; @@ -670,6 +671,62 @@ fn register_default_apis( .map_err(|e| format!("atproto api: {e}"))?; record::register_record_api_no_auth(lua, state.clone()) .map_err(|e| format!("record api: {e}"))?; + register_log_event_api(lua, state, trigger_id, caller_did)?; + Ok(()) +} + +/// Register `log(msg)` as a Lua global that writes a `script.log` row to +/// `event_logs` (so operators can inspect script output from +/// `/dashboard/events` without tailing stderr) AND emits a +/// `tracing::debug!` for ops who do tail. +/// +/// `trigger_id` is recorded as the row's `subject` so events for a +/// specific script can be filtered by trigger. `caller_did` is recorded +/// as `actor_did` when the runner has one (XRPC handlers); record / +/// label runners pass `None`. +/// +/// This intentionally **overrides** the basic `log()` helper that +/// `sandbox::create_sandbox()` registers (which only writes to +/// `tracing::debug!`). All script runners call this helper so every +/// trigger family lands its `log()` calls in the event log. +pub(crate) fn register_log_event_api( + lua: &mlua::Lua, + state: &Arc, + trigger_id: &str, + caller_did: Option<&str>, +) -> Result<(), String> { + let state = state.clone(); + let trigger_id = trigger_id.to_string(); + let caller_did = caller_did.map(String::from); + let log_fn = lua + .create_async_function(move |_, msg: String| { + let state = state.clone(); + let trigger_id = trigger_id.clone(); + let caller_did = caller_did.clone(); + async move { + tracing::debug!(lua_log = %msg, trigger = %trigger_id, "lua script log"); + log_event( + &state.db, + EventLog { + event_type: "script.log".to_string(), + severity: Severity::Info, + actor_did: caller_did, + subject: Some(trigger_id.clone()), + detail: serde_json::json!({ + "trigger": trigger_id, + "message": msg, + }), + }, + state.db_backend, + ) + .await; + Ok(()) + } + }) + .map_err(|e| format!("log api: {e}"))?; + lua.globals() + .set("log", log_fn) + .map_err(|e| format!("set log global: {e}"))?; Ok(()) } diff --git a/tests/e2e_scripts.rs b/tests/e2e_scripts.rs index 78994ec..8b8a357 100644 --- a/tests/e2e_scripts.rs +++ b/tests/e2e_scripts.rs @@ -555,6 +555,57 @@ async fn record_create_returning_nil_skips_indexing() { ); } +// --------------------------------------------------------------------------- +// log() in scripts → event_logs +// --------------------------------------------------------------------------- + +#[tokio::test] +#[serial] +#[ignore] +async fn record_event_script_log_writes_event_log_row() { + let app = TestApp::new().await; + seed_lexicon(&app, fixtures::game_record_lexicon()).await; + + create_script( + &app, + "record.create:games.gamesgamesgamesgames.game", + "function handle() log('hello from script'); return event.record end", + ) + .await; + + handle_record_event( + &app.state, + &RecordEvent { + did: "did:plc:test".into(), + collection: "games.gamesgamesgamesgames.game".into(), + rkey: "rk1".into(), + action: "create".into(), + record: Some(json!({"title": "anything"})), + cid: Some("bafy".into()), + }, + ) + .await; + + // The script's log("hello from script") should land in event_logs + // as a `script.log` row whose subject is the trigger id. + let row: (String, String) = sqlx::query_as(&adapt_sql( + "SELECT subject, detail FROM event_logs + WHERE event_type = 'script.log' + ORDER BY id DESC LIMIT 1", + app.state.db_backend, + )) + .fetch_one(&app.state.db) + .await + .expect("expected a script.log row"); + assert_eq!(row.0, "record.create:games.gamesgamesgamesgames.game"); + let detail: Value = serde_json::from_str(&row.1).unwrap(); + assert_eq!(detail["message"], "hello from script"); + assert_eq!( + detail["trigger"], + "record.create:games.gamesgamesgamesgames.game" + ); +} + // --------------------------------------------------------------------------- // Label scripts via URI routing // --------------------------------------------------------------------------- -- 2.51.2 From e7cd71e484c82382e3c3abbb042099f8c9b826ce Mon Sep 17 00:00:00 2001 From: Chris Pardy Date: Fri, 1 May 2026 11:22:11 -0400 Subject: [PATCH 174/250] refactor(scripts): bundle record-event runner args into RecordEventPayload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `run_record_event_script` and `run_record_event_once` each took the record-event context as 6 positional arguments (nsid, action, uri, did, rkey, record). Six `&str`s in a row that the type system can't help you order — easy to swap `did` and `uri` and have it compile. Introduce a `RecordEventPayload<'a>` struct so the runner reads as run_record_event_script(state, payload).await run_record_event_once(state, &resolved, payload).await Both call sites (record_handler::handle_record_event and admin::dead_letters::retry_single) updated to construct the struct literal — names instead of positions. No behavior change. Signed-off-by: Chris Pardy Signed-off-by: Trezy --- src/admin/dead_letters.rs | 16 ++++--- src/lua/mod.rs | 7 +-- src/lua/scripts.rs | 90 ++++++++++++++++++++++----------------- src/record_handler.rs | 28 ++++++------ 4 files changed, 79 insertions(+), 62 deletions(-) diff --git a/src/admin/dead_letters.rs b/src/admin/dead_letters.rs index c5a1018..42c1d33 100644 --- a/src/admin/dead_letters.rs +++ b/src/admin/dead_letters.rs @@ -10,7 +10,7 @@ use super::permissions::Permission; use crate::AppState; use crate::db::{adapt_sql, now_rfc3339, parse_dt}; use crate::error::AppError; -use crate::lua::{resolve_record_event, run_record_event_once}; +use crate::lua::{RecordEventPayload, resolve_record_event, run_record_event_once}; use crate::record_handler::RecordEvent; // --------------------------------------------------------------------------- @@ -513,12 +513,14 @@ async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { match run_record_event_once( state, &resolved, - &dl.action, - &dl.uri, - &dl.did, - &dl.collection, - &dl.rkey, - record.as_ref(), + RecordEventPayload { + nsid: &dl.collection, + action: &dl.action, + uri: &dl.uri, + did: &dl.did, + rkey: &dl.rkey, + record: record.as_ref(), + }, ) .await { diff --git a/src/lua/mod.rs b/src/lua/mod.rs index 7177414..bed07b3 100644 --- a/src/lua/mod.rs +++ b/src/lua/mod.rs @@ -14,7 +14,8 @@ pub(crate) use context::SpaceContext; pub(crate) use execute::{execute_procedure_script, execute_query_script}; pub(crate) use sandbox::validate_script; pub use scripts::{ - LabelAppliedEvent, LabelHookOutcome, ParsedTrigger, ResolvedScript, ScriptLanguage, ScriptRow, - TriggerKind, resolve, resolve_record_event, run_label_applied_script, run_record_event_once, - run_record_event_script, trigger_for_label_uri, + LabelAppliedEvent, LabelHookOutcome, ParsedTrigger, RecordEventPayload, ResolvedScript, + ScriptLanguage, ScriptRow, TriggerKind, resolve, resolve_record_event, + run_label_applied_script, run_record_event_once, run_record_event_script, + trigger_for_label_uri, }; diff --git a/src/lua/scripts.rs b/src/lua/scripts.rs index 870d373..f3f8ef6 100644 --- a/src/lua/scripts.rs +++ b/src/lua/scripts.rs @@ -278,37 +278,45 @@ pub async fn resolve_record_event( // Record-event runner (fail-open, retry + dead-letter) // --------------------------------------------------------------------------- +/// All the contextual fields a record-event script needs at execution +/// time. Bundled into a struct so the runner doesn't take 6+ `&str` +/// positional arguments — easy to swap `did` and `uri` and have the +/// type checker shrug. +#[derive(Clone, Copy, Debug)] +pub struct RecordEventPayload<'a> { + pub nsid: &'a str, + pub action: &'a str, + pub uri: &'a str, + pub did: &'a str, + pub rkey: &'a str, + pub record: Option<&'a Value>, +} + /// Run the record-event script (if any) for a given event. Returns the /// record body the indexer should store: `Some(record)` to proceed, /// `None` to skip indexing. /// /// Failure mode is fail-open: a script that exhausts its retry budget is /// dead-lettered and the indexer proceeds with the original record. -#[allow(clippy::too_many_arguments)] pub async fn run_record_event_script( state: &AppState, - nsid: &str, - action: &str, - uri: &str, - did: &str, - rkey: &str, - record: Option<&Value>, + payload: RecordEventPayload<'_>, ) -> Option { - let resolved = match resolve_record_event(state, nsid, action).await { + let resolved = match resolve_record_event(state, payload.nsid, payload.action).await { Some(s) => s, // No script for this trigger → indexer keeps the original record. - None => return record.cloned(), + None => return payload.record.cloned(), }; - let host_id = format!("{nsid}:{action}"); - let payload = serde_json::json!({ + let host_id = format!("{}:{}", payload.nsid, payload.action); + let event_payload = serde_json::json!({ "trigger": resolved.id, - "action": action, - "uri": uri, - "did": did, - "collection": nsid, - "rkey": rkey, - "record": record, + "action": payload.action, + "uri": payload.uri, + "did": payload.did, + "collection": payload.nsid, + "rkey": payload.rkey, + "record": payload.record, }); let mut last_error = String::new(); @@ -317,7 +325,7 @@ pub async fn run_record_event_script( let delay = std::time::Duration::from_secs(1 << (attempt - 1)); tokio::time::sleep(delay).await; } - match run_record_event_once(state, &resolved, action, uri, did, nsid, rkey, record).await { + match run_record_event_once(state, &resolved, payload).await { Ok(outcome) => { log_event( &state.db, @@ -325,7 +333,7 @@ pub async fn run_record_event_script( event_type: "script.executed".to_string(), severity: Severity::Info, actor_did: None, - subject: Some(uri.to_string()), + subject: Some(payload.uri.to_string()), detail: serde_json::json!({ "host_kind": "record", "host_id": host_id, @@ -341,7 +349,7 @@ pub async fn run_record_event_script( Err(e) => { last_error = e; tracing::warn!( - %uri, + uri = %payload.uri, trigger = %resolved.id, attempt = attempt + 1, "record script attempt failed: {last_error}" @@ -355,7 +363,7 @@ pub async fn run_record_event_script( &resolved, "record", &host_id, - &payload, + &event_payload, &last_error, MAX_ATTEMPTS, ) @@ -366,7 +374,7 @@ pub async fn run_record_event_script( event_type: "script.dead_lettered".to_string(), severity: Severity::Error, actor_did: None, - subject: Some(uri.to_string()), + subject: Some(payload.uri.to_string()), detail: serde_json::json!({ "host_kind": "record", "host_id": host_id, @@ -379,7 +387,7 @@ pub async fn run_record_event_script( .await; // Fail-open: indexer proceeds with the original record. - record.cloned() + payload.record.cloned() } /// Single attempt at the record-event Lua script. Used internally by the @@ -388,16 +396,10 @@ pub async fn run_record_event_script( /// Returns `Ok(Some(value))` to continue indexing with `value`, /// `Ok(None)` when the script returned `nil` (skip), or `Err(msg)` on /// any execution failure. -#[allow(clippy::too_many_arguments)] pub async fn run_record_event_once( state: &AppState, script: &ResolvedScript, - action: &str, - uri: &str, - did: &str, - collection: &str, - rkey: &str, - record: Option<&Value>, + payload: RecordEventPayload<'_>, ) -> Result, String> { if script.language != ScriptLanguage::Lua { return Err(format!( @@ -407,25 +409,33 @@ pub async fn run_record_event_once( } let lua = sandbox::create_sandbox().map_err(|e| format!("create sandbox: {e}"))?; let state_arc = Arc::new(state.clone()); - register_default_apis(&lua, &state_arc, &script.id, Some(did))?; + register_default_apis(&lua, &state_arc, &script.id, Some(payload.did))?; // Legacy globals (action, uri, did, collection, rkey, record) for // back-compat with scripts written against the old `index_hook` // surface. - context::set_hook_context(&lua, action, uri, did, collection, rkey, record) - .map_err(|e| format!("set hook context: {e}"))?; + context::set_hook_context( + &lua, + payload.action, + payload.uri, + payload.did, + payload.nsid, + payload.rkey, + payload.record, + ) + .map_err(|e| format!("set hook context: {e}"))?; // Also expose an `event` table — same fields, different idiom. New // scripts can read `event.action` / `event.record.title` instead of // the bare globals; both styles work. use mlua::LuaSerdeExt; let event_value = serde_json::json!({ - "action": action, - "uri": uri, - "did": did, - "collection": collection, - "rkey": rkey, - "record": record, + "action": payload.action, + "uri": payload.uri, + "did": payload.did, + "collection": payload.nsid, + "rkey": payload.rkey, + "record": payload.record, }); lua.globals() .set( @@ -459,7 +469,7 @@ pub async fn run_record_event_once( Ok(Some(v)) } // Non-nil, non-table return — pass-through: keep the original record. - _ => Ok(record.cloned()), + _ => Ok(payload.record.cloned()), } } diff --git a/src/record_handler.rs b/src/record_handler.rs index e3c5173..c35dd27 100644 --- a/src/record_handler.rs +++ b/src/record_handler.rs @@ -65,12 +65,14 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { // `record.index:`; failures are dead-lettered fail-open. let hook_result = crate::lua::run_record_event_script( state, - &record.collection, - &record.action, - &uri, - &record.did, - &record.rkey, - Some(rec), + crate::lua::RecordEventPayload { + nsid: &record.collection, + action: &record.action, + uri: &uri, + did: &record.did, + rkey: &record.rkey, + record: Some(rec), + }, ) .await; let rec_to_store = match hook_result { @@ -183,12 +185,14 @@ pub async fn handle_record_event(state: &AppState, record: &RecordEvent) { // return aborts the delete; any other return continues. let hook_result = crate::lua::run_record_event_script( state, - &record.collection, - "delete", - &uri, - &record.did, - &record.rkey, - None, + crate::lua::RecordEventPayload { + nsid: &record.collection, + action: "delete", + uri: &uri, + did: &record.did, + rkey: &record.rkey, + record: None, + }, ) .await; if hook_result.is_none() { -- 2.51.2 From e720b2be0e3abe07c30f0966f4b1cd24cf73910f Mon Sep 17 00:00:00 2001 From: Chris Pardy Date: Fri, 1 May 2026 11:30:25 -0400 Subject: [PATCH 175/250] fix(dead-letters): admin endpoints span both legacy + new tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The trigger-keyed dispatcher writes failures to `dead_letter_scripts` (introduced in a086830). The admin endpoints under `/admin/dead-letters/*` were still hardcoded to read from the legacy `dead_letter_hooks` table, so: - The dashboard list / count silently dropped any failure from the new dispatcher (record-event scripts AND label scripts). - Per-id `retry` / `dismiss` / `reindex` returned 404 for any new id. Make the surface span both tables. Per-id operations route by id format (id parses as integer → `dead_letter_scripts`; anything else → `dead_letter_hooks`); the two id namespaces are disjoint (BIGSERIAL/INTEGER vs UUID/TEXT) so this dispatch is unambiguous. List / count run two queries and merge in Rust — `dead_letter_hooks` has flat columns while `dead_letter_scripts` carries event fields inside `payload` JSON, so a portable SQL UNION isn't worth the backend-specific JSON-extract dance. Schema mapping for `dead_letter_scripts` rows onto the existing `DeadLetterSummary` shape: - **Record events** (`host_kind = "record"`): collection / did / uri / rkey / action come from `payload.{collection,did,uri,rkey,action}`; `lexicon_id` reuses the collection. - **Label arrivals** (`host_kind = "label"`): `lexicon_id` is the trigger id (e.g. `labeler.apply:app.bsky.feed.post`); `did` is the labeler DID (`host_id`); `action` is the literal `"label"`; `rkey` is `payload.val`. `retry_single` / `reindex_single` reject label dead letters with a clear 400 — the upstream label event is gone, so re-running the script with the original payload is meaningful but reindexing isn't, and the user-visible error spells out which. Helpers `mark_resolved` / `update_error` now take a `DeadLetterSource` and bind the id as `i64` for the new table (sqlite implicit-conversion otherwise quietly fails to match). Bulk operations: - `all: true` updates / collects ids from both tables; the optional `collection` filter only constrains the legacy table (the new table doesn't have a collection column — filtering by collection there would require JSON-parsing the payload in SQL). - `ids: [...]` routes each id by source. No new tests added — the existing `e2e_admin` suite still passes (22/23; the 1 failure is `backfill_create_job` which is flaky on origin/dev too). Signed-off-by: Chris Pardy Signed-off-by: Trezy --- src/admin/dead_letters.rs | 819 ++++++++++++++++++++++++++++---------- 1 file changed, 606 insertions(+), 213 deletions(-) diff --git a/src/admin/dead_letters.rs b/src/admin/dead_letters.rs index 42c1d33..a28482c 100644 --- a/src/admin/dead_letters.rs +++ b/src/admin/dead_letters.rs @@ -1,3 +1,22 @@ +//! Admin surface for dead-lettered events. +//! +//! Two tables back this: +//! +//! - **`dead_letter_hooks`** (legacy) — written by the pre-trigger-keyed +//! indexer when a hook script exhausted retries. Columns are +//! per-event-field (lexicon_id, uri, did, collection, rkey, action, +//! record). UUID / TEXT primary keys. +//! - **`dead_letter_scripts`** (current) — written by the trigger-keyed +//! dispatcher in `crate::lua::scripts`. The event-specific fields are +//! inside `payload` (JSON). INTEGER primary keys. Carries both record +//! and label dead letters via the `host_kind` discriminator. +//! +//! Both tables are kept readable + manageable through this admin +//! surface. Per-id operations route by id format: an id that parses as +//! an integer routes to `dead_letter_scripts`, anything else (UUIDs, +//! sqlite NULL-stringified primary keys) routes to `dead_letter_hooks`. +//! The two id namespaces are disjoint so this dispatch is unambiguous. + use axum::{ Json, extract::{Path, Query, State}, @@ -13,6 +32,37 @@ use crate::error::AppError; use crate::lua::{RecordEventPayload, resolve_record_event, run_record_event_once}; use crate::record_handler::RecordEvent; +// --------------------------------------------------------------------------- +// Source enum — which table backs a given dead-letter id +// --------------------------------------------------------------------------- + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum DeadLetterSource { + /// Pre-trigger-keyed legacy hooks table. + LegacyHooks, + /// New trigger-keyed scripts table. + Scripts, +} + +impl DeadLetterSource { + /// Pick the table by id format. Integer-parseable → Scripts; + /// anything else → LegacyHooks. + fn from_id(id: &str) -> Self { + if id.parse::().is_ok() { + Self::Scripts + } else { + Self::LegacyHooks + } + } + + fn table(self) -> &'static str { + match self { + Self::LegacyHooks => "dead_letter_hooks", + Self::Scripts => "dead_letter_scripts", + } + } +} + // --------------------------------------------------------------------------- // Query / request / response types // --------------------------------------------------------------------------- @@ -73,118 +123,77 @@ pub struct BulkRequest { } /// Internal row type for fetching action data needed by retry/reindex. -#[allow(dead_code)] +/// Populated from either table by `fetch_dead_letter_for_action`. struct DeadLetterRow { id: String, - lexicon_id: String, + source: DeadLetterSource, + /// Discriminator for new-table rows: `"record"` or `"label"`. + /// Always `"record"` for legacy rows. Retries are only supported + /// for record dead letters. + host_kind: String, uri: String, did: String, collection: String, rkey: String, action: String, record: Option, - error: String, - attempts: i64, } // --------------------------------------------------------------------------- // Handlers // --------------------------------------------------------------------------- -/// GET /admin/dead-letters +/// `GET /admin/dead-letters` — list rows from both tables, merge by +/// created_at, paginate via cursor. pub(super) async fn list( auth: UserAuth, State(state): State, Query(query): Query, ) -> Result, AppError> { auth.require(Permission::DeadLettersRead).await?; - let backend = state.db_backend; let limit = query.limit.unwrap_or(50).clamp(1, 100); - - let mut sql = String::from( - "SELECT id, lexicon_id, uri, did, collection, rkey, action, error, attempts, created_at, resolved_at - FROM dead_letter_hooks WHERE 1=1", + let resolved = query.resolved.as_deref().unwrap_or("false"); + + // Fetch up to `limit` rows from each table, then merge + slice. + // Two queries instead of a SQL UNION because the schemas differ + // (legacy has columns; scripts has payload JSON we parse in Rust). + let mut rows = list_legacy( + &state, + resolved, + query.collection.as_deref(), + &query.cursor, + limit, + ) + .await?; + rows.extend( + list_scripts( + &state, + resolved, + query.collection.as_deref(), + &query.cursor, + limit, + ) + .await?, ); - let resolved_filter = query.resolved.as_deref().unwrap_or("false"); - match resolved_filter { - "false" => sql.push_str(" AND resolved_at IS NULL"), - "true" => sql.push_str(" AND resolved_at IS NOT NULL"), - _ => {} // no filter - } - - if query.collection.is_some() { - sql.push_str(" AND collection = ?"); - } - if query.cursor.is_some() { - sql.push_str(" AND created_at < ?"); - } - - sql.push_str(" ORDER BY created_at DESC LIMIT ?"); - - let sql = adapt_sql(&sql, backend); - - #[allow(clippy::type_complexity)] - let mut q = sqlx::query_as::< - _, - ( - String, - String, - String, - String, - String, - String, - String, - String, - i64, - String, - Option, - ), - >(&sql); - - if let Some(ref collection) = query.collection { - q = q.bind(collection); - } - if let Some(ref cursor) = query.cursor { - q = q.bind(cursor); - } - q = q.bind(limit); - - let rows = q - .fetch_all(&state.db) - .await - .map_err(|e| AppError::Internal(format!("failed to query dead letters: {e}")))?; + // Newest first, then truncate. + rows.sort_by(|a, b| b.created_at.cmp(&a.created_at)); + let truncated = rows.len() as i64 > limit; + rows.truncate(limit as usize); - let dead_letters: Vec = rows - .into_iter() - .map(|row| DeadLetterSummary { - id: row.0, - lexicon_id: row.1, - uri: row.2, - did: row.3, - collection: row.4, - rkey: row.5, - action: row.6, - error: row.7, - attempts: row.8, - created_at: parse_dt(&row.9), - resolved_at: row.10.as_deref().map(parse_dt), - }) - .collect(); - - let cursor = if dead_letters.len() as i64 >= limit { - dead_letters.last().map(|dl| dl.created_at.to_rfc3339()) + let cursor = if truncated { + rows.last().map(|r| r.created_at.to_rfc3339()) } else { None }; Ok(Json(ListResponse { - dead_letters, + dead_letters: rows, cursor, })) } -/// GET /admin/dead-letters/count +/// `GET /admin/dead-letters/count` — sum of unresolved across both tables. pub(super) async fn count( auth: UserAuth, State(state): State, @@ -192,96 +201,58 @@ pub(super) async fn count( ) -> Result, AppError> { auth.require(Permission::DeadLettersRead).await?; let backend = state.db_backend; + let resolved = query.resolved.as_deref().unwrap_or("false"); + let resolved_clause = match resolved { + "false" => " AND resolved_at IS NULL", + "true" => " AND resolved_at IS NOT NULL", + _ => "", + }; - let mut sql = String::from("SELECT COUNT(*) FROM dead_letter_hooks WHERE 1=1"); - - let resolved_filter = query.resolved.as_deref().unwrap_or("false"); - match resolved_filter { - "false" => sql.push_str(" AND resolved_at IS NULL"), - "true" => sql.push_str(" AND resolved_at IS NOT NULL"), - _ => {} + let mut total: i64 = 0; + for table in [ + DeadLetterSource::LegacyHooks.table(), + DeadLetterSource::Scripts.table(), + ] { + let sql = adapt_sql( + &format!("SELECT COUNT(*) FROM {table} WHERE 1=1{resolved_clause}"), + backend, + ); + let (n,): (i64,) = sqlx::query_as(&sql) + .fetch_one(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to count dead letters: {e}")))?; + total += n; } - let sql = adapt_sql(&sql, backend); - let (count,): (i64,) = sqlx::query_as(&sql) - .fetch_one(&state.db) - .await - .map_err(|e| AppError::Internal(format!("failed to count dead letters: {e}")))?; - - Ok(Json(CountResponse { count })) + Ok(Json(CountResponse { count: total })) } -/// GET /admin/dead-letters/{id} +/// `GET /admin/dead-letters/{id}` — detail view. Routes by id format. pub(super) async fn detail( auth: UserAuth, State(state): State, Path(id): Path, ) -> Result, AppError> { auth.require(Permission::DeadLettersRead).await?; - let backend = state.db_backend; - - let sql = adapt_sql( - "SELECT id, lexicon_id, uri, did, collection, rkey, action, error, attempts, created_at, resolved_at, record - FROM dead_letter_hooks WHERE id = ?", - backend, - ); - - #[allow(clippy::type_complexity)] - let row: ( - String, - String, - String, - String, - String, - String, - String, - String, - i64, - String, - Option, - Option, - ) = sqlx::query_as(&sql) - .bind(&id) - .fetch_optional(&state.db) - .await - .map_err(|e| AppError::Internal(format!("failed to fetch dead letter: {e}")))? - .ok_or_else(|| AppError::NotFound(format!("dead letter {id} not found")))?; - - let summary = DeadLetterSummary { - id: row.0, - lexicon_id: row.1, - uri: row.2, - did: row.3, - collection: row.4, - rkey: row.5, - action: row.6, - error: row.7, - attempts: row.8, - created_at: parse_dt(&row.9), - resolved_at: row.10.as_deref().map(parse_dt), - }; - - let record = row.11.as_deref().and_then(|r| serde_json::from_str(r).ok()); - - Ok(Json(DeadLetterDetail { summary, record })) + match DeadLetterSource::from_id(&id) { + DeadLetterSource::LegacyHooks => detail_legacy(&state, &id).await.map(Json), + DeadLetterSource::Scripts => detail_scripts(&state, &id).await.map(Json), + } } -/// POST /admin/dead-letters/{id}/dismiss +/// `POST /admin/dead-letters/{id}/dismiss` pub(super) async fn dismiss( auth: UserAuth, State(state): State, Path(id): Path, ) -> Result, AppError> { auth.require(Permission::DeadLettersManage).await?; - let dl = fetch_dead_letter_for_action(&state, &id).await?; - if dl.id.is_empty() { - return Err(AppError::NotFound(format!("dead letter {id} not found"))); - } - mark_resolved(&state, &id).await?; + let source = DeadLetterSource::from_id(&id); + mark_resolved(&state, &id, source).await?; Ok(Json(serde_json::json!({ "ok": true }))) } -/// POST /admin/dead-letters/{id}/retry +/// `POST /admin/dead-letters/{id}/retry` pub(super) async fn retry( auth: UserAuth, State(state): State, @@ -292,7 +263,7 @@ pub(super) async fn retry( Ok(Json(serde_json::json!({ "ok": true }))) } -/// POST /admin/dead-letters/{id}/reindex +/// `POST /admin/dead-letters/{id}/reindex` pub(super) async fn reindex( auth: UserAuth, State(state): State, @@ -303,7 +274,7 @@ pub(super) async fn reindex( Ok(Json(serde_json::json!({ "ok": true }))) } -/// POST /admin/dead-letters/bulk/dismiss +/// `POST /admin/dead-letters/bulk/dismiss` pub(super) async fn bulk_dismiss( auth: UserAuth, State(state): State, @@ -314,31 +285,32 @@ pub(super) async fn bulk_dismiss( let now = now_rfc3339(); if body.all == Some(true) { - let mut sql = - String::from("UPDATE dead_letter_hooks SET resolved_at = ? WHERE resolved_at IS NULL"); - if body.collection.is_some() { - sql.push_str(" AND collection = ?"); - } - let sql = adapt_sql(&sql, backend); - let mut q = sqlx::query(&sql).bind(&now); - if let Some(ref collection) = body.collection { - q = q.bind(collection); + // Operate against both tables. Collection filter only applies + // to legacy rows (the new `dead_letter_scripts` doesn't have a + // collection column — to filter by collection there we'd need + // to JSON-parse `payload`, which is portable-SQL pain. Good + // enough: legacy table is the one with bulk-by-collection + // history anyway.). + for source in [DeadLetterSource::LegacyHooks, DeadLetterSource::Scripts] { + let table = source.table(); + let mut sql = format!("UPDATE {table} SET resolved_at = ? WHERE resolved_at IS NULL"); + let collection_filter = + source == DeadLetterSource::LegacyHooks && body.collection.is_some(); + if collection_filter { + sql.push_str(" AND collection = ?"); + } + let sql = adapt_sql(&sql, backend); + let mut q = sqlx::query(&sql).bind(&now); + if collection_filter && let Some(ref c) = body.collection { + q = q.bind(c); + } + q.execute(&state.db) + .await + .map_err(|e| AppError::Internal(format!("bulk dismiss failed: {e}")))?; } - q.execute(&state.db) - .await - .map_err(|e| AppError::Internal(format!("bulk dismiss failed: {e}")))?; } else if let Some(ref ids) = body.ids { for id in ids { - let sql = adapt_sql( - "UPDATE dead_letter_hooks SET resolved_at = ? WHERE id = ? AND resolved_at IS NULL", - backend, - ); - sqlx::query(&sql) - .bind(&now) - .bind(id) - .execute(&state.db) - .await - .map_err(|e| AppError::Internal(format!("bulk dismiss failed for {id}: {e}")))?; + mark_resolved(&state, id, DeadLetterSource::from_id(id)).await?; } } else { return Err(AppError::BadRequest( @@ -349,7 +321,7 @@ pub(super) async fn bulk_dismiss( Ok(Json(serde_json::json!({ "ok": true }))) } -/// POST /admin/dead-letters/bulk/retry +/// `POST /admin/dead-letters/bulk/retry` pub(super) async fn bulk_retry( auth: UserAuth, State(state): State, @@ -363,7 +335,7 @@ pub(super) async fn bulk_retry( Ok(Json(serde_json::json!({ "ok": true }))) } -/// POST /admin/dead-letters/bulk/reindex +/// `POST /admin/dead-letters/bulk/reindex` pub(super) async fn bulk_reindex( auth: UserAuth, State(state): State, @@ -378,21 +350,234 @@ pub(super) async fn bulk_reindex( } // --------------------------------------------------------------------------- -// Helper functions +// Per-table list / detail // --------------------------------------------------------------------------- -/// Fetch an unresolved dead letter by ID, returning an error if not found or already resolved. -async fn fetch_dead_letter_for_action( +async fn list_legacy( + state: &AppState, + resolved: &str, + collection: Option<&str>, + cursor: &Option, + limit: i64, +) -> Result, AppError> { + let backend = state.db_backend; + let mut sql = String::from( + "SELECT id, lexicon_id, uri, did, collection, rkey, action, error, attempts, created_at, resolved_at + FROM dead_letter_hooks WHERE 1=1", + ); + match resolved { + "false" => sql.push_str(" AND resolved_at IS NULL"), + "true" => sql.push_str(" AND resolved_at IS NOT NULL"), + _ => {} + } + if collection.is_some() { + sql.push_str(" AND collection = ?"); + } + if cursor.is_some() { + sql.push_str(" AND created_at < ?"); + } + sql.push_str(" ORDER BY created_at DESC LIMIT ?"); + + let sql = adapt_sql(&sql, backend); + #[allow(clippy::type_complexity)] + let mut q = sqlx::query_as::< + _, + ( + String, + String, + String, + String, + String, + String, + String, + String, + i64, + String, + Option, + ), + >(&sql); + if let Some(c) = collection { + q = q.bind(c); + } + if let Some(cur) = cursor { + q = q.bind(cur); + } + q = q.bind(limit); + + let rows = q + .fetch_all(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to query legacy dead letters: {e}")))?; + + Ok(rows + .into_iter() + .map(|row| DeadLetterSummary { + id: row.0, + lexicon_id: row.1, + uri: row.2, + did: row.3, + collection: row.4, + rkey: row.5, + action: row.6, + error: row.7, + attempts: row.8, + created_at: parse_dt(&row.9), + resolved_at: row.10.as_deref().map(parse_dt), + }) + .collect()) +} + +async fn list_scripts( state: &AppState, + resolved: &str, + collection: Option<&str>, + cursor: &Option, + limit: i64, +) -> Result, AppError> { + let backend = state.db_backend; + let mut sql = String::from( + "SELECT id, script_ref, host_kind, host_id, payload, error, attempts, created_at, resolved_at + FROM dead_letter_scripts WHERE 1=1", + ); + match resolved { + "false" => sql.push_str(" AND resolved_at IS NULL"), + "true" => sql.push_str(" AND resolved_at IS NOT NULL"), + _ => {} + } + if cursor.is_some() { + sql.push_str(" AND created_at < ?"); + } + sql.push_str(" ORDER BY created_at DESC LIMIT ?"); + + let sql = adapt_sql(&sql, backend); + #[allow(clippy::type_complexity)] + let mut q = sqlx::query_as::< + _, + ( + i64, + String, + String, + String, + String, + String, + i64, + String, + Option, + ), + >(&sql); + if let Some(cur) = cursor { + q = q.bind(cur); + } + q = q.bind(limit); + + let rows = q + .fetch_all(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to query scripts dead letters: {e}")))?; + + let summaries: Vec = rows + .into_iter() + .map(|row| { + summary_from_scripts_row( + &row.0.to_string(), + &row.1, + &row.2, + &row.3, + &row.4, + &row.5, + row.6, + &row.7, + row.8.as_deref(), + ) + }) + .collect(); + + // Filter by collection in Rust since the column lives inside + // `payload`. Negligible cost — already client-side after the + // unfiltered DB fetch. + Ok(if let Some(want) = collection { + summaries + .into_iter() + .filter(|s| s.collection == want) + .collect() + } else { + summaries + }) +} + +#[allow(clippy::too_many_arguments)] +fn summary_from_scripts_row( id: &str, -) -> Result { + script_ref: &str, + host_kind: &str, + host_id: &str, + payload: &str, + error: &str, + attempts: i64, + created_at: &str, + resolved_at: Option<&str>, +) -> DeadLetterSummary { + let payload_v: Value = serde_json::from_str(payload).unwrap_or(Value::Null); + let s = |key: &str| { + payload_v + .get(key) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string() + }; + + // Map the trigger-keyed payload onto the legacy DeadLetterSummary + // shape. Record-event dead letters fit cleanly. Label-arrival dead + // letters reuse the slots: did = labeler DID (host_id), action = + // "label", rkey = label.val, collection extracted from the trigger + // suffix when possible. + let (lexicon_id, collection, did, rkey, action) = match host_kind { + "label" => { + let collection_from_trigger = script_ref + .split_once(':') + .map(|(_, suf)| suf.to_string()) + .unwrap_or_default(); + ( + script_ref.to_string(), + collection_from_trigger, + host_id.to_string(), + s("val"), + "label".to_string(), + ) + } + _ => ( + s("collection"), + s("collection"), + s("did"), + s("rkey"), + s("action"), + ), + }; + + DeadLetterSummary { + id: id.to_string(), + lexicon_id, + uri: s("uri"), + did, + collection, + rkey, + action, + error: error.to_string(), + attempts, + created_at: parse_dt(created_at), + resolved_at: resolved_at.map(parse_dt), + } +} + +async fn detail_legacy(state: &AppState, id: &str) -> Result { let backend = state.db_backend; let sql = adapt_sql( - "SELECT id, lexicon_id, uri, did, collection, rkey, action, record, error, attempts - FROM dead_letter_hooks WHERE id = ? AND resolved_at IS NULL", + "SELECT id, lexicon_id, uri, did, collection, rkey, action, error, attempts, created_at, resolved_at, record + FROM dead_letter_hooks WHERE id = ?", backend, ); + #[allow(clippy::type_complexity)] let row: ( String, String, @@ -401,19 +586,19 @@ async fn fetch_dead_letter_for_action( String, String, String, - Option, String, i64, + String, + Option, + Option, ) = sqlx::query_as(&sql) .bind(id) .fetch_optional(&state.db) .await .map_err(|e| AppError::Internal(format!("failed to fetch dead letter: {e}")))? - .ok_or_else(|| { - AppError::NotFound(format!("dead letter {id} not found or already resolved")) - })?; + .ok_or_else(|| AppError::NotFound(format!("dead letter {id} not found")))?; - Ok(DeadLetterRow { + let summary = DeadLetterSummary { id: row.0, lexicon_id: row.1, uri: row.2, @@ -421,63 +606,253 @@ async fn fetch_dead_letter_for_action( collection: row.4, rkey: row.5, action: row.6, - record: row.7, - error: row.8, - attempts: row.9, - }) + error: row.7, + attempts: row.8, + created_at: parse_dt(&row.9), + resolved_at: row.10.as_deref().map(parse_dt), + }; + + let record = row.11.as_deref().and_then(|r| serde_json::from_str(r).ok()); + Ok(DeadLetterDetail { summary, record }) +} + +async fn detail_scripts(state: &AppState, id: &str) -> Result { + let backend = state.db_backend; + let sql = adapt_sql( + "SELECT id, script_ref, host_kind, host_id, payload, error, attempts, created_at, resolved_at + FROM dead_letter_scripts WHERE id = ?", + backend, + ); + let id_int: i64 = id + .parse() + .map_err(|_| AppError::NotFound(format!("dead letter {id} not found")))?; + + #[allow(clippy::type_complexity)] + let row: ( + i64, + String, + String, + String, + String, + String, + i64, + String, + Option, + ) = sqlx::query_as(&sql) + .bind(id_int) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to fetch dead letter: {e}")))? + .ok_or_else(|| AppError::NotFound(format!("dead letter {id} not found")))?; + + let summary = summary_from_scripts_row( + &row.0.to_string(), + &row.1, + &row.2, + &row.3, + &row.4, + &row.5, + row.6, + &row.7, + row.8.as_deref(), + ); + + let payload_v: Value = serde_json::from_str(&row.4).unwrap_or(Value::Null); + // For record events the original record body lives at `payload.record`. + // For label events the entire payload is the event; surface it whole. + let record = if row.2 == "label" { + Some(payload_v.clone()) + } else { + payload_v.get("record").cloned() + }; + + Ok(DeadLetterDetail { summary, record }) +} + +// --------------------------------------------------------------------------- +// Per-row helpers (retry, reindex, mark resolved, update error) +// --------------------------------------------------------------------------- + +/// Fetch an unresolved dead letter from whichever table holds it. +async fn fetch_dead_letter_for_action( + state: &AppState, + id: &str, +) -> Result { + let source = DeadLetterSource::from_id(id); + match source { + DeadLetterSource::LegacyHooks => { + let backend = state.db_backend; + let sql = adapt_sql( + "SELECT id, lexicon_id, uri, did, collection, rkey, action, record, error, attempts + FROM dead_letter_hooks WHERE id = ? AND resolved_at IS NULL", + backend, + ); + #[allow(clippy::type_complexity)] + let row: ( + String, + String, + String, + String, + String, + String, + String, + Option, + String, + i64, + ) = sqlx::query_as(&sql) + .bind(id) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to fetch dead letter: {e}")))? + .ok_or_else(|| { + AppError::NotFound(format!("dead letter {id} not found or already resolved")) + })?; + Ok(DeadLetterRow { + id: row.0, + source, + host_kind: "record".to_string(), + uri: row.2, + did: row.3, + collection: row.4, + rkey: row.5, + action: row.6, + record: row.7, + }) + } + DeadLetterSource::Scripts => { + let backend = state.db_backend; + let id_int: i64 = id.parse().unwrap_or_default(); + let sql = adapt_sql( + "SELECT id, host_kind, payload FROM dead_letter_scripts + WHERE id = ? AND resolved_at IS NULL", + backend, + ); + let row: (i64, String, String) = sqlx::query_as(&sql) + .bind(id_int) + .fetch_optional(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to fetch dead letter: {e}")))? + .ok_or_else(|| { + AppError::NotFound(format!("dead letter {id} not found or already resolved")) + })?; + let payload_v: Value = serde_json::from_str(&row.2).unwrap_or(Value::Null); + let s = |k: &str| { + payload_v + .get(k) + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_string() + }; + // The record body is nested under `payload.record` for + // record events; serialize it back to a string for the + // retry call site. + let record = payload_v + .get("record") + .filter(|v| !v.is_null()) + .map(|v| v.to_string()); + Ok(DeadLetterRow { + id: row.0.to_string(), + source, + host_kind: row.1.clone(), + uri: s("uri"), + did: s("did"), + collection: s("collection"), + rkey: s("rkey"), + action: s("action"), + record, + }) + } + } } -/// Mark a dead letter as resolved. -async fn mark_resolved(state: &AppState, id: &str) -> Result<(), AppError> { +async fn mark_resolved( + state: &AppState, + id: &str, + source: DeadLetterSource, +) -> Result<(), AppError> { let backend = state.db_backend; let now = now_rfc3339(); + let table = source.table(); let sql = adapt_sql( - "UPDATE dead_letter_hooks SET resolved_at = ? WHERE id = ?", + &format!("UPDATE {table} SET resolved_at = ? WHERE id = ?"), backend, ); - sqlx::query(&sql) - .bind(&now) - .bind(id) - .execute(&state.db) + let q = sqlx::query(&sql).bind(&now); + let q = match source { + // Scripts table has INTEGER ids; bind as i64 to avoid sqlite's + // implicit-conversion quirks. + DeadLetterSource::Scripts => q.bind(id.parse::().unwrap_or(0)), + DeadLetterSource::LegacyHooks => q.bind(id), + }; + q.execute(&state.db) .await .map_err(|e| AppError::Internal(format!("failed to mark dead letter resolved: {e}")))?; Ok(()) } -/// Update the error message and increment attempts. -async fn update_error(state: &AppState, id: &str, error: &str) -> Result<(), AppError> { +async fn update_error( + state: &AppState, + id: &str, + source: DeadLetterSource, + error: &str, +) -> Result<(), AppError> { let backend = state.db_backend; + let table = source.table(); let sql = adapt_sql( - "UPDATE dead_letter_hooks SET error = ?, attempts = attempts + 1 WHERE id = ?", + &format!("UPDATE {table} SET error = ?, attempts = attempts + 1 WHERE id = ?"), backend, ); - sqlx::query(&sql) - .bind(error) - .bind(id) - .execute(&state.db) + let q = sqlx::query(&sql).bind(error); + let q = match source { + DeadLetterSource::Scripts => q.bind(id.parse::().unwrap_or(0)), + DeadLetterSource::LegacyHooks => q.bind(id), + }; + q.execute(&state.db) .await .map_err(|e| AppError::Internal(format!("failed to update dead letter error: {e}")))?; Ok(()) } -/// Resolve a BulkRequest into a list of dead letter IDs. async fn resolve_bulk_ids(state: &AppState, body: &BulkRequest) -> Result, AppError> { if body.all == Some(true) { let backend = state.db_backend; + let mut ids: Vec = Vec::new(); + + // Legacy table — supports the optional collection filter. let mut sql = String::from("SELECT id FROM dead_letter_hooks WHERE resolved_at IS NULL"); if body.collection.is_some() { sql.push_str(" AND collection = ?"); } let sql = adapt_sql(&sql, backend); let mut q = sqlx::query_as::<_, (String,)>(&sql); - if let Some(ref collection) = body.collection { - q = q.bind(collection); + if let Some(ref c) = body.collection { + q = q.bind(c); } let rows = q .fetch_all(&state.db) .await .map_err(|e| AppError::Internal(format!("failed to resolve bulk ids: {e}")))?; - Ok(rows.into_iter().map(|r| r.0).collect()) + ids.extend(rows.into_iter().map(|r| r.0)); + + // New table — collection isn't a column; if a filter was + // requested, only include rows whose payload.collection matches. + // Simpler to just include all unresolved when no collection + // filter is set, and skip the new table entirely when one is + // (the legacy table is the one historically pinned to a + // collection anyway). + if body.collection.is_none() { + let sql = adapt_sql( + "SELECT id FROM dead_letter_scripts WHERE resolved_at IS NULL", + backend, + ); + let rows = sqlx::query_as::<_, (i64,)>(&sql) + .fetch_all(&state.db) + .await + .map_err(|e| AppError::Internal(format!("failed to resolve bulk ids: {e}")))?; + ids.extend(rows.into_iter().map(|r| r.0.to_string())); + } + + Ok(ids) } else if let Some(ref ids) = body.ids { Ok(ids.clone()) } else { @@ -490,12 +865,21 @@ async fn resolve_bulk_ids(state: &AppState, body: &BulkRequest) -> Result:` → `record.index:`). If no script is -/// bound for the cascade now, returns 404 — the operator either deleted -/// the script or never re-bound it under the new naming. +/// (`record.:` → `record.index:`). Label-arrival +/// dead letters are not retried (the upstream label is gone; there's +/// nothing to feed back into the runner). Caller gets a 400. async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { let dl = fetch_dead_letter_for_action(state, id).await?; + if dl.host_kind == "label" { + return Err(AppError::BadRequest( + "label-arrival dead letters can't be retried — the upstream label \ + event is gone. Dismiss this row and let the labeler subscription \ + redeliver if needed." + .into(), + )); + } + let resolved = resolve_record_event(state, &dl.collection, &dl.action) .await .ok_or_else(|| { @@ -525,11 +909,11 @@ async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { .await { Ok(_) => { - mark_resolved(state, id).await?; + mark_resolved(state, &dl.id, dl.source).await?; Ok(()) } Err(e) => { - update_error(state, id, &e).await?; + update_error(state, &dl.id, dl.source, &e).await?; Err(AppError::Internal(format!( "retry failed for dead letter {id}: {e}" ))) @@ -537,10 +921,19 @@ async fn retry_single(state: &AppState, id: &str) -> Result<(), AppError> { } } -/// Reindex a single dead letter by fetching the record fresh from the PDS. +/// Reindex by fetching the record fresh from the PDS. Only applies to +/// record-event dead letters. async fn reindex_single(state: &AppState, id: &str) -> Result<(), AppError> { let dl = fetch_dead_letter_for_action(state, id).await?; + if dl.host_kind == "label" { + return Err(AppError::BadRequest( + "label-arrival dead letters can't be reindexed — they don't have \ + a record to fetch." + .into(), + )); + } + let pds_endpoint = crate::profile::resolve_pds_endpoint(&state.http, &state.config.plc_url, &dl.did).await?; @@ -585,7 +978,7 @@ async fn reindex_single(state: &AppState, id: &str) -> Result<(), AppError> { }; crate::record_handler::handle_record_event(state, &event).await; - mark_resolved(state, id).await?; + mark_resolved(state, &dl.id, dl.source).await?; Ok(()) } -- 2.51.2 From 678da370c73b445e267b8d8ba4d8fedaec190ae4 Mon Sep 17 00:00:00 2001 From: Chris Pardy Date: Fri, 1 May 2026 07:56:09 -0400 Subject: [PATCH 176/250] feat(dashboard): scripts grouped by trigger family + lexicon targeting panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Frontend for the trigger-keyed scripts subsystem (commit a086830). The dashboard now exposes: - `/dashboard/settings/scripts` — grouped list of all scripts by trigger family (Record events, XRPC handlers, Label arrivals). The script's `id` IS its trigger string; the table makes that visible in monospace and links to the detail page. - `/dashboard/settings/scripts/new` — create form. The trigger id is composed via a `(kind, suffix)` picker (kind dropdown for the prefix family + free-text suffix for the NSID). The Lua body prefills with a `handle()` skeleton. The form accepts a `?id=` URL param so the lexicon detail page can deep-link with a candidate id pre-filled. - `/dashboard/settings/scripts/[id]` — detail/edit. The id is the PK so it's locked here; rename = delete + recreate. The header shows the cascade hint for record events ("`record.create:` fires only on this action; cascades to `record.index:` if absent."). The lexicon detail page gets a new "Scripts targeting this lexicon" panel that lists the trigger ids relevant to the lexicon's type: - Record-type lexicons show the four `record.*` slots (`record.index` / `record.create` / `record.update` / `record.delete`) with Edit/Create links. - XRPC lexicons show the matching `xrpc.{query,procedure}` slot. Existing scripts link straight to the detail page; missing rows link to the New Script page pre-filled with the trigger id. Operators get a one-click path from a lexicon to the scripts that affect it. The legacy `index_hook` editor on the lexicon page is left in place for now — operators with existing data can still see and edit the column, even though the runtime no longer reads it. A follow-up commit can drop the editor once we're confident no one relies on it. New: `web/src/types/scripts.ts` (Script, UpsertScriptBody, PatchScriptBody, TriggerKind / TriggerFamily helpers, parseTriggerId, DEFAULT_SCRIPT_BODY). Sidebar gets a Scripts nav item under Integrations (`scripts:read`-gated). Signed-off-by: Chris Pardy Signed-off-by: Trezy --- src/admin/backfill.rs | 14 +- .../lexicons/[id]/lexicon-detail.tsx | 273 ++++++++++----- .../dashboard/settings/scripts/[id]/page.tsx | 11 + .../settings/scripts/[id]/script-detail.tsx | 188 +++++++++++ .../dashboard/settings/scripts/new/page.tsx | 125 +++++++ .../app/dashboard/settings/scripts/page.tsx | 181 ++++++++++ .../settings/scripts/script-form.tsx | 315 ++++++++++++++++++ web/src/components/app-sidebar.tsx | 7 + web/src/lib/api.ts | 45 +++ web/src/types/scripts.ts | 135 ++++++++ 10 files changed, 1196 insertions(+), 98 deletions(-) create mode 100644 web/src/app/dashboard/settings/scripts/[id]/page.tsx create mode 100644 web/src/app/dashboard/settings/scripts/[id]/script-detail.tsx create mode 100644 web/src/app/dashboard/settings/scripts/new/page.tsx create mode 100644 web/src/app/dashboard/settings/scripts/page.tsx create mode 100644 web/src/app/dashboard/settings/scripts/script-form.tsx create mode 100644 web/src/types/scripts.ts diff --git a/src/admin/backfill.rs b/src/admin/backfill.rs index 4300ae1..5199c9c 100644 --- a/src/admin/backfill.rs +++ b/src/admin/backfill.rs @@ -1349,12 +1349,14 @@ async fn fetch_records_from_pds( let rec_to_store = match crate::lua::run_record_event_script( state, - collection, - "create", - &uri, - did, - &rkey, - Some(&entry.value), + crate::lua::RecordEventPayload { + nsid: collection, + action: "create", + uri: &uri, + did, + rkey: &rkey, + record: Some(&entry.value), + }, ) .await { diff --git a/web/src/app/dashboard/lexicons/[id]/lexicon-detail.tsx b/web/src/app/dashboard/lexicons/[id]/lexicon-detail.tsx index a8452cd..bb20a21 100644 --- a/web/src/app/dashboard/lexicons/[id]/lexicon-detail.tsx +++ b/web/src/app/dashboard/lexicons/[id]/lexicon-detail.tsx @@ -1,6 +1,8 @@ "use client"; import { useCallback, useEffect, useState } from "react"; +import { IconPlus } from "@tabler/icons-react"; +import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { useCurrentUser } from "@/hooks/use-current-user"; @@ -9,26 +11,22 @@ import { deleteLexicon, deleteNetworkLexicon, getLexicon, + getScripts, uploadLexicon, } from "@/lib/api"; import type { LexiconDetail } from "@/types/lexicons"; -import { - indexHookScript, - procedureScript, - queryScript, -} from "@/lib/lua-templates"; -import { useLuaCompletions } from "@/hooks/use-lua-completions"; +import type { Script, TriggerKind } from "@/types/scripts"; import { SiteHeader } from "@/components/site-header"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from "@/components/ui/tooltip"; export default function LexiconDetailPage() { const pathname = usePathname(); @@ -38,51 +36,39 @@ export default function LexiconDetailPage() { const { hasPermission } = useCurrentUser(); const router = useRouter(); const [lexicon, setLexicon] = useState(null); + // All scripts in the system — we filter to those targeting this + // lexicon's id below. Best-effort: render an empty panel if the + // scripts call fails so the rest of the page still works. + const [scripts, setScripts] = useState([]); const [error, setError] = useState(null); const [deleting, setDeleting] = useState(false); const [saving, setSaving] = useState(false); - // Editable text state + // Editable text state. The lexicon page used to edit `script` and + // `index_hook` columns inline via lua editors; those columns are + // now managed via the Scripts subsystem (see "Scripts targeting + // this lexicon" panel below). We pass the existing values through + // unchanged on save so legacy data isn't accidentally NULLed. const [jsonText, setJsonText] = useState(""); - const [luaText, setLuaText] = useState(""); const [originalJson, setOriginalJson] = useState(""); - const [originalLua, setOriginalLua] = useState(""); - const [hookText, setHookText] = useState(""); - const [originalHook, setOriginalHook] = useState(""); - const [showHookEditor, setShowHookEditor] = useState(false); const [tokenCost, setTokenCost] = useState(""); const [originalTokenCost, setOriginalTokenCost] = useState(""); - const { luaCompletions, collections } = useLuaCompletions(jsonText); const load = useCallback(() => { + // Fire both requests in parallel; the scripts list is best-effort. + getScripts() + .then(setScripts) + .catch(() => setScripts([])); getLexicon(id) .then((lex) => { setLexicon(lex); const json = JSON.stringify(lex.lexicon_json, null, 2); setJsonText(json); setOriginalJson(json); - - // If lexicon has no script but is a query/procedure, auto-generate one - if ( - !lex.script && - (lex.lexicon_type === "query" || lex.lexicon_type === "procedure") - ) { - const generated = - lex.lexicon_type === "procedure" - ? procedureScript(lex.target_collection ?? "") - : queryScript(lex.target_collection ?? ""); - setLuaText(generated); - // Set originalLua to "" so isDirty becomes true, prompting user to save - setOriginalLua(""); - } else { - setLuaText(lex.script ?? ""); - setOriginalLua(lex.script ?? ""); - } - setHookText(lex.index_hook ?? ""); - setOriginalHook(lex.index_hook ?? ""); - setShowHookEditor(!!lex.index_hook); setTokenCost(lex.token_cost != null ? String(lex.token_cost) : ""); - setOriginalTokenCost(lex.token_cost != null ? String(lex.token_cost) : ""); + setOriginalTokenCost( + lex.token_cost != null ? String(lex.token_cost) : "", + ); }) .catch((e) => setError(e instanceof Error ? e.message : String(e))); }, [id]); @@ -92,10 +78,7 @@ export default function LexiconDetailPage() { }, [load]); const isDirty = - jsonText !== originalJson || - luaText !== originalLua || - hookText !== originalHook || - tokenCost !== originalTokenCost; + jsonText !== originalJson || tokenCost !== originalTokenCost; async function handleSave() { if (!lexicon) return; @@ -106,8 +89,11 @@ export default function LexiconDetailPage() { await uploadLexicon({ lexicon_json: lexiconJson, backfill: lexicon.backfill, - script: luaText || undefined, - index_hook: hookText || undefined, + // Preserve any legacy script / index_hook values verbatim — we + // no longer edit them here, but leaving them out of the body + // would NULL the columns on upsert and lose data. + script: lexicon.script ?? undefined, + index_hook: lexicon.index_hook ?? undefined, token_cost: tokenCost ? Number(tokenCost) : null, }); load(); @@ -157,12 +143,28 @@ export default function LexiconDetailPage() { } const isNetwork = lexicon.source === "network"; - const showLua = - lexicon.has_script || - lexicon.lexicon_type === "query" || - lexicon.lexicon_type === "procedure"; const isRecord = lexicon.lexicon_type === "record"; - const showHook = isRecord && (showHookEditor || !!lexicon.index_hook); + + // Triggers that target this lexicon's id, given its type. + // + // Record-type lexicons get the four `record.*` slots (the cascade + // wildcard `record.index` listed first as the most common starting + // point, then the three action-specific slots), plus `labeler.apply` + // for "react to labels arriving on records of this type." + // XRPC lexicons get the matching `xrpc.{query,procedure}` slot only. + const targetingTriggers: { kind: TriggerKind; label: string }[] = isRecord + ? [ + { kind: "record.index", label: "Default handler (any action)" }, + { kind: "record.create", label: "On create" }, + { kind: "record.update", label: "On update" }, + { kind: "record.delete", label: "On delete" }, + { kind: "labeler.apply", label: "On label applied" }, + ] + : lexicon.lexicon_type === "query" + ? [{ kind: "xrpc.query", label: "Query handler" }] + : lexicon.lexicon_type === "procedure" + ? [{ kind: "xrpc.procedure", label: "Procedure handler" }] + : []; return (
@@ -244,20 +246,30 @@ export default function LexiconDetailPage() {
)}
+ + {/* Trigger-keyed scripts that target this lexicon. Each row + either links to the existing script or to the New Script + page pre-filled with the trigger id. */} + {targetingTriggers.length > 0 && ( + + )}
- {/* Code Panels */} + {/* JSON editor only — scripts (record-event handlers, XRPC + handlers, label-arrival handlers) are managed via the + "Scripts targeting this lexicon" panel above. The legacy + `script` / `index_hook` columns on the lexicons table are + preserved as-is on save but no longer edited here. */} {/* Actions */} @@ -273,40 +285,6 @@ export default function LexiconDetailPage() { )}
- {hasPermission("lexicons:create") && isRecord && !showHook && ( - - - - - - - { - "An Index Hook is a Lua script that runs automatically whenever a record in this collection is created, updated, or deleted on the network." - } - - - - )} - {hasPermission("lexicons:create") && isRecord && showHook && ( - - )} - {hasPermission("lexicons:create") && (
); } + +/** + * Lists scripts targeting this lexicon and offers a "+ New" dropdown + * for the slots that don't yet have a script. + * + * Existing scripts (those whose trigger id matches one of `entries`) + * appear as rows linking to the Scripts detail page. Missing slots + * are surfaced via a single "+ New script" dropdown so the operator + * picks the kind of handler they want without seeing four "Create" + * buttons stacked. The dropdown hides when every slot is taken. + */ +function ScriptsTargetingPanel({ + lexiconId, + scripts, + entries, + canManage, +}: { + lexiconId: string; + scripts: Script[]; + entries: { kind: TriggerKind; label: string }[]; + canManage: boolean; +}) { + const byId = new Map(scripts.map((s) => [s.id, s])); + const existing = entries + .map((e) => ({ ...e, triggerId: `${e.kind}:${lexiconId}` })) + .filter((e) => byId.has(e.triggerId)); + const available = entries + .map((e) => ({ ...e, triggerId: `${e.kind}:${lexiconId}` })) + .filter((e) => !byId.has(e.triggerId)); + + return ( +
+
+
+

+ Scripts targeting this lexicon +

+

+ Each row is a{" "} + + trigger + {" "} + the dispatcher resolves at firing time. +

+
+ {canManage && available.length > 0 && ( + + + + + + {available.map(({ kind, label, triggerId }) => ( + + + {label} + + {triggerId} + + + + ))} + + + )} +
+ {existing.length === 0 ? ( +

+ No scripts yet. + {canManage && available.length > 0 && ( + <> Use the “New script” menu to add one. + )} +

+ ) : ( +
    + {existing.map(({ kind, label, triggerId }) => ( +
  • + + {label} + + {triggerId} + + + +
  • + ))} +
+ )} +
+ ); +} diff --git a/web/src/app/dashboard/settings/scripts/[id]/page.tsx b/web/src/app/dashboard/settings/scripts/[id]/page.tsx new file mode 100644 index 0000000..6dd8586 --- /dev/null +++ b/web/src/app/dashboard/settings/scripts/[id]/page.tsx @@ -0,0 +1,11 @@ +import ScriptDetail from "./script-detail"; + +// https://github.com/vercel/next.js/issues/71862 +// Returning [] fails with output:"export", so provide a dummy param. +export async function generateStaticParams() { + return [{ id: "_" }]; +} + +export default function ScriptDetailPage() { + return ; +} diff --git a/web/src/app/dashboard/settings/scripts/[id]/script-detail.tsx b/web/src/app/dashboard/settings/scripts/[id]/script-detail.tsx new file mode 100644 index 0000000..cfd207a --- /dev/null +++ b/web/src/app/dashboard/settings/scripts/[id]/script-detail.tsx @@ -0,0 +1,188 @@ +"use client"; + +import { useCallback, useEffect, useMemo, useState } from "react"; +import { usePathname, useRouter } from "next/navigation"; + +import { useCurrentUser } from "@/hooks/use-current-user"; +import { deleteScript, getScript, patchScript } from "@/lib/api"; +import type { Script, TriggerFamily } from "@/types/scripts"; +import { + TRIGGER_KIND_LABELS, + familyOf, + parseTriggerId, +} from "@/types/scripts"; +import { SiteHeader } from "@/components/site-header"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; + +import { + ScriptForm, + type ScriptFormState, + stateFromScript, +} from "../script-form"; + +export default function ScriptDetail() { + const pathname = usePathname(); + // The `[id]` route segment carries the URL-encoded trigger id. + // Decode once so all downstream calls see the canonical id (which + // contains `:` and `.`). + const id = decodeURIComponent( + pathname.split("/").filter(Boolean).pop() ?? "", + ); + const { hasPermission } = useCurrentUser(); + const router = useRouter(); + const [script, setScript] = useState