smartcomply-web-sdk 1.0.47 → 1.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/camera/CameraManager.d.ts +7 -0
- package/dist/camera/CameraManager.d.ts.map +1 -1
- package/dist/camera/CameraManager.js +9 -0
- package/dist/camera/CameraManager.js.map +1 -1
- package/dist/client/HttpClient.d.ts +6 -1
- package/dist/client/HttpClient.d.ts.map +1 -1
- package/dist/client/HttpClient.js +11 -2
- package/dist/client/HttpClient.js.map +1 -1
- package/dist/esm/camera/CameraManager.d.ts +7 -0
- package/dist/esm/camera/CameraManager.d.ts.map +1 -1
- package/dist/esm/camera/CameraManager.js +9 -0
- package/dist/esm/camera/CameraManager.js.map +1 -1
- package/dist/esm/client/HttpClient.d.ts +6 -1
- package/dist/esm/client/HttpClient.d.ts.map +1 -1
- package/dist/esm/client/HttpClient.js +11 -2
- package/dist/esm/client/HttpClient.js.map +1 -1
- package/dist/esm/flow/SmartComplyFlow.d.ts +1 -0
- package/dist/esm/flow/SmartComplyFlow.d.ts.map +1 -1
- package/dist/esm/flow/SmartComplyFlow.js +64 -9
- package/dist/esm/flow/SmartComplyFlow.js.map +1 -1
- package/dist/esm/modules/liveness/LivenessUI.d.ts +2 -0
- package/dist/esm/modules/liveness/LivenessUI.d.ts.map +1 -1
- package/dist/esm/modules/liveness/LivenessUI.js +26 -6
- package/dist/esm/modules/liveness/LivenessUI.js.map +1 -1
- package/dist/esm/modules/liveness/liveness.d.ts +12 -1
- package/dist/esm/modules/liveness/liveness.d.ts.map +1 -1
- package/dist/esm/modules/liveness/liveness.js +21 -11
- package/dist/esm/modules/liveness/liveness.js.map +1 -1
- package/dist/flow/SmartComplyFlow.d.ts +1 -0
- package/dist/flow/SmartComplyFlow.d.ts.map +1 -1
- package/dist/flow/SmartComplyFlow.js +64 -9
- package/dist/flow/SmartComplyFlow.js.map +1 -1
- package/dist/modules/liveness/LivenessUI.d.ts +2 -0
- package/dist/modules/liveness/LivenessUI.d.ts.map +1 -1
- package/dist/modules/liveness/LivenessUI.js +26 -6
- package/dist/modules/liveness/LivenessUI.js.map +1 -1
- package/dist/modules/liveness/liveness.d.ts +12 -1
- package/dist/modules/liveness/liveness.d.ts.map +1 -1
- package/dist/modules/liveness/liveness.js +21 -11
- package/dist/modules/liveness/liveness.js.map +1 -1
- package/dist/smartcomply.browser.js +97 -19
- package/dist/smartcomply.browser.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/client/Config.ts", "../src/errors/SDKError.ts", "../src/errors/AuthError.ts", "../src/errors/NetworkError.ts", "../src/client/HttpClient.ts", "../src/modules/onboarding/onboarding.ts", "../src/utils/device.ts", "../src/utils/constants.ts", "../src/camera/CameraManager.ts", "../src/camera/VideoRecorder.ts", "../node_modules/@mediapipe/tasks-vision/vision_bundle.mjs", "../src/camera/FaceDetector.ts", "../src/camera/ActionDetector.ts", "../src/modules/liveness/LivenessUI.ts", "../src/modules/liveness/liveness.ts", "../src/client/Smartcomply.ts", "../src/flow/theme.ts", "../src/utils/ImageQuality.ts", "../src/flow/DocumentCapture.ts", "../src/flow/SmartComplyFlow.ts", "../src/utils/logger.ts", "../src/camera/Permission.ts", "../src/modules/liveness/uploader.ts"],
|
|
4
|
-
"sourcesContent": ["import { SmartComply } from \"./client/Smartcomply\";\r\nimport { SmartComplyFlow } from \"./flow/SmartComplyFlow\";\r\n\r\nexport default SmartComply;\r\nexport { SmartComply, SmartComplyFlow };\r\n\r\n// Config\r\nexport type { SDKConfig, Environment } from \"./client/Config\";\r\n\r\n// Flow types\r\nexport type { FlowOptions, FlowResult } from \"./flow/SmartComplyFlow\";\r\n\r\n// Onboarding types\r\nexport type {\r\n OnboardingType,\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n SessionResponse,\r\n SDKInitConfig,\r\n SDKChannel,\r\n} from \"./types/onboarding\";\r\n\r\n// Liveness types\r\nexport type {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n LivenessWebhookPayload,\r\n} from \"./types/liveness\";\r\n\r\n// Response envelope types\r\nexport type {\r\n ApiResponse,\r\n FieldError,\r\n ErrorData,\r\n} from \"./types/common\";\r\n\r\n// Error classes\r\nexport { SDKError } from \"./errors/SDKError\";\r\nexport { AuthError } from \"./errors/AuthError\";\r\nexport { NetworkError } from \"./errors/NetworkError\";\r\n\r\n// Utilities\r\nexport { SDKLogger } from \"./utils/logger\";\r\nexport { collectDeviceMetadata } from \"./utils/device\";\r\nexport type { DeviceMetadata } from \"./utils/device\";\r\nexport {\r\n isCameraSupported,\r\n queryCameraPermission,\r\n requestCameraAccess,\r\n releaseCameraStream,\r\n} from \"./camera/Permission\";\r\nexport type { PermissionStatus, CameraPermissionResult } from \"./camera/Permission\";\r\n\r\n// Liveness uploader (for integrators that need progress reporting)\r\nexport { LivenessUploader } from \"./modules/liveness/uploader\";\r\nexport type { UploadOptions } from \"./modules/liveness/uploader\";\r\n", "export type Environment = \"sandbox\" | \"production\" | \"local\";\r\n\r\nexport const BASE_URLS: Record<Environment, string> = {\r\n sandbox: \"https://dev-adhere.smartcomply.com\",\r\n production: \"https://adhere-api.smartcomply.com\",\r\n local: \"http://127.0.0.1:8000\",\r\n};\r\n\r\nexport interface SDKConfig {\r\n apiKey: string;\r\n clientId: string; // Required UUID \u2014 used for session creation\r\n environment?: Environment;\r\n timeout?: number;\r\n}\r\n", "export class SDKError extends Error {\r\n statusCode: number;\r\n errorCode?: string;\r\n errorData?: Record<string, unknown>;\r\n\r\n constructor(\r\n message: string,\r\n statusCode: number,\r\n errorCode?: string,\r\n errorData?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"SDKError\";\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.errorData = errorData;\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when authentication fails (invalid API key, expired session, etc).\r\n */\r\nexport class AuthError extends SDKError {\r\n constructor(message: string, errorCode?: string) {\r\n super(message, 401, errorCode);\r\n this.name = \"AuthError\";\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when a network request fails (timeout, no connection, DNS failure, etc).\r\n */\r\nexport class NetworkError extends SDKError {\r\n constructor(message: string) {\r\n super(message, 0, \"NETWORK_ERROR\");\r\n this.name = \"NetworkError\";\r\n }\r\n}\r\n", "import { SDKConfig, BASE_URLS } from \"./Config\";\r\nimport { SDKError } from \"../errors/SDKError\";\r\nimport { AuthError } from \"../errors/AuthError\";\r\nimport { NetworkError } from \"../errors/NetworkError\";\r\nimport { ApiResponse } from \"../types/common\";\r\n\r\n/**\r\n * HTTP client aligned with Adhere backend contract.\r\n *\r\n * Two auth modes:\r\n * - request() \u2192 Authorization: Bearer <apiKey> (session creation)\r\n * - sessionRequest() \u2192 x-access-token: <sessionToken> (all other endpoints)\r\n * - uploadWithSession() \u2192 multipart + x-access-token (file uploads)\r\n */\r\nexport class HttpClient {\r\n private baseUrl: string;\r\n private apiKey: string;\r\n private timeout: number;\r\n private sessionToken: string | null = null;\r\n\r\n constructor(config: SDKConfig) {\r\n this.baseUrl = BASE_URLS[config.environment || \"sandbox\"];\r\n this.apiKey = config.apiKey;\r\n this.timeout = config.timeout || 30000;\r\n }\r\n\r\n setSessionToken(token: string): void {\r\n this.sessionToken = token;\r\n }\r\n\r\n /**\r\n * API-key authenticated request (used for session creation only).\r\n * Header: Authorization: Bearer <apiKey>\r\n */\r\n async request<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Session-token authenticated request (used for all endpoints after session creation).\r\n * Header: x-access-token: <sessionToken>\r\n */\r\n async sessionRequest<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Multipart file upload with session-token auth.\r\n * Header: x-access-token: <sessionToken>\r\n * NOTE: Do NOT set Content-Type \u2014 browser sets it with boundary automatically.\r\n */\r\n async uploadWithSession<T>(path: string, formData: FormData): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n /**\r\n * Unauthenticated GET \u2014 used for public endpoints (e.g. status polling after session revoke).\r\n */\r\n async publicGet<T>(path: string): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"GET\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n });\r\n }\r\n\r\n /**\r\n * Legacy upload with API key (kept for backward compatibility if needed).\r\n */\r\n async upload<T>(path: string, formData: FormData): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n // ---- Internal ----\r\n\r\n private requireToken(): void {\r\n if (!this.sessionToken) {\r\n throw new AuthError(\r\n \"No session token set. Call sdk.createSession() first.\",\r\n \"NO_SESSION_TOKEN\"\r\n );\r\n }\r\n }\r\n\r\n private async _fetch<T>(path: string, init: RequestInit, retries = 2): Promise<T> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: controller.signal,\r\n });\r\n\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new SDKError(\r\n `Unexpected response from ${path} (${response.status})`,\r\n response.status\r\n );\r\n }\r\n\r\n // Parse the backend's standard response envelope\r\n const envelope: ApiResponse = await response.json();\r\n\r\n if (!response.ok || envelope.status === \"error\") {\r\n const statusCode = response.status;\r\n\r\n // Map specific HTTP statuses to error types\r\n if (statusCode === 401 || statusCode === 403) {\r\n throw new AuthError(\r\n envelope.message || \"Authentication failed\",\r\n envelope.code\r\n );\r\n }\r\n\r\n throw new SDKError(\r\n envelope.message || `Request to ${path} failed`,\r\n statusCode,\r\n envelope.code,\r\n envelope.data as Record<string, unknown>\r\n );\r\n }\r\n\r\n // Return the full envelope for verify responses (so SDK can check status)\r\n // For other endpoints, return unwrapped data\r\n if (path.includes(\"/verify/\")) {\r\n return envelope as T;\r\n }\r\n return envelope.data as T;\r\n\r\n } catch (err: any) {\r\n if (err instanceof SDKError || err instanceof AuthError) throw err;\r\n\r\n // C5: Retry on network errors (not auth/validation errors)\r\n if (retries > 0 && (err.name === \"AbortError\" || err.name === \"TypeError\")) {\r\n clearTimeout(timer);\r\n await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry\r\n return this._fetch<T>(path, init, retries - 1);\r\n }\r\n\r\n if (err.name === \"AbortError\") {\r\n throw new NetworkError(\"Request timeout. Please check your connection and try again.\");\r\n }\r\n if (err.name === \"TypeError\" && err.message?.includes(\"fetch\")) {\r\n throw new NetworkError(`Network error: ${err.message}`);\r\n }\r\n\r\n throw new SDKError(\r\n err.message || \"Unknown error\",\r\n 0,\r\n \"UNKNOWN_ERROR\"\r\n );\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n} from \"../../types/onboarding\";\r\n\r\n/**\r\n * Onboarding module \u2014 identity verification.\r\n *\r\n * All methods use session-token auth (x-access-token header).\r\n */\r\nexport class OnboardingModule {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Verify a user's identity.\r\n *\r\n * POST /v1/onboarding/verify/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Sends identity_type_id (from ChannelItem.id) and dynamic fields\r\n * collected from the user based on the channel's field definitions.\r\n *\r\n * Example:\r\n * { identity_type_id: 3, fields: { \"bank_verification_number\": \"12345678901\" } }\r\n */\r\n async verify(params: VerifyIdentityRequest): Promise<VerifyIdentityResponse> {\r\n return this.http.sessionRequest<VerifyIdentityResponse>(\r\n \"POST\",\r\n \"/v1/onboarding/verify/\",\r\n {\r\n identity_type_id: params.identity_type_id,\r\n fields: params.fields,\r\n }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Collects device / browser context metadata.\r\n * All values are derived from standard browser APIs \u2014 no external library needed.\r\n * Sent to the backend at liveness/create so they appear in the webhook\r\n * request_context block.\r\n */\r\nexport interface DeviceMetadata {\r\n device_type: \"mobile\" | \"desktop\" | \"tablet\";\r\n os_name: string;\r\n browser_timezone: string;\r\n fingerprint_id: string;\r\n}\r\n\r\nfunction detectOs(ua: string): string {\r\n if (/Windows NT/i.test(ua)) return \"Windows\";\r\n if (/Mac OS X|Macintosh/i.test(ua)) return \"macOS\";\r\n if (/Android/i.test(ua)) return \"Android\";\r\n if (/iPhone|iPad|iPod/i.test(ua)) return \"iOS\";\r\n if (/Linux/i.test(ua)) return \"Linux\";\r\n if (/CrOS/i.test(ua)) return \"ChromeOS\";\r\n return \"Unknown\";\r\n}\r\n\r\nfunction getOrCreateFingerprintId(): string {\r\n const KEY = \"_adhere_fid\";\r\n try {\r\n let fid = localStorage.getItem(KEY);\r\n if (!fid) {\r\n fid =\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n localStorage.setItem(KEY, fid);\r\n }\r\n return fid;\r\n } catch {\r\n // localStorage unavailable (e.g. private browsing with strict settings)\r\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n\r\nexport function collectDeviceMetadata(): DeviceMetadata {\r\n const ua = navigator.userAgent;\r\n\r\n const isTablet =\r\n /iPad/i.test(ua) ||\r\n (/Android/i.test(ua) && !/Mobile/i.test(ua));\r\n\r\n const isMobile =\r\n !isTablet &&\r\n /Mobi|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\r\n\r\n const device_type: DeviceMetadata[\"device_type\"] = isTablet\r\n ? \"tablet\"\r\n : isMobile\r\n ? \"mobile\"\r\n : \"desktop\";\r\n\r\n return {\r\n device_type,\r\n os_name: detectOs(ua),\r\n browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n fingerprint_id: getOrCreateFingerprintId(),\r\n };\r\n}\r\n", "/**\r\n * SDK-wide constants \u2014 single source of truth for limits, defaults and\r\n * backend-defined magic values.\r\n */\r\n\r\n// \u2500\u2500 Session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend session TTL in milliseconds (30 minutes). */\r\nexport const SESSION_TTL_MS = 30 * 60 * 1000;\r\n\r\n/** Warn the user this many ms before session expires. */\r\nexport const SESSION_WARN_BEFORE_MS = 2 * 60 * 1000;\r\n\r\n// \u2500\u2500 Network \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Default request timeout in milliseconds. */\r\nexport const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\n/** Number of automatic retries on transient network errors. */\r\nexport const MAX_RETRIES = 2;\r\n\r\n/** Delay between retries in milliseconds. */\r\nexport const RETRY_DELAY_MS = 1_000;\r\n\r\n// \u2500\u2500 File uploads \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Maximum document image size the backend accepts (5 MB). */\r\nexport const MAX_DOCUMENT_BYTES = 5 * 1024 * 1024;\r\n\r\n/** Maximum video size the backend accepts (50 MB). */\r\nexport const MAX_VIDEO_BYTES = 50 * 1024 * 1024;\r\n\r\n/** Maximum snapshot / autoshot size (2 MB). */\r\nexport const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;\r\n\r\n/** Accepted MIME types for document images. */\r\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"] as const;\r\n\r\n/** JPEG quality used when encoding captured frames (0\u20131). */\r\nexport const CAPTURE_JPEG_QUALITY = 0.92;\r\n\r\n// \u2500\u2500 Liveness challenge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend-accepted challenge actions (UPPERCASE). */\r\nexport const CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"TURN_RIGHT\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Default set sent when the caller does not specify actions. */\r\nexport const DEFAULT_CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Time limit per liveness attempt in seconds. */\r\nexport const LIVENESS_TIME_LIMIT_SECONDS = 45;\r\n\r\n/** Milliseconds to pause after all actions before capturing the final snapshot. */\r\nexport const POST_ACTION_SETTLE_MS = 800;\r\n\r\n// \u2500\u2500 Camera \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Ideal resolution for the front-facing liveness camera. */\r\nexport const CAMERA_IDEAL_WIDTH = 640;\r\nexport const CAMERA_IDEAL_HEIGHT = 480;\r\n\r\n/** Ideal resolution for rear-facing document capture camera. */\r\nexport const DOC_CAMERA_IDEAL_WIDTH = 1280;\r\nexport const DOC_CAMERA_IDEAL_HEIGHT = 960;\r\n\r\n/** Video bitrate used by MediaRecorder for liveness recordings (~1.4 MB / 45 s). */\r\nexport const RECORDING_BITS_PER_SECOND = 250_000;\r\n\r\n// \u2500\u2500 Face detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Max milliseconds to wait for an initial face detection before proceeding. */\r\nexport const FACE_DETECT_TIMEOUT_MS = 10_000;\r\n\r\n/** Polling interval for the face-present check (ms). */\r\nexport const FACE_DETECT_POLL_MS = 100;\r\n\r\n// \u2500\u2500 UI / UX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** How long (ms) the success overlay is shown before the flow advances. */\r\nexport const RESULT_OVERLAY_DURATION_MS = 2_800;\r\n\r\n/** localStorage key used to persist the browser fingerprint ID. */\r\nexport const FINGERPRINT_STORAGE_KEY = \"_adhere_fid\";\r\n\r\n/** z-index for the SDK overlay \u2014 high enough to sit above any app content. */\r\nexport const OVERLAY_Z_INDEX = 99_999;\r\n", "export class CameraManager {\r\n private stream: MediaStream | null = null;\r\n\r\n async open(constraints?: MediaStreamConstraints): Promise<MediaStream> {\r\n const defaults: MediaStreamConstraints = {\r\n video: {\r\n facingMode: \"user\",\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n },\r\n audio: false,\r\n };\r\n\r\n this.stream = await navigator.mediaDevices.getUserMedia(\r\n constraints || defaults\r\n );\r\n\r\n return this.stream;\r\n }\r\n\r\n getStream(): MediaStream | null {\r\n return this.stream;\r\n }\r\n\r\n stop(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((track) => track.stop());\r\n this.stream = null;\r\n }\r\n }\r\n}\r\n", "export class VideoRecorder {\r\n private recorder: MediaRecorder | null = null;\r\n private chunks: Blob[] = [];\r\n private startedAt: number = 0;\r\n\r\n start(stream: MediaStream): void {\r\n this.chunks = [];\r\n\r\n const mimeType = MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")\r\n ? \"video/webm;codecs=vp9\"\r\n : \"video/webm\";\r\n\r\n this.recorder = new MediaRecorder(stream, {\r\n mimeType,\r\n videoBitsPerSecond: 800_000, // raised from 250k \u2014 higher bitrate = sharper frames for SmartComply face extractor\r\n });\r\n\r\n this.recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.chunks.push(e.data);\r\n }\r\n };\r\n\r\n this.startedAt = Date.now();\r\n this.recorder.start();\r\n }\r\n\r\n stop(): Promise<{ blob: Blob; durationSeconds: number }> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.recorder || this.recorder.state === \"inactive\") {\r\n reject(new Error(\"Recorder is not active\"));\r\n return;\r\n }\r\n\r\n const stoppedAt = Date.now();\r\n\r\n this.recorder.onstop = () => {\r\n const blob = new Blob(this.chunks, { type: \"video/webm\" });\r\n const durationSeconds = parseFloat(\r\n ((stoppedAt - this.startedAt) / 1000).toFixed(2)\r\n );\r\n this.chunks = [];\r\n resolve({ blob, durationSeconds });\r\n };\r\n\r\n this.recorder.onerror = () => {\r\n reject(new Error(\"Recording failed\"));\r\n };\r\n\r\n this.recorder.stop();\r\n });\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.recorder?.state === \"recording\";\r\n }\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(e,n){t:{for(var r=[\"CLOSURE_FLAGS\"],i=t,s=0;s<r.length;s++)if(null==(i=i[r[s]])){r=null;break t}r=i}return null!=(e=r&&r[e])?e:n}function n(){throw Error(\"Invalid UTF8\")}function r(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let i,s;const o=\"undefined\"!=typeof TextDecoder;let a;const c=\"undefined\"!=typeof TextEncoder;function h(t){if(c)t=(a||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}function u(e){t.setTimeout((()=>{throw e}),0)}var l,f=e(610401301,!1),d=e(748402147,!0),p=e(824648567,!0),g=e(824656860,e(1,!0));function m(){var e=t.navigator;return e&&(e=e.userAgent)?e:\"\"}const y=t.navigator;function _(t){return _[\" \"](t),t}l=y&&y.userAgentData||null,_[\" \"]=function(){};const v={};let E=null;function w(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=E[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}T();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function T(){if(!E){E={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));v[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===E[e]&&(E[e]=t)}}}}var A=\"undefined\"!=typeof Uint8Array,b=!(!(f&&l&&l.brands.length>0)&&(-1!=m().indexOf(\"Trident\")||-1!=m().indexOf(\"MSIE\")))&&\"function\"==typeof btoa;const k=/[-_.]/g,S={\"-\":\"+\",_:\"/\",\".\":\"=\"};function x(t){return S[t]||\"\"}function L(t){if(!b)return w(t);t=k.test(t)?t.replace(k,x):t,t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function R(t){return A&&null!=t&&t instanceof Uint8Array}var I={};function F(){return C||=new P(null,I)}function M(t){N(I);var e=t.g;return null==(e=null==e||R(e)?e:\"string\"==typeof e?L(e):null)?e:t.g=e}var P=class{h(){return new Uint8Array(M(this)||0)}constructor(t,e){if(N(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let C,O;function N(t){if(t!==I)throw Error(\"illegal external caller\")}function U(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function D(t){return U(t=Error(t),\"warning\"),t}function B(t,e){if(null!=t){var n=O??={},r=n[t]||0;r>=e||(n[t]=r+1,U(t=Error(),\"incident\"),u(t))}}function G(){return\"function\"==typeof BigInt}var j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function V(t,e,n=!1){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?n&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e}var X=V(\"jas\",void 0,!0),H=V(void 0,\"0di\"),W=V(void 0,\"1oa\"),z=V(void 0,Symbol()),K=V(void 0,\"0ub\"),Y=V(void 0,\"0ubs\"),q=V(void 0,\"0ubsb\"),$=V(void 0,\"0actk\"),J=V(\"m_m\",\"Pa\",!0),Z=V();const Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties,et=j?X:\"Ga\";var nt;const rt=[];function it(t,e){j||et in t||tt(t,Q),t[et]|=e}function st(t,e){j||et in t||tt(t,Q),t[et]=e}function ot(t){return it(t,34),t}function at(t){return it(t,8192),t}st(rt,7),nt=Object.freeze(rt);var ct={};function ht(t,e){return void 0===e?t.h!==ut&&!!(2&(0|t.v[et])):!!(2&e)&&t.h!==ut}const ut={};function lt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new P(t,I):F();else if(t.constructor!==P)if(R(t))t=t.length?new P(new Uint8Array(t),I):F();else{if(!e)throw Error();t=void 0}return t}class ft{constructor(t,e,n){this.g=t,this.h=e,this.l=n}next(){const t=this.g.next();return t.done||(t.value=this.h.call(this.l,t.value)),t}[Symbol.iterator](){return this}}var dt=Object.freeze({});function pt(t,e,n){const r=128&e?0:-1,i=t.length;var s;(s=!!i)&&(s=null!=(s=t[i-1])&&\"object\"==typeof s&&s.constructor===Object);const o=i+(s?-1:0);for(e=128&e?1:0;e<o;e++)n(e-r,t[e]);if(s){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}var gt={};function mt(t){return 128&t?gt:void 0}function yt(t){return t.Na=!0,t}var _t=yt((t=>\"number\"==typeof t)),vt=yt((t=>\"string\"==typeof t)),Et=yt((t=>\"boolean\"==typeof t)),wt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function Tt(t){var e=t;if(vt(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(_t(e)&&!Number.isSafeInteger(e))throw Error(String(e));return wt?BigInt(t):t=Et(t)?t?\"1\":\"0\":vt(t)?t.trim()||\"0\":String(t)}var At=yt((t=>wt?t>=kt&&t<=xt:\"-\"===t[0]?Lt(t,bt):Lt(t,St)));const bt=Number.MIN_SAFE_INTEGER.toString(),kt=wt?BigInt(Number.MIN_SAFE_INTEGER):void 0,St=Number.MAX_SAFE_INTEGER.toString(),xt=wt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Lt(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const Rt=\"function\"==typeof Uint8Array.prototype.slice;let It,Ft=0,Mt=0;function Pt(t){const e=t>>>0;Ft=e,Mt=(t-e)/4294967296>>>0}function Ct(t){if(t<0){Pt(-t);const[e,n]=Ht(Ft,Mt);Ft=e>>>0,Mt=n>>>0}else Pt(t)}function Ot(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Mt=0,Ft=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Ut(t,e){return Tt(G()?BigInt.asUintN(64,(BigInt(e>>>0)<<BigInt(32))+BigInt(t>>>0)):Gt(t,e))}function Dt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){return G()?Tt(BigInt.asIntN(64,(BigInt.asUintN(32,BigInt(e))<<BigInt(32))+BigInt.asUintN(32,BigInt(t)))):Tt(Vt(t,e))}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else G()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t,e){if(2147483648&e)if(G())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Ht(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function Xt(t){if(t.length<16)Ct(Number(t));else if(G())t=BigInt(t),Ft=Number(t&BigInt(4294967295))>>>0,Mt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Mt=Ft=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Mt*=1e6,Ft=1e6*Ft+e,Ft>=4294967296&&(Mt+=Math.trunc(Ft/4294967296),Mt>>>=0,Ft>>>=0)}if(e){const[t,e]=Ht(Ft,Mt);Ft=t,Mt=e}}}function Ht(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function Wt(t){return Array.prototype.slice.call(t)}const zt=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Kt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,Yt=Number.isSafeInteger,qt=Number.isFinite,$t=Math.trunc,Jt=Tt(0);function Zt(t){if(null!=t&&\"number\"!=typeof t)throw Error(`Value of float/double field must be a number, found ${typeof t}: ${t}`);return t}function Qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function te(t){if(null!=t&&\"boolean\"!=typeof t){var e=typeof t;throw Error(`Expected boolean but got ${\"object\"!=e?e:t?Array.isArray(t)?\"array\":e:\"null\"}: ${t}`)}return t}function ee(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const ne=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function re(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return qt(t);case\"string\":return ne.test(t);default:return!1}}function ie(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?0|t:void 0}function se(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?t>>>0:void 0}function oe(t){const e=t.length;return(\"-\"===t[0]?e<20||20===e&&t<=\"-9223372036854775808\":e<19||19===e&&t<=\"9223372036854775807\")?t:(Xt(t),Vt(Ft,Mt))}function ae(t){return t=$t(t),Yt(t)||(Ct(t),t=Dt(Ft,Mt)),t}function ce(t){var e=$t(Number(t));return Yt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),oe(t))}function he(t){var e=$t(Number(t));return Yt(e)?Tt(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),G()?Tt(zt(64,BigInt(t))):Tt(oe(t)))}function ue(t){return Yt(t)?t=Tt(ae(t)):(t=$t(t),Yt(t)?t=String(t):(Ct(t),t=Vt(Ft,Mt)),t=Tt(t)),t}function le(t){return null==t?t:\"bigint\"==typeof t?(At(t)?t=Number(t):(t=zt(64,t),t=At(t)?Number(t):String(t)),t):re(t)?\"number\"==typeof t?ae(t):ce(t):void 0}function fe(t){const e=typeof t;return null==t?t:\"bigint\"===e?Tt(zt(64,t)):re(t)?\"string\"===e?he(t):ue(t):void 0}function de(t){if(\"string\"!=typeof t)throw Error();return t}function pe(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ge(t){return null==t||\"string\"==typeof t?t:void 0}function me(t,e,n,r){return null!=t&&t[J]===ct?t:Array.isArray(t)?((r=(n=0|t[et])|32&r|2&r)!==n&&st(t,r),new e(t)):(n?2&r?((t=e[H])||(ot((t=new e).v),t=e[H]=t),e=t):e=new e:e=void 0,e)}function ye(t,e,n){if(e)t:{if(!re(e=t))throw D(\"int64\");switch(typeof e){case\"string\":e=he(e);break t;case\"bigint\":e=Tt(zt(64,e));break t;default:e=ue(e)}}else e=fe(t);return null==(t=e)?n?Jt:void 0:t}const _e={};let ve=function(){try{return _(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class Ee{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const we=ve?(Object.setPrototypeOf(Ee.prototype,Map.prototype),Object.defineProperties(Ee.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),Ee):class extends Map{constructor(){super()}};function Te(t){return t}function Ae(t){if(2&t.J)throw Error(\"Cannot mutate an immutable Map\")}var be=class extends we{constructor(t,e,n=Te,r=Te){super(),this.J=0|t[et],this.K=e,this.S=n,this.fa=this.K?ke:r;for(let i=0;i<t.length;i++){const s=t[i],o=n(s[0],!1,!0);let a=s[1];e?void 0===a&&(a=null):a=r(s[1],!1,!0,void 0,void 0,this.J),super.set(o,a)}}V(t){return at(Array.from(super.entries(),t))}clear(){Ae(this),super.clear()}delete(t){return Ae(this),super.delete(this.S(t,!0,!1))}entries(){if(this.K){var t=super.keys();t=new ft(t,Se,this)}else t=super.entries();return t}values(){if(this.K){var t=super.keys();t=new ft(t,be.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.K?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Ae(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.fa(e,!0,!0,this.K,!1,this.J))}Ma(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.K?void 0===t?null:t:this.fa(t,!1,!0,void 0,!1,this.J),super.set(e,t)}has(t){return super.has(this.S(t,!1,!1))}get(t){t=this.S(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.K;return n?((n=this.fa(e,!1,!0,n,this.ra,this.J))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function ke(t,e,n,r,i,s){return t=me(t,r,n,s),i&&(t=Ke(t)),t}function Se(t){return[t,this.get(t)]}let xe;function Le(){return xe||=new be(ot([]),void 0,void 0,void 0,_e)}function Re(t){return z?t[z]:void 0}function Ie(t,e){for(const n in t)!isNaN(n)&&e(t,+n,t[n])}be.prototype.toJSON=void 0;var Fe=class{};const Me={Ka:!0};function Pe(t,e){e<100||B(Y,1)}function Ce(t,e,n,r){const i=void 0!==r;r=!!r;var s,o=z;!i&&j&&o&&(s=t[o])&&Ie(s,Pe),o=[];var a=t.length;let c;s=4294967295;let h=!1;const u=!!(64&e),l=u?128&e?0:-1:void 0;1&e||(c=a&&t[a-1],null!=c&&\"object\"==typeof c&&c.constructor===Object?s=--a:c=void 0,!u||128&e||i||(h=!0,s=s-l+l)),e=void 0;for(var f=0;f<a;f++){let i=t[f];if(null!=i&&null!=(i=n(i,r)))if(u&&f>=s){const t=f-l;(e??={})[t]=i}else o[f]=i}if(c)for(let t in c){if(null==(a=c[t])||null==(a=n(a,r)))continue;let i;f=+t,u&&!Number.isNaN(f)&&(i=f+l)<s?o[i]=a:(e??={})[t]=a}return e&&(h?o.push(e):o[s]=e),i&&z&&(t=Re(t))&&t instanceof Fe&&(o[z]=function(t){const e=new Fe;return Ie(t,((t,n,r)=>{e[n]=Wt(r)})),e.da=t.da,e}(t)),o}function Oe(t){return t[0]=Ne(t[0]),t[1]=Ne(t[1]),t}function Ne(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return At(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(Array.isArray(t)){var e=0|t[et];return 0===t.length&&1&e?void 0:Ce(t,e,Ne)}if(null!=t&&t[J]===ct)return Ue(t);if(t instanceof P){if(null==(e=t.g))t=\"\";else if(\"string\"==typeof e)t=e;else{if(b){for(var n=\"\",r=0,i=e.length-10240;r<i;)n+=String.fromCharCode.apply(null,e.subarray(r,r+=10240));n+=String.fromCharCode.apply(null,r?e.subarray(r):e),e=btoa(n)}else{void 0===n&&(n=0),T(),n=v[n],r=Array(Math.floor(e.length/3)),i=n[64]||\"\";let t=0,h=0;for(;t<e.length-2;t+=3){var s=e[t],o=e[t+1],a=e[t+2],c=n[s>>2];s=n[(3&s)<<4|o>>4],o=n[(15&o)<<2|a>>6],a=n[63&a],r[h++]=c+s+o+a}switch(c=0,a=i,e.length-t){case 2:a=n[(15&(c=e[t+1]))<<2]||i;case 1:e=e[t],r[h]=n[e>>2]+n[(3&e)<<4|c>>4]+a+i}e=r.join(\"\")}t=t.g=e}return t}return t instanceof be?t=0!==t.size?t.V(Oe):void 0:void 0}return t}function Ue(t){return Ce(t=t.v,0|t[et],Ne)}let De,Be;function Ge(t,e){return je(t,e[0],e[1])}function je(t,e,n,r=0){if(null==t){var i=32;n?(t=[n],i|=128):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(i=0|t[et],d&&1&i)throw Error(\"rfarr\");if(2048&i&&!(2&i)&&function(){if(d)throw Error(\"carr\");B($,5)}(),256&i)throw Error(\"farr\");if(64&i)return(i|r)!==i&&st(t,i|r),t;if(n&&(i|=128,n!==t[0]))throw Error(\"mid\");t:{i|=64;var s=(n=t).length;if(s){var o=s-1;const t=n[o];if(null!=t&&\"object\"==typeof t&&t.constructor===Object){if((o-=e=128&i?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in t)(s=+a)<o&&(n[s+e]=t[a],delete t[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(128&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return st(t,64|i|r),t}function Ve(t,e){if(\"object\"!=typeof t)return t;if(Array.isArray(t)){var n=0|t[et];return 0===t.length&&1&n?void 0:Xe(t,n,e)}if(null!=t&&t[J]===ct)return We(t);if(t instanceof be){if(2&(e=t.J))return t;if(!t.size)return;if(n=ot(t.V()),t.K)for(t=0;t<n.length;t++){const r=n[t];let i=r[1];i=null==i||\"object\"!=typeof i?void 0:null!=i&&i[J]===ct?We(i):Array.isArray(i)?Xe(i,0|i[et],!!(32&e)):void 0,r[1]=i}return n}return t instanceof P?t:void 0}function Xe(t,e,n){return 2&e||(!n||4096&e||16&e?t=ze(t,e,!1,n&&!(16&e)):(it(t,34),4&e&&Object.freeze(t))),t}function He(t,e,n){return t=new t.constructor(e),n&&(t.h=ut),t.m=ut,t}function We(t){const e=t.v,n=0|e[et];return ht(t,n)?t:Je(t,e,n)?He(t,e):ze(e,n)}function ze(t,e,n,r){return r??=!!(34&e),t=Ce(t,e,Ve,r),r=32,n&&(r|=2),st(t,e=16769217&e|r),t}function Ke(t){const e=t.v,n=0|e[et];return ht(t,n)?Je(t,e,n)?He(t,e,!0):new t.constructor(ze(e,n,!1)):t}function Ye(t){if(t.h!==ut)return!1;var e=t.v;return it(e=ze(e,0|e[et]),2048),t.v=e,t.h=void 0,t.m=void 0,!0}function qe(t){if(!Ye(t)&&ht(t,0|t.v[et]))throw Error()}function $e(t,e){void 0===e&&(e=0|t[et]),32&e&&!(4096&e)&&st(t,4096|e)}function Je(t,e,n){return!!(2&n)||!(!(32&n)||4096&n)&&(st(e,2|n),t.h=ut,!0)}const Ze=Tt(0),Qe={};function tn(t,e,n,r,i){if(null!==(e=en(t.v,e,n,i))||r&&t.m!==ut)return e}function en(t,e,n,r){if(-1===e)return null;const i=e+(n?0:-1),s=t.length-1;let o,a;if(!(s<1+(n?0:-1))){if(i>=s)if(o=t[s],null!=o&&\"object\"==typeof o&&o.constructor===Object)n=o[e],a=!0;else{if(i!==s)return;n=o}else n=t[i];if(r&&null!=n){if(null==(r=r(n)))return r;if(!Object.is(r,n))return a?o[e]=r:t[i]=r,r}return n}}function nn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,n,r)}function rn(t,e,n,r,i){const s=n+(i?0:-1);var o=t.length-1;if(o>=1+(i?0:-1)&&s>=o){const i=t[o];if(null!=i&&\"object\"==typeof i&&i.constructor===Object)return i[n]=r,e}return s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=(e??=0|t[et])>>14&1023||536870912)?null!=r&&(t[o+(i?0:-1)]={[n]:r}):t[s]=r),e)}function sn(){return void 0===dt?2:4}function on(t,e,n,r,i){let s=t.v,o=0|s[et];r=ht(t,o)?1:r,i=!!i||3===r,2===r&&Ye(t)&&(s=t.v,o=0|s[et]);let a=(t=cn(s,e))===nt?7:0|t[et],c=hn(a,o);var h=!(4&c);if(h){4&c&&(t=Wt(t),a=0,c=xn(c,o),o=rn(s,o,e,t));let r=0,i=0;for(;r<t.length;r++){const e=n(t[r]);null!=e&&(t[i++]=e)}i<r&&(t.length=i),n=-513&(4|c),c=n&=-1025,c&=-4097}return c!==a&&(st(t,c),2&c&&Object.freeze(t)),an(t,c,s,o,e,r,h,i)}function an(t,e,n,r,i,s,o,a){let c=e;return 1===s||4===s&&(2&e||!(16&e)&&32&r)?un(e)||((e|=!t.length||o&&!(4096&e)||32&r&&!(4096&e||16&e)?2:256)!==c&&st(t,e),Object.freeze(t)):(2===s&&un(e)&&(t=Wt(t),c=0,e=xn(e,r),r=rn(n,r,i,t)),un(e)||(a||(e|=16),e!==c&&st(t,e))),2&e||!(4096&e||16&e)||$e(n,r),t}function cn(t,e,n){return t=en(t,e,n),Array.isArray(t)?t:nt}function hn(t,e){return 2&e&&(t|=2),1|t}function un(t){return!!(2&t)&&!!(4&t)||!!(256&t)}function ln(t){return lt(t,!0)}function fn(t){t=Wt(t);for(let e=0;e<t.length;e++){const n=t[e]=Wt(t[e]);Array.isArray(n[1])&&(n[1]=ot(n[1]))}return at(t)}function dn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function pn(t,e,n){if(2&e)throw Error();const r=mt(e);let i=cn(t,n,r),s=i===nt?7:0|i[et],o=hn(s,e);return(2&o||un(o)||16&o)&&(o===s||un(o)||st(i,o),i=Wt(i),s=0,o=xn(o,e),rn(t,e,n,i,r)),o&=-13,o!==s&&st(i,o),i}function gn(t,e){var n=Ds;return _n(mn(t=t.v),t,void 0,n)===e?e:-1}function mn(t){if(j)return t[W]??(t[W]=new Map);if(W in t)return t[W];const e=new Map;return Object.defineProperty(t,W,{value:e}),e}function yn(t,e,n,r,i){const s=mn(t),o=_n(s,t,e,n,i);return o!==r&&(o&&(e=rn(t,e,o,void 0,i)),s.set(n,r)),e}function _n(t,e,n,r,i){let s=t.get(r);if(null!=s)return s;s=0;for(let t=0;t<r.length;t++){const o=r[t];null!=en(e,o,i)&&(0!==s&&(n=rn(e,n,s,void 0,i)),s=o)}return t.set(r,s),s}function vn(t,e,n){let r=0|t[et];const i=mt(r),s=en(t,n,i);let o;if(null!=s&&s[J]===ct){if(!ht(s))return Ye(s),s.v;o=s.v}else Array.isArray(s)&&(o=s);if(o){const t=0|o[et];2&t&&(o=ze(o,t))}return o=Ge(o,e),o!==s&&rn(t,r,n,o,i),o}function En(t,e,n,r,i){let s=!1;if(null!=(r=en(t,r,i,(t=>{const r=me(t,n,!1,e);return s=r!==t&&null!=r,r}))))return s&&!ht(r)&&$e(t,e),r}function wn(t,e,n,r){let i=t.v,s=0|i[et];if(null==(e=En(i,s,e,n,r)))return e;if(s=0|i[et],!ht(t,s)){const o=Ke(e);o!==e&&(Ye(t)&&(i=t.v,s=0|i[et]),s=rn(i,s,n,e=o,r),$e(i,s))}return e}function Tn(t,e,n,r,i,s,o,a){var c=ht(t,n);s=c?1:s,o=!!o||3===s,c=a&&!c,(2===s||c)&&Ye(t)&&(n=0|(e=t.v)[et]);var h=(t=cn(e,i))===nt?7:0|t[et],u=hn(h,n);if(a=!(4&u)){var l=t,f=n;const e=!!(2&u);e&&(f|=2);let i=!e,s=!0,o=0,a=0;for(;o<l.length;o++){const t=me(l[o],r,!1,f);if(t instanceof r){if(!e){const e=ht(t);i&&=!e,s&&=e}l[a++]=t}}a<o&&(l.length=a),u|=4,u=s?-4097&u:4096|u,u=i?8|u:-9&u}if(u!==h&&(st(t,u),2&u&&Object.freeze(t)),c&&!(8&u||!t.length&&(1===s||4===s&&(2&u||!(16&u)&&32&n)))){for(un(u)&&(t=Wt(t),u=xn(u,n),n=rn(e,n,i,t)),r=t,c=u,h=0;h<r.length;h++)(l=r[h])!==(u=Ke(l))&&(r[h]=u);c|=8,st(t,u=c=r.length?4096|c:-4097&c)}return an(t,u,e,n,i,s,a,o)}function An(t,e,n){const r=t.v;return Tn(t,r,0|r[et],e,n,sn(),!1,!0)}function bn(t){return null==t&&(t=void 0),t}function kn(t,e,n,r,i){return nn(t,n,r=bn(r),i),r&&!ht(r)&&$e(t.v),t}function Sn(t,e,n,r){t:{var i=r=bn(r);qe(t);const s=t.v;let o=0|s[et];if(null==i){const t=mn(s);if(_n(t,s,o,n)!==e)break t;t.set(n,0)}else o=yn(s,o,n,e);rn(s,o,e,i)}r&&!ht(r)&&$e(t.v)}function xn(t,e){return-273&(2&e?2|t:-3&t)}function Ln(t,e,n,r){var i=r;qe(t),t=Tn(t,r=t.v,0|r[et],n,e,2,!0),i=null!=i?i:new n,t.push(i),e=n=t===nt?7:0|t[et],(i=ht(i))?(n&=-9,1===t.length&&(n&=-4097)):n|=4096,n!==e&&st(t,n),i||$e(r)}function Rn(t,e,n){return ie(tn(t,e,void 0,n))}function In(t){return(g?tn(t,2,void 0,void 0,fe):fe(tn(t,2)))??Ze}function Fn(t,e){return tn(t,e,void 0,void 0,Qt)??0}function Mn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw D(\"int32\");if(!qt(n))throw D(\"int32\");n|=0}nn(t,e,n)}function Pn(t,e,n){nn(t,e,Zt(n))}function Cn(t,e,n){dn(t,e,pe(n),\"\")}function On(t,e,n){{qe(t);const o=t.v;let a=0|o[et];if(null==n)rn(o,a,e);else{var r=t=n===nt?7:0|n[et],i=un(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=Wt(n),r=0,t=xn(t,a),s=!1),t|=5,t|=(4&t?512&t?512:1024&t?1024:0:void 0)??(g?1024:0),i=0;i<n.length;i++){const e=n[i],o=de(e);Object.is(e,o)||(s&&(n=Wt(n),r=0,t=xn(t,a),s=!1),n[i]=o)}t!==r&&(s&&(n=Wt(n),t=xn(t,a)),st(n,t)),rn(o,a,e,n)}}}function Nn(t,e,n){qe(t),on(t,e,ge,2,!0).push(de(n))}var Un=class{constructor(t,e,n){if(this.buffer=t,n&&!e)throw Error();this.g=e}};function Dn(t,e){if(\"string\"==typeof t)return new Un(L(t),e);if(Array.isArray(t))return new Un(new Uint8Array(t),e);if(t.constructor===Uint8Array)return new Un(t,!1);if(t.constructor===ArrayBuffer)return t=new Uint8Array(t),new Un(t,!1);if(t.constructor===P)return e=M(t)||new Uint8Array(0),new Un(e,!0,t);if(t instanceof Uint8Array)return t=t.constructor===Uint8Array?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Un(t,!1);throw Error()}function Bn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);if(s>32)for(i|=(127&n)>>4,s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Wn(t,a),!(128&n))return e(r>>>0,i>>>0);throw Error()}function Gn(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Wn(t,n),!!(127&e)}throw Error()}function jn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw Error();return Wn(t,n),i}function Vn(t){return jn(t)>>>0}function Xn(t){var e=t.h;const n=t.g;var r=e[n],i=e[n+1];const s=e[n+2];return e=e[n+3],Wn(t,t.g+4),t=2*((i=(r<<0|i<<8|s<<16|e<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,255==r?i?NaN:t*(1/0):0==r?1401298464324817e-60*t*i:t*Math.pow(2,r-150)*(i+8388608)}function Hn(t){return jn(t)}function Wn(t,e){if(t.g=e,e>t.l)throw Error()}function zn(t,e){if(e<0)throw Error();const n=t.g;if((e=n+e)>t.l)throw Error();return t.g=e,n}function Kn(t,e){if(0==e)return F();var n=zn(t,e);return t.Y&&t.j?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Rt?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?F():new P(n,I)}var Yn=[];function qn(t,e,n,r){if(ir.length){const i=ir.pop();return i.o(r),i.g.init(t,e,n,r),i}return new rr(t,e,n,r)}function $n(t){t.g.clear(),t.l=-1,t.h=-1,ir.length<100&&ir.push(t)}function Jn(t){var e=t.g;if(e.g==e.l)return!1;t.m=t.g.g;var n=Vn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw Error();if(e<1)throw Error();return t.l=e,t.h=n,!0}function Zn(t){switch(t.h){case 0:0!=t.h?Zn(t):Gn(t.g);break;case 1:Wn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Zn(t);else{var e=Vn(t.g);Wn(t=t.g,t.g+e)}break;case 5:Wn(t=t.g,t.g+4);break;case 3:for(e=t.l;;){if(!Jn(t))throw Error();if(4==t.h){if(t.l!=e)throw Error();break}Zn(t)}break;default:throw Error()}}function Qn(t,e,n){const r=t.g.l;var i=Vn(t.g);let s=(i=t.g.g+i)-r;if(s<=0&&(t.g.l=i,n(e,t,void 0,void 0,void 0),s=i-t.g.g),s)throw Error();return t.g.g=i,t.g.l=r,e}function tr(t){var e=Vn(t.g),a=zn(t=t.g,e);if(t=t.h,o){var c,h=t;(c=s)||(c=s=new TextDecoder(\"utf-8\",{fatal:!0})),e=a+e,h=0===a&&e===h.length?h:h.subarray(a,e);try{var u=c.decode(h)}catch(t){if(void 0===i){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),i=!0}catch(t){i=!1}}throw!i&&(s=void 0),t}}else{e=(u=a)+e,a=[];let i,s=null;for(;u<e;){var l=t[u++];l<128?a.push(l):l<224?u>=e?n():(i=t[u++],l<194||128!=(192&i)?(u--,n()):a.push((31&l)<<6|63&i)):l<240?u>=e-1?n():(i=t[u++],128!=(192&i)||224===l&&i<160||237===l&&i>=160||128!=(192&(c=t[u++]))?(u--,n()):a.push((15&l)<<12|(63&i)<<6|63&c)):l<=244?u>=e-2?n():(i=t[u++],128!=(192&i)||i-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,n()):(l=(7&l)<<18|(63&i)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):n(),a.length>=8192&&(s=r(s,a),a.length=0)}u=r(s,a)}return u}function er(t){const e=Vn(t.g);return Kn(t.g,e)}function nr(t,e,n){var r=Vn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var rr=class{constructor(t,e,n,r){if(Yn.length){const i=Yn.pop();i.init(t,e,n,r),t=i}else t=new class{constructor(t,e,n,r){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.init(t,e,n,r)}init(t,e,n,{Y:r=!1,ea:i=!1}={}){this.Y=r,this.ea=i,t&&(t=Dn(t,this.ea),this.h=t.buffer,this.j=t.g,this.m=e||0,this.l=void 0!==n?this.m+n:this.h.length,this.g=this.m)}clear(){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.Y=!1}}(t,e,n,r);this.g=t,this.m=this.g.g,this.h=this.l=-1,this.o(r)}o({ha:t=!1}={}){this.ha=t}},ir=[];function sr(t){return t?/^\\d+$/.test(t)?(Xt(t),new or(Ft,Mt)):null:ar||=new or(0,0)}var or=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ar;function cr(t){return t?/^-?\\d+$/.test(t)?(Xt(t),new hr(Ft,Mt)):null:ur||=new hr(0,0)}var hr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ur;function lr(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function fr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function dr(t,e){if(e>=0)fr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function pr(t){var e=Ft;t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function gr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function mr(t,e,n){fr(t.g,8*e+n)}function yr(t,e){return mr(t,e,2),e=t.g.end(),gr(t,e),e.push(t.h),e}function _r(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function vr(t,e,n){mr(t,e,2),fr(t.g,n.length),gr(t,t.g.end()),gr(t,n)}function Er(t,e,n,r){null!=n&&(e=yr(t,e),r(n,t),_r(t,e))}function wr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var Tr=wr(),Ar=wr(),br=wr(),kr=wr(),Sr=wr(),xr=wr(),Lr=wr(),Rr=wr(),Ir=wr(),Fr=wr();function Mr(t,e,n){var r=t.v;z&&z in r&&(r=r[z])&&delete r[e.g],e.h?e.j(t,e.h,e.g,n,e.l):e.j(t,e.g,n,e.l)}var Pr=class{constructor(t,e){this.v=je(t,e,void 0,2048)}toJSON(){return Ue(this)}j(){var t=Fo,e=this.v,n=t.g,r=z;if(j&&r&&null!=e[r]?.[n]&&B(K,3),e=t.g,Z&&z&&void 0===Z&&(r=(n=this.v)[z])&&(r=r.da))try{r(n,e,Me)}catch(t){u(t)}return t.h?t.m(this,t.h,t.g,t.l):t.m(this,t.g,t.defaultValue,t.l)}clone(){const t=this.v,e=0|t[et];return Je(this,t,e)?He(this,t,!0):new this.constructor(ze(t,e,!1))}};Pr.prototype[J]=ct,Pr.prototype.toString=function(){return this.v.toString()};var Cr=class{constructor(t,e,n){this.g=t,this.h=e,t=Tr,this.l=!!t&&n===t||!1}};function Or(t,e){return new Cr(t,e,Tr)}function Nr(t,e,n,r,i){Er(t,n,Yr(e,r),i)}const Ur=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr),Dr=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr);var Br=Symbol(),Gr=Symbol(),jr=Symbol(),Vr=Symbol(),Xr=Symbol();let Hr,Wr;function zr(t,e,n,r){var i=r[t];if(i)return i;(i={}).qa=r,i.T=function(t){switch(typeof t){case\"boolean\":return De||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Be||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ba=s,\"function\"==typeof(s=r[++o])&&(i.ma=!0,Hr??=s,Wr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof Cr?t=s:(t=Ur,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Kr(t){return Array.isArray(t)?t[0]instanceof Cr?t:[Dr,t]:[t,void 0]}function Yr(t,e){return t instanceof Pr?t.v:Array.isArray(t)?Ge(t,e):void 0}function qr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function $r(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=zr(Gr,qr,$r,r).T,o||=Jr(r),i)}function Jr(t){let e=t[jr];if(null!=e)return e;const n=zr(Gr,qr,$r,t);return e=n.ma?(t,e)=>Hr(t,e,n):(t,e)=>{for(;Jn(e)&&4!=e.h;){var r=e.l,i=n[r];if(null==i){var s=n.ba;s&&(s=s[r])&&(null!=(s=Qr(s))&&(i=n[r]=s))}if(null==i||!i(e,t,r)){if(i=(s=e).m,Zn(s),s.ha)var o=void 0;else o=s.g.g-i,s.g.g=i,o=Kn(s.g,o);i=void 0,s=t,o&&((i=s[z]??(s[z]=new Fe))[r]??(i[r]=[])).push(o)}}return(t=Re(t))&&(t.da=n.qa[Xr]),!0},t[jr]=e,t[Xr]=Zr.bind(t),e}function Zr(t,e,n,r){var i=this[Gr];const s=this[jr],o=Ge(void 0,i.T),a=Re(t);if(a){var c=!1,h=i.ba;if(h){if(i=(e,n,i)=>{if(0!==i.length)if(h[n])for(const t of i){e=qn(t);try{c=!0,s(o,e)}finally{$n(e)}}else r?.(t,n,i)},null==e)Ie(a,i);else if(null!=a){const t=a[e];t&&i(a,e,t)}if(c){let r=0|t[et];if(2&r&&2048&r&&!n?.Ka)throw Error();const i=mt(r),s=(e,s)=>{if(null!=en(t,e,i)){if(1===n?.Qa)return;throw Error()}null!=s&&(r=rn(t,r,e,s,i)),delete a[e]};null==e?pt(o,0|o[et],((t,e)=>{s(t,e)})):s(e,en(o,e,i))}}}}function Qr(t){const e=(t=Kr(t))[0].g;if(t=t[1]){const n=Jr(t),r=zr(Gr,qr,$r,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function ti(t,e,n){t[e]=n.h}function ei(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=zr(Br,ti,ei,r).T,i||=ni(r))}function ni(t){let e=t[Vr];if(!e){const n=zr(Br,ti,ei,t);e=(t,e)=>ri(t,e,n),t[Vr]=e}return e}function ri(t,e,n){pt(t,0|t[et],((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ba)&&(n=n[e])){var r=(n=Kr(n))[0].h;if(n=n[1]){const e=ni(n),i=zr(Br,ti,ei,n).T;n=t.ma?Wr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}(n,t);i?i(e,r,t):t<500||B(q,3)}})),(t=Re(t))&&Ie(t,((t,n,r)=>{for(gr(e,e.g.end()),t=0;t<r.length;t++)gr(e,M(r[t])||new Uint8Array(0))}))}const ii=Tt(0);function si(t,e){if(Array.isArray(e)){var n=0|e[et];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),(t=-1537&(5|n))!==n&&st(e,t),2&t&&Object.freeze(e),e}}function oi(t,e,n){return new Cr(t,e,n)}function ai(t,e,n){return new Cr(t,e,n)}function ci(t,e,n){rn(t,0|t[et],e,n,mt(0|t[et]))}var hi=Or((function(t,e,n,r,i){if(2!==t.h)return!1;if(t=Wt(t=Qn(t,Ge([void 0,void 0],r),i)),i=mt(r=0|e[et]),2&r)throw Error();let s=en(e,n,i);if(s instanceof be)0!=(2&s.J)?(s=s.V(),s.push(t),rn(e,r,n,s,i)):s.Ma(t);else if(Array.isArray(s)){var o=0|s[et];8192&o||st(s,o|=8192),2&o&&(s=fn(s),rn(e,r,n,s,i)),s.push(t)}else rn(e,r,n,at([t]),i);return!0}),(function(t,e,n,r,i){if(e instanceof be)e.forEach(((e,s)=>{Er(t,n,Ge([s,e],r),i)}));else if(Array.isArray(e)){for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&Er(t,n,Ge(o,r),i)}at(e)}}));function ui(t,e,n){null!=(e=Qt(e))&&(mr(t,n,5),t=t.g,Ot(e),pr(t))}function li(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(zt(64,t));if(re(t)){if(\"string\"===e)return ce(t);if(\"number\"===e)return ae(t)}}(e),null!=e){if(\"string\"==typeof e)cr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new hr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=cr(e),lr(t.g,n.h,n.g)}}}function fi(t,e,n){null!=(e=ie(e))&&null!=e&&(mr(t,n,0),dr(t.g,e))}function di(t,e,n){null!=(e=ee(e))&&(mr(t,n,0),t.g.g.push(e?1:0))}function pi(t,e,n){null!=(e=ge(e))&&vr(t,n,h(e))}function gi(t,e,n,r,i){Er(t,n,Yr(e,r),i)}function mi(t,e,n){null!=(e=null==e||\"string\"==typeof e||e instanceof P?e:void 0)&&vr(t,n,Dn(e,!0).buffer)}function yi(t,e,n){return(5===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Xn,e):e.push(Xn(t.g)),!0)}var _i=oi((function(t,e,n){return 5===t.h&&(ci(e,n,Xn(t.g)),!0)}),ui,Rr),vi=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,5),r=r.g,Ot(s),pr(r))}}),Rr),Ei=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e))&&e.length){mr(t,n,2),fr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ot(e[r]),pr(n)}}),Rr),wi=oi((function(t,e,n){return 5===t.h&&(ci(e,n,0===(t=Xn(t.g))?void 0:t),!0)}),ui,Rr),Ti=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Bt)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Dt)),!0)}),li,xr),Ai=oi((function(t,e,n){return p?(0!==t.h?e=!1:(ci(e,n,(t=Bn(t.g,Bt))===ii?void 0:t),e=!0),e):0===t.h&&(ci(e,n,0===(t=Bn(t.g,Dt))?void 0:t),!0)}),li,xr),bi=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Ut)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Nt)),!0)}),(function(t,e,n){if(e=function(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Kt(64,t));if(re(t)){if(\"string\"===e)return e=$t(Number(t)),Yt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),(e=\"-\"!==t[0]&&((e=t.length)<20||20===e&&t<=\"18446744073709551615\"))||(Xt(t),t=Gt(Ft,Mt))),t;if(\"number\"===e)return(t=$t(t))>=0&&Yt(t)||(Ct(t),t=Nt(Ft,Mt)),t}}(e),null!=e){if(\"string\"==typeof e)sr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new or(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=sr(e),lr(t.g,n.h,n.g)}}}),Lr),ki=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),fi,kr),Si=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,jn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),kr),xi=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=jn(t.g))?void 0:t),!0)}),fi,kr),Li=oi((function(t,e,n){return 0===t.h&&(ci(e,n,Gn(t.g)),!0)}),di,Ar),Ri=oi((function(t,e,n){return 0===t.h&&(ci(e,n,!1===(t=Gn(t.g))?void 0:t),!0)}),di,Ar),Ii=ai((function(t,e,n){return 2===t.h&&(t=tr(t),pn(e,0|e[et],n).push(t),!0)}),(function(t,e,n){if(null!=(e=si(ge,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&vr(r,i,h(s))}}),br),Fi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,\"\"===(t=tr(t))?void 0:t),!0)}),pi,br),Mi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,tr(t)),!0)}),pi,br),Pi=function(t,e,n=Tr){return new Cr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Ge(void 0,r),pn(e,0|e[et],n).push(r),Qn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e)){for(let s=0;s<e.length;s++)gi(t,e[s],n,r,i);1&(t=0|e[et])||st(e,1|t)}})),Ci=Or((function(t,e,n,r,i,s){if(2!==t.h)return!1;let o=0|e[et];return yn(e,o,s,n,mt(o)),Qn(t,e=vn(e,r,n),i),!0}),gi),Oi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,er(t)),!0)}),mi,Ir),Ni=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Vn,e):e.push(Vn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(se,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,0),fr(r.g,s))}}),Sr),Ui=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=Vn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=se(e))&&null!=e&&(mr(t,n,0),fr(t.g,e))}),Sr),Di=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),(function(t,e,n){null!=(e=ie(e))&&(e=parseInt(e,10),mr(t,n,0),dr(t.g,e))}),Fr);class Bi{constructor(t,e){var n=rs;this.g=t,this.h=e,this.m=wn,this.j=kn,this.defaultValue=void 0,this.l=null!=n.Oa?gt:void 0}register(){_(this)}}function Gi(t,e){return new Bi(t,e)}function ji(t,e){return(n,r)=>{{const s={ea:!0};r&&Object.assign(s,r),n=qn(n,void 0,void 0,s);try{const r=new t,s=r.v;Jr(e)(s,n);var i=r}finally{$n(n)}}return i}}function Vi(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};ri(this.v,e,zr(Br,ti,ei,t)),gr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var Xi=class extends Pr{constructor(t){super(t)}},Hi=[0,Fi,oi((function(t,e,n){return 2===t.h&&(ci(e,n,(t=er(t))===F()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Pr){const r=e.Ra;return void(r?(e=r(e),null!=e&&vr(t,n,Dn(e,!0).buffer)):B(q,3))}if(Array.isArray(e))return void B(q,3)}mi(t,e,n)}),Ir)];let Wi,zi=globalThis.trustedTypes;function Ki(t){var e;return void 0===Wi&&(Wi=function(){let t=null;if(!zi)return t;try{const e=t=>t;t=zi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}()),t=(e=Wi)?e.createScriptURL(t):t,new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(t)}function Yi(t,...e){if(0===e.length)return Ki(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ki(n)}var qi=[0,ki,Di,Li,-1,Si,Di,-1,Li],$i=class extends Pr{constructor(t){super(t)}},Ji=[0,Li,Mi,Li,Di,-1,ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Hn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),Fr),Mi,-1,[0,Li,-1],Di,Li,-1],Zi=[0,3,Li,-1,2,[0,ki],[0,Di,Li],[0,Mi,-1],[0]],Qi=[0,Mi,-2],ts=class extends Pr{constructor(t){super(t)}},es=[0],ns=[0,ki,Li,1,Li,-4],rs=class extends Pr{constructor(t){super(t,2)}},is={};is[336783863]=[0,Mi,Li,-1,ki,[0,[1,2,3,4,5,6,7,8,9],Ci,es,Ci,Ji,Ci,Qi,Ci,ns,Ci,qi,Ci,[0,Mi,-2],Ci,[0,Mi,Di],Ci,Zi,Ci,[0,Di,-1,Li]],[0,Mi],Li,[0,[1,3],[2,4],Ci,[0,Si],-1,Ci,[0,Ii],-1,Pi,[0,Mi,-1]],Mi];var ss=[0,Ai,-1,Ri,-3,Ai,Si,Fi,xi,Ai,-1,Ri,xi,Ri,-2,Fi];function os(t,e){Nn(t,3,e)}function as(t,e){Nn(t,4,e)}var cs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,7,t)}},hs=[-1,{}],us=[0,Mi,1,hs],ls=[0,Mi,Ii,hs];function fs(t,e){Ln(t,1,cs,e)}function ds(t,e){Nn(t,10,e)}function ps(t,e){Nn(t,15,e)}var gs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,1001,t)}},ms=[-500,Pi,[-500,Fi,-1,Ii,-3,[-2,is,Li],Pi,Hi,xi,-1,us,ls,Pi,[0,Fi,Ri],Fi,ss,xi,Ii,987,Ii],4,Pi,[-500,Mi,-1,[-1,{}],998,Mi],Pi,[-500,Mi,Ii,-1,[-2,{},Li],997,Ii,-1],xi,Pi,[-500,Mi,Ii,hs,998,Ii],Ii,xi,us,ls,Pi,[0,Fi,-1,hs],Ii,-2,ss,Fi,-1,Ri,[0,Ri,Ui],978,hs,Pi,Hi];gs.prototype.g=Vi(ms);var ys=ji(gs,ms),_s=class extends Pr{constructor(t){super(t)}},vs=class extends Pr{constructor(t){super(t)}g(){return An(this,_s,1)}},Es=[0,Pi,[0,ki,_i,Mi,-1]],ws=ji(vs,Es),Ts=class extends Pr{constructor(t){super(t)}},As=class extends Pr{constructor(t){super(t)}},bs=class extends Pr{constructor(t){super(t)}l(){return wn(this,Ts,2)}g(){return An(this,As,5)}},ks=ji(class extends Pr{constructor(t){super(t)}},[0,Ii,Si,Ei,[0,Di,[0,ki,-3],[0,_i,-3],[0,ki,-1,[0,Pi,[0,ki,-2]]],Pi,[0,_i,-1,Mi,_i]],Mi,-1,Ti,Pi,[0,ki,_i],Ii,Ti]),Ss=class extends Pr{constructor(t){super(t)}},xs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Ls=class extends Pr{constructor(t){super(t)}},Rs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Is=class extends Pr{constructor(t){super(t)}},Fs=[0,ki,-1,Ei,Di],Ms=class extends Pr{constructor(t){super(t)}};Ms.prototype.g=Vi([0,_i,-4,Ti]);var Ps=class extends Pr{constructor(t){super(t)}},Cs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,1,ki,Mi,Es],Ti]),Os=class extends Pr{constructor(t){super(t)}},Ns=class extends Pr{constructor(t){super(t)}na(){const t=tn(this,1,void 0,void 0,ln);return null==t?F():t}},Us=class extends Pr{constructor(t){super(t)}},Ds=[1,2],Bs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,Ds,Ci,[0,Ei],Ci,[0,Oi],ki,Mi],Ti]),Gs=class extends Pr{constructor(t){super(t)}},js=[0,Mi,ki,_i,Ii,-1],Vs=class extends Pr{constructor(t){super(t)}},Xs=[0,Li,-1],Hs=class extends Pr{constructor(t){super(t)}},Ws=[1,2,3,4,5,6],zs=class extends Pr{constructor(t){super(t)}g(){return null!=tn(this,1,void 0,void 0,ln)}l(){return null!=ge(tn(this,2))}},Ks=class extends Pr{constructor(t){super(t)}g(){return ee(tn(this,2))??!1}},Ys=[0,Oi,Mi,[0,ki,Ti,-1],[0,bi,Ti]],qs=[0,Ys,Li,[0,Ws,Ci,ns,Ci,Ji,Ci,qi,Ci,es,Ci,Qi,Ci,Zi],Di],$s=class extends Pr{constructor(t){super(t)}},Js=[0,qs,_i,-1,ki],Zs=Gi(502141897,$s);is[502141897]=Js;var Qs=ji(class extends Pr{constructor(t){super(t)}},[0,[0,Di,-1,vi,Ni],Fs]),to=class extends Pr{constructor(t){super(t)}},eo=class extends Pr{constructor(t){super(t)}},no=[0,qs,_i,[0,qs],Li],ro=Gi(508968150,eo);is[508968150]=[0,qs,Js,no,_i,[0,[0,Ys]]],is[508968149]=no;var io=class extends Pr{constructor(t){super(t)}l(){return wn(this,Gs,2)}g(){nn(this,2)}},so=[0,qs,js];is[478825465]=so;var oo=class extends Pr{constructor(t){super(t)}},ao=class extends Pr{constructor(t){super(t)}},co=class extends Pr{constructor(t){super(t)}},ho=class extends Pr{constructor(t){super(t)}},uo=class extends Pr{constructor(t){super(t)}},lo=[0,qs,[0,qs],so,-1],fo=[0,qs,_i,ki],po=[0,qs,_i],go=[0,qs,fo,po,_i],mo=Gi(479097054,uo);is[479097054]=[0,qs,go,lo],is[463370452]=lo,is[464864288]=fo;var yo=Gi(462713202,ho);is[462713202]=go,is[474472470]=po;var _o=class extends Pr{constructor(t){super(t)}},vo=class extends Pr{constructor(t){super(t)}},Eo=class extends Pr{constructor(t){super(t)}},wo=class extends Pr{constructor(t){super(t)}},To=[0,qs,_i,-1,ki],Ao=[0,qs,_i,Li];wo.prototype.g=Vi([0,qs,po,[0,qs],Js,no,To,Ao]);var bo=class extends Pr{constructor(t){super(t)}},ko=Gi(456383383,bo);is[456383383]=[0,qs,js];var So=class extends Pr{constructor(t){super(t)}},xo=Gi(476348187,So);is[476348187]=[0,qs,Xs];var Lo=class extends Pr{constructor(t){super(t)}},Ro=class extends Pr{constructor(t){super(t)}},Io=[0,Di,-1],Fo=Gi(458105876,class extends Pr{constructor(t){super(t)}g(){let t;var e=this.v;const n=0|e[et];return t=ht(this,n),e=function(t,e,n,r){var i=Ro;!r&&Ye(t)&&(n=0|(e=t.v)[et]);var s=en(e,2);if(t=!1,null==s){if(r)return Le();s=[]}else if(s.constructor===be){if(!(2&s.J)||r)return s;s=s.V()}else Array.isArray(s)?t=!!(2&(0|s[et])):s=[];if(r){if(!s.length)return Le();t||(t=!0,ot(s))}else t&&(t=!1,at(s),s=fn(s));return!t&&32&n&&it(s,32),n=rn(e,n,2,r=new be(s,i,ye,void 0)),t||$e(e,n),r}(this,e,n,t),!t&&Ro&&(e.ra=!0),e}});is[458105876]=[0,Io,hi,[!0,Ti,[0,Mi,-1,Ii]],[0,Si,Li,Di]];var Mo=class extends Pr{constructor(t){super(t)}},Po=Gi(458105758,Mo);is[458105758]=[0,qs,Mi,Io];var Co=class extends Pr{constructor(t){super(t)}},Oo=[0,wi,-1,Ri],No=class extends Pr{constructor(t){super(t)}},Uo=class extends Pr{constructor(t){super(t)}},Do=[1,2];Uo.prototype.g=Vi([0,Do,Ci,Oo,Ci,[0,Pi,Oo]]);var Bo=class extends Pr{constructor(t){super(t)}},Go=Gi(443442058,Bo);is[443442058]=[0,qs,Mi,ki,_i,Ii,-1,Li,_i],is[514774813]=To;var jo=class extends Pr{constructor(t){super(t)}},Vo=Gi(516587230,jo);function Xo(t,e){return e=e?e.clone():new Gs,void 0!==t.displayNamesLocale?nn(e,1,pe(t.displayNamesLocale)):void 0===t.displayNamesLocale&&nn(e,1),void 0!==t.maxResults?Mn(e,2,t.maxResults):\"maxResults\"in t&&nn(e,2),void 0!==t.scoreThreshold?Pn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&nn(e,3),void 0!==t.categoryAllowlist?On(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(e,4),void 0!==t.categoryDenylist?On(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&nn(e,5),e}function Ho(t){const e=Number(t);return Number.isSafeInteger(e)?e:String(t)}function Wo(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:Rn(t,1)??0??-1,score:Fn(t,2)??0,categoryName:ge(tn(t,3))??\"\"??\"\",displayName:ge(tn(t,4))??\"\"??\"\"}))),headIndex:e,headName:n}}function zo(t){const e={classifications:An(t,Ps,1).map((t=>Wo(wn(t,vs,4)?.g()??[],Rn(t,2)??0,ge(tn(t,3))??\"\")))};return null!=function(t){return le(g?tn(t,2,void 0,void 0,fe):tn(t,2))}(t)&&(e.timestampMs=Ho(In(t))),e}function Ko(t){var e=on(t,3,Qt,sn()),n=on(t,2,ie,sn()),r=on(t,1,ge,sn()),i=on(t,9,ge,sn());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=wn(t,bs,4)?.l())&&(s.boundingBox={originX:Rn(e,1,Qe)??0,originY:Rn(e,2,Qe)??0,width:Rn(e,3,Qe)??0,height:Rn(e,4,Qe)??0,angle:0}),wn(t,bs,4)?.g().length)for(const e of wn(t,bs,4).g())s.keypoints.push({x:tn(e,1,void 0,Qe,Qt)??0,y:tn(e,2,void 0,Qe,Qt)??0,score:tn(e,4,void 0,Qe,Qt)??0,label:ge(tn(e,3,void 0,Qe))??\"\"});return s}function Yo(t){const e=[];for(const n of An(t,Ls,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function qo(t){const e=[];for(const n of An(t,Ss,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function $o(t){return Array.from(t,(t=>t>127?t-256:t))}function Jo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Zo;is[516587230]=[0,qs,To,Ao,_i],is[518928384]=Ao;const Qo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function ta(){if(void 0===Zo)try{await WebAssembly.instantiate(Qo),Zo=!0}catch{Zo=!1}return Zo}async function ea(t,e=Yi``){const n=await ta()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var na=class{};function ra(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function ia(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}try{importScripts(t.toString())}catch(e){if(!(e instanceof TypeError))throw e;await self.import(t.toString())}}function sa(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function oa(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function aa(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=sa(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function ca(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function ha(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function ua(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}na.forVisionTasks=function(t){return ea(\"vision\",t)},na.forTextTasks=function(t){return ea(\"text\",t)},na.forGenAiExperimentalTasks=function(t){return ea(\"genai_experimental\",t)},na.forGenAiTasks=function(t){return ea(\"genai\",t)},na.forAudioTasks=function(t){return ea(\"audio\",t)},na.isSimdSupported=function(){return ta()};async function la(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await ia(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await ia(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function fa(t,e){const n=wn(t.baseOptions,zs,1)||new zs;\"string\"==typeof e?(nn(n,2,pe(e)),nn(n,1)):e instanceof Uint8Array&&(nn(n,1,lt(e,!1)),nn(n,2)),kn(t.baseOptions,0,1,n)}function da(t){try{const e=t.H.length;if(1===e)throw Error(t.H[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.H.map((t=>t.message)).join(\", \"))}finally{t.H=[]}}function pa(t,e){t.C=Math.max(t.C,e)}function ga(t,e){t.B=new cs,Cn(t.B,2,\"PassThroughCalculator\"),os(t.B,\"free_memory\"),as(t.B,\"free_memory_unused_out\"),ds(e,\"free_memory\"),fs(e,t.B)}function ma(t,e){os(t.B,e),as(t.B,e+\"_unused_out\")}function ya(t){t.g.addBoolToStream(!0,\"free_memory\",t.C)}var _a=class{constructor(t){this.g=t,this.H=[],this.C=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(wn(this.baseOptions,zs,1)?.g()||wn(this.baseOptions,zs,1)?.l()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=wn(t.baseOptions,Hs,3);if(!n){var r=n=new Hs,i=new ts;Sn(r,4,Ws,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new $i,Sn(e,2,Ws,r)):(e=n,r=new ts,Sn(e,4,Ws,r))),kn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),fa(this,\"/model.dat\"),this.m(),this.L()}));if(e.modelAssetBuffer instanceof Uint8Array)fa(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{fa(this,t),this.m(),this.L()}))}return this.m(),this.L(),Promise.resolve()}L(){}ca(){let t;if(this.g.ca((e=>{t=ys(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.H.push(Error(e))})),this.g.Ja(),this.g.setGraph(t,e),this.B=void 0,da(this)}finishProcessing(){this.g.finishProcessing(),da(this)}close(){this.B=void 0,this.g.closeGraph()}};function va(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}_a.prototype.close=_a.prototype.close;class Ea{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function wa(t,e,n){const r=t.g;if(n=va(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Ta(t,e){const n=t.g,r=va(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=va(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=va(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.L),n.vertexAttribPointer(t.L,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Ea(n,r,i,s)}function Aa(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ba(t,e,n,r){return Aa(t,e),t.h||(t.m(),t.D()),n?(t.u||(t.u=Ta(t,!0)),n=t.u):(t.A||(t.A=Ta(t,!1)),n=t.A),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function ka(t,e,n){return Aa(t,e),t=va(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function Sa(t,e,n){Aa(t,e),t.B||(t.B=va(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.B),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function xa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var La=class{H(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=va(t.createProgram(),\"Failed to create WebGL program\"),this.X=wa(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.W=wa(this,this.H(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.L=t.getAttribLocation(this.h,\"aTex\")}D(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.X),t.deleteShader(this.W)}this.B&&this.g.deleteFramebuffer(this.B),this.A&&this.A.close(),this.u&&this.u.close()}};var Ra=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.C=ka(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=ka(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.P=va(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=va(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.M=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.M,0),t.uniform1i(this.P,1),t.uniform1i(this.U,2)}close(){this.C&&this.g.deleteTexture(this.C),this.j&&this.g.deleteTexture(this.j),super.close()}},Ia=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=ka(this,t),t.activeTexture(t.TEXTURE2),this.C=ka(this,t)}m(){super.m();const t=this.g;this.M=va(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.P=va(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.I=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.I,0),t.uniform1i(this.M,1),t.uniform1i(this.P,2)}close(){this.j&&this.g.deleteTexture(this.j),this.C&&this.g.deleteTexture(this.C),super.close()}};function Fa(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Ma(t){var e=Fa(t,1);if(!e){if(e=Fa(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=Ca(t);var n=Na(t);if(Sa(n,r,Pa(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function Pa(t){let e=Fa(t,2);if(!e){const n=Ca(t);e=Ua(t);const r=Ma(t),i=Oa(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),Da(t)}return e}function Ca(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Oa(t){if(t=Ca(t),!Ba)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))Ba=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");Ba=t.R16F}return Ba}function Na(t){return t.l||(t.l=new La),t.l}function Ua(t){const e=Ca(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Fa(t,2);return n||(n=ka(Na(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Da(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var Ba,Ga=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--ja&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!Fa(this,0)}ka(){return!!Fa(this,1)}R(){return!!Fa(this,2)}ja(){return(e=Fa(t=this,0))||(e=Ma(t),e=new Uint8Array(e.map((t=>Math.round(255*t)))),t.g.push(e)),e;var t,e}ia(){return Ma(this)}N(){return Pa(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=Ca(this),e=Na(this);t.activeTexture(t.TEXTURE1),n=ka(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=Oa(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{Ua(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Da(this)})),xa(e),Da(this)}}t.push(n)}return new Ga(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ca(this).deleteTexture(Fa(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsFloat32Array=Ga.prototype.ia,Ga.prototype.getAsUint8Array=Ga.prototype.ja,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasFloat32Array=Ga.prototype.ka,Ga.prototype.hasUint8Array=Ga.prototype.Fa;var ja=250;const Va={color:\"white\",lineWidth:4,radius:6};function Xa(t){return{...Va,fillColor:(t=t||{}).color,...t}}function Ha(t,e){return t instanceof Function?t(e):t}function Wa(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function za(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function Ka(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function Ya(t,e,n){if(e.R())n(e.N());else{const r=e.ka()?e.ia():e.ja();t.m=t.m??new La;const i=Ka(t);n((t=new Ga([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function qa(t,e,n,r){const i=function(t){return t.g||(t.g=new Ra),t.g}(t),s=Ka(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ba(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.C),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.I&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.I,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.I=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function $a(t,e,n,r){const i=Ka(t),s=function(t){return t.h||(t.h=new Ia),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ba(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.C),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var Ja=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=za(this);e=Xa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=Ha(e.fillColor,{index:i,from:s}),n.strokeStyle=Ha(e.color,{index:i,from:s}),n.lineWidth=Ha(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,Ha(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=za(this);n=Xa(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=Ha(n.color,{index:s,from:e,to:a}),r.lineWidth=Ha(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=za(this);e=Xa(e),n.save(),n.beginPath(),n.lineWidth=Ha(e.lineWidth,{}),n.strokeStyle=Ha(e.color,{}),n.fillStyle=Ha(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{qa(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):qa(this,t.N(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{$a(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):$a(this,t.N(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Za(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Qa(t){var e=Za(t,0);if(!e){e=ec(t);const n=nc(t),r=new Uint8Array(t.width*t.height*4);Sa(n,e,tc(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),xa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function tc(t){let e=Za(t,2);if(!e){const n=ec(t);e=rc(t);const r=Za(t,1)||Qa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),ic(t)}return e}function ec(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function nc(t){return t.l||(t.l=new La),t.l}function rc(t){const e=ec(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Za(t,2);return n||(n=ka(nc(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ic(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function sc(t){const e=ec(t);return ba(nc(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}Ja.prototype.close=Ja.prototype.close,Ja.prototype.drawConfidenceMask=Ja.prototype.wa,Ja.prototype.drawCategoryMask=Ja.prototype.va,Ja.prototype.drawBoundingBox=Ja.prototype.ua,Ja.prototype.drawConnectors=Ja.prototype.xa,Ja.prototype.drawLandmarks=Ja.prototype.ya,Ja.lerp=function(t,e,n,r,i){return Wa(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ja.clamp=Wa;var oc=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--ac&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Za(this,0)}la(){return!!Za(this,1)}R(){return!!Za(this,2)}Ca(){return Qa(this)}Ba(){var t=Za(this,1);return t||(tc(this),rc(this),t=sc(this),ic(this),this.g.push(t),this.j=!0),t}N(){return tc(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=ec(this),e=nc(this);t.activeTexture(t.TEXTURE1),n=ka(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{rc(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ic(this)})),xa(e),ic(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);tc(this),rc(this),n=sc(this),ic(this)}t.push(n)}return new oc(t,this.la(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Za(this,1).close(),this.m&&ec(this).deleteTexture(Za(this,2)),ac=-1}};oc.prototype.close=oc.prototype.close,oc.prototype.clone=oc.prototype.clone,oc.prototype.getAsWebGLTexture=oc.prototype.N,oc.prototype.getAsImageBitmap=oc.prototype.Ba,oc.prototype.getAsImageData=oc.prototype.Ca,oc.prototype.hasWebGLTexture=oc.prototype.R,oc.prototype.hasImageBitmap=oc.prototype.la,oc.prototype.hasImageData=oc.prototype.Ea;var ac=250;function cc(...t){return t.map((([t,e])=>({start:t,end:e})))}const hc=function(t){return class extends t{Ja(){this.i._registerModelResourcesGraphService()}}}((uc=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:ra()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),oa(this,r||\"input_audio\",(r=>{oa(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}ca(t){ha(this,\"__graph_config__\",(e=>{t(e)})),oa(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),oa(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){oa(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){oa(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){oa(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){oa(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){oa(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){oa(this,e,(e=>{ca(this,Object.keys(t),(r=>{ca(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){oa(this,n,(n=>{oa(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){oa(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){oa(this,n,(n=>{oa(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){ha(this,t,e),oa(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){ua(this,t,e),oa(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),ha(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),oa(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends uc{get ga(){return this.i}pa(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.ga._addBoundTextureAsImageToStream(e,r,i,n)}))}Z(t,e){ha(this,t,e),oa(this,t,(t=>{this.ga._attachImageListener(t)}))}aa(t,e){ua(this,t,e),oa(this,t,(t=>{this.ga._attachImageVectorListener(t)}))}}));var uc,lc=class extends hc{};async function fc(t,e,n){return async function(t,e,n,r){return la(t,e,n,r)}(t,n.canvas??(ra()?void 0:document.createElement(\"canvas\")),e,n)}function dc(t,e,n,r){if(t.U){const s=new Ms;if(n?.regionOfInterest){if(!t.oa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");Pn(s,1,(i.left+i.right)/2),Pn(s,2,(i.top+i.bottom)/2),Pn(s,4,i.right-i.left),Pn(s,3,i.bottom-i.top)}else Pn(s,1,.5),Pn(s,2,.5),Pn(s,4,1),Pn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90\u00B0.\");if(Pn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=sa(e);n=Fn(s,3)*r/t,i=Fn(s,4)*t/r,Pn(s,4,n),Pn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.pa(e,t.X,r??performance.now()),t.finishProcessing()}function pc(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");dc(t,e,n,t.C+1)}function gc(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");dc(t,e,n,r)}function mc(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new Ga([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var yc=class extends _a{constructor(t,e,n,r){super(t),this.g=t,this.X=e,this.U=n,this.oa=r,this.P=new La}l(t,e=!0){if(\"runningMode\"in t&&nn(this.baseOptions,2,te(!!t.runningMode&&\"IMAGE\"!==t.runningMode)),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.P.close(),super.close()}};yc.prototype.close=yc.prototype.close;var _c=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},kn(t=this.h=new $s,0,1,e=new Ks),Pn(this.h,2,.5),Pn(this.h,3,.3)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&Pn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&Pn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect_in\"),ps(t,\"detections\");const e=new rs;Mr(e,Zs,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect_in\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.G,_c.prototype.detect=_c.prototype.F,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=async function(t,e){return fc(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return fc(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return fc(_c,t,e)};var vc=cc([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ec=cc([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),wc=cc([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Tc=cc([474,475],[475,476],[476,477],[477,474]),Ac=cc([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),bc=cc([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),kc=cc([469,470],[470,471],[471,472],[472,469]),Sc=cc([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),xc=[...vc,...Ec,...wc,...Ac,...bc,...Sc],Lc=cc([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function Rc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var Ic=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,kn(t=this.h=new eo,0,1,e=new Ks),this.A=new to,kn(this.h,0,3,this.A),this.u=new $s,kn(this.h,0,2,this.u),Mn(this.u,4,1),Pn(this.u,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Mn(this.u,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&Pn(this.A,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}F(t,e){return Rc(this),pc(this,t,e),this.j}G(t,e,n){return Rc(this),gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"face_landmarks\");const e=new rs;Mr(e,ro,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.j.faceLandmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"blendshapes\"),as(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ws(e),this.j.faceBlendshapes.push(Wo(t.g()??[]));pa(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{pa(this,t)}))),this.outputFacialTransformationMatrixes&&(ps(t,\"face_geometry\"),as(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=wn(t=Qs(e),Is,2))&&this.j.facialTransformationMatrixes.push({rows:Rn(t,1)??0??0,columns:Rn(t,2)??0??0,data:on(t,3,Qt,sn()).slice()??[]});pa(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ic.prototype.detectForVideo=Ic.prototype.G,Ic.prototype.detect=Ic.prototype.F,Ic.prototype.setOptions=Ic.prototype.o,Ic.createFromModelPath=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetPath:e}})},Ic.createFromModelBuffer=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetBuffer:e}})},Ic.createFromOptions=function(t,e){return fc(Ic,t,e)},Ic.FACE_LANDMARKS_LIPS=vc,Ic.FACE_LANDMARKS_LEFT_EYE=Ec,Ic.FACE_LANDMARKS_LEFT_EYEBROW=wc,Ic.FACE_LANDMARKS_LEFT_IRIS=Tc,Ic.FACE_LANDMARKS_RIGHT_EYE=Ac,Ic.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Ic.FACE_LANDMARKS_RIGHT_IRIS=kc,Ic.FACE_LANDMARKS_FACE_OVAL=Sc,Ic.FACE_LANDMARKS_CONTOURS=xc,Ic.FACE_LANDMARKS_TESSELATION=Lc;var Fc=cc([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function Mc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function Pc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function Cc(t,e=!0){const n=[];for(const i of t){var r=ws(i);t=[];for(const n of r.g())r=e&&null!=Rn(n,1)?Rn(n,1)??0:-1,t.push({score:Fn(n,2)??0,index:r,categoryName:ge(tn(n,3))??\"\"??\"\",displayName:ge(tn(n,4))??\"\"??\"\"});n.push(t)}return n}var Oc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.j=new uo,0,1,e=new Ks),this.u=new ho,kn(this.j,0,2,this.u),this.D=new co,kn(this.u,0,3,this.D),this.A=new ao,kn(this.u,0,2,this.A),this.h=new oo,kn(this.j,0,3,this.h),Pn(this.A,2,.5),Pn(this.u,4,.5),Pn(this.D,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){if(Mn(this.A,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.A,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.u,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.D,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new io,n=e,r=Xo(t.cannedGesturesClassifierOptions,wn(this.h,io,3)?.l());kn(n,0,2,r),kn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&wn(this.h,io,3)?.g();return t.customGesturesClassifierOptions?(kn(n=e=new io,0,2,r=Xo(t.customGesturesClassifierOptions,wn(this.h,io,4)?.l())),kn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&wn(this.h,io,4)?.g(),this.l(t)}Ha(t,e){return Mc(this),pc(this,t,e),Pc(this)}Ia(t,e,n){return Mc(this),gc(this,t,n,e),Pc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_gestures\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,mo,this.j);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"HAND_GESTURES:hand_gestures\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=Rs(e);const n=[];for(const e of An(t,Ls,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.landmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=xs(e);const n=[];for(const e of An(t,Ss,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.worldLandmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...Cc(t,!1)),pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...Cc(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function Nc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}Oc.prototype.recognizeForVideo=Oc.prototype.Ia,Oc.prototype.recognize=Oc.prototype.Ha,Oc.prototype.setOptions=Oc.prototype.o,Oc.createFromModelPath=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetPath:e}})},Oc.createFromModelBuffer=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetBuffer:e}})},Oc.createFromOptions=function(t,e){return fc(Oc,t,e)},Oc.HAND_CONNECTIONS=Fc;var Uc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.h=new ho,0,1,e=new Ks),this.u=new co,kn(this.h,0,3,this.u),this.j=new ao,kn(this.h,0,2,this.j),Mn(this.j,3,1),Pn(this.j,2,.5),Pn(this.u,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Mn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.u,2,t.minHandPresenceConfidence??.5),this.l(t)}F(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],pc(this,t,e),Nc(this)}G(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],gc(this,t,n,e),Nc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,yo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ws(e);const n=[];for(const e of t.g())n.push({score:Fn(e,2)??0,index:Rn(e,1)??0??-1,categoryName:ge(tn(e,3))??\"\"??\"\",displayName:ge(tn(e,4))??\"\"??\"\"});i.push(n)}r.call(n,...i),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Uc.prototype.detectForVideo=Uc.prototype.G,Uc.prototype.detect=Uc.prototype.F,Uc.prototype.setOptions=Uc.prototype.o,Uc.createFromModelPath=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetPath:e}})},Uc.createFromModelBuffer=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetBuffer:e}})},Uc.createFromOptions=function(t,e){return fc(Uc,t,e)},Uc.HAND_CONNECTIONS=Fc;var Dc=cc([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function Bc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function Gc(t){try{if(!t.D)return t.h;t.D(t.h)}finally{ya(t)}}function jc(t,e){t=Rs(t),e.push(Yo(t))}var Vc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,kn(t=this.j=new wo,0,1,e=new Ks),this.I=new co,kn(this.j,0,2,this.I),this.W=new _o,kn(this.j,0,3,this.W),this.u=new $s,kn(this.j,0,4,this.u),this.O=new to,kn(this.j,0,5,this.O),this.A=new vo,kn(this.j,0,6,this.A),this.M=new Eo,kn(this.j,0,7,this.M),Pn(this.u,2,.5),Pn(this.u,3,.3),Pn(this.O,2,.5),Pn(this.A,2,.5),Pn(this.A,3,.3),Pn(this.M,2,.5),Pn(this.I,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&Pn(this.u,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&Pn(this.O,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&Pn(this.A,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&Pn(this.A,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&Pn(this.M,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&Pn(this.I,2,t.minHandLandmarksConfidence??.5),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.D=\"function\"==typeof e?e:n,Bc(this),pc(this,t,r),Gc(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.D=\"function\"==typeof n?n:r,Bc(this),gc(this,t,i,e),Gc(this)}m(){var t=new gs;ds(t,\"input_frames_image\"),ps(t,\"pose_landmarks\"),ps(t,\"pose_world_landmarks\"),ps(t,\"face_landmarks\"),ps(t,\"left_hand_landmarks\"),ps(t,\"left_hand_world_landmarks\"),ps(t,\"right_hand_landmarks\"),ps(t,\"right_hand_world_landmarks\");const e=new rs,n=new Xi;Cn(n,1,\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),function(t,e){if(null!=e)if(Array.isArray(e))nn(t,2,Ce(e,0,Ne));else{if(!(\"string\"==typeof e||e instanceof P||R(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");dn(t,2,lt(e,!1),F())}}(n,this.j.g());const r=new cs;Cn(r,2,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),Ln(r,8,Xi,n),os(r,\"IMAGE:input_frames_image\"),as(r,\"POSE_LANDMARKS:pose_landmarks\"),as(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),as(r,\"FACE_LANDMARKS:face_landmarks\"),as(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),as(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),as(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),as(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),fs(t,r),ga(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{jc(t,this.h.poseLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{pa(this,t)})),this.outputPoseSegmentationMasks&&(as(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),ma(this,\"pose_segmentation_mask\"),this.g.Z(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[mc(this,t,!0,!this.D)],pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],pa(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{jc(t,this.h.faceLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"extra_blendshapes\"),as(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ws(t),n.push(Wo(t.g()??[]))),pa(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{pa(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{jc(t,this.h.leftHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{jc(t,this.h.rightHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.detectForVideo=Vc.prototype.G,Vc.prototype.detect=Vc.prototype.F,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return fc(Vc,t,e)},Vc.HAND_CONNECTIONS=Fc,Vc.POSE_CONNECTIONS=Dc,Vc.FACE_LANDMARKS_LIPS=vc,Vc.FACE_LANDMARKS_LEFT_EYE=Ec,Vc.FACE_LANDMARKS_LEFT_EYEBROW=wc,Vc.FACE_LANDMARKS_LEFT_IRIS=Tc,Vc.FACE_LANDMARKS_RIGHT_EYE=Ac,Vc.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Vc.FACE_LANDMARKS_RIGHT_IRIS=kc,Vc.FACE_LANDMARKS_FACE_OVAL=Sc,Vc.FACE_LANDMARKS_CONTOURS=xc,Vc.FACE_LANDMARKS_TESSELATION=Lc;var Xc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},kn(t=this.h=new bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return kn(this.h,0,2,Xo(t,wn(this.h,Gs,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},pc(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_image\"),ds(t,\"norm_rect\"),ps(t,\"classifications\");const e=new rs;Mr(e,ko,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),os(n,\"IMAGE:input_image\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"CLASSIFICATIONS:classifications\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=zo(Cs(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.classifyForVideo=Xc.prototype.ta,Xc.prototype.classify=Xc.prototype.sa,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return fc(Xc,t,e)};var Hc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!0),this.h=new So,this.embeddings={embeddings:[]},kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){var e=this.h,n=wn(this.h,Vs,2);return n=n?n.clone():new Vs,void 0!==t.l2Normalize?nn(n,1,te(t.l2Normalize)):\"l2Normalize\"in t&&nn(n,1),void 0!==t.quantize?nn(n,2,te(t.quantize)):\"quantize\"in t&&nn(n,2),kn(e,0,2,n),this.l(t)}za(t,e){return pc(this,t,e),this.embeddings}Aa(t,e,n){return gc(this,t,n,e),this.embeddings}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"embeddings_out\");const e=new rs;Mr(e,xo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Bs(t),this.embeddings=function(t){return{embeddings:An(t,Us,1).map((t=>{const e={headIndex:Rn(t,3)??0??-1,headName:ge(tn(t,4))??\"\"??\"\"};var n=t.v;return void 0!==En(n,0|n[et],Os,gn(t,1))?(t=on(t=wn(t,Os,gn(t,1),void 0),1,Qt,sn()),e.floatEmbedding=t.slice()):(n=new Uint8Array(0),e.quantizedEmbedding=wn(t,Ns,gn(t,2),void 0)?.na()?.h()??n),e})),timestampMs:Ho(In(t))}}(t),pa(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Jo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Jo($o(t.quantizedEmbedding),$o(e.quantizedEmbedding))}return t},Hc.prototype.embedForVideo=Hc.prototype.Aa,Hc.prototype.embed=Hc.prototype.za,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return fc(Hc,t,e)};var Wc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function zc(t){const e=function(t){return An(t,cs,1)}(t.ca()).filter((t=>(ge(tn(t,1))??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.u=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(wn(e[0],rs,7)?.j()?.g()??new Map).forEach(((e,n)=>{t.u[Number(n)]=ge(tn(e,1))??\"\"}))}function Kc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Yc(t){try{const e=new Wc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{ya(t)}}Wc.prototype.close=Wc.prototype.close;var qc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.u=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.A=new Lo,kn(this.h,0,3,this.A),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}L(){zc(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,Kc(this),pc(this,t,r),Yc(this)}La(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,Kc(this),gc(this,t,i,e),Yc(this)}Da(){return this.u}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};qc.prototype.getLabels=qc.prototype.Da,qc.prototype.segmentForVideo=qc.prototype.La,qc.prototype.segment=qc.prototype.segment,qc.prototype.setOptions=qc.prototype.o,qc.createFromModelPath=function(t,e){return fc(qc,t,{baseOptions:{modelAssetPath:e}})},qc.createFromModelBuffer=function(t,e){return fc(qc,t,{baseOptions:{modelAssetBuffer:e}})},qc.createFromOptions=function(t,e){return fc(qc,t,e)};var $c=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};$c.prototype.close=$c.prototype.close;var Jc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.u=new Lo,kn(this.h,0,3,this.u),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};if(this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.C+1,r=new Uo,e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var s=new Co;dn(s,3,te(!0),!1),dn(s,1,Zt(e.keypoint.x),0),dn(s,2,Zt(e.keypoint.y),0),Sn(r,1,Do,s)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");{const t=new No;for(s of e.scribble)dn(e=new Co,3,te(!0),!1),dn(e,1,Zt(s.x),0),dn(e,2,Zt(s.y),0),Ln(t,1,Co,e);Sn(r,2,Do,t)}}this.g.addProtoToStream(r.g(),\"mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest\",\"roi_in\",n),pc(this,t,i);t:{try{const t=new $c(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var o=t;break t}this.j(t)}finally{ya(this)}o=void 0}return o}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"roi_in\"),ds(t,\"norm_rect_in\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2\"),os(n,\"IMAGE:image_in\"),os(n,\"ROI:roi_in\"),os(n,\"NORM_RECT:norm_rect_in\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Jc.prototype.segment=Jc.prototype.segment,Jc.prototype.setOptions=Jc.prototype.o,Jc.createFromModelPath=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetPath:e}})},Jc.createFromModelBuffer=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetBuffer:e}})},Jc.createFromOptions=function(t,e){return fc(Jc,t,e)};var Zc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},kn(t=this.h=new Bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),void 0!==t.maxResults?Mn(this.h,3,t.maxResults):\"maxResults\"in t&&nn(this.h,3),void 0!==t.scoreThreshold?Pn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&nn(this.h,4),void 0!==t.categoryAllowlist?On(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(this.h,5),void 0!==t.categoryDenylist?On(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&nn(this.h,6),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_frame_gpu\"),ds(t,\"norm_rect\"),ps(t,\"detections\");const e=new rs;Mr(e,Go,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),os(n,\"IMAGE:input_frame_gpu\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Zc.prototype.detectForVideo=Zc.prototype.G,Zc.prototype.detect=Zc.prototype.F,Zc.prototype.setOptions=Zc.prototype.o,Zc.createFromModelPath=async function(t,e){return fc(Zc,t,{baseOptions:{modelAssetPath:e}})},Zc.createFromModelBuffer=function(t,e){return fc(Zc,t,{baseOptions:{modelAssetBuffer:e}})},Zc.createFromOptions=function(t,e){return fc(Zc,t,e)};var Qc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function th(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function eh(t){try{const e=new Qc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.u)return e;t.u(e)}finally{ya(t)}}Qc.prototype.close=Qc.prototype.close;var nh=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,kn(t=this.h=new jo,0,1,e=new Ks),this.A=new Eo,kn(this.h,0,3,this.A),this.j=new vo,kn(this.h,0,2,this.j),Mn(this.j,4,1),Pn(this.j,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Mn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&Pn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&Pn(this.A,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.u=\"function\"==typeof e?e:n,th(this),pc(this,t,r),eh(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.u=\"function\"==typeof n?n:r,th(this),gc(this,t,i,e),eh(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"normalized_landmarks\"),ps(t,\"world_landmarks\"),ps(t,\"segmentation_masks\");const e=new rs;Mr(e,Vo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:normalized_landmarks\"),as(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),fs(t,n),ga(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],pa(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],pa(this,t)})),this.outputSegmentationMasks&&(as(n,\"SEGMENTATION_MASK:segmentation_masks\"),ma(this,\"segmentation_masks\"),this.g.aa(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>mc(this,t,!0,!this.u))),pa(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};nh.prototype.detectForVideo=nh.prototype.G,nh.prototype.detect=nh.prototype.F,nh.prototype.setOptions=nh.prototype.o,nh.createFromModelPath=function(t,e){return fc(nh,t,{baseOptions:{modelAssetPath:e}})},nh.createFromModelBuffer=function(t,e){return fc(nh,t,{baseOptions:{modelAssetBuffer:e}})},nh.createFromOptions=function(t,e){return fc(nh,t,e)},nh.POSE_CONNECTIONS=Dc;export{Ja as DrawingUtils,_c as FaceDetector,Ic as FaceLandmarker,na as FilesetResolver,Oc as GestureRecognizer,Uc as HandLandmarker,Vc as HolisticLandmarker,Xc as ImageClassifier,Hc as ImageEmbedder,qc as ImageSegmenter,Wc as ImageSegmenterResult,Jc as InteractiveSegmenter,$c as InteractiveSegmenterResult,oc as MPImage,Ga as MPMask,Zc as ObjectDetector,nh as PoseLandmarker,_a as TaskRunner,yc as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import {\r\n FilesetResolver,\r\n FaceLandmarker,\r\n FaceLandmarkerResult,\r\n} from \"@mediapipe/tasks-vision\";\r\n\r\nconst WASM_CDN =\r\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\";\r\nconst MODEL_URL =\r\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task\";\r\n\r\n// Module-level cache \u2014 survives component remounts and retries within the same page session.\r\n// First init fetches ~8MB total (WASM + model); subsequent inits reuse the cache instantly.\r\nlet _cachedVision: Awaited<ReturnType<typeof FilesetResolver.forVisionTasks>> | null = null;\r\nlet _cachedModelBuffer: ArrayBuffer | null = null;\r\n\r\nexport interface FaceDetectionResult {\r\n faceDetected: boolean;\r\n blendshapes: Map<string, number>;\r\n transformMatrix: number[] | null;\r\n}\r\n\r\nexport class FaceDetectorEngine {\r\n private landmarker: FaceLandmarker | null = null;\r\n\r\n async init(): Promise<void> {\r\n // Reuse WASM fileset \u2014 avoids re-fetching ~3MB on retry / remount\r\n if (!_cachedVision) {\r\n _cachedVision = await FilesetResolver.forVisionTasks(WASM_CDN);\r\n }\r\n\r\n // Reuse model buffer \u2014 avoids re-fetching ~5MB on retry / remount\r\n if (!_cachedModelBuffer) {\r\n const res = await fetch(MODEL_URL);\r\n if (!res.ok) {\r\n throw new Error(`Failed to download face model (${res.status})`);\r\n }\r\n _cachedModelBuffer = await res.arrayBuffer();\r\n }\r\n\r\n this.landmarker = await FaceLandmarker.createFromOptions(_cachedVision, {\r\n baseOptions: {\r\n // Pass a copy \u2014 MediaPipe takes ownership of the buffer\r\n modelAssetBuffer: new Uint8Array(_cachedModelBuffer.slice(0)),\r\n },\r\n runningMode: \"VIDEO\",\r\n outputFaceBlendshapes: true,\r\n outputFacialTransformationMatrixes: true,\r\n numFaces: 1,\r\n });\r\n }\r\n\r\n detect(video: HTMLVideoElement, timestamp: number): FaceDetectionResult {\r\n if (!this.landmarker) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n let result: FaceLandmarkerResult;\r\n try {\r\n result = this.landmarker.detectForVideo(video, timestamp);\r\n } catch {\r\n // Video may not be ready yet \u2014 return no-face gracefully\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n if (!result.faceBlendshapes || result.faceBlendshapes.length === 0) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const blendshapes = new Map<string, number>();\r\n for (const bs of result.faceBlendshapes[0].categories) {\r\n blendshapes.set(bs.categoryName, bs.score);\r\n }\r\n\r\n const transformMatrix =\r\n result.facialTransformationMatrixes &&\r\n result.facialTransformationMatrixes.length > 0\r\n ? (Array.from(result.facialTransformationMatrixes[0].data) as number[])\r\n : null;\r\n\r\n return { faceDetected: true, blendshapes, transformMatrix };\r\n }\r\n\r\n destroy(): void {\r\n if (this.landmarker) {\r\n this.landmarker.close();\r\n this.landmarker = null;\r\n }\r\n }\r\n}\r\n", "import { FaceDetectionResult } from \"./FaceDetector\";\r\n\r\nexport interface ActionState {\r\n action: string;\r\n detected: boolean;\r\n active: boolean;\r\n confidence: number;\r\n}\r\n\r\n/**\r\n * Per-action detection tuning.\r\n * - threshold : minimum confidence score required to start counting.\r\n * - holdFrames: consecutive frames above threshold before action is confirmed.\r\n *\r\n * BLINK is a fast reflex (~100-200ms) so we use a low threshold and only 2\r\n * frames. Head-turn and mouth-open are sustained movements so they need a\r\n * slightly longer hold to avoid false positives.\r\n */\r\nconst ACTION_CONFIGS: Record<string, { threshold: number; holdFrames: number }> = {\r\n BLINK: { threshold: 0.25, holdFrames: 2 },\r\n TURN_LEFT: { threshold: 0.30, holdFrames: 3 },\r\n TURN_RIGHT: { threshold: 0.30, holdFrames: 3 },\r\n TURN_HEAD: { threshold: 0.90, holdFrames: 5 },\r\n OPEN_MOUTH: { threshold: 0.30, holdFrames: 2 },\r\n};\r\nconst DEFAULT_CONFIG = { threshold: 0.40, holdFrames: 4 };\r\n\r\n/**\r\n * Sequential action detector aligned with backend's 5 UPPERCASE actions:\r\n * BLINK, TURN_LEFT, TURN_RIGHT, TURN_HEAD, OPEN_MOUTH\r\n */\r\nexport class ActionDetector {\r\n private completedActions = new Set<string>();\r\n private holdCounters = new Map<string, number>();\r\n private yawHistory: number[] = [];\r\n private readonly YAW_HISTORY_SIZE = 18; // ~0.6s of frames\r\n\r\n constructor(private requiredActions: string[]) {}\r\n\r\n check(result: FaceDetectionResult): ActionState[] {\r\n const currentAction = this.getCurrentAction();\r\n\r\n if (!result.faceDetected) {\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n const bs = result.blendshapes;\r\n\r\n // Only check the current active action (sequential flow)\r\n if (currentAction && !this.completedActions.has(currentAction)) {\r\n const conf = this.getConfidence(currentAction, bs, result.transformMatrix);\r\n const cfg = ACTION_CONFIGS[currentAction] ?? DEFAULT_CONFIG;\r\n\r\n if (conf >= cfg.threshold) {\r\n const count = (this.holdCounters.get(currentAction) || 0) + 1;\r\n this.holdCounters.set(currentAction, count);\r\n\r\n if (count >= cfg.holdFrames) {\r\n this.completedActions.add(currentAction);\r\n this.holdCounters.delete(currentAction);\r\n }\r\n } else {\r\n this.holdCounters.set(currentAction, 0);\r\n }\r\n\r\n return this.buildStates(currentAction, conf);\r\n }\r\n\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n getCurrentAction(): string | null {\r\n for (const action of this.requiredActions) {\r\n if (!this.completedActions.has(action)) return action;\r\n }\r\n return null;\r\n }\r\n\r\n private buildStates(\r\n currentAction: string | null,\r\n currentConf: number\r\n ): ActionState[] {\r\n return this.requiredActions.map((action) => ({\r\n action,\r\n detected: this.completedActions.has(action),\r\n active: action === currentAction,\r\n confidence: action === currentAction ? currentConf : 0,\r\n }));\r\n }\r\n\r\n private getConfidence(\r\n action: string,\r\n bs: Map<string, number>,\r\n matrix: number[] | null\r\n ): number {\r\n switch (action) {\r\n case \"BLINK\": {\r\n const left = bs.get(\"eyeBlinkLeft\") || 0;\r\n const right = bs.get(\"eyeBlinkRight\") || 0;\r\n return (left + right) / 2;\r\n }\r\n\r\n case \"TURN_LEFT\": {\r\n // Accept either direction \u2014 instruction is \"turn sideways\"\r\n // Using absolute yaw so any head turn registers\r\n const yaw = Math.abs(this.getHeadYaw(matrix));\r\n return yaw > 5 ? Math.min(1, yaw / 20) : 0;\r\n }\r\n\r\n case \"TURN_RIGHT\": {\r\n // Accept either direction \u2014 instruction is \"turn sideways\"\r\n const yaw = Math.abs(this.getHeadYaw(matrix));\r\n return yaw > 5 ? Math.min(1, yaw / 20) : 0;\r\n }\r\n\r\n case \"TURN_HEAD\": {\r\n // Proper side-to-side: head must reach left AND right within the\r\n // recent frame window. 0.5 when one side is seen, 1.0 when both.\r\n const yaw = this.getHeadYaw(matrix);\r\n this.yawHistory.push(yaw);\r\n if (this.yawHistory.length > this.YAW_HISTORY_SIZE) {\r\n this.yawHistory.shift();\r\n }\r\n if (this.yawHistory.length < this.YAW_HISTORY_SIZE) {\r\n return 0;\r\n }\r\n const left = this.yawHistory.some((y) => y <= -10);\r\n const right = this.yawHistory.some((y) => y >= 10);\r\n if (left && right) return 1.0;\r\n if (left || right) return 0.5;\r\n return 0;\r\n }\r\n\r\n case \"OPEN_MOUTH\":\r\n return bs.get(\"jawOpen\") || 0;\r\n\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n private getHeadYaw(matrix: number[] | null): number {\r\n if (!matrix || matrix.length < 16) return 0;\r\n // 4x4 column-major matrix from MediaPipe FaceLandmarker\r\n // Yaw (rotation around Y axis): atan2(-m20, m00) where m20=matrix[2], m00=matrix[0]\r\n return Math.atan2(-matrix[2], matrix[0]) * (180 / Math.PI);\r\n }\r\n\r\n allCompleted(): boolean {\r\n return this.requiredActions.every((a) => this.completedActions.has(a));\r\n }\r\n\r\n completedCount(): number {\r\n return this.completedActions.size;\r\n }\r\n\r\n reset(): void {\r\n this.completedActions.clear();\r\n this.holdCounters.clear();\r\n this.yawHistory = [];\r\n }\r\n}\r\n", "import { ActionState } from \"../../camera/ActionDetector\";\r\n\r\nconst ICONS: Record<string, string> = {\r\n BLINK: \"\uD83D\uDC41\",\r\n TURN_LEFT: \"\u2194\",\r\n TURN_RIGHT: \"\u2194\",\r\n TURN_HEAD: \"\u2194\",\r\n OPEN_MOUTH: \"\uD83D\uDE2E\",\r\n};\r\n\r\nconst ACTION_CUES: Record<string, string> = {\r\n BLINK: `<div style=\"font-size:52px;line-height:1;animation:sc-blink 1.2s ease-in-out infinite;\">\uD83D\uDC41\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">BLINK YOUR EYES</div>`,\r\n TURN_LEFT: `<div style=\"font-size:52px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">TURN HEAD SIDEWAYS</div>`,\r\n TURN_RIGHT: `<div style=\"font-size:52px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">TURN HEAD SIDEWAYS</div>`,\r\n TURN_HEAD: `<div style=\"font-size:52px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">TURN HEAD SIDE TO SIDE</div>`,\r\n OPEN_MOUTH: `<div style=\"font-size:52px;line-height:1;animation:sc-mouth 1.2s ease-in-out infinite;\">\uD83D\uDE2E</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">OPEN YOUR MOUTH</div>`,\r\n};\r\n\r\nfunction injectLivenessKeyframes(): void {\r\n if (document.getElementById(\"sc-liveness-kf\")) return;\r\n const s = document.createElement(\"style\");\r\n s.id = \"sc-liveness-kf\";\r\n s.textContent = `\r\n @keyframes sc-blink {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(0.1); }\r\n 50% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-turn-head {\r\n 0%,100% { transform:translateX(0); }\r\n 25% { transform:translateX(-12px); }\r\n 75% { transform:translateX(12px); }\r\n }\r\n @keyframes sc-mouth {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(1.25); }\r\n 60% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-pop-in {\r\n 0% { transform:scale(0.7); opacity:0; }\r\n 60% { transform:scale(1.05); }\r\n 100% { transform:scale(1); opacity:1; }\r\n }\r\n `;\r\n document.head.appendChild(s);\r\n}\r\n\r\nexport interface UIChallenge {\r\n actions: string[];\r\n time_limit_seconds: number;\r\n instruction: string;\r\n}\r\n\r\nexport class LivenessUI {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private instructionEl: HTMLDivElement | null = null;\r\n private stepsEl: HTMLDivElement | null = null;\r\n private progressBarEl: HTMLDivElement | null = null;\r\n private confidenceRingEl: SVGCircleElement | null = null;\r\n private timerEl: HTMLDivElement | null = null;\r\n private overlayEl: HTMLDivElement | null = null;\r\n private actionCueEl: HTMLDivElement | null = null;\r\n private timerInterval: ReturnType<typeof setInterval> | null = null;\r\n private totalActions = 0;\r\n private currentCueAction: string | null = null;\r\n private docCaptureRoot: HTMLDivElement | null = null;\r\n\r\n mount(container: HTMLElement, challenge: UIChallenge): HTMLVideoElement {\r\n injectLivenessKeyframes();\r\n this.totalActions = challenge.actions.length;\r\n\r\n // \u2500\u2500 Root \u2014 two-column layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n display:flex;flex-direction:row;width:100%;margin:0 auto;\r\n background:#0a0a0a;border-radius:16px;overflow:hidden;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n min-height:340px;\r\n `;\r\n\r\n // \u2500\u2500 LEFT: Camera column \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const camCol = document.createElement(\"div\");\r\n camCol.style.cssText = `\r\n position:relative;flex:0 0 55%;\r\n background:#000;overflow:hidden;\r\n `;\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText = `\r\n width:100%;height:100%;display:block;\r\n transform:scaleX(-1);object-fit:cover;\r\n min-height:320px;\r\n `;\r\n\r\n // Oval guide \u2014 centred in camera column\r\n const guideWrap = document.createElement(\"div\");\r\n guideWrap.style.cssText = `\r\n position:absolute;top:50%;left:50%;\r\n transform:translate(-50%,-55%);\r\n width:140px;height:180px;pointer-events:none;\r\n `;\r\n\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 140 180\");\r\n svg.style.cssText = \"width:100%;height:100%;\";\r\n\r\n const bgOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\r\n bgOval.setAttribute(\"cx\", \"70\");\r\n bgOval.setAttribute(\"cy\", \"90\");\r\n bgOval.setAttribute(\"rx\", \"64\");\r\n bgOval.setAttribute(\"ry\", \"86\");\r\n bgOval.setAttribute(\"fill\", \"none\");\r\n bgOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.3)\");\r\n bgOval.setAttribute(\"stroke-width\", \"2\");\r\n bgOval.setAttribute(\"stroke-dasharray\", \"6 3\");\r\n\r\n const confOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\r\n confOval.setAttribute(\"cx\", \"70\");\r\n confOval.setAttribute(\"cy\", \"90\");\r\n confOval.setAttribute(\"rx\", \"64\");\r\n confOval.setAttribute(\"ry\", \"86\");\r\n confOval.setAttribute(\"fill\", \"none\");\r\n confOval.setAttribute(\"stroke\", \"#22c55e\");\r\n confOval.setAttribute(\"stroke-width\", \"3\");\r\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\r\n confOval.setAttribute(\"stroke-dasharray\", `${circ}`);\r\n confOval.setAttribute(\"stroke-dashoffset\", `${circ}`);\r\n confOval.style.cssText = \"transition:stroke-dashoffset 0.15s ease;transform:rotate(-90deg);transform-origin:70px 90px;\";\r\n this.confidenceRingEl = confOval as unknown as SVGCircleElement;\r\n\r\n svg.appendChild(bgOval);\r\n svg.appendChild(confOval);\r\n guideWrap.appendChild(svg);\r\n\r\n // Instruction text \u2014 top of camera column\r\n const camTop = document.createElement(\"div\");\r\n camTop.style.cssText = `\r\n position:absolute;top:0;left:0;right:0;\r\n background:linear-gradient(180deg,rgba(0,0,0,0.8) 0%,transparent 100%);\r\n padding:10px 12px 28px;\r\n `;\r\n this.instructionEl = document.createElement(\"div\");\r\n this.instructionEl.style.cssText = `\r\n color:#fff;font-size:13px;font-weight:600;text-align:center;line-height:1.4;\r\n `;\r\n this.instructionEl.textContent = challenge.instruction;\r\n camTop.appendChild(this.instructionEl);\r\n\r\n // Timer \u2014 bottom of camera column\r\n const camBottom = document.createElement(\"div\");\r\n camBottom.style.cssText = `\r\n position:absolute;bottom:0;left:0;right:0;\r\n background:linear-gradient(0deg,rgba(0,0,0,0.7) 0%,transparent 100%);\r\n padding:24px 10px 8px;text-align:center;\r\n `;\r\n this.timerEl = document.createElement(\"div\");\r\n this.timerEl.style.cssText = `\r\n color:rgba(255,255,255,0.5);font-size:11px;font-variant-numeric:tabular-nums;\r\n `;\r\n camBottom.appendChild(this.timerEl);\r\n\r\n // Action cue \u2014 centre of camera column\r\n this.actionCueEl = document.createElement(\"div\");\r\n this.actionCueEl.style.cssText = `\r\n position:absolute;bottom:36px;left:50%;transform:translateX(-50%);\r\n z-index:5;pointer-events:none;display:none;text-align:center;\r\n background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);\r\n border-radius:14px;padding:10px 18px;min-width:170px;\r\n border:1.5px solid rgba(255,255,255,0.12);\r\n `;\r\n\r\n camCol.appendChild(this.videoEl);\r\n camCol.appendChild(guideWrap);\r\n camCol.appendChild(camTop);\r\n camCol.appendChild(camBottom);\r\n camCol.appendChild(this.actionCueEl);\r\n\r\n // \u2500\u2500 RIGHT: Steps column \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const stepsCol = document.createElement(\"div\");\r\n stepsCol.style.cssText = `\r\n flex:1;display:flex;flex-direction:column;\r\n padding:16px 14px;gap:8px;\r\n background:#111;border-left:1px solid rgba(255,255,255,0.06);\r\n justify-content:space-between;\r\n `;\r\n\r\n // Progress bar at top of steps column\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `\r\n height:3px;background:rgba(255,255,255,0.1);border-radius:2px;overflow:hidden;\r\n margin-bottom:4px;\r\n `;\r\n this.progressBarEl = document.createElement(\"div\");\r\n this.progressBarEl.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,#22c55e,#4ade80);\r\n border-radius:2px;transition:width 0.4s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBarEl);\r\n\r\n // Steps list\r\n this.stepsEl = document.createElement(\"div\");\r\n this.stepsEl.style.cssText = \"display:flex;flex-direction:column;gap:6px;flex:1;\";\r\n\r\n for (let i = 0; i < challenge.actions.length; i++) {\r\n const action = challenge.actions[i];\r\n const step = document.createElement(\"div\");\r\n step.dataset.action = action;\r\n step.style.cssText = `\r\n display:flex;align-items:center;gap:8px;\r\n padding:8px 10px;border-radius:10px;\r\n background:rgba(255,255,255,0.04);\r\n border:1px solid rgba(255,255,255,0.06);\r\n transition:all 0.3s ease;\r\n opacity:${i === 0 ? \"1\" : \"0.45\"};\r\n `;\r\n\r\n const num = document.createElement(\"div\");\r\n num.className = \"sc-step-num\";\r\n num.style.cssText = `\r\n width:24px;height:24px;border-radius:50%;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:12px;font-weight:700;color:#fff;\r\n background:rgba(255,255,255,0.1);\r\n border:1.5px solid rgba(255,255,255,0.2);\r\n transition:all 0.3s ease;\r\n `;\r\n num.textContent = String(i + 1);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = \"color:#fff;font-size:12px;font-weight:500;flex:1;line-height:1.3;\";\r\n label.textContent = this.describeAction(action);\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = \"font-size:16px;flex-shrink:0;\";\r\n icon.textContent = ICONS[action] || \"\";\r\n\r\n step.appendChild(num);\r\n step.appendChild(label);\r\n step.appendChild(icon);\r\n this.stepsEl.appendChild(step);\r\n }\r\n\r\n stepsCol.appendChild(progressWrap);\r\n stepsCol.appendChild(this.stepsEl);\r\n\r\n // Result overlay \u2014 full root\r\n this.overlayEl = document.createElement(\"div\");\r\n this.overlayEl.style.cssText = `\r\n position:absolute;inset:0;display:none;align-items:center;\r\n justify-content:center;z-index:10;\r\n background:rgba(0,0,0,0.88);backdrop-filter:blur(8px);\r\n `;\r\n\r\n // \u2500\u2500 Assemble \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n this.root.appendChild(camCol);\r\n this.root.appendChild(stepsCol);\r\n this.root.appendChild(this.overlayEl);\r\n\r\n container.appendChild(this.root);\r\n this.startTimer(challenge.time_limit_seconds);\r\n\r\n return this.videoEl;\r\n }\r\n\r\n updateActions(states: ActionState[]): void {\r\n if (!this.stepsEl || !this.progressBarEl) return;\r\n\r\n let completed = 0;\r\n const activeState = states.find((s) => s.active && !s.detected) ?? null;\r\n\r\n for (const state of states) {\r\n const step = this.stepsEl.querySelector(\r\n `[data-action=\"${state.action}\"]`\r\n ) as HTMLDivElement | null;\r\n if (!step) continue;\r\n\r\n const num = step.querySelector(\".sc-step-num\") as HTMLElement | null;\r\n\r\n if (state.detected) {\r\n completed++;\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(34,197,94,0.12)\";\r\n step.style.borderColor = \"rgba(34,197,94,0.3)\";\r\n if (num) {\r\n num.style.background = \"#22c55e\";\r\n num.style.borderColor = \"#22c55e\";\r\n num.textContent = \"\u2713\";\r\n }\r\n } else if (state.active) {\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(59,130,246,0.12)\";\r\n step.style.borderColor = \"rgba(59,130,246,0.3)\";\r\n if (num) {\r\n num.style.borderColor = \"#3b82f6\";\r\n num.style.background = \"rgba(59,130,246,0.3)\";\r\n }\r\n }\r\n }\r\n\r\n const pct = this.totalActions > 0 ? (completed / this.totalActions) * 100 : 0;\r\n this.progressBarEl.style.width = `${pct}%`;\r\n\r\n if (this.confidenceRingEl) {\r\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\r\n const conf = activeState ? activeState.confidence : 0;\r\n this.confidenceRingEl.setAttribute(\"stroke-dashoffset\", `${circ * (1 - conf)}`);\r\n this.confidenceRingEl.setAttribute(\"stroke\", conf > 0.6 ? \"#22c55e\" : \"#3b82f6\");\r\n }\r\n\r\n this.updateActionCue(activeState?.action ?? null);\r\n }\r\n\r\n private updateActionCue(action: string | null): void {\r\n if (!this.actionCueEl) return;\r\n if (!action) { this.actionCueEl.style.display = \"none\"; this.currentCueAction = null; return; }\r\n if (action === this.currentCueAction) return;\r\n this.currentCueAction = action;\r\n const cueHtml = ACTION_CUES[action];\r\n if (!cueHtml) { this.actionCueEl.style.display = \"none\"; return; }\r\n this.actionCueEl.innerHTML = cueHtml;\r\n this.actionCueEl.style.display = \"block\";\r\n this.actionCueEl.style.animation = \"none\";\r\n void this.actionCueEl.offsetWidth;\r\n this.actionCueEl.style.animation = \"sc-pop-in 0.3s ease forwards\";\r\n }\r\n\r\n updateInstruction(text: string): void {\r\n if (this.instructionEl) this.instructionEl.textContent = text;\r\n }\r\n\r\n stopTimer(): void {\r\n if (this.timerInterval) { clearInterval(this.timerInterval); this.timerInterval = null; }\r\n if (this.timerEl) this.timerEl.textContent = \"\";\r\n }\r\n\r\n showResult(status: \"processing\" | \"failed\", _verificationId?: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n const ok = status === \"processing\";\r\n this.overlayEl.style.display = \"flex\";\r\n // C3: Internal entry ID removed \u2014 never expose DB integers to end users\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 16px;display:flex;align-items:center;justify-content:center;font-size:32px;\r\n background:${ok ? \"rgba(34,197,94,0.2)\" : \"rgba(239,68,68,0.2)\"};\r\n border:3px solid ${ok ? \"#22c55e\" : \"#ef4444\"};\">\r\n ${ok ? \"\u2713\" : \"\u2715\"}\r\n </div>\r\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">${ok ? \"Verification submitted\" : \"Submission failed\"}</div>\r\n <div style=\"font-size:12px;opacity:0.6;line-height:1.6;\">${ok ? \"Hold on while we wrap up\u2026\" : \"Something went wrong. Please try again.\"}</div>\r\n </div>`;\r\n setTimeout(resolve, 1800);\r\n });\r\n }\r\n\r\n showTimeout(onRetry: () => void): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n this.overlayEl.style.display = \"flex\";\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;font-size:32px;background:rgba(251,191,36,0.15);border:3px solid #fbbf24;\">\u23F1</div>\r\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">Time's Up</div>\r\n <div style=\"font-size:12px;opacity:0.6;margin-bottom:18px;\">You ran out of time. Please try again.</div>\r\n <button id=\"sc-retry-btn\" style=\"padding:11px 28px;border-radius:10px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:14px;font-weight:600;width:100%;max-width:180px;\">Try Again</button>\r\n </div>`;\r\n const btn = this.overlayEl.querySelector(\"#sc-retry-btn\") as HTMLButtonElement | null;\r\n if (btn) { btn.addEventListener(\"click\", () => { onRetry(); resolve(); }); }\r\n else { setTimeout(resolve, 5000); }\r\n });\r\n }\r\n\r\n getVideoElement(): HTMLVideoElement | null { return this.videoEl; }\r\n\r\n mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n injectLivenessKeyframes();\r\n const docRoot = document.createElement(\"div\");\r\n docRoot.style.cssText = `position:relative;width:100%;max-width:420px;margin:0 auto;background:#0a0a0a;border-radius:16px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;box-shadow:0 8px 32px rgba(0,0,0,0.4);`;\r\n this.docCaptureRoot = docRoot;\r\n const docVideo = document.createElement(\"video\");\r\n docVideo.autoplay = true; docVideo.playsInline = true; docVideo.muted = true;\r\n docVideo.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n docVideo.srcObject = stream;\r\n const guideOverlay = document.createElement(\"div\");\r\n guideOverlay.style.cssText = \"position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;\";\r\n guideOverlay.innerHTML = `<div style=\"width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;\"><div style=\"position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:4px 0 0 0;\"></div><div style=\"position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 4px 0 0;\"></div><div style=\"position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:0 0 0 4px;\"></div><div style=\"position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 0 4px 0;\"></div></div>`;\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = \"position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;\";\r\n header.innerHTML = `<div style=\"color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;\">Scan Your ID Document</div><div style=\"color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;\">Fit your document inside the frame.<br>Make sure all text and corners are visible.</div>`;\r\n const bottomPanel = document.createElement(\"div\");\r\n bottomPanel.style.cssText = \"position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px;\";\r\n bottomPanel.innerHTML = `<div style=\"font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;\">\uD83D\uDCA1 Good lighting \u00B7 No glare \u00B7 All 4 corners visible</div><button id=\"sc-capture-doc-btn\" style=\"width:100%;padding:12px;border-radius:12px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;\">Capture Document</button><label style=\"width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;\"><span>\uD83D\uDCC1</span><span>Upload from gallery instead</span><input id=\"sc-upload-doc-input\" type=\"file\" accept=\"image/*\" style=\"display:none;\" /></label>`;\r\n docRoot.appendChild(docVideo); docRoot.appendChild(guideOverlay); docRoot.appendChild(header); docRoot.appendChild(bottomPanel);\r\n container.appendChild(docRoot);\r\n docVideo.play().catch(() => {});\r\n const cleanup = () => { try { docRoot.remove(); } catch(_){} this.docCaptureRoot = null; };\r\n const captureBtn = bottomPanel.querySelector(\"#sc-capture-doc-btn\") as HTMLButtonElement;\r\n if (captureBtn) {\r\n captureBtn.addEventListener(\"click\", () => {\r\n try {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = docVideo.videoWidth || 1280; canvas.height = docVideo.videoHeight || 720;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas context unavailable\")); return; }\r\n ctx.drawImage(docVideo, 0, 0);\r\n canvas.toBlob((blob) => { if (blob) { cleanup(); resolve(blob); } else { reject(new Error(\"Failed to capture document image\")); } }, \"image/jpeg\", 0.92);\r\n } catch (err) { reject(err); }\r\n });\r\n }\r\n const uploadInput = bottomPanel.querySelector(\"#sc-upload-doc-input\") as HTMLInputElement;\r\n if (uploadInput) { uploadInput.addEventListener(\"change\", () => { const file = uploadInput.files?.[0]; if (file) { cleanup(); resolve(file); } }); }\r\n });\r\n }\r\n\r\n unmount(): void {\r\n this.stopTimer();\r\n try { this.docCaptureRoot?.remove(); } catch(_){} this.docCaptureRoot = null;\r\n try { this.root?.remove(); } catch(_){}\r\n this.root = null; this.videoEl = null; this.instructionEl = null;\r\n this.stepsEl = null; this.progressBarEl = null; this.confidenceRingEl = null;\r\n this.timerEl = null; this.overlayEl = null; this.actionCueEl = null;\r\n }\r\n\r\n private startTimer(seconds: number): void {\r\n let remaining = seconds;\r\n const update = () => {\r\n if (!this.timerEl) return;\r\n const m = Math.floor(remaining / 60);\r\n const s = remaining % 60;\r\n this.timerEl.textContent = `${m > 0 ? `${m}:${String(s).padStart(2, \"0\")}` : `${s}s`} remaining`;\r\n if (remaining <= 5) this.timerEl.style.color = \"#ef4444\";\r\n };\r\n update();\r\n this.timerInterval = setInterval(() => { remaining--; update(); if (remaining <= 0 && this.timerInterval) { clearInterval(this.timerInterval); } }, 1000);\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const labels: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head to the side\",\r\n TURN_RIGHT: \"Turn your head to the side\",\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return labels[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n} from \"../../types/liveness\";\r\nimport { collectDeviceMetadata } from \"../../utils/device\";\r\nimport { DEFAULT_CHALLENGE_ACTIONS } from \"../../utils/constants\";\r\nimport { CameraManager } from \"../../camera/CameraManager\";\r\nimport { VideoRecorder } from \"../../camera/VideoRecorder\";\r\nimport { FaceDetectorEngine } from \"../../camera/FaceDetector\";\r\nimport { ActionDetector } from \"../../camera/ActionDetector\";\r\nimport { LivenessUI } from \"./LivenessUI\";\r\n\r\n/**\r\n * Liveness module \u2014 3-step flow aligned with Adhere backend.\r\n *\r\n * Flow:\r\n * Step 1: liveness.create() \u2192 POST /v1/sdk/liveness/create/ (multipart)\r\n * Step 2: [camera runs, user performs challenge actions]\r\n * Step 3: liveness.submit() \u2192 POST /v1/sdk/liveness/submit/ (multipart)\r\n *\r\n * After submit, the backend returns status: \"processing\".\r\n * Final results are delivered via webhook (liveness.completed event).\r\n */\r\nexport class LivenessModule {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Step 1: Create a liveness challenge entry.\r\n *\r\n * POST /v1/sdk/liveness/create/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n */\r\n async create(params: LivenessCreateRequest): Promise<LivenessCreateResponse> {\r\n const formData = new FormData();\r\n // Backend LivenessEntry.identifier has max_length=20 and is required (non-blank).\r\n // For data verification W10 passes \"\" \u2014 fall back to a timestamp-based stub so\r\n // the backend never receives a blank required field and returns a 400.\r\n const rawIdentifier = params.identifier || `ID-${Date.now()}`;\r\n const safeIdentifier = rawIdentifier.length > 20\r\n ? rawIdentifier.slice(0, 20)\r\n : rawIdentifier;\r\n formData.append(\"identifier\", safeIdentifier);\r\n formData.append(\"identifier_type\", params.identifier_type);\r\n formData.append(\"country\", params.country);\r\n formData.append(\r\n \"challenge_actions\",\r\n JSON.stringify(params.challenge_actions)\r\n );\r\n if (params.autoshot_file) {\r\n formData.append(\"autoshot\", params.autoshot_file, \"autoshot.jpg\");\r\n }\r\n \r\n // Handle document upload - support both legacy and new front/back fields\r\n if (params.document) {\r\n formData.append(\"document\", params.document, \"document.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.document_front) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.document_front, \"document_front.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.id_file) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.id_file, \"id_document.jpg\");\r\n }\r\n \r\n if (params.identity_check) {\r\n formData.append(\"identity_check\", String(params.identity_check));\r\n }\r\n if (params.snapshot_file) {\r\n formData.append(\"snapshot\", params.snapshot_file, \"snapshot.jpg\");\r\n }\r\n if (params.device_type) {\r\n formData.append(\"device_type\", params.device_type);\r\n }\r\n if (params.os_name) {\r\n formData.append(\"os_name\", params.os_name);\r\n }\r\n if (params.browser_timezone) {\r\n formData.append(\"browser_timezone\", params.browser_timezone);\r\n }\r\n if (params.fingerprint_id) {\r\n formData.append(\"fingerprint_id\", params.fingerprint_id);\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessCreateResponse>(\r\n \"/v1/sdk/liveness/create/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Step 3: Submit liveness video recording.\r\n *\r\n * POST /v1/sdk/liveness/submit/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n *\r\n * Note: After submission, the session is revoked (single-use).\r\n * The backend returns status: \"processing\" \u2014 results come via webhook.\r\n */\r\n async submit(\r\n entryId: number,\r\n videoBlob: Blob,\r\n snapshotBlob: Blob,\r\n autoshotBlob?: Blob,\r\n videoDurationSeconds?: number,\r\n videoSizeBytes?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const formData = new FormData();\r\n formData.append(\"entry\", String(entryId));\r\n formData.append(\"video\", videoBlob, \"liveness.webm\");\r\n formData.append(\"snapshot\", snapshotBlob, \"snapshot.jpg\");\r\n if (autoshotBlob) {\r\n formData.append(\"autoshot\", autoshotBlob, \"autoshot.jpg\");\r\n }\r\n if (videoDurationSeconds !== undefined) {\r\n formData.append(\"video_duration_seconds\", String(videoDurationSeconds));\r\n }\r\n if (videoSizeBytes !== undefined) {\r\n formData.append(\"video_size_bytes\", String(videoSizeBytes));\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Poll the public SDK status endpoint for the final verification result.\r\n * Safe to call after the session has been revoked (no auth required).\r\n *\r\n * GET /v1/sdk/liveness/<entryId>/sdk-result/\r\n */\r\n async pollResult(entryId: number): Promise<{\r\n id: number;\r\n status: string;\r\n failure_reason: string | null;\r\n completed_at: string | null;\r\n }> {\r\n return (this.http as any).publicGet(`/v1/sdk/liveness/${entryId}/sdk-result/`);\r\n }\r\n\r\n /**\r\n * Full liveness check \u2014 orchestrates the entire flow:\r\n *\r\n * 1. Take autoshot selfie from camera\r\n * 2. Create liveness entry on backend (with challenge actions + selfie + optional doc)\r\n * 3. Run action detection loop (camera + MediaPipe)\r\n * 4. Record video (document/liveness flows) OR skip recording (data verification)\r\n * 5. Submit to backend and return response (status: \"processing\")\r\n *\r\n * For data_verification the backend uses COMPARISON mode (autoshot vs govt DB photo)\r\n * so video recording is unnecessary \u2014 we skip it to save bandwidth and latency.\r\n *\r\n * @param container - DOM element to mount the liveness UI into\r\n * @param params - identifier info and optional document image\r\n * @param actions - override challenge actions (default: BLINK, TURN_HEAD, OPEN_MOUTH)\r\n * @param existingEntryId - reuse an already-created LivenessEntry (avoids double charge)\r\n */\r\n async startCheck(\r\n container: HTMLElement,\r\n params: {\r\n identifier: string;\r\n identifier_type: string;\r\n country: string;\r\n id_file?: File | Blob;\r\n document?: File | Blob;\r\n document_front?: File | Blob;\r\n document_back?: File | Blob;\r\n identity_check?: number;\r\n verification_type?: \"data_verification\" | \"document_verification\" | \"liveness_only\";\r\n // B4: pre-warmed camera stream from the confirmation screen \u2014 if provided\r\n // camera.open() is skipped and this stream is used directly, eliminating\r\n // the 1\u20133s camera init delay when the user taps \"Yes, continue\".\r\n prewarmedStream?: MediaStream | null;\r\n },\r\n actions?: ChallengeAction[],\r\n existingEntryId?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n // Data verification: backend always uses COMPARISON mode (autoshot vs govt photo).\r\n // Video recording adds ~2\u20134 s of latency and bandwidth for zero benefit here.\r\n const isDataVerification =\r\n params.verification_type === \"data_verification\" ||\r\n (!params.document && !params.document_front && !params.id_file && !!params.identity_check);\r\n const skipVideo = isDataVerification;\r\n const camera = new CameraManager();\r\n const recorder = new VideoRecorder();\r\n const faceEngine = new FaceDetectorEngine();\r\n const ui = new LivenessUI();\r\n\r\n // Tracks whether cleanup has already been called (so the finally block\r\n // doesn't double-destroy when retry takes over).\r\n let cleanedUp = false;\r\n const cleanup = () => {\r\n if (cleanedUp) return;\r\n cleanedUp = true;\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n };\r\n\r\n try {\r\n // 1. Open camera \u2014 reuse pre-warmed stream if available (B4)\r\n let stream: MediaStream;\r\n if (params.prewarmedStream && params.prewarmedStream.active) {\r\n // Stream already open from confirmation screen \u2014 skip getUserMedia delay\r\n stream = params.prewarmedStream;\r\n } else {\r\n try {\r\n stream = await camera.open();\r\n } catch (camErr: any) {\r\n if (camErr.name === \"NotAllowedError\" || camErr.name === \"PermissionDeniedError\") {\r\n throw new Error(\"Camera access denied. Please allow camera permission in your browser settings and try again.\");\r\n }\r\n if (camErr.name === \"NotFoundError\" || camErr.name === \"DevicesNotFoundError\") {\r\n throw new Error(\"No camera found. Please connect a camera and try again.\");\r\n }\r\n throw new Error(`Camera error: ${camErr.message || \"Unable to access camera\"}`);\r\n }\r\n }\r\n\r\n // 2. Document capture step \u2014 document_verification only, when no id_file pre-supplied\r\n let capturedDocBlob: Blob | undefined = params.id_file as Blob | undefined;\r\n if (!capturedDocBlob && params.verification_type === \"document_verification\") {\r\n capturedDocBlob = await ui.mountDocumentCapture(container, stream);\r\n }\r\n\r\n // 3. Create a temporary video element to capture autoshot\r\n const tempVideo = document.createElement(\"video\");\r\n tempVideo.srcObject = stream;\r\n tempVideo.muted = true;\r\n tempVideo.playsInline = true;\r\n await tempVideo.play();\r\n\r\n // Wait for face to be detected before capturing autoshot\r\n ui.mount(container, { actions: [], time_limit_seconds: 0, instruction: \"Centre your face in the oval\" });\r\n const uiVideo = ui.getVideoElement();\r\n if (uiVideo) {\r\n uiVideo.srcObject = stream;\r\n await uiVideo.play();\r\n } else {\r\n tempVideo.style.cssText = \"width:100%;border-radius:12px;transform:scaleX(-1);\";\r\n container.appendChild(tempVideo);\r\n }\r\n\r\n await faceEngine.init();\r\n ui.updateInstruction(\"Centre your face in the oval\");\r\n\r\n // Wait until face is stably centred.\r\n // Tolerant: allows up to 2 missed frames before resetting \u2014 avoids\r\n // flickering \"Move your face\" for a single dropped frame.\r\n const videoForDetection = uiVideo || tempVideo;\r\n await new Promise<void>((resolve) => {\r\n let attempts = 0;\r\n let stableFrames = 0;\r\n let missedFrames = 0;\r\n const STABLE_REQUIRED = 4; // increased from 2 \u2014 ensures face is properly locked before autoshot\r\n const MISS_TOLERANCE = 2; // allow up to 2 consecutive misses before reset\r\n const MAX_WAIT_MS = 8000;\r\n const startTime = performance.now();\r\n\r\n const checkFace = () => {\r\n if (performance.now() - startTime >= MAX_WAIT_MS) {\r\n resolve(); // proceed anyway after timeout\r\n return;\r\n }\r\n\r\n if (videoForDetection.readyState >= 2) {\r\n const detection = faceEngine.detect(videoForDetection, performance.now());\r\n if (detection.faceDetected) {\r\n stableFrames++;\r\n missedFrames = 0;\r\n ui.updateInstruction(\"Centre your face in the oval\");\r\n if (stableFrames >= STABLE_REQUIRED) {\r\n resolve();\r\n return;\r\n }\r\n } else {\r\n missedFrames++;\r\n if (missedFrames > MISS_TOLERANCE) {\r\n stableFrames = 0; // full reset only after sustained loss\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n }\r\n }\r\n }\r\n\r\n requestAnimationFrame(checkFace);\r\n };\r\n requestAnimationFrame(checkFace);\r\n });\r\n\r\n ui.updateInstruction(\"Hold still...\");\r\n // Settle delay \u2014 gives camera AE/AF time to lock before challenge starts\r\n await new Promise((r) => setTimeout(r, 500));\r\n\r\n // W9: Autoshot captured AFTER challenge (moved from before create).\r\n // We take a placeholder-size stub here only to satisfy liveness.create()\r\n // which currently expects autoshot_file \u2014 the real autoshot is captured\r\n // after all challenge actions complete and is sent on submit instead.\r\n // The backend ignores the create-time autoshot for face comparison;\r\n // only the submit-time autoshot is used. Pass undefined here and\r\n // capture the real one post-challenge below.\r\n\r\n // 4. Create liveness entry on backend (skip if retrying with existing entry)\r\n const challengeActions = actions || [...DEFAULT_CHALLENGE_ACTIONS];\r\n let entry: LivenessCreateResponse;\r\n\r\n if (existingEntryId) {\r\n entry = { id: existingEntryId, challenge_actions: challengeActions, status: \"pending\", client_id: \"\", expires_at: null };\r\n } else {\r\n const deviceMeta = collectDeviceMetadata();\r\n entry = await this.create({\r\n identifier: params.identifier,\r\n identifier_type: params.identifier_type,\r\n country: params.country,\r\n challenge_actions: challengeActions,\r\n // W9: No autoshot at create time \u2014 real one captured post-challenge\r\n autoshot_file: undefined,\r\n document: params.document || params.document_front || params.id_file || capturedDocBlob,\r\n document_back: params.document_back,\r\n identity_check: params.identity_check,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n }\r\n\r\n tempVideo.pause();\r\n // B3: Remove tempVideo from DOM to release the camera light indicator\r\n // on devices that show it while a video element holds a stream reference.\r\n tempVideo.srcObject = null;\r\n tempVideo.remove();\r\n\r\n // 5. Mount UI with challenge actions from backend\r\n const uiChallenge = {\r\n actions: entry.challenge_actions,\r\n time_limit_seconds: 45,\r\n instruction: \"Complete each action below to verify it's you\",\r\n // Use backend-provided instructions if available (mirror-corrected),\r\n // otherwise fall back to the frontend labels.\r\n instructions: entry.challenge_instructions,\r\n };\r\n\r\n // Re-mount UI with challenge actions (face engine already initialized)\r\n ui.unmount();\r\n const videoEl = ui.mount(container, uiChallenge);\r\n videoEl.srcObject = stream;\r\n await videoEl.play();\r\n\r\n // 7. Start recording \u2014 wait for camera AE/AF to re-stabilise after\r\n // re-mounting the video element. Without this delay the first ~1s of\r\n // the video is blurry (camera re-adapts exposure) and SmartComply's\r\n // frame extractor picks a blurry keyframe \u2192 IMAGE_TOO_BLURRY rejection.\r\n await new Promise((r) => setTimeout(r, 1000));\r\n if (!skipVideo) {\r\n recorder.start(stream);\r\n }\r\n ui.updateInstruction(uiChallenge.instruction);\r\n\r\n // 8. Run detection loop (sequential \u2014 one action at a time)\r\n const actionDetector = new ActionDetector(entry.challenge_actions);\r\n let lastAction: string | null = null;\r\n let pauseUntil = 0;\r\n let pendingNextAction: string | null = null;\r\n let pendingNextLabel: string | null = null;\r\n\r\n const detectionResult = await new Promise<\"completed\" | \"timeout\">(\r\n (resolve) => {\r\n let animFrameId: number;\r\n\r\n const timeout = setTimeout(() => {\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"timeout\");\r\n }, uiChallenge.time_limit_seconds * 1000);\r\n\r\n const getLabel = (action: string): string =>\r\n (uiChallenge as any).instructions?.[action] || this.describeAction(action);\r\n\r\n const detectLoop = () => {\r\n const now = performance.now();\r\n\r\n // P3: During the brief inter-action pause, schedule with setTimeout\r\n // instead of rAF \u2014 avoids burning CPU at 60fps while nothing is processed.\r\n const remaining = pauseUntil - now;\r\n if (remaining > 0) {\r\n setTimeout(() => { animFrameId = requestAnimationFrame(detectLoop); }, remaining);\r\n return;\r\n }\r\n if (pendingNextAction) {\r\n lastAction = pendingNextAction;\r\n if (pendingNextLabel) ui.updateInstruction(pendingNextLabel);\r\n pendingNextAction = null;\r\n pendingNextLabel = null;\r\n }\r\n\r\n if (videoEl.readyState >= 2) {\r\n const detection = faceEngine.detect(\r\n videoEl,\r\n performance.now()\r\n );\r\n\r\n const states = actionDetector.check(detection);\r\n ui.updateActions(states);\r\n\r\n const current = actionDetector.getCurrentAction();\r\n\r\n if (!detection.faceDetected) {\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n } else if (current) {\r\n if (current !== lastAction) {\r\n if (lastAction !== null) {\r\n // Action completed \u2014 give user ~600ms to see the next instruction\r\n pauseUntil = now + 600;\r\n pendingNextAction = current;\r\n pendingNextLabel = getLabel(current);\r\n ui.updateInstruction(`Great! ${pendingNextLabel}`);\r\n animFrameId = requestAnimationFrame(detectLoop);\r\n return;\r\n }\r\n lastAction = current;\r\n ui.updateInstruction(getLabel(current));\r\n }\r\n } else {\r\n ui.updateInstruction(\"All actions completed! \u2713\");\r\n }\r\n\r\n if (actionDetector.allCompleted()) {\r\n clearTimeout(timeout);\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"completed\");\r\n return;\r\n }\r\n }\r\n\r\n animFrameId = requestAnimationFrame(detectLoop);\r\n };\r\n\r\n detectLoop();\r\n }\r\n );\r\n\r\n // \u2500\u2500 On timeout: show retry screen, clean up, restart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (detectionResult === \"timeout\") {\r\n // IMPORTANT: mark cleanedUp=true BEFORE returning the new Promise so\r\n // the outer `finally` block does NOT call cleanup() immediately \u2014\r\n // which would destroy the UI before the user sees the timeout screen.\r\n cleanedUp = true;\r\n\r\n recorder.stop().catch(() => { }); // discard partial recording\r\n\r\n return new Promise<LivenessSubmitResponse>((resolveRetry, rejectRetry) => {\r\n ui.showTimeout(() => {\r\n // User clicked \"Try Again\" \u2014 now it is safe to destroy this attempt\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n\r\n // Restart liveness with same entry ID to prevent duplicate charges (D1)\r\n // Pass capturedDocBlob forward so document scan step is not repeated.\r\n // Forward verification_type so skipVideo is re-derived correctly on retry.\r\n this.startCheck(\r\n container,\r\n { ...params, id_file: capturedDocBlob },\r\n actions,\r\n entry.id\r\n )\r\n .then(resolveRetry)\r\n .catch(rejectRetry);\r\n });\r\n // showTimeout waits for the user to click \u2014 the promise stays pending.\r\n });\r\n }\r\n\r\n // \u2500\u2500 On completion: stop recording (if applicable), submit \u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n // W9: Capture autoshot AFTER challenge actions complete.\r\n // Wait for neutral face pose before capturing.\r\n ui.updateInstruction(\"Almost done \u2014 hold still...\");\r\n await new Promise((r) => setTimeout(r, 800));\r\n\r\n // Capture autoshot (real selfie) \u2014 post-challenge, neutral pose, camera AE locked\r\n const autoshotBlob = await this.captureFrame(videoEl);\r\n if (!autoshotBlob || autoshotBlob.size === 0) {\r\n throw new Error(\"Failed to capture selfie. Please ensure your face is visible and try again.\");\r\n }\r\n\r\n // Capture a snapshot frame as well (same timing, slightly different use)\r\n const snapshotBlob = await this.captureFrame(videoEl);\r\n\r\n // 9. Stop recording (no-op / discard when skipVideo=true)\r\n let videoBlob: Blob;\r\n let durationSeconds: number | undefined;\r\n if (skipVideo) {\r\n // Data verification: backend uses COMPARISON mode (autoshot only).\r\n // Use the autoshot as a 1-byte stand-in so the submit serializer\r\n // gets a valid file \u2014 backend strips it in favour of autoshot anyway.\r\n recorder.stop().catch(() => {}); // discard partial recording\r\n videoBlob = autoshotBlob; // reuse autoshot \u2014 ~5\u201315 KB vs ~500 KB video\r\n durationSeconds = undefined;\r\n } else {\r\n const recorded = await recorder.stop();\r\n videoBlob = recorded.blob;\r\n durationSeconds = recorded.durationSeconds;\r\n }\r\n\r\n // 10. Submit to backend \u2014 always include autoshot so document-flow\r\n // entries (which bypassed create() via existingEntryId) still get it.\r\n const submitResult = await this.submit(\r\n entry.id,\r\n videoBlob,\r\n snapshotBlob,\r\n autoshotBlob,\r\n durationSeconds,\r\n videoBlob.size\r\n );\r\n\r\n // 11. Show success overlay briefly before the flow advances\r\n await ui.showResult(\r\n submitResult.status === \"failed\" ? \"failed\" : \"processing\",\r\n submitResult.id\r\n );\r\n\r\n return submitResult;\r\n\r\n } finally {\r\n cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Capture a single sharp frame from a video element as a JPEG Blob.\r\n * Retries up to maxAttempts times (300 ms apart) if the Laplacian blur\r\n * score is below threshold, then falls back to the best frame captured.\r\n *\r\n * Threshold calibration:\r\n * The server rejects images with OpenCV Laplacian variance < 80.\r\n * This SDK uses sum-of-squared Laplacian (different normalisation) \u2014\r\n * empirically ~100 here corresponds to ~80 server-side. We aim for 120\r\n * to give a comfortable safety margin.\r\n */\r\n private async captureFrame(\r\n video: HTMLVideoElement,\r\n maxAttempts = 5\r\n ): Promise<Blob> {\r\n const MIN_BLUR_SCORE = 120; // calibrated to server threshold of 80 (different scale)\r\n const MIN_BRIGHTNESS = 40; // 0-255 \u2014 below this = too dark for face comparison\r\n const MAX_BRIGHTNESS = 220; // above this = too bright/overexposed\r\n const RETRY_DELAY_MS = 200;\r\n let bestBlob: Blob | null = null;\r\n let bestScore = -1;\r\n\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Failed to get canvas context\");\r\n ctx.drawImage(video, 0, 0);\r\n\r\n const blurScore = this._computeBlurScore(canvas);\r\n const brightness = this._computeBrightness(canvas);\r\n const brightnessOk = brightness >= MIN_BRIGHTNESS && brightness <= MAX_BRIGHTNESS;\r\n\r\n // Combined quality score \u2014 blur is primary, brightness gates it\r\n const qualityScore = brightnessOk ? blurScore : 0;\r\n\r\n const blob = await new Promise<Blob | null>((res) =>\r\n canvas.toBlob((b) => res(b), \"image/jpeg\", 0.92)\r\n );\r\n\r\n if (blob && qualityScore > bestScore) {\r\n bestBlob = blob;\r\n bestScore = qualityScore;\r\n }\r\n\r\n // Stop early if both blur and brightness are acceptable\r\n if (blurScore >= MIN_BLUR_SCORE && brightnessOk) break;\r\n\r\n if (attempt < maxAttempts - 1) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n }\r\n }\r\n\r\n if (bestBlob) return bestBlob;\r\n throw new Error(\"Failed to capture frame\");\r\n }\r\n\r\n /**\r\n * Compute average brightness (0\u2013255) of the centre-cropped frame.\r\n * Used to reject frames that are too dark or overexposed before sending\r\n * to face comparison \u2014 server rejects IMAGE_TOO_DARK below ~40 luminance.\r\n */\r\n private _computeBrightness(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 128;\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n const { data } = ctx.getImageData(sx, sy, sw, sh);\r\n let total = 0;\r\n const pixels = sw * sh;\r\n for (let i = 0; i < pixels; i++) {\r\n total += 0.299 * data[i * 4] + 0.587 * data[i * 4 + 1] + 0.114 * data[i * 4 + 2];\r\n }\r\n return total / pixels;\r\n }\r\n\r\n /**\r\n * Sum-of-squared Laplacian blur metric on a centre-cropped region (320\u00D7240 max).\r\n * Higher score = sharper image.\r\n *\r\n * NOTE: This is sum-of-squares, NOT Laplacian variance (which OpenCV uses).\r\n * The two scales differ \u2014 empirically, a score of ~120 here corresponds to\r\n * ~80 on the server side (OpenCV cv2.Laplacian().var()). Keep MIN_BLUR_SCORE\r\n * in captureFrame() calibrated against this.\r\n */\r\n private _computeBlurScore(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 0;\r\n\r\n // Sample a 320\u00D7240 centre crop for performance\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n\r\n const { data, width, height } = ctx.getImageData(sx, sy, sw, sh);\r\n\r\n // Convert to greyscale\r\n const gray = new Float32Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n gray[i] =\r\n 0.299 * data[i * 4] +\r\n 0.587 * data[i * 4 + 1] +\r\n 0.114 * data[i * 4 + 2];\r\n }\r\n\r\n // Laplacian convolution [0,1,0 / 1,-4,1 / 0,1,0] \u2014 sum of squared responses\r\n let sum = 0;\r\n let n = 0;\r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const l =\r\n gray[(y - 1) * width + x] +\r\n gray[(y + 1) * width + x] +\r\n gray[y * width + (x - 1)] +\r\n gray[y * width + (x + 1)] -\r\n 4 * gray[y * width + x];\r\n sum += l * l;\r\n n++;\r\n }\r\n }\r\n return n > 0 ? sum / n : 0;\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const descriptions: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head to the side\",\r\n TURN_RIGHT: \"Turn your head to the side\",\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return descriptions[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { SDKConfig } from \"./Config\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { OnboardingModule } from \"../modules/onboarding/onboarding\";\r\nimport { LivenessModule } from \"../modules/liveness/liveness\";\r\nimport {\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"../types/onboarding\";\r\n\r\n/**\r\n * SmartComply SDK \u2014 main entry point.\r\n *\r\n * Usage:\r\n * const sdk = new SmartComply({ apiKey: \"pk_...\", clientId: \"uuid-...\", environment: \"sandbox\" });\r\n * const session = await sdk.createSession();\r\n * const config = await sdk.initializeConfig();\r\n * // ... use sdk.onboarding and sdk.liveness modules\r\n */\r\nexport class SmartComply {\r\n private http: HttpClient;\r\n private clientId: string;\r\n private _sessionToken: string | null = null;\r\n private _sessionExpiresAt: string | null = null;\r\n private _sdkConfig: SDKInitConfig | null = null;\r\n\r\n public onboarding: OnboardingModule;\r\n public liveness: LivenessModule;\r\n\r\n constructor(config: SDKConfig) {\r\n if (!config.apiKey) {\r\n throw new Error(\"SmartComply: apiKey is required\");\r\n }\r\n if (!config.clientId) {\r\n throw new Error(\"SmartComply: clientId is required (UUID from your SDK config)\");\r\n }\r\n\r\n this.clientId = config.clientId;\r\n this.http = new HttpClient(config);\r\n\r\n this.onboarding = new OnboardingModule(this.http);\r\n this.liveness = new LivenessModule(this.http);\r\n }\r\n\r\n /** Current session token (null if not created yet) */\r\n get sessionToken(): string | null {\r\n return this._sessionToken;\r\n }\r\n\r\n /** Session expiration ISO timestamp */\r\n get sessionExpiresAt(): string | null {\r\n return this._sessionExpiresAt;\r\n }\r\n\r\n /** SDK config fetched from backend (null until initializeConfig() is called) */\r\n get sdkConfig(): SDKInitConfig | null {\r\n return this._sdkConfig;\r\n }\r\n\r\n /**\r\n * Create a new SDK session.\r\n *\r\n * POST /v1/session/create/\r\n * Auth: Authorization: Bearer <apiKey>\r\n * Body: { client_id: \"<uuid>\" }\r\n *\r\n * Returns: { token: \"...\", expires_at: \"...\" }\r\n */\r\n async createSession(): Promise<SessionResponse> {\r\n const response = await this.http.request<SessionResponse>(\r\n \"POST\",\r\n \"/v1/session/create/\",\r\n { client_id: this.clientId }\r\n );\r\n\r\n this._sessionToken = response.token;\r\n this._sessionExpiresAt = response.expires_at;\r\n\r\n // Set the session token on the HTTP client for subsequent requests\r\n this.http.setSessionToken(response.token);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetch SDK configuration from the backend.\r\n * Must be called after createSession().\r\n *\r\n * GET /v1/initialize/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }\r\n */\r\n async initializeConfig(): Promise<SDKInitConfig> {\r\n const config = await this.http.sessionRequest<SDKInitConfig>(\r\n \"GET\",\r\n \"/v1/initialize/\"\r\n );\r\n\r\n this._sdkConfig = config;\r\n return config;\r\n }\r\n}\r\n", "/**\r\n * Theme system for the SmartComply Flow widget.\r\n * Maps to backend's SDKConfig.THEME_CHOICES:\r\n * default, midnight_blue, sunset_gold, forest_emerald\r\n */\r\n\r\nexport interface ThemeColors {\r\n primary: string;\r\n primaryHover: string;\r\n primaryGlow: string;\r\n bg: string;\r\n cardBg: string;\r\n inputBg: string;\r\n text: string;\r\n textSecondary: string;\r\n textMuted: string;\r\n border: string;\r\n borderFocus: string;\r\n success: string;\r\n successBg: string;\r\n error: string;\r\n errorBg: string;\r\n warning: string;\r\n overlay: string;\r\n shimmer: string;\r\n shadow: string;\r\n isDark: boolean;\r\n}\r\n\r\nexport const THEMES: Record<string, ThemeColors> = {\r\n default: {\r\n primary: \"#3b82f6\",\r\n primaryHover: \"#2563eb\",\r\n primaryGlow: \"rgba(59, 130, 246, 0.25)\",\r\n bg: \"#ffffff\",\r\n cardBg: \"#f8fafc\",\r\n inputBg: \"#f1f5f9\",\r\n text: \"#0f172a\",\r\n textSecondary: \"#475569\",\r\n textMuted: \"#94a3b8\",\r\n border: \"#e2e8f0\",\r\n borderFocus: \"#3b82f6\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(15, 23, 42, 0.6)\",\r\n shimmer: \"rgba(59, 130, 246, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\r\n isDark: false,\r\n },\r\n\r\n midnight_blue: {\r\n primary: \"#60a5fa\",\r\n primaryHover: \"#93bbfd\",\r\n primaryGlow: \"rgba(96, 165, 250, 0.2)\",\r\n bg: \"#0b1120\",\r\n cardBg: \"#111d33\",\r\n inputBg: \"#162032\",\r\n text: \"#f1f5f9\",\r\n textSecondary: \"#94a3b8\",\r\n textMuted: \"#64748b\",\r\n border: \"#1e3a5f\",\r\n borderFocus: \"#60a5fa\",\r\n success: \"#4ade80\",\r\n successBg: \"rgba(74, 222, 128, 0.1)\",\r\n error: \"#f87171\",\r\n errorBg: \"rgba(248, 113, 113, 0.1)\",\r\n warning: \"#fbbf24\",\r\n overlay: \"rgba(0, 0, 0, 0.75)\",\r\n shimmer: \"rgba(96, 165, 250, 0.06)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(96, 165, 250, 0.1)\",\r\n isDark: true,\r\n },\r\n\r\n sunset_gold: {\r\n primary: \"#f59e0b\",\r\n primaryHover: \"#d97706\",\r\n primaryGlow: \"rgba(245, 158, 11, 0.2)\",\r\n bg: \"#fffdf7\",\r\n cardBg: \"#fef9ee\",\r\n inputBg: \"#fef3c7\",\r\n text: \"#1c1917\",\r\n textSecondary: \"#57534e\",\r\n textMuted: \"#a8a29e\",\r\n border: \"#fed7aa\",\r\n borderFocus: \"#f59e0b\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(28, 25, 23, 0.6)\",\r\n shimmer: \"rgba(245, 158, 11, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.1)\",\r\n isDark: false,\r\n },\r\n\r\n forest_emerald: {\r\n primary: \"#10b981\",\r\n primaryHover: \"#059669\",\r\n primaryGlow: \"rgba(16, 185, 129, 0.2)\",\r\n bg: \"#f7fdf9\",\r\n cardBg: \"#ecfdf5\",\r\n inputBg: \"#d1fae5\",\r\n text: \"#1a1a2e\",\r\n textSecondary: \"#4b5563\",\r\n textMuted: \"#9ca3af\",\r\n border: \"#a7f3d0\",\r\n borderFocus: \"#10b981\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(26, 26, 46, 0.6)\",\r\n shimmer: \"rgba(16, 185, 129, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(16, 185, 129, 0.1)\",\r\n isDark: false,\r\n },\r\n};\r\n\r\n/**\r\n * Return a theme by name, with an optional hex override for client branding.\r\n * If hex is provided, the named theme is used as the base and all primary\r\n * colour slots are replaced with the client's brand hex \u2014 so buttons, borders,\r\n * focus rings, and glows all use the client's colour instead of the default.\r\n */\r\nexport function getTheme(name: string, hex?: string | null): ThemeColors {\r\n const base = { ...(THEMES[name] || THEMES.default) };\r\n if (hex && /^#[0-9A-Fa-f]{6}$/.test(hex.trim())) {\r\n const h = hex.trim();\r\n // Derive a slightly darker hover shade by reducing lightness ~10%\r\n const hover = _darkenHex(h, 15);\r\n base.primary = h;\r\n base.primaryHover = hover;\r\n base.primaryGlow = `${h}40`; // 25% opacity\r\n base.borderFocus = h;\r\n base.shimmer = `${h}14`; // 8% opacity\r\n }\r\n return base;\r\n}\r\n\r\n/** Darken a #rrggbb hex colour by subtracting `amount` from each channel. */\r\nfunction _darkenHex(hex: string, amount: number): string {\r\n const n = parseInt(hex.slice(1), 16);\r\n const r = Math.max(0, (n >> 16) - amount);\r\n const g = Math.max(0, ((n >> 8) & 0xff) - amount);\r\n const b = Math.max(0, (n & 0xff) - amount);\r\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, \"0\")}`;\r\n}\r\n", "/**\r\n * Image Quality Assessment for Document Capture\r\n * Client-side quality checks before sending to backend\r\n */\r\n\r\nexport interface QualityMetrics {\r\n sharpness: number;\r\n contrast: number;\r\n brightness: number;\r\n isBlurry: boolean;\r\n hasGlare: boolean;\r\n overallScore: number;\r\n}\r\n\r\nexport interface QualityFeedback {\r\n isValid: boolean;\r\n message: string;\r\n recommendations: string[];\r\n quality: QualityMetrics;\r\n}\r\n\r\n/**\r\n * Calculate image sharpness using Laplacian variance\r\n * Higher values = sharper image\r\n */\r\nexport function calculateSharpness(imageData: ImageData): number {\r\n const { width, height, data } = imageData;\r\n \r\n // Convert to grayscale\r\n const gray = new Uint8Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n const idx = i * 4;\r\n gray[i] = Math.round(0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2]);\r\n }\r\n \r\n // Apply Laplacian kernel\r\n const laplacian = new Float32Array(width * height);\r\n let sum = 0;\r\n let sumSq = 0;\r\n let count = 0;\r\n \r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const idx = y * width + x;\r\n \r\n // Laplacian kernel\r\n const val = \r\n -1 * gray[idx - width] +\r\n -1 * gray[idx - 1] +\r\n 4 * gray[idx] +\r\n -1 * gray[idx + 1] +\r\n -1 * gray[idx + width];\r\n \r\n laplacian[idx] = val;\r\n sum += val;\r\n sumSq += val * val;\r\n count++;\r\n }\r\n }\r\n \r\n // Calculate variance\r\n const mean = sum / count;\r\n const variance = (sumSq / count) - (mean * mean);\r\n \r\n return Math.abs(variance);\r\n}\r\n\r\n/**\r\n * Detect glare (overexposed areas)\r\n */\r\nexport function detectGlare(imageData: ImageData, threshold: number = 250): number {\r\n const { data } = imageData;\r\n let overexposed = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const brightness = (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n if (brightness > threshold) {\r\n overexposed++;\r\n }\r\n }\r\n \r\n return overexposed / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Calculate contrast (standard deviation)\r\n */\r\nexport function calculateContrast(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n let sumSq = 0;\r\n const pixelCount = data.length / 4;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const gray = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\r\n sum += gray;\r\n sumSq += gray * gray;\r\n }\r\n \r\n const mean = sum / pixelCount;\r\n const variance = (sumSq / pixelCount) - (mean * mean);\r\n \r\n return Math.sqrt(variance);\r\n}\r\n\r\n/**\r\n * Calculate brightness (mean pixel value)\r\n */\r\nexport function calculateBrightness(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n sum += (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n }\r\n \r\n return sum / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Full quality assessment\r\n */\r\nexport function assessQuality(imageData: ImageData): QualityFeedback {\r\n const sharpness = calculateSharpness(imageData);\r\n const glare = detectGlare(imageData);\r\n const contrast = calculateContrast(imageData);\r\n const brightness = calculateBrightness(imageData);\r\n \r\n const isBlurry = sharpness < 80;\r\n const hasGlare = glare > 0.15;\r\n const isTooDark = brightness < 50;\r\n const isTooBright = brightness > 200;\r\n const lowContrast = contrast < 30;\r\n \r\n // Calculate overall score (0-100)\r\n let score = 100;\r\n if (isBlurry) score -= 40;\r\n if (hasGlare) score -= 25;\r\n if (isTooDark) score -= 20;\r\n if (isTooBright) score -= 20;\r\n if (lowContrast) score -= 15;\r\n \r\n const metrics: QualityMetrics = {\r\n sharpness: Math.round(sharpness * 10) / 10,\r\n contrast: Math.round(contrast * 10) / 10,\r\n brightness: Math.round(brightness * 10) / 10,\r\n isBlurry,\r\n hasGlare,\r\n overallScore: Math.max(0, score),\r\n };\r\n \r\n // Generate feedback\r\n const issues: string[] = [];\r\n const recommendations: string[] = [];\r\n \r\n if (isBlurry) {\r\n issues.push(\"Too blurry\");\r\n recommendations.push(\"Hold camera steady\");\r\n recommendations.push(\"Ensure good lighting\");\r\n }\r\n \r\n if (hasGlare) {\r\n issues.push(\"Too much glare\");\r\n recommendations.push(\"Avoid direct light on document\");\r\n recommendations.push(\"Tilt document slightly\");\r\n }\r\n \r\n if (isTooDark) {\r\n issues.push(\"Too dark\");\r\n recommendations.push(\"Move to brighter area\");\r\n recommendations.push(\"Turn on more lights\");\r\n }\r\n \r\n if (isTooBright) {\r\n issues.push(\"Too bright\");\r\n recommendations.push(\"Reduce lighting\");\r\n recommendations.push(\"Move away from direct sun\");\r\n }\r\n \r\n if (lowContrast) {\r\n issues.push(\"Low contrast\");\r\n recommendations.push(\"Ensure even lighting\");\r\n }\r\n \r\n const isValid = score >= 60;\r\n const message = issues.length > 0 \r\n ? issues.join(\", \")\r\n : \"Good quality\";\r\n \r\n return {\r\n isValid,\r\n message,\r\n recommendations: recommendations.slice(0, 3), // Max 3 recommendations\r\n quality: metrics,\r\n };\r\n}\r\n\r\n/**\r\n * Get quality color for UI feedback\r\n */\r\nexport function getQualityColor(score: number): string {\r\n if (score >= 80) return \"#22c55e\"; // Green\r\n if (score >= 60) return \"#eab308\"; // Yellow\r\n return \"#ef4444\"; // Red\r\n}\r\n\r\n/**\r\n * Get quality message for display\r\n */\r\nexport function getQualityMessage(score: number): string {\r\n if (score >= 80) return \"Excellent - Ready to capture\";\r\n if (score >= 60) return \"Good - Can capture\";\r\n if (score >= 40) return \"Fair - Improve if possible\";\r\n return \"Poor - Please adjust\";\r\n}\r\n", "import { ThemeColors } from \"./theme\";\r\nimport { assessQuality, QualityFeedback } from \"../utils/ImageQuality\";\r\n\r\n/**\r\n * Document capture UI \u2014 camera-based or file-upload for ID documents.\r\n *\r\n * Supports:\r\n * - Camera capture (rear camera preferred on mobile)\r\n * - File upload fallback\r\n * - Preview with retake/confirm\r\n * - Front and back document capture for documents requiring both sides\r\n */\r\nexport interface DocumentCaptureResult {\r\n front: Blob;\r\n back?: Blob; // Optional for documents that don't require back side\r\n}\r\n\r\nexport class DocumentCapture {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private stream: MediaStream | null = null;\r\n private resolveCapture: ((result: DocumentCaptureResult) => void) | null = null;\r\n private rejectCapture: ((err: Error) => void) | null = null;\r\n private frontBlob: Blob | null = null;\r\n private backBlob: Blob | null = null;\r\n private currentSide: 'front' | 'back' = 'front';\r\n private requiresBackOverride: boolean | undefined = undefined;\r\n\r\n /**\r\n * Mount the document capture UI and return a promise that resolves\r\n * with the captured document image(s).\r\n */\r\n capture(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string,\r\n requiresBack?: boolean\r\n ): Promise<DocumentCaptureResult> {\r\n return new Promise((resolve, reject) => {\r\n // Validate input parameters\r\n if (!container) {\r\n reject(new Error(\"Container element is required\"));\r\n return;\r\n }\r\n if (!theme) {\r\n reject(new Error(\"Theme configuration is required\"));\r\n return;\r\n }\r\n if (!documentType || typeof documentType !== 'string') {\r\n reject(new Error(\"Document type is required and must be a string\"));\r\n return;\r\n }\r\n \r\n // Check if already capturing\r\n if (this.resolveCapture || this.rejectCapture) {\r\n reject(new Error(\"Document capture is already in progress\"));\r\n return;\r\n }\r\n\r\n this.resolveCapture = resolve;\r\n this.rejectCapture = reject;\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n this.requiresBackOverride = requiresBack;\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n // Stop any ongoing camera streams\r\n this.stopCamera();\r\n \r\n // Clean up DOM elements\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n \r\n // Clean up any pending promises\r\n if (this.rejectCapture) {\r\n this.rejectCapture(new Error(\"Document capture was cancelled\"));\r\n this.rejectCapture = null;\r\n }\r\n this.resolveCapture = null;\r\n \r\n // Clean up blob data\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n }\r\n\r\n private requiresBackSide(documentType: string): boolean {\r\n // Only request back-side capture for documents where the backend OCR\r\n // actually needs the reverse face. NIN cards are single-sided for OCR\r\n // purposes \u2014 do NOT include \"nin\" here.\r\n const type = documentType.toLowerCase();\r\n return type.includes(\"voter\") ||\r\n type.includes(\"driver\") ||\r\n type.includes(\"license\") ||\r\n type.includes(\"national id\") ||\r\n type.includes(\"national id card\") ||\r\n type.includes(\"ghana\");\r\n // Passport: back side is the machine-readable zone but OCR reads from front only.\r\n // NIN / NIN with face: front only needed.\r\n // Voter's card / Driver's license / National ID card: back required.\r\n }\r\n\r\n private shouldCaptureBackSide(documentType: string): boolean {\r\n // Prefer the backend-provided flag; fall back to local heuristics only when absent.\r\n return this.requiresBackOverride !== undefined\r\n ? this.requiresBackOverride\r\n : this.requiresBackSide(documentType);\r\n }\r\n\r\n private renderChoiceScreen(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n display:flex;flex-direction:column;gap:0;padding:0;width:100%;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n const docLabel = this.getDocumentLabel(documentType);\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const isCapturingFront = this.currentSide === 'front';\r\n const sideLabel = requiresBack\r\n ? (isCapturingFront ? ' \u2014 Front side' : ' \u2014 Back side')\r\n : '';\r\n\r\n // \u2500\u2500 TOP: compact header row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const headerRow = document.createElement(\"div\");\r\n headerRow.style.cssText = `\r\n display:flex;align-items:center;gap:14px;\r\n padding:16px 20px 14px;\r\n `;\r\n\r\n const iconBox = document.createElement(\"div\");\r\n iconBox.style.cssText = `\r\n width:48px;height:48px;border-radius:14px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:24px;\r\n background:${theme.primary}15;\r\n border:1.5px solid ${theme.primary}30;\r\n `;\r\n iconBox.textContent = this._docIcon(documentType);\r\n\r\n const titleBlock = document.createElement(\"div\");\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${theme.text};font-size:16px;font-weight:700;line-height:1.3;`;\r\n titleEl.textContent = `Capture your ${docLabel}`;\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${theme.textSecondary};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = requiresBack\r\n ? (isCapturingFront ? 'Step 1 of 2 \u2014 front side' : 'Step 2 of 2 \u2014 back side')\r\n : 'Choose how to provide your document';\r\n\r\n titleBlock.appendChild(titleEl);\r\n titleBlock.appendChild(subEl);\r\n headerRow.appendChild(iconBox);\r\n headerRow.appendChild(titleBlock);\r\n this.root.appendChild(headerRow);\r\n\r\n // \u2500\u2500 MIDDLE: side-by-side action buttons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:10px;\r\n padding:0 20px 14px;\r\n `;\r\n\r\n // Camera button\r\n const cameraBtn = document.createElement(\"button\");\r\n cameraBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.primary};color:#fff;\r\n border:none;border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n box-shadow:0 4px 14px ${theme.primary}30;\r\n `;\r\n cameraBtn.innerHTML = `<span style=\"font-size:26px;\">\uD83D\uDCF7</span><span>Take Photo</span><span style=\"font-size:10px;opacity:0.8;font-weight:500;\">Use camera</span>`;\r\n cameraBtn.addEventListener(\"mouseenter\", () => { cameraBtn.style.opacity = \"0.9\"; cameraBtn.style.transform = \"translateY(-1px)\"; });\r\n cameraBtn.addEventListener(\"mouseleave\", () => { cameraBtn.style.opacity = \"1\"; cameraBtn.style.transform = \"none\"; });\r\n cameraBtn.addEventListener(\"click\", () => {\r\n this.root!.innerHTML = \"\";\r\n this.renderCameraView(this.root!, theme, documentType);\r\n });\r\n\r\n // Upload button\r\n const uploadBtn = document.createElement(\"button\");\r\n uploadBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.cardBg || theme.inputBg};color:${theme.text};\r\n border:2px solid ${theme.border};border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n `;\r\n uploadBtn.innerHTML = `<span style=\"font-size:26px;\">\uD83D\uDDBC\uFE0F</span><span>From Gallery</span><span style=\"font-size:10px;color:${theme.textMuted || theme.textSecondary};font-weight:500;\">Upload file</span>`;\r\n uploadBtn.addEventListener(\"mouseenter\", () => { uploadBtn.style.borderColor = theme.primary; uploadBtn.style.transform = \"translateY(-1px)\"; });\r\n uploadBtn.addEventListener(\"mouseleave\", () => { uploadBtn.style.borderColor = theme.border; uploadBtn.style.transform = \"none\"; });\r\n uploadBtn.addEventListener(\"click\", () => { this.handleFileUpload(container, theme); });\r\n\r\n btnRow.appendChild(cameraBtn);\r\n btnRow.appendChild(uploadBtn);\r\n this.root.appendChild(btnRow);\r\n\r\n // \u2500\u2500 BOTTOM: compact tips (no scroll) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const tips = document.createElement(\"div\");\r\n tips.style.cssText = `\r\n margin:0 20px 16px;padding:12px 14px;\r\n background:${theme.shimmer || theme.cardBg};\r\n border:1px solid ${theme.border};border-radius:12px;\r\n `;\r\n\r\n const tipsGrid = document.createElement(\"div\");\r\n tipsGrid.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;\r\n `;\r\n const tipItems = [\r\n \"Lay document flat\",\r\n \"All 4 corners visible\",\r\n \"Good lighting, no glare\",\r\n \"All text clearly readable\",\r\n ];\r\n tipItems.forEach((t) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `display:flex;align-items:center;gap:5px;font-size:11px;color:${theme.textSecondary};`;\r\n row.innerHTML = `<span style=\"color:${theme.primary};font-weight:700;flex-shrink:0;\">\u2713</span><span>${t}</span>`;\r\n tipsGrid.appendChild(row);\r\n });\r\n tips.appendChild(tipsGrid);\r\n this.root.appendChild(tips);\r\n\r\n // \u2500\u2500 Back-side notice (shown only when requiresBack) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (requiresBack && isCapturingFront) {\r\n const notice = document.createElement(\"div\");\r\n notice.style.cssText = `\r\n margin:0 20px 16px;padding:10px 14px;\r\n background:${theme.primary}0D;\r\n border:1px solid ${theme.primary}25;border-radius:10px;\r\n display:flex;align-items:center;gap:8px;\r\n font-size:12px;color:${theme.textSecondary};line-height:1.5;\r\n `;\r\n notice.innerHTML = `<span style=\"font-size:16px;flex-shrink:0;\">\u2139\uFE0F</span><span>You'll capture both the <strong style=\"color:${theme.text}\">front</strong> and <strong style=\"color:${theme.text}\">back</strong> of this document.</span>`;\r\n this.root.appendChild(notice);\r\n }\r\n\r\n // Hidden file input\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/jpeg,image/png\";\r\n fileInput.style.display = \"none\";\r\n fileInput.id = \"sc-doc-file-input\";\r\n fileInput.addEventListener(\"change\", (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n const err = this.validateFile(file);\r\n if (err) { this.showError(err); return; }\r\n this.showLoadingState(\"Processing image...\", theme);\r\n this.compressImage(file, 1280, 960, 0.85)\r\n .then((c) => this.handleFileUploadComplete(c, container, theme, documentType))\r\n .catch(() => this.handleFileUploadComplete(file, container, theme, documentType));\r\n }\r\n });\r\n this.root.appendChild(fileInput);\r\n\r\n container.appendChild(this.root);\r\n }\r\n\r\n /** Returns an appropriate emoji icon for the document type. */\r\n private _docIcon(documentType: string): string {\r\n const t = documentType.toLowerCase();\r\n if (t.includes(\"passport\")) return \"\uD83D\uDCD8\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"\uD83D\uDE97\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"\uD83D\uDDF3\uFE0F\";\r\n return \"\uD83E\uDEAA\";\r\n }\r\n\r\n private renderCameraView(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"position:relative;width:100%;border-radius:12px;overflow:hidden;background:#000;\";\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n wrapper.appendChild(this.videoEl);\r\n\r\n // Guide overlay \u2014 rectangular\r\n const guide = document.createElement(\"div\");\r\n guide.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n pointer-events:none;\r\n `;\r\n const rect = document.createElement(\"div\");\r\n rect.style.cssText = `\r\n width:85%;height:60%;border:2px solid rgba(255,255,255,0.6);\r\n border-radius:12px;box-shadow:0 0 0 9999px rgba(0,0,0,0.4);\r\n `;\r\n guide.appendChild(rect);\r\n wrapper.appendChild(guide);\r\n\r\n // Guide label\r\n const guideLbl = document.createElement(\"div\");\r\n guideLbl.style.cssText = `\r\n position:absolute;bottom:60px;left:0;right:0;text-align:center;\r\n color:#fff;font-size:13px;font-weight:600;\r\n text-shadow:0 1px 3px rgba(0,0,0,0.5);\r\n `;\r\n guideLbl.textContent = `Align your ${this.getDocumentLabel(documentType)} within the frame`;\r\n wrapper.appendChild(guideLbl);\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Capture button\r\n const captureBtn = document.createElement(\"button\");\r\n captureBtn.style.cssText = `\r\n display:block;margin:16px auto 0;width:64px;height:64px;\r\n border-radius:50%;border:4px solid ${theme.primary};\r\n background:transparent;cursor:pointer;position:relative;\r\n transition:all 0.2s ease;\r\n `;\r\n const inner = document.createElement(\"div\");\r\n inner.style.cssText = `\r\n width:48px;height:48px;border-radius:50%;background:${theme.primary};\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n transition:all 0.15s ease;\r\n `;\r\n captureBtn.appendChild(inner);\r\n captureBtn.addEventListener(\"mousedown\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(0.9)\";\r\n });\r\n captureBtn.addEventListener(\"mouseup\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(1)\";\r\n });\r\n captureBtn.addEventListener(\"click\", () => {\r\n this.captureFrame(container, theme, documentType);\r\n });\r\n container.appendChild(captureBtn);\r\n\r\n // Open camera\r\n this.openCamera();\r\n }\r\n\r\n private async openCamera(): Promise<void> {\r\n // Check browser compatibility\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n this.rejectCapture?.(new Error(\"Camera access is not supported in this browser. Please use a modern browser like Chrome, Firefox, or Safari.\"));\r\n return;\r\n }\r\n\r\n const maxRetries = 3;\r\n let retryCount = 0;\r\n\r\n const attemptCameraAccess = async (constraints: MediaStreamConstraints): Promise<MediaStream> => {\r\n try {\r\n return await navigator.mediaDevices.getUserMedia(constraints);\r\n } catch (err: any) {\r\n console.warn(`Camera access attempt ${retryCount + 1} failed:`, err);\r\n \r\n if (retryCount < maxRetries - 1) {\r\n retryCount++;\r\n await new Promise(resolve => setTimeout(resolve, 1000 * retryCount)); // Exponential backoff\r\n return attemptCameraAccess(constraints);\r\n }\r\n throw err;\r\n }\r\n };\r\n\r\n try {\r\n // Try rear camera first\r\n this.stream = await attemptCameraAccess({\r\n video: {\r\n facingMode: { ideal: \"environment\" },\r\n width: { ideal: 1280 },\r\n height: { ideal: 960 },\r\n },\r\n });\r\n } catch (err: any) {\r\n console.warn(\"Rear camera failed, trying any camera:\", err);\r\n \r\n // Fallback to any camera\r\n try {\r\n this.stream = await attemptCameraAccess({\r\n video: { width: { ideal: 1280 } },\r\n });\r\n } catch (fallbackErr: any) {\r\n const errorMessage = this.getCameraErrorMessage(fallbackErr);\r\n this.rejectCapture?.(new Error(errorMessage));\r\n return;\r\n }\r\n }\r\n\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = this.stream;\r\n }\r\n }\r\n\r\n private getCameraErrorMessage(error: any): string {\r\n if (error.name === 'NotAllowedError') {\r\n return \"Camera access denied. Please allow camera permissions and try again.\";\r\n } else if (error.name === 'NotFoundError') {\r\n return \"No camera found. Please ensure your device has a working camera.\";\r\n } else if (error.name === 'NotReadableError') {\r\n return \"Camera is already in use by another application. Please close other apps using the camera and try again.\";\r\n } else if (error.name === 'OverconstrainedError') {\r\n return \"Camera constraints not supported. Trying with different settings...\";\r\n } else {\r\n return \"Camera access failed. Please check your camera permissions and try again.\";\r\n }\r\n }\r\n\r\n private captureFrame(container: HTMLElement, theme: ThemeColors, documentType: string): void {\r\n if (!this.videoEl) return;\r\n\r\n const MAX_W = 1280;\r\n const MAX_H = 960;\r\n const vw = this.videoEl.videoWidth || MAX_W;\r\n const vh = this.videoEl.videoHeight || MAX_H;\r\n const ratio = Math.min(MAX_W / vw, MAX_H / vh, 1);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(vw * ratio);\r\n canvas.height = Math.round(vh * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(\r\n async (blob) => {\r\n if (blob) {\r\n this.stopCamera();\r\n // Quality analysis runs synchronously over ~1.2MP of pixel data \u2014\r\n // show a loading state so the capture->preview transition never\r\n // looks like a frozen/unresponsive tap on slower devices.\r\n this.showLoadingState(\"Analyzing photo...\", theme);\r\n const quality = await this._assessImageQuality(canvas, ctx);\r\n this.showPreview(container, theme, blob, documentType, quality);\r\n }\r\n },\r\n \"image/jpeg\",\r\n 0.85\r\n );\r\n }\r\n\r\n /**\r\n * Runs the local sharpness/glare/contrast/brightness check against a\r\n * captured frame. Returns null (never blocks) if quality can't be computed\r\n * \u2014 e.g. a tainted canvas from a cross-origin file, or an unsupported browser.\r\n */\r\n private async _assessImageQuality(\r\n canvas: HTMLCanvasElement,\r\n ctx: CanvasRenderingContext2D\r\n ): Promise<QualityFeedback | null> {\r\n try {\r\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n return assessQuality(imageData);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** Same as _assessImageQuality but starting from a Blob/File (upload path). */\r\n private async _assessBlobQuality(blob: Blob): Promise<QualityFeedback | null> {\r\n try {\r\n const url = URL.createObjectURL(blob);\r\n const imgEl = document.createElement(\"img\");\r\n await new Promise<void>((resolve, reject) => {\r\n imgEl.onload = () => resolve();\r\n imgEl.onerror = () => reject(new Error(\"Image load failed\"));\r\n imgEl.src = url;\r\n });\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = imgEl.naturalWidth;\r\n canvas.height = imgEl.naturalHeight;\r\n const ctx = canvas.getContext(\"2d\");\r\n URL.revokeObjectURL(url);\r\n if (!ctx) return null;\r\n ctx.drawImage(imgEl, 0, 0);\r\n return this._assessImageQuality(canvas, ctx);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private showPreview(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n imageData: Blob | File,\r\n documentType: string,\r\n quality?: QualityFeedback | null\r\n ): void {\r\n if (this.root) this.root.innerHTML = \"\";\r\n else {\r\n this.root = document.createElement(\"div\");\r\n container.appendChild(this.root);\r\n }\r\n\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;\";\r\n\r\n // Preview image\r\n const img = document.createElement(\"img\");\r\n const imageUrl = URL.createObjectURL(imageData);\r\n img.src = imageUrl;\r\n img.style.cssText = `\r\n width:100%;max-height:300px;object-fit:contain;border-radius:12px;\r\n border:2px solid ${theme.border};\r\n `;\r\n this.root.appendChild(img);\r\n\r\n // Store URL for cleanup\r\n (img as any)._blobUrl = imageUrl;\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${theme.textSecondary};font-size:13px;text-align:center;font-weight:500;`;\r\n label.textContent = \"Does the photo look clear?\";\r\n this.root.appendChild(label);\r\n\r\n const sublabel = document.createElement(\"div\");\r\n sublabel.style.cssText = `color:${theme.textMuted};font-size:11px;text-align:center;line-height:1.6;`;\r\n sublabel.textContent = \"All text must be readable and all four corners must be visible.\";\r\n this.root.appendChild(sublabel);\r\n\r\n // Quality warning banner \u2014 only shown when the local check flags an issue.\r\n // Never blocks (some devices/lighting can't clear the threshold), just warns.\r\n const qualityIsPoor = !!quality && !quality.isValid;\r\n if (qualityIsPoor && quality) {\r\n const warn = document.createElement(\"div\");\r\n warn.style.cssText = `\r\n width:100%;box-sizing:border-box;padding:10px 14px;border-radius:10px;\r\n background:#eab30815;border:1px solid #eab30840;\r\n color:${theme.text};font-size:12px;line-height:1.5;\r\n `;\r\n const issueLine = document.createElement(\"div\");\r\n issueLine.style.cssText = \"font-weight:700;color:#b8860b;\";\r\n issueLine.textContent = `\u26A0\uFE0F ${quality.message}`;\r\n warn.appendChild(issueLine);\r\n if (quality.recommendations.length > 0) {\r\n const rec = document.createElement(\"div\");\r\n rec.style.cssText = \"margin-top:4px;color:\" + theme.textSecondary + \";\";\r\n rec.textContent = quality.recommendations.join(\" \u00B7 \");\r\n warn.appendChild(rec);\r\n }\r\n this.root.appendChild(warn);\r\n }\r\n\r\n // Buttons\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = \"display:flex;gap:12px;width:100%;\";\r\n\r\n const retakeBtn = this.createButton(\"Retake\", theme, qualityIsPoor);\r\n retakeBtn.style.flex = \"1\";\r\n retakeBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n\r\n const useBtn = this.createButton(qualityIsPoor ? \"Use Anyway \u26A0\" : \"Use Photo \u2713\", theme, !qualityIsPoor);\r\n useBtn.style.flex = \"1\";\r\n useBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n useBtn.textContent = \"Processing...\";\r\n useBtn.disabled = true;\r\n this.compressImage(imageData, 1280, 960, 0.85)\r\n .then((compressed) => this.handleCaptureComplete(compressed, container, theme, documentType))\r\n .catch(() => this.handleCaptureComplete(imageData, container, theme, documentType)); // fallback to original\r\n });\r\n\r\n btnRow.appendChild(retakeBtn);\r\n btnRow.appendChild(useBtn);\r\n this.root.appendChild(btnRow);\r\n }\r\n\r\n private handleCaptureComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const wasCapturingFront = this.currentSide === 'front';\r\n \r\n // Store the captured image\r\n if (wasCapturingFront) {\r\n this.frontBlob = imageData;\r\n } else {\r\n this.backBlob = imageData;\r\n }\r\n \r\n // If we need back side and haven't captured it yet, move to back side\r\n if (requiresBack && wasCapturingFront) {\r\n this.currentSide = 'back';\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n return;\r\n }\r\n\r\n // All captures complete, resolve with result\r\n if (!this.frontBlob) {\r\n this.rejectCapture?.(new Error(\"No front image captured. Please try again.\"));\r\n return;\r\n }\r\n \r\n const result: DocumentCaptureResult = {\r\n front: this.frontBlob,\r\n back: this.backBlob || undefined\r\n };\r\n this.resolveCapture?.(result);\r\n }\r\n\r\n private async handleFileUploadComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): Promise<void> {\r\n const quality = await this._assessBlobQuality(imageData);\r\n this.showPreview(container, theme, imageData, documentType, quality);\r\n }\r\n\r\n private validateFile(file: File): string | null {\r\n // Check file type\r\n const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];\r\n if (!allowedTypes.includes(file.type)) {\r\n return \"Invalid file type. Please upload a JPEG or PNG image.\";\r\n }\r\n \r\n // Check file size (max 10MB)\r\n const maxSize = 10 * 1024 * 1024;\r\n if (file.size > maxSize) {\r\n return \"File is too large. Please upload an image smaller than 10MB.\";\r\n }\r\n \r\n // Check minimum file size (at least 1KB to avoid empty files)\r\n if (file.size < 1024) {\r\n return \"File is too small. Please upload a valid image file.\";\r\n }\r\n \r\n return null;\r\n }\r\n\r\n private handleFileUpload(container: HTMLElement, theme: ThemeColors): void {\r\n const input = this.root?.querySelector(\"#sc-doc-file-input\") as HTMLInputElement;\r\n if (input) input.click();\r\n }\r\n\r\n private stopCamera(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((t) => t.stop());\r\n this.stream = null;\r\n }\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = null;\r\n this.videoEl = null;\r\n }\r\n }\r\n\r\n private createEnhancedButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean,\r\n ariaLabel: string\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.setAttribute(\"aria-label\", ariaLabel);\r\n btn.style.cssText = `\r\n padding:18px 24px;border-radius:16px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.3s ease;border:none;width:100%;\r\n min-height:56px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n position:relative;overflow:hidden;\r\n ${\r\n isPrimary\r\n ? `background:linear-gradient(135deg, ${theme.primary}, ${theme.primary}DD);color:#fff;box-shadow:0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};box-shadow:0 2px 8px ${theme.border}20;`\r\n }\r\n `;\r\n \r\n // Add ripple effect\r\n btn.addEventListener(\"click\", (e) => {\r\n const ripple = document.createElement(\"span\");\r\n const rect = btn.getBoundingClientRect();\r\n const size = Math.max(rect.width, rect.height);\r\n const x = e.clientX - rect.left - size / 2;\r\n const y = e.clientY - rect.top - size / 2;\r\n \r\n ripple.style.cssText = `\r\n position:absolute;width:${size}px;height:${size}px;\r\n left:${x}px;top:${y}px;border-radius:50%;\r\n background:${isPrimary ? 'rgba(255,255,255,0.3)' : theme.primary + '20'};\r\n transform:scale(0);animation:ripple 0.6s ease-out;\r\n pointer-events:none;\r\n `;\r\n btn.appendChild(ripple);\r\n setTimeout(() => ripple.remove(), 600);\r\n });\r\n \r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-2px)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 12px 32px ${theme.primary}30, 0 6px 16px ${theme.primary}20`;\r\n } else {\r\n btn.style.boxShadow = `0 4px 16px ${theme.border}30, 0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.primary;\r\n }\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15`;\r\n } else {\r\n btn.style.boxShadow = `0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.border;\r\n }\r\n });\r\n \r\n // Add ripple animation\r\n if (!document.head.querySelector('style[data-ripple-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-ripple-animation', 'true');\r\n style.textContent = `\r\n @keyframes ripple {\r\n to { transform: scale(4); opacity: 0; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n return btn;\r\n }\r\n\r\n private showLoadingState(message: string, theme: ThemeColors): void {\r\n if (!this.root) return;\r\n \r\n this.root.innerHTML = \"\";\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:40px 20px;min-height:300px;\";\r\n \r\n // Enhanced loading spinner\r\n const spinnerContainer = document.createElement(\"div\");\r\n spinnerContainer.style.cssText = \"position:relative;width:80px;height:80px;\";\r\n \r\n const spinner = document.createElement(\"div\");\r\n spinner.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:4px solid ${theme.border};\r\n border-top-color:${theme.primary};\r\n animation:sc-spin 1s linear infinite;\r\n `;\r\n spinnerContainer.appendChild(spinner);\r\n \r\n const centerIcon = document.createElement(\"div\");\r\n centerIcon.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n font-size:28px;animation:pulse 2s ease-in-out infinite;\r\n `;\r\n centerIcon.textContent = \"\uD83D\uDCC4\";\r\n spinnerContainer.appendChild(centerIcon);\r\n \r\n this.root.appendChild(spinnerContainer);\r\n \r\n // Loading message\r\n const loadingText = document.createElement(\"div\");\r\n loadingText.style.cssText = `\r\n color:${theme.text};font-size:16px;font-weight:600;text-align:center;\r\n animation:fadeIn 0.5s ease-out;\r\n `;\r\n loadingText.textContent = message;\r\n this.root.appendChild(loadingText);\r\n \r\n // Add pulse animation\r\n if (!document.head.querySelector('style[data-pulse-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-pulse-animation', 'true');\r\n style.textContent = `\r\n @keyframes pulse {\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.1); opacity: 0.8; }\r\n }\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n }\r\n\r\n private showError(message: string): void {\r\n if (!this.root) return;\r\n \r\n const errorContainer = document.createElement(\"div\");\r\n errorContainer.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:16px;\r\n background:#ff444415;border:1px solid #ff444430;border-radius:12px;\r\n color:#ff4444;font-size:14px;margin-top:16px;animation:shake 0.5s ease-in-out;\r\n `;\r\n errorContainer.innerHTML = `\r\n <span style=\"font-size:18px;\">\u26A0\uFE0F</span>\r\n <span>${message}</span>\r\n `;\r\n \r\n // Add shake animation\r\n if (!document.head.querySelector('style[data-shake-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-shake-animation', 'true');\r\n style.textContent = `\r\n @keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 25% { transform: translateX(-5px); }\r\n 75% { transform: translateX(5px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n this.root.appendChild(errorContainer);\r\n setTimeout(() => errorContainer.remove(), 5000);\r\n }\r\n\r\n private createButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.style.cssText = `\r\n padding:16px 24px;border-radius:12px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.2s ease;border:none;width:100%;\r\n min-height:52px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n ${\r\n isPrimary\r\n ? `background:${theme.primary};color:#fff;box-shadow:0 4px 12px ${theme.primary}30;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};`\r\n }\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-1px)\";\r\n if (isPrimary) btn.style.background = theme.primaryHover;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) btn.style.background = theme.primary;\r\n });\r\n return btn;\r\n }\r\n\r\n private compressImage(\r\n source: Blob | File,\r\n maxWidth: number,\r\n maxHeight: number,\r\n quality: number\r\n ): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n // Read EXIF orientation FIRST so we can correct rotation before canvas draw.\r\n // Canvas ignores EXIF metadata \u2014 without this, phone uploads arrive rotated.\r\n this._readExifOrientation(source).then((orientation) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n\r\n // For orientations 5-8 the image is rotated 90\u00B0/270\u00B0 \u2014 swap dimensions\r\n const swapped = orientation >= 5 && orientation <= 8;\r\n const srcW = swapped ? h : w;\r\n const srcH = swapped ? w : h;\r\n const ratio = Math.min(maxWidth / srcW, maxHeight / srcH, 1);\r\n const outW = Math.round(srcW * ratio);\r\n const outH = Math.round(srcH * ratio);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = outW;\r\n canvas.height = outH;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n\r\n // Apply EXIF rotation transform before drawing\r\n ctx.save();\r\n if (orientation === 2) { ctx.transform(-1, 0, 0, 1, outW, 0); }\r\n else if (orientation === 3) { ctx.transform(-1, 0, 0, -1, outW, outH); }\r\n else if (orientation === 4) { ctx.transform( 1, 0, 0, -1, 0, outH); }\r\n else if (orientation === 5) { ctx.transform( 0, 1, 1, 0, 0, 0); }\r\n else if (orientation === 6) { ctx.transform( 0, 1, -1, 0, outH, 0); }\r\n else if (orientation === 7) { ctx.transform( 0, -1, -1, 0, outH, outW); }\r\n else if (orientation === 8) { ctx.transform( 0, -1, 1, 0, 0, outW); }\r\n ctx.drawImage(imgEl, 0, 0, swapped ? outH : outW, swapped ? outW : outH);\r\n ctx.restore();\r\n\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n }).catch(() => {\r\n // If EXIF read fails, fall back to simple compression without rotation\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = Math.min(maxWidth / w, maxHeight / h, 1);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Read JPEG EXIF orientation tag (1\u20138) from a Blob/File.\r\n * Returns 1 (no rotation) if EXIF is absent or unreadable.\r\n */\r\n private _readExifOrientation(source: Blob | File): Promise<number> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n try {\r\n const buf = e.target?.result as ArrayBuffer;\r\n const view = new DataView(buf);\r\n if (view.getUint16(0, false) !== 0xFFD8) { resolve(1); return; } // not JPEG\r\n let offset = 2;\r\n while (offset < view.byteLength) {\r\n const marker = view.getUint16(offset, false);\r\n offset += 2;\r\n if (marker === 0xFFE1) { // APP1 \u2014 may contain EXIF\r\n if (view.getUint32(offset + 2, false) !== 0x45786966) { resolve(1); return; }\r\n const little = view.getUint16(offset + 8, false) === 0x4949;\r\n const ifdOff = offset + 8 + view.getUint32(offset + 12, little);\r\n const tags = view.getUint16(ifdOff, little);\r\n for (let i = 0; i < tags; i++) {\r\n if (view.getUint16(ifdOff + 2 + 12 * i, little) === 0x0112) {\r\n resolve(view.getUint16(ifdOff + 2 + 12 * i + 8, little));\r\n return;\r\n }\r\n }\r\n resolve(1); return;\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break;\r\n } else {\r\n offset += view.getUint16(offset, false);\r\n }\r\n }\r\n resolve(1);\r\n } catch { resolve(1); }\r\n };\r\n reader.onerror = () => resolve(1);\r\n // Only need the first 64KB \u2014 EXIF is always in the first APP1 segment\r\n reader.readAsArrayBuffer(source.slice(0, 65536));\r\n });\r\n }\r\n\r\n private getDocumentLabel(type: string): string {\r\n const t = type.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"driver's license\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"voter's card\";\r\n if (t.includes(\"national\") || t.includes(\"nin\") || t.includes(\"national id\")) return \"national ID card\";\r\n if (t.includes(\"bvn\")) return \"BVN card\";\r\n return \"identity document\";\r\n }\r\n}\r\n", "\uFEFFimport { SmartComply } from \"../client/Smartcomply\";\r\nimport { SDKInitConfig, SDKChannel, VerifyIdentityResponse } from \"../types/onboarding\";\r\nimport { LivenessSubmitResponse, ChallengeAction } from \"../types/liveness\";\r\nimport { ThemeColors, getTheme } from \"./theme\";\r\nimport { DocumentCapture, DocumentCaptureResult } from \"./DocumentCapture\";\r\nimport { Environment } from \"../client/Config\";\r\nimport { collectDeviceMetadata } from \"../utils/device\";\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// Public Types\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\nexport interface FlowOptions {\r\n apiKey: string;\r\n clientId: string;\r\n environment?: Environment;\r\n timeout?: number;\r\n onComplete?: (result: FlowResult) => void;\r\n onError?: (error: Error) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface FlowResult {\r\n entryId: number;\r\n sessionId: string | null;\r\n status: string;\r\n submittedAt: string | null;\r\n verificationResult?: VerifyIdentityResponse;\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// Step definitions\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\ntype StepName =\r\n | \"loading\"\r\n | \"welcome\"\r\n | \"country\"\r\n | \"id_type\"\r\n | \"id_input\"\r\n | \"confirm_identity\"\r\n | \"document_capture\"\r\n | \"document_confirm\"\r\n | \"ocr_gate\"\r\n | \"processing\"\r\n | \"liveness\"\r\n | \"done\"\r\n | \"result\"\r\n | \"error\";\r\n\r\nconst STEP_ORDER: StepName[] = [\r\n \"loading\",\r\n \"welcome\",\r\n \"country\",\r\n \"id_type\",\r\n \"id_input\",\r\n \"confirm_identity\",\r\n \"document_capture\",\r\n \"ocr_gate\",\r\n \"document_confirm\",\r\n \"liveness\",\r\n \"done\",\r\n \"result\",\r\n];\r\n\r\nconst COUNTRY_LABELS: Record<string, string> = {\r\n nigeria: \"\u00F0\u0178\u2021\u00B3\u00F0\u0178\u2021\u00AC Nigeria\",\r\n global: \"\u00F0\u0178\u0152\u008D Other Countries\",\r\n ghana: \"\u00F0\u0178\u2021\u00AC\u00F0\u0178\u2021\u00AD Ghana\",\r\n kenya: \"\u00F0\u0178\u2021\u00B0\u00F0\u0178\u2021\u00AA Kenya\",\r\n south_africa: \"\u00F0\u0178\u2021\u00BF\u00F0\u0178\u2021\u00A6 South Africa\",\r\n united_states: \"\u00F0\u0178\u2021\u00BA\u00F0\u0178\u2021\u00B8 United States\",\r\n united_kingdom: \"\u00F0\u0178\u2021\u00AC\u00F0\u0178\u2021\u00A7 United Kingdom\",\r\n};\r\n\r\n// Backend/admin data tags document-capture fields inconsistently \u00E2\u20AC\u201D the field\r\n// renderer (below) already treats \"image\" and \"file\" as file inputs alongside\r\n// \"upload\", so flow-routing decisions must recognize the same set or a channel\r\n// tagged \"image\"/\"file\" silently falls back to the number-entry screen.\r\nfunction isUploadFieldType(type: unknown): boolean {\r\n return type === \"upload\" || type === \"image\" || type === \"file\";\r\n}\r\n\r\nfunction resolveIdTypeInfo(\r\n typeName: string,\r\n isDocumentFlow: boolean\r\n): { icon: string; desc: string; requiresBack?: boolean } {\r\n const u = typeName.toUpperCase();\r\n const advanced = u.includes(\"ADVANCED\");\r\n\r\n // Strip UI noise from display labels \u00E2\u20AC\u201D users don't need \"with face\" or \"(NIN)\" suffixes\r\n const cleanName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n // Helper function to check if document requires back side\r\n const requiresBackSide = (type: string): boolean => {\r\n const t = type.toLowerCase();\r\n return t.includes(\"voter\") ||\r\n t.includes(\"driver\") ||\r\n t.includes(\"license\") ||\r\n t.includes(\"national id\") ||\r\n t.includes(\"national id card\");\r\n // Note: NIN document (nin_with_face, nin_slip) does NOT require back side \u00E2\u20AC\u201D\r\n // the NIN card is single-sided. Only the physical NIN slip has a back but\r\n // the OCR pipeline only needs the front.\r\n };\r\n\r\n // BVN \u00E2\u20AC\u201D always 11 digits\r\n if (u.includes(\"BVN\") || u.includes(\"BANK VERIFICATION\")) {\r\n return { icon: \"\u00F0\u0178\u008F\u00A6\", desc: \"Enter your 11-digit Bank Verification Number (BVN)\", requiresBack: false };\r\n }\r\n\r\n // NIN \u00E2\u20AC\u201D always 11 digits (covers nin_with_face, NIN slip, etc.)\r\n if (u.includes(\"NIN\") || u.includes(\"NATIONAL IDENTITY NUMBER\")) {\r\n return { icon: \"\u00F0\u0178\u2020\u201D\", desc: \"Enter your 11-digit National Identification Number (NIN)\", requiresBack: false };\r\n }\r\n\r\n // Ghana Card / Ghana National ID\r\n if (u.includes(\"GHANA\")) {\r\n if (isDocumentFlow) return { icon: \"\u00F0\u0178\u00AA\u00AA\", desc: \"Capture or upload your Ghana Card\", requiresBack: true };\r\n return { icon: \"\u00F0\u0178\u00AA\u00AA\", desc: \"Enter your Ghana Card number\", requiresBack: false };\r\n }\r\n\r\n // SSNIT (Ghana social security)\r\n if (u.includes(\"SSNIT\"))\r\n return { icon: \"\u00F0\u0178\u008F\u203A\u00EF\u00B8\u008F\", desc: \"Enter your SSNIT number\", requiresBack: false };\r\n\r\n // Kenya National ID\r\n if (u.includes(\"KENYA\") || (u.includes(\"NATIONAL\") && u.includes(\"KENYA\")))\r\n return { icon: \"\u00F0\u0178\u2020\u201D\", desc: \"Enter your Kenya National ID number\", requiresBack: false };\r\n\r\n // TIN\r\n if (u.includes(\"TIN\") || u.includes(\"TAX IDENTIFICATION\"))\r\n return { icon: \"\u00F0\u0178\u00A7\u00BE\", desc: \"Enter your Tax Identification Number (TIN)\", requiresBack: false };\r\n\r\n // CAC / Company registration\r\n if (u.includes(\"CAC\") || u.includes(\"CORPORATE AFFAIRS\") || u.includes(\"COMPANY\"))\r\n return { icon: \"\u00F0\u0178\u008F\u00A2\", desc: advanced ? \"Enter RC number, company name & type\" : \"Enter your company registration number\", requiresBack: false };\r\n\r\n // Voter / PVC\r\n if (u.includes(\"VOTER\") || u.includes(\"PVC\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\u00F0\u0178\u2014\u00B3\u00EF\u00B8\u008F\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your voter's card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your voter ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Passport\r\n if (u.includes(\"PASSPORT\"))\r\n return { icon: \"\u00F0\u0178\u201C\u02DC\", desc: isDocumentFlow ? \"Capture or upload your passport\" : \"Enter your passport number\", requiresBack: false };\r\n\r\n // Driver's license\r\n if (u.includes(\"DRIVER\") || u.includes(\"LICENSE\") || u.includes(\"LICENCE\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\u00F0\u0178\u0161\u2014\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your driver's license${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your driver's license number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // National ID card (generic)\r\n if (u.includes(\"NATIONAL ID\") || (u.includes(\"NATIONAL\") && u.includes(\"CARD\"))) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\u00F0\u0178\u00AA\u00AA\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your ID card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your National ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Face liveness / comparison\r\n if (u.includes(\"LIVENESS\") || u.includes(\"FACE COMPARISON\") || u.includes(\"FACE MATCH\"))\r\n return { icon: \"\u00F0\u0178\u00A4\u00B3\", desc: \"We'll capture a short selfie video to verify you\", requiresBack: false };\r\n\r\n return {\r\n icon: isDocumentFlow ? \"\u00F0\u0178\u201C\u201E\" : \"\u00F0\u0178\u2020\u201D\",\r\n desc: isDocumentFlow ? \"Capture or upload your document\" : \"Enter your ID number\",\r\n requiresBack: false,\r\n };\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC Widget-side message sanitizer \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// Strips anything technical before showing text to the end user.\r\n// Keeps messages that are already written plainly in natural language.\r\nfunction _sanitizeUserMessage(raw: string | null | undefined): string | null {\r\n if (!raw) return null;\r\n const lower = raw.toLowerCase();\r\n\r\n // Block anything that looks internal / technical\r\n const blocklist = [\r\n \"smartcomply\", \"face comparison service\", \"session id\", \"session_id\",\r\n \"provider\", \"ocr\", \"textract\", \"rekognition\", \"deepface\",\r\n \"ivs\", \"celery\", \"exception\", \"traceback\", \"str(e)\",\r\n \"error:\", \"failed:\", \"django\", \"python\", \"http \",\r\n \"comparison mode\", \"liveness mode\", \"callback\",\r\n \"face_comparison\", \"face_match\", \"confidence_percentage\",\r\n \"threshold_percentage\", \"polling_fallback\", \"resolved_by\",\r\n ];\r\n for (const blocked of blocklist) {\r\n if (lower.includes(blocked)) return null;\r\n }\r\n\r\n // Block snake_case (internal field names accidentally leaking through)\r\n if (/[a-z]+_[a-z]+/.test(raw) && !/\\s/.test(raw.trim())) return null;\r\n\r\n // Block anything starting with a lowercase letter (likely a code/key)\r\n if (raw.trim()[0] === raw.trim()[0].toLowerCase() && /^[a-z]/.test(raw.trim())) return null;\r\n\r\n return raw.trim();\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC B8: OCR date string normaliser \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// OCR providers return dates in wildly different formats. new Date(str) is\r\n// locale-dependent for anything other than ISO 8601 (YYYY-MM-DD), so we\r\n// attempt a set of known patterns before falling back to the native parser.\r\nfunction _parseOcrDate(raw: string): Date | null {\r\n if (!raw) return null;\r\n const s = raw.trim();\r\n\r\n // ISO 8601 or near-ISO \u00E2\u20AC\u201D try first, always unambiguous\r\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(s)) return new Date(s.slice(0, 10));\r\n\r\n // DD/MM/YYYY or DD-MM-YYYY\r\n const dmy = s.match(/^(\\d{2})[\\/\\-](\\d{2})[\\/\\-](\\d{4})/);\r\n if (dmy) return new Date(`${dmy[3]}-${dmy[2]}-${dmy[1]}`);\r\n\r\n // MM/DD/YYYY (US format \u00E2\u20AC\u201D less common from OCR but possible)\r\n const mdy = s.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})/);\r\n if (mdy) {\r\n // Heuristic: if \"month\" > 12 it must be day-first\r\n if (parseInt(mdy[1], 10) > 12) return new Date(`${mdy[3]}-${mdy[2]}-${mdy[1]}`);\r\n return new Date(`${mdy[3]}-${mdy[1]}-${mdy[2]}`);\r\n }\r\n\r\n // DD Mon YYYY e.g. \"12 May 2029\" or \"12 MAY 2029\"\r\n const dMonY = s.match(/^(\\d{1,2})\\s+([A-Za-z]{3,})\\s+(\\d{4})/);\r\n if (dMonY) return new Date(`${dMonY[2]} ${dMonY[1]} ${dMonY[3]}`);\r\n\r\n // Last resort: native parser\r\n const d = new Date(s);\r\n return isNaN(d.getTime()) ? null : d;\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC W12: Image compression before document upload \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\nasync function _compressImage(blob: Blob, maxWidth = 1600, quality = 0.85): Promise<Blob> {\r\n try {\r\n const bmp = await createImageBitmap(blob);\r\n const scale = Math.min(1, maxWidth / bmp.width);\r\n const w = Math.round(bmp.width * scale);\r\n const h = Math.round(bmp.height * scale);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = w; canvas.height = h;\r\n canvas.getContext(\"2d\")!.drawImage(bmp, 0, 0, w, h);\r\n bmp.close();\r\n return await new Promise<Blob>((res, rej) =>\r\n canvas.toBlob(b => b ? res(b) : rej(new Error(\"Compression failed\")), \"image/jpeg\", quality)\r\n );\r\n } catch {\r\n return blob; // fallback to original on any error\r\n }\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC Document type code \u00E2\u2020\u2019 human label \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\nfunction _formatDocType(code: string): string {\r\n const map: Record<string, string> = {\r\n passport: \"Passport\",\r\n national_id: \"National ID\",\r\n nin_slip: \"NIN Slip\",\r\n nin_with_face: \"National Identity Number\",\r\n drivers_license: \"Driver's Licence\",\r\n voters_card: \"Voter's Card\",\r\n kenya_id: \"Kenya National ID\",\r\n ghana_id: \"Ghana Card\",\r\n };\r\n if (!code) return \"\";\r\n const key = code.toLowerCase().replace(/[\\s-]/g, \"_\");\r\n if (map[key]) return map[key];\r\n // Fallback: title-case the code\r\n return code.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n}\r\n\r\n// SmartComplyFlow\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n// Add CSS animation keyframes for spin animations\r\nconst style = document.createElement('style');\r\nstyle.textContent = `\r\n @keyframes sc-spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n`;\r\nif (!document.head.querySelector('style[data-sc-animations]')) {\r\n style.setAttribute('data-sc-animations', 'true');\r\n document.head.appendChild(style);\r\n}\r\n\r\nexport class SmartComplyFlow {\r\n private sdk: SmartComply;\r\n private options: FlowOptions;\r\n private theme: ThemeColors = getTheme(\"default\");\r\n\r\n // DOM\r\n private overlay: HTMLDivElement | null = null;\r\n private modal: HTMLDivElement | null = null;\r\n private contentArea: HTMLDivElement | null = null;\r\n private progressBar: HTMLDivElement | null = null;\r\n private stepLabel: HTMLDivElement | null = null;\r\n private brandLabel: HTMLDivElement | null = null;\r\n\r\n // State\r\n private sdkConfig: SDKInitConfig | null = null;\r\n private currentStep: StepName = \"loading\";\r\n private selectedCountry: string = \"\";\r\n private selectedChannelId: number = 0;\r\n private selectedChannelFields: { type: string; label: string; options?: string[] }[] = [];\r\n private selectedIdType: string = \"\"; // Canonical code (e.g., \"national_id\", \"nin_with_face\")\r\n private selectedIdTypeName: string = \"\"; // Display name (e.g., \"National Identity Number with Face (NIN)\")\r\n private selectedRequiresBack: boolean | undefined = undefined; // Backend-provided back-side flag\r\n private collectedFields: Record<string, string> = {};\r\n private idNumber: string = \"\";\r\n private documentBlob: Blob | null = null;\r\n private documentBackBlob: Blob | null = null;\r\n private identityCheckId: number | null = null;\r\n private verificationResult: VerifyIdentityResponse | null = null;\r\n private livenessEntryId: number | null = null;\r\n private isDestroyed = false;\r\n private headerBackBtn: HTMLButtonElement | null = null;\r\n\r\n // Retry safety \u00E2\u20AC\u201D max 3 confirmation rejections or liveness failures per session\r\n private _confirmRetries = 0;\r\n private _livenessFailures = 0;\r\n private static readonly MAX_RETRIES = 3;\r\n\r\n // IVS result stored for confirm_identity screen\r\n private _ivsName: string = \"\";\r\n private _ivsGender: string = \"\";\r\n\r\n // OCR result stored for document_confirm screen\r\n private _ocrName: string = \"\";\r\n private _ocrDocNumber: string = \"\";\r\n private _ocrExpiry: string = \"\";\r\n private _ocrFaceImageUrl: string = \"\";\r\n private _ocrIsExpired: boolean = false;\r\n private _ocrExpirySoon: boolean = false;\r\n\r\n // Camera pre-warm stream (created during confirmation screen, used in liveness)\r\n private _prewarmedStream: MediaStream | null = null;\r\n\r\n // OCR gate poll timer \u00E2\u20AC\u201D stored so it can be cancelled on navigation or close\r\n private _ocrPollTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // UI timeout from _startStatusPolling \u00E2\u20AC\u201D stored so close() can cancel it\r\n private _uiTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Session expiry\r\n private sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Status polling (result screen)\r\n private _pollStatusTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Components\r\n private docCapture: DocumentCapture | null = null;\r\n\r\n private constructor(options: FlowOptions) {\r\n this.options = options;\r\n this.sdk = new SmartComply({\r\n apiKey: options.apiKey,\r\n clientId: options.clientId,\r\n environment: options.environment || \"sandbox\",\r\n timeout: options.timeout,\r\n });\r\n }\r\n\r\n /**\r\n * Open the SmartComply verification flow.\r\n *\r\n * Usage:\r\n * SmartComplyFlow.open({\r\n * apiKey: \"pk_live_...\",\r\n * clientId: \"uuid-...\",\r\n * environment: \"production\",\r\n * onComplete: (result) => console.log(\"Done!\", result),\r\n * onError: (err) => console.error(err),\r\n * onClose: () => console.log(\"Closed\"),\r\n * });\r\n */\r\n static open(options: FlowOptions): SmartComplyFlow {\r\n const flow = new SmartComplyFlow(options);\r\n flow.mount();\r\n flow.initialize();\r\n return flow;\r\n }\r\n\r\n /**\r\n * Close and destroy the flow widget.\r\n */\r\n close(): void {\r\n this.isDestroyed = true;\r\n this.docCapture?.destroy();\r\n // Release any pre-warmed camera stream\r\n if (this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n if (this.sessionExpiryTimer) {\r\n clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n if (this._pollStatusTimer) {\r\n clearTimeout(this._pollStatusTimer);\r\n this._pollStatusTimer = null;\r\n }\r\n // B6: cancel OCR gate poll timer\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n // P4: cancel result-screen UI timeout\r\n if (this._uiTimeoutId) {\r\n clearTimeout(this._uiTimeoutId);\r\n this._uiTimeoutId = null;\r\n }\r\n\r\n if (this.overlay) {\r\n this.overlay.style.opacity = \"0\";\r\n setTimeout(() => {\r\n try {\r\n this.overlay?.remove();\r\n } catch (_) { /* extension interference \u00E2\u20AC\u201D safe to ignore */ }\r\n this.overlay = null;\r\n this.modal = null;\r\n this.contentArea = null;\r\n }, 300);\r\n }\r\n\r\n this.options.onClose?.();\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // Initialization\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private mount(): void {\r\n // Inject keyframes\r\n this.injectStyles();\r\n\r\n // Overlay\r\n this.overlay = document.createElement(\"div\");\r\n this.overlay.id = \"sc-flow-overlay\";\r\n this.overlay.style.cssText = `\r\n position:fixed;inset:0;z-index:99999;\r\n display:flex;align-items:center;justify-content:center;\r\n background:${this.theme.overlay};\r\n backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);\r\n opacity:0;transition:opacity 0.3s ease;\r\n font-family:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n // Modal\r\n this.modal = document.createElement(\"div\");\r\n this.modal.id = \"sc-flow-modal\";\r\n this.modal.setAttribute(\"role\", \"dialog\");\r\n this.modal.setAttribute(\"aria-modal\", \"true\");\r\n this.modal.setAttribute(\"aria-label\", \"Identity verification\");\r\n this.modal.style.cssText = `\r\n width:100%;max-width:580px;max-height:95vh;\r\n background:${this.theme.bg};\r\n border-radius:20px;overflow:hidden;\r\n box-shadow:${this.theme.shadow};\r\n display:flex;flex-direction:column;\r\n transform:translateY(20px) scale(0.97);\r\n transition:transform 0.35s cubic-bezier(0.16,1,0.3,1);\r\n `;\r\n\r\n // Header\r\n const header = this.createHeader();\r\n this.modal.appendChild(header);\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `height:3px;background:${this.theme.shimmer};`;\r\n this.progressBar = document.createElement(\"div\");\r\n this.progressBar.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,${this.theme.primary},${this.theme.primaryHover});\r\n border-radius:0 2px 2px 0;transition:width 0.5s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBar);\r\n this.modal.appendChild(progressWrap);\r\n\r\n // Content area (scrollable)\r\n this.contentArea = document.createElement(\"div\");\r\n this.contentArea.id = \"sc-flow-content\";\r\n this.contentArea.setAttribute(\"role\", \"main\");\r\n this.contentArea.setAttribute(\"aria-live\", \"polite\");\r\n this.contentArea.setAttribute(\"aria-atomic\", \"false\");\r\n this.contentArea.style.cssText = `\r\n flex:1;overflow-y:auto;padding:16px 20px;\r\n -webkit-overflow-scrolling:touch;\r\n `;\r\n this.modal.appendChild(this.contentArea);\r\n\r\n // Footer\r\n const footer = this.createFooter();\r\n this.modal.appendChild(footer);\r\n\r\n this.overlay.appendChild(this.modal);\r\n document.body.appendChild(this.overlay);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n if (this.overlay) this.overlay.style.opacity = \"1\";\r\n if (this.modal) this.modal.style.transform = \"translateY(0) scale(1)\";\r\n });\r\n }\r\n\r\n private async initialize(): Promise<void> {\r\n this.showStep(\"loading\");\r\n\r\n try {\r\n // Create session\r\n await this.sdk.createSession();\r\n\r\n // C4: Start session expiry timer (warn 2 min before 30-min expiry)\r\n const expiresAt = this.sdk.sessionExpiresAt;\r\n if (expiresAt) {\r\n const expiresMs = new Date(expiresAt).getTime() - Date.now();\r\n const warnMs = Math.max(expiresMs - 120000, 0); // warn 2 min before\r\n this.sessionExpiryTimer = setTimeout(() => {\r\n if (!this.isDestroyed && this.currentStep !== \"result\") {\r\n this.showErrorStep(\"Your session is about to expire. Please complete verification quickly or restart.\");\r\n }\r\n }, warnMs);\r\n }\r\n\r\n // Load config\r\n this.sdkConfig = await this.sdk.initializeConfig();\r\n\r\n // Apply theme from config \u00E2\u20AC\u201D use theme_hex to override primary colour if set\r\n if (this.sdkConfig.theme) {\r\n this.theme = getTheme(this.sdkConfig.theme, (this.sdkConfig as any).theme_hex || null);\r\n this.applyTheme();\r\n }\r\n\r\n // Update brand name in header\r\n if (this.brandLabel && this.sdkConfig.brand_name) {\r\n this.brandLabel.textContent = this.sdkConfig.brand_name;\r\n }\r\n\r\n if (this.isDestroyed) return;\r\n\r\n this.showStep(\"welcome\");\r\n\r\n } catch (err: any) {\r\n this.showErrorStep(err.message || \"Failed to initialize. Please try again.\");\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // Step rendering\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private showStep(step: StepName): void {\r\n this.currentStep = step;\r\n if (!this.contentArea) return;\r\n\r\n // P1/B6: cancel any in-flight OCR gate poll when user navigates away\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n\r\n // Update progress\r\n this.updateProgress();\r\n\r\n // Animate out current content\r\n const oldContent = this.contentArea.firstChild as HTMLElement | null;\r\n if (oldContent) {\r\n oldContent.style.cssText += \"opacity:0;transform:translateX(-20px);transition:all 0.2s ease;\";\r\n setTimeout(() => {\r\n if (this.contentArea) this.contentArea.innerHTML = \"\";\r\n this.renderStep(step);\r\n }, 200);\r\n } else {\r\n this.renderStep(step);\r\n }\r\n }\r\n\r\n private renderStep(step: StepName): void {\r\n if (!this.contentArea) return;\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"opacity:0;transform:translateX(20px);transition:all 0.3s ease;\";\r\n\r\n switch (step) {\r\n case \"loading\":\r\n this.renderLoading(wrapper);\r\n break;\r\n case \"welcome\":\r\n this.renderWelcome(wrapper);\r\n break;\r\n case \"country\":\r\n this.renderCountrySelect(wrapper);\r\n break;\r\n case \"id_type\":\r\n this.renderIdTypeSelect(wrapper);\r\n break;\r\n case \"id_input\":\r\n this.renderIdInput(wrapper);\r\n break;\r\n case \"confirm_identity\":\r\n this.renderConfirmIdentity(wrapper);\r\n break;\r\n case \"document_capture\":\r\n this.renderDocumentCapture(wrapper);\r\n break;\r\n case \"ocr_gate\":\r\n this.renderOcrGate(wrapper);\r\n break;\r\n case \"document_confirm\":\r\n this.renderDocumentConfirm(wrapper);\r\n break;\r\n case \"processing\":\r\n // C1: processing step is dead code \u00E2\u20AC\u201D flow now goes to 'done' after submit\r\n break;\r\n case \"liveness\":\r\n this.renderLiveness(wrapper);\r\n break;\r\n case \"done\":\r\n this.renderDone(wrapper);\r\n break;\r\n case \"result\":\r\n // C2: result step is dead code \u00E2\u20AC\u201D showResult/renderResult removed\r\n break;\r\n case \"error\":\r\n break;\r\n }\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"translateX(0)\";\r\n });\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Loading \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderLoading(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;gap:16px;\";\r\n\r\n const spinnerWrap = document.createElement(\"div\");\r\n spinnerWrap.style.cssText = \"position:relative;width:60px;height:60px;flex-shrink:0;\";\r\n\r\n const ring = document.createElement(\"div\");\r\n ring.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:3px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 0.9s linear infinite;\r\n `;\r\n const centre = document.createElement(\"div\");\r\n centre.style.cssText = `\r\n position:absolute;inset:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:22px;\r\n `;\r\n centre.textContent = \"\\uD83D\\uDEE1\\uFE0F\";\r\n spinnerWrap.appendChild(ring);\r\n spinnerWrap.appendChild(centre);\r\n container.appendChild(spinnerWrap);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${this.theme.text};font-size:15px;font-weight:600;`;\r\n label.textContent = \"Setting up secure session\";\r\n container.appendChild(label);\r\n\r\n const sub = document.createElement(\"div\");\r\n sub.style.cssText = `color:${this.theme.textMuted};font-size:12px;text-align:center;max-width:220px;line-height:1.5;`;\r\n sub.textContent = \"Connecting to the verification service...\";\r\n container.appendChild(sub);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Welcome \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderWelcome(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;\";\r\n\r\n const isDocFlow = this.isDocumentFlow();\r\n\r\n // Icon + badge row (side by side to save vertical space)\r\n const topRow = document.createElement(\"div\");\r\n topRow.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:8px;\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:50px;height:50px;border-radius:14px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:22px;\r\n background:linear-gradient(135deg,${this.theme.primary}22,${this.theme.primaryGlow});\r\n border:1.5px solid ${this.theme.primary}33;\r\n `;\r\n iconWrap.textContent = isDocFlow ? \"\u00F0\u0178\u00AA\u00AA\" : \"\u00F0\u0178\u203A\u00A1\u00EF\u00B8\u008F\";\r\n topRow.appendChild(iconWrap);\r\n\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:999px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n background:${this.theme.primary}15;\r\n color:${this.theme.primary};\r\n border:1px solid ${this.theme.primary}30;\r\n `;\r\n badge.textContent = isDocFlow ? \"\u00F0\u0178\u201C\u201E Document Verification\" : \"\u00F0\u0178\u201D\u008D Data Verification\";\r\n topRow.appendChild(badge);\r\n container.appendChild(topRow);\r\n\r\n // Title + subtitle (compact)\r\n const titleWrap = document.createElement(\"div\");\r\n titleWrap.style.cssText = \"display:flex;flex-direction:column;gap:5px;\";\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `\r\n color:${this.theme.text};font-size:20px;font-weight:700;\r\n margin:0;line-height:1.2;\r\n `;\r\n // W2: Use client brand name in title\r\n const brandName = this.sdkConfig?.brand_name;\r\n title.textContent = brandName\r\n ? `Verify your identity for ${brandName}`\r\n : \"Identity Verification\";\r\n titleWrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `\r\n color:${this.theme.textSecondary};font-size:13px;line-height:1.5;\r\n margin:0;max-width:300px;\r\n `;\r\n desc.textContent = isDocFlow\r\n ? \"You'll need your document and camera access. This takes about 2 minutes.\"\r\n : \"You'll need your ID number and camera access. This takes about 2 minutes.\";\r\n titleWrap.appendChild(desc);\r\n container.appendChild(titleWrap);\r\n\r\n // Steps preview \u00E2\u20AC\u201D compact rows\r\n const steps = isDocFlow\r\n ? [\r\n { icon: \"\u00F0\u0178\u00AA\u00AA\", text: \"Choose your document type\", sub: \"Passport, National ID, Driver License\" },\r\n { icon: \"\u00F0\u0178\u201C\u00B7\", text: \"Scan your document\", sub: \"Upload or capture a photo of your ID\" },\r\n { icon: \"\u00F0\u0178\u00A4\u00B3\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : [\r\n { icon: \"\u00F0\u0178\u2020\u201D\", text: \"Choose your ID type\", sub: \"NIN, BVN, Voter's Card and more\" },\r\n { icon: \"\u00F0\u0178\u201C\u009D\", text: \"Enter your ID details\", sub: \"Exactly as shown on your ID\" },\r\n { icon: \"\u00F0\u0178\u00A4\u00B3\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ];\r\n\r\n const stepsWrap = document.createElement(\"div\");\r\n stepsWrap.style.cssText = `\r\n width:100%;display:flex;flex-direction:column;gap:0;\r\n border-radius:12px;overflow:hidden;\r\n border:1.5px solid ${this.theme.border};\r\n `;\r\n\r\n steps.forEach((step, i) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `\r\n display:flex;align-items:center;gap:12px;\r\n padding:8px 14px;\r\n background:${this.theme.cardBg};\r\n ${i < steps.length - 1 ? `border-bottom:1px solid ${this.theme.border};` : \"\"}\r\n `;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:28px;height:28px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;\r\n background:${this.theme.primary}12;\r\n border:1px solid ${this.theme.primary}20;\r\n `;\r\n iconEl.textContent = step.icon;\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"display:flex;flex-direction:column;gap:1px;text-align:left;\";\r\n\r\n const textEl = document.createElement(\"span\");\r\n textEl.style.cssText = `color:${this.theme.text};font-size:12.5px;font-weight:600;`;\r\n textEl.textContent = step.text;\r\n\r\n const subEl = document.createElement(\"span\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:10.5px;`;\r\n subEl.textContent = step.sub;\r\n\r\n textWrap.appendChild(textEl);\r\n textWrap.appendChild(subEl);\r\n row.appendChild(iconEl);\r\n row.appendChild(textWrap);\r\n stepsWrap.appendChild(row);\r\n });\r\n\r\n container.appendChild(stepsWrap);\r\n\r\n // CTA\r\n const btn = this.createPrimaryButton(\"Get Started \u00E2\u2020\u2019\");\r\n btn.style.cssText += \"margin-top:2px;\";\r\n btn.addEventListener(\"click\", () => this.showStep(\"country\"));\r\n container.appendChild(btn);\r\n\r\n // Trust badge \u00E2\u20AC\u201D \"Powered by Adhere\" already lives in the persistent\r\n // modal footer below; repeating it here just cost vertical space.\r\n const trust = document.createElement(\"div\");\r\n trust.style.cssText = `\r\n display:flex;align-items:center;gap:6px;\r\n color:${this.theme.textMuted};font-size:10.5px;\r\n `;\r\n trust.textContent = \"\u00F0\u0178\u201D\u2019 End-to-end encrypted\";\r\n container.appendChild(trust);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Country Select \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderCountrySelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const countries = Object.keys(channels);\r\n\r\n // Auto-skip country selection if only one country available\r\n if (countries.length === 1) {\r\n this.selectedCountry = countries[0];\r\n this.showStep(\"id_type\");\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Select your country\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Choose the country that issued your ID\";\r\n container.appendChild(subtitle);\r\n\r\n for (const country of countries) {\r\n const card = this.createOptionCard(\r\n COUNTRY_LABELS[country] || country,\r\n `${channels[country].length} ID type${channels[country].length > 1 ? \"s\" : \"\"} available`,\r\n () => {\r\n this.selectedCountry = country;\r\n this.showStep(\"id_type\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC ID Type Select \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderIdTypeSelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const globalDocFlow = this.isDocumentFlow();\r\n\r\n const title = this.createStepTitle(globalDocFlow ? \"Select document type\" : \"Select ID type\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = globalDocFlow\r\n ? \"Choose the document you want to scan\"\r\n : \"Choose the ID you want to verify\";\r\n container.appendChild(subtitle);\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const idTypes = channels[this.selectedCountry] || [];\r\n\r\n for (const idType of idTypes) {\r\n const typeName = typeof idType === \"string\" ? idType : idType.name;\r\n // Use code (canonical) for API calls, fallback to name for backward compatibility\r\n const typeCode = typeof idType === \"string\" ? idType : (idType.code || idType.name);\r\n // Detect per-channel: does THIS specific channel have upload fields?\r\n const channelFields: any[] = typeof idType !== \"string\" ? (idType.fields || []) : [];\r\n const isThisDocFlow = channelFields.some((f: any) => isUploadFieldType(f.type)) || globalDocFlow;\r\n const info = resolveIdTypeInfo(typeName, isThisDocFlow);\r\n\r\n // Prefer the backend-provided back-side flag; fall back to local heuristics only when absent.\r\n const requiresBackFromBackend =\r\n typeof idType !== \"string\" ? (idType as SDKChannel).requires_back_side : undefined;\r\n const requiresBack = requiresBackFromBackend ?? info.requiresBack;\r\n\r\n // Add back side indicator to subtitle if needed\r\n let subtitle = info.desc;\r\n if (requiresBack && isThisDocFlow) {\r\n subtitle += \" \u00E2\u0161\u00A0\u00EF\u00B8\u008F Both sides required\";\r\n }\r\n\r\n // Clean display name \u00E2\u20AC\u201D strip \"with face\", \"(NIN)\", \"(BVN)\" from user-visible label\r\n const displayName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const card = this.createOptionCard(\r\n `${info.icon} ${displayName}`,\r\n subtitle,\r\n () => {\r\n const idTypeChanged = this.selectedIdType !== typeCode;\r\n this.selectedIdType = typeCode; // Store canonical code for API\r\n this.selectedIdTypeName = typeName; // Keep display name for UI\r\n this.selectedRequiresBack = requiresBack;\r\n // Always reset first to avoid stale state when user goes back and changes selection\r\n this.selectedChannelId = 0;\r\n this.selectedChannelFields = [];\r\n this.collectedFields = {};\r\n // Only discard an in-flight liveness/doc capture if the user actually changed ID type\r\n if (idTypeChanged) {\r\n this.livenessEntryId = null;\r\n this.documentBlob = null;\r\n this.documentBackBlob = null;\r\n }\r\n if (typeof idType !== \"string\") {\r\n this.selectedChannelId = idType.id;\r\n this.selectedChannelFields = idType.fields || []; // guard null/undefined from backend\r\n }\r\n // Route: use explicit verification_type when set (more reliable than inspecting all channels)\r\n // Fallback to per-channel upload field check for mixed / unconfigured setups\r\n const hasUpload = (this.selectedChannelFields).some((f: any) => isUploadFieldType(f.type));\r\n const vType = this.sdkConfig?.verification_type;\r\n const vTypes: string[] = vType ? (Array.isArray(vType) ? vType : [vType]) : [];\r\n const isDocChannel = hasUpload || (vTypes.length > 0 && vTypes.includes(\"document_verification\"));\r\n this.showStep(isDocChannel ? \"document_capture\" : \"id_input\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC ID Input (data verification \u00E2\u20AC\u201D dynamic fields) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderIdInput(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const dataFields = this.selectedChannelFields.filter((f) => f.type !== \"upload\");\r\n const info = resolveIdTypeInfo(this.selectedIdTypeName || this.selectedIdType, false);\r\n const cleanStepTitle = (this.selectedIdTypeName || this.selectedIdType)\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`${info.icon} ${cleanStepTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = dataFields.length > 0\r\n ? `Enter your ${this.selectedIdTypeName || this.selectedIdType} details exactly as they appear on your ID.`\r\n : \"Fill in the fields below to continue.\";\r\n container.appendChild(subtitle);\r\n\r\n // Edge case: no data fields configured \u00E2\u20AC\u201D show fallback and allow submission\r\n if (dataFields.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.style.cssText = `\r\n padding:16px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n color:${this.theme.textSecondary};font-size:13px;text-align:center;\r\n `;\r\n empty.textContent = \"No additional details required. Click below to continue.\";\r\n container.appendChild(empty);\r\n const autoBtn = this.createPrimaryButton(\"Continue\");\r\n autoBtn.addEventListener(\"click\", () => this.showStep(\"liveness\"));\r\n container.appendChild(autoBtn);\r\n return;\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Field format rules \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // Keyed by uppercased label substring \u00E2\u2020\u2019 { minLen, maxLen, numeric, pattern, hint }\r\n interface FieldRule {\r\n minLen?: number;\r\n maxLen?: number;\r\n numeric?: boolean; // only digits allowed\r\n alphanumeric?: boolean; // letters + digits only\r\n pattern?: RegExp;\r\n hint: string;\r\n }\r\n const _FIELD_RULES: Array<{ match: string; rule: FieldRule }> = [\r\n { match: \"BVN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"BVN must be exactly 11 digits\" } },\r\n { match: \"NIN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"NATIONAL IDENTITY\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"PASSPORT\", rule: { minLen: 6, maxLen: 20, alphanumeric: true, hint: \"Passport number must be 6\u00E2\u20AC\u201C20 alphanumeric characters\" } },\r\n { match: \"DRIVER\", rule: { minLen: 3, maxLen: 30, alphanumeric: true, hint: \"Licence number must be 3\u00E2\u20AC\u201C30 alphanumeric characters\" } },\r\n { match: \"VOTER\", rule: { minLen: 6, maxLen: 30, alphanumeric: true, hint: \"Voter ID must be 6\u00E2\u20AC\u201C30 alphanumeric characters\" } },\r\n { match: \"GHANA\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"Ghana Card number must be 8\u00E2\u20AC\u201C20 alphanumeric characters\" } },\r\n { match: \"SSNIT\", rule: { minLen: 7, maxLen: 15, alphanumeric: true, hint: \"SSNIT number must be 7\u00E2\u20AC\u201C15 alphanumeric characters\" } },\r\n { match: \"TIN\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"TIN must be 8\u00E2\u20AC\u201C20 characters\" } },\r\n { match: \"KRA\", rule: { minLen: 10, maxLen: 12, alphanumeric: true, hint: \"KRA PIN must be 10\u00E2\u20AC\u201C12 characters\" } },\r\n ];\r\n\r\n function getFieldRule(label: string): FieldRule | null {\r\n const upper = label.toUpperCase();\r\n for (const entry of _FIELD_RULES) {\r\n if (upper.includes(entry.match)) return entry.rule;\r\n }\r\n return null;\r\n }\r\n\r\n function validateFieldValue(label: string, value: string): string | null {\r\n const rule = getFieldRule(label);\r\n if (!rule) return null; // no rule = no validation\r\n const v = value.trim();\r\n if (rule.numeric && !/^\\d+$/.test(v)) return `${label} must contain digits only`;\r\n if (rule.alphanumeric && !/^[A-Za-z0-9]+$/.test(v)) return `${label} must be alphanumeric (letters and digits only)`;\r\n if (rule.minLen && v.length < rule.minLen) return rule.hint;\r\n if (rule.maxLen && v.length > rule.maxLen) return rule.hint;\r\n return null;\r\n }\r\n\r\n // Track input elements for validation\r\n const inputEls: { field: any; el: HTMLInputElement | HTMLSelectElement }[] = [];\r\n\r\n for (const field of dataFields) {\r\n // Send the raw label as the payload key \u00E2\u20AC\u201D the backend's\r\n // _SDK_FIELD_KEY_MAP looks up the exact label text (e.g. \"National ID\",\r\n // \"CAC Number\") to remap it to the canonical IVS key. Pre-normalizing\r\n // it here (as this used to do) produced keys like \"national_id\" that\r\n // don't match the map's literal-label entries and silently fall\r\n // through to the wrong key for several identity types.\r\n const fieldKey = field.label;\r\n\r\n const fieldWrap = document.createElement(\"div\");\r\n fieldWrap.style.cssText = \"display:flex;flex-direction:column;gap:6px;\";\r\n\r\n const labelId = `sc-field-label-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const label = document.createElement(\"label\");\r\n label.id = labelId;\r\n label.htmlFor = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n label.style.cssText = `color:${this.theme.textMuted};font-size:10px;font-weight:700;letter-spacing:0.6px;text-transform:uppercase;`;\r\n label.textContent = field.label;\r\n fieldWrap.appendChild(label);\r\n\r\n if (field.type === \"dropdown\" || field.type === \"select\") {\r\n // Dropdown field\r\n const select = document.createElement(\"select\");\r\n select.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:12px;\r\n font-size:15px;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;box-sizing:border-box;\r\n cursor:pointer;transition:border-color 0.2s ease;\r\n `;\r\n const placeholder = document.createElement(\"option\");\r\n placeholder.value = \"\";\r\n placeholder.textContent = `Select ${field.label}`;\r\n placeholder.disabled = true;\r\n placeholder.selected = true;\r\n select.appendChild(placeholder);\r\n\r\n for (const opt of field.options || []) {\r\n const option = document.createElement(\"option\");\r\n option.value = opt;\r\n option.textContent = opt;\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"focus\", () => { select.style.borderColor = this.theme.primary; });\r\n select.addEventListener(\"blur\", () => { select.style.borderColor = this.theme.border; });\r\n select.addEventListener(\"change\", () => {\r\n this.collectedFields[fieldKey] = select.value;\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(select);\r\n inputEls.push({ field, el: select });\r\n } else if (field.type === \"image\" || field.type === \"file\") {\r\n // File upload field \u00E2\u20AC\u201D converts to base64 for API submission\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/*\";\r\n fileInput.style.cssText = `\r\n width:100%;padding:12px 16px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px dashed ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;cursor:pointer;\r\n `;\r\n fileInput.addEventListener(\"focus\", () => {\r\n fileInput.style.borderColor = this.theme.primary;\r\n });\r\n fileInput.addEventListener(\"blur\", () => {\r\n fileInput.style.borderColor = this.theme.border;\r\n });\r\n fileInput.addEventListener(\"change\", () => {\r\n const file = fileInput.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const base64 = (reader.result as string).split(\",\")[1] || \"\";\r\n this.collectedFields[fieldKey] = base64;\r\n updateSubmitState();\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n });\r\n fieldWrap.appendChild(fileInput);\r\n inputEls.push({ field, el: fileInput as any });\r\n } else {\r\n // Text input field\r\n const inputId = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const hintId = `sc-field-hint-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const rule = getFieldRule(field.label);\r\n\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.id = inputId;\r\n input.setAttribute(\"aria-labelledby\", labelId);\r\n input.setAttribute(\"aria-describedby\", hintId);\r\n input.placeholder = `Enter ${field.label}`;\r\n input.maxLength = rule?.maxLen ? rule.maxLen + 2 : 50;\r\n if (rule?.numeric) input.inputMode = \"numeric\";\r\n input.style.cssText = `\r\n width:100%;padding:14px 16px;border-radius:12px;\r\n font-size:16px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;\r\n letter-spacing:0.5px;\r\n `;\r\n\r\n // Inline hint/error element\r\n const hintEl = document.createElement(\"div\");\r\n hintEl.id = hintId;\r\n hintEl.setAttribute(\"aria-live\", \"polite\");\r\n hintEl.style.cssText = `font-size:11px;min-height:14px;margin-top:-2px;`;\r\n if (rule) {\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule.hint;\r\n }\r\n\r\n input.addEventListener(\"focus\", () => {\r\n input.style.borderColor = this.theme.primary;\r\n });\r\n input.addEventListener(\"blur\", () => {\r\n const v = input.value.trim();\r\n if (v) {\r\n const err = validateFieldValue(field.label, v);\r\n if (err) {\r\n input.style.borderColor = this.theme.error;\r\n hintEl.style.color = this.theme.error;\r\n hintEl.textContent = err;\r\n input.setAttribute(\"aria-invalid\", \"true\");\r\n } else {\r\n input.style.borderColor = this.theme.success || this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.setAttribute(\"aria-invalid\", \"false\");\r\n }\r\n } else {\r\n input.style.borderColor = this.theme.border;\r\n }\r\n });\r\n input.addEventListener(\"input\", () => {\r\n // Reset error styling while typing\r\n input.style.borderColor = this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.removeAttribute(\"aria-invalid\");\r\n this.collectedFields[fieldKey] = input.value.trim();\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(input);\r\n fieldWrap.appendChild(hintEl);\r\n inputEls.push({ field, el: input });\r\n }\r\n container.appendChild(fieldWrap);\r\n }\r\n\r\n // Error area\r\n const errorEl = document.createElement(\"div\");\r\n errorEl.id = \"sc-id-error\";\r\n errorEl.style.cssText = `\r\n color:${this.theme.error};font-size:13px;display:none;\r\n padding:8px 12px;border-radius:8px;background:${this.theme.errorBg};\r\n `;\r\n container.appendChild(errorEl);\r\n\r\n // Submit\r\n const submitBtn = this.createPrimaryButton(\"Verify & Continue\");\r\n submitBtn.disabled = true;\r\n submitBtn.style.opacity = \"0.5\";\r\n\r\n const updateSubmitState = () => {\r\n // All inputs must have a value AND pass format validation\r\n const allFilled = inputEls.every(({ el }) => el.value.trim().length > 0);\r\n const allValid = inputEls.every(({ field, el }) => {\r\n if (el.tagName === \"SELECT\") return el.value.trim().length > 0;\r\n return !validateFieldValue(field.label, el.value.trim());\r\n });\r\n const ok = allFilled && allValid;\r\n submitBtn.disabled = !ok;\r\n submitBtn.style.opacity = ok ? \"1\" : \"0.5\";\r\n };\r\n\r\n submitBtn.addEventListener(\"click\", async () => {\r\n submitBtn.disabled = true;\r\n submitBtn.innerHTML = `<span style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;\"><span style=\"width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,0.3);border-top-color:#fff;animation:sc-spin 0.6s linear infinite;display:inline-block;flex-shrink:0;\"></span>Verifying...</span>`;\r\n errorEl.style.display = \"none\";\r\n\r\n try {\r\n this.verificationResult = await this.sdk.onboarding.verify({\r\n identity_type_id: this.selectedChannelId,\r\n fields: { ...this.collectedFields },\r\n });\r\n\r\n if (this.verificationResult.status === \"success\") {\r\n // Save identifier and identity_check_id for liveness step\r\n const fieldValues = Object.values(this.collectedFields);\r\n this.idNumber = fieldValues[0] || \"\";\r\n this.identityCheckId = (this.verificationResult as any).data?.identity_check_id || null;\r\n\r\n // W3: Store name + gender from IVS result for confirmation screen\r\n const d = (this.verificationResult as any).data || {};\r\n const nd = d.normalized_data || d.data || d;\r\n this._ivsName = [nd.first_name || nd.firstname || \"\", nd.last_name || nd.lastname || nd.surname || \"\"]\r\n .map(s => String(s || \"\").trim()).filter(Boolean).join(\" \");\r\n this._ivsGender = nd.gender || \"\";\r\n\r\n // Route to confirmation screen \u00E2\u20AC\u201D user must confirm before liveness\r\n this.showStep(\"confirm_identity\");\r\n } else {\r\n errorEl.textContent = this.verificationResult.message || \"We could not verify your details. Please check and try again.\";\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n } catch (err: any) {\r\n // Show a single plain-language error \u00E2\u20AC\u201D never raw field:message format\r\n const fieldErrors = err.data?.errors;\r\n if (Array.isArray(fieldErrors) && fieldErrors.length > 0) {\r\n // Pick the first meaningful error message \u00E2\u20AC\u201D strip field prefix\r\n const firstMsg = fieldErrors[0]?.message || fieldErrors[0]?.detail || \"\";\r\n errorEl.textContent = _sanitizeUserMessage(firstMsg)\r\n || \"Please check your details and try again.\";\r\n } else if (err.code === \"VERIFICATION_FAILED\") {\r\n errorEl.textContent = \"We could not verify those details. Please check your ID number and try again.\";\r\n } else if (err.code === \"CHANNEL_NOT_CONFIGURED\") {\r\n errorEl.textContent = \"This ID type is not currently available. Please choose a different option.\";\r\n } else if (err.code === \"INSUFFICIENT_BALANCE\") {\r\n errorEl.textContent = \"Verification is temporarily unavailable. Please contact support.\";\r\n } else {\r\n errorEl.textContent = _sanitizeUserMessage(err.message)\r\n || \"Something went wrong. Please try again.\";\r\n }\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n });\r\n container.appendChild(submitBtn);\r\n\r\n\r\n // Focus first input\r\n const firstInput = inputEls[0]?.el;\r\n if (firstInput && firstInput instanceof HTMLInputElement) {\r\n setTimeout(() => firstInput.focus(), 350);\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Document Capture \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n \r\n private renderDocumentCapture(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // Strip \"with face\", \"(NIN)\", \"(BVN)\" noise from the user-visible title\r\n const rawName = this.selectedIdTypeName || this.selectedIdType || \"your document\";\r\n const cleanDocTitle = rawName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`Capture ${cleanDocTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Upload or capture your document photo. Ensure it's clear and readable.\";\r\n container.appendChild(subtitle);\r\n\r\n const captureContainer = document.createElement(\"div\");\r\n captureContainer.style.cssText = `\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n position: relative;\r\n overflow: hidden;\r\n border-radius: 12px;\r\n background: ${this.theme.cardBg};\r\n border: 2px solid ${this.theme.border};\r\n `;\r\n container.appendChild(captureContainer);\r\n\r\n // Use the new DocumentCapture component with front/back support\r\n this.docCapture = new DocumentCapture();\r\n this.docCapture\r\n .capture(\r\n captureContainer,\r\n this.theme,\r\n this.selectedIdTypeName || this.selectedIdType,\r\n this.selectedRequiresBack\r\n )\r\n .then(async (result: DocumentCaptureResult) => {\r\n await this.processDocumentCaptureResult(result, captureContainer, container);\r\n })\r\n .catch((err: any) => {\r\n console.error(\"Document capture failed:\", err);\r\n this.showErrorStep(err.message || \"Document capture failed. Please try again.\");\r\n });\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W3: Identity Confirmation (data verification) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderConfirmIdentity(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit before showing screen\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera silently while user reads this screen\r\n this._prewarmCamera();\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n iconWrap.textContent = \"\u00F0\u0178\u203A\u00A1\u00EF\u00B8\u008F\";\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = this._ivsName ? `Is this you?` : \"Identity Confirmed\";\r\n container.appendChild(title);\r\n\r\n if (this._ivsName) {\r\n // Profile card\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const rows: { label: string; value: string }[] = [\r\n { label: \"Name\", value: this._ivsName },\r\n ];\r\n if (this._ivsGender) {\r\n const gLabel = this._ivsGender.toLowerCase();\r\n rows.push({ label: \"Gender\", value: gLabel === \"m\" || gLabel === \"male\" || gLabel === \"1\" ? \"Male\" : gLabel === \"f\" || gLabel === \"female\" || gLabel === \"2\" ? \"Female\" : this._ivsGender });\r\n }\r\n rows.push({ label: \"ID Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName || this.selectedIdType });\r\n\r\n rows.forEach(({ label, value }) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n container.appendChild(card);\r\n } else {\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n sub.textContent = \"Your details have been confirmed. Please continue to the face check.\";\r\n container.appendChild(sub);\r\n }\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, that's me \u00E2\u20AC\u201D continue\");\r\n yesBtn.addEventListener(\"click\", () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, use a different ID\");\r\n noBtn.addEventListener(\"click\", () => {\r\n this._confirmRetries++;\r\n this._ivsName = \"\";\r\n this._ivsGender = \"\";\r\n this.identityCheckId = null;\r\n this.verificationResult = null;\r\n this.showStep(\"id_input\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W4: Document Confirmation (document verification) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderDocumentConfirm(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera while user reads\r\n this._prewarmCamera();\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n iconWrap.textContent = \"\u00F0\u0178\u201C\u201E\";\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = \"Are these your details?\";\r\n container.appendChild(title);\r\n\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.5;`;\r\n sub.textContent = \"We read the following from your document. Please confirm they are correct before continuing.\";\r\n container.appendChild(sub);\r\n\r\n // Document face thumbnail if available\r\n if (this._ocrFaceImageUrl) {\r\n const faceWrap = document.createElement(\"div\");\r\n faceWrap.style.cssText = `width:80px;height:80px;border-radius:50%;overflow:hidden;border:3px solid ${this.theme.primary};flex-shrink:0;margin:0 auto;`;\r\n const faceImg = document.createElement(\"img\");\r\n faceImg.src = this._ocrFaceImageUrl;\r\n faceImg.alt = \"Photo from your document\";\r\n faceImg.style.cssText = \"width:100%;height:100%;object-fit:cover;\";\r\n faceWrap.appendChild(faceImg);\r\n container.appendChild(faceWrap);\r\n }\r\n\r\n // Expiry soon warning\r\n if (this._ocrExpirySoon && !this._ocrIsExpired) {\r\n const warn = document.createElement(\"div\");\r\n warn.style.cssText = `width:100%;padding:10px 14px;border-radius:10px;background:${this.theme.warning}18;border:1px solid ${this.theme.warning}40;color:${this.theme.warning};font-size:12px;text-align:left;line-height:1.5;`;\r\n warn.textContent = \"\u00E2\u0161\u00A0\u00EF\u00B8\u008F Your document expires soon. Some services may not accept it, but you can still continue.\";\r\n container.appendChild(warn);\r\n }\r\n\r\n // Details card \u00E2\u20AC\u201D show whatever OCR returned, never block on missing fields\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:14px 16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const docRows: { label: string; value: string }[] = [];\r\n if (this._ocrName) docRows.push({ label: \"Name\", value: this._ocrName });\r\n if (this._ocrDocNumber) docRows.push({ label: \"Document No\", value: this._ocrDocNumber });\r\n if (this._ocrExpiry) docRows.push({ label: \"Expires\", value: this._ocrExpiry });\r\n docRows.push({ label: \"Document Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName });\r\n\r\n if (docRows.length === 0) {\r\n const fallback = document.createElement(\"div\");\r\n fallback.style.cssText = `color:${this.theme.textSecondary};font-size:12px;`;\r\n fallback.textContent = \"Document scanned successfully.\";\r\n card.appendChild(fallback);\r\n } else {\r\n docRows.forEach(({ label, value }) => {\r\n if (!value) return;\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n }\r\n container.appendChild(card);\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, continue\");\r\n yesBtn.addEventListener(\"click\", () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, retake document\");\r\n noBtn.addEventListener(\"click\", () => {\r\n this._confirmRetries++;\r\n this._ocrName = \"\"; this._ocrDocNumber = \"\"; this._ocrExpiry = \"\";\r\n this._ocrFaceImageUrl = \"\"; this._ocrIsExpired = false; this._ocrExpirySoon = false;\r\n this.livenessEntryId = null;\r\n this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W6+W7+W8: OCR Gate (document verification) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderOcrGate(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:14px;padding:20px 0;text-align:center;\";\r\n\r\n const spinnerWrap = document.createElement(\"div\");\r\n spinnerWrap.style.cssText = \"position:relative;width:52px;height:52px;flex-shrink:0;\";\r\n const ring = document.createElement(\"div\");\r\n ring.style.cssText = `position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.9s linear infinite;`;\r\n const centre = document.createElement(\"div\");\r\n centre.style.cssText = \"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\";\r\n centre.textContent = \"\u00F0\u0178\u201C\u201E\";\r\n spinnerWrap.appendChild(ring);\r\n spinnerWrap.appendChild(centre);\r\n container.appendChild(spinnerWrap);\r\n\r\n const statusEl = document.createElement(\"div\");\r\n statusEl.setAttribute(\"aria-live\", \"polite\");\r\n statusEl.style.cssText = `color:${this.theme.text};font-size:15px;font-weight:600;`;\r\n statusEl.textContent = \"Reading your document\u00E2\u20AC\u00A6\";\r\n container.appendChild(statusEl);\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textSecondary};font-size:12px;max-width:260px;line-height:1.5;`;\r\n subEl.textContent = \"This usually takes 5\u00E2\u20AC\u201C15 seconds. Please wait.\";\r\n container.appendChild(subEl);\r\n\r\n if (!this.livenessEntryId) {\r\n this.showErrorStep(\"Document upload failed. Please try again.\");\r\n return;\r\n }\r\n\r\n const entryId = this.livenessEntryId;\r\n const MAX_POLLS = 10; // 10 \u00C3\u2014 2s = 20s timeout\r\n let polls = 0;\r\n\r\n const poll = async () => {\r\n if (this.isDestroyed) return;\r\n polls++;\r\n try {\r\n const result = await this.sdk.liveness.pollResult(entryId) as any;\r\n\r\n // W7: Expired document \u00E2\u20AC\u201D stop, do not proceed to liveness\r\n if (result.is_expired === true) {\r\n container.innerHTML = \"\";\r\n this._renderExpiredDocument(container);\r\n return;\r\n }\r\n\r\n // W8: OCR quality fail \u00E2\u20AC\u201D offer retake\r\n if (result.ocr_quality_failed === true) {\r\n container.innerHTML = \"\";\r\n this._renderOcrQualityFail(container, result.ocr_rejection_reason);\r\n return;\r\n }\r\n\r\n // OCR complete \u00E2\u20AC\u201D store data and show confirmation screen\r\n const ocrDone = result.ocr_status === \"done\" || result.ocr_status === \"ocr_complete\"\r\n || result.ocr_name || result.ocr_document_number || result.ocr_expiry_date;\r\n\r\n if (ocrDone) {\r\n this._ocrName = result.ocr_name || \"\";\r\n this._ocrDocNumber = result.ocr_document_number || \"\";\r\n this._ocrExpiry = result.ocr_expiry_date || \"\";\r\n this._ocrFaceImageUrl = result.ocr_face_image_url || \"\";\r\n this._ocrIsExpired = result.is_expired === true;\r\n\r\n // B8: Normalise expiry date string before parsing \u00E2\u20AC\u201D OCR may return\r\n // DD/MM/YYYY, DD-MM-YYYY, YYYY-MM-DD, or \"12 May 2029\" etc.\r\n // new Date() alone is locale-dependent on non-ISO strings.\r\n if (this._ocrExpiry) {\r\n const expDate = _parseOcrDate(this._ocrExpiry);\r\n if (expDate) {\r\n const sixMonths = new Date();\r\n sixMonths.setMonth(sixMonths.getMonth() + 6);\r\n this._ocrExpirySoon = expDate <= sixMonths && expDate > new Date();\r\n }\r\n }\r\n\r\n this.showStep(\"document_confirm\");\r\n return;\r\n }\r\n\r\n // Still pending \u00E2\u20AC\u201D keep polling\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 2000);\r\n } else if (!this.isDestroyed) {\r\n // Timeout \u00E2\u20AC\u201D proceed anyway with whatever we have\r\n statusEl.textContent = \"Taking longer than usual\u00E2\u20AC\u00A6\";\r\n subEl.textContent = \"We'll continue \u00E2\u20AC\u201D you can confirm your details on the next screen.\";\r\n this._ocrPollTimer = setTimeout(() => {\r\n if (!this.isDestroyed) this.showStep(\"document_confirm\");\r\n }, 2000);\r\n }\r\n } catch {\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n } else if (!this.isDestroyed) {\r\n this.showErrorStep(\"We could not read your document. Please check your connection and try again.\");\r\n }\r\n }\r\n };\r\n\r\n // First poll after 3s \u00E2\u20AC\u201D give OCR submission time to start\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n }\r\n\r\n private _renderExpiredDocument(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"\u00F0\u0178\u201C\u2026\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n t.textContent = \"Document Expired\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Try a different document\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n const endBtn = this.createSecondaryButton(\"End session\");\r\n endBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Document expired\")); this.close(); });\r\n container.appendChild(endBtn);\r\n }\r\n\r\n private _renderOcrQualityFail(container: HTMLElement, reason?: string): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"\u00F0\u0178\u201D\u008D\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n t.textContent = \"Document Photo Unclear\";\r\n container.appendChild(t);\r\n const msg = reason === \"image_too_blurry\" ? \"Your document photo is too blurry. Please retake it in good lighting with a steady hand.\"\r\n : reason === \"image_too_dark\" ? \"Your document photo is too dark. Please retake it in better lighting.\"\r\n : reason === \"image_too_bright\" ? \"Your document photo has too much glare. Please reduce reflections and retake.\"\r\n : reason === \"document_not_detected\" ? \"We could not detect a document in the photo. Please ensure the full ID is visible.\"\r\n : \"We could not read your document clearly. Please retake the photo in good lighting with no glare.\";\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = msg;\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Retake photo\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W11: You're all done (end-user final screen) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderDone(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:24px 0;\";\r\n container.setAttribute(\"role\", \"status\");\r\n\r\n // B7: Fire onComplete immediately when the done screen renders \u00E2\u20AC\u201D the end\r\n // user has completed their part regardless of whether they click Close.\r\n // Firing here means the integrator always gets the event even if the user\r\n // closes the modal via the \u00E2\u0153\u2022 button instead of the Close button.\r\n this.options.onComplete?.({\r\n entryId: this.livenessEntryId || 0,\r\n sessionId: this.sdk.sessionToken,\r\n status: \"processing\",\r\n submittedAt: new Date().toISOString(),\r\n verificationResult: this.verificationResult || undefined,\r\n });\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:80px;height:80px;border-radius:50%;background:${this.theme.successBg};border:3px solid ${this.theme.success};display:flex;align-items:center;justify-content:center;font-size:36px;font-weight:700;color:${this.theme.success};animation:sc-pop 0.4s ease;`;\r\n iconWrap.textContent = \"\u00E2\u0153\u201C\";\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:22px;font-weight:700;margin:0;`;\r\n title.textContent = \"You're all done!\";\r\n container.appendChild(title);\r\n\r\n const brandName = this.sdkConfig?.brand_name || \"the service\";\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = `Your verification is complete. ${brandName} will review and be in touch shortly.`;\r\n container.appendChild(desc);\r\n\r\n // Subtle info line\r\n const info = document.createElement(\"div\");\r\n info.style.cssText = `color:${this.theme.textMuted};font-size:11px;display:flex;align-items:center;gap:4px;`;\r\n info.textContent = \"\u00F0\u0178\u201D\u2019 Your data is encrypted and secure\";\r\n container.appendChild(info);\r\n\r\n const doneBtn = this.createPrimaryButton(\"Close\");\r\n doneBtn.addEventListener(\"click\", () => {\r\n // onComplete already fired on render \u00E2\u20AC\u201D just close the modal\r\n this.close();\r\n });\r\n container.appendChild(doneBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W14: Retry limit reached \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private _renderRetryLimitReached(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:24px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"\u00E2\u0161\u00A0\u00EF\u00B8\u008F\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n t.textContent = \"Unable to Complete Verification\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"We were unable to complete your verification at this time. Please contact support or try again later.\";\r\n container.appendChild(d);\r\n const closeBtn = this.createPrimaryButton(\"Close\");\r\n closeBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Retry limit reached\")); this.close(); });\r\n container.appendChild(closeBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W13: Camera pre-warm \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private _prewarmCamera(): void {\r\n if (this._prewarmedStream || this.isDestroyed) return;\r\n navigator.mediaDevices?.getUserMedia?.({ video: { facingMode: \"user\" } })\r\n .then(stream => {\r\n if (this.isDestroyed) { stream.getTracks().forEach(t => t.stop()); return; }\r\n this._prewarmedStream = stream;\r\n })\r\n .catch(() => { /* silent \u00E2\u20AC\u201D pre-warm is best effort */ });\r\n }\r\n\r\n /**\r\n * Process document capture result with front/back support\r\n */\r\n private async processDocumentCaptureResult(\r\n result: DocumentCaptureResult,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n // B2+P2: Compress both images once here. Do NOT assign documentBlob twice\r\n // (old code set it to the raw blob first, then overwrote with compressed).\r\n // processDocumentBlob also ran _compressImage \u00E2\u20AC\u201D that second pass is removed\r\n // below so compression only happens once.\r\n this.documentBlob = await _compressImage(result.front, 1600, 0.85);\r\n this.documentBackBlob = result.back ? await _compressImage(result.back, 1600, 0.85) : null;\r\n\r\n // Process the front image \u00E2\u20AC\u201D pass the already-compressed blob\r\n await this.processDocumentBlob(this.documentBlob, captureContainer, container);\r\n }\r\n\r\n /**\r\n * Process document blob - common method for both CameraView and DocumentCapture\r\n */\r\n private async processDocumentBlob(\r\n blob: Blob,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n const maxRetries = 2;\r\n let retryCount = 0;\r\n\r\n const attemptProcessing = async (): Promise<void> => {\r\n try {\r\n // Validate blob \u00E2\u20AC\u201D compression already done in processDocumentCaptureResult (P2)\r\n if (!blob || blob.size === 0) {\r\n throw new Error(\"Failed to capture document. Please try again.\");\r\n }\r\n if (blob.size > 5 * 1024 * 1024) {\r\n throw new Error(\"Document image is too large. Please retake in better lighting or use a clearer photo.\");\r\n }\r\n\r\n this.documentBlob = blob;\r\n\r\n // Show scanning state\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 20px;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\u00F0\u0178\u201D\u008D</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Scanning document...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;text-align:center;max-width:200px;line-height:1.5;\">Running OCR and verifying your identity</div>\r\n </div>`;\r\n\r\n // Create liveness entry with document.\r\n // Use the first collected field value as identifier when available\r\n // (document flow has no data-verification step, so collectedFields is\r\n // empty \u00E2\u20AC\u201D fall back to the selected ID type code so the webhook\r\n // subject.identifier is at least human-meaningful, not a raw timestamp).\r\n const identifier = Object.values(this.collectedFields)[0]\r\n || this.idNumber\r\n || this.selectedIdType\r\n || `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n const deviceMeta = collectDeviceMetadata();\r\n let createResult;\r\n try {\r\n createResult = await this.sdk.liveness.create({\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n challenge_actions: [\"BLINK\", \"TURN_HEAD\", \"OPEN_MOUTH\"],\r\n document: blob,\r\n document_back: this.documentBackBlob || undefined,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n } catch (apiError: any) {\r\n // Handle specific network and API errors\r\n if (apiError.message?.includes('fetch') || apiError.message?.includes('network') || apiError.code === 'NETWORK_ERROR') {\r\n throw new Error(\"Network connection failed. Please check your internet connection and try again.\");\r\n } else if (apiError.message?.includes('413') || apiError.message?.includes('too large')) {\r\n throw new Error(\"Document image is too large. Please use a smaller image or retake the photo.\");\r\n } else if (apiError.message?.includes('415') || apiError.message?.includes('format')) {\r\n throw new Error(\"Unsupported image format. Please use JPEG or PNG images.\");\r\n } else if (apiError.message?.includes('401') || apiError.message?.includes('unauthorized')) {\r\n throw new Error(\"Session expired. Please refresh the page and try again.\");\r\n } else if (apiError.message?.includes('429') || apiError.message?.includes('rate limit')) {\r\n throw new Error(\"Too many requests. Please wait a moment and try again.\");\r\n } else {\r\n throw new Error(apiError.message || \"Failed to process document. Please try again.\");\r\n }\r\n }\r\n\r\n this.livenessEntryId = createResult.id;\r\n\r\n // W6: Route to OCR gate \u00E2\u20AC\u201D poll until OCR result is ready, validate\r\n // expiry/quality, then show document_confirm before liveness starts.\r\n this.showStep(\"ocr_gate\");\r\n\r\n } catch (err: any) {\r\n console.error(\"Document processing failed:\", err);\r\n \r\n if (retryCount < maxRetries) {\r\n retryCount++;\r\n console.log(`Retrying document processing (attempt ${retryCount}/${maxRetries})`);\r\n \r\n // Show retry message\r\n if (captureContainer) {\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\u00F0\u0178\u201D\u201E</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Retrying...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;max-width:240px;line-height:1.5;\">Attempt ${retryCount} of ${maxRetries}</div>\r\n </div>`;\r\n }\r\n \r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n return attemptProcessing();\r\n } else {\r\n // Final retry failed, show detailed error\r\n this.handleDocumentProcessingError(err, captureContainer);\r\n }\r\n }\r\n };\r\n\r\n await attemptProcessing();\r\n }\r\n\r\n private handleDocumentProcessingError(error: any, captureContainer: HTMLElement): void {\r\n // Map technical errors to user-friendly messages \u00E2\u20AC\u201D never pass raw error strings\r\n let userMessage = \"We could not verify your document. Please try again.\";\r\n let canRetry = true;\r\n\r\n const raw = (error?.message || \"\").toLowerCase();\r\n if (raw.includes(\"expired\")) {\r\n userMessage = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n canRetry = false;\r\n } else if (raw.includes(\"quality too low\") || raw.includes(\"blurry\") || raw.includes(\"blur\")) {\r\n userMessage = \"The document photo isn't clear enough. Please retake it in good lighting with no glare.\";\r\n } else if (raw.includes(\"not detected\") || raw.includes(\"document_not_detected\")) {\r\n userMessage = \"We could not detect a document in the photo. Please ensure the full ID is visible and try again.\";\r\n } else if (raw.includes(\"network\") || raw.includes(\"fetch\") || raw.includes(\"connection\")) {\r\n userMessage = \"A connection error occurred. Please check your internet and try again.\";\r\n } else if (raw.includes(\"too large\") || raw.includes(\"413\")) {\r\n userMessage = \"The document image is too large. Please retake the photo.\";\r\n } else if (raw.includes(\"format\") || raw.includes(\"415\")) {\r\n userMessage = \"Unsupported image format. Please use JPEG or PNG.\";\r\n } else if (raw.includes(\"type mismatch\") || raw.includes(\"document_type_mismatch\")) {\r\n userMessage = \"The document does not match the selected ID type. Please choose the correct ID type.\";\r\n }\r\n\r\n if (captureContainer) {\r\n // Build with DOM \u00E2\u20AC\u201D never interpolate user-derived content into innerHTML\r\n const wrap = document.createElement(\"div\");\r\n wrap.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\";\r\n wrap.setAttribute(\"role\", \"alert\");\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:56px;height:56px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:26px;`;\r\n icon.textContent = \"\u00F0\u0178\u201D\u008D\";\r\n wrap.appendChild(icon);\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:700;`;\r\n titleEl.textContent = \"Document Could Not Be Verified\";\r\n wrap.appendChild(titleEl);\r\n\r\n const msgEl = document.createElement(\"div\");\r\n msgEl.style.cssText = `color:${this.theme.textSecondary};font-size:13px;max-width:260px;line-height:1.6;`;\r\n msgEl.textContent = userMessage;\r\n wrap.appendChild(msgEl);\r\n\r\n if (canRetry) {\r\n const retryBtn = document.createElement(\"button\");\r\n retryBtn.textContent = \"Try Again\";\r\n retryBtn.setAttribute(\"aria-label\", \"Retake document photo\");\r\n retryBtn.style.cssText = `margin-top:8px;padding:12px 24px;border-radius:8px;background:${this.theme.primary};color:#fff;border:none;font-size:14px;font-weight:600;cursor:pointer;`;\r\n retryBtn.addEventListener(\"click\", () => this.showStep(\"document_capture\"));\r\n wrap.appendChild(retryBtn);\r\n }\r\n\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.appendChild(wrap);\r\n } else {\r\n this.showErrorStep(userMessage);\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Liveness \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderLiveness(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const title = this.createStepTitle(\"Face verification\");\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;line-height:1.5;`;\r\n desc.textContent = \"Position your face in the oval and follow the on-screen instructions.\";\r\n container.appendChild(desc);\r\n\r\n // Liveness mount point\r\n const livenessContainer = document.createElement(\"div\");\r\n livenessContainer.style.cssText = \"margin:8px 0;width:100%;\";\r\n container.appendChild(livenessContainer);\r\n\r\n // W10: For data verification, identifier is already held by the backend\r\n // via identity_check_id \u00E2\u20AC\u201D do not re-send it in liveness create.\r\n const identifier = this.identityCheckId\r\n ? \"\" // data verification \u00E2\u20AC\u201D session holds context via identity_check_id\r\n : (this.idNumber || Object.values(this.collectedFields)[0] || this.selectedIdType || `DOC-${Date.now()}`);\r\n\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n // Start liveness check (this handles camera, detection, recording, submission)\r\n // If livenessEntryId exists (document flow), reuse it instead of creating a new one\r\n this.sdk.liveness\r\n .startCheck(\r\n livenessContainer,\r\n {\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n document: this.documentBlob || undefined,\r\n document_back: this.documentBackBlob || undefined,\r\n identity_check: this.identityCheckId || undefined,\r\n verification_type: this.identityCheckId\r\n ? \"data_verification\"\r\n : this.documentBlob\r\n ? \"document_verification\"\r\n : \"liveness_only\",\r\n // B4: pass pre-warmed stream so camera.open() is skipped\r\n prewarmedStream: this._prewarmedStream || undefined,\r\n },\r\n [\"BLINK\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as ChallengeAction[],\r\n this.livenessEntryId || undefined\r\n )\r\n .then((result) => {\r\n // W11: After submit, end user is done \u00E2\u20AC\u201D show \"You're all done\" screen.\r\n // Backend processing continues in background; client receives webhook.\r\n // Track liveness failures for retry limit (W14).\r\n if (result.status === \"failed\") {\r\n this._livenessFailures++;\r\n }\r\n if (result.id) {\r\n this.livenessEntryId = result.id;\r\n }\r\n this.showStep(\"done\");\r\n })\r\n .catch((err) => {\r\n this._livenessFailures++;\r\n this.showErrorStep(err.message || \"Liveness verification failed. Please try again.\");\r\n });\r\n }\r\n\r\n private renderResult(_container: HTMLElement): void {\r\n // C2: Dead code \u00E2\u20AC\u201D flow routes to 'done' step, not 'result'. Kept as stub.\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Error \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private showErrorStep(message: string): void {\r\n this.currentStep = \"error\";\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.setAttribute(\"role\", \"alert\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n `;\r\n\r\n // Classify the error into a user-friendly category\r\n const isCameraErr = /camera|permission|notallowed|notfound/i.test(message);\r\n const isNetworkErr = /network|timeout|connection|fetch/i.test(message);\r\n const isAuthErr = /session.*expired|token.*expired|authentication/i.test(message);\r\n const isDocQuality = /blurry|blur|quality|glare|dark|bright|lighting/i.test(message);\r\n const isExpiredDoc = /document.*expired|expired.*document/i.test(message);\r\n const isFaceMatch = /face.*match|selfie.*match|does not match/i.test(message);\r\n\r\n const errorIcon = isCameraErr ? \"\u00F0\u0178\u201C\u00B7\"\r\n : isNetworkErr ? \"\u00F0\u0178\u201C\u00A1\"\r\n : isAuthErr ? \"\u00E2\u008F\u00B1\"\r\n : isDocQuality ? \"\u00F0\u0178\u201D\u008D\"\r\n : isExpiredDoc ? \"\u00F0\u0178\u201C\u2026\"\r\n : isFaceMatch ? \"\u00F0\u0178\u00A4\u00B3\"\r\n : \"\u00E2\u0153\u2022\";\r\n\r\n const errorTitle = isCameraErr ? \"Camera Access Required\"\r\n : isNetworkErr ? \"Connection Problem\"\r\n : isAuthErr ? \"Session Expired\"\r\n : isDocQuality ? \"Document Photo Unclear\"\r\n : isExpiredDoc ? \"Document Expired\"\r\n : isFaceMatch ? \"Face Match Failed\"\r\n : \"Verification Unsuccessful\";\r\n\r\n // Map to user-facing guidance \u00E2\u20AC\u201D never show raw internal message\r\n const userMessage = isCameraErr\r\n ? \"Please allow camera access in your browser settings and try again.\"\r\n : isNetworkErr\r\n ? \"Check your internet connection and try again.\"\r\n : isAuthErr\r\n ? \"Your session has expired. Please start again.\"\r\n : isDocQuality\r\n ? _sanitizeUserMessage(message) || \"Please retake your document photo in good lighting with no glare.\"\r\n : isExpiredDoc\r\n ? \"The document you submitted has expired. Please use a valid, current ID.\"\r\n : isFaceMatch\r\n ? \"Your selfie did not match the photo on your ID. Please ensure you are using your own valid document and face the camera directly.\"\r\n : _sanitizeUserMessage(message) || \"We were unable to complete your verification. Please try again.\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:72px;height:72px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:28px;\r\n background:${this.theme.errorBg};\r\n border:3px solid ${this.theme.error};\r\n `;\r\n iconWrap.textContent = errorIcon;\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = errorTitle;\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = userMessage;\r\n wrapper.appendChild(desc);\r\n\r\n const retryBtn = this.createPrimaryButton(\"Try Again\");\r\n retryBtn.setAttribute(\"aria-label\", \"Try verification again\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.initialize();\r\n });\r\n wrapper.appendChild(retryBtn);\r\n\r\n const closeBtn = this.createSecondaryButton(\"Close\");\r\n closeBtn.setAttribute(\"aria-label\", \"Close verification widget\");\r\n closeBtn.addEventListener(\"click\", () => {\r\n this.options.onError?.(new Error(message));\r\n this.close();\r\n });\r\n wrapper.appendChild(closeBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // UI Helpers\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private createHeader(): HTMLElement {\r\n const header = document.createElement(\"div\");\r\n header.setAttribute(\"role\", \"banner\");\r\n header.style.cssText = `\r\n display:flex;align-items:center;justify-content:space-between;\r\n padding:11px 20px;border-bottom:1px solid ${this.theme.border};\r\n `;\r\n\r\n // Left: back button + brand\r\n const leftArea = document.createElement(\"div\");\r\n leftArea.style.cssText = \"display:flex;align-items:center;gap:8px;min-width:0;\";\r\n\r\n this.headerBackBtn = document.createElement(\"button\");\r\n this.headerBackBtn.innerHTML = \"←\";\r\n this.headerBackBtn.setAttribute(\"aria-label\", \"Go back to previous step\");\r\n this.headerBackBtn.style.cssText = `\r\n width:30px;height:30px;border-radius:8px;flex-shrink:0;\r\n display:none;align-items:center;justify-content:center;\r\n border:1.5px solid ${this.theme.border};cursor:pointer;\r\n font-size:16px;line-height:1;\r\n background:${this.theme.cardBg};color:${this.theme.text};\r\n transition:all 0.2s ease;\r\n `;\r\n this.headerBackBtn.style.cssText += `:focus-visible{outline:2px solid ${this.theme.primary};outline-offset:2px;}`;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.shimmer;\r\n }\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.cardBg;\r\n }\r\n });\r\n leftArea.appendChild(this.headerBackBtn);\r\n\r\n this.brandLabel = document.createElement(\"div\");\r\n this.brandLabel.setAttribute(\"aria-label\", \"Verification provider\");\r\n this.brandLabel.style.cssText = `\r\n font-size:15px;font-weight:700;color:${this.theme.text};\r\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\r\n `;\r\n this.brandLabel.textContent = this.sdkConfig?.brand_name || \"SmartComply\";\r\n leftArea.appendChild(this.brandLabel);\r\n header.appendChild(leftArea);\r\n\r\n // Step indicator\r\n this.stepLabel = document.createElement(\"div\");\r\n this.stepLabel.setAttribute(\"aria-live\", \"polite\");\r\n this.stepLabel.setAttribute(\"aria-atomic\", \"true\");\r\n this.stepLabel.style.cssText = `\r\n font-size:12px;color:${this.theme.textMuted};\r\n font-variant-numeric:tabular-nums;flex-shrink:0;\r\n `;\r\n header.appendChild(this.stepLabel);\r\n\r\n // Close button\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.innerHTML = \"\u00E2\u0153\u2022\";\r\n closeBtn.setAttribute(\"aria-label\", \"Close identity verification\");\r\n closeBtn.style.cssText = `\r\n width:32px;height:32px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n border:none;cursor:pointer;font-size:16px;\r\n background:${this.theme.shimmer};color:${this.theme.textMuted};\r\n transition:all 0.2s ease;\r\n `;\r\n closeBtn.addEventListener(\"mouseenter\", () => {\r\n closeBtn.style.background = this.theme.errorBg;\r\n closeBtn.style.color = this.theme.error;\r\n });\r\n closeBtn.addEventListener(\"mouseleave\", () => {\r\n closeBtn.style.background = this.theme.shimmer;\r\n closeBtn.style.color = this.theme.textMuted;\r\n });\r\n closeBtn.addEventListener(\"click\", () => this.close());\r\n header.appendChild(closeBtn);\r\n\r\n return header;\r\n }\r\n\r\n private createFooter(): HTMLElement {\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n padding:9px 20px;border-top:1px solid ${this.theme.border};\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n `;\r\n\r\n const powered = document.createElement(\"span\");\r\n powered.style.cssText = `font-size:11px;color:${this.theme.textMuted};`;\r\n powered.textContent = \"Powered by \";\r\n\r\n const brand = document.createElement(\"span\");\r\n brand.style.cssText = `font-size:11px;font-weight:700;color:${this.theme.primary};`;\r\n brand.textContent = \"Adhere\";\r\n\r\n footer.appendChild(powered);\r\n footer.appendChild(brand);\r\n return footer;\r\n }\r\n\r\n private createStepTitle(text: string): HTMLElement {\r\n const el = document.createElement(\"h3\");\r\n el.style.cssText = `\r\n color:${this.theme.text};font-size:18px;font-weight:700;\r\n margin:0;\r\n `;\r\n el.textContent = text;\r\n return el;\r\n }\r\n\r\n private createOptionCard(\r\n title: string,\r\n subtitle: string,\r\n onClick: () => void\r\n ): HTMLElement {\r\n const card = document.createElement(\"button\");\r\n card.setAttribute(\"aria-label\", subtitle ? `${title}: ${subtitle}` : title);\r\n card.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:12px;\r\n background:${this.theme.cardBg};\r\n border:2px solid ${this.theme.border};\r\n cursor:pointer;text-align:left;\r\n display:flex;align-items:center;justify-content:space-between;\r\n transition:all 0.2s ease;\r\n `;\r\n card.addEventListener(\"mouseenter\", () => {\r\n card.style.borderColor = this.theme.primary;\r\n card.style.background = this.theme.shimmer;\r\n card.style.transform = \"translateY(-1px)\";\r\n });\r\n card.addEventListener(\"mouseleave\", () => {\r\n card.style.borderColor = this.theme.border;\r\n card.style.background = this.theme.cardBg;\r\n card.style.transform = \"translateY(0)\";\r\n });\r\n card.addEventListener(\"click\", onClick);\r\n\r\n const textWrap = document.createElement(\"div\");\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:600;`;\r\n titleEl.textContent = title;\r\n textWrap.appendChild(titleEl);\r\n\r\n if (subtitle) {\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = subtitle;\r\n textWrap.appendChild(subEl);\r\n }\r\n\r\n const arrow = document.createElement(\"span\");\r\n arrow.style.cssText = `color:${this.theme.textMuted};font-size:18px;flex-shrink:0;`;\r\n arrow.textContent = \"\u00E2\u2020\u2019\";\r\n\r\n card.appendChild(textWrap);\r\n card.appendChild(arrow);\r\n return card;\r\n }\r\n\r\n private createPrimaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:14px;border-radius:12px;\r\n font-size:15px;font-weight:600;\r\n background:${this.theme.primary};color:#fff;\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n box-shadow:0 2px 8px ${this.theme.primaryGlow};\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.background = this.theme.primaryHover;\r\n btn.style.transform = \"translateY(-1px)\";\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.background = this.theme.primary;\r\n btn.style.transform = \"translateY(0)\";\r\n });\r\n return btn;\r\n }\r\n\r\n private createSecondaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:12px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:transparent;color:${this.theme.textSecondary};\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.color = this.theme.text;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.color = this.theme.textSecondary;\r\n });\r\n return btn;\r\n }\r\n\r\n private isDocumentFlow(): boolean {\r\n // 1. Check verification_type \u00E2\u20AC\u201D handle both string and array from backend\r\n const vType = this.sdkConfig?.verification_type;\r\n if (vType) {\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n if (types.includes(\"document_verification\")) return true;\r\n if (types.includes(\"data_verification\")) return false;\r\n }\r\n // 2. Fallback: inspect channel fields \u00E2\u20AC\u201D any upload field = document flow\r\n const channels = this.sdkConfig?.channels || {};\r\n const allFields = (Object.values(channels) as any[])\r\n .flat()\r\n .flatMap((ch: any) => ch.fields || []);\r\n return allFields.some((f: any) => isUploadFieldType(f.type));\r\n }\r\n\r\n private updateProgress(): void {\r\n const isDocFlow = this.isDocumentFlow();\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const singleCountry = countries.length <= 1;\r\n\r\n // Two-stage action steps \u00E2\u20AC\u201D Stage 1: validate identity, Stage 2: liveness\r\n const stage1Steps: StepName[] = isDocFlow\r\n ? ([\"country\", \"id_type\", \"document_capture\", \"ocr_gate\", \"document_confirm\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry))\r\n : ([\"country\", \"id_type\", \"id_input\", \"confirm_identity\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry));\r\n\r\n const stage2Steps: StepName[] = [\"liveness\"];\r\n const allActionSteps: StepName[] = [...stage1Steps, ...stage2Steps];\r\n\r\n const totalSteps = allActionSteps.length;\r\n const actionIndex = allActionSteps.indexOf(this.currentStep);\r\n\r\n const pct =\r\n this.currentStep === \"done\" || this.currentStep === \"result\" ? 100\r\n : actionIndex >= 0 ? ((actionIndex + 1) / totalSteps) * 100\r\n : 0;\r\n\r\n if (this.progressBar) {\r\n this.progressBar.style.width = `${pct}%`;\r\n }\r\n\r\n // Stage label: \"Stage 1 of 2: Verify Identity\" / \"Stage 2 of 2: Face Check\"\r\n if (this.stepLabel) {\r\n if (this.currentStep === \"loading\" || this.currentStep === \"welcome\") {\r\n this.stepLabel.textContent = \"\";\r\n } else if (this.currentStep === \"done\" || this.currentStep === \"result\") {\r\n this.stepLabel.textContent = \"Complete \u00E2\u0153\u201C\";\r\n } else if (stage2Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = \"Stage 2 of 2: Face Check\";\r\n } else if (stage1Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = isDocFlow ? \"Stage 1 of 2: Scan Document\" : \"Stage 1 of 2: Verify Identity\";\r\n } else {\r\n this.stepLabel.textContent = \"\";\r\n }\r\n }\r\n\r\n // Back button \u00E2\u20AC\u201D show for navigable steps only\r\n if (this.headerBackBtn) {\r\n const backTargets: Partial<Record<StepName, () => void>> = {\r\n id_type: () => this.showStep(countries.length > 1 ? \"country\" : \"welcome\"),\r\n country: () => this.showStep(\"welcome\"),\r\n id_input: () => this.showStep(\"id_type\"),\r\n confirm_identity: () => this.showStep(\"id_input\"),\r\n document_capture: () => { this.docCapture?.destroy(); this.showStep(\"id_type\"); },\r\n document_confirm: () => { this.docCapture?.destroy(); this.showStep(\"document_capture\"); },\r\n };\r\n const backAction = backTargets[this.currentStep];\r\n if (backAction) {\r\n this.headerBackBtn.style.display = \"flex\";\r\n const newBtn = this.headerBackBtn.cloneNode(true) as HTMLButtonElement;\r\n newBtn.style.cssText = this.headerBackBtn.style.cssText;\r\n this.headerBackBtn.parentNode?.replaceChild(newBtn, this.headerBackBtn);\r\n this.headerBackBtn = newBtn;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.shimmer;\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.cardBg;\r\n });\r\n this.headerBackBtn.addEventListener(\"click\", backAction);\r\n } else {\r\n this.headerBackBtn.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private applyTheme(): void {\r\n if (this.overlay) {\r\n this.overlay.style.background = this.theme.overlay;\r\n }\r\n if (this.modal) {\r\n this.modal.style.background = this.theme.bg;\r\n this.modal.style.boxShadow = this.theme.shadow;\r\n }\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById(\"sc-flow-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"sc-flow-styles\";\r\n style.textContent = `\r\n @keyframes sc-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes sc-pop {\r\n 0% { transform: scale(0.8); opacity: 0; }\r\n 50% { transform: scale(1.05); }\r\n 100% { transform: scale(1); opacity: 1; }\r\n }\r\n #sc-flow-modal * {\r\n box-sizing: border-box;\r\n }\r\n #sc-flow-modal button:focus-visible,\r\n #sc-flow-modal select:focus-visible,\r\n #sc-flow-modal input:focus-visible {\r\n outline: 2px solid #3b82f6;\r\n outline-offset: 2px;\r\n }\r\n #sc-flow-modal::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar-thumb {\r\n background: rgba(128,128,128,0.3);\r\n border-radius: 4px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n", "/**\r\n * Lightweight SDK logger.\r\n *\r\n * Debug output is suppressed in production. Enable verbose logging by calling\r\n * SDKLogger.setDebug(true) before initialising the SDK, or by setting the\r\n * global flag: window.__SC_DEBUG__ = true\r\n */\r\n\r\nconst PREFIX = \"[SmartComply SDK]\";\r\n\r\nfunction isDebugEnabled(): boolean {\r\n try {\r\n return !!(window as any).__SC_DEBUG__;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const SDKLogger = {\r\n /** Emit an informational message (debug mode only). */\r\n info(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.info(`${PREFIX} \u2139 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a warning (always visible). */\r\n warn(message: string, ...args: unknown[]): void {\r\n console.warn(`${PREFIX} \u26A0 ${message}`, ...args);\r\n },\r\n\r\n /** Emit an error (always visible). */\r\n error(message: string, ...args: unknown[]): void {\r\n console.error(`${PREFIX} \u2716 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a debug trace (debug mode only \u2014 lowest priority). */\r\n debug(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.debug(`${PREFIX} \u2B21 ${message}`, ...args);\r\n },\r\n\r\n /** Log a timed group of related messages (debug mode only). */\r\n group(label: string, fn: () => void): void {\r\n if (!isDebugEnabled()) { fn(); return; }\r\n console.group(`${PREFIX} ${label}`);\r\n fn();\r\n console.groupEnd();\r\n },\r\n\r\n /**\r\n * Enable or disable verbose debug output at runtime.\r\n *\r\n * Example:\r\n * import { SDKLogger } from \"smartcomply-web-sdk\";\r\n * SDKLogger.setDebug(true);\r\n */\r\n setDebug(enabled: boolean): void {\r\n try {\r\n (window as any).__SC_DEBUG__ = enabled;\r\n } catch {\r\n /* no-op in non-browser environments */\r\n }\r\n },\r\n};\r\n", "/**\r\n * Camera permission utilities.\r\n *\r\n * Provides helpers to check, request and handle camera permissions in a\r\n * browser-consistent way. All functions are purely async and do NOT throw \u2014\r\n * they return a typed result so callers can handle each case explicitly.\r\n */\r\n\r\nexport type PermissionStatus =\r\n | \"granted\" // camera already accessible\r\n | \"prompt\" // permission dialog will appear on request\r\n | \"denied\" // user previously denied; cannot request again\r\n | \"unsupported\" // Permissions API or getUserMedia not available\r\n | \"unknown\"; // couldn't determine status\r\n\r\nexport interface CameraPermissionResult {\r\n status: PermissionStatus;\r\n /** Human-readable reason (populated on denied / unsupported). */\r\n reason?: string;\r\n}\r\n\r\n/**\r\n * Query the current camera permission state without prompting the user.\r\n *\r\n * Uses the Permissions API when available, falls back to \"unknown\" on older\r\n * browsers (e.g. Safari < 16).\r\n */\r\nexport async function queryCameraPermission(): Promise<CameraPermissionResult> {\r\n if (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\r\n return { status: \"unsupported\", reason: \"getUserMedia is not supported in this browser.\" };\r\n }\r\n\r\n if (!navigator.permissions?.query) {\r\n return { status: \"unknown\" };\r\n }\r\n\r\n try {\r\n const result = await navigator.permissions.query({ name: \"camera\" as PermissionName });\r\n return { status: result.state as PermissionStatus };\r\n } catch {\r\n return { status: \"unknown\" };\r\n }\r\n}\r\n\r\n/**\r\n * Request camera access and return the resulting MediaStream.\r\n *\r\n * Maps browser-specific errors onto actionable `CameraPermissionResult`\r\n * values so callers can show the right UI instead of catching raw DOMExceptions.\r\n *\r\n * @param constraints - Optional MediaStreamConstraints override.\r\n */\r\nexport async function requestCameraAccess(\r\n constraints?: MediaStreamConstraints\r\n): Promise<{ stream: MediaStream; permission: CameraPermissionResult }> {\r\n const defaults: MediaStreamConstraints = {\r\n video: { facingMode: \"user\", width: { ideal: 640 }, height: { ideal: 480 } },\r\n audio: false,\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints ?? defaults);\r\n return { stream, permission: { status: \"granted\" } };\r\n } catch (err: any) {\r\n const name: string = err?.name ?? \"\";\r\n\r\n if (name === \"NotAllowedError\" || name === \"PermissionDeniedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"denied\",\r\n reason: \"Camera access was denied. Please allow camera permissions in your browser settings and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotFoundError\" || name === \"DevicesNotFoundError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unsupported\",\r\n reason: \"No camera was found. Please connect a camera and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotReadableError\" || name === \"TrackStartError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera is already in use by another application. Please close it and try again.\",\r\n },\r\n };\r\n }\r\n\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: err?.message ?? \"Unable to access the camera.\",\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Stop all tracks on a MediaStream and release the camera.\r\n * Safe to call with null/undefined.\r\n */\r\nexport function releaseCameraStream(stream: MediaStream | null | undefined): void {\r\n if (!stream) return;\r\n stream.getTracks().forEach((t) => t.stop());\r\n}\r\n\r\n/**\r\n * Returns true if the browser supports the camera APIs needed by the SDK.\r\n */\r\nexport function isCameraSupported(): boolean {\r\n return (\r\n typeof navigator !== \"undefined\" &&\r\n !!navigator.mediaDevices?.getUserMedia &&\r\n typeof MediaRecorder !== \"undefined\"\r\n );\r\n}\r\n", "/**\r\n * LivenessUploader \u2014 thin wrapper around the HttpClient's uploadWithSession()\r\n * that adds:\r\n * - Progress callbacks (onProgress)\r\n * - Upload cancellation via AbortController\r\n * - Automatic retry on transient network failure (configurable)\r\n *\r\n * Used internally by LivenessModule.create() and LivenessModule.submit() when\r\n * the caller needs progress reporting (e.g. for a progress bar during video\r\n * upload on slow connections).\r\n */\r\n\r\nimport { HttpClient } from \"../../client/HttpClient\";\r\nimport { MAX_RETRIES, RETRY_DELAY_MS } from \"../../utils/constants\";\r\nimport { SDKLogger } from \"../../utils/logger\";\r\n\r\nexport interface UploadOptions {\r\n /** Called with a value 0\u20131 as the upload progresses. */\r\n onProgress?: (fraction: number) => void;\r\n\r\n /** Optional AbortSignal to cancel the upload mid-flight. */\r\n signal?: AbortSignal;\r\n\r\n /** Override the default number of retries on transient errors. */\r\n retries?: number;\r\n}\r\n\r\nexport class LivenessUploader {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Upload a FormData payload to `path` with optional progress and\r\n * cancellation support.\r\n *\r\n * Falls back to the standard `uploadWithSession()` on browsers that do not\r\n * support XMLHttpRequest upload progress (very rare).\r\n */\r\n async upload<T>(\r\n path: string,\r\n formData: FormData,\r\n options: UploadOptions = {}\r\n ): Promise<T> {\r\n const { onProgress, signal, retries = MAX_RETRIES } = options;\r\n\r\n // If no progress callback is needed, delegate straight to HttpClient\r\n // which already has retry logic built in.\r\n if (!onProgress) {\r\n return this.http.uploadWithSession<T>(path, formData);\r\n }\r\n\r\n return this.uploadWithProgress<T>(path, formData, onProgress, signal, retries);\r\n }\r\n\r\n // \u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async uploadWithProgress<T>(\r\n path: string,\r\n formData: FormData,\r\n onProgress: (fraction: number) => void,\r\n signal: AbortSignal | undefined,\r\n retriesLeft: number\r\n ): Promise<T> {\r\n const sessionToken = (this.http as any).sessionToken as string | null;\r\n if (!sessionToken) {\r\n throw new Error(\"SDK: No session token. Call sdk.createSession() first.\");\r\n }\r\n\r\n const baseUrl: string = (this.http as any).baseUrl as string;\r\n\r\n return new Promise<T>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n // Propagate AbortSignal to XHR\r\n if (signal) {\r\n if (signal.aborted) {\r\n reject(new DOMException(\"Upload cancelled\", \"AbortError\"));\r\n return;\r\n }\r\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\r\n }\r\n\r\n xhr.open(\"POST\", `${baseUrl}${path}`, true);\r\n xhr.setRequestHeader(\"x-access-token\", sessionToken);\r\n\r\n xhr.upload.onprogress = (evt) => {\r\n if (evt.lengthComputable) {\r\n onProgress(evt.loaded / evt.total);\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n onProgress(1);\r\n\r\n let envelope: any;\r\n try {\r\n envelope = JSON.parse(xhr.responseText);\r\n } catch {\r\n reject(new Error(`SDK: Non-JSON response from ${path} (${xhr.status})`));\r\n return;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300 && envelope.status !== \"error\") {\r\n SDKLogger.info(`Upload to ${path} succeeded`, { status: xhr.status });\r\n resolve(envelope.data as T);\r\n } else {\r\n const err = new Error(envelope.message || `Upload to ${path} failed (${xhr.status})`);\r\n (err as any).statusCode = xhr.status;\r\n (err as any).code = envelope.code;\r\n reject(err);\r\n }\r\n };\r\n\r\n xhr.onerror = async () => {\r\n SDKLogger.warn(`Upload to ${path} failed \u2014 network error`, { retriesLeft });\r\n\r\n if (retriesLeft > 0) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n try {\r\n const result = await this.uploadWithProgress<T>(\r\n path, formData, onProgress, signal, retriesLeft - 1\r\n );\r\n resolve(result);\r\n } catch (retryErr) {\r\n reject(retryErr);\r\n }\r\n } else {\r\n reject(new Error(`SDK: Upload to ${path} failed after all retries.`));\r\n }\r\n };\r\n\r\n xhr.onabort = () => {\r\n reject(new DOMException(\"Upload cancelled by user\", \"AbortError\"));\r\n };\r\n\r\n xhr.send(formData);\r\n });\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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,IAAG,GAAG,EAAE;AAAx0C,MAA00C,KAAG,GAAG,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,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",
|
|
4
|
+
"sourcesContent": ["import { SmartComply } from \"./client/Smartcomply\";\r\nimport { SmartComplyFlow } from \"./flow/SmartComplyFlow\";\r\n\r\nexport default SmartComply;\r\nexport { SmartComply, SmartComplyFlow };\r\n\r\n// Config\r\nexport type { SDKConfig, Environment } from \"./client/Config\";\r\n\r\n// Flow types\r\nexport type { FlowOptions, FlowResult } from \"./flow/SmartComplyFlow\";\r\n\r\n// Onboarding types\r\nexport type {\r\n OnboardingType,\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n SessionResponse,\r\n SDKInitConfig,\r\n SDKChannel,\r\n} from \"./types/onboarding\";\r\n\r\n// Liveness types\r\nexport type {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n LivenessWebhookPayload,\r\n} from \"./types/liveness\";\r\n\r\n// Response envelope types\r\nexport type {\r\n ApiResponse,\r\n FieldError,\r\n ErrorData,\r\n} from \"./types/common\";\r\n\r\n// Error classes\r\nexport { SDKError } from \"./errors/SDKError\";\r\nexport { AuthError } from \"./errors/AuthError\";\r\nexport { NetworkError } from \"./errors/NetworkError\";\r\n\r\n// Utilities\r\nexport { SDKLogger } from \"./utils/logger\";\r\nexport { collectDeviceMetadata } from \"./utils/device\";\r\nexport type { DeviceMetadata } from \"./utils/device\";\r\nexport {\r\n isCameraSupported,\r\n queryCameraPermission,\r\n requestCameraAccess,\r\n releaseCameraStream,\r\n} from \"./camera/Permission\";\r\nexport type { PermissionStatus, CameraPermissionResult } from \"./camera/Permission\";\r\n\r\n// Liveness uploader (for integrators that need progress reporting)\r\nexport { LivenessUploader } from \"./modules/liveness/uploader\";\r\nexport type { UploadOptions } from \"./modules/liveness/uploader\";\r\n", "export type Environment = \"sandbox\" | \"production\" | \"local\";\r\n\r\nexport const BASE_URLS: Record<Environment, string> = {\r\n sandbox: \"https://dev-adhere.smartcomply.com\",\r\n production: \"https://adhere-api.smartcomply.com\",\r\n local: \"http://127.0.0.1:8000\",\r\n};\r\n\r\nexport interface SDKConfig {\r\n apiKey: string;\r\n clientId: string; // Required UUID \u2014 used for session creation\r\n environment?: Environment;\r\n timeout?: number;\r\n}\r\n", "export class SDKError extends Error {\r\n statusCode: number;\r\n errorCode?: string;\r\n errorData?: Record<string, unknown>;\r\n\r\n constructor(\r\n message: string,\r\n statusCode: number,\r\n errorCode?: string,\r\n errorData?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"SDKError\";\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.errorData = errorData;\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when authentication fails (invalid API key, expired session, etc).\r\n */\r\nexport class AuthError extends SDKError {\r\n constructor(message: string, errorCode?: string) {\r\n super(message, 401, errorCode);\r\n this.name = \"AuthError\";\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when a network request fails (timeout, no connection, DNS failure, etc).\r\n */\r\nexport class NetworkError extends SDKError {\r\n constructor(message: string) {\r\n super(message, 0, \"NETWORK_ERROR\");\r\n this.name = \"NetworkError\";\r\n }\r\n}\r\n", "import { SDKConfig, BASE_URLS } from \"./Config\";\r\nimport { SDKError } from \"../errors/SDKError\";\r\nimport { AuthError } from \"../errors/AuthError\";\r\nimport { NetworkError } from \"../errors/NetworkError\";\r\nimport { ApiResponse } from \"../types/common\";\r\n\r\n/**\r\n * HTTP client aligned with Adhere backend contract.\r\n *\r\n * Two auth modes:\r\n * - request() \u2192 Authorization: Bearer <apiKey> (session creation)\r\n * - sessionRequest() \u2192 x-access-token: <sessionToken> (all other endpoints)\r\n * - uploadWithSession() \u2192 multipart + x-access-token (file uploads)\r\n */\r\nexport class HttpClient {\r\n private baseUrl: string;\r\n private apiKey: string;\r\n private timeout: number;\r\n private sessionToken: string | null = null;\r\n\r\n constructor(config: SDKConfig) {\r\n this.baseUrl = BASE_URLS[config.environment || \"sandbox\"];\r\n this.apiKey = config.apiKey;\r\n this.timeout = config.timeout || 30000;\r\n }\r\n\r\n setSessionToken(token: string): void {\r\n this.sessionToken = token;\r\n }\r\n\r\n /**\r\n * API-key authenticated request (used for session creation only).\r\n * Header: Authorization: Bearer <apiKey>\r\n */\r\n async request<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Session-token authenticated request (used for all endpoints after session creation).\r\n * Header: x-access-token: <sessionToken>\r\n */\r\n async sessionRequest<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Multipart file upload with session-token auth.\r\n * Header: x-access-token: <sessionToken>\r\n * NOTE: Do NOT set Content-Type \u2014 browser sets it with boundary automatically.\r\n */\r\n async uploadWithSession<T>(path: string, formData: FormData): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n /**\r\n * GET for endpoints that work without auth (status polling still works after\r\n * session revoke) but return additional fields when a live session token is\r\n * presented \u2014 e.g. sdk-result/ only includes OCR/PII fields for the session\r\n * that owns the entry. Attaches the token opportunistically when we still\r\n * have one; the backend falls back to the public (non-PII) response if it's\r\n * missing, invalid, or already revoked.\r\n */\r\n async publicGet<T>(path: string): Promise<T> {\r\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\r\n if (this.sessionToken) {\r\n headers[\"x-access-token\"] = this.sessionToken;\r\n }\r\n return this._fetch<T>(path, {\r\n method: \"GET\",\r\n headers,\r\n });\r\n }\r\n\r\n /**\r\n * Legacy upload with API key (kept for backward compatibility if needed).\r\n */\r\n async upload<T>(path: string, formData: FormData): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n // ---- Internal ----\r\n\r\n private requireToken(): void {\r\n if (!this.sessionToken) {\r\n throw new AuthError(\r\n \"No session token set. Call sdk.createSession() first.\",\r\n \"NO_SESSION_TOKEN\"\r\n );\r\n }\r\n }\r\n\r\n private async _fetch<T>(path: string, init: RequestInit, retries = 2): Promise<T> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: controller.signal,\r\n });\r\n\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new SDKError(\r\n `Unexpected response from ${path} (${response.status})`,\r\n response.status\r\n );\r\n }\r\n\r\n // Parse the backend's standard response envelope\r\n const envelope: ApiResponse = await response.json();\r\n\r\n if (!response.ok || envelope.status === \"error\") {\r\n const statusCode = response.status;\r\n\r\n // Map specific HTTP statuses to error types\r\n if (statusCode === 401 || statusCode === 403) {\r\n throw new AuthError(\r\n envelope.message || \"Authentication failed\",\r\n envelope.code\r\n );\r\n }\r\n\r\n throw new SDKError(\r\n envelope.message || `Request to ${path} failed`,\r\n statusCode,\r\n envelope.code,\r\n envelope.data as Record<string, unknown>\r\n );\r\n }\r\n\r\n // Return the full envelope for verify responses (so SDK can check status)\r\n // For other endpoints, return unwrapped data\r\n if (path.includes(\"/verify/\")) {\r\n return envelope as T;\r\n }\r\n return envelope.data as T;\r\n\r\n } catch (err: any) {\r\n if (err instanceof SDKError || err instanceof AuthError) throw err;\r\n\r\n // C5: Retry on network errors (not auth/validation errors)\r\n if (retries > 0 && (err.name === \"AbortError\" || err.name === \"TypeError\")) {\r\n clearTimeout(timer);\r\n await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry\r\n return this._fetch<T>(path, init, retries - 1);\r\n }\r\n\r\n if (err.name === \"AbortError\") {\r\n throw new NetworkError(\"Request timeout. Please check your connection and try again.\");\r\n }\r\n if (err.name === \"TypeError\" && err.message?.includes(\"fetch\")) {\r\n throw new NetworkError(`Network error: ${err.message}`);\r\n }\r\n\r\n throw new SDKError(\r\n err.message || \"Unknown error\",\r\n 0,\r\n \"UNKNOWN_ERROR\"\r\n );\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n} from \"../../types/onboarding\";\r\n\r\n/**\r\n * Onboarding module \u2014 identity verification.\r\n *\r\n * All methods use session-token auth (x-access-token header).\r\n */\r\nexport class OnboardingModule {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Verify a user's identity.\r\n *\r\n * POST /v1/onboarding/verify/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Sends identity_type_id (from ChannelItem.id) and dynamic fields\r\n * collected from the user based on the channel's field definitions.\r\n *\r\n * Example:\r\n * { identity_type_id: 3, fields: { \"bank_verification_number\": \"12345678901\" } }\r\n */\r\n async verify(params: VerifyIdentityRequest): Promise<VerifyIdentityResponse> {\r\n return this.http.sessionRequest<VerifyIdentityResponse>(\r\n \"POST\",\r\n \"/v1/onboarding/verify/\",\r\n {\r\n identity_type_id: params.identity_type_id,\r\n fields: params.fields,\r\n }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Collects device / browser context metadata.\r\n * All values are derived from standard browser APIs \u2014 no external library needed.\r\n * Sent to the backend at liveness/create so they appear in the webhook\r\n * request_context block.\r\n */\r\nexport interface DeviceMetadata {\r\n device_type: \"mobile\" | \"desktop\" | \"tablet\";\r\n os_name: string;\r\n browser_timezone: string;\r\n fingerprint_id: string;\r\n}\r\n\r\nfunction detectOs(ua: string): string {\r\n if (/Windows NT/i.test(ua)) return \"Windows\";\r\n if (/Mac OS X|Macintosh/i.test(ua)) return \"macOS\";\r\n if (/Android/i.test(ua)) return \"Android\";\r\n if (/iPhone|iPad|iPod/i.test(ua)) return \"iOS\";\r\n if (/Linux/i.test(ua)) return \"Linux\";\r\n if (/CrOS/i.test(ua)) return \"ChromeOS\";\r\n return \"Unknown\";\r\n}\r\n\r\nfunction getOrCreateFingerprintId(): string {\r\n const KEY = \"_adhere_fid\";\r\n try {\r\n let fid = localStorage.getItem(KEY);\r\n if (!fid) {\r\n fid =\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n localStorage.setItem(KEY, fid);\r\n }\r\n return fid;\r\n } catch {\r\n // localStorage unavailable (e.g. private browsing with strict settings)\r\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n\r\nexport function collectDeviceMetadata(): DeviceMetadata {\r\n const ua = navigator.userAgent;\r\n\r\n const isTablet =\r\n /iPad/i.test(ua) ||\r\n (/Android/i.test(ua) && !/Mobile/i.test(ua));\r\n\r\n const isMobile =\r\n !isTablet &&\r\n /Mobi|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\r\n\r\n const device_type: DeviceMetadata[\"device_type\"] = isTablet\r\n ? \"tablet\"\r\n : isMobile\r\n ? \"mobile\"\r\n : \"desktop\";\r\n\r\n return {\r\n device_type,\r\n os_name: detectOs(ua),\r\n browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n fingerprint_id: getOrCreateFingerprintId(),\r\n };\r\n}\r\n", "/**\r\n * SDK-wide constants \u2014 single source of truth for limits, defaults and\r\n * backend-defined magic values.\r\n */\r\n\r\n// \u2500\u2500 Session \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend session TTL in milliseconds (30 minutes). */\r\nexport const SESSION_TTL_MS = 30 * 60 * 1000;\r\n\r\n/** Warn the user this many ms before session expires. */\r\nexport const SESSION_WARN_BEFORE_MS = 2 * 60 * 1000;\r\n\r\n// \u2500\u2500 Network \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Default request timeout in milliseconds. */\r\nexport const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\n/** Number of automatic retries on transient network errors. */\r\nexport const MAX_RETRIES = 2;\r\n\r\n/** Delay between retries in milliseconds. */\r\nexport const RETRY_DELAY_MS = 1_000;\r\n\r\n// \u2500\u2500 File uploads \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Maximum document image size the backend accepts (5 MB). */\r\nexport const MAX_DOCUMENT_BYTES = 5 * 1024 * 1024;\r\n\r\n/** Maximum video size the backend accepts (50 MB). */\r\nexport const MAX_VIDEO_BYTES = 50 * 1024 * 1024;\r\n\r\n/** Maximum snapshot / autoshot size (2 MB). */\r\nexport const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;\r\n\r\n/** Accepted MIME types for document images. */\r\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"] as const;\r\n\r\n/** JPEG quality used when encoding captured frames (0\u20131). */\r\nexport const CAPTURE_JPEG_QUALITY = 0.92;\r\n\r\n// \u2500\u2500 Liveness challenge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Backend-accepted challenge actions (UPPERCASE). */\r\nexport const CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"TURN_RIGHT\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Default set sent when the caller does not specify actions. */\r\nexport const DEFAULT_CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/** Time limit per liveness attempt in seconds. */\r\nexport const LIVENESS_TIME_LIMIT_SECONDS = 45;\r\n\r\n/** Milliseconds to pause after all actions before capturing the final snapshot. */\r\nexport const POST_ACTION_SETTLE_MS = 800;\r\n\r\n// \u2500\u2500 Camera \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Ideal resolution for the front-facing liveness camera. */\r\nexport const CAMERA_IDEAL_WIDTH = 640;\r\nexport const CAMERA_IDEAL_HEIGHT = 480;\r\n\r\n/** Ideal resolution for rear-facing document capture camera. */\r\nexport const DOC_CAMERA_IDEAL_WIDTH = 1280;\r\nexport const DOC_CAMERA_IDEAL_HEIGHT = 960;\r\n\r\n/** Video bitrate used by MediaRecorder for liveness recordings (~1.4 MB / 45 s). */\r\nexport const RECORDING_BITS_PER_SECOND = 250_000;\r\n\r\n// \u2500\u2500 Face detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** Max milliseconds to wait for an initial face detection before proceeding. */\r\nexport const FACE_DETECT_TIMEOUT_MS = 10_000;\r\n\r\n/** Polling interval for the face-present check (ms). */\r\nexport const FACE_DETECT_POLL_MS = 100;\r\n\r\n// \u2500\u2500 UI / UX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n/** How long (ms) the success overlay is shown before the flow advances. */\r\nexport const RESULT_OVERLAY_DURATION_MS = 2_800;\r\n\r\n/** localStorage key used to persist the browser fingerprint ID. */\r\nexport const FINGERPRINT_STORAGE_KEY = \"_adhere_fid\";\r\n\r\n/** z-index for the SDK overlay \u2014 high enough to sit above any app content. */\r\nexport const OVERLAY_Z_INDEX = 99_999;\r\n", "export class CameraManager {\r\n private stream: MediaStream | null = null;\r\n\r\n async open(constraints?: MediaStreamConstraints): Promise<MediaStream> {\r\n const defaults: MediaStreamConstraints = {\r\n video: {\r\n facingMode: \"user\",\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n },\r\n audio: false,\r\n };\r\n\r\n this.stream = await navigator.mediaDevices.getUserMedia(\r\n constraints || defaults\r\n );\r\n\r\n return this.stream;\r\n }\r\n\r\n getStream(): MediaStream | null {\r\n return this.stream;\r\n }\r\n\r\n /**\r\n * Adopt an externally-obtained stream (e.g. a pre-warmed getUserMedia\r\n * stream) so stop() also releases it. Without this, a stream assigned\r\n * directly by a caller instead of via open() is never tracked here and\r\n * stop() becomes a no-op for it, leaking the camera.\r\n */\r\n setStream(stream: MediaStream): void {\r\n this.stream = stream;\r\n }\r\n\r\n stop(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((track) => track.stop());\r\n this.stream = null;\r\n }\r\n }\r\n}\r\n", "export class VideoRecorder {\r\n private recorder: MediaRecorder | null = null;\r\n private chunks: Blob[] = [];\r\n private startedAt: number = 0;\r\n\r\n start(stream: MediaStream): void {\r\n this.chunks = [];\r\n\r\n const mimeType = MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")\r\n ? \"video/webm;codecs=vp9\"\r\n : \"video/webm\";\r\n\r\n this.recorder = new MediaRecorder(stream, {\r\n mimeType,\r\n videoBitsPerSecond: 800_000, // raised from 250k \u2014 higher bitrate = sharper frames for SmartComply face extractor\r\n });\r\n\r\n this.recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.chunks.push(e.data);\r\n }\r\n };\r\n\r\n this.startedAt = Date.now();\r\n this.recorder.start();\r\n }\r\n\r\n stop(): Promise<{ blob: Blob; durationSeconds: number }> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.recorder || this.recorder.state === \"inactive\") {\r\n reject(new Error(\"Recorder is not active\"));\r\n return;\r\n }\r\n\r\n const stoppedAt = Date.now();\r\n\r\n this.recorder.onstop = () => {\r\n const blob = new Blob(this.chunks, { type: \"video/webm\" });\r\n const durationSeconds = parseFloat(\r\n ((stoppedAt - this.startedAt) / 1000).toFixed(2)\r\n );\r\n this.chunks = [];\r\n resolve({ blob, durationSeconds });\r\n };\r\n\r\n this.recorder.onerror = () => {\r\n reject(new Error(\"Recording failed\"));\r\n };\r\n\r\n this.recorder.stop();\r\n });\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.recorder?.state === \"recording\";\r\n }\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(e,n){t:{for(var r=[\"CLOSURE_FLAGS\"],i=t,s=0;s<r.length;s++)if(null==(i=i[r[s]])){r=null;break t}r=i}return null!=(e=r&&r[e])?e:n}function n(){throw Error(\"Invalid UTF8\")}function r(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let i,s;const o=\"undefined\"!=typeof TextDecoder;let a;const c=\"undefined\"!=typeof TextEncoder;function h(t){if(c)t=(a||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}function u(e){t.setTimeout((()=>{throw e}),0)}var l,f=e(610401301,!1),d=e(748402147,!0),p=e(824648567,!0),g=e(824656860,e(1,!0));function m(){var e=t.navigator;return e&&(e=e.userAgent)?e:\"\"}const y=t.navigator;function _(t){return _[\" \"](t),t}l=y&&y.userAgentData||null,_[\" \"]=function(){};const v={};let E=null;function w(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=E[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}T();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function T(){if(!E){E={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));v[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===E[e]&&(E[e]=t)}}}}var A=\"undefined\"!=typeof Uint8Array,b=!(!(f&&l&&l.brands.length>0)&&(-1!=m().indexOf(\"Trident\")||-1!=m().indexOf(\"MSIE\")))&&\"function\"==typeof btoa;const k=/[-_.]/g,S={\"-\":\"+\",_:\"/\",\".\":\"=\"};function x(t){return S[t]||\"\"}function L(t){if(!b)return w(t);t=k.test(t)?t.replace(k,x):t,t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function R(t){return A&&null!=t&&t instanceof Uint8Array}var I={};function F(){return C||=new P(null,I)}function M(t){N(I);var e=t.g;return null==(e=null==e||R(e)?e:\"string\"==typeof e?L(e):null)?e:t.g=e}var P=class{h(){return new Uint8Array(M(this)||0)}constructor(t,e){if(N(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let C,O;function N(t){if(t!==I)throw Error(\"illegal external caller\")}function U(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function D(t){return U(t=Error(t),\"warning\"),t}function B(t,e){if(null!=t){var n=O??={},r=n[t]||0;r>=e||(n[t]=r+1,U(t=Error(),\"incident\"),u(t))}}function G(){return\"function\"==typeof BigInt}var j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function V(t,e,n=!1){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?n&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e}var X=V(\"jas\",void 0,!0),H=V(void 0,\"0di\"),W=V(void 0,\"1oa\"),z=V(void 0,Symbol()),K=V(void 0,\"0ub\"),Y=V(void 0,\"0ubs\"),q=V(void 0,\"0ubsb\"),$=V(void 0,\"0actk\"),J=V(\"m_m\",\"Pa\",!0),Z=V();const Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties,et=j?X:\"Ga\";var nt;const rt=[];function it(t,e){j||et in t||tt(t,Q),t[et]|=e}function st(t,e){j||et in t||tt(t,Q),t[et]=e}function ot(t){return it(t,34),t}function at(t){return it(t,8192),t}st(rt,7),nt=Object.freeze(rt);var ct={};function ht(t,e){return void 0===e?t.h!==ut&&!!(2&(0|t.v[et])):!!(2&e)&&t.h!==ut}const ut={};function lt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new P(t,I):F();else if(t.constructor!==P)if(R(t))t=t.length?new P(new Uint8Array(t),I):F();else{if(!e)throw Error();t=void 0}return t}class ft{constructor(t,e,n){this.g=t,this.h=e,this.l=n}next(){const t=this.g.next();return t.done||(t.value=this.h.call(this.l,t.value)),t}[Symbol.iterator](){return this}}var dt=Object.freeze({});function pt(t,e,n){const r=128&e?0:-1,i=t.length;var s;(s=!!i)&&(s=null!=(s=t[i-1])&&\"object\"==typeof s&&s.constructor===Object);const o=i+(s?-1:0);for(e=128&e?1:0;e<o;e++)n(e-r,t[e]);if(s){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}var gt={};function mt(t){return 128&t?gt:void 0}function yt(t){return t.Na=!0,t}var _t=yt((t=>\"number\"==typeof t)),vt=yt((t=>\"string\"==typeof t)),Et=yt((t=>\"boolean\"==typeof t)),wt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function Tt(t){var e=t;if(vt(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(_t(e)&&!Number.isSafeInteger(e))throw Error(String(e));return wt?BigInt(t):t=Et(t)?t?\"1\":\"0\":vt(t)?t.trim()||\"0\":String(t)}var At=yt((t=>wt?t>=kt&&t<=xt:\"-\"===t[0]?Lt(t,bt):Lt(t,St)));const bt=Number.MIN_SAFE_INTEGER.toString(),kt=wt?BigInt(Number.MIN_SAFE_INTEGER):void 0,St=Number.MAX_SAFE_INTEGER.toString(),xt=wt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Lt(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const Rt=\"function\"==typeof Uint8Array.prototype.slice;let It,Ft=0,Mt=0;function Pt(t){const e=t>>>0;Ft=e,Mt=(t-e)/4294967296>>>0}function Ct(t){if(t<0){Pt(-t);const[e,n]=Ht(Ft,Mt);Ft=e>>>0,Mt=n>>>0}else Pt(t)}function Ot(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Mt=0,Ft=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Ut(t,e){return Tt(G()?BigInt.asUintN(64,(BigInt(e>>>0)<<BigInt(32))+BigInt(t>>>0)):Gt(t,e))}function Dt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){return G()?Tt(BigInt.asIntN(64,(BigInt.asUintN(32,BigInt(e))<<BigInt(32))+BigInt.asUintN(32,BigInt(t)))):Tt(Vt(t,e))}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else G()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t,e){if(2147483648&e)if(G())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Ht(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function Xt(t){if(t.length<16)Ct(Number(t));else if(G())t=BigInt(t),Ft=Number(t&BigInt(4294967295))>>>0,Mt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Mt=Ft=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Mt*=1e6,Ft=1e6*Ft+e,Ft>=4294967296&&(Mt+=Math.trunc(Ft/4294967296),Mt>>>=0,Ft>>>=0)}if(e){const[t,e]=Ht(Ft,Mt);Ft=t,Mt=e}}}function Ht(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function Wt(t){return Array.prototype.slice.call(t)}const zt=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Kt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,Yt=Number.isSafeInteger,qt=Number.isFinite,$t=Math.trunc,Jt=Tt(0);function Zt(t){if(null!=t&&\"number\"!=typeof t)throw Error(`Value of float/double field must be a number, found ${typeof t}: ${t}`);return t}function Qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function te(t){if(null!=t&&\"boolean\"!=typeof t){var e=typeof t;throw Error(`Expected boolean but got ${\"object\"!=e?e:t?Array.isArray(t)?\"array\":e:\"null\"}: ${t}`)}return t}function ee(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const ne=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function re(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return qt(t);case\"string\":return ne.test(t);default:return!1}}function ie(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?0|t:void 0}function se(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?t>>>0:void 0}function oe(t){const e=t.length;return(\"-\"===t[0]?e<20||20===e&&t<=\"-9223372036854775808\":e<19||19===e&&t<=\"9223372036854775807\")?t:(Xt(t),Vt(Ft,Mt))}function ae(t){return t=$t(t),Yt(t)||(Ct(t),t=Dt(Ft,Mt)),t}function ce(t){var e=$t(Number(t));return Yt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),oe(t))}function he(t){var e=$t(Number(t));return Yt(e)?Tt(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),G()?Tt(zt(64,BigInt(t))):Tt(oe(t)))}function ue(t){return Yt(t)?t=Tt(ae(t)):(t=$t(t),Yt(t)?t=String(t):(Ct(t),t=Vt(Ft,Mt)),t=Tt(t)),t}function le(t){return null==t?t:\"bigint\"==typeof t?(At(t)?t=Number(t):(t=zt(64,t),t=At(t)?Number(t):String(t)),t):re(t)?\"number\"==typeof t?ae(t):ce(t):void 0}function fe(t){const e=typeof t;return null==t?t:\"bigint\"===e?Tt(zt(64,t)):re(t)?\"string\"===e?he(t):ue(t):void 0}function de(t){if(\"string\"!=typeof t)throw Error();return t}function pe(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ge(t){return null==t||\"string\"==typeof t?t:void 0}function me(t,e,n,r){return null!=t&&t[J]===ct?t:Array.isArray(t)?((r=(n=0|t[et])|32&r|2&r)!==n&&st(t,r),new e(t)):(n?2&r?((t=e[H])||(ot((t=new e).v),t=e[H]=t),e=t):e=new e:e=void 0,e)}function ye(t,e,n){if(e)t:{if(!re(e=t))throw D(\"int64\");switch(typeof e){case\"string\":e=he(e);break t;case\"bigint\":e=Tt(zt(64,e));break t;default:e=ue(e)}}else e=fe(t);return null==(t=e)?n?Jt:void 0:t}const _e={};let ve=function(){try{return _(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class Ee{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const we=ve?(Object.setPrototypeOf(Ee.prototype,Map.prototype),Object.defineProperties(Ee.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),Ee):class extends Map{constructor(){super()}};function Te(t){return t}function Ae(t){if(2&t.J)throw Error(\"Cannot mutate an immutable Map\")}var be=class extends we{constructor(t,e,n=Te,r=Te){super(),this.J=0|t[et],this.K=e,this.S=n,this.fa=this.K?ke:r;for(let i=0;i<t.length;i++){const s=t[i],o=n(s[0],!1,!0);let a=s[1];e?void 0===a&&(a=null):a=r(s[1],!1,!0,void 0,void 0,this.J),super.set(o,a)}}V(t){return at(Array.from(super.entries(),t))}clear(){Ae(this),super.clear()}delete(t){return Ae(this),super.delete(this.S(t,!0,!1))}entries(){if(this.K){var t=super.keys();t=new ft(t,Se,this)}else t=super.entries();return t}values(){if(this.K){var t=super.keys();t=new ft(t,be.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.K?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Ae(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.fa(e,!0,!0,this.K,!1,this.J))}Ma(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.K?void 0===t?null:t:this.fa(t,!1,!0,void 0,!1,this.J),super.set(e,t)}has(t){return super.has(this.S(t,!1,!1))}get(t){t=this.S(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.K;return n?((n=this.fa(e,!1,!0,n,this.ra,this.J))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function ke(t,e,n,r,i,s){return t=me(t,r,n,s),i&&(t=Ke(t)),t}function Se(t){return[t,this.get(t)]}let xe;function Le(){return xe||=new be(ot([]),void 0,void 0,void 0,_e)}function Re(t){return z?t[z]:void 0}function Ie(t,e){for(const n in t)!isNaN(n)&&e(t,+n,t[n])}be.prototype.toJSON=void 0;var Fe=class{};const Me={Ka:!0};function Pe(t,e){e<100||B(Y,1)}function Ce(t,e,n,r){const i=void 0!==r;r=!!r;var s,o=z;!i&&j&&o&&(s=t[o])&&Ie(s,Pe),o=[];var a=t.length;let c;s=4294967295;let h=!1;const u=!!(64&e),l=u?128&e?0:-1:void 0;1&e||(c=a&&t[a-1],null!=c&&\"object\"==typeof c&&c.constructor===Object?s=--a:c=void 0,!u||128&e||i||(h=!0,s=s-l+l)),e=void 0;for(var f=0;f<a;f++){let i=t[f];if(null!=i&&null!=(i=n(i,r)))if(u&&f>=s){const t=f-l;(e??={})[t]=i}else o[f]=i}if(c)for(let t in c){if(null==(a=c[t])||null==(a=n(a,r)))continue;let i;f=+t,u&&!Number.isNaN(f)&&(i=f+l)<s?o[i]=a:(e??={})[t]=a}return e&&(h?o.push(e):o[s]=e),i&&z&&(t=Re(t))&&t instanceof Fe&&(o[z]=function(t){const e=new Fe;return Ie(t,((t,n,r)=>{e[n]=Wt(r)})),e.da=t.da,e}(t)),o}function Oe(t){return t[0]=Ne(t[0]),t[1]=Ne(t[1]),t}function Ne(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return At(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(Array.isArray(t)){var e=0|t[et];return 0===t.length&&1&e?void 0:Ce(t,e,Ne)}if(null!=t&&t[J]===ct)return Ue(t);if(t instanceof P){if(null==(e=t.g))t=\"\";else if(\"string\"==typeof e)t=e;else{if(b){for(var n=\"\",r=0,i=e.length-10240;r<i;)n+=String.fromCharCode.apply(null,e.subarray(r,r+=10240));n+=String.fromCharCode.apply(null,r?e.subarray(r):e),e=btoa(n)}else{void 0===n&&(n=0),T(),n=v[n],r=Array(Math.floor(e.length/3)),i=n[64]||\"\";let t=0,h=0;for(;t<e.length-2;t+=3){var s=e[t],o=e[t+1],a=e[t+2],c=n[s>>2];s=n[(3&s)<<4|o>>4],o=n[(15&o)<<2|a>>6],a=n[63&a],r[h++]=c+s+o+a}switch(c=0,a=i,e.length-t){case 2:a=n[(15&(c=e[t+1]))<<2]||i;case 1:e=e[t],r[h]=n[e>>2]+n[(3&e)<<4|c>>4]+a+i}e=r.join(\"\")}t=t.g=e}return t}return t instanceof be?t=0!==t.size?t.V(Oe):void 0:void 0}return t}function Ue(t){return Ce(t=t.v,0|t[et],Ne)}let De,Be;function Ge(t,e){return je(t,e[0],e[1])}function je(t,e,n,r=0){if(null==t){var i=32;n?(t=[n],i|=128):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(i=0|t[et],d&&1&i)throw Error(\"rfarr\");if(2048&i&&!(2&i)&&function(){if(d)throw Error(\"carr\");B($,5)}(),256&i)throw Error(\"farr\");if(64&i)return(i|r)!==i&&st(t,i|r),t;if(n&&(i|=128,n!==t[0]))throw Error(\"mid\");t:{i|=64;var s=(n=t).length;if(s){var o=s-1;const t=n[o];if(null!=t&&\"object\"==typeof t&&t.constructor===Object){if((o-=e=128&i?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in t)(s=+a)<o&&(n[s+e]=t[a],delete t[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(128&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return st(t,64|i|r),t}function Ve(t,e){if(\"object\"!=typeof t)return t;if(Array.isArray(t)){var n=0|t[et];return 0===t.length&&1&n?void 0:Xe(t,n,e)}if(null!=t&&t[J]===ct)return We(t);if(t instanceof be){if(2&(e=t.J))return t;if(!t.size)return;if(n=ot(t.V()),t.K)for(t=0;t<n.length;t++){const r=n[t];let i=r[1];i=null==i||\"object\"!=typeof i?void 0:null!=i&&i[J]===ct?We(i):Array.isArray(i)?Xe(i,0|i[et],!!(32&e)):void 0,r[1]=i}return n}return t instanceof P?t:void 0}function Xe(t,e,n){return 2&e||(!n||4096&e||16&e?t=ze(t,e,!1,n&&!(16&e)):(it(t,34),4&e&&Object.freeze(t))),t}function He(t,e,n){return t=new t.constructor(e),n&&(t.h=ut),t.m=ut,t}function We(t){const e=t.v,n=0|e[et];return ht(t,n)?t:Je(t,e,n)?He(t,e):ze(e,n)}function ze(t,e,n,r){return r??=!!(34&e),t=Ce(t,e,Ve,r),r=32,n&&(r|=2),st(t,e=16769217&e|r),t}function Ke(t){const e=t.v,n=0|e[et];return ht(t,n)?Je(t,e,n)?He(t,e,!0):new t.constructor(ze(e,n,!1)):t}function Ye(t){if(t.h!==ut)return!1;var e=t.v;return it(e=ze(e,0|e[et]),2048),t.v=e,t.h=void 0,t.m=void 0,!0}function qe(t){if(!Ye(t)&&ht(t,0|t.v[et]))throw Error()}function $e(t,e){void 0===e&&(e=0|t[et]),32&e&&!(4096&e)&&st(t,4096|e)}function Je(t,e,n){return!!(2&n)||!(!(32&n)||4096&n)&&(st(e,2|n),t.h=ut,!0)}const Ze=Tt(0),Qe={};function tn(t,e,n,r,i){if(null!==(e=en(t.v,e,n,i))||r&&t.m!==ut)return e}function en(t,e,n,r){if(-1===e)return null;const i=e+(n?0:-1),s=t.length-1;let o,a;if(!(s<1+(n?0:-1))){if(i>=s)if(o=t[s],null!=o&&\"object\"==typeof o&&o.constructor===Object)n=o[e],a=!0;else{if(i!==s)return;n=o}else n=t[i];if(r&&null!=n){if(null==(r=r(n)))return r;if(!Object.is(r,n))return a?o[e]=r:t[i]=r,r}return n}}function nn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,n,r)}function rn(t,e,n,r,i){const s=n+(i?0:-1);var o=t.length-1;if(o>=1+(i?0:-1)&&s>=o){const i=t[o];if(null!=i&&\"object\"==typeof i&&i.constructor===Object)return i[n]=r,e}return s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=(e??=0|t[et])>>14&1023||536870912)?null!=r&&(t[o+(i?0:-1)]={[n]:r}):t[s]=r),e)}function sn(){return void 0===dt?2:4}function on(t,e,n,r,i){let s=t.v,o=0|s[et];r=ht(t,o)?1:r,i=!!i||3===r,2===r&&Ye(t)&&(s=t.v,o=0|s[et]);let a=(t=cn(s,e))===nt?7:0|t[et],c=hn(a,o);var h=!(4&c);if(h){4&c&&(t=Wt(t),a=0,c=xn(c,o),o=rn(s,o,e,t));let r=0,i=0;for(;r<t.length;r++){const e=n(t[r]);null!=e&&(t[i++]=e)}i<r&&(t.length=i),n=-513&(4|c),c=n&=-1025,c&=-4097}return c!==a&&(st(t,c),2&c&&Object.freeze(t)),an(t,c,s,o,e,r,h,i)}function an(t,e,n,r,i,s,o,a){let c=e;return 1===s||4===s&&(2&e||!(16&e)&&32&r)?un(e)||((e|=!t.length||o&&!(4096&e)||32&r&&!(4096&e||16&e)?2:256)!==c&&st(t,e),Object.freeze(t)):(2===s&&un(e)&&(t=Wt(t),c=0,e=xn(e,r),r=rn(n,r,i,t)),un(e)||(a||(e|=16),e!==c&&st(t,e))),2&e||!(4096&e||16&e)||$e(n,r),t}function cn(t,e,n){return t=en(t,e,n),Array.isArray(t)?t:nt}function hn(t,e){return 2&e&&(t|=2),1|t}function un(t){return!!(2&t)&&!!(4&t)||!!(256&t)}function ln(t){return lt(t,!0)}function fn(t){t=Wt(t);for(let e=0;e<t.length;e++){const n=t[e]=Wt(t[e]);Array.isArray(n[1])&&(n[1]=ot(n[1]))}return at(t)}function dn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function pn(t,e,n){if(2&e)throw Error();const r=mt(e);let i=cn(t,n,r),s=i===nt?7:0|i[et],o=hn(s,e);return(2&o||un(o)||16&o)&&(o===s||un(o)||st(i,o),i=Wt(i),s=0,o=xn(o,e),rn(t,e,n,i,r)),o&=-13,o!==s&&st(i,o),i}function gn(t,e){var n=Ds;return _n(mn(t=t.v),t,void 0,n)===e?e:-1}function mn(t){if(j)return t[W]??(t[W]=new Map);if(W in t)return t[W];const e=new Map;return Object.defineProperty(t,W,{value:e}),e}function yn(t,e,n,r,i){const s=mn(t),o=_n(s,t,e,n,i);return o!==r&&(o&&(e=rn(t,e,o,void 0,i)),s.set(n,r)),e}function _n(t,e,n,r,i){let s=t.get(r);if(null!=s)return s;s=0;for(let t=0;t<r.length;t++){const o=r[t];null!=en(e,o,i)&&(0!==s&&(n=rn(e,n,s,void 0,i)),s=o)}return t.set(r,s),s}function vn(t,e,n){let r=0|t[et];const i=mt(r),s=en(t,n,i);let o;if(null!=s&&s[J]===ct){if(!ht(s))return Ye(s),s.v;o=s.v}else Array.isArray(s)&&(o=s);if(o){const t=0|o[et];2&t&&(o=ze(o,t))}return o=Ge(o,e),o!==s&&rn(t,r,n,o,i),o}function En(t,e,n,r,i){let s=!1;if(null!=(r=en(t,r,i,(t=>{const r=me(t,n,!1,e);return s=r!==t&&null!=r,r}))))return s&&!ht(r)&&$e(t,e),r}function wn(t,e,n,r){let i=t.v,s=0|i[et];if(null==(e=En(i,s,e,n,r)))return e;if(s=0|i[et],!ht(t,s)){const o=Ke(e);o!==e&&(Ye(t)&&(i=t.v,s=0|i[et]),s=rn(i,s,n,e=o,r),$e(i,s))}return e}function Tn(t,e,n,r,i,s,o,a){var c=ht(t,n);s=c?1:s,o=!!o||3===s,c=a&&!c,(2===s||c)&&Ye(t)&&(n=0|(e=t.v)[et]);var h=(t=cn(e,i))===nt?7:0|t[et],u=hn(h,n);if(a=!(4&u)){var l=t,f=n;const e=!!(2&u);e&&(f|=2);let i=!e,s=!0,o=0,a=0;for(;o<l.length;o++){const t=me(l[o],r,!1,f);if(t instanceof r){if(!e){const e=ht(t);i&&=!e,s&&=e}l[a++]=t}}a<o&&(l.length=a),u|=4,u=s?-4097&u:4096|u,u=i?8|u:-9&u}if(u!==h&&(st(t,u),2&u&&Object.freeze(t)),c&&!(8&u||!t.length&&(1===s||4===s&&(2&u||!(16&u)&&32&n)))){for(un(u)&&(t=Wt(t),u=xn(u,n),n=rn(e,n,i,t)),r=t,c=u,h=0;h<r.length;h++)(l=r[h])!==(u=Ke(l))&&(r[h]=u);c|=8,st(t,u=c=r.length?4096|c:-4097&c)}return an(t,u,e,n,i,s,a,o)}function An(t,e,n){const r=t.v;return Tn(t,r,0|r[et],e,n,sn(),!1,!0)}function bn(t){return null==t&&(t=void 0),t}function kn(t,e,n,r,i){return nn(t,n,r=bn(r),i),r&&!ht(r)&&$e(t.v),t}function Sn(t,e,n,r){t:{var i=r=bn(r);qe(t);const s=t.v;let o=0|s[et];if(null==i){const t=mn(s);if(_n(t,s,o,n)!==e)break t;t.set(n,0)}else o=yn(s,o,n,e);rn(s,o,e,i)}r&&!ht(r)&&$e(t.v)}function xn(t,e){return-273&(2&e?2|t:-3&t)}function Ln(t,e,n,r){var i=r;qe(t),t=Tn(t,r=t.v,0|r[et],n,e,2,!0),i=null!=i?i:new n,t.push(i),e=n=t===nt?7:0|t[et],(i=ht(i))?(n&=-9,1===t.length&&(n&=-4097)):n|=4096,n!==e&&st(t,n),i||$e(r)}function Rn(t,e,n){return ie(tn(t,e,void 0,n))}function In(t){return(g?tn(t,2,void 0,void 0,fe):fe(tn(t,2)))??Ze}function Fn(t,e){return tn(t,e,void 0,void 0,Qt)??0}function Mn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw D(\"int32\");if(!qt(n))throw D(\"int32\");n|=0}nn(t,e,n)}function Pn(t,e,n){nn(t,e,Zt(n))}function Cn(t,e,n){dn(t,e,pe(n),\"\")}function On(t,e,n){{qe(t);const o=t.v;let a=0|o[et];if(null==n)rn(o,a,e);else{var r=t=n===nt?7:0|n[et],i=un(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=Wt(n),r=0,t=xn(t,a),s=!1),t|=5,t|=(4&t?512&t?512:1024&t?1024:0:void 0)??(g?1024:0),i=0;i<n.length;i++){const e=n[i],o=de(e);Object.is(e,o)||(s&&(n=Wt(n),r=0,t=xn(t,a),s=!1),n[i]=o)}t!==r&&(s&&(n=Wt(n),t=xn(t,a)),st(n,t)),rn(o,a,e,n)}}}function Nn(t,e,n){qe(t),on(t,e,ge,2,!0).push(de(n))}var Un=class{constructor(t,e,n){if(this.buffer=t,n&&!e)throw Error();this.g=e}};function Dn(t,e){if(\"string\"==typeof t)return new Un(L(t),e);if(Array.isArray(t))return new Un(new Uint8Array(t),e);if(t.constructor===Uint8Array)return new Un(t,!1);if(t.constructor===ArrayBuffer)return t=new Uint8Array(t),new Un(t,!1);if(t.constructor===P)return e=M(t)||new Uint8Array(0),new Un(e,!0,t);if(t instanceof Uint8Array)return t=t.constructor===Uint8Array?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Un(t,!1);throw Error()}function Bn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);if(s>32)for(i|=(127&n)>>4,s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Wn(t,a),!(128&n))return e(r>>>0,i>>>0);throw Error()}function Gn(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Wn(t,n),!!(127&e)}throw Error()}function jn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw Error();return Wn(t,n),i}function Vn(t){return jn(t)>>>0}function Xn(t){var e=t.h;const n=t.g;var r=e[n],i=e[n+1];const s=e[n+2];return e=e[n+3],Wn(t,t.g+4),t=2*((i=(r<<0|i<<8|s<<16|e<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,255==r?i?NaN:t*(1/0):0==r?1401298464324817e-60*t*i:t*Math.pow(2,r-150)*(i+8388608)}function Hn(t){return jn(t)}function Wn(t,e){if(t.g=e,e>t.l)throw Error()}function zn(t,e){if(e<0)throw Error();const n=t.g;if((e=n+e)>t.l)throw Error();return t.g=e,n}function Kn(t,e){if(0==e)return F();var n=zn(t,e);return t.Y&&t.j?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Rt?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?F():new P(n,I)}var Yn=[];function qn(t,e,n,r){if(ir.length){const i=ir.pop();return i.o(r),i.g.init(t,e,n,r),i}return new rr(t,e,n,r)}function $n(t){t.g.clear(),t.l=-1,t.h=-1,ir.length<100&&ir.push(t)}function Jn(t){var e=t.g;if(e.g==e.l)return!1;t.m=t.g.g;var n=Vn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw Error();if(e<1)throw Error();return t.l=e,t.h=n,!0}function Zn(t){switch(t.h){case 0:0!=t.h?Zn(t):Gn(t.g);break;case 1:Wn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Zn(t);else{var e=Vn(t.g);Wn(t=t.g,t.g+e)}break;case 5:Wn(t=t.g,t.g+4);break;case 3:for(e=t.l;;){if(!Jn(t))throw Error();if(4==t.h){if(t.l!=e)throw Error();break}Zn(t)}break;default:throw Error()}}function Qn(t,e,n){const r=t.g.l;var i=Vn(t.g);let s=(i=t.g.g+i)-r;if(s<=0&&(t.g.l=i,n(e,t,void 0,void 0,void 0),s=i-t.g.g),s)throw Error();return t.g.g=i,t.g.l=r,e}function tr(t){var e=Vn(t.g),a=zn(t=t.g,e);if(t=t.h,o){var c,h=t;(c=s)||(c=s=new TextDecoder(\"utf-8\",{fatal:!0})),e=a+e,h=0===a&&e===h.length?h:h.subarray(a,e);try{var u=c.decode(h)}catch(t){if(void 0===i){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),i=!0}catch(t){i=!1}}throw!i&&(s=void 0),t}}else{e=(u=a)+e,a=[];let i,s=null;for(;u<e;){var l=t[u++];l<128?a.push(l):l<224?u>=e?n():(i=t[u++],l<194||128!=(192&i)?(u--,n()):a.push((31&l)<<6|63&i)):l<240?u>=e-1?n():(i=t[u++],128!=(192&i)||224===l&&i<160||237===l&&i>=160||128!=(192&(c=t[u++]))?(u--,n()):a.push((15&l)<<12|(63&i)<<6|63&c)):l<=244?u>=e-2?n():(i=t[u++],128!=(192&i)||i-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,n()):(l=(7&l)<<18|(63&i)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):n(),a.length>=8192&&(s=r(s,a),a.length=0)}u=r(s,a)}return u}function er(t){const e=Vn(t.g);return Kn(t.g,e)}function nr(t,e,n){var r=Vn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var rr=class{constructor(t,e,n,r){if(Yn.length){const i=Yn.pop();i.init(t,e,n,r),t=i}else t=new class{constructor(t,e,n,r){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.init(t,e,n,r)}init(t,e,n,{Y:r=!1,ea:i=!1}={}){this.Y=r,this.ea=i,t&&(t=Dn(t,this.ea),this.h=t.buffer,this.j=t.g,this.m=e||0,this.l=void 0!==n?this.m+n:this.h.length,this.g=this.m)}clear(){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.Y=!1}}(t,e,n,r);this.g=t,this.m=this.g.g,this.h=this.l=-1,this.o(r)}o({ha:t=!1}={}){this.ha=t}},ir=[];function sr(t){return t?/^\\d+$/.test(t)?(Xt(t),new or(Ft,Mt)):null:ar||=new or(0,0)}var or=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ar;function cr(t){return t?/^-?\\d+$/.test(t)?(Xt(t),new hr(Ft,Mt)):null:ur||=new hr(0,0)}var hr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ur;function lr(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function fr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function dr(t,e){if(e>=0)fr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function pr(t){var e=Ft;t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function gr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function mr(t,e,n){fr(t.g,8*e+n)}function yr(t,e){return mr(t,e,2),e=t.g.end(),gr(t,e),e.push(t.h),e}function _r(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function vr(t,e,n){mr(t,e,2),fr(t.g,n.length),gr(t,t.g.end()),gr(t,n)}function Er(t,e,n,r){null!=n&&(e=yr(t,e),r(n,t),_r(t,e))}function wr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var Tr=wr(),Ar=wr(),br=wr(),kr=wr(),Sr=wr(),xr=wr(),Lr=wr(),Rr=wr(),Ir=wr(),Fr=wr();function Mr(t,e,n){var r=t.v;z&&z in r&&(r=r[z])&&delete r[e.g],e.h?e.j(t,e.h,e.g,n,e.l):e.j(t,e.g,n,e.l)}var Pr=class{constructor(t,e){this.v=je(t,e,void 0,2048)}toJSON(){return Ue(this)}j(){var t=Fo,e=this.v,n=t.g,r=z;if(j&&r&&null!=e[r]?.[n]&&B(K,3),e=t.g,Z&&z&&void 0===Z&&(r=(n=this.v)[z])&&(r=r.da))try{r(n,e,Me)}catch(t){u(t)}return t.h?t.m(this,t.h,t.g,t.l):t.m(this,t.g,t.defaultValue,t.l)}clone(){const t=this.v,e=0|t[et];return Je(this,t,e)?He(this,t,!0):new this.constructor(ze(t,e,!1))}};Pr.prototype[J]=ct,Pr.prototype.toString=function(){return this.v.toString()};var Cr=class{constructor(t,e,n){this.g=t,this.h=e,t=Tr,this.l=!!t&&n===t||!1}};function Or(t,e){return new Cr(t,e,Tr)}function Nr(t,e,n,r,i){Er(t,n,Yr(e,r),i)}const Ur=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr),Dr=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr);var Br=Symbol(),Gr=Symbol(),jr=Symbol(),Vr=Symbol(),Xr=Symbol();let Hr,Wr;function zr(t,e,n,r){var i=r[t];if(i)return i;(i={}).qa=r,i.T=function(t){switch(typeof t){case\"boolean\":return De||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Be||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ba=s,\"function\"==typeof(s=r[++o])&&(i.ma=!0,Hr??=s,Wr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof Cr?t=s:(t=Ur,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Kr(t){return Array.isArray(t)?t[0]instanceof Cr?t:[Dr,t]:[t,void 0]}function Yr(t,e){return t instanceof Pr?t.v:Array.isArray(t)?Ge(t,e):void 0}function qr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function $r(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=zr(Gr,qr,$r,r).T,o||=Jr(r),i)}function Jr(t){let e=t[jr];if(null!=e)return e;const n=zr(Gr,qr,$r,t);return e=n.ma?(t,e)=>Hr(t,e,n):(t,e)=>{for(;Jn(e)&&4!=e.h;){var r=e.l,i=n[r];if(null==i){var s=n.ba;s&&(s=s[r])&&(null!=(s=Qr(s))&&(i=n[r]=s))}if(null==i||!i(e,t,r)){if(i=(s=e).m,Zn(s),s.ha)var o=void 0;else o=s.g.g-i,s.g.g=i,o=Kn(s.g,o);i=void 0,s=t,o&&((i=s[z]??(s[z]=new Fe))[r]??(i[r]=[])).push(o)}}return(t=Re(t))&&(t.da=n.qa[Xr]),!0},t[jr]=e,t[Xr]=Zr.bind(t),e}function Zr(t,e,n,r){var i=this[Gr];const s=this[jr],o=Ge(void 0,i.T),a=Re(t);if(a){var c=!1,h=i.ba;if(h){if(i=(e,n,i)=>{if(0!==i.length)if(h[n])for(const t of i){e=qn(t);try{c=!0,s(o,e)}finally{$n(e)}}else r?.(t,n,i)},null==e)Ie(a,i);else if(null!=a){const t=a[e];t&&i(a,e,t)}if(c){let r=0|t[et];if(2&r&&2048&r&&!n?.Ka)throw Error();const i=mt(r),s=(e,s)=>{if(null!=en(t,e,i)){if(1===n?.Qa)return;throw Error()}null!=s&&(r=rn(t,r,e,s,i)),delete a[e]};null==e?pt(o,0|o[et],((t,e)=>{s(t,e)})):s(e,en(o,e,i))}}}}function Qr(t){const e=(t=Kr(t))[0].g;if(t=t[1]){const n=Jr(t),r=zr(Gr,qr,$r,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function ti(t,e,n){t[e]=n.h}function ei(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=zr(Br,ti,ei,r).T,i||=ni(r))}function ni(t){let e=t[Vr];if(!e){const n=zr(Br,ti,ei,t);e=(t,e)=>ri(t,e,n),t[Vr]=e}return e}function ri(t,e,n){pt(t,0|t[et],((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ba)&&(n=n[e])){var r=(n=Kr(n))[0].h;if(n=n[1]){const e=ni(n),i=zr(Br,ti,ei,n).T;n=t.ma?Wr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}(n,t);i?i(e,r,t):t<500||B(q,3)}})),(t=Re(t))&&Ie(t,((t,n,r)=>{for(gr(e,e.g.end()),t=0;t<r.length;t++)gr(e,M(r[t])||new Uint8Array(0))}))}const ii=Tt(0);function si(t,e){if(Array.isArray(e)){var n=0|e[et];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),(t=-1537&(5|n))!==n&&st(e,t),2&t&&Object.freeze(e),e}}function oi(t,e,n){return new Cr(t,e,n)}function ai(t,e,n){return new Cr(t,e,n)}function ci(t,e,n){rn(t,0|t[et],e,n,mt(0|t[et]))}var hi=Or((function(t,e,n,r,i){if(2!==t.h)return!1;if(t=Wt(t=Qn(t,Ge([void 0,void 0],r),i)),i=mt(r=0|e[et]),2&r)throw Error();let s=en(e,n,i);if(s instanceof be)0!=(2&s.J)?(s=s.V(),s.push(t),rn(e,r,n,s,i)):s.Ma(t);else if(Array.isArray(s)){var o=0|s[et];8192&o||st(s,o|=8192),2&o&&(s=fn(s),rn(e,r,n,s,i)),s.push(t)}else rn(e,r,n,at([t]),i);return!0}),(function(t,e,n,r,i){if(e instanceof be)e.forEach(((e,s)=>{Er(t,n,Ge([s,e],r),i)}));else if(Array.isArray(e)){for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&Er(t,n,Ge(o,r),i)}at(e)}}));function ui(t,e,n){null!=(e=Qt(e))&&(mr(t,n,5),t=t.g,Ot(e),pr(t))}function li(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(zt(64,t));if(re(t)){if(\"string\"===e)return ce(t);if(\"number\"===e)return ae(t)}}(e),null!=e){if(\"string\"==typeof e)cr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new hr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=cr(e),lr(t.g,n.h,n.g)}}}function fi(t,e,n){null!=(e=ie(e))&&null!=e&&(mr(t,n,0),dr(t.g,e))}function di(t,e,n){null!=(e=ee(e))&&(mr(t,n,0),t.g.g.push(e?1:0))}function pi(t,e,n){null!=(e=ge(e))&&vr(t,n,h(e))}function gi(t,e,n,r,i){Er(t,n,Yr(e,r),i)}function mi(t,e,n){null!=(e=null==e||\"string\"==typeof e||e instanceof P?e:void 0)&&vr(t,n,Dn(e,!0).buffer)}function yi(t,e,n){return(5===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Xn,e):e.push(Xn(t.g)),!0)}var _i=oi((function(t,e,n){return 5===t.h&&(ci(e,n,Xn(t.g)),!0)}),ui,Rr),vi=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,5),r=r.g,Ot(s),pr(r))}}),Rr),Ei=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e))&&e.length){mr(t,n,2),fr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ot(e[r]),pr(n)}}),Rr),wi=oi((function(t,e,n){return 5===t.h&&(ci(e,n,0===(t=Xn(t.g))?void 0:t),!0)}),ui,Rr),Ti=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Bt)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Dt)),!0)}),li,xr),Ai=oi((function(t,e,n){return p?(0!==t.h?e=!1:(ci(e,n,(t=Bn(t.g,Bt))===ii?void 0:t),e=!0),e):0===t.h&&(ci(e,n,0===(t=Bn(t.g,Dt))?void 0:t),!0)}),li,xr),bi=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Ut)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Nt)),!0)}),(function(t,e,n){if(e=function(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Kt(64,t));if(re(t)){if(\"string\"===e)return e=$t(Number(t)),Yt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),(e=\"-\"!==t[0]&&((e=t.length)<20||20===e&&t<=\"18446744073709551615\"))||(Xt(t),t=Gt(Ft,Mt))),t;if(\"number\"===e)return(t=$t(t))>=0&&Yt(t)||(Ct(t),t=Nt(Ft,Mt)),t}}(e),null!=e){if(\"string\"==typeof e)sr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new or(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=sr(e),lr(t.g,n.h,n.g)}}}),Lr),ki=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),fi,kr),Si=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,jn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),kr),xi=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=jn(t.g))?void 0:t),!0)}),fi,kr),Li=oi((function(t,e,n){return 0===t.h&&(ci(e,n,Gn(t.g)),!0)}),di,Ar),Ri=oi((function(t,e,n){return 0===t.h&&(ci(e,n,!1===(t=Gn(t.g))?void 0:t),!0)}),di,Ar),Ii=ai((function(t,e,n){return 2===t.h&&(t=tr(t),pn(e,0|e[et],n).push(t),!0)}),(function(t,e,n){if(null!=(e=si(ge,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&vr(r,i,h(s))}}),br),Fi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,\"\"===(t=tr(t))?void 0:t),!0)}),pi,br),Mi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,tr(t)),!0)}),pi,br),Pi=function(t,e,n=Tr){return new Cr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Ge(void 0,r),pn(e,0|e[et],n).push(r),Qn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e)){for(let s=0;s<e.length;s++)gi(t,e[s],n,r,i);1&(t=0|e[et])||st(e,1|t)}})),Ci=Or((function(t,e,n,r,i,s){if(2!==t.h)return!1;let o=0|e[et];return yn(e,o,s,n,mt(o)),Qn(t,e=vn(e,r,n),i),!0}),gi),Oi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,er(t)),!0)}),mi,Ir),Ni=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Vn,e):e.push(Vn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(se,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,0),fr(r.g,s))}}),Sr),Ui=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=Vn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=se(e))&&null!=e&&(mr(t,n,0),fr(t.g,e))}),Sr),Di=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),(function(t,e,n){null!=(e=ie(e))&&(e=parseInt(e,10),mr(t,n,0),dr(t.g,e))}),Fr);class Bi{constructor(t,e){var n=rs;this.g=t,this.h=e,this.m=wn,this.j=kn,this.defaultValue=void 0,this.l=null!=n.Oa?gt:void 0}register(){_(this)}}function Gi(t,e){return new Bi(t,e)}function ji(t,e){return(n,r)=>{{const s={ea:!0};r&&Object.assign(s,r),n=qn(n,void 0,void 0,s);try{const r=new t,s=r.v;Jr(e)(s,n);var i=r}finally{$n(n)}}return i}}function Vi(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};ri(this.v,e,zr(Br,ti,ei,t)),gr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var Xi=class extends Pr{constructor(t){super(t)}},Hi=[0,Fi,oi((function(t,e,n){return 2===t.h&&(ci(e,n,(t=er(t))===F()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Pr){const r=e.Ra;return void(r?(e=r(e),null!=e&&vr(t,n,Dn(e,!0).buffer)):B(q,3))}if(Array.isArray(e))return void B(q,3)}mi(t,e,n)}),Ir)];let Wi,zi=globalThis.trustedTypes;function Ki(t){var e;return void 0===Wi&&(Wi=function(){let t=null;if(!zi)return t;try{const e=t=>t;t=zi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}()),t=(e=Wi)?e.createScriptURL(t):t,new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(t)}function Yi(t,...e){if(0===e.length)return Ki(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ki(n)}var qi=[0,ki,Di,Li,-1,Si,Di,-1,Li],$i=class extends Pr{constructor(t){super(t)}},Ji=[0,Li,Mi,Li,Di,-1,ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Hn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),Fr),Mi,-1,[0,Li,-1],Di,Li,-1],Zi=[0,3,Li,-1,2,[0,ki],[0,Di,Li],[0,Mi,-1],[0]],Qi=[0,Mi,-2],ts=class extends Pr{constructor(t){super(t)}},es=[0],ns=[0,ki,Li,1,Li,-4],rs=class extends Pr{constructor(t){super(t,2)}},is={};is[336783863]=[0,Mi,Li,-1,ki,[0,[1,2,3,4,5,6,7,8,9],Ci,es,Ci,Ji,Ci,Qi,Ci,ns,Ci,qi,Ci,[0,Mi,-2],Ci,[0,Mi,Di],Ci,Zi,Ci,[0,Di,-1,Li]],[0,Mi],Li,[0,[1,3],[2,4],Ci,[0,Si],-1,Ci,[0,Ii],-1,Pi,[0,Mi,-1]],Mi];var ss=[0,Ai,-1,Ri,-3,Ai,Si,Fi,xi,Ai,-1,Ri,xi,Ri,-2,Fi];function os(t,e){Nn(t,3,e)}function as(t,e){Nn(t,4,e)}var cs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,7,t)}},hs=[-1,{}],us=[0,Mi,1,hs],ls=[0,Mi,Ii,hs];function fs(t,e){Ln(t,1,cs,e)}function ds(t,e){Nn(t,10,e)}function ps(t,e){Nn(t,15,e)}var gs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,1001,t)}},ms=[-500,Pi,[-500,Fi,-1,Ii,-3,[-2,is,Li],Pi,Hi,xi,-1,us,ls,Pi,[0,Fi,Ri],Fi,ss,xi,Ii,987,Ii],4,Pi,[-500,Mi,-1,[-1,{}],998,Mi],Pi,[-500,Mi,Ii,-1,[-2,{},Li],997,Ii,-1],xi,Pi,[-500,Mi,Ii,hs,998,Ii],Ii,xi,us,ls,Pi,[0,Fi,-1,hs],Ii,-2,ss,Fi,-1,Ri,[0,Ri,Ui],978,hs,Pi,Hi];gs.prototype.g=Vi(ms);var ys=ji(gs,ms),_s=class extends Pr{constructor(t){super(t)}},vs=class extends Pr{constructor(t){super(t)}g(){return An(this,_s,1)}},Es=[0,Pi,[0,ki,_i,Mi,-1]],ws=ji(vs,Es),Ts=class extends Pr{constructor(t){super(t)}},As=class extends Pr{constructor(t){super(t)}},bs=class extends Pr{constructor(t){super(t)}l(){return wn(this,Ts,2)}g(){return An(this,As,5)}},ks=ji(class extends Pr{constructor(t){super(t)}},[0,Ii,Si,Ei,[0,Di,[0,ki,-3],[0,_i,-3],[0,ki,-1,[0,Pi,[0,ki,-2]]],Pi,[0,_i,-1,Mi,_i]],Mi,-1,Ti,Pi,[0,ki,_i],Ii,Ti]),Ss=class extends Pr{constructor(t){super(t)}},xs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Ls=class extends Pr{constructor(t){super(t)}},Rs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Is=class extends Pr{constructor(t){super(t)}},Fs=[0,ki,-1,Ei,Di],Ms=class extends Pr{constructor(t){super(t)}};Ms.prototype.g=Vi([0,_i,-4,Ti]);var Ps=class extends Pr{constructor(t){super(t)}},Cs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,1,ki,Mi,Es],Ti]),Os=class extends Pr{constructor(t){super(t)}},Ns=class extends Pr{constructor(t){super(t)}na(){const t=tn(this,1,void 0,void 0,ln);return null==t?F():t}},Us=class extends Pr{constructor(t){super(t)}},Ds=[1,2],Bs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,Ds,Ci,[0,Ei],Ci,[0,Oi],ki,Mi],Ti]),Gs=class extends Pr{constructor(t){super(t)}},js=[0,Mi,ki,_i,Ii,-1],Vs=class extends Pr{constructor(t){super(t)}},Xs=[0,Li,-1],Hs=class extends Pr{constructor(t){super(t)}},Ws=[1,2,3,4,5,6],zs=class extends Pr{constructor(t){super(t)}g(){return null!=tn(this,1,void 0,void 0,ln)}l(){return null!=ge(tn(this,2))}},Ks=class extends Pr{constructor(t){super(t)}g(){return ee(tn(this,2))??!1}},Ys=[0,Oi,Mi,[0,ki,Ti,-1],[0,bi,Ti]],qs=[0,Ys,Li,[0,Ws,Ci,ns,Ci,Ji,Ci,qi,Ci,es,Ci,Qi,Ci,Zi],Di],$s=class extends Pr{constructor(t){super(t)}},Js=[0,qs,_i,-1,ki],Zs=Gi(502141897,$s);is[502141897]=Js;var Qs=ji(class extends Pr{constructor(t){super(t)}},[0,[0,Di,-1,vi,Ni],Fs]),to=class extends Pr{constructor(t){super(t)}},eo=class extends Pr{constructor(t){super(t)}},no=[0,qs,_i,[0,qs],Li],ro=Gi(508968150,eo);is[508968150]=[0,qs,Js,no,_i,[0,[0,Ys]]],is[508968149]=no;var io=class extends Pr{constructor(t){super(t)}l(){return wn(this,Gs,2)}g(){nn(this,2)}},so=[0,qs,js];is[478825465]=so;var oo=class extends Pr{constructor(t){super(t)}},ao=class extends Pr{constructor(t){super(t)}},co=class extends Pr{constructor(t){super(t)}},ho=class extends Pr{constructor(t){super(t)}},uo=class extends Pr{constructor(t){super(t)}},lo=[0,qs,[0,qs],so,-1],fo=[0,qs,_i,ki],po=[0,qs,_i],go=[0,qs,fo,po,_i],mo=Gi(479097054,uo);is[479097054]=[0,qs,go,lo],is[463370452]=lo,is[464864288]=fo;var yo=Gi(462713202,ho);is[462713202]=go,is[474472470]=po;var _o=class extends Pr{constructor(t){super(t)}},vo=class extends Pr{constructor(t){super(t)}},Eo=class extends Pr{constructor(t){super(t)}},wo=class extends Pr{constructor(t){super(t)}},To=[0,qs,_i,-1,ki],Ao=[0,qs,_i,Li];wo.prototype.g=Vi([0,qs,po,[0,qs],Js,no,To,Ao]);var bo=class extends Pr{constructor(t){super(t)}},ko=Gi(456383383,bo);is[456383383]=[0,qs,js];var So=class extends Pr{constructor(t){super(t)}},xo=Gi(476348187,So);is[476348187]=[0,qs,Xs];var Lo=class extends Pr{constructor(t){super(t)}},Ro=class extends Pr{constructor(t){super(t)}},Io=[0,Di,-1],Fo=Gi(458105876,class extends Pr{constructor(t){super(t)}g(){let t;var e=this.v;const n=0|e[et];return t=ht(this,n),e=function(t,e,n,r){var i=Ro;!r&&Ye(t)&&(n=0|(e=t.v)[et]);var s=en(e,2);if(t=!1,null==s){if(r)return Le();s=[]}else if(s.constructor===be){if(!(2&s.J)||r)return s;s=s.V()}else Array.isArray(s)?t=!!(2&(0|s[et])):s=[];if(r){if(!s.length)return Le();t||(t=!0,ot(s))}else t&&(t=!1,at(s),s=fn(s));return!t&&32&n&&it(s,32),n=rn(e,n,2,r=new be(s,i,ye,void 0)),t||$e(e,n),r}(this,e,n,t),!t&&Ro&&(e.ra=!0),e}});is[458105876]=[0,Io,hi,[!0,Ti,[0,Mi,-1,Ii]],[0,Si,Li,Di]];var Mo=class extends Pr{constructor(t){super(t)}},Po=Gi(458105758,Mo);is[458105758]=[0,qs,Mi,Io];var Co=class extends Pr{constructor(t){super(t)}},Oo=[0,wi,-1,Ri],No=class extends Pr{constructor(t){super(t)}},Uo=class extends Pr{constructor(t){super(t)}},Do=[1,2];Uo.prototype.g=Vi([0,Do,Ci,Oo,Ci,[0,Pi,Oo]]);var Bo=class extends Pr{constructor(t){super(t)}},Go=Gi(443442058,Bo);is[443442058]=[0,qs,Mi,ki,_i,Ii,-1,Li,_i],is[514774813]=To;var jo=class extends Pr{constructor(t){super(t)}},Vo=Gi(516587230,jo);function Xo(t,e){return e=e?e.clone():new Gs,void 0!==t.displayNamesLocale?nn(e,1,pe(t.displayNamesLocale)):void 0===t.displayNamesLocale&&nn(e,1),void 0!==t.maxResults?Mn(e,2,t.maxResults):\"maxResults\"in t&&nn(e,2),void 0!==t.scoreThreshold?Pn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&nn(e,3),void 0!==t.categoryAllowlist?On(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(e,4),void 0!==t.categoryDenylist?On(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&nn(e,5),e}function Ho(t){const e=Number(t);return Number.isSafeInteger(e)?e:String(t)}function Wo(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:Rn(t,1)??0??-1,score:Fn(t,2)??0,categoryName:ge(tn(t,3))??\"\"??\"\",displayName:ge(tn(t,4))??\"\"??\"\"}))),headIndex:e,headName:n}}function zo(t){const e={classifications:An(t,Ps,1).map((t=>Wo(wn(t,vs,4)?.g()??[],Rn(t,2)??0,ge(tn(t,3))??\"\")))};return null!=function(t){return le(g?tn(t,2,void 0,void 0,fe):tn(t,2))}(t)&&(e.timestampMs=Ho(In(t))),e}function Ko(t){var e=on(t,3,Qt,sn()),n=on(t,2,ie,sn()),r=on(t,1,ge,sn()),i=on(t,9,ge,sn());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=wn(t,bs,4)?.l())&&(s.boundingBox={originX:Rn(e,1,Qe)??0,originY:Rn(e,2,Qe)??0,width:Rn(e,3,Qe)??0,height:Rn(e,4,Qe)??0,angle:0}),wn(t,bs,4)?.g().length)for(const e of wn(t,bs,4).g())s.keypoints.push({x:tn(e,1,void 0,Qe,Qt)??0,y:tn(e,2,void 0,Qe,Qt)??0,score:tn(e,4,void 0,Qe,Qt)??0,label:ge(tn(e,3,void 0,Qe))??\"\"});return s}function Yo(t){const e=[];for(const n of An(t,Ls,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function qo(t){const e=[];for(const n of An(t,Ss,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function $o(t){return Array.from(t,(t=>t>127?t-256:t))}function Jo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Zo;is[516587230]=[0,qs,To,Ao,_i],is[518928384]=Ao;const Qo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function ta(){if(void 0===Zo)try{await WebAssembly.instantiate(Qo),Zo=!0}catch{Zo=!1}return Zo}async function ea(t,e=Yi``){const n=await ta()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var na=class{};function ra(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function ia(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}try{importScripts(t.toString())}catch(e){if(!(e instanceof TypeError))throw e;await self.import(t.toString())}}function sa(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function oa(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function aa(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=sa(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function ca(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function ha(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function ua(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}na.forVisionTasks=function(t){return ea(\"vision\",t)},na.forTextTasks=function(t){return ea(\"text\",t)},na.forGenAiExperimentalTasks=function(t){return ea(\"genai_experimental\",t)},na.forGenAiTasks=function(t){return ea(\"genai\",t)},na.forAudioTasks=function(t){return ea(\"audio\",t)},na.isSimdSupported=function(){return ta()};async function la(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await ia(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await ia(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function fa(t,e){const n=wn(t.baseOptions,zs,1)||new zs;\"string\"==typeof e?(nn(n,2,pe(e)),nn(n,1)):e instanceof Uint8Array&&(nn(n,1,lt(e,!1)),nn(n,2)),kn(t.baseOptions,0,1,n)}function da(t){try{const e=t.H.length;if(1===e)throw Error(t.H[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.H.map((t=>t.message)).join(\", \"))}finally{t.H=[]}}function pa(t,e){t.C=Math.max(t.C,e)}function ga(t,e){t.B=new cs,Cn(t.B,2,\"PassThroughCalculator\"),os(t.B,\"free_memory\"),as(t.B,\"free_memory_unused_out\"),ds(e,\"free_memory\"),fs(e,t.B)}function ma(t,e){os(t.B,e),as(t.B,e+\"_unused_out\")}function ya(t){t.g.addBoolToStream(!0,\"free_memory\",t.C)}var _a=class{constructor(t){this.g=t,this.H=[],this.C=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(wn(this.baseOptions,zs,1)?.g()||wn(this.baseOptions,zs,1)?.l()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=wn(t.baseOptions,Hs,3);if(!n){var r=n=new Hs,i=new ts;Sn(r,4,Ws,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new $i,Sn(e,2,Ws,r)):(e=n,r=new ts,Sn(e,4,Ws,r))),kn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),fa(this,\"/model.dat\"),this.m(),this.L()}));if(e.modelAssetBuffer instanceof Uint8Array)fa(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{fa(this,t),this.m(),this.L()}))}return this.m(),this.L(),Promise.resolve()}L(){}ca(){let t;if(this.g.ca((e=>{t=ys(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.H.push(Error(e))})),this.g.Ja(),this.g.setGraph(t,e),this.B=void 0,da(this)}finishProcessing(){this.g.finishProcessing(),da(this)}close(){this.B=void 0,this.g.closeGraph()}};function va(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}_a.prototype.close=_a.prototype.close;class Ea{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function wa(t,e,n){const r=t.g;if(n=va(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Ta(t,e){const n=t.g,r=va(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=va(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=va(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.L),n.vertexAttribPointer(t.L,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Ea(n,r,i,s)}function Aa(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ba(t,e,n,r){return Aa(t,e),t.h||(t.m(),t.D()),n?(t.u||(t.u=Ta(t,!0)),n=t.u):(t.A||(t.A=Ta(t,!1)),n=t.A),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function ka(t,e,n){return Aa(t,e),t=va(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function Sa(t,e,n){Aa(t,e),t.B||(t.B=va(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.B),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function xa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var La=class{H(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=va(t.createProgram(),\"Failed to create WebGL program\"),this.X=wa(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.W=wa(this,this.H(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.L=t.getAttribLocation(this.h,\"aTex\")}D(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.X),t.deleteShader(this.W)}this.B&&this.g.deleteFramebuffer(this.B),this.A&&this.A.close(),this.u&&this.u.close()}};var Ra=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.C=ka(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=ka(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.P=va(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=va(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.M=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.M,0),t.uniform1i(this.P,1),t.uniform1i(this.U,2)}close(){this.C&&this.g.deleteTexture(this.C),this.j&&this.g.deleteTexture(this.j),super.close()}},Ia=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=ka(this,t),t.activeTexture(t.TEXTURE2),this.C=ka(this,t)}m(){super.m();const t=this.g;this.M=va(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.P=va(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.I=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.I,0),t.uniform1i(this.M,1),t.uniform1i(this.P,2)}close(){this.j&&this.g.deleteTexture(this.j),this.C&&this.g.deleteTexture(this.C),super.close()}};function Fa(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Ma(t){var e=Fa(t,1);if(!e){if(e=Fa(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=Ca(t);var n=Na(t);if(Sa(n,r,Pa(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function Pa(t){let e=Fa(t,2);if(!e){const n=Ca(t);e=Ua(t);const r=Ma(t),i=Oa(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),Da(t)}return e}function Ca(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Oa(t){if(t=Ca(t),!Ba)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))Ba=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");Ba=t.R16F}return Ba}function Na(t){return t.l||(t.l=new La),t.l}function Ua(t){const e=Ca(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Fa(t,2);return n||(n=ka(Na(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Da(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var Ba,Ga=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--ja&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!Fa(this,0)}ka(){return!!Fa(this,1)}R(){return!!Fa(this,2)}ja(){return(e=Fa(t=this,0))||(e=Ma(t),e=new Uint8Array(e.map((t=>Math.round(255*t)))),t.g.push(e)),e;var t,e}ia(){return Ma(this)}N(){return Pa(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=Ca(this),e=Na(this);t.activeTexture(t.TEXTURE1),n=ka(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=Oa(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{Ua(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Da(this)})),xa(e),Da(this)}}t.push(n)}return new Ga(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ca(this).deleteTexture(Fa(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsFloat32Array=Ga.prototype.ia,Ga.prototype.getAsUint8Array=Ga.prototype.ja,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasFloat32Array=Ga.prototype.ka,Ga.prototype.hasUint8Array=Ga.prototype.Fa;var ja=250;const Va={color:\"white\",lineWidth:4,radius:6};function Xa(t){return{...Va,fillColor:(t=t||{}).color,...t}}function Ha(t,e){return t instanceof Function?t(e):t}function Wa(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function za(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function Ka(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function Ya(t,e,n){if(e.R())n(e.N());else{const r=e.ka()?e.ia():e.ja();t.m=t.m??new La;const i=Ka(t);n((t=new Ga([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function qa(t,e,n,r){const i=function(t){return t.g||(t.g=new Ra),t.g}(t),s=Ka(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ba(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.C),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.I&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.I,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.I=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function $a(t,e,n,r){const i=Ka(t),s=function(t){return t.h||(t.h=new Ia),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ba(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.C),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var Ja=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=za(this);e=Xa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=Ha(e.fillColor,{index:i,from:s}),n.strokeStyle=Ha(e.color,{index:i,from:s}),n.lineWidth=Ha(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,Ha(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=za(this);n=Xa(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=Ha(n.color,{index:s,from:e,to:a}),r.lineWidth=Ha(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=za(this);e=Xa(e),n.save(),n.beginPath(),n.lineWidth=Ha(e.lineWidth,{}),n.strokeStyle=Ha(e.color,{}),n.fillStyle=Ha(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{qa(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):qa(this,t.N(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{$a(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):$a(this,t.N(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Za(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Qa(t){var e=Za(t,0);if(!e){e=ec(t);const n=nc(t),r=new Uint8Array(t.width*t.height*4);Sa(n,e,tc(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),xa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function tc(t){let e=Za(t,2);if(!e){const n=ec(t);e=rc(t);const r=Za(t,1)||Qa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),ic(t)}return e}function ec(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function nc(t){return t.l||(t.l=new La),t.l}function rc(t){const e=ec(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Za(t,2);return n||(n=ka(nc(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ic(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function sc(t){const e=ec(t);return ba(nc(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}Ja.prototype.close=Ja.prototype.close,Ja.prototype.drawConfidenceMask=Ja.prototype.wa,Ja.prototype.drawCategoryMask=Ja.prototype.va,Ja.prototype.drawBoundingBox=Ja.prototype.ua,Ja.prototype.drawConnectors=Ja.prototype.xa,Ja.prototype.drawLandmarks=Ja.prototype.ya,Ja.lerp=function(t,e,n,r,i){return Wa(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ja.clamp=Wa;var oc=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--ac&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Za(this,0)}la(){return!!Za(this,1)}R(){return!!Za(this,2)}Ca(){return Qa(this)}Ba(){var t=Za(this,1);return t||(tc(this),rc(this),t=sc(this),ic(this),this.g.push(t),this.j=!0),t}N(){return tc(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=ec(this),e=nc(this);t.activeTexture(t.TEXTURE1),n=ka(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{rc(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ic(this)})),xa(e),ic(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);tc(this),rc(this),n=sc(this),ic(this)}t.push(n)}return new oc(t,this.la(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Za(this,1).close(),this.m&&ec(this).deleteTexture(Za(this,2)),ac=-1}};oc.prototype.close=oc.prototype.close,oc.prototype.clone=oc.prototype.clone,oc.prototype.getAsWebGLTexture=oc.prototype.N,oc.prototype.getAsImageBitmap=oc.prototype.Ba,oc.prototype.getAsImageData=oc.prototype.Ca,oc.prototype.hasWebGLTexture=oc.prototype.R,oc.prototype.hasImageBitmap=oc.prototype.la,oc.prototype.hasImageData=oc.prototype.Ea;var ac=250;function cc(...t){return t.map((([t,e])=>({start:t,end:e})))}const hc=function(t){return class extends t{Ja(){this.i._registerModelResourcesGraphService()}}}((uc=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:ra()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),oa(this,r||\"input_audio\",(r=>{oa(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}ca(t){ha(this,\"__graph_config__\",(e=>{t(e)})),oa(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),oa(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){oa(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){oa(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){oa(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){oa(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){oa(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){oa(this,e,(e=>{ca(this,Object.keys(t),(r=>{ca(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){oa(this,n,(n=>{oa(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){oa(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){oa(this,n,(n=>{oa(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){ha(this,t,e),oa(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){ua(this,t,e),oa(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),ha(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),oa(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends uc{get ga(){return this.i}pa(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.ga._addBoundTextureAsImageToStream(e,r,i,n)}))}Z(t,e){ha(this,t,e),oa(this,t,(t=>{this.ga._attachImageListener(t)}))}aa(t,e){ua(this,t,e),oa(this,t,(t=>{this.ga._attachImageVectorListener(t)}))}}));var uc,lc=class extends hc{};async function fc(t,e,n){return async function(t,e,n,r){return la(t,e,n,r)}(t,n.canvas??(ra()?void 0:document.createElement(\"canvas\")),e,n)}function dc(t,e,n,r){if(t.U){const s=new Ms;if(n?.regionOfInterest){if(!t.oa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");Pn(s,1,(i.left+i.right)/2),Pn(s,2,(i.top+i.bottom)/2),Pn(s,4,i.right-i.left),Pn(s,3,i.bottom-i.top)}else Pn(s,1,.5),Pn(s,2,.5),Pn(s,4,1),Pn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90\u00B0.\");if(Pn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=sa(e);n=Fn(s,3)*r/t,i=Fn(s,4)*t/r,Pn(s,4,n),Pn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.pa(e,t.X,r??performance.now()),t.finishProcessing()}function pc(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");dc(t,e,n,t.C+1)}function gc(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");dc(t,e,n,r)}function mc(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new Ga([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var yc=class extends _a{constructor(t,e,n,r){super(t),this.g=t,this.X=e,this.U=n,this.oa=r,this.P=new La}l(t,e=!0){if(\"runningMode\"in t&&nn(this.baseOptions,2,te(!!t.runningMode&&\"IMAGE\"!==t.runningMode)),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.P.close(),super.close()}};yc.prototype.close=yc.prototype.close;var _c=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},kn(t=this.h=new $s,0,1,e=new Ks),Pn(this.h,2,.5),Pn(this.h,3,.3)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&Pn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&Pn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect_in\"),ps(t,\"detections\");const e=new rs;Mr(e,Zs,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect_in\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.G,_c.prototype.detect=_c.prototype.F,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=async function(t,e){return fc(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return fc(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return fc(_c,t,e)};var vc=cc([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ec=cc([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),wc=cc([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Tc=cc([474,475],[475,476],[476,477],[477,474]),Ac=cc([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),bc=cc([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),kc=cc([469,470],[470,471],[471,472],[472,469]),Sc=cc([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),xc=[...vc,...Ec,...wc,...Ac,...bc,...Sc],Lc=cc([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function Rc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var Ic=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,kn(t=this.h=new eo,0,1,e=new Ks),this.A=new to,kn(this.h,0,3,this.A),this.u=new $s,kn(this.h,0,2,this.u),Mn(this.u,4,1),Pn(this.u,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Mn(this.u,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&Pn(this.A,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}F(t,e){return Rc(this),pc(this,t,e),this.j}G(t,e,n){return Rc(this),gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"face_landmarks\");const e=new rs;Mr(e,ro,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.j.faceLandmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"blendshapes\"),as(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ws(e),this.j.faceBlendshapes.push(Wo(t.g()??[]));pa(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{pa(this,t)}))),this.outputFacialTransformationMatrixes&&(ps(t,\"face_geometry\"),as(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=wn(t=Qs(e),Is,2))&&this.j.facialTransformationMatrixes.push({rows:Rn(t,1)??0??0,columns:Rn(t,2)??0??0,data:on(t,3,Qt,sn()).slice()??[]});pa(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ic.prototype.detectForVideo=Ic.prototype.G,Ic.prototype.detect=Ic.prototype.F,Ic.prototype.setOptions=Ic.prototype.o,Ic.createFromModelPath=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetPath:e}})},Ic.createFromModelBuffer=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetBuffer:e}})},Ic.createFromOptions=function(t,e){return fc(Ic,t,e)},Ic.FACE_LANDMARKS_LIPS=vc,Ic.FACE_LANDMARKS_LEFT_EYE=Ec,Ic.FACE_LANDMARKS_LEFT_EYEBROW=wc,Ic.FACE_LANDMARKS_LEFT_IRIS=Tc,Ic.FACE_LANDMARKS_RIGHT_EYE=Ac,Ic.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Ic.FACE_LANDMARKS_RIGHT_IRIS=kc,Ic.FACE_LANDMARKS_FACE_OVAL=Sc,Ic.FACE_LANDMARKS_CONTOURS=xc,Ic.FACE_LANDMARKS_TESSELATION=Lc;var Fc=cc([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function Mc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function Pc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function Cc(t,e=!0){const n=[];for(const i of t){var r=ws(i);t=[];for(const n of r.g())r=e&&null!=Rn(n,1)?Rn(n,1)??0:-1,t.push({score:Fn(n,2)??0,index:r,categoryName:ge(tn(n,3))??\"\"??\"\",displayName:ge(tn(n,4))??\"\"??\"\"});n.push(t)}return n}var Oc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.j=new uo,0,1,e=new Ks),this.u=new ho,kn(this.j,0,2,this.u),this.D=new co,kn(this.u,0,3,this.D),this.A=new ao,kn(this.u,0,2,this.A),this.h=new oo,kn(this.j,0,3,this.h),Pn(this.A,2,.5),Pn(this.u,4,.5),Pn(this.D,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){if(Mn(this.A,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.A,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.u,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.D,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new io,n=e,r=Xo(t.cannedGesturesClassifierOptions,wn(this.h,io,3)?.l());kn(n,0,2,r),kn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&wn(this.h,io,3)?.g();return t.customGesturesClassifierOptions?(kn(n=e=new io,0,2,r=Xo(t.customGesturesClassifierOptions,wn(this.h,io,4)?.l())),kn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&wn(this.h,io,4)?.g(),this.l(t)}Ha(t,e){return Mc(this),pc(this,t,e),Pc(this)}Ia(t,e,n){return Mc(this),gc(this,t,n,e),Pc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_gestures\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,mo,this.j);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"HAND_GESTURES:hand_gestures\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=Rs(e);const n=[];for(const e of An(t,Ls,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.landmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=xs(e);const n=[];for(const e of An(t,Ss,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.worldLandmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...Cc(t,!1)),pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...Cc(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function Nc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}Oc.prototype.recognizeForVideo=Oc.prototype.Ia,Oc.prototype.recognize=Oc.prototype.Ha,Oc.prototype.setOptions=Oc.prototype.o,Oc.createFromModelPath=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetPath:e}})},Oc.createFromModelBuffer=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetBuffer:e}})},Oc.createFromOptions=function(t,e){return fc(Oc,t,e)},Oc.HAND_CONNECTIONS=Fc;var Uc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.h=new ho,0,1,e=new Ks),this.u=new co,kn(this.h,0,3,this.u),this.j=new ao,kn(this.h,0,2,this.j),Mn(this.j,3,1),Pn(this.j,2,.5),Pn(this.u,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Mn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.u,2,t.minHandPresenceConfidence??.5),this.l(t)}F(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],pc(this,t,e),Nc(this)}G(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],gc(this,t,n,e),Nc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,yo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ws(e);const n=[];for(const e of t.g())n.push({score:Fn(e,2)??0,index:Rn(e,1)??0??-1,categoryName:ge(tn(e,3))??\"\"??\"\",displayName:ge(tn(e,4))??\"\"??\"\"});i.push(n)}r.call(n,...i),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Uc.prototype.detectForVideo=Uc.prototype.G,Uc.prototype.detect=Uc.prototype.F,Uc.prototype.setOptions=Uc.prototype.o,Uc.createFromModelPath=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetPath:e}})},Uc.createFromModelBuffer=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetBuffer:e}})},Uc.createFromOptions=function(t,e){return fc(Uc,t,e)},Uc.HAND_CONNECTIONS=Fc;var Dc=cc([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function Bc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function Gc(t){try{if(!t.D)return t.h;t.D(t.h)}finally{ya(t)}}function jc(t,e){t=Rs(t),e.push(Yo(t))}var Vc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,kn(t=this.j=new wo,0,1,e=new Ks),this.I=new co,kn(this.j,0,2,this.I),this.W=new _o,kn(this.j,0,3,this.W),this.u=new $s,kn(this.j,0,4,this.u),this.O=new to,kn(this.j,0,5,this.O),this.A=new vo,kn(this.j,0,6,this.A),this.M=new Eo,kn(this.j,0,7,this.M),Pn(this.u,2,.5),Pn(this.u,3,.3),Pn(this.O,2,.5),Pn(this.A,2,.5),Pn(this.A,3,.3),Pn(this.M,2,.5),Pn(this.I,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&Pn(this.u,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&Pn(this.O,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&Pn(this.A,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&Pn(this.A,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&Pn(this.M,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&Pn(this.I,2,t.minHandLandmarksConfidence??.5),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.D=\"function\"==typeof e?e:n,Bc(this),pc(this,t,r),Gc(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.D=\"function\"==typeof n?n:r,Bc(this),gc(this,t,i,e),Gc(this)}m(){var t=new gs;ds(t,\"input_frames_image\"),ps(t,\"pose_landmarks\"),ps(t,\"pose_world_landmarks\"),ps(t,\"face_landmarks\"),ps(t,\"left_hand_landmarks\"),ps(t,\"left_hand_world_landmarks\"),ps(t,\"right_hand_landmarks\"),ps(t,\"right_hand_world_landmarks\");const e=new rs,n=new Xi;Cn(n,1,\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),function(t,e){if(null!=e)if(Array.isArray(e))nn(t,2,Ce(e,0,Ne));else{if(!(\"string\"==typeof e||e instanceof P||R(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");dn(t,2,lt(e,!1),F())}}(n,this.j.g());const r=new cs;Cn(r,2,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),Ln(r,8,Xi,n),os(r,\"IMAGE:input_frames_image\"),as(r,\"POSE_LANDMARKS:pose_landmarks\"),as(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),as(r,\"FACE_LANDMARKS:face_landmarks\"),as(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),as(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),as(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),as(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),fs(t,r),ga(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{jc(t,this.h.poseLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{pa(this,t)})),this.outputPoseSegmentationMasks&&(as(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),ma(this,\"pose_segmentation_mask\"),this.g.Z(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[mc(this,t,!0,!this.D)],pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],pa(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{jc(t,this.h.faceLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"extra_blendshapes\"),as(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ws(t),n.push(Wo(t.g()??[]))),pa(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{pa(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{jc(t,this.h.leftHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{jc(t,this.h.rightHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.detectForVideo=Vc.prototype.G,Vc.prototype.detect=Vc.prototype.F,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return fc(Vc,t,e)},Vc.HAND_CONNECTIONS=Fc,Vc.POSE_CONNECTIONS=Dc,Vc.FACE_LANDMARKS_LIPS=vc,Vc.FACE_LANDMARKS_LEFT_EYE=Ec,Vc.FACE_LANDMARKS_LEFT_EYEBROW=wc,Vc.FACE_LANDMARKS_LEFT_IRIS=Tc,Vc.FACE_LANDMARKS_RIGHT_EYE=Ac,Vc.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Vc.FACE_LANDMARKS_RIGHT_IRIS=kc,Vc.FACE_LANDMARKS_FACE_OVAL=Sc,Vc.FACE_LANDMARKS_CONTOURS=xc,Vc.FACE_LANDMARKS_TESSELATION=Lc;var Xc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},kn(t=this.h=new bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return kn(this.h,0,2,Xo(t,wn(this.h,Gs,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},pc(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_image\"),ds(t,\"norm_rect\"),ps(t,\"classifications\");const e=new rs;Mr(e,ko,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),os(n,\"IMAGE:input_image\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"CLASSIFICATIONS:classifications\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=zo(Cs(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.classifyForVideo=Xc.prototype.ta,Xc.prototype.classify=Xc.prototype.sa,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return fc(Xc,t,e)};var Hc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!0),this.h=new So,this.embeddings={embeddings:[]},kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){var e=this.h,n=wn(this.h,Vs,2);return n=n?n.clone():new Vs,void 0!==t.l2Normalize?nn(n,1,te(t.l2Normalize)):\"l2Normalize\"in t&&nn(n,1),void 0!==t.quantize?nn(n,2,te(t.quantize)):\"quantize\"in t&&nn(n,2),kn(e,0,2,n),this.l(t)}za(t,e){return pc(this,t,e),this.embeddings}Aa(t,e,n){return gc(this,t,n,e),this.embeddings}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"embeddings_out\");const e=new rs;Mr(e,xo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Bs(t),this.embeddings=function(t){return{embeddings:An(t,Us,1).map((t=>{const e={headIndex:Rn(t,3)??0??-1,headName:ge(tn(t,4))??\"\"??\"\"};var n=t.v;return void 0!==En(n,0|n[et],Os,gn(t,1))?(t=on(t=wn(t,Os,gn(t,1),void 0),1,Qt,sn()),e.floatEmbedding=t.slice()):(n=new Uint8Array(0),e.quantizedEmbedding=wn(t,Ns,gn(t,2),void 0)?.na()?.h()??n),e})),timestampMs:Ho(In(t))}}(t),pa(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Jo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Jo($o(t.quantizedEmbedding),$o(e.quantizedEmbedding))}return t},Hc.prototype.embedForVideo=Hc.prototype.Aa,Hc.prototype.embed=Hc.prototype.za,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return fc(Hc,t,e)};var Wc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function zc(t){const e=function(t){return An(t,cs,1)}(t.ca()).filter((t=>(ge(tn(t,1))??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.u=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(wn(e[0],rs,7)?.j()?.g()??new Map).forEach(((e,n)=>{t.u[Number(n)]=ge(tn(e,1))??\"\"}))}function Kc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Yc(t){try{const e=new Wc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{ya(t)}}Wc.prototype.close=Wc.prototype.close;var qc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.u=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.A=new Lo,kn(this.h,0,3,this.A),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}L(){zc(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,Kc(this),pc(this,t,r),Yc(this)}La(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,Kc(this),gc(this,t,i,e),Yc(this)}Da(){return this.u}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};qc.prototype.getLabels=qc.prototype.Da,qc.prototype.segmentForVideo=qc.prototype.La,qc.prototype.segment=qc.prototype.segment,qc.prototype.setOptions=qc.prototype.o,qc.createFromModelPath=function(t,e){return fc(qc,t,{baseOptions:{modelAssetPath:e}})},qc.createFromModelBuffer=function(t,e){return fc(qc,t,{baseOptions:{modelAssetBuffer:e}})},qc.createFromOptions=function(t,e){return fc(qc,t,e)};var $c=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};$c.prototype.close=$c.prototype.close;var Jc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.u=new Lo,kn(this.h,0,3,this.u),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};if(this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.C+1,r=new Uo,e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var s=new Co;dn(s,3,te(!0),!1),dn(s,1,Zt(e.keypoint.x),0),dn(s,2,Zt(e.keypoint.y),0),Sn(r,1,Do,s)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");{const t=new No;for(s of e.scribble)dn(e=new Co,3,te(!0),!1),dn(e,1,Zt(s.x),0),dn(e,2,Zt(s.y),0),Ln(t,1,Co,e);Sn(r,2,Do,t)}}this.g.addProtoToStream(r.g(),\"mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest\",\"roi_in\",n),pc(this,t,i);t:{try{const t=new $c(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var o=t;break t}this.j(t)}finally{ya(this)}o=void 0}return o}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"roi_in\"),ds(t,\"norm_rect_in\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2\"),os(n,\"IMAGE:image_in\"),os(n,\"ROI:roi_in\"),os(n,\"NORM_RECT:norm_rect_in\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Jc.prototype.segment=Jc.prototype.segment,Jc.prototype.setOptions=Jc.prototype.o,Jc.createFromModelPath=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetPath:e}})},Jc.createFromModelBuffer=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetBuffer:e}})},Jc.createFromOptions=function(t,e){return fc(Jc,t,e)};var Zc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},kn(t=this.h=new Bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),void 0!==t.maxResults?Mn(this.h,3,t.maxResults):\"maxResults\"in t&&nn(this.h,3),void 0!==t.scoreThreshold?Pn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&nn(this.h,4),void 0!==t.categoryAllowlist?On(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(this.h,5),void 0!==t.categoryDenylist?On(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&nn(this.h,6),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_frame_gpu\"),ds(t,\"norm_rect\"),ps(t,\"detections\");const e=new rs;Mr(e,Go,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),os(n,\"IMAGE:input_frame_gpu\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Zc.prototype.detectForVideo=Zc.prototype.G,Zc.prototype.detect=Zc.prototype.F,Zc.prototype.setOptions=Zc.prototype.o,Zc.createFromModelPath=async function(t,e){return fc(Zc,t,{baseOptions:{modelAssetPath:e}})},Zc.createFromModelBuffer=function(t,e){return fc(Zc,t,{baseOptions:{modelAssetBuffer:e}})},Zc.createFromOptions=function(t,e){return fc(Zc,t,e)};var Qc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function th(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function eh(t){try{const e=new Qc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.u)return e;t.u(e)}finally{ya(t)}}Qc.prototype.close=Qc.prototype.close;var nh=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,kn(t=this.h=new jo,0,1,e=new Ks),this.A=new Eo,kn(this.h,0,3,this.A),this.j=new vo,kn(this.h,0,2,this.j),Mn(this.j,4,1),Pn(this.j,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Mn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&Pn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&Pn(this.A,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.u=\"function\"==typeof e?e:n,th(this),pc(this,t,r),eh(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.u=\"function\"==typeof n?n:r,th(this),gc(this,t,i,e),eh(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"normalized_landmarks\"),ps(t,\"world_landmarks\"),ps(t,\"segmentation_masks\");const e=new rs;Mr(e,Vo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:normalized_landmarks\"),as(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),fs(t,n),ga(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],pa(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],pa(this,t)})),this.outputSegmentationMasks&&(as(n,\"SEGMENTATION_MASK:segmentation_masks\"),ma(this,\"segmentation_masks\"),this.g.aa(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>mc(this,t,!0,!this.u))),pa(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};nh.prototype.detectForVideo=nh.prototype.G,nh.prototype.detect=nh.prototype.F,nh.prototype.setOptions=nh.prototype.o,nh.createFromModelPath=function(t,e){return fc(nh,t,{baseOptions:{modelAssetPath:e}})},nh.createFromModelBuffer=function(t,e){return fc(nh,t,{baseOptions:{modelAssetBuffer:e}})},nh.createFromOptions=function(t,e){return fc(nh,t,e)},nh.POSE_CONNECTIONS=Dc;export{Ja as DrawingUtils,_c as FaceDetector,Ic as FaceLandmarker,na as FilesetResolver,Oc as GestureRecognizer,Uc as HandLandmarker,Vc as HolisticLandmarker,Xc as ImageClassifier,Hc as ImageEmbedder,qc as ImageSegmenter,Wc as ImageSegmenterResult,Jc as InteractiveSegmenter,$c as InteractiveSegmenterResult,oc as MPImage,Ga as MPMask,Zc as ObjectDetector,nh as PoseLandmarker,_a as TaskRunner,yc as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import {\r\n FilesetResolver,\r\n FaceLandmarker,\r\n FaceLandmarkerResult,\r\n} from \"@mediapipe/tasks-vision\";\r\n\r\nconst WASM_CDN =\r\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\";\r\nconst MODEL_URL =\r\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task\";\r\n\r\n// Module-level cache \u2014 survives component remounts and retries within the same page session.\r\n// First init fetches ~8MB total (WASM + model); subsequent inits reuse the cache instantly.\r\nlet _cachedVision: Awaited<ReturnType<typeof FilesetResolver.forVisionTasks>> | null = null;\r\nlet _cachedModelBuffer: ArrayBuffer | null = null;\r\n\r\nexport interface FaceDetectionResult {\r\n faceDetected: boolean;\r\n blendshapes: Map<string, number>;\r\n transformMatrix: number[] | null;\r\n}\r\n\r\nexport class FaceDetectorEngine {\r\n private landmarker: FaceLandmarker | null = null;\r\n\r\n async init(): Promise<void> {\r\n // Reuse WASM fileset \u2014 avoids re-fetching ~3MB on retry / remount\r\n if (!_cachedVision) {\r\n _cachedVision = await FilesetResolver.forVisionTasks(WASM_CDN);\r\n }\r\n\r\n // Reuse model buffer \u2014 avoids re-fetching ~5MB on retry / remount\r\n if (!_cachedModelBuffer) {\r\n const res = await fetch(MODEL_URL);\r\n if (!res.ok) {\r\n throw new Error(`Failed to download face model (${res.status})`);\r\n }\r\n _cachedModelBuffer = await res.arrayBuffer();\r\n }\r\n\r\n this.landmarker = await FaceLandmarker.createFromOptions(_cachedVision, {\r\n baseOptions: {\r\n // Pass a copy \u2014 MediaPipe takes ownership of the buffer\r\n modelAssetBuffer: new Uint8Array(_cachedModelBuffer.slice(0)),\r\n },\r\n runningMode: \"VIDEO\",\r\n outputFaceBlendshapes: true,\r\n outputFacialTransformationMatrixes: true,\r\n numFaces: 1,\r\n });\r\n }\r\n\r\n detect(video: HTMLVideoElement, timestamp: number): FaceDetectionResult {\r\n if (!this.landmarker) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n let result: FaceLandmarkerResult;\r\n try {\r\n result = this.landmarker.detectForVideo(video, timestamp);\r\n } catch {\r\n // Video may not be ready yet \u2014 return no-face gracefully\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n if (!result.faceBlendshapes || result.faceBlendshapes.length === 0) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const blendshapes = new Map<string, number>();\r\n for (const bs of result.faceBlendshapes[0].categories) {\r\n blendshapes.set(bs.categoryName, bs.score);\r\n }\r\n\r\n const transformMatrix =\r\n result.facialTransformationMatrixes &&\r\n result.facialTransformationMatrixes.length > 0\r\n ? (Array.from(result.facialTransformationMatrixes[0].data) as number[])\r\n : null;\r\n\r\n return { faceDetected: true, blendshapes, transformMatrix };\r\n }\r\n\r\n destroy(): void {\r\n if (this.landmarker) {\r\n this.landmarker.close();\r\n this.landmarker = null;\r\n }\r\n }\r\n}\r\n", "import { FaceDetectionResult } from \"./FaceDetector\";\r\n\r\nexport interface ActionState {\r\n action: string;\r\n detected: boolean;\r\n active: boolean;\r\n confidence: number;\r\n}\r\n\r\n/**\r\n * Per-action detection tuning.\r\n * - threshold : minimum confidence score required to start counting.\r\n * - holdFrames: consecutive frames above threshold before action is confirmed.\r\n *\r\n * BLINK is a fast reflex (~100-200ms) so we use a low threshold and only 2\r\n * frames. Head-turn and mouth-open are sustained movements so they need a\r\n * slightly longer hold to avoid false positives.\r\n */\r\nconst ACTION_CONFIGS: Record<string, { threshold: number; holdFrames: number }> = {\r\n BLINK: { threshold: 0.25, holdFrames: 2 },\r\n TURN_LEFT: { threshold: 0.30, holdFrames: 3 },\r\n TURN_RIGHT: { threshold: 0.30, holdFrames: 3 },\r\n TURN_HEAD: { threshold: 0.90, holdFrames: 5 },\r\n OPEN_MOUTH: { threshold: 0.30, holdFrames: 2 },\r\n};\r\nconst DEFAULT_CONFIG = { threshold: 0.40, holdFrames: 4 };\r\n\r\n/**\r\n * Sequential action detector aligned with backend's 5 UPPERCASE actions:\r\n * BLINK, TURN_LEFT, TURN_RIGHT, TURN_HEAD, OPEN_MOUTH\r\n */\r\nexport class ActionDetector {\r\n private completedActions = new Set<string>();\r\n private holdCounters = new Map<string, number>();\r\n private yawHistory: number[] = [];\r\n private readonly YAW_HISTORY_SIZE = 18; // ~0.6s of frames\r\n\r\n constructor(private requiredActions: string[]) {}\r\n\r\n check(result: FaceDetectionResult): ActionState[] {\r\n const currentAction = this.getCurrentAction();\r\n\r\n if (!result.faceDetected) {\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n const bs = result.blendshapes;\r\n\r\n // Only check the current active action (sequential flow)\r\n if (currentAction && !this.completedActions.has(currentAction)) {\r\n const conf = this.getConfidence(currentAction, bs, result.transformMatrix);\r\n const cfg = ACTION_CONFIGS[currentAction] ?? DEFAULT_CONFIG;\r\n\r\n if (conf >= cfg.threshold) {\r\n const count = (this.holdCounters.get(currentAction) || 0) + 1;\r\n this.holdCounters.set(currentAction, count);\r\n\r\n if (count >= cfg.holdFrames) {\r\n this.completedActions.add(currentAction);\r\n this.holdCounters.delete(currentAction);\r\n }\r\n } else {\r\n this.holdCounters.set(currentAction, 0);\r\n }\r\n\r\n return this.buildStates(currentAction, conf);\r\n }\r\n\r\n return this.buildStates(currentAction, 0);\r\n }\r\n\r\n getCurrentAction(): string | null {\r\n for (const action of this.requiredActions) {\r\n if (!this.completedActions.has(action)) return action;\r\n }\r\n return null;\r\n }\r\n\r\n private buildStates(\r\n currentAction: string | null,\r\n currentConf: number\r\n ): ActionState[] {\r\n return this.requiredActions.map((action) => ({\r\n action,\r\n detected: this.completedActions.has(action),\r\n active: action === currentAction,\r\n confidence: action === currentAction ? currentConf : 0,\r\n }));\r\n }\r\n\r\n private getConfidence(\r\n action: string,\r\n bs: Map<string, number>,\r\n matrix: number[] | null\r\n ): number {\r\n switch (action) {\r\n case \"BLINK\": {\r\n const left = bs.get(\"eyeBlinkLeft\") || 0;\r\n const right = bs.get(\"eyeBlinkRight\") || 0;\r\n return (left + right) / 2;\r\n }\r\n\r\n case \"TURN_LEFT\": {\r\n // Accept either direction \u2014 instruction is \"turn sideways\"\r\n // Using absolute yaw so any head turn registers\r\n const yaw = Math.abs(this.getHeadYaw(matrix));\r\n return yaw > 5 ? Math.min(1, yaw / 20) : 0;\r\n }\r\n\r\n case \"TURN_RIGHT\": {\r\n // Accept either direction \u2014 instruction is \"turn sideways\"\r\n const yaw = Math.abs(this.getHeadYaw(matrix));\r\n return yaw > 5 ? Math.min(1, yaw / 20) : 0;\r\n }\r\n\r\n case \"TURN_HEAD\": {\r\n // Proper side-to-side: head must reach left AND right within the\r\n // recent frame window. 0.5 when one side is seen, 1.0 when both.\r\n const yaw = this.getHeadYaw(matrix);\r\n this.yawHistory.push(yaw);\r\n if (this.yawHistory.length > this.YAW_HISTORY_SIZE) {\r\n this.yawHistory.shift();\r\n }\r\n if (this.yawHistory.length < this.YAW_HISTORY_SIZE) {\r\n return 0;\r\n }\r\n const left = this.yawHistory.some((y) => y <= -10);\r\n const right = this.yawHistory.some((y) => y >= 10);\r\n if (left && right) return 1.0;\r\n if (left || right) return 0.5;\r\n return 0;\r\n }\r\n\r\n case \"OPEN_MOUTH\":\r\n return bs.get(\"jawOpen\") || 0;\r\n\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n private getHeadYaw(matrix: number[] | null): number {\r\n if (!matrix || matrix.length < 16) return 0;\r\n // 4x4 column-major matrix from MediaPipe FaceLandmarker\r\n // Yaw (rotation around Y axis): atan2(-m20, m00) where m20=matrix[2], m00=matrix[0]\r\n return Math.atan2(-matrix[2], matrix[0]) * (180 / Math.PI);\r\n }\r\n\r\n allCompleted(): boolean {\r\n return this.requiredActions.every((a) => this.completedActions.has(a));\r\n }\r\n\r\n completedCount(): number {\r\n return this.completedActions.size;\r\n }\r\n\r\n reset(): void {\r\n this.completedActions.clear();\r\n this.holdCounters.clear();\r\n this.yawHistory = [];\r\n }\r\n}\r\n", "import { ActionState } from \"../../camera/ActionDetector\";\r\n\r\nconst ICONS: Record<string, string> = {\r\n BLINK: \"\uD83D\uDC41\",\r\n TURN_LEFT: \"\u2194\",\r\n TURN_RIGHT: \"\u2194\",\r\n TURN_HEAD: \"\u2194\",\r\n OPEN_MOUTH: \"\uD83D\uDE2E\",\r\n};\r\n\r\nconst ACTION_CUES: Record<string, string> = {\r\n BLINK: `<div style=\"font-size:52px;line-height:1;animation:sc-blink 1.2s ease-in-out infinite;\">\uD83D\uDC41\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">BLINK YOUR EYES</div>`,\r\n TURN_LEFT: `<div style=\"font-size:52px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">TURN HEAD SIDEWAYS</div>`,\r\n TURN_RIGHT: `<div style=\"font-size:52px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">TURN HEAD SIDEWAYS</div>`,\r\n TURN_HEAD: `<div style=\"font-size:52px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;\">\u2194\uFE0F</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">TURN HEAD SIDE TO SIDE</div>`,\r\n OPEN_MOUTH: `<div style=\"font-size:52px;line-height:1;animation:sc-mouth 1.2s ease-in-out infinite;\">\uD83D\uDE2E</div>\r\n <div style=\"font-size:12px;font-weight:600;color:#fff;margin-top:6px;letter-spacing:0.5px;\">OPEN YOUR MOUTH</div>`,\r\n};\r\n\r\nfunction injectLivenessKeyframes(): void {\r\n if (document.getElementById(\"sc-liveness-kf\")) return;\r\n const s = document.createElement(\"style\");\r\n s.id = \"sc-liveness-kf\";\r\n s.textContent = `\r\n @keyframes sc-blink {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(0.1); }\r\n 50% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-turn-head {\r\n 0%,100% { transform:translateX(0); }\r\n 25% { transform:translateX(-12px); }\r\n 75% { transform:translateX(12px); }\r\n }\r\n @keyframes sc-mouth {\r\n 0%,100% { transform:scaleY(1); }\r\n 40% { transform:scaleY(1.25); }\r\n 60% { transform:scaleY(1); }\r\n }\r\n @keyframes sc-pop-in {\r\n 0% { transform:scale(0.7); opacity:0; }\r\n 60% { transform:scale(1.05); }\r\n 100% { transform:scale(1); opacity:1; }\r\n }\r\n `;\r\n document.head.appendChild(s);\r\n}\r\n\r\nexport interface UIChallenge {\r\n actions: string[];\r\n time_limit_seconds: number;\r\n instruction: string;\r\n}\r\n\r\nexport class LivenessUI {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private instructionEl: HTMLDivElement | null = null;\r\n private stepsEl: HTMLDivElement | null = null;\r\n private progressBarEl: HTMLDivElement | null = null;\r\n private confidenceRingEl: SVGCircleElement | null = null;\r\n private timerEl: HTMLDivElement | null = null;\r\n private overlayEl: HTMLDivElement | null = null;\r\n private actionCueEl: HTMLDivElement | null = null;\r\n private timerInterval: ReturnType<typeof setInterval> | null = null;\r\n private totalActions = 0;\r\n private currentCueAction: string | null = null;\r\n private docCaptureRoot: HTMLDivElement | null = null;\r\n // updateActions() is called on every requestAnimationFrame tick (~60fps,\r\n // up to the challenge's ~45s time limit) \u2014 cache each action's step\r\n // element (avoids a querySelector per action per frame) and its last\r\n // rendered detected/active combination (avoids rewriting the same style\r\n // properties every frame when nothing about that action changed).\r\n private stepEls: Map<string, { step: HTMLDivElement; num: HTMLElement | null }> | null = null;\r\n private lastActionRender: Map<string, string> = new Map();\r\n\r\n mount(container: HTMLElement, challenge: UIChallenge): HTMLVideoElement {\r\n injectLivenessKeyframes();\r\n this.totalActions = challenge.actions.length;\r\n\r\n // \u2500\u2500 Root \u2014 two-column layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n display:flex;flex-direction:row;width:100%;margin:0 auto;\r\n background:#0a0a0a;border-radius:16px;overflow:hidden;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n min-height:340px;\r\n `;\r\n\r\n // \u2500\u2500 LEFT: Camera column \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const camCol = document.createElement(\"div\");\r\n camCol.style.cssText = `\r\n position:relative;flex:0 0 55%;\r\n background:#000;overflow:hidden;\r\n `;\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText = `\r\n width:100%;height:100%;display:block;\r\n transform:scaleX(-1);object-fit:cover;\r\n min-height:320px;\r\n `;\r\n\r\n // Oval guide \u2014 centred in camera column\r\n const guideWrap = document.createElement(\"div\");\r\n guideWrap.style.cssText = `\r\n position:absolute;top:50%;left:50%;\r\n transform:translate(-50%,-55%);\r\n width:140px;height:180px;pointer-events:none;\r\n `;\r\n\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 140 180\");\r\n svg.style.cssText = \"width:100%;height:100%;\";\r\n\r\n const bgOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\r\n bgOval.setAttribute(\"cx\", \"70\");\r\n bgOval.setAttribute(\"cy\", \"90\");\r\n bgOval.setAttribute(\"rx\", \"64\");\r\n bgOval.setAttribute(\"ry\", \"86\");\r\n bgOval.setAttribute(\"fill\", \"none\");\r\n bgOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.3)\");\r\n bgOval.setAttribute(\"stroke-width\", \"2\");\r\n bgOval.setAttribute(\"stroke-dasharray\", \"6 3\");\r\n\r\n const confOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\r\n confOval.setAttribute(\"cx\", \"70\");\r\n confOval.setAttribute(\"cy\", \"90\");\r\n confOval.setAttribute(\"rx\", \"64\");\r\n confOval.setAttribute(\"ry\", \"86\");\r\n confOval.setAttribute(\"fill\", \"none\");\r\n confOval.setAttribute(\"stroke\", \"#22c55e\");\r\n confOval.setAttribute(\"stroke-width\", \"3\");\r\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\r\n confOval.setAttribute(\"stroke-dasharray\", `${circ}`);\r\n confOval.setAttribute(\"stroke-dashoffset\", `${circ}`);\r\n confOval.style.cssText = \"transition:stroke-dashoffset 0.15s ease;transform:rotate(-90deg);transform-origin:70px 90px;\";\r\n this.confidenceRingEl = confOval as unknown as SVGCircleElement;\r\n\r\n svg.appendChild(bgOval);\r\n svg.appendChild(confOval);\r\n guideWrap.appendChild(svg);\r\n\r\n // Instruction text \u2014 top of camera column\r\n const camTop = document.createElement(\"div\");\r\n camTop.style.cssText = `\r\n position:absolute;top:0;left:0;right:0;\r\n background:linear-gradient(180deg,rgba(0,0,0,0.8) 0%,transparent 100%);\r\n padding:10px 12px 28px;\r\n `;\r\n this.instructionEl = document.createElement(\"div\");\r\n this.instructionEl.style.cssText = `\r\n color:#fff;font-size:13px;font-weight:600;text-align:center;line-height:1.4;\r\n `;\r\n this.instructionEl.textContent = challenge.instruction;\r\n camTop.appendChild(this.instructionEl);\r\n\r\n // Timer \u2014 bottom of camera column\r\n const camBottom = document.createElement(\"div\");\r\n camBottom.style.cssText = `\r\n position:absolute;bottom:0;left:0;right:0;\r\n background:linear-gradient(0deg,rgba(0,0,0,0.7) 0%,transparent 100%);\r\n padding:24px 10px 8px;text-align:center;\r\n `;\r\n this.timerEl = document.createElement(\"div\");\r\n this.timerEl.style.cssText = `\r\n color:rgba(255,255,255,0.5);font-size:11px;font-variant-numeric:tabular-nums;\r\n `;\r\n camBottom.appendChild(this.timerEl);\r\n\r\n // Action cue \u2014 centre of camera column\r\n this.actionCueEl = document.createElement(\"div\");\r\n this.actionCueEl.style.cssText = `\r\n position:absolute;bottom:36px;left:50%;transform:translateX(-50%);\r\n z-index:5;pointer-events:none;display:none;text-align:center;\r\n background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);\r\n border-radius:14px;padding:10px 18px;min-width:170px;\r\n border:1.5px solid rgba(255,255,255,0.12);\r\n `;\r\n\r\n camCol.appendChild(this.videoEl);\r\n camCol.appendChild(guideWrap);\r\n camCol.appendChild(camTop);\r\n camCol.appendChild(camBottom);\r\n camCol.appendChild(this.actionCueEl);\r\n\r\n // \u2500\u2500 RIGHT: Steps column \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const stepsCol = document.createElement(\"div\");\r\n stepsCol.style.cssText = `\r\n flex:1;display:flex;flex-direction:column;\r\n padding:16px 14px;gap:8px;\r\n background:#111;border-left:1px solid rgba(255,255,255,0.06);\r\n justify-content:space-between;\r\n `;\r\n\r\n // Progress bar at top of steps column\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `\r\n height:3px;background:rgba(255,255,255,0.1);border-radius:2px;overflow:hidden;\r\n margin-bottom:4px;\r\n `;\r\n this.progressBarEl = document.createElement(\"div\");\r\n this.progressBarEl.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,#22c55e,#4ade80);\r\n border-radius:2px;transition:width 0.4s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBarEl);\r\n\r\n // Steps list\r\n this.stepsEl = document.createElement(\"div\");\r\n this.stepsEl.style.cssText = \"display:flex;flex-direction:column;gap:6px;flex:1;\";\r\n this.stepEls = new Map();\r\n this.lastActionRender = new Map();\r\n\r\n for (let i = 0; i < challenge.actions.length; i++) {\r\n const action = challenge.actions[i];\r\n const step = document.createElement(\"div\");\r\n step.dataset.action = action;\r\n step.style.cssText = `\r\n display:flex;align-items:center;gap:8px;\r\n padding:8px 10px;border-radius:10px;\r\n background:rgba(255,255,255,0.04);\r\n border:1px solid rgba(255,255,255,0.06);\r\n transition:all 0.3s ease;\r\n opacity:${i === 0 ? \"1\" : \"0.45\"};\r\n `;\r\n\r\n const num = document.createElement(\"div\");\r\n num.className = \"sc-step-num\";\r\n num.style.cssText = `\r\n width:24px;height:24px;border-radius:50%;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:12px;font-weight:700;color:#fff;\r\n background:rgba(255,255,255,0.1);\r\n border:1.5px solid rgba(255,255,255,0.2);\r\n transition:all 0.3s ease;\r\n `;\r\n num.textContent = String(i + 1);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = \"color:#fff;font-size:12px;font-weight:500;flex:1;line-height:1.3;\";\r\n label.textContent = this.describeAction(action);\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = \"font-size:16px;flex-shrink:0;\";\r\n icon.textContent = ICONS[action] || \"\";\r\n\r\n step.appendChild(num);\r\n step.appendChild(label);\r\n step.appendChild(icon);\r\n this.stepsEl.appendChild(step);\r\n this.stepEls.set(action, { step, num });\r\n }\r\n\r\n stepsCol.appendChild(progressWrap);\r\n stepsCol.appendChild(this.stepsEl);\r\n\r\n // Result overlay \u2014 full root\r\n this.overlayEl = document.createElement(\"div\");\r\n this.overlayEl.style.cssText = `\r\n position:absolute;inset:0;display:none;align-items:center;\r\n justify-content:center;z-index:10;\r\n background:rgba(0,0,0,0.88);backdrop-filter:blur(8px);\r\n `;\r\n\r\n // \u2500\u2500 Assemble \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n this.root.appendChild(camCol);\r\n this.root.appendChild(stepsCol);\r\n this.root.appendChild(this.overlayEl);\r\n\r\n container.appendChild(this.root);\r\n this.startTimer(challenge.time_limit_seconds);\r\n\r\n return this.videoEl;\r\n }\r\n\r\n updateActions(states: ActionState[]): void {\r\n if (!this.stepsEl || !this.progressBarEl || !this.stepEls) return;\r\n\r\n let completed = 0;\r\n\r\n for (const state of states) {\r\n if (state.detected) completed++;\r\n\r\n // Called every rAF tick (~60fps, up to ~45s) \u2014 most frames carry the\r\n // same detected/active combination as the last one, so skip the DOM\r\n // writes entirely unless this action's discrete state actually flipped.\r\n const renderKey = state.detected ? \"detected\" : state.active ? \"active\" : \"idle\";\r\n if (this.lastActionRender.get(state.action) === renderKey) continue;\r\n this.lastActionRender.set(state.action, renderKey);\r\n\r\n const cached = this.stepEls.get(state.action);\r\n if (!cached) continue;\r\n const { step, num } = cached;\r\n\r\n if (state.detected) {\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(34,197,94,0.12)\";\r\n step.style.borderColor = \"rgba(34,197,94,0.3)\";\r\n if (num) {\r\n num.style.background = \"#22c55e\";\r\n num.style.borderColor = \"#22c55e\";\r\n num.textContent = \"\u2713\";\r\n }\r\n } else if (state.active) {\r\n step.style.opacity = \"1\";\r\n step.style.background = \"rgba(59,130,246,0.12)\";\r\n step.style.borderColor = \"rgba(59,130,246,0.3)\";\r\n if (num) {\r\n num.style.borderColor = \"#3b82f6\";\r\n num.style.background = \"rgba(59,130,246,0.3)\";\r\n }\r\n }\r\n }\r\n\r\n const activeState = states.find((s) => s.active && !s.detected) ?? null;\r\n\r\n const pct = this.totalActions > 0 ? (completed / this.totalActions) * 100 : 0;\r\n this.progressBarEl.style.width = `${pct}%`;\r\n\r\n if (this.confidenceRingEl) {\r\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\r\n const conf = activeState ? activeState.confidence : 0;\r\n this.confidenceRingEl.setAttribute(\"stroke-dashoffset\", `${circ * (1 - conf)}`);\r\n this.confidenceRingEl.setAttribute(\"stroke\", conf > 0.6 ? \"#22c55e\" : \"#3b82f6\");\r\n }\r\n\r\n this.updateActionCue(activeState?.action ?? null);\r\n }\r\n\r\n private updateActionCue(action: string | null): void {\r\n if (!this.actionCueEl) return;\r\n if (!action) { this.actionCueEl.style.display = \"none\"; this.currentCueAction = null; return; }\r\n if (action === this.currentCueAction) return;\r\n this.currentCueAction = action;\r\n const cueHtml = ACTION_CUES[action];\r\n if (!cueHtml) { this.actionCueEl.style.display = \"none\"; return; }\r\n this.actionCueEl.innerHTML = cueHtml;\r\n this.actionCueEl.style.display = \"block\";\r\n this.actionCueEl.style.animation = \"none\";\r\n void this.actionCueEl.offsetWidth;\r\n this.actionCueEl.style.animation = \"sc-pop-in 0.3s ease forwards\";\r\n }\r\n\r\n updateInstruction(text: string): void {\r\n if (this.instructionEl) this.instructionEl.textContent = text;\r\n }\r\n\r\n stopTimer(): void {\r\n if (this.timerInterval) { clearInterval(this.timerInterval); this.timerInterval = null; }\r\n if (this.timerEl) this.timerEl.textContent = \"\";\r\n }\r\n\r\n showResult(status: \"processing\" | \"failed\", _verificationId?: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n const ok = status === \"processing\";\r\n this.overlayEl.style.display = \"flex\";\r\n // C3: Internal entry ID removed \u2014 never expose DB integers to end users\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 16px;display:flex;align-items:center;justify-content:center;font-size:32px;\r\n background:${ok ? \"rgba(34,197,94,0.2)\" : \"rgba(239,68,68,0.2)\"};\r\n border:3px solid ${ok ? \"#22c55e\" : \"#ef4444\"};\">\r\n ${ok ? \"\u2713\" : \"\u2715\"}\r\n </div>\r\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">${ok ? \"Verification submitted\" : \"Submission failed\"}</div>\r\n <div style=\"font-size:12px;opacity:0.6;line-height:1.6;\">${ok ? \"Hold on while we wrap up\u2026\" : \"Something went wrong. Please try again.\"}</div>\r\n </div>`;\r\n setTimeout(resolve, 1800);\r\n });\r\n }\r\n\r\n showTimeout(onRetry: () => void): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (!this.overlayEl) { resolve(); return; }\r\n if (this.actionCueEl) this.actionCueEl.style.display = \"none\";\r\n this.stopTimer();\r\n this.overlayEl.style.display = \"flex\";\r\n this.overlayEl.innerHTML = `\r\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\r\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;font-size:32px;background:rgba(251,191,36,0.15);border:3px solid #fbbf24;\">\u23F1</div>\r\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">Time's Up</div>\r\n <div style=\"font-size:12px;opacity:0.6;margin-bottom:18px;\">You ran out of time. Please try again.</div>\r\n <button id=\"sc-retry-btn\" style=\"padding:11px 28px;border-radius:10px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:14px;font-weight:600;width:100%;max-width:180px;\">Try Again</button>\r\n </div>`;\r\n const btn = this.overlayEl.querySelector(\"#sc-retry-btn\") as HTMLButtonElement | null;\r\n if (btn) { btn.addEventListener(\"click\", () => { onRetry(); resolve(); }); }\r\n else { setTimeout(resolve, 5000); }\r\n });\r\n }\r\n\r\n getVideoElement(): HTMLVideoElement | null { return this.videoEl; }\r\n\r\n mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n injectLivenessKeyframes();\r\n const docRoot = document.createElement(\"div\");\r\n docRoot.style.cssText = `position:relative;width:100%;max-width:420px;margin:0 auto;background:#0a0a0a;border-radius:16px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;box-shadow:0 8px 32px rgba(0,0,0,0.4);`;\r\n this.docCaptureRoot = docRoot;\r\n const docVideo = document.createElement(\"video\");\r\n docVideo.autoplay = true; docVideo.playsInline = true; docVideo.muted = true;\r\n docVideo.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n docVideo.srcObject = stream;\r\n const guideOverlay = document.createElement(\"div\");\r\n guideOverlay.style.cssText = \"position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;\";\r\n guideOverlay.innerHTML = `<div style=\"width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;\"><div style=\"position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:4px 0 0 0;\"></div><div style=\"position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 4px 0 0;\"></div><div style=\"position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:0 0 0 4px;\"></div><div style=\"position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 0 4px 0;\"></div></div>`;\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = \"position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;\";\r\n header.innerHTML = `<div style=\"color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;\">Scan Your ID Document</div><div style=\"color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;\">Fit your document inside the frame.<br>Make sure all text and corners are visible.</div>`;\r\n const bottomPanel = document.createElement(\"div\");\r\n bottomPanel.style.cssText = \"position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px;\";\r\n bottomPanel.innerHTML = `<div style=\"font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;\">\uD83D\uDCA1 Good lighting \u00B7 No glare \u00B7 All 4 corners visible</div><button id=\"sc-capture-doc-btn\" style=\"width:100%;padding:12px;border-radius:12px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;\">Capture Document</button><label style=\"width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;\"><span>\uD83D\uDCC1</span><span>Upload from gallery instead</span><input id=\"sc-upload-doc-input\" type=\"file\" accept=\"image/*\" style=\"display:none;\" /></label>`;\r\n docRoot.appendChild(docVideo); docRoot.appendChild(guideOverlay); docRoot.appendChild(header); docRoot.appendChild(bottomPanel);\r\n container.appendChild(docRoot);\r\n docVideo.play().catch(() => {});\r\n const cleanup = () => { try { docRoot.remove(); } catch(_){} this.docCaptureRoot = null; };\r\n const captureBtn = bottomPanel.querySelector(\"#sc-capture-doc-btn\") as HTMLButtonElement;\r\n if (captureBtn) {\r\n captureBtn.addEventListener(\"click\", () => {\r\n try {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = docVideo.videoWidth || 1280; canvas.height = docVideo.videoHeight || 720;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas context unavailable\")); return; }\r\n ctx.drawImage(docVideo, 0, 0);\r\n canvas.toBlob((blob) => { if (blob) { cleanup(); resolve(blob); } else { reject(new Error(\"Failed to capture document image\")); } }, \"image/jpeg\", 0.92);\r\n } catch (err) { reject(err); }\r\n });\r\n }\r\n const uploadInput = bottomPanel.querySelector(\"#sc-upload-doc-input\") as HTMLInputElement;\r\n if (uploadInput) { uploadInput.addEventListener(\"change\", () => { const file = uploadInput.files?.[0]; if (file) { cleanup(); resolve(file); } }); }\r\n });\r\n }\r\n\r\n unmount(): void {\r\n this.stopTimer();\r\n try { this.docCaptureRoot?.remove(); } catch(_){} this.docCaptureRoot = null;\r\n try { this.root?.remove(); } catch(_){}\r\n this.root = null; this.videoEl = null; this.instructionEl = null;\r\n this.stepsEl = null; this.progressBarEl = null; this.confidenceRingEl = null;\r\n this.timerEl = null; this.overlayEl = null; this.actionCueEl = null;\r\n this.stepEls = null; this.lastActionRender.clear();\r\n }\r\n\r\n private startTimer(seconds: number): void {\r\n let remaining = seconds;\r\n const update = () => {\r\n if (!this.timerEl) return;\r\n const m = Math.floor(remaining / 60);\r\n const s = remaining % 60;\r\n this.timerEl.textContent = `${m > 0 ? `${m}:${String(s).padStart(2, \"0\")}` : `${s}s`} remaining`;\r\n if (remaining <= 5) this.timerEl.style.color = \"#ef4444\";\r\n };\r\n update();\r\n this.timerInterval = setInterval(() => { remaining--; update(); if (remaining <= 0 && this.timerInterval) { clearInterval(this.timerInterval); } }, 1000);\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const labels: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head to the side\",\r\n TURN_RIGHT: \"Turn your head to the side\",\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return labels[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n} from \"../../types/liveness\";\r\nimport { collectDeviceMetadata } from \"../../utils/device\";\r\nimport { DEFAULT_CHALLENGE_ACTIONS } from \"../../utils/constants\";\r\nimport { CameraManager } from \"../../camera/CameraManager\";\r\nimport { VideoRecorder } from \"../../camera/VideoRecorder\";\r\nimport { FaceDetectorEngine } from \"../../camera/FaceDetector\";\r\nimport { ActionDetector } from \"../../camera/ActionDetector\";\r\nimport { LivenessUI } from \"./LivenessUI\";\r\n\r\n/**\r\n * Liveness module \u2014 3-step flow aligned with Adhere backend.\r\n *\r\n * Flow:\r\n * Step 1: liveness.create() \u2192 POST /v1/sdk/liveness/create/ (multipart)\r\n * Step 2: [camera runs, user performs challenge actions]\r\n * Step 3: liveness.submit() \u2192 POST /v1/sdk/liveness/submit/ (multipart)\r\n *\r\n * After submit, the backend returns status: \"processing\".\r\n * Final results are delivered via webhook (liveness.completed event).\r\n */\r\nexport class LivenessModule {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Step 1: Create a liveness challenge entry.\r\n *\r\n * POST /v1/sdk/liveness/create/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n */\r\n async create(params: LivenessCreateRequest): Promise<LivenessCreateResponse> {\r\n const formData = new FormData();\r\n // W9/B7: when identity_check is present (data verification), the backend\r\n // no longer requires identifier/identifier_type \u2014 identity is already\r\n // established via identity_check, so the widget omits them entirely\r\n // instead of sending the user's real ID number/type a second time.\r\n if (!params.identity_check) {\r\n const rawIdentifier = params.identifier || `ID-${Date.now()}`;\r\n const safeIdentifier = rawIdentifier.length > 20\r\n ? rawIdentifier.slice(0, 20)\r\n : rawIdentifier;\r\n formData.append(\"identifier\", safeIdentifier);\r\n formData.append(\"identifier_type\", params.identifier_type);\r\n }\r\n formData.append(\"country\", params.country);\r\n formData.append(\r\n \"challenge_actions\",\r\n JSON.stringify(params.challenge_actions)\r\n );\r\n if (params.autoshot_file) {\r\n formData.append(\"autoshot\", params.autoshot_file, \"autoshot.jpg\");\r\n }\r\n \r\n // Handle document upload - support both legacy and new front/back fields\r\n if (params.document) {\r\n formData.append(\"document\", params.document, \"document.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.document_front) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.document_front, \"document_front.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.id_file) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.id_file, \"id_document.jpg\");\r\n }\r\n \r\n if (params.identity_check) {\r\n formData.append(\"identity_check\", String(params.identity_check));\r\n }\r\n if (params.snapshot_file) {\r\n formData.append(\"snapshot\", params.snapshot_file, \"snapshot.jpg\");\r\n }\r\n if (params.device_type) {\r\n formData.append(\"device_type\", params.device_type);\r\n }\r\n if (params.os_name) {\r\n formData.append(\"os_name\", params.os_name);\r\n }\r\n if (params.browser_timezone) {\r\n formData.append(\"browser_timezone\", params.browser_timezone);\r\n }\r\n if (params.fingerprint_id) {\r\n formData.append(\"fingerprint_id\", params.fingerprint_id);\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessCreateResponse>(\r\n \"/v1/sdk/liveness/create/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Step 3: Submit liveness video recording.\r\n *\r\n * POST /v1/sdk/liveness/submit/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n *\r\n * Note: After submission, the session is revoked (single-use).\r\n * The backend returns status: \"processing\" \u2014 results come via webhook.\r\n */\r\n async submit(\r\n entryId: number,\r\n videoBlob: Blob,\r\n snapshotBlob: Blob,\r\n autoshotBlob?: Blob,\r\n videoDurationSeconds?: number,\r\n videoSizeBytes?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const formData = new FormData();\r\n formData.append(\"entry\", String(entryId));\r\n formData.append(\"video\", videoBlob, \"liveness.webm\");\r\n formData.append(\"snapshot\", snapshotBlob, \"snapshot.jpg\");\r\n if (autoshotBlob) {\r\n formData.append(\"autoshot\", autoshotBlob, \"autoshot.jpg\");\r\n }\r\n if (videoDurationSeconds !== undefined) {\r\n formData.append(\"video_duration_seconds\", String(videoDurationSeconds));\r\n }\r\n if (videoSizeBytes !== undefined) {\r\n formData.append(\"video_size_bytes\", String(videoSizeBytes));\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Poll the public SDK status endpoint for the final verification result.\r\n * Safe to call after the session has been revoked (no auth required) \u2014\r\n * the ocr_* fields below are only populated by the backend when a live\r\n * session token is still attached (see HttpClient.publicGet), since they\r\n * carry PII (name, document number, face thumbnail).\r\n *\r\n * GET /v1/sdk/liveness/<entryId>/sdk-result/\r\n */\r\n async pollResult(entryId: number): Promise<{\r\n id: number;\r\n status: string;\r\n failure_reason: string | null;\r\n completed_at: string | null;\r\n ocr_status?: string;\r\n is_expired?: boolean;\r\n ocr_quality_failed?: boolean;\r\n ocr_name?: string | null;\r\n ocr_document_number?: string | null;\r\n ocr_expiry_date?: string | null;\r\n ocr_face_image_url?: string | null;\r\n ocr_rejection_reason?: string | null;\r\n }> {\r\n return (this.http as any).publicGet(`/v1/sdk/liveness/${entryId}/sdk-result/`);\r\n }\r\n\r\n /**\r\n * Full liveness check \u2014 orchestrates the entire flow:\r\n *\r\n * 1. Take autoshot selfie from camera\r\n * 2. Create liveness entry on backend (with challenge actions + selfie + optional doc)\r\n * 3. Run action detection loop (camera + MediaPipe)\r\n * 4. Record video (document/liveness flows) OR skip recording (data verification)\r\n * 5. Submit to backend and return response (status: \"processing\")\r\n *\r\n * For data_verification the backend uses COMPARISON mode (autoshot vs govt DB photo)\r\n * so video recording is unnecessary \u2014 we skip it to save bandwidth and latency.\r\n *\r\n * @param container - DOM element to mount the liveness UI into\r\n * @param params - identifier info and optional document image\r\n * @param actions - override challenge actions (default: BLINK, TURN_HEAD, OPEN_MOUTH)\r\n * @param existingEntryId - reuse an already-created LivenessEntry (avoids double charge)\r\n */\r\n async startCheck(\r\n container: HTMLElement,\r\n params: {\r\n identifier: string;\r\n identifier_type: string;\r\n country: string;\r\n id_file?: File | Blob;\r\n document?: File | Blob;\r\n document_front?: File | Blob;\r\n document_back?: File | Blob;\r\n identity_check?: number;\r\n verification_type?: \"data_verification\" | \"document_verification\" | \"liveness_only\";\r\n // B4: pre-warmed camera stream from the confirmation screen \u2014 if provided\r\n // camera.open() is skipped and this stream is used directly, eliminating\r\n // the 1\u20133s camera init delay when the user taps \"Yes, continue\".\r\n prewarmedStream?: MediaStream | null;\r\n },\r\n actions?: ChallengeAction[],\r\n existingEntryId?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n // Data verification: backend always uses COMPARISON mode (autoshot vs govt photo).\r\n // Video recording adds ~2\u20134 s of latency and bandwidth for zero benefit here.\r\n const isDataVerification =\r\n params.verification_type === \"data_verification\" ||\r\n (!params.document && !params.document_front && !params.id_file && !!params.identity_check);\r\n const skipVideo = isDataVerification;\r\n const camera = new CameraManager();\r\n const recorder = new VideoRecorder();\r\n const faceEngine = new FaceDetectorEngine();\r\n const ui = new LivenessUI();\r\n\r\n // Tracks whether cleanup has already been called (so the finally block\r\n // doesn't double-destroy when retry takes over).\r\n let cleanedUp = false;\r\n const cleanup = () => {\r\n if (cleanedUp) return;\r\n cleanedUp = true;\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n };\r\n\r\n try {\r\n // 1. Open camera \u2014 reuse pre-warmed stream if available (B4)\r\n let stream: MediaStream;\r\n if (params.prewarmedStream && params.prewarmedStream.active) {\r\n // Stream already open from confirmation screen \u2014 skip getUserMedia delay.\r\n // Hand it to `camera` so cleanup()'s camera.stop() actually releases it \u2014\r\n // otherwise this stream is untracked by CameraManager and leaks on any\r\n // failure/timeout path that only calls camera.stop().\r\n stream = params.prewarmedStream;\r\n camera.setStream(stream);\r\n } else {\r\n try {\r\n stream = await camera.open();\r\n } catch (camErr: any) {\r\n if (camErr.name === \"NotAllowedError\" || camErr.name === \"PermissionDeniedError\") {\r\n throw new Error(\"Camera access denied. Please allow camera permission in your browser settings and try again.\");\r\n }\r\n if (camErr.name === \"NotFoundError\" || camErr.name === \"DevicesNotFoundError\") {\r\n throw new Error(\"No camera found. Please connect a camera and try again.\");\r\n }\r\n throw new Error(`Camera error: ${camErr.message || \"Unable to access camera\"}`);\r\n }\r\n }\r\n\r\n // 2. Document capture step \u2014 document_verification only, when no id_file pre-supplied\r\n let capturedDocBlob: Blob | undefined = params.id_file as Blob | undefined;\r\n if (!capturedDocBlob && params.verification_type === \"document_verification\") {\r\n capturedDocBlob = await ui.mountDocumentCapture(container, stream);\r\n }\r\n\r\n // 3. Create a temporary video element to capture autoshot\r\n const tempVideo = document.createElement(\"video\");\r\n tempVideo.srcObject = stream;\r\n tempVideo.muted = true;\r\n tempVideo.playsInline = true;\r\n await tempVideo.play();\r\n\r\n // Wait for face to be detected before capturing autoshot\r\n ui.mount(container, { actions: [], time_limit_seconds: 0, instruction: \"Centre your face in the oval\" });\r\n const uiVideo = ui.getVideoElement();\r\n if (uiVideo) {\r\n uiVideo.srcObject = stream;\r\n await uiVideo.play();\r\n } else {\r\n tempVideo.style.cssText = \"width:100%;border-radius:12px;transform:scaleX(-1);\";\r\n container.appendChild(tempVideo);\r\n }\r\n\r\n await faceEngine.init();\r\n ui.updateInstruction(\"Centre your face in the oval\");\r\n\r\n // Wait until face is stably centred.\r\n // Tolerant: allows up to 2 missed frames before resetting \u2014 avoids\r\n // flickering \"Move your face\" for a single dropped frame.\r\n const videoForDetection = uiVideo || tempVideo;\r\n await new Promise<void>((resolve) => {\r\n let attempts = 0;\r\n let stableFrames = 0;\r\n let missedFrames = 0;\r\n const STABLE_REQUIRED = 4; // increased from 2 \u2014 ensures face is properly locked before autoshot\r\n const MISS_TOLERANCE = 2; // allow up to 2 consecutive misses before reset\r\n const MAX_WAIT_MS = 8000;\r\n const startTime = performance.now();\r\n\r\n const checkFace = () => {\r\n if (performance.now() - startTime >= MAX_WAIT_MS) {\r\n resolve(); // proceed anyway after timeout\r\n return;\r\n }\r\n\r\n if (videoForDetection.readyState >= 2) {\r\n const detection = faceEngine.detect(videoForDetection, performance.now());\r\n if (detection.faceDetected) {\r\n stableFrames++;\r\n missedFrames = 0;\r\n ui.updateInstruction(\"Centre your face in the oval\");\r\n if (stableFrames >= STABLE_REQUIRED) {\r\n resolve();\r\n return;\r\n }\r\n } else {\r\n missedFrames++;\r\n if (missedFrames > MISS_TOLERANCE) {\r\n stableFrames = 0; // full reset only after sustained loss\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n }\r\n }\r\n }\r\n\r\n requestAnimationFrame(checkFace);\r\n };\r\n requestAnimationFrame(checkFace);\r\n });\r\n\r\n ui.updateInstruction(\"Hold still...\");\r\n // Settle delay \u2014 gives camera AE/AF time to lock before challenge starts\r\n await new Promise((r) => setTimeout(r, 500));\r\n\r\n // W9: Autoshot captured AFTER challenge (moved from before create).\r\n // We take a placeholder-size stub here only to satisfy liveness.create()\r\n // which currently expects autoshot_file \u2014 the real autoshot is captured\r\n // after all challenge actions complete and is sent on submit instead.\r\n // The backend ignores the create-time autoshot for face comparison;\r\n // only the submit-time autoshot is used. Pass undefined here and\r\n // capture the real one post-challenge below.\r\n\r\n // 4. Create liveness entry on backend (skip if retrying with existing entry)\r\n const challengeActions = actions || [...DEFAULT_CHALLENGE_ACTIONS];\r\n let entry: LivenessCreateResponse;\r\n\r\n if (existingEntryId) {\r\n entry = { id: existingEntryId, challenge_actions: challengeActions, status: \"pending\", client_id: \"\", expires_at: null };\r\n } else {\r\n const deviceMeta = collectDeviceMetadata();\r\n entry = await this.create({\r\n identifier: params.identifier,\r\n identifier_type: params.identifier_type,\r\n country: params.country,\r\n challenge_actions: challengeActions,\r\n // W9: No autoshot at create time \u2014 real one captured post-challenge\r\n autoshot_file: undefined,\r\n document: params.document || params.document_front || params.id_file || capturedDocBlob,\r\n document_back: params.document_back,\r\n identity_check: params.identity_check,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n }\r\n\r\n tempVideo.pause();\r\n // B3: Remove tempVideo from DOM to release the camera light indicator\r\n // on devices that show it while a video element holds a stream reference.\r\n tempVideo.srcObject = null;\r\n tempVideo.remove();\r\n\r\n // 5. Mount UI with challenge actions from backend\r\n const uiChallenge = {\r\n actions: entry.challenge_actions,\r\n time_limit_seconds: 45,\r\n instruction: \"Complete each action below to verify it's you\",\r\n // Use backend-provided instructions if available (mirror-corrected),\r\n // otherwise fall back to the frontend labels.\r\n instructions: entry.challenge_instructions,\r\n };\r\n\r\n // Re-mount UI with challenge actions (face engine already initialized)\r\n ui.unmount();\r\n const videoEl = ui.mount(container, uiChallenge);\r\n videoEl.srcObject = stream;\r\n await videoEl.play();\r\n\r\n // 7. Start recording \u2014 wait for camera AE/AF to re-stabilise after\r\n // re-mounting the video element. Without this delay the first ~1s of\r\n // the video is blurry (camera re-adapts exposure) and SmartComply's\r\n // frame extractor picks a blurry keyframe \u2192 IMAGE_TOO_BLURRY rejection.\r\n await new Promise((r) => setTimeout(r, 1000));\r\n if (!skipVideo) {\r\n recorder.start(stream);\r\n }\r\n ui.updateInstruction(uiChallenge.instruction);\r\n\r\n // 8. Run detection loop (sequential \u2014 one action at a time)\r\n const actionDetector = new ActionDetector(entry.challenge_actions);\r\n let lastAction: string | null = null;\r\n let pauseUntil = 0;\r\n let pendingNextAction: string | null = null;\r\n let pendingNextLabel: string | null = null;\r\n\r\n const detectionResult = await new Promise<\"completed\" | \"timeout\">(\r\n (resolve) => {\r\n let animFrameId: number;\r\n\r\n const timeout = setTimeout(() => {\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"timeout\");\r\n }, uiChallenge.time_limit_seconds * 1000);\r\n\r\n const getLabel = (action: string): string =>\r\n (uiChallenge as any).instructions?.[action] || this.describeAction(action);\r\n\r\n const detectLoop = () => {\r\n const now = performance.now();\r\n\r\n // P3: During the brief inter-action pause, schedule with setTimeout\r\n // instead of rAF \u2014 avoids burning CPU at 60fps while nothing is processed.\r\n const remaining = pauseUntil - now;\r\n if (remaining > 0) {\r\n setTimeout(() => { animFrameId = requestAnimationFrame(detectLoop); }, remaining);\r\n return;\r\n }\r\n if (pendingNextAction) {\r\n lastAction = pendingNextAction;\r\n if (pendingNextLabel) ui.updateInstruction(pendingNextLabel);\r\n pendingNextAction = null;\r\n pendingNextLabel = null;\r\n }\r\n\r\n if (videoEl.readyState >= 2) {\r\n const detection = faceEngine.detect(\r\n videoEl,\r\n performance.now()\r\n );\r\n\r\n const states = actionDetector.check(detection);\r\n ui.updateActions(states);\r\n\r\n const current = actionDetector.getCurrentAction();\r\n\r\n if (!detection.faceDetected) {\r\n ui.updateInstruction(\"Move your face into the oval\");\r\n } else if (current) {\r\n if (current !== lastAction) {\r\n if (lastAction !== null) {\r\n // Action completed \u2014 give user ~600ms to see the next instruction\r\n pauseUntil = now + 600;\r\n pendingNextAction = current;\r\n pendingNextLabel = getLabel(current);\r\n ui.updateInstruction(`Great! ${pendingNextLabel}`);\r\n animFrameId = requestAnimationFrame(detectLoop);\r\n return;\r\n }\r\n lastAction = current;\r\n ui.updateInstruction(getLabel(current));\r\n }\r\n } else {\r\n ui.updateInstruction(\"All actions completed! \u2713\");\r\n }\r\n\r\n if (actionDetector.allCompleted()) {\r\n clearTimeout(timeout);\r\n cancelAnimationFrame(animFrameId);\r\n resolve(\"completed\");\r\n return;\r\n }\r\n }\r\n\r\n animFrameId = requestAnimationFrame(detectLoop);\r\n };\r\n\r\n detectLoop();\r\n }\r\n );\r\n\r\n // \u2500\u2500 On timeout: show retry screen, clean up, restart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (detectionResult === \"timeout\") {\r\n // IMPORTANT: mark cleanedUp=true BEFORE returning the new Promise so\r\n // the outer `finally` block does NOT call cleanup() immediately \u2014\r\n // which would destroy the UI before the user sees the timeout screen.\r\n cleanedUp = true;\r\n\r\n recorder.stop().catch(() => { }); // discard partial recording\r\n\r\n return new Promise<LivenessSubmitResponse>((resolveRetry, rejectRetry) => {\r\n ui.showTimeout(() => {\r\n // User clicked \"Try Again\" \u2014 now it is safe to destroy this attempt\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n\r\n // Restart liveness with same entry ID to prevent duplicate charges (D1)\r\n // Pass capturedDocBlob forward so document scan step is not repeated.\r\n // Forward verification_type so skipVideo is re-derived correctly on retry.\r\n this.startCheck(\r\n container,\r\n { ...params, id_file: capturedDocBlob },\r\n actions,\r\n entry.id\r\n )\r\n .then(resolveRetry)\r\n .catch(rejectRetry);\r\n });\r\n // showTimeout waits for the user to click \u2014 the promise stays pending.\r\n });\r\n }\r\n\r\n // \u2500\u2500 On completion: stop recording (if applicable), submit \u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n // W9: Capture autoshot AFTER challenge actions complete.\r\n // Wait for neutral face pose before capturing.\r\n ui.updateInstruction(\"Almost done \u2014 hold still...\");\r\n await new Promise((r) => setTimeout(r, 800));\r\n\r\n // Capture autoshot (real selfie) \u2014 post-challenge, neutral pose, camera AE locked\r\n const autoshotBlob = await this.captureFrame(videoEl);\r\n if (!autoshotBlob || autoshotBlob.size === 0) {\r\n throw new Error(\"Failed to capture selfie. Please ensure your face is visible and try again.\");\r\n }\r\n\r\n // Capture a snapshot frame as well (same timing, slightly different use)\r\n const snapshotBlob = await this.captureFrame(videoEl);\r\n\r\n // 9. Stop recording (no-op / discard when skipVideo=true)\r\n let videoBlob: Blob;\r\n let durationSeconds: number | undefined;\r\n if (skipVideo) {\r\n // Data verification: backend uses COMPARISON mode (autoshot only).\r\n // Use the autoshot as a 1-byte stand-in so the submit serializer\r\n // gets a valid file \u2014 backend strips it in favour of autoshot anyway.\r\n recorder.stop().catch(() => {}); // discard partial recording\r\n videoBlob = autoshotBlob; // reuse autoshot \u2014 ~5\u201315 KB vs ~500 KB video\r\n durationSeconds = undefined;\r\n } else {\r\n const recorded = await recorder.stop();\r\n videoBlob = recorded.blob;\r\n durationSeconds = recorded.durationSeconds;\r\n }\r\n\r\n // 10. Submit to backend \u2014 always include autoshot so document-flow\r\n // entries (which bypassed create() via existingEntryId) still get it.\r\n const submitResult = await this.submit(\r\n entry.id,\r\n videoBlob,\r\n snapshotBlob,\r\n autoshotBlob,\r\n durationSeconds,\r\n videoBlob.size\r\n );\r\n\r\n // 11. Show success overlay briefly before the flow advances\r\n await ui.showResult(\r\n submitResult.status === \"failed\" ? \"failed\" : \"processing\",\r\n submitResult.id\r\n );\r\n\r\n return submitResult;\r\n\r\n } finally {\r\n cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Capture a single sharp frame from a video element as a JPEG Blob.\r\n * Retries up to maxAttempts times (300 ms apart) if the Laplacian blur\r\n * score is below threshold, then falls back to the best frame captured.\r\n *\r\n * Threshold calibration:\r\n * The server rejects images with OpenCV Laplacian variance < 80.\r\n * This SDK uses sum-of-squared Laplacian (different normalisation) \u2014\r\n * empirically ~100 here corresponds to ~80 server-side. We aim for 120\r\n * to give a comfortable safety margin.\r\n */\r\n private async captureFrame(\r\n video: HTMLVideoElement,\r\n maxAttempts = 5\r\n ): Promise<Blob> {\r\n const MIN_BLUR_SCORE = 120; // calibrated to server threshold of 80 (different scale)\r\n const MIN_BRIGHTNESS = 40; // 0-255 \u2014 below this = too dark for face comparison\r\n const MAX_BRIGHTNESS = 220; // above this = too bright/overexposed\r\n const RETRY_DELAY_MS = 200;\r\n let bestBlob: Blob | null = null;\r\n let bestScore = -1;\r\n\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Failed to get canvas context\");\r\n ctx.drawImage(video, 0, 0);\r\n\r\n const blurScore = this._computeBlurScore(canvas);\r\n const brightness = this._computeBrightness(canvas);\r\n const brightnessOk = brightness >= MIN_BRIGHTNESS && brightness <= MAX_BRIGHTNESS;\r\n\r\n // Combined quality score \u2014 blur is primary, brightness gates it\r\n const qualityScore = brightnessOk ? blurScore : 0;\r\n\r\n const blob = await new Promise<Blob | null>((res) =>\r\n canvas.toBlob((b) => res(b), \"image/jpeg\", 0.92)\r\n );\r\n\r\n if (blob && qualityScore > bestScore) {\r\n bestBlob = blob;\r\n bestScore = qualityScore;\r\n }\r\n\r\n // Stop early if both blur and brightness are acceptable\r\n if (blurScore >= MIN_BLUR_SCORE && brightnessOk) break;\r\n\r\n if (attempt < maxAttempts - 1) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n }\r\n }\r\n\r\n if (bestBlob) return bestBlob;\r\n throw new Error(\"Failed to capture frame\");\r\n }\r\n\r\n /**\r\n * Compute average brightness (0\u2013255) of the centre-cropped frame.\r\n * Used to reject frames that are too dark or overexposed before sending\r\n * to face comparison \u2014 server rejects IMAGE_TOO_DARK below ~40 luminance.\r\n */\r\n private _computeBrightness(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 128;\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n const { data } = ctx.getImageData(sx, sy, sw, sh);\r\n let total = 0;\r\n const pixels = sw * sh;\r\n for (let i = 0; i < pixels; i++) {\r\n total += 0.299 * data[i * 4] + 0.587 * data[i * 4 + 1] + 0.114 * data[i * 4 + 2];\r\n }\r\n return total / pixels;\r\n }\r\n\r\n /**\r\n * Sum-of-squared Laplacian blur metric on a centre-cropped region (320\u00D7240 max).\r\n * Higher score = sharper image.\r\n *\r\n * NOTE: This is sum-of-squares, NOT Laplacian variance (which OpenCV uses).\r\n * The two scales differ \u2014 empirically, a score of ~120 here corresponds to\r\n * ~80 on the server side (OpenCV cv2.Laplacian().var()). Keep MIN_BLUR_SCORE\r\n * in captureFrame() calibrated against this.\r\n */\r\n private _computeBlurScore(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 0;\r\n\r\n // Sample a 320\u00D7240 centre crop for performance\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n\r\n const { data, width, height } = ctx.getImageData(sx, sy, sw, sh);\r\n\r\n // Convert to greyscale\r\n const gray = new Float32Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n gray[i] =\r\n 0.299 * data[i * 4] +\r\n 0.587 * data[i * 4 + 1] +\r\n 0.114 * data[i * 4 + 2];\r\n }\r\n\r\n // Laplacian convolution [0,1,0 / 1,-4,1 / 0,1,0] \u2014 sum of squared responses\r\n let sum = 0;\r\n let n = 0;\r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const l =\r\n gray[(y - 1) * width + x] +\r\n gray[(y + 1) * width + x] +\r\n gray[y * width + (x - 1)] +\r\n gray[y * width + (x + 1)] -\r\n 4 * gray[y * width + x];\r\n sum += l * l;\r\n n++;\r\n }\r\n }\r\n return n > 0 ? sum / n : 0;\r\n }\r\n\r\n private describeAction(action: string): string {\r\n const descriptions: Record<string, string> = {\r\n BLINK: \"Blink your eyes\",\r\n TURN_LEFT: \"Turn your head to the side\",\r\n TURN_RIGHT: \"Turn your head to the side\",\r\n TURN_HEAD: \"Turn your head side to side\",\r\n OPEN_MOUTH: \"Open your mouth wide\",\r\n };\r\n return descriptions[action] || action.replace(/_/g, \" \").toLowerCase();\r\n }\r\n}\r\n", "import { SDKConfig } from \"./Config\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { OnboardingModule } from \"../modules/onboarding/onboarding\";\r\nimport { LivenessModule } from \"../modules/liveness/liveness\";\r\nimport {\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"../types/onboarding\";\r\n\r\n/**\r\n * SmartComply SDK \u2014 main entry point.\r\n *\r\n * Usage:\r\n * const sdk = new SmartComply({ apiKey: \"pk_...\", clientId: \"uuid-...\", environment: \"sandbox\" });\r\n * const session = await sdk.createSession();\r\n * const config = await sdk.initializeConfig();\r\n * // ... use sdk.onboarding and sdk.liveness modules\r\n */\r\nexport class SmartComply {\r\n private http: HttpClient;\r\n private clientId: string;\r\n private _sessionToken: string | null = null;\r\n private _sessionExpiresAt: string | null = null;\r\n private _sdkConfig: SDKInitConfig | null = null;\r\n\r\n public onboarding: OnboardingModule;\r\n public liveness: LivenessModule;\r\n\r\n constructor(config: SDKConfig) {\r\n if (!config.apiKey) {\r\n throw new Error(\"SmartComply: apiKey is required\");\r\n }\r\n if (!config.clientId) {\r\n throw new Error(\"SmartComply: clientId is required (UUID from your SDK config)\");\r\n }\r\n\r\n this.clientId = config.clientId;\r\n this.http = new HttpClient(config);\r\n\r\n this.onboarding = new OnboardingModule(this.http);\r\n this.liveness = new LivenessModule(this.http);\r\n }\r\n\r\n /** Current session token (null if not created yet) */\r\n get sessionToken(): string | null {\r\n return this._sessionToken;\r\n }\r\n\r\n /** Session expiration ISO timestamp */\r\n get sessionExpiresAt(): string | null {\r\n return this._sessionExpiresAt;\r\n }\r\n\r\n /** SDK config fetched from backend (null until initializeConfig() is called) */\r\n get sdkConfig(): SDKInitConfig | null {\r\n return this._sdkConfig;\r\n }\r\n\r\n /**\r\n * Create a new SDK session.\r\n *\r\n * POST /v1/session/create/\r\n * Auth: Authorization: Bearer <apiKey>\r\n * Body: { client_id: \"<uuid>\" }\r\n *\r\n * Returns: { token: \"...\", expires_at: \"...\" }\r\n */\r\n async createSession(): Promise<SessionResponse> {\r\n const response = await this.http.request<SessionResponse>(\r\n \"POST\",\r\n \"/v1/session/create/\",\r\n { client_id: this.clientId }\r\n );\r\n\r\n this._sessionToken = response.token;\r\n this._sessionExpiresAt = response.expires_at;\r\n\r\n // Set the session token on the HTTP client for subsequent requests\r\n this.http.setSessionToken(response.token);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetch SDK configuration from the backend.\r\n * Must be called after createSession().\r\n *\r\n * GET /v1/initialize/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }\r\n */\r\n async initializeConfig(): Promise<SDKInitConfig> {\r\n const config = await this.http.sessionRequest<SDKInitConfig>(\r\n \"GET\",\r\n \"/v1/initialize/\"\r\n );\r\n\r\n this._sdkConfig = config;\r\n return config;\r\n }\r\n}\r\n", "/**\r\n * Theme system for the SmartComply Flow widget.\r\n * Maps to backend's SDKConfig.THEME_CHOICES:\r\n * default, midnight_blue, sunset_gold, forest_emerald\r\n */\r\n\r\nexport interface ThemeColors {\r\n primary: string;\r\n primaryHover: string;\r\n primaryGlow: string;\r\n bg: string;\r\n cardBg: string;\r\n inputBg: string;\r\n text: string;\r\n textSecondary: string;\r\n textMuted: string;\r\n border: string;\r\n borderFocus: string;\r\n success: string;\r\n successBg: string;\r\n error: string;\r\n errorBg: string;\r\n warning: string;\r\n overlay: string;\r\n shimmer: string;\r\n shadow: string;\r\n isDark: boolean;\r\n}\r\n\r\nexport const THEMES: Record<string, ThemeColors> = {\r\n default: {\r\n primary: \"#3b82f6\",\r\n primaryHover: \"#2563eb\",\r\n primaryGlow: \"rgba(59, 130, 246, 0.25)\",\r\n bg: \"#ffffff\",\r\n cardBg: \"#f8fafc\",\r\n inputBg: \"#f1f5f9\",\r\n text: \"#0f172a\",\r\n textSecondary: \"#475569\",\r\n textMuted: \"#94a3b8\",\r\n border: \"#e2e8f0\",\r\n borderFocus: \"#3b82f6\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(15, 23, 42, 0.6)\",\r\n shimmer: \"rgba(59, 130, 246, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\r\n isDark: false,\r\n },\r\n\r\n midnight_blue: {\r\n primary: \"#60a5fa\",\r\n primaryHover: \"#93bbfd\",\r\n primaryGlow: \"rgba(96, 165, 250, 0.2)\",\r\n bg: \"#0b1120\",\r\n cardBg: \"#111d33\",\r\n inputBg: \"#162032\",\r\n text: \"#f1f5f9\",\r\n textSecondary: \"#94a3b8\",\r\n textMuted: \"#64748b\",\r\n border: \"#1e3a5f\",\r\n borderFocus: \"#60a5fa\",\r\n success: \"#4ade80\",\r\n successBg: \"rgba(74, 222, 128, 0.1)\",\r\n error: \"#f87171\",\r\n errorBg: \"rgba(248, 113, 113, 0.1)\",\r\n warning: \"#fbbf24\",\r\n overlay: \"rgba(0, 0, 0, 0.75)\",\r\n shimmer: \"rgba(96, 165, 250, 0.06)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(96, 165, 250, 0.1)\",\r\n isDark: true,\r\n },\r\n\r\n sunset_gold: {\r\n primary: \"#f59e0b\",\r\n primaryHover: \"#d97706\",\r\n primaryGlow: \"rgba(245, 158, 11, 0.2)\",\r\n bg: \"#fffdf7\",\r\n cardBg: \"#fef9ee\",\r\n inputBg: \"#fef3c7\",\r\n text: \"#1c1917\",\r\n textSecondary: \"#57534e\",\r\n textMuted: \"#a8a29e\",\r\n border: \"#fed7aa\",\r\n borderFocus: \"#f59e0b\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(28, 25, 23, 0.6)\",\r\n shimmer: \"rgba(245, 158, 11, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.1)\",\r\n isDark: false,\r\n },\r\n\r\n forest_emerald: {\r\n primary: \"#10b981\",\r\n primaryHover: \"#059669\",\r\n primaryGlow: \"rgba(16, 185, 129, 0.2)\",\r\n bg: \"#f7fdf9\",\r\n cardBg: \"#ecfdf5\",\r\n inputBg: \"#d1fae5\",\r\n text: \"#1a1a2e\",\r\n textSecondary: \"#4b5563\",\r\n textMuted: \"#9ca3af\",\r\n border: \"#a7f3d0\",\r\n borderFocus: \"#10b981\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(26, 26, 46, 0.6)\",\r\n shimmer: \"rgba(16, 185, 129, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(16, 185, 129, 0.1)\",\r\n isDark: false,\r\n },\r\n};\r\n\r\n/**\r\n * Return a theme by name, with an optional hex override for client branding.\r\n * If hex is provided, the named theme is used as the base and all primary\r\n * colour slots are replaced with the client's brand hex \u2014 so buttons, borders,\r\n * focus rings, and glows all use the client's colour instead of the default.\r\n */\r\nexport function getTheme(name: string, hex?: string | null): ThemeColors {\r\n const base = { ...(THEMES[name] || THEMES.default) };\r\n if (hex && /^#[0-9A-Fa-f]{6}$/.test(hex.trim())) {\r\n const h = hex.trim();\r\n // Derive a slightly darker hover shade by reducing lightness ~10%\r\n const hover = _darkenHex(h, 15);\r\n base.primary = h;\r\n base.primaryHover = hover;\r\n base.primaryGlow = `${h}40`; // 25% opacity\r\n base.borderFocus = h;\r\n base.shimmer = `${h}14`; // 8% opacity\r\n }\r\n return base;\r\n}\r\n\r\n/** Darken a #rrggbb hex colour by subtracting `amount` from each channel. */\r\nfunction _darkenHex(hex: string, amount: number): string {\r\n const n = parseInt(hex.slice(1), 16);\r\n const r = Math.max(0, (n >> 16) - amount);\r\n const g = Math.max(0, ((n >> 8) & 0xff) - amount);\r\n const b = Math.max(0, (n & 0xff) - amount);\r\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, \"0\")}`;\r\n}\r\n", "/**\r\n * Image Quality Assessment for Document Capture\r\n * Client-side quality checks before sending to backend\r\n */\r\n\r\nexport interface QualityMetrics {\r\n sharpness: number;\r\n contrast: number;\r\n brightness: number;\r\n isBlurry: boolean;\r\n hasGlare: boolean;\r\n overallScore: number;\r\n}\r\n\r\nexport interface QualityFeedback {\r\n isValid: boolean;\r\n message: string;\r\n recommendations: string[];\r\n quality: QualityMetrics;\r\n}\r\n\r\n/**\r\n * Calculate image sharpness using Laplacian variance\r\n * Higher values = sharper image\r\n */\r\nexport function calculateSharpness(imageData: ImageData): number {\r\n const { width, height, data } = imageData;\r\n \r\n // Convert to grayscale\r\n const gray = new Uint8Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n const idx = i * 4;\r\n gray[i] = Math.round(0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2]);\r\n }\r\n \r\n // Apply Laplacian kernel\r\n const laplacian = new Float32Array(width * height);\r\n let sum = 0;\r\n let sumSq = 0;\r\n let count = 0;\r\n \r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const idx = y * width + x;\r\n \r\n // Laplacian kernel\r\n const val = \r\n -1 * gray[idx - width] +\r\n -1 * gray[idx - 1] +\r\n 4 * gray[idx] +\r\n -1 * gray[idx + 1] +\r\n -1 * gray[idx + width];\r\n \r\n laplacian[idx] = val;\r\n sum += val;\r\n sumSq += val * val;\r\n count++;\r\n }\r\n }\r\n \r\n // Calculate variance\r\n const mean = sum / count;\r\n const variance = (sumSq / count) - (mean * mean);\r\n \r\n return Math.abs(variance);\r\n}\r\n\r\n/**\r\n * Detect glare (overexposed areas)\r\n */\r\nexport function detectGlare(imageData: ImageData, threshold: number = 250): number {\r\n const { data } = imageData;\r\n let overexposed = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const brightness = (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n if (brightness > threshold) {\r\n overexposed++;\r\n }\r\n }\r\n \r\n return overexposed / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Calculate contrast (standard deviation)\r\n */\r\nexport function calculateContrast(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n let sumSq = 0;\r\n const pixelCount = data.length / 4;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const gray = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\r\n sum += gray;\r\n sumSq += gray * gray;\r\n }\r\n \r\n const mean = sum / pixelCount;\r\n const variance = (sumSq / pixelCount) - (mean * mean);\r\n \r\n return Math.sqrt(variance);\r\n}\r\n\r\n/**\r\n * Calculate brightness (mean pixel value)\r\n */\r\nexport function calculateBrightness(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n sum += (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n }\r\n \r\n return sum / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Full quality assessment\r\n */\r\nexport function assessQuality(imageData: ImageData): QualityFeedback {\r\n const sharpness = calculateSharpness(imageData);\r\n const glare = detectGlare(imageData);\r\n const contrast = calculateContrast(imageData);\r\n const brightness = calculateBrightness(imageData);\r\n \r\n const isBlurry = sharpness < 80;\r\n const hasGlare = glare > 0.15;\r\n const isTooDark = brightness < 50;\r\n const isTooBright = brightness > 200;\r\n const lowContrast = contrast < 30;\r\n \r\n // Calculate overall score (0-100)\r\n let score = 100;\r\n if (isBlurry) score -= 40;\r\n if (hasGlare) score -= 25;\r\n if (isTooDark) score -= 20;\r\n if (isTooBright) score -= 20;\r\n if (lowContrast) score -= 15;\r\n \r\n const metrics: QualityMetrics = {\r\n sharpness: Math.round(sharpness * 10) / 10,\r\n contrast: Math.round(contrast * 10) / 10,\r\n brightness: Math.round(brightness * 10) / 10,\r\n isBlurry,\r\n hasGlare,\r\n overallScore: Math.max(0, score),\r\n };\r\n \r\n // Generate feedback\r\n const issues: string[] = [];\r\n const recommendations: string[] = [];\r\n \r\n if (isBlurry) {\r\n issues.push(\"Too blurry\");\r\n recommendations.push(\"Hold camera steady\");\r\n recommendations.push(\"Ensure good lighting\");\r\n }\r\n \r\n if (hasGlare) {\r\n issues.push(\"Too much glare\");\r\n recommendations.push(\"Avoid direct light on document\");\r\n recommendations.push(\"Tilt document slightly\");\r\n }\r\n \r\n if (isTooDark) {\r\n issues.push(\"Too dark\");\r\n recommendations.push(\"Move to brighter area\");\r\n recommendations.push(\"Turn on more lights\");\r\n }\r\n \r\n if (isTooBright) {\r\n issues.push(\"Too bright\");\r\n recommendations.push(\"Reduce lighting\");\r\n recommendations.push(\"Move away from direct sun\");\r\n }\r\n \r\n if (lowContrast) {\r\n issues.push(\"Low contrast\");\r\n recommendations.push(\"Ensure even lighting\");\r\n }\r\n \r\n const isValid = score >= 60;\r\n const message = issues.length > 0 \r\n ? issues.join(\", \")\r\n : \"Good quality\";\r\n \r\n return {\r\n isValid,\r\n message,\r\n recommendations: recommendations.slice(0, 3), // Max 3 recommendations\r\n quality: metrics,\r\n };\r\n}\r\n\r\n/**\r\n * Get quality color for UI feedback\r\n */\r\nexport function getQualityColor(score: number): string {\r\n if (score >= 80) return \"#22c55e\"; // Green\r\n if (score >= 60) return \"#eab308\"; // Yellow\r\n return \"#ef4444\"; // Red\r\n}\r\n\r\n/**\r\n * Get quality message for display\r\n */\r\nexport function getQualityMessage(score: number): string {\r\n if (score >= 80) return \"Excellent - Ready to capture\";\r\n if (score >= 60) return \"Good - Can capture\";\r\n if (score >= 40) return \"Fair - Improve if possible\";\r\n return \"Poor - Please adjust\";\r\n}\r\n", "import { ThemeColors } from \"./theme\";\r\nimport { assessQuality, QualityFeedback } from \"../utils/ImageQuality\";\r\n\r\n/**\r\n * Document capture UI \u2014 camera-based or file-upload for ID documents.\r\n *\r\n * Supports:\r\n * - Camera capture (rear camera preferred on mobile)\r\n * - File upload fallback\r\n * - Preview with retake/confirm\r\n * - Front and back document capture for documents requiring both sides\r\n */\r\nexport interface DocumentCaptureResult {\r\n front: Blob;\r\n back?: Blob; // Optional for documents that don't require back side\r\n}\r\n\r\nexport class DocumentCapture {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private stream: MediaStream | null = null;\r\n private resolveCapture: ((result: DocumentCaptureResult) => void) | null = null;\r\n private rejectCapture: ((err: Error) => void) | null = null;\r\n private frontBlob: Blob | null = null;\r\n private backBlob: Blob | null = null;\r\n private currentSide: 'front' | 'back' = 'front';\r\n private requiresBackOverride: boolean | undefined = undefined;\r\n\r\n /**\r\n * Mount the document capture UI and return a promise that resolves\r\n * with the captured document image(s).\r\n */\r\n capture(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string,\r\n requiresBack?: boolean\r\n ): Promise<DocumentCaptureResult> {\r\n return new Promise((resolve, reject) => {\r\n // Validate input parameters\r\n if (!container) {\r\n reject(new Error(\"Container element is required\"));\r\n return;\r\n }\r\n if (!theme) {\r\n reject(new Error(\"Theme configuration is required\"));\r\n return;\r\n }\r\n if (!documentType || typeof documentType !== 'string') {\r\n reject(new Error(\"Document type is required and must be a string\"));\r\n return;\r\n }\r\n \r\n // Check if already capturing\r\n if (this.resolveCapture || this.rejectCapture) {\r\n reject(new Error(\"Document capture is already in progress\"));\r\n return;\r\n }\r\n\r\n this.resolveCapture = resolve;\r\n this.rejectCapture = reject;\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n this.requiresBackOverride = requiresBack;\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n // Stop any ongoing camera streams\r\n this.stopCamera();\r\n \r\n // Clean up DOM elements\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n \r\n // Clean up any pending promises\r\n if (this.rejectCapture) {\r\n this.rejectCapture(new Error(\"Document capture was cancelled\"));\r\n this.rejectCapture = null;\r\n }\r\n this.resolveCapture = null;\r\n \r\n // Clean up blob data\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n }\r\n\r\n private requiresBackSide(documentType: string): boolean {\r\n // Only request back-side capture for documents where the backend OCR\r\n // actually needs the reverse face. NIN cards are single-sided for OCR\r\n // purposes \u2014 do NOT include \"nin\" here.\r\n const type = documentType.toLowerCase();\r\n return type.includes(\"voter\") ||\r\n type.includes(\"driver\") ||\r\n type.includes(\"license\") ||\r\n type.includes(\"national id\") ||\r\n type.includes(\"national id card\") ||\r\n type.includes(\"ghana\");\r\n // Passport: back side is the machine-readable zone but OCR reads from front only.\r\n // NIN / NIN with face: front only needed.\r\n // Voter's card / Driver's license / National ID card: back required.\r\n }\r\n\r\n private shouldCaptureBackSide(documentType: string): boolean {\r\n // Prefer the backend-provided flag; fall back to local heuristics only when absent.\r\n return this.requiresBackOverride !== undefined\r\n ? this.requiresBackOverride\r\n : this.requiresBackSide(documentType);\r\n }\r\n\r\n private renderChoiceScreen(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n display:flex;flex-direction:column;gap:0;padding:0;width:100%;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n const docLabel = this.getDocumentLabel(documentType);\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const isCapturingFront = this.currentSide === 'front';\r\n const sideLabel = requiresBack\r\n ? (isCapturingFront ? ' \u2014 Front side' : ' \u2014 Back side')\r\n : '';\r\n\r\n // \u2500\u2500 TOP: compact header row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const headerRow = document.createElement(\"div\");\r\n headerRow.style.cssText = `\r\n display:flex;align-items:center;gap:14px;\r\n padding:16px 20px 14px;\r\n `;\r\n\r\n const iconBox = document.createElement(\"div\");\r\n iconBox.style.cssText = `\r\n width:48px;height:48px;border-radius:14px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:24px;\r\n background:${theme.primary}15;\r\n border:1.5px solid ${theme.primary}30;\r\n `;\r\n iconBox.textContent = this._docIcon(documentType);\r\n\r\n const titleBlock = document.createElement(\"div\");\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${theme.text};font-size:16px;font-weight:700;line-height:1.3;`;\r\n titleEl.textContent = `Capture your ${docLabel}`;\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${theme.textSecondary};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = requiresBack\r\n ? (isCapturingFront ? 'Step 1 of 2 \u2014 front side' : 'Step 2 of 2 \u2014 back side')\r\n : 'Choose how to provide your document';\r\n\r\n titleBlock.appendChild(titleEl);\r\n titleBlock.appendChild(subEl);\r\n headerRow.appendChild(iconBox);\r\n headerRow.appendChild(titleBlock);\r\n this.root.appendChild(headerRow);\r\n\r\n // \u2500\u2500 MIDDLE: side-by-side action buttons \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:10px;\r\n padding:0 20px 14px;\r\n `;\r\n\r\n // Camera button\r\n const cameraBtn = document.createElement(\"button\");\r\n cameraBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.primary};color:#fff;\r\n border:none;border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n box-shadow:0 4px 14px ${theme.primary}30;\r\n `;\r\n cameraBtn.innerHTML = `<span style=\"font-size:26px;\">\uD83D\uDCF7</span><span>Take Photo</span><span style=\"font-size:10px;opacity:0.8;font-weight:500;\">Use camera</span>`;\r\n cameraBtn.addEventListener(\"mouseenter\", () => { cameraBtn.style.opacity = \"0.9\"; cameraBtn.style.transform = \"translateY(-1px)\"; });\r\n cameraBtn.addEventListener(\"mouseleave\", () => { cameraBtn.style.opacity = \"1\"; cameraBtn.style.transform = \"none\"; });\r\n cameraBtn.addEventListener(\"click\", () => {\r\n this.root!.innerHTML = \"\";\r\n this.renderCameraView(this.root!, theme, documentType);\r\n });\r\n\r\n // Upload button\r\n const uploadBtn = document.createElement(\"button\");\r\n uploadBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.cardBg || theme.inputBg};color:${theme.text};\r\n border:2px solid ${theme.border};border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n `;\r\n uploadBtn.innerHTML = `<span style=\"font-size:26px;\">\uD83D\uDDBC\uFE0F</span><span>From Gallery</span><span style=\"font-size:10px;color:${theme.textMuted || theme.textSecondary};font-weight:500;\">Upload file</span>`;\r\n uploadBtn.addEventListener(\"mouseenter\", () => { uploadBtn.style.borderColor = theme.primary; uploadBtn.style.transform = \"translateY(-1px)\"; });\r\n uploadBtn.addEventListener(\"mouseleave\", () => { uploadBtn.style.borderColor = theme.border; uploadBtn.style.transform = \"none\"; });\r\n uploadBtn.addEventListener(\"click\", () => { this.handleFileUpload(container, theme); });\r\n\r\n btnRow.appendChild(cameraBtn);\r\n btnRow.appendChild(uploadBtn);\r\n this.root.appendChild(btnRow);\r\n\r\n // \u2500\u2500 BOTTOM: compact tips (no scroll) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n const tips = document.createElement(\"div\");\r\n tips.style.cssText = `\r\n margin:0 20px 16px;padding:12px 14px;\r\n background:${theme.shimmer || theme.cardBg};\r\n border:1px solid ${theme.border};border-radius:12px;\r\n `;\r\n\r\n const tipsGrid = document.createElement(\"div\");\r\n tipsGrid.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;\r\n `;\r\n const tipItems = [\r\n \"Lay document flat\",\r\n \"All 4 corners visible\",\r\n \"Good lighting, no glare\",\r\n \"All text clearly readable\",\r\n ];\r\n tipItems.forEach((t) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `display:flex;align-items:center;gap:5px;font-size:11px;color:${theme.textSecondary};`;\r\n row.innerHTML = `<span style=\"color:${theme.primary};font-weight:700;flex-shrink:0;\">\u2713</span><span>${t}</span>`;\r\n tipsGrid.appendChild(row);\r\n });\r\n tips.appendChild(tipsGrid);\r\n this.root.appendChild(tips);\r\n\r\n // \u2500\u2500 Back-side notice (shown only when requiresBack) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n if (requiresBack && isCapturingFront) {\r\n const notice = document.createElement(\"div\");\r\n notice.style.cssText = `\r\n margin:0 20px 16px;padding:10px 14px;\r\n background:${theme.primary}0D;\r\n border:1px solid ${theme.primary}25;border-radius:10px;\r\n display:flex;align-items:center;gap:8px;\r\n font-size:12px;color:${theme.textSecondary};line-height:1.5;\r\n `;\r\n notice.innerHTML = `<span style=\"font-size:16px;flex-shrink:0;\">\u2139\uFE0F</span><span>You'll capture both the <strong style=\"color:${theme.text}\">front</strong> and <strong style=\"color:${theme.text}\">back</strong> of this document.</span>`;\r\n this.root.appendChild(notice);\r\n }\r\n\r\n // Hidden file input\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/jpeg,image/png\";\r\n fileInput.style.display = \"none\";\r\n fileInput.id = \"sc-doc-file-input\";\r\n fileInput.addEventListener(\"change\", (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n const err = this.validateFile(file);\r\n if (err) { this.showError(err); return; }\r\n this.showLoadingState(\"Processing image...\", theme);\r\n this.compressImage(file, 1280, 960, 0.85)\r\n .then((c) => this.handleFileUploadComplete(c, container, theme, documentType))\r\n .catch(() => this.handleFileUploadComplete(file, container, theme, documentType));\r\n }\r\n });\r\n this.root.appendChild(fileInput);\r\n\r\n container.appendChild(this.root);\r\n }\r\n\r\n /** Returns an appropriate emoji icon for the document type. */\r\n private _docIcon(documentType: string): string {\r\n const t = documentType.toLowerCase();\r\n if (t.includes(\"passport\")) return \"\uD83D\uDCD8\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"\uD83D\uDE97\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"\uD83D\uDDF3\uFE0F\";\r\n return \"\uD83E\uDEAA\";\r\n }\r\n\r\n private renderCameraView(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"position:relative;width:100%;border-radius:12px;overflow:hidden;background:#000;\";\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n this.videoEl.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n wrapper.appendChild(this.videoEl);\r\n\r\n // Guide overlay \u2014 rectangular\r\n const guide = document.createElement(\"div\");\r\n guide.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n pointer-events:none;\r\n `;\r\n const rect = document.createElement(\"div\");\r\n rect.style.cssText = `\r\n width:85%;height:60%;border:2px solid rgba(255,255,255,0.6);\r\n border-radius:12px;box-shadow:0 0 0 9999px rgba(0,0,0,0.4);\r\n `;\r\n guide.appendChild(rect);\r\n wrapper.appendChild(guide);\r\n\r\n // Guide label\r\n const guideLbl = document.createElement(\"div\");\r\n guideLbl.style.cssText = `\r\n position:absolute;bottom:60px;left:0;right:0;text-align:center;\r\n color:#fff;font-size:13px;font-weight:600;\r\n text-shadow:0 1px 3px rgba(0,0,0,0.5);\r\n `;\r\n guideLbl.textContent = `Align your ${this.getDocumentLabel(documentType)} within the frame`;\r\n wrapper.appendChild(guideLbl);\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Capture button\r\n const captureBtn = document.createElement(\"button\");\r\n captureBtn.style.cssText = `\r\n display:block;margin:16px auto 0;width:64px;height:64px;\r\n border-radius:50%;border:4px solid ${theme.primary};\r\n background:transparent;cursor:pointer;position:relative;\r\n transition:all 0.2s ease;\r\n `;\r\n const inner = document.createElement(\"div\");\r\n inner.style.cssText = `\r\n width:48px;height:48px;border-radius:50%;background:${theme.primary};\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n transition:all 0.15s ease;\r\n `;\r\n captureBtn.appendChild(inner);\r\n captureBtn.addEventListener(\"mousedown\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(0.9)\";\r\n });\r\n captureBtn.addEventListener(\"mouseup\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(1)\";\r\n });\r\n captureBtn.addEventListener(\"click\", () => {\r\n this.captureFrame(container, theme, documentType);\r\n });\r\n container.appendChild(captureBtn);\r\n\r\n // Open camera\r\n this.openCamera();\r\n }\r\n\r\n private async openCamera(): Promise<void> {\r\n // Check browser compatibility\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n this.rejectCapture?.(new Error(\"Camera access is not supported in this browser. Please use a modern browser like Chrome, Firefox, or Safari.\"));\r\n return;\r\n }\r\n\r\n const maxRetries = 3;\r\n let retryCount = 0;\r\n\r\n const attemptCameraAccess = async (constraints: MediaStreamConstraints): Promise<MediaStream> => {\r\n try {\r\n return await navigator.mediaDevices.getUserMedia(constraints);\r\n } catch (err: any) {\r\n console.warn(`Camera access attempt ${retryCount + 1} failed:`, err);\r\n \r\n if (retryCount < maxRetries - 1) {\r\n retryCount++;\r\n await new Promise(resolve => setTimeout(resolve, 1000 * retryCount)); // Exponential backoff\r\n return attemptCameraAccess(constraints);\r\n }\r\n throw err;\r\n }\r\n };\r\n\r\n try {\r\n // Try rear camera first\r\n this.stream = await attemptCameraAccess({\r\n video: {\r\n facingMode: { ideal: \"environment\" },\r\n width: { ideal: 1280 },\r\n height: { ideal: 960 },\r\n },\r\n });\r\n } catch (err: any) {\r\n console.warn(\"Rear camera failed, trying any camera:\", err);\r\n \r\n // Fallback to any camera\r\n try {\r\n this.stream = await attemptCameraAccess({\r\n video: { width: { ideal: 1280 } },\r\n });\r\n } catch (fallbackErr: any) {\r\n const errorMessage = this.getCameraErrorMessage(fallbackErr);\r\n this.rejectCapture?.(new Error(errorMessage));\r\n return;\r\n }\r\n }\r\n\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = this.stream;\r\n }\r\n }\r\n\r\n private getCameraErrorMessage(error: any): string {\r\n if (error.name === 'NotAllowedError') {\r\n return \"Camera access denied. Please allow camera permissions and try again.\";\r\n } else if (error.name === 'NotFoundError') {\r\n return \"No camera found. Please ensure your device has a working camera.\";\r\n } else if (error.name === 'NotReadableError') {\r\n return \"Camera is already in use by another application. Please close other apps using the camera and try again.\";\r\n } else if (error.name === 'OverconstrainedError') {\r\n return \"Camera constraints not supported. Trying with different settings...\";\r\n } else {\r\n return \"Camera access failed. Please check your camera permissions and try again.\";\r\n }\r\n }\r\n\r\n private captureFrame(container: HTMLElement, theme: ThemeColors, documentType: string): void {\r\n if (!this.videoEl) return;\r\n\r\n const MAX_W = 1280;\r\n const MAX_H = 960;\r\n const vw = this.videoEl.videoWidth || MAX_W;\r\n const vh = this.videoEl.videoHeight || MAX_H;\r\n const ratio = Math.min(MAX_W / vw, MAX_H / vh, 1);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(vw * ratio);\r\n canvas.height = Math.round(vh * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(\r\n async (blob) => {\r\n if (blob) {\r\n this.stopCamera();\r\n // Quality analysis runs synchronously over ~1.2MP of pixel data \u2014\r\n // show a loading state so the capture->preview transition never\r\n // looks like a frozen/unresponsive tap on slower devices.\r\n this.showLoadingState(\"Analyzing photo...\", theme);\r\n const quality = await this._assessImageQuality(canvas, ctx);\r\n this.showPreview(container, theme, blob, documentType, quality);\r\n }\r\n },\r\n \"image/jpeg\",\r\n 0.85\r\n );\r\n }\r\n\r\n /**\r\n * Runs the local sharpness/glare/contrast/brightness check against a\r\n * captured frame. Returns null (never blocks) if quality can't be computed\r\n * \u2014 e.g. a tainted canvas from a cross-origin file, or an unsupported browser.\r\n */\r\n private async _assessImageQuality(\r\n canvas: HTMLCanvasElement,\r\n ctx: CanvasRenderingContext2D\r\n ): Promise<QualityFeedback | null> {\r\n try {\r\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n return assessQuality(imageData);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** Same as _assessImageQuality but starting from a Blob/File (upload path). */\r\n private async _assessBlobQuality(blob: Blob): Promise<QualityFeedback | null> {\r\n try {\r\n const url = URL.createObjectURL(blob);\r\n const imgEl = document.createElement(\"img\");\r\n await new Promise<void>((resolve, reject) => {\r\n imgEl.onload = () => resolve();\r\n imgEl.onerror = () => reject(new Error(\"Image load failed\"));\r\n imgEl.src = url;\r\n });\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = imgEl.naturalWidth;\r\n canvas.height = imgEl.naturalHeight;\r\n const ctx = canvas.getContext(\"2d\");\r\n URL.revokeObjectURL(url);\r\n if (!ctx) return null;\r\n ctx.drawImage(imgEl, 0, 0);\r\n return this._assessImageQuality(canvas, ctx);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private showPreview(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n imageData: Blob | File,\r\n documentType: string,\r\n quality?: QualityFeedback | null\r\n ): void {\r\n if (this.root) this.root.innerHTML = \"\";\r\n else {\r\n this.root = document.createElement(\"div\");\r\n container.appendChild(this.root);\r\n }\r\n\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;\";\r\n\r\n // Preview image\r\n const img = document.createElement(\"img\");\r\n const imageUrl = URL.createObjectURL(imageData);\r\n img.src = imageUrl;\r\n img.style.cssText = `\r\n width:100%;max-height:300px;object-fit:contain;border-radius:12px;\r\n border:2px solid ${theme.border};\r\n `;\r\n this.root.appendChild(img);\r\n\r\n // Store URL for cleanup\r\n (img as any)._blobUrl = imageUrl;\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${theme.textSecondary};font-size:13px;text-align:center;font-weight:500;`;\r\n label.textContent = \"Does the photo look clear?\";\r\n this.root.appendChild(label);\r\n\r\n const sublabel = document.createElement(\"div\");\r\n sublabel.style.cssText = `color:${theme.textMuted};font-size:11px;text-align:center;line-height:1.6;`;\r\n sublabel.textContent = \"All text must be readable and all four corners must be visible.\";\r\n this.root.appendChild(sublabel);\r\n\r\n // Quality warning banner \u2014 only shown when the local check flags an issue.\r\n // Never blocks (some devices/lighting can't clear the threshold), just warns.\r\n const qualityIsPoor = !!quality && !quality.isValid;\r\n if (qualityIsPoor && quality) {\r\n const warn = document.createElement(\"div\");\r\n warn.style.cssText = `\r\n width:100%;box-sizing:border-box;padding:10px 14px;border-radius:10px;\r\n background:#eab30815;border:1px solid #eab30840;\r\n color:${theme.text};font-size:12px;line-height:1.5;\r\n `;\r\n const issueLine = document.createElement(\"div\");\r\n issueLine.style.cssText = \"font-weight:700;color:#b8860b;\";\r\n issueLine.textContent = `\u26A0\uFE0F ${quality.message}`;\r\n warn.appendChild(issueLine);\r\n if (quality.recommendations.length > 0) {\r\n const rec = document.createElement(\"div\");\r\n rec.style.cssText = \"margin-top:4px;color:\" + theme.textSecondary + \";\";\r\n rec.textContent = quality.recommendations.join(\" \u00B7 \");\r\n warn.appendChild(rec);\r\n }\r\n this.root.appendChild(warn);\r\n }\r\n\r\n // Buttons\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = \"display:flex;gap:12px;width:100%;\";\r\n\r\n const retakeBtn = this.createButton(\"Retake\", theme, qualityIsPoor);\r\n retakeBtn.style.flex = \"1\";\r\n retakeBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n\r\n const useBtn = this.createButton(qualityIsPoor ? \"Use Anyway \u26A0\" : \"Use Photo \u2713\", theme, !qualityIsPoor);\r\n useBtn.style.flex = \"1\";\r\n useBtn.addEventListener(\"click\", () => {\r\n if ((img as any)._blobUrl) {\r\n URL.revokeObjectURL((img as any)._blobUrl);\r\n }\r\n useBtn.textContent = \"Processing...\";\r\n useBtn.disabled = true;\r\n this.compressImage(imageData, 1280, 960, 0.85)\r\n .then((compressed) => this.handleCaptureComplete(compressed, container, theme, documentType))\r\n .catch(() => this.handleCaptureComplete(imageData, container, theme, documentType)); // fallback to original\r\n });\r\n\r\n btnRow.appendChild(retakeBtn);\r\n btnRow.appendChild(useBtn);\r\n this.root.appendChild(btnRow);\r\n }\r\n\r\n private handleCaptureComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const wasCapturingFront = this.currentSide === 'front';\r\n \r\n // Store the captured image\r\n if (wasCapturingFront) {\r\n this.frontBlob = imageData;\r\n } else {\r\n this.backBlob = imageData;\r\n }\r\n \r\n // If we need back side and haven't captured it yet, move to back side\r\n if (requiresBack && wasCapturingFront) {\r\n this.currentSide = 'back';\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n return;\r\n }\r\n\r\n // All captures complete, resolve with result\r\n if (!this.frontBlob) {\r\n this.rejectCapture?.(new Error(\"No front image captured. Please try again.\"));\r\n return;\r\n }\r\n \r\n const result: DocumentCaptureResult = {\r\n front: this.frontBlob,\r\n back: this.backBlob || undefined\r\n };\r\n this.resolveCapture?.(result);\r\n }\r\n\r\n private async handleFileUploadComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): Promise<void> {\r\n const quality = await this._assessBlobQuality(imageData);\r\n this.showPreview(container, theme, imageData, documentType, quality);\r\n }\r\n\r\n private validateFile(file: File): string | null {\r\n // Check file type\r\n const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];\r\n if (!allowedTypes.includes(file.type)) {\r\n return \"Invalid file type. Please upload a JPEG or PNG image.\";\r\n }\r\n \r\n // Check file size (max 10MB)\r\n const maxSize = 10 * 1024 * 1024;\r\n if (file.size > maxSize) {\r\n return \"File is too large. Please upload an image smaller than 10MB.\";\r\n }\r\n \r\n // Check minimum file size (at least 1KB to avoid empty files)\r\n if (file.size < 1024) {\r\n return \"File is too small. Please upload a valid image file.\";\r\n }\r\n \r\n return null;\r\n }\r\n\r\n private handleFileUpload(container: HTMLElement, theme: ThemeColors): void {\r\n const input = this.root?.querySelector(\"#sc-doc-file-input\") as HTMLInputElement;\r\n if (input) input.click();\r\n }\r\n\r\n private stopCamera(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((t) => t.stop());\r\n this.stream = null;\r\n }\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = null;\r\n this.videoEl = null;\r\n }\r\n }\r\n\r\n private createEnhancedButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean,\r\n ariaLabel: string\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.setAttribute(\"aria-label\", ariaLabel);\r\n btn.style.cssText = `\r\n padding:18px 24px;border-radius:16px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.3s ease;border:none;width:100%;\r\n min-height:56px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n position:relative;overflow:hidden;\r\n ${\r\n isPrimary\r\n ? `background:linear-gradient(135deg, ${theme.primary}, ${theme.primary}DD);color:#fff;box-shadow:0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};box-shadow:0 2px 8px ${theme.border}20;`\r\n }\r\n `;\r\n \r\n // Add ripple effect\r\n btn.addEventListener(\"click\", (e) => {\r\n const ripple = document.createElement(\"span\");\r\n const rect = btn.getBoundingClientRect();\r\n const size = Math.max(rect.width, rect.height);\r\n const x = e.clientX - rect.left - size / 2;\r\n const y = e.clientY - rect.top - size / 2;\r\n \r\n ripple.style.cssText = `\r\n position:absolute;width:${size}px;height:${size}px;\r\n left:${x}px;top:${y}px;border-radius:50%;\r\n background:${isPrimary ? 'rgba(255,255,255,0.3)' : theme.primary + '20'};\r\n transform:scale(0);animation:ripple 0.6s ease-out;\r\n pointer-events:none;\r\n `;\r\n btn.appendChild(ripple);\r\n setTimeout(() => ripple.remove(), 600);\r\n });\r\n \r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-2px)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 12px 32px ${theme.primary}30, 0 6px 16px ${theme.primary}20`;\r\n } else {\r\n btn.style.boxShadow = `0 4px 16px ${theme.border}30, 0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.primary;\r\n }\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) {\r\n btn.style.boxShadow = `0 8px 24px ${theme.primary}25, 0 4px 12px ${theme.primary}15`;\r\n } else {\r\n btn.style.boxShadow = `0 2px 8px ${theme.border}20`;\r\n btn.style.borderColor = theme.border;\r\n }\r\n });\r\n \r\n // Add ripple animation\r\n if (!document.head.querySelector('style[data-ripple-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-ripple-animation', 'true');\r\n style.textContent = `\r\n @keyframes ripple {\r\n to { transform: scale(4); opacity: 0; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n return btn;\r\n }\r\n\r\n private showLoadingState(message: string, theme: ThemeColors): void {\r\n if (!this.root) return;\r\n \r\n this.root.innerHTML = \"\";\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:40px 20px;min-height:300px;\";\r\n \r\n // Enhanced loading spinner\r\n const spinnerContainer = document.createElement(\"div\");\r\n spinnerContainer.style.cssText = \"position:relative;width:80px;height:80px;\";\r\n \r\n const spinner = document.createElement(\"div\");\r\n spinner.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:4px solid ${theme.border};\r\n border-top-color:${theme.primary};\r\n animation:sc-spin 1s linear infinite;\r\n `;\r\n spinnerContainer.appendChild(spinner);\r\n \r\n const centerIcon = document.createElement(\"div\");\r\n centerIcon.style.cssText = `\r\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\r\n font-size:28px;animation:pulse 2s ease-in-out infinite;\r\n `;\r\n centerIcon.textContent = \"\uD83D\uDCC4\";\r\n spinnerContainer.appendChild(centerIcon);\r\n \r\n this.root.appendChild(spinnerContainer);\r\n \r\n // Loading message\r\n const loadingText = document.createElement(\"div\");\r\n loadingText.style.cssText = `\r\n color:${theme.text};font-size:16px;font-weight:600;text-align:center;\r\n animation:fadeIn 0.5s ease-out;\r\n `;\r\n loadingText.textContent = message;\r\n this.root.appendChild(loadingText);\r\n \r\n // Add pulse animation\r\n if (!document.head.querySelector('style[data-pulse-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-pulse-animation', 'true');\r\n style.textContent = `\r\n @keyframes pulse {\r\n 0%, 100% { transform: scale(1); opacity: 1; }\r\n 50% { transform: scale(1.1); opacity: 0.8; }\r\n }\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: translateY(10px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n }\r\n\r\n private showError(message: string): void {\r\n if (!this.root) return;\r\n \r\n const errorContainer = document.createElement(\"div\");\r\n errorContainer.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:16px;\r\n background:#ff444415;border:1px solid #ff444430;border-radius:12px;\r\n color:#ff4444;font-size:14px;margin-top:16px;animation:shake 0.5s ease-in-out;\r\n `;\r\n errorContainer.innerHTML = `\r\n <span style=\"font-size:18px;\">\u26A0\uFE0F</span>\r\n <span>${message}</span>\r\n `;\r\n \r\n // Add shake animation\r\n if (!document.head.querySelector('style[data-shake-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-shake-animation', 'true');\r\n style.textContent = `\r\n @keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 25% { transform: translateX(-5px); }\r\n 75% { transform: translateX(5px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n this.root.appendChild(errorContainer);\r\n setTimeout(() => errorContainer.remove(), 5000);\r\n }\r\n\r\n private createButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.style.cssText = `\r\n padding:16px 24px;border-radius:12px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.2s ease;border:none;width:100%;\r\n min-height:52px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n ${\r\n isPrimary\r\n ? `background:${theme.primary};color:#fff;box-shadow:0 4px 12px ${theme.primary}30;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};`\r\n }\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-1px)\";\r\n if (isPrimary) btn.style.background = theme.primaryHover;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) btn.style.background = theme.primary;\r\n });\r\n return btn;\r\n }\r\n\r\n private compressImage(\r\n source: Blob | File,\r\n maxWidth: number,\r\n maxHeight: number,\r\n quality: number\r\n ): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n // Read EXIF orientation FIRST so we can correct rotation before canvas draw.\r\n // Canvas ignores EXIF metadata \u2014 without this, phone uploads arrive rotated.\r\n this._readExifOrientation(source).then((orientation) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n\r\n // For orientations 5-8 the image is rotated 90\u00B0/270\u00B0 \u2014 swap dimensions\r\n const swapped = orientation >= 5 && orientation <= 8;\r\n const srcW = swapped ? h : w;\r\n const srcH = swapped ? w : h;\r\n const ratio = Math.min(maxWidth / srcW, maxHeight / srcH, 1);\r\n const outW = Math.round(srcW * ratio);\r\n const outH = Math.round(srcH * ratio);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = outW;\r\n canvas.height = outH;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n\r\n // Apply EXIF rotation transform before drawing\r\n ctx.save();\r\n if (orientation === 2) { ctx.transform(-1, 0, 0, 1, outW, 0); }\r\n else if (orientation === 3) { ctx.transform(-1, 0, 0, -1, outW, outH); }\r\n else if (orientation === 4) { ctx.transform( 1, 0, 0, -1, 0, outH); }\r\n else if (orientation === 5) { ctx.transform( 0, 1, 1, 0, 0, 0); }\r\n else if (orientation === 6) { ctx.transform( 0, 1, -1, 0, outH, 0); }\r\n else if (orientation === 7) { ctx.transform( 0, -1, -1, 0, outH, outW); }\r\n else if (orientation === 8) { ctx.transform( 0, -1, 1, 0, 0, outW); }\r\n ctx.drawImage(imgEl, 0, 0, swapped ? outH : outW, swapped ? outW : outH);\r\n ctx.restore();\r\n\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n }).catch(() => {\r\n // If EXIF read fails, fall back to simple compression without rotation\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = Math.min(maxWidth / w, maxHeight / h, 1);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Read JPEG EXIF orientation tag (1\u20138) from a Blob/File.\r\n * Returns 1 (no rotation) if EXIF is absent or unreadable.\r\n */\r\n private _readExifOrientation(source: Blob | File): Promise<number> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n try {\r\n const buf = e.target?.result as ArrayBuffer;\r\n const view = new DataView(buf);\r\n if (view.getUint16(0, false) !== 0xFFD8) { resolve(1); return; } // not JPEG\r\n let offset = 2;\r\n while (offset < view.byteLength) {\r\n const marker = view.getUint16(offset, false);\r\n offset += 2;\r\n if (marker === 0xFFE1) { // APP1 \u2014 may contain EXIF\r\n if (view.getUint32(offset + 2, false) !== 0x45786966) { resolve(1); return; }\r\n const little = view.getUint16(offset + 8, false) === 0x4949;\r\n const ifdOff = offset + 8 + view.getUint32(offset + 12, little);\r\n const tags = view.getUint16(ifdOff, little);\r\n for (let i = 0; i < tags; i++) {\r\n if (view.getUint16(ifdOff + 2 + 12 * i, little) === 0x0112) {\r\n resolve(view.getUint16(ifdOff + 2 + 12 * i + 8, little));\r\n return;\r\n }\r\n }\r\n resolve(1); return;\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break;\r\n } else {\r\n offset += view.getUint16(offset, false);\r\n }\r\n }\r\n resolve(1);\r\n } catch { resolve(1); }\r\n };\r\n reader.onerror = () => resolve(1);\r\n // Only need the first 64KB \u2014 EXIF is always in the first APP1 segment\r\n reader.readAsArrayBuffer(source.slice(0, 65536));\r\n });\r\n }\r\n\r\n private getDocumentLabel(type: string): string {\r\n const t = type.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"driver's license\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"voter's card\";\r\n if (t.includes(\"national\") || t.includes(\"nin\") || t.includes(\"national id\")) return \"national ID card\";\r\n if (t.includes(\"bvn\")) return \"BVN card\";\r\n return \"identity document\";\r\n }\r\n}\r\n", "\uFEFFimport { SmartComply } from \"../client/Smartcomply\";\r\nimport { SDKInitConfig, SDKChannel, VerifyIdentityResponse } from \"../types/onboarding\";\r\nimport { LivenessSubmitResponse, ChallengeAction } from \"../types/liveness\";\r\nimport { ThemeColors, getTheme } from \"./theme\";\r\nimport { DocumentCapture, DocumentCaptureResult } from \"./DocumentCapture\";\r\nimport { Environment } from \"../client/Config\";\r\nimport { collectDeviceMetadata } from \"../utils/device\";\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// Public Types\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\nexport interface FlowOptions {\r\n apiKey: string;\r\n clientId: string;\r\n environment?: Environment;\r\n timeout?: number;\r\n onComplete?: (result: FlowResult) => void;\r\n onError?: (error: Error) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface FlowResult {\r\n entryId: number;\r\n sessionId: string | null;\r\n status: string;\r\n submittedAt: string | null;\r\n verificationResult?: VerifyIdentityResponse;\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// Step definitions\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\ntype StepName =\r\n | \"loading\"\r\n | \"welcome\"\r\n | \"country\"\r\n | \"id_type\"\r\n | \"id_input\"\r\n | \"confirm_identity\"\r\n | \"document_capture\"\r\n | \"document_confirm\"\r\n | \"ocr_gate\"\r\n | \"processing\"\r\n | \"liveness\"\r\n | \"done\"\r\n | \"result\"\r\n | \"error\";\r\n\r\nconst STEP_ORDER: StepName[] = [\r\n \"loading\",\r\n \"welcome\",\r\n \"country\",\r\n \"id_type\",\r\n \"id_input\",\r\n \"confirm_identity\",\r\n \"document_capture\",\r\n \"ocr_gate\",\r\n \"document_confirm\",\r\n \"liveness\",\r\n \"done\",\r\n \"result\",\r\n];\r\n\r\nconst COUNTRY_LABELS: Record<string, string> = {\r\n nigeria: \"\u00F0\u0178\u2021\u00B3\u00F0\u0178\u2021\u00AC Nigeria\",\r\n global: \"\u00F0\u0178\u0152\u008D Other Countries\",\r\n ghana: \"\u00F0\u0178\u2021\u00AC\u00F0\u0178\u2021\u00AD Ghana\",\r\n kenya: \"\u00F0\u0178\u2021\u00B0\u00F0\u0178\u2021\u00AA Kenya\",\r\n south_africa: \"\u00F0\u0178\u2021\u00BF\u00F0\u0178\u2021\u00A6 South Africa\",\r\n united_states: \"\u00F0\u0178\u2021\u00BA\u00F0\u0178\u2021\u00B8 United States\",\r\n united_kingdom: \"\u00F0\u0178\u2021\u00AC\u00F0\u0178\u2021\u00A7 United Kingdom\",\r\n};\r\n\r\n// Backend/admin data tags document-capture fields inconsistently \u00E2\u20AC\u201D the field\r\n// renderer (below) already treats \"image\" and \"file\" as file inputs alongside\r\n// \"upload\", so flow-routing decisions must recognize the same set or a channel\r\n// tagged \"image\"/\"file\" silently falls back to the number-entry screen.\r\nfunction isUploadFieldType(type: unknown): boolean {\r\n return type === \"upload\" || type === \"image\" || type === \"file\";\r\n}\r\n\r\nfunction resolveIdTypeInfo(\r\n typeName: string,\r\n isDocumentFlow: boolean\r\n): { icon: string; desc: string; requiresBack?: boolean } {\r\n const u = typeName.toUpperCase();\r\n const advanced = u.includes(\"ADVANCED\");\r\n\r\n // Strip UI noise from display labels \u00E2\u20AC\u201D users don't need \"with face\" or \"(NIN)\" suffixes\r\n const cleanName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n // Helper function to check if document requires back side\r\n const requiresBackSide = (type: string): boolean => {\r\n const t = type.toLowerCase();\r\n return t.includes(\"voter\") ||\r\n t.includes(\"driver\") ||\r\n t.includes(\"license\") ||\r\n t.includes(\"national id\") ||\r\n t.includes(\"national id card\");\r\n // Note: NIN document (nin_with_face, nin_slip) does NOT require back side \u00E2\u20AC\u201D\r\n // the NIN card is single-sided. Only the physical NIN slip has a back but\r\n // the OCR pipeline only needs the front.\r\n };\r\n\r\n // BVN \u00E2\u20AC\u201D always 11 digits\r\n if (u.includes(\"BVN\") || u.includes(\"BANK VERIFICATION\")) {\r\n return { icon: \"\u00F0\u0178\u008F\u00A6\", desc: \"Enter your 11-digit Bank Verification Number (BVN)\", requiresBack: false };\r\n }\r\n\r\n // NIN \u00E2\u20AC\u201D always 11 digits (covers nin_with_face, NIN slip, etc.)\r\n if (u.includes(\"NIN\") || u.includes(\"NATIONAL IDENTITY NUMBER\")) {\r\n return { icon: \"\u00F0\u0178\u2020\u201D\", desc: \"Enter your 11-digit National Identification Number (NIN)\", requiresBack: false };\r\n }\r\n\r\n // Ghana Card / Ghana National ID\r\n if (u.includes(\"GHANA\")) {\r\n if (isDocumentFlow) return { icon: \"\u00F0\u0178\u00AA\u00AA\", desc: \"Capture or upload your Ghana Card\", requiresBack: true };\r\n return { icon: \"\u00F0\u0178\u00AA\u00AA\", desc: \"Enter your Ghana Card number\", requiresBack: false };\r\n }\r\n\r\n // SSNIT (Ghana social security)\r\n if (u.includes(\"SSNIT\"))\r\n return { icon: \"\u00F0\u0178\u008F\u203A\u00EF\u00B8\u008F\", desc: \"Enter your SSNIT number\", requiresBack: false };\r\n\r\n // Kenya National ID\r\n if (u.includes(\"KENYA\") || (u.includes(\"NATIONAL\") && u.includes(\"KENYA\")))\r\n return { icon: \"\u00F0\u0178\u2020\u201D\", desc: \"Enter your Kenya National ID number\", requiresBack: false };\r\n\r\n // TIN\r\n if (u.includes(\"TIN\") || u.includes(\"TAX IDENTIFICATION\"))\r\n return { icon: \"\u00F0\u0178\u00A7\u00BE\", desc: \"Enter your Tax Identification Number (TIN)\", requiresBack: false };\r\n\r\n // CAC / Company registration\r\n if (u.includes(\"CAC\") || u.includes(\"CORPORATE AFFAIRS\") || u.includes(\"COMPANY\"))\r\n return { icon: \"\u00F0\u0178\u008F\u00A2\", desc: advanced ? \"Enter RC number, company name & type\" : \"Enter your company registration number\", requiresBack: false };\r\n\r\n // Voter / PVC\r\n if (u.includes(\"VOTER\") || u.includes(\"PVC\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\u00F0\u0178\u2014\u00B3\u00EF\u00B8\u008F\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your voter's card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your voter ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Passport\r\n if (u.includes(\"PASSPORT\"))\r\n return { icon: \"\u00F0\u0178\u201C\u02DC\", desc: isDocumentFlow ? \"Capture or upload your passport\" : \"Enter your passport number\", requiresBack: false };\r\n\r\n // Driver's license\r\n if (u.includes(\"DRIVER\") || u.includes(\"LICENSE\") || u.includes(\"LICENCE\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\u00F0\u0178\u0161\u2014\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your driver's license${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your driver's license number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // National ID card (generic)\r\n if (u.includes(\"NATIONAL ID\") || (u.includes(\"NATIONAL\") && u.includes(\"CARD\"))) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"\u00F0\u0178\u00AA\u00AA\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your ID card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your National ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Face liveness / comparison\r\n if (u.includes(\"LIVENESS\") || u.includes(\"FACE COMPARISON\") || u.includes(\"FACE MATCH\"))\r\n return { icon: \"\u00F0\u0178\u00A4\u00B3\", desc: \"We'll capture a short selfie video to verify you\", requiresBack: false };\r\n\r\n return {\r\n icon: isDocumentFlow ? \"\u00F0\u0178\u201C\u201E\" : \"\u00F0\u0178\u2020\u201D\",\r\n desc: isDocumentFlow ? \"Capture or upload your document\" : \"Enter your ID number\",\r\n requiresBack: false,\r\n };\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC Widget-side message sanitizer \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// Strips anything technical before showing text to the end user.\r\n// Keeps messages that are already written plainly in natural language.\r\nfunction _sanitizeUserMessage(raw: string | null | undefined): string | null {\r\n if (!raw) return null;\r\n const lower = raw.toLowerCase();\r\n\r\n // Block anything that looks internal / technical\r\n const blocklist = [\r\n \"smartcomply\", \"face comparison service\", \"session id\", \"session_id\",\r\n \"provider\", \"ocr\", \"textract\", \"rekognition\", \"deepface\",\r\n \"ivs\", \"celery\", \"exception\", \"traceback\", \"str(e)\",\r\n \"error:\", \"failed:\", \"django\", \"python\", \"http \",\r\n \"comparison mode\", \"liveness mode\", \"callback\",\r\n \"face_comparison\", \"face_match\", \"confidence_percentage\",\r\n \"threshold_percentage\", \"polling_fallback\", \"resolved_by\",\r\n ];\r\n for (const blocked of blocklist) {\r\n if (lower.includes(blocked)) return null;\r\n }\r\n\r\n // Block snake_case (internal field names accidentally leaking through)\r\n if (/[a-z]+_[a-z]+/.test(raw) && !/\\s/.test(raw.trim())) return null;\r\n\r\n // Block anything starting with a lowercase letter (likely a code/key)\r\n if (raw.trim()[0] === raw.trim()[0].toLowerCase() && /^[a-z]/.test(raw.trim())) return null;\r\n\r\n return raw.trim();\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC B8: OCR date string normaliser \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n// OCR providers return dates in wildly different formats. new Date(str) is\r\n// locale-dependent for anything other than ISO 8601 (YYYY-MM-DD), so we\r\n// attempt a set of known patterns before falling back to the native parser.\r\nfunction _parseOcrDate(raw: string): Date | null {\r\n if (!raw) return null;\r\n const s = raw.trim();\r\n\r\n // ISO 8601 or near-ISO \u00E2\u20AC\u201D try first, always unambiguous\r\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(s)) return new Date(s.slice(0, 10));\r\n\r\n // DD/MM/YYYY or DD-MM-YYYY\r\n const dmy = s.match(/^(\\d{2})[\\/\\-](\\d{2})[\\/\\-](\\d{4})/);\r\n if (dmy) return new Date(`${dmy[3]}-${dmy[2]}-${dmy[1]}`);\r\n\r\n // MM/DD/YYYY (US format \u00E2\u20AC\u201D less common from OCR but possible)\r\n const mdy = s.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})/);\r\n if (mdy) {\r\n // Heuristic: if \"month\" > 12 it must be day-first\r\n if (parseInt(mdy[1], 10) > 12) return new Date(`${mdy[3]}-${mdy[2]}-${mdy[1]}`);\r\n return new Date(`${mdy[3]}-${mdy[1]}-${mdy[2]}`);\r\n }\r\n\r\n // DD Mon YYYY e.g. \"12 May 2029\" or \"12 MAY 2029\"\r\n const dMonY = s.match(/^(\\d{1,2})\\s+([A-Za-z]{3,})\\s+(\\d{4})/);\r\n if (dMonY) return new Date(`${dMonY[2]} ${dMonY[1]} ${dMonY[3]}`);\r\n\r\n // Last resort: native parser\r\n const d = new Date(s);\r\n return isNaN(d.getTime()) ? null : d;\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC W12: Image compression before document upload \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\nasync function _compressImage(blob: Blob, maxWidth = 1600, quality = 0.85): Promise<Blob> {\r\n try {\r\n const bmp = await createImageBitmap(blob);\r\n const scale = Math.min(1, maxWidth / bmp.width);\r\n const w = Math.round(bmp.width * scale);\r\n const h = Math.round(bmp.height * scale);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = w; canvas.height = h;\r\n canvas.getContext(\"2d\")!.drawImage(bmp, 0, 0, w, h);\r\n bmp.close();\r\n return await new Promise<Blob>((res, rej) =>\r\n canvas.toBlob(b => b ? res(b) : rej(new Error(\"Compression failed\")), \"image/jpeg\", quality)\r\n );\r\n } catch {\r\n return blob; // fallback to original on any error\r\n }\r\n}\r\n\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC Document type code \u00E2\u2020\u2019 human label \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\nfunction _formatDocType(code: string): string {\r\n const map: Record<string, string> = {\r\n passport: \"Passport\",\r\n national_id: \"National ID\",\r\n nin_slip: \"NIN Slip\",\r\n nin_with_face: \"National Identity Number\",\r\n drivers_license: \"Driver's Licence\",\r\n voters_card: \"Voter's Card\",\r\n kenya_id: \"Kenya National ID\",\r\n ghana_id: \"Ghana Card\",\r\n };\r\n if (!code) return \"\";\r\n const key = code.toLowerCase().replace(/[\\s-]/g, \"_\");\r\n if (map[key]) return map[key];\r\n // Fallback: title-case the code\r\n return code.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n}\r\n\r\n// SmartComplyFlow\r\n// \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n// Add CSS animation keyframes for spin animations\r\nconst style = document.createElement('style');\r\nstyle.textContent = `\r\n @keyframes sc-spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n`;\r\nif (!document.head.querySelector('style[data-sc-animations]')) {\r\n style.setAttribute('data-sc-animations', 'true');\r\n document.head.appendChild(style);\r\n}\r\n\r\nexport class SmartComplyFlow {\r\n private sdk: SmartComply;\r\n private options: FlowOptions;\r\n private theme: ThemeColors = getTheme(\"default\");\r\n\r\n // DOM\r\n private overlay: HTMLDivElement | null = null;\r\n private modal: HTMLDivElement | null = null;\r\n private contentArea: HTMLDivElement | null = null;\r\n private progressBar: HTMLDivElement | null = null;\r\n private stepLabel: HTMLDivElement | null = null;\r\n private stageDots: HTMLDivElement | null = null;\r\n private brandLabel: HTMLDivElement | null = null;\r\n\r\n // State\r\n private sdkConfig: SDKInitConfig | null = null;\r\n private currentStep: StepName = \"loading\";\r\n private selectedCountry: string = \"\";\r\n private selectedChannelId: number = 0;\r\n private selectedChannelFields: { type: string; label: string; options?: string[] }[] = [];\r\n private selectedIdType: string = \"\"; // Canonical code (e.g., \"national_id\", \"nin_with_face\")\r\n private selectedIdTypeName: string = \"\"; // Display name (e.g., \"National Identity Number with Face (NIN)\")\r\n private selectedRequiresBack: boolean | undefined = undefined; // Backend-provided back-side flag\r\n private collectedFields: Record<string, string> = {};\r\n private idNumber: string = \"\";\r\n private documentBlob: Blob | null = null;\r\n private documentBackBlob: Blob | null = null;\r\n private identityCheckId: number | null = null;\r\n private verificationResult: VerifyIdentityResponse | null = null;\r\n private livenessEntryId: number | null = null;\r\n private isDestroyed = false;\r\n private headerBackBtn: HTMLButtonElement | null = null;\r\n\r\n // Retry safety \u00E2\u20AC\u201D max 3 confirmation rejections or liveness failures per session\r\n private _confirmRetries = 0;\r\n private _livenessFailures = 0;\r\n private static readonly MAX_RETRIES = 3;\r\n\r\n // IVS result stored for confirm_identity screen\r\n private _ivsName: string = \"\";\r\n private _ivsGender: string = \"\";\r\n\r\n // OCR result stored for document_confirm screen\r\n private _ocrName: string = \"\";\r\n private _ocrDocNumber: string = \"\";\r\n private _ocrExpiry: string = \"\";\r\n private _ocrFaceImageUrl: string = \"\";\r\n private _ocrIsExpired: boolean = false;\r\n private _ocrExpirySoon: boolean = false;\r\n\r\n // Camera pre-warm stream (created during confirmation screen, used in liveness)\r\n private _prewarmedStream: MediaStream | null = null;\r\n\r\n // OCR gate poll timer \u00E2\u20AC\u201D stored so it can be cancelled on navigation or close\r\n private _ocrPollTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // UI timeout from _startStatusPolling \u00E2\u20AC\u201D stored so close() can cancel it\r\n private _uiTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Session expiry\r\n private sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Status polling (result screen)\r\n private _pollStatusTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Components\r\n private docCapture: DocumentCapture | null = null;\r\n\r\n private constructor(options: FlowOptions) {\r\n this.options = options;\r\n this.sdk = new SmartComply({\r\n apiKey: options.apiKey,\r\n clientId: options.clientId,\r\n environment: options.environment || \"sandbox\",\r\n timeout: options.timeout,\r\n });\r\n }\r\n\r\n /**\r\n * Open the SmartComply verification flow.\r\n *\r\n * Usage:\r\n * SmartComplyFlow.open({\r\n * apiKey: \"pk_live_...\",\r\n * clientId: \"uuid-...\",\r\n * environment: \"production\",\r\n * onComplete: (result) => console.log(\"Done!\", result),\r\n * onError: (err) => console.error(err),\r\n * onClose: () => console.log(\"Closed\"),\r\n * });\r\n */\r\n static open(options: FlowOptions): SmartComplyFlow {\r\n const flow = new SmartComplyFlow(options);\r\n flow.mount();\r\n flow.initialize();\r\n return flow;\r\n }\r\n\r\n /**\r\n * Close and destroy the flow widget.\r\n */\r\n close(): void {\r\n this.isDestroyed = true;\r\n this.docCapture?.destroy();\r\n // Release any pre-warmed camera stream\r\n if (this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n if (this.sessionExpiryTimer) {\r\n clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n if (this._pollStatusTimer) {\r\n clearTimeout(this._pollStatusTimer);\r\n this._pollStatusTimer = null;\r\n }\r\n // B6: cancel OCR gate poll timer\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n // P4: cancel result-screen UI timeout\r\n if (this._uiTimeoutId) {\r\n clearTimeout(this._uiTimeoutId);\r\n this._uiTimeoutId = null;\r\n }\r\n\r\n if (this.overlay) {\r\n this.overlay.style.opacity = \"0\";\r\n setTimeout(() => {\r\n try {\r\n this.overlay?.remove();\r\n } catch (_) { /* extension interference \u00E2\u20AC\u201D safe to ignore */ }\r\n this.overlay = null;\r\n this.modal = null;\r\n this.contentArea = null;\r\n }, 300);\r\n }\r\n\r\n this.options.onClose?.();\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // Initialization\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private mount(): void {\r\n // Inject keyframes\r\n this.injectStyles();\r\n\r\n // Overlay\r\n this.overlay = document.createElement(\"div\");\r\n this.overlay.id = \"sc-flow-overlay\";\r\n this.overlay.style.cssText = `\r\n position:fixed;inset:0;z-index:99999;\r\n display:flex;align-items:center;justify-content:center;\r\n background:${this.theme.overlay};\r\n backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);\r\n opacity:0;transition:opacity 0.3s ease;\r\n font-family:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n // Modal\r\n this.modal = document.createElement(\"div\");\r\n this.modal.id = \"sc-flow-modal\";\r\n this.modal.setAttribute(\"role\", \"dialog\");\r\n this.modal.setAttribute(\"aria-modal\", \"true\");\r\n this.modal.setAttribute(\"aria-label\", \"Identity verification\");\r\n this.modal.style.cssText = `\r\n width:100%;max-width:580px;max-height:95vh;\r\n background:${this.theme.bg};\r\n border-radius:20px;overflow:hidden;\r\n box-shadow:${this.theme.shadow};\r\n display:flex;flex-direction:column;\r\n transform:translateY(20px) scale(0.97);\r\n transition:transform 0.35s cubic-bezier(0.16,1,0.3,1);\r\n `;\r\n\r\n // Header\r\n const header = this.createHeader();\r\n this.modal.appendChild(header);\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `height:3px;background:${this.theme.shimmer};`;\r\n this.progressBar = document.createElement(\"div\");\r\n this.progressBar.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,${this.theme.primary},${this.theme.primaryHover});\r\n border-radius:0 2px 2px 0;transition:width 0.5s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBar);\r\n this.modal.appendChild(progressWrap);\r\n\r\n // Content area (scrollable)\r\n this.contentArea = document.createElement(\"div\");\r\n this.contentArea.id = \"sc-flow-content\";\r\n this.contentArea.setAttribute(\"role\", \"main\");\r\n this.contentArea.setAttribute(\"aria-live\", \"polite\");\r\n this.contentArea.setAttribute(\"aria-atomic\", \"false\");\r\n this.contentArea.style.cssText = `\r\n flex:1;overflow-y:auto;padding:16px 20px;\r\n -webkit-overflow-scrolling:touch;\r\n `;\r\n this.modal.appendChild(this.contentArea);\r\n\r\n // Footer\r\n const footer = this.createFooter();\r\n this.modal.appendChild(footer);\r\n\r\n this.overlay.appendChild(this.modal);\r\n document.body.appendChild(this.overlay);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n if (this.overlay) this.overlay.style.opacity = \"1\";\r\n if (this.modal) this.modal.style.transform = \"translateY(0) scale(1)\";\r\n });\r\n }\r\n\r\n private async initialize(): Promise<void> {\r\n this.showStep(\"loading\");\r\n\r\n try {\r\n // Create session\r\n await this.sdk.createSession();\r\n\r\n // C4: Start session expiry timer (warn 2 min before 30-min expiry)\r\n const expiresAt = this.sdk.sessionExpiresAt;\r\n if (expiresAt) {\r\n const expiresMs = new Date(expiresAt).getTime() - Date.now();\r\n const warnMs = Math.max(expiresMs - 120000, 0); // warn 2 min before\r\n this.sessionExpiryTimer = setTimeout(() => {\r\n if (!this.isDestroyed && this.currentStep !== \"result\") {\r\n this.showErrorStep(\"Your session is about to expire. Please complete verification quickly or restart.\");\r\n }\r\n }, warnMs);\r\n }\r\n\r\n // Load config\r\n this.sdkConfig = await this.sdk.initializeConfig();\r\n\r\n // Apply theme from config \u00E2\u20AC\u201D use theme_hex to override primary colour if set\r\n if (this.sdkConfig.theme) {\r\n this.theme = getTheme(this.sdkConfig.theme, (this.sdkConfig as any).theme_hex || null);\r\n this.applyTheme();\r\n }\r\n\r\n // Update brand name in header\r\n if (this.brandLabel && this.sdkConfig.brand_name) {\r\n this.brandLabel.textContent = this.sdkConfig.brand_name;\r\n }\r\n\r\n if (this.isDestroyed) return;\r\n\r\n this.showStep(\"welcome\");\r\n\r\n } catch (err: any) {\r\n this.showErrorStep(err.message || \"Failed to initialize. Please try again.\");\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // Step rendering\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private showStep(step: StepName): void {\r\n this.currentStep = step;\r\n if (!this.contentArea) return;\r\n\r\n // P1/B6: cancel any in-flight OCR gate poll when user navigates away\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n\r\n // Release a pre-warmed camera stream if we're navigating anywhere other\r\n // than liveness (the only step that consumes it) \u00E2\u20AC\u201D otherwise \"No, use a\r\n // different ID\" / \"No, retake document\" / header back-button leave the\r\n // camera held open indefinitely with no consumer.\r\n if (step !== \"liveness\" && this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n\r\n // Update progress\r\n this.updateProgress();\r\n\r\n // Animate out current content\r\n const oldContent = this.contentArea.firstChild as HTMLElement | null;\r\n if (oldContent) {\r\n oldContent.style.cssText += \"opacity:0;transform:translateX(-20px);transition:all 0.2s ease;\";\r\n setTimeout(() => {\r\n if (this.contentArea) this.contentArea.innerHTML = \"\";\r\n this.renderStep(step);\r\n }, 200);\r\n } else {\r\n this.renderStep(step);\r\n }\r\n }\r\n\r\n private renderStep(step: StepName): void {\r\n if (!this.contentArea) return;\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"opacity:0;transform:translateX(20px);transition:all 0.3s ease;\";\r\n\r\n switch (step) {\r\n case \"loading\":\r\n this.renderLoading(wrapper);\r\n break;\r\n case \"welcome\":\r\n this.renderWelcome(wrapper);\r\n break;\r\n case \"country\":\r\n this.renderCountrySelect(wrapper);\r\n break;\r\n case \"id_type\":\r\n this.renderIdTypeSelect(wrapper);\r\n break;\r\n case \"id_input\":\r\n this.renderIdInput(wrapper);\r\n break;\r\n case \"confirm_identity\":\r\n this.renderConfirmIdentity(wrapper);\r\n break;\r\n case \"document_capture\":\r\n this.renderDocumentCapture(wrapper);\r\n break;\r\n case \"ocr_gate\":\r\n this.renderOcrGate(wrapper);\r\n break;\r\n case \"document_confirm\":\r\n this.renderDocumentConfirm(wrapper);\r\n break;\r\n case \"processing\":\r\n // C1: processing step is dead code \u00E2\u20AC\u201D flow now goes to 'done' after submit\r\n break;\r\n case \"liveness\":\r\n this.renderLiveness(wrapper);\r\n break;\r\n case \"done\":\r\n this.renderDone(wrapper);\r\n break;\r\n case \"result\":\r\n // C2: result step is dead code \u00E2\u20AC\u201D showResult/renderResult removed\r\n break;\r\n case \"error\":\r\n break;\r\n }\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"translateX(0)\";\r\n });\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Loading \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderLoading(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;gap:16px;\";\r\n\r\n const spinnerWrap = document.createElement(\"div\");\r\n spinnerWrap.style.cssText = \"position:relative;width:60px;height:60px;flex-shrink:0;\";\r\n\r\n const ring = document.createElement(\"div\");\r\n ring.style.cssText = `\r\n position:absolute;inset:0;border-radius:50%;\r\n border:3px solid ${this.theme.border};\r\n border-top-color:${this.theme.primary};\r\n animation:sc-spin 0.9s linear infinite;\r\n `;\r\n const centre = document.createElement(\"div\");\r\n centre.style.cssText = `\r\n position:absolute;inset:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:22px;\r\n `;\r\n centre.textContent = \"\\uD83D\\uDEE1\\uFE0F\";\r\n spinnerWrap.appendChild(ring);\r\n spinnerWrap.appendChild(centre);\r\n container.appendChild(spinnerWrap);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${this.theme.text};font-size:15px;font-weight:600;`;\r\n label.textContent = \"Setting up secure session\";\r\n container.appendChild(label);\r\n\r\n const sub = document.createElement(\"div\");\r\n sub.style.cssText = `color:${this.theme.textMuted};font-size:12px;text-align:center;max-width:220px;line-height:1.5;`;\r\n sub.textContent = \"Connecting to the verification service...\";\r\n container.appendChild(sub);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Welcome \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderWelcome(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;\";\r\n\r\n const isDocFlow = this.isDocumentFlow();\r\n\r\n // Icon + badge row (side by side to save vertical space)\r\n const topRow = document.createElement(\"div\");\r\n topRow.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:8px;\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:50px;height:50px;border-radius:14px;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:22px;\r\n background:linear-gradient(135deg,${this.theme.primary}22,${this.theme.primaryGlow});\r\n border:1.5px solid ${this.theme.primary}33;\r\n `;\r\n iconWrap.textContent = isDocFlow ? \"\u00F0\u0178\u00AA\u00AA\" : \"\u00F0\u0178\u203A\u00A1\u00EF\u00B8\u008F\";\r\n topRow.appendChild(iconWrap);\r\n\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:999px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n background:${this.theme.primary}15;\r\n color:${this.theme.primary};\r\n border:1px solid ${this.theme.primary}30;\r\n `;\r\n badge.textContent = isDocFlow ? \"\u00F0\u0178\u201C\u201E Document Verification\" : \"\u00F0\u0178\u201D\u008D Data Verification\";\r\n topRow.appendChild(badge);\r\n container.appendChild(topRow);\r\n\r\n // Title + subtitle (compact)\r\n const titleWrap = document.createElement(\"div\");\r\n titleWrap.style.cssText = \"display:flex;flex-direction:column;gap:5px;\";\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `\r\n color:${this.theme.text};font-size:20px;font-weight:700;\r\n margin:0;line-height:1.2;\r\n `;\r\n // W2: Use client brand name in title\r\n const brandName = this.sdkConfig?.brand_name;\r\n title.textContent = brandName\r\n ? `${brandName} Identity Verification`\r\n : \"Verify Your Identity\";\r\n titleWrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `\r\n color:${this.theme.textSecondary};font-size:13px;line-height:1.5;\r\n margin:0;max-width:300px;\r\n `;\r\n desc.textContent = isDocFlow\r\n ? \"You'll need your document and camera access. This takes about 2 minutes.\"\r\n : \"You'll need your ID number and camera access. This takes about 2 minutes.\";\r\n titleWrap.appendChild(desc);\r\n container.appendChild(titleWrap);\r\n\r\n // Steps preview \u00E2\u20AC\u201D compact rows\r\n const steps = isDocFlow\r\n ? [\r\n { icon: \"\u00F0\u0178\u00AA\u00AA\", text: \"Choose your document type\", sub: \"Passport, National ID, Driver License\" },\r\n { icon: \"\u00F0\u0178\u201C\u00B7\", text: \"Scan your document\", sub: \"Upload or capture a photo of your ID\" },\r\n { icon: \"\u00F0\u0178\u00A4\u00B3\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : [\r\n { icon: \"\u00F0\u0178\u2020\u201D\", text: \"Choose your ID type\", sub: \"NIN, BVN, Voter's Card and more\" },\r\n { icon: \"\u00F0\u0178\u201C\u009D\", text: \"Enter your ID details\", sub: \"Exactly as shown on your ID\" },\r\n { icon: \"\u00F0\u0178\u00A4\u00B3\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ];\r\n\r\n const stepsWrap = document.createElement(\"div\");\r\n stepsWrap.style.cssText = `\r\n width:100%;display:flex;flex-direction:column;gap:0;\r\n border-radius:12px;overflow:hidden;\r\n border:1.5px solid ${this.theme.border};\r\n `;\r\n\r\n steps.forEach((step, i) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `\r\n display:flex;align-items:center;gap:12px;\r\n padding:8px 14px;\r\n background:${this.theme.cardBg};\r\n ${i < steps.length - 1 ? `border-bottom:1px solid ${this.theme.border};` : \"\"}\r\n `;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:28px;height:28px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;\r\n background:${this.theme.primary}12;\r\n border:1px solid ${this.theme.primary}20;\r\n `;\r\n iconEl.textContent = step.icon;\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"display:flex;flex-direction:column;gap:1px;text-align:left;\";\r\n\r\n const textEl = document.createElement(\"span\");\r\n textEl.style.cssText = `color:${this.theme.text};font-size:12.5px;font-weight:600;`;\r\n textEl.textContent = step.text;\r\n\r\n const subEl = document.createElement(\"span\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:10.5px;`;\r\n subEl.textContent = step.sub;\r\n\r\n textWrap.appendChild(textEl);\r\n textWrap.appendChild(subEl);\r\n row.appendChild(iconEl);\r\n row.appendChild(textWrap);\r\n stepsWrap.appendChild(row);\r\n });\r\n\r\n container.appendChild(stepsWrap);\r\n\r\n // CTA\r\n const btn = this.createPrimaryButton(\"Get Started \u00E2\u2020\u2019\");\r\n btn.style.cssText += \"margin-top:2px;\";\r\n btn.addEventListener(\"click\", () => this.showStep(\"country\"));\r\n container.appendChild(btn);\r\n\r\n // Trust badge \u00E2\u20AC\u201D \"Powered by Adhere\" already lives in the persistent\r\n // modal footer below; repeating it here just cost vertical space.\r\n const trust = document.createElement(\"div\");\r\n trust.style.cssText = `\r\n display:flex;align-items:center;gap:6px;\r\n color:${this.theme.textMuted};font-size:10.5px;\r\n `;\r\n trust.textContent = \"\u00F0\u0178\u201D\u2019 End-to-end encrypted\";\r\n container.appendChild(trust);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Country Select \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderCountrySelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const countries = Object.keys(channels);\r\n\r\n // Auto-skip country selection if only one country available\r\n if (countries.length === 1) {\r\n this.selectedCountry = countries[0];\r\n this.showStep(\"id_type\");\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Select your country\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Choose the country that issued your ID\";\r\n container.appendChild(subtitle);\r\n\r\n for (const country of countries) {\r\n const card = this.createOptionCard(\r\n COUNTRY_LABELS[country] || country,\r\n `${channels[country].length} ID type${channels[country].length > 1 ? \"s\" : \"\"} available`,\r\n () => {\r\n this.selectedCountry = country;\r\n this.showStep(\"id_type\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC ID Type Select \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderIdTypeSelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const globalDocFlow = this.isDocumentFlow();\r\n\r\n const title = this.createStepTitle(globalDocFlow ? \"Select document type\" : \"Select ID type\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = globalDocFlow\r\n ? \"Choose the document you want to scan\"\r\n : \"Choose the ID you want to verify\";\r\n container.appendChild(subtitle);\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const idTypes = channels[this.selectedCountry] || [];\r\n\r\n for (const idType of idTypes) {\r\n const typeName = typeof idType === \"string\" ? idType : idType.name;\r\n // Use code (canonical) for API calls, fallback to name for backward compatibility\r\n const typeCode = typeof idType === \"string\" ? idType : (idType.code || idType.name);\r\n // Detect per-channel: does THIS specific channel have upload fields?\r\n const channelFields: any[] = typeof idType !== \"string\" ? (idType.fields || []) : [];\r\n const isThisDocFlow = channelFields.some((f: any) => isUploadFieldType(f.type)) || globalDocFlow;\r\n const info = resolveIdTypeInfo(typeName, isThisDocFlow);\r\n\r\n // Prefer the backend-provided back-side flag; fall back to local heuristics only when absent.\r\n const requiresBackFromBackend =\r\n typeof idType !== \"string\" ? (idType as SDKChannel).requires_back_side : undefined;\r\n const requiresBack = requiresBackFromBackend ?? info.requiresBack;\r\n\r\n // Add back side indicator to subtitle if needed\r\n let subtitle = info.desc;\r\n if (requiresBack && isThisDocFlow) {\r\n subtitle += \" \u00E2\u0161\u00A0\u00EF\u00B8\u008F Both sides required\";\r\n }\r\n\r\n // Clean display name \u00E2\u20AC\u201D strip \"with face\", \"(NIN)\", \"(BVN)\" from user-visible label\r\n const displayName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const card = this.createOptionCard(\r\n `${info.icon} ${displayName}`,\r\n subtitle,\r\n () => {\r\n const idTypeChanged = this.selectedIdType !== typeCode;\r\n this.selectedIdType = typeCode; // Store canonical code for API\r\n this.selectedIdTypeName = typeName; // Keep display name for UI\r\n this.selectedRequiresBack = requiresBack;\r\n // Always reset first to avoid stale state when user goes back and changes selection\r\n this.selectedChannelId = 0;\r\n this.selectedChannelFields = [];\r\n this.collectedFields = {};\r\n // Only discard an in-flight liveness/doc capture if the user actually changed ID type\r\n if (idTypeChanged) {\r\n this.livenessEntryId = null;\r\n this.documentBlob = null;\r\n this.documentBackBlob = null;\r\n }\r\n if (typeof idType !== \"string\") {\r\n this.selectedChannelId = idType.id;\r\n this.selectedChannelFields = idType.fields || []; // guard null/undefined from backend\r\n }\r\n // Route: use explicit verification_type when set (more reliable than inspecting all channels)\r\n // Fallback to per-channel upload field check for mixed / unconfigured setups\r\n const hasUpload = (this.selectedChannelFields).some((f: any) => isUploadFieldType(f.type));\r\n const vType = this.sdkConfig?.verification_type;\r\n const vTypes: string[] = vType ? (Array.isArray(vType) ? vType : [vType]) : [];\r\n const isDocChannel = hasUpload || (vTypes.length > 0 && vTypes.includes(\"document_verification\"));\r\n this.showStep(isDocChannel ? \"document_capture\" : \"id_input\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC ID Input (data verification \u00E2\u20AC\u201D dynamic fields) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderIdInput(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const dataFields = this.selectedChannelFields.filter((f) => f.type !== \"upload\");\r\n const info = resolveIdTypeInfo(this.selectedIdTypeName || this.selectedIdType, false);\r\n const cleanStepTitle = (this.selectedIdTypeName || this.selectedIdType)\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`${info.icon} ${cleanStepTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = dataFields.length > 0\r\n ? `Enter your ${this.selectedIdTypeName || this.selectedIdType} details exactly as they appear on your ID.`\r\n : \"Fill in the fields below to continue.\";\r\n container.appendChild(subtitle);\r\n\r\n // Edge case: no data fields configured \u00E2\u20AC\u201D show fallback and allow submission\r\n if (dataFields.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.style.cssText = `\r\n padding:16px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n color:${this.theme.textSecondary};font-size:13px;text-align:center;\r\n `;\r\n empty.textContent = \"No additional details required. Click below to continue.\";\r\n container.appendChild(empty);\r\n const autoBtn = this.createPrimaryButton(\"Continue\");\r\n autoBtn.addEventListener(\"click\", () => this.showStep(\"liveness\"));\r\n container.appendChild(autoBtn);\r\n return;\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Field format rules \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // Keyed by uppercased label substring \u00E2\u2020\u2019 { minLen, maxLen, numeric, pattern, hint }\r\n interface FieldRule {\r\n minLen?: number;\r\n maxLen?: number;\r\n numeric?: boolean; // only digits allowed\r\n alphanumeric?: boolean; // letters + digits only\r\n pattern?: RegExp;\r\n hint: string;\r\n }\r\n const _FIELD_RULES: Array<{ match: string; rule: FieldRule }> = [\r\n { match: \"BVN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"BVN must be exactly 11 digits\" } },\r\n { match: \"NIN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"NATIONAL IDENTITY\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"PASSPORT\", rule: { minLen: 6, maxLen: 20, alphanumeric: true, hint: \"Passport number must be 6\u00E2\u20AC\u201C20 alphanumeric characters\" } },\r\n { match: \"DRIVER\", rule: { minLen: 3, maxLen: 30, alphanumeric: true, hint: \"Licence number must be 3\u00E2\u20AC\u201C30 alphanumeric characters\" } },\r\n { match: \"VOTER\", rule: { minLen: 6, maxLen: 30, alphanumeric: true, hint: \"Voter ID must be 6\u00E2\u20AC\u201C30 alphanumeric characters\" } },\r\n { match: \"GHANA\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"Ghana Card number must be 8\u00E2\u20AC\u201C20 alphanumeric characters\" } },\r\n { match: \"SSNIT\", rule: { minLen: 7, maxLen: 15, alphanumeric: true, hint: \"SSNIT number must be 7\u00E2\u20AC\u201C15 alphanumeric characters\" } },\r\n { match: \"TIN\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"TIN must be 8\u00E2\u20AC\u201C20 characters\" } },\r\n { match: \"KRA\", rule: { minLen: 10, maxLen: 12, alphanumeric: true, hint: \"KRA PIN must be 10\u00E2\u20AC\u201C12 characters\" } },\r\n ];\r\n\r\n function getFieldRule(label: string): FieldRule | null {\r\n const upper = label.toUpperCase();\r\n for (const entry of _FIELD_RULES) {\r\n if (upper.includes(entry.match)) return entry.rule;\r\n }\r\n return null;\r\n }\r\n\r\n function validateFieldValue(label: string, value: string): string | null {\r\n const rule = getFieldRule(label);\r\n if (!rule) return null; // no rule = no validation\r\n const v = value.trim();\r\n if (rule.numeric && !/^\\d+$/.test(v)) return `${label} must contain digits only`;\r\n if (rule.alphanumeric && !/^[A-Za-z0-9]+$/.test(v)) return `${label} must be alphanumeric (letters and digits only)`;\r\n if (rule.minLen && v.length < rule.minLen) return rule.hint;\r\n if (rule.maxLen && v.length > rule.maxLen) return rule.hint;\r\n return null;\r\n }\r\n\r\n // Track input elements for validation\r\n const inputEls: { field: any; el: HTMLInputElement | HTMLSelectElement }[] = [];\r\n\r\n for (const field of dataFields) {\r\n // Send the raw label as the payload key \u00E2\u20AC\u201D the backend's\r\n // _SDK_FIELD_KEY_MAP looks up the exact label text (e.g. \"National ID\",\r\n // \"CAC Number\") to remap it to the canonical IVS key. Pre-normalizing\r\n // it here (as this used to do) produced keys like \"national_id\" that\r\n // don't match the map's literal-label entries and silently fall\r\n // through to the wrong key for several identity types.\r\n const fieldKey = field.label;\r\n\r\n const fieldWrap = document.createElement(\"div\");\r\n fieldWrap.style.cssText = \"display:flex;flex-direction:column;gap:6px;\";\r\n\r\n const labelId = `sc-field-label-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const label = document.createElement(\"label\");\r\n label.id = labelId;\r\n label.htmlFor = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n label.style.cssText = `color:${this.theme.textMuted};font-size:10px;font-weight:700;letter-spacing:0.6px;text-transform:uppercase;`;\r\n label.textContent = field.label;\r\n fieldWrap.appendChild(label);\r\n\r\n if (field.type === \"dropdown\" || field.type === \"select\") {\r\n // Dropdown field\r\n const select = document.createElement(\"select\");\r\n select.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:12px;\r\n font-size:15px;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;box-sizing:border-box;\r\n cursor:pointer;transition:border-color 0.2s ease;\r\n `;\r\n const placeholder = document.createElement(\"option\");\r\n placeholder.value = \"\";\r\n placeholder.textContent = `Select ${field.label}`;\r\n placeholder.disabled = true;\r\n placeholder.selected = true;\r\n select.appendChild(placeholder);\r\n\r\n for (const opt of field.options || []) {\r\n const option = document.createElement(\"option\");\r\n option.value = opt;\r\n option.textContent = opt;\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"focus\", () => { select.style.borderColor = this.theme.primary; });\r\n select.addEventListener(\"blur\", () => { select.style.borderColor = this.theme.border; });\r\n select.addEventListener(\"change\", () => {\r\n this.collectedFields[fieldKey] = select.value;\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(select);\r\n inputEls.push({ field, el: select });\r\n } else if (field.type === \"image\" || field.type === \"file\") {\r\n // File upload field \u00E2\u20AC\u201D converts to base64 for API submission\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/*\";\r\n fileInput.style.cssText = `\r\n width:100%;padding:12px 16px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px dashed ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;cursor:pointer;\r\n `;\r\n fileInput.addEventListener(\"focus\", () => {\r\n fileInput.style.borderColor = this.theme.primary;\r\n });\r\n fileInput.addEventListener(\"blur\", () => {\r\n fileInput.style.borderColor = this.theme.border;\r\n });\r\n fileInput.addEventListener(\"change\", () => {\r\n const file = fileInput.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const base64 = (reader.result as string).split(\",\")[1] || \"\";\r\n this.collectedFields[fieldKey] = base64;\r\n updateSubmitState();\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n });\r\n fieldWrap.appendChild(fileInput);\r\n inputEls.push({ field, el: fileInput as any });\r\n } else {\r\n // Text input field\r\n const inputId = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const hintId = `sc-field-hint-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const rule = getFieldRule(field.label);\r\n\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.id = inputId;\r\n input.setAttribute(\"aria-labelledby\", labelId);\r\n input.setAttribute(\"aria-describedby\", hintId);\r\n input.placeholder = `Enter ${field.label}`;\r\n input.maxLength = rule?.maxLen ? rule.maxLen + 2 : 50;\r\n if (rule?.numeric) input.inputMode = \"numeric\";\r\n input.style.cssText = `\r\n width:100%;padding:14px 16px;border-radius:12px;\r\n font-size:16px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;\r\n letter-spacing:0.5px;\r\n `;\r\n\r\n // Inline hint/error element\r\n const hintEl = document.createElement(\"div\");\r\n hintEl.id = hintId;\r\n hintEl.setAttribute(\"aria-live\", \"polite\");\r\n hintEl.style.cssText = `font-size:11px;min-height:14px;margin-top:-2px;`;\r\n if (rule) {\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule.hint;\r\n }\r\n\r\n input.addEventListener(\"focus\", () => {\r\n input.style.borderColor = this.theme.primary;\r\n });\r\n input.addEventListener(\"blur\", () => {\r\n const v = input.value.trim();\r\n if (v) {\r\n const err = validateFieldValue(field.label, v);\r\n if (err) {\r\n input.style.borderColor = this.theme.error;\r\n hintEl.style.color = this.theme.error;\r\n hintEl.textContent = err;\r\n input.setAttribute(\"aria-invalid\", \"true\");\r\n } else {\r\n input.style.borderColor = this.theme.success || this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.setAttribute(\"aria-invalid\", \"false\");\r\n }\r\n } else {\r\n input.style.borderColor = this.theme.border;\r\n }\r\n });\r\n input.addEventListener(\"input\", () => {\r\n // Reset error styling while typing\r\n input.style.borderColor = this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.removeAttribute(\"aria-invalid\");\r\n this.collectedFields[fieldKey] = input.value.trim();\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(input);\r\n fieldWrap.appendChild(hintEl);\r\n inputEls.push({ field, el: input });\r\n }\r\n container.appendChild(fieldWrap);\r\n }\r\n\r\n // Error area\r\n const errorEl = document.createElement(\"div\");\r\n errorEl.id = \"sc-id-error\";\r\n errorEl.style.cssText = `\r\n color:${this.theme.error};font-size:13px;display:none;\r\n padding:8px 12px;border-radius:8px;background:${this.theme.errorBg};\r\n `;\r\n container.appendChild(errorEl);\r\n\r\n // Submit\r\n const submitBtn = this.createPrimaryButton(\"Verify & Continue\");\r\n submitBtn.disabled = true;\r\n submitBtn.style.opacity = \"0.5\";\r\n\r\n const updateSubmitState = () => {\r\n // All inputs must have a value AND pass format validation\r\n const allFilled = inputEls.every(({ el }) => el.value.trim().length > 0);\r\n const allValid = inputEls.every(({ field, el }) => {\r\n if (el.tagName === \"SELECT\") return el.value.trim().length > 0;\r\n return !validateFieldValue(field.label, el.value.trim());\r\n });\r\n const ok = allFilled && allValid;\r\n submitBtn.disabled = !ok;\r\n submitBtn.style.opacity = ok ? \"1\" : \"0.5\";\r\n };\r\n\r\n submitBtn.addEventListener(\"click\", async () => {\r\n submitBtn.disabled = true;\r\n submitBtn.innerHTML = `<span style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;\"><span style=\"width:13px;height:13px;border-radius:50%;border:2px solid rgba(255,255,255,0.3);border-top-color:#fff;animation:sc-spin 0.6s linear infinite;display:inline-block;flex-shrink:0;\"></span>Verifying...</span>`;\r\n errorEl.style.display = \"none\";\r\n\r\n try {\r\n this.verificationResult = await this.sdk.onboarding.verify({\r\n identity_type_id: this.selectedChannelId,\r\n fields: { ...this.collectedFields },\r\n });\r\n\r\n if (this.verificationResult.status === \"success\") {\r\n // Save identifier and identity_check_id for liveness step\r\n const fieldValues = Object.values(this.collectedFields);\r\n this.idNumber = fieldValues[0] || \"\";\r\n this.identityCheckId = (this.verificationResult as any).data?.identity_check_id || null;\r\n\r\n // W3: Store name + gender from IVS result for confirmation screen\r\n const d = (this.verificationResult as any).data || {};\r\n const nd = d.normalized_data || d.data || d;\r\n this._ivsName = [nd.first_name || nd.firstname || \"\", nd.last_name || nd.lastname || nd.surname || \"\"]\r\n .map(s => String(s || \"\").trim()).filter(Boolean).join(\" \");\r\n this._ivsGender = nd.gender || \"\";\r\n\r\n // W4: If IVS returned no name, there is nothing for the user to confirm \u00E2\u20AC\u201D\r\n // auto-proceed straight to Stage 2 (liveness) instead of showing a\r\n // confirmation screen with no identity details to check.\r\n if (!this._ivsName) {\r\n this.showStep(\"liveness\");\r\n return;\r\n }\r\n\r\n // Route to confirmation screen \u00E2\u20AC\u201D user must confirm before liveness\r\n this.showStep(\"confirm_identity\");\r\n } else {\r\n errorEl.textContent = this.verificationResult.message || \"We could not verify your details. Please check and try again.\";\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n } catch (err: any) {\r\n // Show a single plain-language error \u00E2\u20AC\u201D never raw field:message format\r\n const fieldErrors = err.data?.errors;\r\n if (Array.isArray(fieldErrors) && fieldErrors.length > 0) {\r\n // Pick the first meaningful error message \u00E2\u20AC\u201D strip field prefix\r\n const firstMsg = fieldErrors[0]?.message || fieldErrors[0]?.detail || \"\";\r\n errorEl.textContent = _sanitizeUserMessage(firstMsg)\r\n || \"Please check your details and try again.\";\r\n } else if (err.code === \"VERIFICATION_FAILED\") {\r\n errorEl.textContent = \"We could not verify those details. Please check your ID number and try again.\";\r\n } else if (err.code === \"CHANNEL_NOT_CONFIGURED\") {\r\n errorEl.textContent = \"This ID type is not currently available. Please choose a different option.\";\r\n } else if (err.code === \"INSUFFICIENT_BALANCE\") {\r\n errorEl.textContent = \"Verification is temporarily unavailable. Please contact support.\";\r\n } else {\r\n errorEl.textContent = _sanitizeUserMessage(err.message)\r\n || \"Something went wrong. Please try again.\";\r\n }\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n });\r\n container.appendChild(submitBtn);\r\n\r\n\r\n // Focus first input\r\n const firstInput = inputEls[0]?.el;\r\n if (firstInput && firstInput instanceof HTMLInputElement) {\r\n setTimeout(() => firstInput.focus(), 350);\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Document Capture \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n \r\n private renderDocumentCapture(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // Strip \"with face\", \"(NIN)\", \"(BVN)\" noise from the user-visible title\r\n const rawName = this.selectedIdTypeName || this.selectedIdType || \"your document\";\r\n const cleanDocTitle = rawName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`Capture ${cleanDocTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Upload or capture your document photo. Ensure it's clear and readable.\";\r\n container.appendChild(subtitle);\r\n\r\n const captureContainer = document.createElement(\"div\");\r\n captureContainer.style.cssText = `\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n position: relative;\r\n overflow: hidden;\r\n border-radius: 12px;\r\n background: ${this.theme.cardBg};\r\n border: 2px solid ${this.theme.border};\r\n `;\r\n container.appendChild(captureContainer);\r\n\r\n // Use the new DocumentCapture component with front/back support\r\n this.docCapture = new DocumentCapture();\r\n this.docCapture\r\n .capture(\r\n captureContainer,\r\n this.theme,\r\n this.selectedIdTypeName || this.selectedIdType,\r\n this.selectedRequiresBack\r\n )\r\n .then(async (result: DocumentCaptureResult) => {\r\n await this.processDocumentCaptureResult(result, captureContainer, container);\r\n })\r\n .catch((err: any) => {\r\n console.error(\"Document capture failed:\", err);\r\n this.showErrorStep(err.message || \"Document capture failed. Please try again.\");\r\n });\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W3: Identity Confirmation (data verification) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderConfirmIdentity(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit before showing screen\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera silently while user reads this screen\r\n this._prewarmCamera();\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n iconWrap.textContent = \"\u00F0\u0178\u203A\u00A1\u00EF\u00B8\u008F\";\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = this._ivsName ? `Is this you?` : \"Identity Confirmed\";\r\n container.appendChild(title);\r\n\r\n if (this._ivsName) {\r\n // Profile card\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const rows: { label: string; value: string }[] = [\r\n { label: \"Name\", value: this._ivsName },\r\n ];\r\n if (this._ivsGender) {\r\n const gLabel = this._ivsGender.toLowerCase();\r\n rows.push({ label: \"Gender\", value: gLabel === \"m\" || gLabel === \"male\" || gLabel === \"1\" ? \"Male\" : gLabel === \"f\" || gLabel === \"female\" || gLabel === \"2\" ? \"Female\" : this._ivsGender });\r\n }\r\n rows.push({ label: \"ID Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName || this.selectedIdType });\r\n\r\n rows.forEach(({ label, value }) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n container.appendChild(card);\r\n } else {\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n sub.textContent = \"Your details have been confirmed. Please continue to the face check.\";\r\n container.appendChild(sub);\r\n }\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, that's me \u00E2\u20AC\u201D continue\");\r\n yesBtn.addEventListener(\"click\", () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, use a different ID\");\r\n noBtn.addEventListener(\"click\", () => {\r\n this._confirmRetries++;\r\n this._ivsName = \"\";\r\n this._ivsGender = \"\";\r\n this.identityCheckId = null;\r\n this.verificationResult = null;\r\n this.showStep(\"id_input\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W4: Document Confirmation (document verification) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderDocumentConfirm(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera while user reads\r\n this._prewarmCamera();\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n iconWrap.textContent = \"\u00F0\u0178\u201C\u201E\";\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = \"Are these your details?\";\r\n container.appendChild(title);\r\n\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.5;`;\r\n sub.textContent = \"We read the following from your document. Please confirm they are correct before continuing.\";\r\n container.appendChild(sub);\r\n\r\n // Document face thumbnail if available\r\n if (this._ocrFaceImageUrl) {\r\n const faceWrap = document.createElement(\"div\");\r\n faceWrap.style.cssText = `width:80px;height:80px;border-radius:50%;overflow:hidden;border:3px solid ${this.theme.primary};flex-shrink:0;margin:0 auto;`;\r\n const faceImg = document.createElement(\"img\");\r\n faceImg.src = this._ocrFaceImageUrl;\r\n faceImg.alt = \"Photo from your document\";\r\n faceImg.style.cssText = \"width:100%;height:100%;object-fit:cover;\";\r\n faceWrap.appendChild(faceImg);\r\n container.appendChild(faceWrap);\r\n }\r\n\r\n // Expiry soon warning\r\n if (this._ocrExpirySoon && !this._ocrIsExpired) {\r\n const warn = document.createElement(\"div\");\r\n warn.style.cssText = `width:100%;padding:10px 14px;border-radius:10px;background:${this.theme.warning}18;border:1px solid ${this.theme.warning}40;color:${this.theme.warning};font-size:12px;text-align:left;line-height:1.5;`;\r\n warn.textContent = \"\u00E2\u0161\u00A0\u00EF\u00B8\u008F Your document expires soon. Some services may not accept it, but you can still continue.\";\r\n container.appendChild(warn);\r\n }\r\n\r\n // Details card \u00E2\u20AC\u201D show whatever OCR returned, never block on missing fields\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:14px 16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const docRows: { label: string; value: string }[] = [];\r\n if (this._ocrName) docRows.push({ label: \"Name\", value: this._ocrName });\r\n if (this._ocrDocNumber) docRows.push({ label: \"Document No\", value: this._ocrDocNumber });\r\n if (this._ocrExpiry) docRows.push({ label: \"Expires\", value: this._ocrExpiry });\r\n docRows.push({ label: \"Document Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName });\r\n\r\n if (docRows.length === 0) {\r\n const fallback = document.createElement(\"div\");\r\n fallback.style.cssText = `color:${this.theme.textSecondary};font-size:12px;`;\r\n fallback.textContent = \"Document scanned successfully.\";\r\n card.appendChild(fallback);\r\n } else {\r\n docRows.forEach(({ label, value }) => {\r\n if (!value) return;\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n }\r\n container.appendChild(card);\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, continue\");\r\n yesBtn.addEventListener(\"click\", () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, retake document\");\r\n noBtn.addEventListener(\"click\", () => {\r\n this._confirmRetries++;\r\n this._ocrName = \"\"; this._ocrDocNumber = \"\"; this._ocrExpiry = \"\";\r\n this._ocrFaceImageUrl = \"\"; this._ocrIsExpired = false; this._ocrExpirySoon = false;\r\n this.livenessEntryId = null;\r\n this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W6+W7+W8: OCR Gate (document verification) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderOcrGate(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:14px;padding:20px 0;text-align:center;\";\r\n\r\n const spinnerWrap = document.createElement(\"div\");\r\n spinnerWrap.style.cssText = \"position:relative;width:52px;height:52px;flex-shrink:0;\";\r\n const ring = document.createElement(\"div\");\r\n ring.style.cssText = `position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.9s linear infinite;`;\r\n const centre = document.createElement(\"div\");\r\n centre.style.cssText = \"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\";\r\n centre.textContent = \"\u00F0\u0178\u201C\u201E\";\r\n spinnerWrap.appendChild(ring);\r\n spinnerWrap.appendChild(centre);\r\n container.appendChild(spinnerWrap);\r\n\r\n const statusEl = document.createElement(\"div\");\r\n statusEl.setAttribute(\"aria-live\", \"polite\");\r\n statusEl.style.cssText = `color:${this.theme.text};font-size:15px;font-weight:600;`;\r\n statusEl.textContent = \"Reading your document\u00E2\u20AC\u00A6\";\r\n container.appendChild(statusEl);\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textSecondary};font-size:12px;max-width:260px;line-height:1.5;`;\r\n subEl.textContent = \"This usually takes 5\u00E2\u20AC\u201C15 seconds. Please wait.\";\r\n container.appendChild(subEl);\r\n\r\n if (!this.livenessEntryId) {\r\n this.showErrorStep(\"Document upload failed. Please try again.\");\r\n return;\r\n }\r\n\r\n const entryId = this.livenessEntryId;\r\n const MAX_POLLS = 10; // 10 \u00C3\u2014 2s = 20s timeout\r\n let polls = 0;\r\n\r\n const poll = async () => {\r\n if (this.isDestroyed) return;\r\n polls++;\r\n try {\r\n const result = await this.sdk.liveness.pollResult(entryId) as any;\r\n\r\n // W7: Expired document \u00E2\u20AC\u201D stop, do not proceed to liveness\r\n if (result.is_expired === true) {\r\n container.innerHTML = \"\";\r\n this._renderExpiredDocument(container);\r\n return;\r\n }\r\n\r\n // W8: OCR quality fail \u00E2\u20AC\u201D offer retake\r\n if (result.ocr_quality_failed === true) {\r\n container.innerHTML = \"\";\r\n this._renderOcrQualityFail(container, result.ocr_rejection_reason);\r\n return;\r\n }\r\n\r\n // OCR complete \u00E2\u20AC\u201D store data and show confirmation screen\r\n const ocrDone = result.ocr_status === \"done\" || result.ocr_status === \"ocr_complete\"\r\n || result.ocr_name || result.ocr_document_number || result.ocr_expiry_date;\r\n\r\n if (ocrDone) {\r\n this._ocrName = result.ocr_name || \"\";\r\n this._ocrDocNumber = result.ocr_document_number || \"\";\r\n this._ocrExpiry = result.ocr_expiry_date || \"\";\r\n this._ocrFaceImageUrl = result.ocr_face_image_url || \"\";\r\n this._ocrIsExpired = result.is_expired === true;\r\n\r\n // B8: Normalise expiry date string before parsing \u00E2\u20AC\u201D OCR may return\r\n // DD/MM/YYYY, DD-MM-YYYY, YYYY-MM-DD, or \"12 May 2029\" etc.\r\n // new Date() alone is locale-dependent on non-ISO strings.\r\n if (this._ocrExpiry) {\r\n const expDate = _parseOcrDate(this._ocrExpiry);\r\n if (expDate) {\r\n const sixMonths = new Date();\r\n sixMonths.setMonth(sixMonths.getMonth() + 6);\r\n this._ocrExpirySoon = expDate <= sixMonths && expDate > new Date();\r\n }\r\n }\r\n\r\n this.showStep(\"document_confirm\");\r\n return;\r\n }\r\n\r\n // Still pending \u00E2\u20AC\u201D keep polling\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 2000);\r\n } else if (!this.isDestroyed) {\r\n // Timeout \u00E2\u20AC\u201D proceed anyway with whatever we have\r\n statusEl.textContent = \"Taking longer than usual\u00E2\u20AC\u00A6\";\r\n subEl.textContent = \"We'll continue \u00E2\u20AC\u201D you can confirm your details on the next screen.\";\r\n this._ocrPollTimer = setTimeout(() => {\r\n if (!this.isDestroyed) this.showStep(\"document_confirm\");\r\n }, 2000);\r\n }\r\n } catch {\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n } else if (!this.isDestroyed) {\r\n this.showErrorStep(\"We could not read your document. Please check your connection and try again.\");\r\n }\r\n }\r\n };\r\n\r\n // First poll after 3s \u00E2\u20AC\u201D give OCR submission time to start\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n }\r\n\r\n private _renderExpiredDocument(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"\u00F0\u0178\u201C\u2026\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n t.textContent = \"Document Expired\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Try a different document\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n const endBtn = this.createSecondaryButton(\"End session\");\r\n endBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Document expired\")); this.close(); });\r\n container.appendChild(endBtn);\r\n }\r\n\r\n private _renderOcrQualityFail(container: HTMLElement, reason?: string): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"\u00F0\u0178\u201D\u008D\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n t.textContent = \"Document Photo Unclear\";\r\n container.appendChild(t);\r\n const msg = reason === \"image_too_blurry\" ? \"Your document photo is too blurry. Please retake it in good lighting with a steady hand.\"\r\n : reason === \"image_too_dark\" ? \"Your document photo is too dark. Please retake it in better lighting.\"\r\n : reason === \"image_too_bright\" ? \"Your document photo has too much glare. Please reduce reflections and retake.\"\r\n : reason === \"document_not_detected\" ? \"We could not detect a document in the photo. Please ensure the full ID is visible.\"\r\n : \"We could not read your document clearly. Please retake the photo in good lighting with no glare.\";\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = msg;\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Retake photo\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W11: You're all done (end-user final screen) \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderDone(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:24px 0;\";\r\n container.setAttribute(\"role\", \"status\");\r\n\r\n // B7: Fire onComplete immediately when the done screen renders \u00E2\u20AC\u201D the end\r\n // user has completed their part regardless of whether they click Close.\r\n // Firing here means the integrator always gets the event even if the user\r\n // closes the modal via the \u00E2\u0153\u2022 button instead of the Close button.\r\n this.options.onComplete?.({\r\n entryId: this.livenessEntryId || 0,\r\n sessionId: this.sdk.sessionToken,\r\n status: \"processing\",\r\n submittedAt: new Date().toISOString(),\r\n verificationResult: this.verificationResult || undefined,\r\n });\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:80px;height:80px;border-radius:50%;background:${this.theme.successBg};border:3px solid ${this.theme.success};display:flex;align-items:center;justify-content:center;font-size:36px;font-weight:700;color:${this.theme.success};animation:sc-pop 0.4s ease;`;\r\n iconWrap.textContent = \"\u00E2\u0153\u201C\";\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:22px;font-weight:700;margin:0;`;\r\n title.textContent = \"You're all done!\";\r\n container.appendChild(title);\r\n\r\n const brandName = this.sdkConfig?.brand_name || \"the service\";\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = `Your verification is complete. ${brandName} will review and be in touch shortly.`;\r\n container.appendChild(desc);\r\n\r\n // Subtle info line\r\n const info = document.createElement(\"div\");\r\n info.style.cssText = `color:${this.theme.textMuted};font-size:11px;display:flex;align-items:center;gap:4px;`;\r\n info.textContent = \"\u00F0\u0178\u201D\u2019 Your data is encrypted and secure\";\r\n container.appendChild(info);\r\n\r\n const doneBtn = this.createPrimaryButton(\"Close\");\r\n doneBtn.addEventListener(\"click\", () => {\r\n // onComplete already fired on render \u00E2\u20AC\u201D just close the modal\r\n this.close();\r\n });\r\n container.appendChild(doneBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W14: Retry limit reached \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private _renderRetryLimitReached(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:24px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"\u00E2\u0161\u00A0\u00EF\u00B8\u008F\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n t.textContent = \"Unable to Complete Verification\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"We were unable to complete your verification at this time. Please contact support or try again later.\";\r\n container.appendChild(d);\r\n const closeBtn = this.createPrimaryButton(\"Close\");\r\n closeBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Retry limit reached\")); this.close(); });\r\n container.appendChild(closeBtn);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC W13: Camera pre-warm \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private _prewarmCamera(): void {\r\n if (this._prewarmedStream || this.isDestroyed) return;\r\n navigator.mediaDevices?.getUserMedia?.({ video: { facingMode: \"user\" } })\r\n .then(stream => {\r\n if (this.isDestroyed) { stream.getTracks().forEach(t => t.stop()); return; }\r\n this._prewarmedStream = stream;\r\n })\r\n .catch(() => { /* silent \u00E2\u20AC\u201D pre-warm is best effort */ });\r\n }\r\n\r\n /**\r\n * Process document capture result with front/back support\r\n */\r\n private async processDocumentCaptureResult(\r\n result: DocumentCaptureResult,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n // B2+P2: Compress both images once here. Do NOT assign documentBlob twice\r\n // (old code set it to the raw blob first, then overwrote with compressed).\r\n // processDocumentBlob also ran _compressImage \u00E2\u20AC\u201D that second pass is removed\r\n // below so compression only happens once.\r\n this.documentBlob = await _compressImage(result.front, 1600, 0.85);\r\n this.documentBackBlob = result.back ? await _compressImage(result.back, 1600, 0.85) : null;\r\n\r\n // Process the front image \u00E2\u20AC\u201D pass the already-compressed blob\r\n await this.processDocumentBlob(this.documentBlob, captureContainer, container);\r\n }\r\n\r\n /**\r\n * Process document blob - common method for both CameraView and DocumentCapture\r\n */\r\n private async processDocumentBlob(\r\n blob: Blob,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n const maxRetries = 2;\r\n let retryCount = 0;\r\n\r\n const attemptProcessing = async (): Promise<void> => {\r\n try {\r\n // Validate blob \u00E2\u20AC\u201D compression already done in processDocumentCaptureResult (P2)\r\n if (!blob || blob.size === 0) {\r\n throw new Error(\"Failed to capture document. Please try again.\");\r\n }\r\n if (blob.size > 5 * 1024 * 1024) {\r\n throw new Error(\"Document image is too large. Please retake in better lighting or use a clearer photo.\");\r\n }\r\n\r\n this.documentBlob = blob;\r\n\r\n // Show scanning state\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 20px;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\u00F0\u0178\u201D\u008D</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Scanning document...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;text-align:center;max-width:200px;line-height:1.5;\">Running OCR and verifying your identity</div>\r\n </div>`;\r\n\r\n // Create liveness entry with document.\r\n // Use the first collected field value as identifier when available\r\n // (document flow has no data-verification step, so collectedFields is\r\n // empty \u00E2\u20AC\u201D fall back to the selected ID type code so the webhook\r\n // subject.identifier is at least human-meaningful, not a raw timestamp).\r\n const identifier = Object.values(this.collectedFields)[0]\r\n || this.idNumber\r\n || this.selectedIdType\r\n || `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n const deviceMeta = collectDeviceMetadata();\r\n let createResult;\r\n try {\r\n createResult = await this.sdk.liveness.create({\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n challenge_actions: [\"BLINK\", \"TURN_HEAD\", \"OPEN_MOUTH\"],\r\n document: blob,\r\n document_back: this.documentBackBlob || undefined,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n } catch (apiError: any) {\r\n // Handle specific network and API errors\r\n if (apiError.message?.includes('fetch') || apiError.message?.includes('network') || apiError.code === 'NETWORK_ERROR') {\r\n throw new Error(\"Network connection failed. Please check your internet connection and try again.\");\r\n } else if (apiError.message?.includes('413') || apiError.message?.includes('too large')) {\r\n throw new Error(\"Document image is too large. Please use a smaller image or retake the photo.\");\r\n } else if (apiError.message?.includes('415') || apiError.message?.includes('format')) {\r\n throw new Error(\"Unsupported image format. Please use JPEG or PNG images.\");\r\n } else if (apiError.message?.includes('401') || apiError.message?.includes('unauthorized')) {\r\n throw new Error(\"Session expired. Please refresh the page and try again.\");\r\n } else if (apiError.message?.includes('429') || apiError.message?.includes('rate limit')) {\r\n throw new Error(\"Too many requests. Please wait a moment and try again.\");\r\n } else {\r\n throw new Error(apiError.message || \"Failed to process document. Please try again.\");\r\n }\r\n }\r\n\r\n this.livenessEntryId = createResult.id;\r\n\r\n // W6: Route to OCR gate \u00E2\u20AC\u201D poll until OCR result is ready, validate\r\n // expiry/quality, then show document_confirm before liveness starts.\r\n this.showStep(\"ocr_gate\");\r\n\r\n } catch (err: any) {\r\n console.error(\"Document processing failed:\", err);\r\n \r\n if (retryCount < maxRetries) {\r\n retryCount++;\r\n console.log(`Retrying document processing (attempt ${retryCount}/${maxRetries})`);\r\n \r\n // Show retry message\r\n if (captureContainer) {\r\n captureContainer.innerHTML = `\r\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\">\r\n <div style=\"position:relative;width:52px;height:52px;\">\r\n <div style=\"position:absolute;inset:0;border-radius:50%;border:3px solid ${this.theme.border};border-top-color:${this.theme.primary};animation:sc-spin 0.8s linear infinite;\"></div>\r\n <div style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:20px;\">\u00F0\u0178\u201D\u201E</div>\r\n </div>\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Retrying...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;max-width:240px;line-height:1.5;\">Attempt ${retryCount} of ${maxRetries}</div>\r\n </div>`;\r\n }\r\n \r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n return attemptProcessing();\r\n } else {\r\n // Final retry failed, show detailed error\r\n this.handleDocumentProcessingError(err, captureContainer);\r\n }\r\n }\r\n };\r\n\r\n await attemptProcessing();\r\n }\r\n\r\n private handleDocumentProcessingError(error: any, captureContainer: HTMLElement): void {\r\n // Map technical errors to user-friendly messages \u00E2\u20AC\u201D never pass raw error strings\r\n let userMessage = \"We could not verify your document. Please try again.\";\r\n let canRetry = true;\r\n\r\n const raw = (error?.message || \"\").toLowerCase();\r\n if (raw.includes(\"expired\")) {\r\n userMessage = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n canRetry = false;\r\n } else if (raw.includes(\"quality too low\") || raw.includes(\"blurry\") || raw.includes(\"blur\")) {\r\n userMessage = \"The document photo isn't clear enough. Please retake it in good lighting with no glare.\";\r\n } else if (raw.includes(\"not detected\") || raw.includes(\"document_not_detected\")) {\r\n userMessage = \"We could not detect a document in the photo. Please ensure the full ID is visible and try again.\";\r\n } else if (raw.includes(\"network\") || raw.includes(\"fetch\") || raw.includes(\"connection\")) {\r\n userMessage = \"A connection error occurred. Please check your internet and try again.\";\r\n } else if (raw.includes(\"too large\") || raw.includes(\"413\")) {\r\n userMessage = \"The document image is too large. Please retake the photo.\";\r\n } else if (raw.includes(\"format\") || raw.includes(\"415\")) {\r\n userMessage = \"Unsupported image format. Please use JPEG or PNG.\";\r\n } else if (raw.includes(\"type mismatch\") || raw.includes(\"document_type_mismatch\")) {\r\n userMessage = \"The document does not match the selected ID type. Please choose the correct ID type.\";\r\n }\r\n\r\n if (captureContainer) {\r\n // Build with DOM \u00E2\u20AC\u201D never interpolate user-derived content into innerHTML\r\n const wrap = document.createElement(\"div\");\r\n wrap.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\";\r\n wrap.setAttribute(\"role\", \"alert\");\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:56px;height:56px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:26px;`;\r\n icon.textContent = \"\u00F0\u0178\u201D\u008D\";\r\n wrap.appendChild(icon);\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:700;`;\r\n titleEl.textContent = \"Document Could Not Be Verified\";\r\n wrap.appendChild(titleEl);\r\n\r\n const msgEl = document.createElement(\"div\");\r\n msgEl.style.cssText = `color:${this.theme.textSecondary};font-size:13px;max-width:260px;line-height:1.6;`;\r\n msgEl.textContent = userMessage;\r\n wrap.appendChild(msgEl);\r\n\r\n if (canRetry) {\r\n const retryBtn = document.createElement(\"button\");\r\n retryBtn.textContent = \"Try Again\";\r\n retryBtn.setAttribute(\"aria-label\", \"Retake document photo\");\r\n retryBtn.style.cssText = `margin-top:8px;padding:12px 24px;border-radius:8px;background:${this.theme.primary};color:#fff;border:none;font-size:14px;font-weight:600;cursor:pointer;`;\r\n retryBtn.addEventListener(\"click\", () => this.showStep(\"document_capture\"));\r\n wrap.appendChild(retryBtn);\r\n }\r\n\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.appendChild(wrap);\r\n } else {\r\n this.showErrorStep(userMessage);\r\n }\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Liveness \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private renderLiveness(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // W13: Check retry limit before starting another liveness attempt\r\n if (this._livenessFailures >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Face verification\");\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;line-height:1.5;`;\r\n desc.textContent = \"Position your face in the oval and follow the on-screen instructions.\";\r\n container.appendChild(desc);\r\n\r\n // Liveness mount point\r\n const livenessContainer = document.createElement(\"div\");\r\n livenessContainer.style.cssText = \"margin:8px 0;width:100%;\";\r\n container.appendChild(livenessContainer);\r\n\r\n // W9: For data verification, identity is already held by the backend via\r\n // identity_check_id \u00E2\u20AC\u201D the real ID number/type must not be re-sent, and the\r\n // backend now accepts liveness/create without them when identity_check is\r\n // set (see liveness.ts create(), which omits both fields entirely in that\r\n // case). Only build a real identifier for the non-data-verification path.\r\n const isDataVerification = !!this.identityCheckId;\r\n const identifier = isDataVerification\r\n ? \"\"\r\n : (this.idNumber || Object.values(this.collectedFields)[0] || this.selectedIdType || `DOC-${Date.now()}`);\r\n const identifierType = isDataVerification ? \"\" : this.selectedIdType;\r\n\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n // Start liveness check (this handles camera, detection, recording, submission)\r\n // If livenessEntryId exists (document flow), reuse it instead of creating a new one\r\n this.sdk.liveness\r\n .startCheck(\r\n livenessContainer,\r\n {\r\n identifier,\r\n identifier_type: identifierType,\r\n country,\r\n document: this.documentBlob || undefined,\r\n document_back: this.documentBackBlob || undefined,\r\n identity_check: this.identityCheckId || undefined,\r\n verification_type: this.identityCheckId\r\n ? \"data_verification\"\r\n : this.documentBlob\r\n ? \"document_verification\"\r\n : \"liveness_only\",\r\n // B4: pass pre-warmed stream so camera.open() is skipped\r\n prewarmedStream: this._prewarmedStream || undefined,\r\n },\r\n [\"BLINK\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as ChallengeAction[],\r\n this.livenessEntryId || undefined\r\n )\r\n .then((result) => {\r\n // W11: After submit, end user is done \u00E2\u20AC\u201D show \"You're all done\" screen.\r\n // Backend processing continues in background; client receives webhook.\r\n // Track liveness failures for retry limit (W14).\r\n if (result.status === \"failed\") {\r\n this._livenessFailures++;\r\n }\r\n if (result.id) {\r\n this.livenessEntryId = result.id;\r\n }\r\n this.showStep(\"done\");\r\n })\r\n .catch((err) => {\r\n this._livenessFailures++;\r\n this.showErrorStep(err.message || \"Liveness verification failed. Please try again.\");\r\n });\r\n }\r\n\r\n private renderResult(_container: HTMLElement): void {\r\n // C2: Dead code \u00E2\u20AC\u201D flow routes to 'done' step, not 'result'. Kept as stub.\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC Error \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private showErrorStep(message: string): void {\r\n this.currentStep = \"error\";\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.setAttribute(\"role\", \"alert\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n `;\r\n\r\n // Classify the error into a user-friendly category\r\n const isCameraErr = /camera|permission|notallowed|notfound/i.test(message);\r\n const isNetworkErr = /network|timeout|connection|fetch/i.test(message);\r\n const isAuthErr = /session.*expired|token.*expired|authentication/i.test(message);\r\n const isDocQuality = /blurry|blur|quality|glare|dark|bright|lighting/i.test(message);\r\n const isExpiredDoc = /document.*expired|expired.*document/i.test(message);\r\n const isFaceMatch = /face.*match|selfie.*match|does not match/i.test(message);\r\n\r\n const errorIcon = isCameraErr ? \"\u00F0\u0178\u201C\u00B7\"\r\n : isNetworkErr ? \"\u00F0\u0178\u201C\u00A1\"\r\n : isAuthErr ? \"\u00E2\u008F\u00B1\"\r\n : isDocQuality ? \"\u00F0\u0178\u201D\u008D\"\r\n : isExpiredDoc ? \"\u00F0\u0178\u201C\u2026\"\r\n : isFaceMatch ? \"\u00F0\u0178\u00A4\u00B3\"\r\n : \"\u00E2\u0153\u2022\";\r\n\r\n const errorTitle = isCameraErr ? \"Camera Access Required\"\r\n : isNetworkErr ? \"Connection Problem\"\r\n : isAuthErr ? \"Session Expired\"\r\n : isDocQuality ? \"Document Photo Unclear\"\r\n : isExpiredDoc ? \"Document Expired\"\r\n : isFaceMatch ? \"Face Match Failed\"\r\n : \"Verification Unsuccessful\";\r\n\r\n // Map to user-facing guidance \u00E2\u20AC\u201D never show raw internal message\r\n const userMessage = isCameraErr\r\n ? \"Please allow camera access in your browser settings and try again.\"\r\n : isNetworkErr\r\n ? \"Check your internet connection and try again.\"\r\n : isAuthErr\r\n ? \"Your session has expired. Please start again.\"\r\n : isDocQuality\r\n ? _sanitizeUserMessage(message) || \"Please retake your document photo in good lighting with no glare.\"\r\n : isExpiredDoc\r\n ? \"The document you submitted has expired. Please use a valid, current ID.\"\r\n : isFaceMatch\r\n ? \"Your selfie did not match the photo on your ID. Please ensure you are using your own valid document and face the camera directly.\"\r\n : _sanitizeUserMessage(message) || \"We were unable to complete your verification. Please try again.\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:72px;height:72px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:28px;\r\n background:${this.theme.errorBg};\r\n border:3px solid ${this.theme.error};\r\n `;\r\n iconWrap.textContent = errorIcon;\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:18px;font-weight:700;margin:0;`;\r\n title.textContent = errorTitle;\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = userMessage;\r\n wrapper.appendChild(desc);\r\n\r\n const retryBtn = this.createPrimaryButton(\"Try Again\");\r\n retryBtn.setAttribute(\"aria-label\", \"Try verification again\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.initialize();\r\n });\r\n wrapper.appendChild(retryBtn);\r\n\r\n const closeBtn = this.createSecondaryButton(\"Close\");\r\n closeBtn.setAttribute(\"aria-label\", \"Close verification widget\");\r\n closeBtn.addEventListener(\"click\", () => {\r\n this.options.onError?.(new Error(message));\r\n this.close();\r\n });\r\n wrapper.appendChild(closeBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n }\r\n\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n // UI Helpers\r\n // \u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\u00E2\u201D\u20AC\r\n\r\n private createHeader(): HTMLElement {\r\n const header = document.createElement(\"div\");\r\n header.setAttribute(\"role\", \"banner\");\r\n header.style.cssText = `\r\n display:flex;align-items:center;justify-content:space-between;\r\n padding:11px 20px;border-bottom:1px solid ${this.theme.border};\r\n `;\r\n\r\n // Left: back button + brand\r\n const leftArea = document.createElement(\"div\");\r\n leftArea.style.cssText = \"display:flex;align-items:center;gap:8px;min-width:0;\";\r\n\r\n this.headerBackBtn = document.createElement(\"button\");\r\n this.headerBackBtn.innerHTML = \"←\";\r\n this.headerBackBtn.setAttribute(\"aria-label\", \"Go back to previous step\");\r\n this.headerBackBtn.style.cssText = `\r\n width:30px;height:30px;border-radius:8px;flex-shrink:0;\r\n display:none;align-items:center;justify-content:center;\r\n border:1.5px solid ${this.theme.border};cursor:pointer;\r\n font-size:16px;line-height:1;\r\n background:${this.theme.cardBg};color:${this.theme.text};\r\n transition:all 0.2s ease;\r\n `;\r\n this.headerBackBtn.style.cssText += `:focus-visible{outline:2px solid ${this.theme.primary};outline-offset:2px;}`;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.shimmer;\r\n }\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.cardBg;\r\n }\r\n });\r\n leftArea.appendChild(this.headerBackBtn);\r\n\r\n this.brandLabel = document.createElement(\"div\");\r\n this.brandLabel.setAttribute(\"aria-label\", \"Verification provider\");\r\n this.brandLabel.style.cssText = `\r\n font-size:15px;font-weight:700;color:${this.theme.text};\r\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\r\n `;\r\n this.brandLabel.textContent = this.sdkConfig?.brand_name || \"SmartComply\";\r\n leftArea.appendChild(this.brandLabel);\r\n header.appendChild(leftArea);\r\n\r\n // Step indicator: stage dots + label\r\n const stepIndicator = document.createElement(\"div\");\r\n stepIndicator.style.cssText = `\r\n display:flex;align-items:center;gap:8px;flex-shrink:0;\r\n `;\r\n\r\n this.stageDots = document.createElement(\"div\");\r\n this.stageDots.style.cssText = `display:flex;align-items:center;gap:4px;`;\r\n for (let i = 0; i < 2; i++) {\r\n const dot = document.createElement(\"span\");\r\n dot.style.cssText = `\r\n width:6px;height:6px;border-radius:50%;\r\n background:${this.theme.border};transition:background 0.2s ease;\r\n `;\r\n this.stageDots.appendChild(dot);\r\n }\r\n stepIndicator.appendChild(this.stageDots);\r\n\r\n this.stepLabel = document.createElement(\"div\");\r\n this.stepLabel.setAttribute(\"aria-live\", \"polite\");\r\n this.stepLabel.setAttribute(\"aria-atomic\", \"true\");\r\n this.stepLabel.style.cssText = `\r\n font-size:12px;color:${this.theme.textMuted};\r\n font-variant-numeric:tabular-nums;flex-shrink:0;\r\n `;\r\n stepIndicator.appendChild(this.stepLabel);\r\n header.appendChild(stepIndicator);\r\n\r\n // Close button\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.innerHTML = \"\u00E2\u0153\u2022\";\r\n closeBtn.setAttribute(\"aria-label\", \"Close identity verification\");\r\n closeBtn.style.cssText = `\r\n width:32px;height:32px;border-radius:8px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n border:none;cursor:pointer;font-size:16px;\r\n background:${this.theme.shimmer};color:${this.theme.textMuted};\r\n transition:all 0.2s ease;\r\n `;\r\n closeBtn.addEventListener(\"mouseenter\", () => {\r\n closeBtn.style.background = this.theme.errorBg;\r\n closeBtn.style.color = this.theme.error;\r\n });\r\n closeBtn.addEventListener(\"mouseleave\", () => {\r\n closeBtn.style.background = this.theme.shimmer;\r\n closeBtn.style.color = this.theme.textMuted;\r\n });\r\n closeBtn.addEventListener(\"click\", () => this.close());\r\n header.appendChild(closeBtn);\r\n\r\n return header;\r\n }\r\n\r\n private createFooter(): HTMLElement {\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n padding:9px 20px;border-top:1px solid ${this.theme.border};\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n `;\r\n\r\n const powered = document.createElement(\"span\");\r\n powered.style.cssText = `font-size:11px;color:${this.theme.textMuted};`;\r\n powered.textContent = \"Powered by \";\r\n\r\n const brand = document.createElement(\"span\");\r\n brand.style.cssText = `font-size:11px;font-weight:700;color:${this.theme.primary};`;\r\n brand.textContent = \"Adhere\";\r\n\r\n footer.appendChild(powered);\r\n footer.appendChild(brand);\r\n return footer;\r\n }\r\n\r\n private createStepTitle(text: string): HTMLElement {\r\n const el = document.createElement(\"h3\");\r\n el.style.cssText = `\r\n color:${this.theme.text};font-size:18px;font-weight:700;\r\n margin:0;\r\n `;\r\n el.textContent = text;\r\n return el;\r\n }\r\n\r\n private createOptionCard(\r\n title: string,\r\n subtitle: string,\r\n onClick: () => void\r\n ): HTMLElement {\r\n const card = document.createElement(\"button\");\r\n card.setAttribute(\"aria-label\", subtitle ? `${title}: ${subtitle}` : title);\r\n card.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:12px;\r\n background:${this.theme.cardBg};\r\n border:2px solid ${this.theme.border};\r\n cursor:pointer;text-align:left;\r\n display:flex;align-items:center;justify-content:space-between;\r\n transition:all 0.2s ease;\r\n `;\r\n card.addEventListener(\"mouseenter\", () => {\r\n card.style.borderColor = this.theme.primary;\r\n card.style.background = this.theme.shimmer;\r\n card.style.transform = \"translateY(-1px)\";\r\n });\r\n card.addEventListener(\"mouseleave\", () => {\r\n card.style.borderColor = this.theme.border;\r\n card.style.background = this.theme.cardBg;\r\n card.style.transform = \"translateY(0)\";\r\n });\r\n card.addEventListener(\"click\", onClick);\r\n\r\n const textWrap = document.createElement(\"div\");\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:600;`;\r\n titleEl.textContent = title;\r\n textWrap.appendChild(titleEl);\r\n\r\n if (subtitle) {\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = subtitle;\r\n textWrap.appendChild(subEl);\r\n }\r\n\r\n const arrow = document.createElement(\"span\");\r\n arrow.style.cssText = `color:${this.theme.textMuted};font-size:18px;flex-shrink:0;`;\r\n arrow.textContent = \"\u00E2\u2020\u2019\";\r\n\r\n card.appendChild(textWrap);\r\n card.appendChild(arrow);\r\n return card;\r\n }\r\n\r\n private createPrimaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:14px;border-radius:12px;\r\n font-size:15px;font-weight:600;\r\n background:${this.theme.primary};color:#fff;\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n box-shadow:0 2px 8px ${this.theme.primaryGlow};\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.background = this.theme.primaryHover;\r\n btn.style.transform = \"translateY(-1px)\";\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.background = this.theme.primary;\r\n btn.style.transform = \"translateY(0)\";\r\n });\r\n return btn;\r\n }\r\n\r\n private createSecondaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:12px;border-radius:12px;\r\n font-size:14px;font-weight:500;\r\n background:transparent;color:${this.theme.textSecondary};\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.color = this.theme.text;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.color = this.theme.textSecondary;\r\n });\r\n return btn;\r\n }\r\n\r\n private isDocumentFlow(): boolean {\r\n // 1. Check verification_type \u00E2\u20AC\u201D handle both string and array from backend\r\n const vType = this.sdkConfig?.verification_type;\r\n if (vType) {\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n if (types.includes(\"document_verification\")) return true;\r\n if (types.includes(\"data_verification\")) return false;\r\n }\r\n // 2. Fallback: inspect channel fields \u00E2\u20AC\u201D any upload field = document flow\r\n const channels = this.sdkConfig?.channels || {};\r\n const allFields = (Object.values(channels) as any[])\r\n .flat()\r\n .flatMap((ch: any) => ch.fields || []);\r\n return allFields.some((f: any) => isUploadFieldType(f.type));\r\n }\r\n\r\n private updateProgress(): void {\r\n const isDocFlow = this.isDocumentFlow();\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const singleCountry = countries.length <= 1;\r\n\r\n // Two-stage action steps \u00E2\u20AC\u201D Stage 1: validate identity, Stage 2: liveness\r\n const stage1Steps: StepName[] = isDocFlow\r\n ? ([\"country\", \"id_type\", \"document_capture\", \"ocr_gate\", \"document_confirm\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry))\r\n : ([\"country\", \"id_type\", \"id_input\", \"confirm_identity\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry));\r\n\r\n const stage2Steps: StepName[] = [\"liveness\"];\r\n const allActionSteps: StepName[] = [...stage1Steps, ...stage2Steps];\r\n\r\n const totalSteps = allActionSteps.length;\r\n const actionIndex = allActionSteps.indexOf(this.currentStep);\r\n\r\n const pct =\r\n this.currentStep === \"done\" || this.currentStep === \"result\" ? 100\r\n : actionIndex >= 0 ? ((actionIndex + 1) / totalSteps) * 100\r\n : 0;\r\n\r\n if (this.progressBar) {\r\n this.progressBar.style.width = `${pct}%`;\r\n }\r\n\r\n // Stage label: \"Stage 1 of 2: Verify Identity\" / \"Stage 2 of 2: Face Check\"\r\n if (this.stepLabel) {\r\n if (this.currentStep === \"loading\" || this.currentStep === \"welcome\") {\r\n this.stepLabel.textContent = \"\";\r\n } else if (this.currentStep === \"done\" || this.currentStep === \"result\") {\r\n this.stepLabel.textContent = \"Complete \u00E2\u0153\u201C\";\r\n } else if (stage2Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = \"Stage 2 of 2: Face Check\";\r\n } else if (stage1Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = isDocFlow ? \"Stage 1 of 2: Scan Document\" : \"Stage 1 of 2: Verify Identity\";\r\n } else {\r\n this.stepLabel.textContent = \"\";\r\n }\r\n }\r\n\r\n // W3: Stage dots \u00E2\u20AC\u201D dot 1 lights once Stage 1 is reached, dot 2 once Stage 2 is reached\r\n if (this.stageDots) {\r\n const dots = Array.from(this.stageDots.children) as HTMLSpanElement[];\r\n const inStage1 = stage1Steps.includes(this.currentStep);\r\n const inStage2 = stage2Steps.includes(this.currentStep);\r\n const isComplete = this.currentStep === \"done\" || this.currentStep === \"result\";\r\n const stage1Active = inStage1 || inStage2 || isComplete;\r\n const stage2Active = inStage2 || isComplete;\r\n if (dots[0]) dots[0].style.background = stage1Active ? this.theme.primary : this.theme.border;\r\n if (dots[1]) dots[1].style.background = stage2Active ? this.theme.primary : this.theme.border;\r\n }\r\n\r\n // Back button \u00E2\u20AC\u201D show for navigable steps only\r\n if (this.headerBackBtn) {\r\n const backTargets: Partial<Record<StepName, () => void>> = {\r\n id_type: () => this.showStep(countries.length > 1 ? \"country\" : \"welcome\"),\r\n country: () => this.showStep(\"welcome\"),\r\n id_input: () => this.showStep(\"id_type\"),\r\n confirm_identity: () => this.showStep(\"id_input\"),\r\n document_capture: () => { this.docCapture?.destroy(); this.showStep(\"id_type\"); },\r\n document_confirm: () => { this.docCapture?.destroy(); this.showStep(\"document_capture\"); },\r\n };\r\n const backAction = backTargets[this.currentStep];\r\n if (backAction) {\r\n this.headerBackBtn.style.display = \"flex\";\r\n const newBtn = this.headerBackBtn.cloneNode(true) as HTMLButtonElement;\r\n newBtn.style.cssText = this.headerBackBtn.style.cssText;\r\n this.headerBackBtn.parentNode?.replaceChild(newBtn, this.headerBackBtn);\r\n this.headerBackBtn = newBtn;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.shimmer;\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.cardBg;\r\n });\r\n this.headerBackBtn.addEventListener(\"click\", backAction);\r\n } else {\r\n this.headerBackBtn.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private applyTheme(): void {\r\n if (this.overlay) {\r\n this.overlay.style.background = this.theme.overlay;\r\n }\r\n if (this.modal) {\r\n this.modal.style.background = this.theme.bg;\r\n this.modal.style.boxShadow = this.theme.shadow;\r\n }\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById(\"sc-flow-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"sc-flow-styles\";\r\n style.textContent = `\r\n @keyframes sc-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes sc-pop {\r\n 0% { transform: scale(0.8); opacity: 0; }\r\n 50% { transform: scale(1.05); }\r\n 100% { transform: scale(1); opacity: 1; }\r\n }\r\n #sc-flow-modal * {\r\n box-sizing: border-box;\r\n }\r\n #sc-flow-modal button:focus-visible,\r\n #sc-flow-modal select:focus-visible,\r\n #sc-flow-modal input:focus-visible {\r\n outline: 2px solid #3b82f6;\r\n outline-offset: 2px;\r\n }\r\n #sc-flow-modal::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar-thumb {\r\n background: rgba(128,128,128,0.3);\r\n border-radius: 4px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n", "/**\r\n * Lightweight SDK logger.\r\n *\r\n * Debug output is suppressed in production. Enable verbose logging by calling\r\n * SDKLogger.setDebug(true) before initialising the SDK, or by setting the\r\n * global flag: window.__SC_DEBUG__ = true\r\n */\r\n\r\nconst PREFIX = \"[SmartComply SDK]\";\r\n\r\nfunction isDebugEnabled(): boolean {\r\n try {\r\n return !!(window as any).__SC_DEBUG__;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const SDKLogger = {\r\n /** Emit an informational message (debug mode only). */\r\n info(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.info(`${PREFIX} \u2139 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a warning (always visible). */\r\n warn(message: string, ...args: unknown[]): void {\r\n console.warn(`${PREFIX} \u26A0 ${message}`, ...args);\r\n },\r\n\r\n /** Emit an error (always visible). */\r\n error(message: string, ...args: unknown[]): void {\r\n console.error(`${PREFIX} \u2716 ${message}`, ...args);\r\n },\r\n\r\n /** Emit a debug trace (debug mode only \u2014 lowest priority). */\r\n debug(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.debug(`${PREFIX} \u2B21 ${message}`, ...args);\r\n },\r\n\r\n /** Log a timed group of related messages (debug mode only). */\r\n group(label: string, fn: () => void): void {\r\n if (!isDebugEnabled()) { fn(); return; }\r\n console.group(`${PREFIX} ${label}`);\r\n fn();\r\n console.groupEnd();\r\n },\r\n\r\n /**\r\n * Enable or disable verbose debug output at runtime.\r\n *\r\n * Example:\r\n * import { SDKLogger } from \"smartcomply-web-sdk\";\r\n * SDKLogger.setDebug(true);\r\n */\r\n setDebug(enabled: boolean): void {\r\n try {\r\n (window as any).__SC_DEBUG__ = enabled;\r\n } catch {\r\n /* no-op in non-browser environments */\r\n }\r\n },\r\n};\r\n", "/**\r\n * Camera permission utilities.\r\n *\r\n * Provides helpers to check, request and handle camera permissions in a\r\n * browser-consistent way. All functions are purely async and do NOT throw \u2014\r\n * they return a typed result so callers can handle each case explicitly.\r\n */\r\n\r\nexport type PermissionStatus =\r\n | \"granted\" // camera already accessible\r\n | \"prompt\" // permission dialog will appear on request\r\n | \"denied\" // user previously denied; cannot request again\r\n | \"unsupported\" // Permissions API or getUserMedia not available\r\n | \"unknown\"; // couldn't determine status\r\n\r\nexport interface CameraPermissionResult {\r\n status: PermissionStatus;\r\n /** Human-readable reason (populated on denied / unsupported). */\r\n reason?: string;\r\n}\r\n\r\n/**\r\n * Query the current camera permission state without prompting the user.\r\n *\r\n * Uses the Permissions API when available, falls back to \"unknown\" on older\r\n * browsers (e.g. Safari < 16).\r\n */\r\nexport async function queryCameraPermission(): Promise<CameraPermissionResult> {\r\n if (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\r\n return { status: \"unsupported\", reason: \"getUserMedia is not supported in this browser.\" };\r\n }\r\n\r\n if (!navigator.permissions?.query) {\r\n return { status: \"unknown\" };\r\n }\r\n\r\n try {\r\n const result = await navigator.permissions.query({ name: \"camera\" as PermissionName });\r\n return { status: result.state as PermissionStatus };\r\n } catch {\r\n return { status: \"unknown\" };\r\n }\r\n}\r\n\r\n/**\r\n * Request camera access and return the resulting MediaStream.\r\n *\r\n * Maps browser-specific errors onto actionable `CameraPermissionResult`\r\n * values so callers can show the right UI instead of catching raw DOMExceptions.\r\n *\r\n * @param constraints - Optional MediaStreamConstraints override.\r\n */\r\nexport async function requestCameraAccess(\r\n constraints?: MediaStreamConstraints\r\n): Promise<{ stream: MediaStream; permission: CameraPermissionResult }> {\r\n const defaults: MediaStreamConstraints = {\r\n video: { facingMode: \"user\", width: { ideal: 640 }, height: { ideal: 480 } },\r\n audio: false,\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints ?? defaults);\r\n return { stream, permission: { status: \"granted\" } };\r\n } catch (err: any) {\r\n const name: string = err?.name ?? \"\";\r\n\r\n if (name === \"NotAllowedError\" || name === \"PermissionDeniedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"denied\",\r\n reason: \"Camera access was denied. Please allow camera permissions in your browser settings and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotFoundError\" || name === \"DevicesNotFoundError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unsupported\",\r\n reason: \"No camera was found. Please connect a camera and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotReadableError\" || name === \"TrackStartError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera is already in use by another application. Please close it and try again.\",\r\n },\r\n };\r\n }\r\n\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: err?.message ?? \"Unable to access the camera.\",\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Stop all tracks on a MediaStream and release the camera.\r\n * Safe to call with null/undefined.\r\n */\r\nexport function releaseCameraStream(stream: MediaStream | null | undefined): void {\r\n if (!stream) return;\r\n stream.getTracks().forEach((t) => t.stop());\r\n}\r\n\r\n/**\r\n * Returns true if the browser supports the camera APIs needed by the SDK.\r\n */\r\nexport function isCameraSupported(): boolean {\r\n return (\r\n typeof navigator !== \"undefined\" &&\r\n !!navigator.mediaDevices?.getUserMedia &&\r\n typeof MediaRecorder !== \"undefined\"\r\n );\r\n}\r\n", "/**\r\n * LivenessUploader \u2014 thin wrapper around the HttpClient's uploadWithSession()\r\n * that adds:\r\n * - Progress callbacks (onProgress)\r\n * - Upload cancellation via AbortController\r\n * - Automatic retry on transient network failure (configurable)\r\n *\r\n * Used internally by LivenessModule.create() and LivenessModule.submit() when\r\n * the caller needs progress reporting (e.g. for a progress bar during video\r\n * upload on slow connections).\r\n */\r\n\r\nimport { HttpClient } from \"../../client/HttpClient\";\r\nimport { MAX_RETRIES, RETRY_DELAY_MS } from \"../../utils/constants\";\r\nimport { SDKLogger } from \"../../utils/logger\";\r\n\r\nexport interface UploadOptions {\r\n /** Called with a value 0\u20131 as the upload progresses. */\r\n onProgress?: (fraction: number) => void;\r\n\r\n /** Optional AbortSignal to cancel the upload mid-flight. */\r\n signal?: AbortSignal;\r\n\r\n /** Override the default number of retries on transient errors. */\r\n retries?: number;\r\n}\r\n\r\nexport class LivenessUploader {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Upload a FormData payload to `path` with optional progress and\r\n * cancellation support.\r\n *\r\n * Falls back to the standard `uploadWithSession()` on browsers that do not\r\n * support XMLHttpRequest upload progress (very rare).\r\n */\r\n async upload<T>(\r\n path: string,\r\n formData: FormData,\r\n options: UploadOptions = {}\r\n ): Promise<T> {\r\n const { onProgress, signal, retries = MAX_RETRIES } = options;\r\n\r\n // If no progress callback is needed, delegate straight to HttpClient\r\n // which already has retry logic built in.\r\n if (!onProgress) {\r\n return this.http.uploadWithSession<T>(path, formData);\r\n }\r\n\r\n return this.uploadWithProgress<T>(path, formData, onProgress, signal, retries);\r\n }\r\n\r\n // \u2500\u2500 Private \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n private async uploadWithProgress<T>(\r\n path: string,\r\n formData: FormData,\r\n onProgress: (fraction: number) => void,\r\n signal: AbortSignal | undefined,\r\n retriesLeft: number\r\n ): Promise<T> {\r\n const sessionToken = (this.http as any).sessionToken as string | null;\r\n if (!sessionToken) {\r\n throw new Error(\"SDK: No session token. Call sdk.createSession() first.\");\r\n }\r\n\r\n const baseUrl: string = (this.http as any).baseUrl as string;\r\n\r\n return new Promise<T>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n // Propagate AbortSignal to XHR\r\n if (signal) {\r\n if (signal.aborted) {\r\n reject(new DOMException(\"Upload cancelled\", \"AbortError\"));\r\n return;\r\n }\r\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\r\n }\r\n\r\n xhr.open(\"POST\", `${baseUrl}${path}`, true);\r\n xhr.setRequestHeader(\"x-access-token\", sessionToken);\r\n\r\n xhr.upload.onprogress = (evt) => {\r\n if (evt.lengthComputable) {\r\n onProgress(evt.loaded / evt.total);\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n onProgress(1);\r\n\r\n let envelope: any;\r\n try {\r\n envelope = JSON.parse(xhr.responseText);\r\n } catch {\r\n reject(new Error(`SDK: Non-JSON response from ${path} (${xhr.status})`));\r\n return;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300 && envelope.status !== \"error\") {\r\n SDKLogger.info(`Upload to ${path} succeeded`, { status: xhr.status });\r\n resolve(envelope.data as T);\r\n } else {\r\n const err = new Error(envelope.message || `Upload to ${path} failed (${xhr.status})`);\r\n (err as any).statusCode = xhr.status;\r\n (err as any).code = envelope.code;\r\n reject(err);\r\n }\r\n };\r\n\r\n xhr.onerror = async () => {\r\n SDKLogger.warn(`Upload to ${path} failed \u2014 network error`, { retriesLeft });\r\n\r\n if (retriesLeft > 0) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n try {\r\n const result = await this.uploadWithProgress<T>(\r\n path, formData, onProgress, signal, retriesLeft - 1\r\n );\r\n resolve(result);\r\n } catch (retryErr) {\r\n reject(retryErr);\r\n }\r\n } else {\r\n reject(new Error(`SDK: Upload to ${path} failed after all retries.`));\r\n }\r\n };\r\n\r\n xhr.onabort = () => {\r\n reject(new DOMException(\"Upload cancelled by user\", \"AbortError\"));\r\n };\r\n\r\n xhr.send(formData);\r\n });\r\n }\r\n}\r\n"],
|
|
5
|
+
"mappings": "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AAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,K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",
|
|
6
6
|
"names": ["r", "ua", "e", "e", "n", "r", "i", "s", "t", "o", "a", "c", "h", "u", "l", "f", "bs", "bs", "y", "a", "s", "i", "_", "m", "ui", "r", "RETRY_DELAY_MS", "b", "i", "n", "y", "x", "l", "h", "n", "r", "g", "b", "i", "y", "x", "t", "e", "c", "x", "y", "style", "w", "h", "i", "u", "t", "s", "d", "w", "h", "b", "c", "_", "i", "f", "subtitle", "v", "style", "fn", "t", "r"]
|
|
7
7
|
}
|