UniFi Protect - Added support for UniFi Protect third-party ONVIF camera RTSP data. - Improved camera discovery labels using richer Protect metadata like display name, market name, type, host, MAC, and port. - Revised third-party camera streaming to use local-only Protect-exposed streams via the local Integration API and X-API-KEY, avoiding direct third-party camera RTSP fallback. - Updated UniFi configuration/search UI to make unconfigured or unavailable third-party stream states clearer. - Redacted sensitive local API key data from debug output. Streaming/UI Behavior - Disabled UIKit’s fragile hidesBarsOnSwipe path while streaming after a nav-bar gesture crash. - Refactored toolbar hover/touch visibility handling so explicit swipes are not immediately undone by hover timers. - Fixed stream profile view lifecycle cleanup so retry/cancel paths detach old profile views and do not grow Auto Layout state. - Fixed stream error overlay attachment so repeated failures update the existing overlay instead of embedding duplicate constrained views. Crash/Concurrency Hardening - Fixed Chinstrap reachable-cache races by serializing reachable mapping/timer state and using captured identifiers. - Fixed VideoToolbox decoder completion/backpressure races by replacing a shared semaphore with per-waiter tracking and making completion/session-leave paths idempotent. - Held the VideoToolbox session lock through decoded-frame callbacks to avoid shutdown racing frame delivery. - Fixed SMB client cache races by serializing SMB2Manager ownership and invalidating only the manager instance that failed. - Fixed startup Penguin client crashes by avoiding late getPenguin() singleton force unwraps during delayed startup work. - Fixed stream start lifecycle races by sequencing starts, snapshotting source/profile state, and ignoring stale callbacks. - Fixed Krill status logging races by serializing status access and adding explicit CustomStringConvertible. - Hardened H.264 RTP parsing against empty payloads, zero-length STAP-A fragments, and short FU-A packets. - Guarded account-scoped UserDefaults access when no account/public key is active. - Reworked local HTTP server launch/stop lifecycle to avoid Perfect thread buildup and stale lifecycle callbacks. - Fixed Nest WebRTC teardown by adding explicit hangup/cleanup and guarding stale callbacks. - Replaced the intentional remote-admin crash with Darwin.exit(EXIT_SUCCESS) so remote quit still works without reporting as a crash. - Removed Penguin cache callback singleton traps by using the active client instead of getPenguin() after teardown. - Hardened media-layer teardown in CMCBufferView, especially around AVSampleBufferDisplayLayer, PiP, and queued decoded frames. - Hardened Chinstrap request resolution and member cache lifetime against duplicate/late completions. - Hardened Krill packet buffer indexing against stale time/index calculations and clock/state jumps. - Disabled AVKit automatic Now Playing updates for local iOS players to avoid MediaRemote nil-object aborts. - Stabilized Home reload during Chinstrap teardown by capturing the active service/client for the full reload chain. - Made cache path generation tolerate missing account state by using an unscoped cache directory instead of force-unwrapping public key state. - Fixed router timer-wheel expiration sweeps so delayed scans do not clear future timers or scan unbounded ranges. - Fixed AudioToolbox converter teardown and AAC packet validation so converter disposal cannot race queued conversion work. - Fixed Chinstrap client socket startup races by avoiding force unwraps and rejecting stale connect attempts cleanly. - Fixed module layout parsing for text(""), allowing empty quoted content and throwing parse errors for malformed content instead of trapping.