050fd3a412
Add NamecoinLookupException sealed class to distinguish: - NameNotFound: name queried successfully but doesn't exist on blockchain - NameExpired: name exists but expired (>36000 blocks since last update) - ServersUnreachable: all ElectrumX servers failed with connection errors Previously, all three cases returned null from nameShowWithFallback, making it impossible for the UI to show meaningful feedback. Changes: - ElectrumxClient.connectAndQuery: throws NameNotFound/NameExpired instead of returning null for definitive blockchain answers - ElectrumxClient.nameShow: lets NamecoinLookupException propagate (only catches connection/IO errors as null) - ElectrumxClient.nameShowWithFallback: short-circuits on NameNotFound/ NameExpired (no point trying other servers for definitive answers), throws ServersUnreachable when all servers fail with connection errors - SearchBarViewModel: new namecoinSearchState flow with typed states (Idle/Loading/Resolved/NotFound/Expired/ServersUnreachable) for UI to show loading spinners, resolved profiles, and specific error messages. Derived namecoinResolvedUser from this flow. Discovered while porting to notedeck (damus-io/notedeck#1314).