From 13bf2a12a5a28d401b2dacf14c8d4cfd1d254e88 Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Tue, 25 Mar 2025 17:17:43 +0100 Subject: [PATCH 01/21] feat: refactor the backend to use XrpcErrorOr. --- .../Xrpc/DefaultXrpcHandler.cs | 4 +- .../Xrpc/IXrpcRequestHandler.cs | 7 +- .../Xrpc/ServiceCollectionExtensions.cs | 7 +- PinkSea.AtProto.Server/Xrpc/XrpcError.cs | 21 +++++ PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs | 82 +++++++++++++++++++ PinkSea.AtProto/Models/OAuth/OAuthState.cs | 9 ++ .../BeginLoginFlowProcedureResponse.cs | 6 -- PinkSea/Xrpc/BeginLoginFlowProcedure.cs | 41 ++++++---- PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs | 6 +- PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs | 6 +- PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs | 6 +- PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs | 6 +- PinkSea/Xrpc/GetIdentityQueryHandler.cs | 36 ++++++-- PinkSea/Xrpc/GetOekakiQueryHandler.cs | 8 +- PinkSea/Xrpc/GetParentForReplyQueryHandler.cs | 8 +- PinkSea/Xrpc/GetRecentQueryHandler.cs | 6 +- PinkSea/Xrpc/GetTagFeedQueryHandler.cs | 6 +- PinkSea/Xrpc/InvalidateSessionProcedure.cs | 6 +- .../Xrpc/ListReposByCollectionQueryHandler.cs | 10 +-- PinkSea/Xrpc/PutOekakiProcedure.cs | 32 +++++--- .../Xrpc/RefreshSessionProcedureHandler.cs | 12 +-- 21 files changed, 241 insertions(+), 84 deletions(-) create mode 100644 PinkSea.AtProto.Server/Xrpc/XrpcError.cs create mode 100644 PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs diff --git a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs index d6d2c0b..a8f8430 100644 --- a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs @@ -35,7 +35,9 @@ public class DefaultXrpcHandler( var resultProperty = task.GetType() .GetProperty("Result")!; - return resultProperty.GetValue(task); + + var errorOr = resultProperty.GetValue(task) as IXrpcErrorOr; + return errorOr!.GetUnderlyingObject(); } /// diff --git a/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs b/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs index 989bfa9..0b3d7ae 100644 --- a/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs @@ -5,14 +5,15 @@ namespace PinkSea.AtProto.Server.Xrpc; /// /// The type of the request. /// The type of the response. -public interface IXrpcRequestHandler : IXrpcRequestHandler +public interface IXrpcRequestHandler + : IXrpcRequestHandler { - Task Handle(TRequest request); + Task> Handle(TRequest request); } /// /// The base XRPC request handler type, only for finding which type inherits from which. -/// +/// 4 public interface IXrpcRequestHandler { diff --git a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs index 5872550..d52a1a2 100644 --- a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs +++ b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs @@ -53,9 +53,8 @@ private static async Task HandleXrpc( var xrpcHandler = serviceProvider.GetRequiredService(); var result = await xrpcHandler.HandleXrpc(nsid, ctx); - if (result is null) - return Results.BadRequest(); - - return Results.Ok(result); + return result is XrpcError + ? Results.BadRequest(result) + : Results.Ok(result); } } \ No newline at end of file diff --git a/PinkSea.AtProto.Server/Xrpc/XrpcError.cs b/PinkSea.AtProto.Server/Xrpc/XrpcError.cs new file mode 100644 index 0000000..dbc90aa --- /dev/null +++ b/PinkSea.AtProto.Server/Xrpc/XrpcError.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; + +namespace PinkSea.AtProto.Server.Xrpc; + +/// +/// Simple model describing an XRPC error. +/// +public class XrpcError +{ + /// + /// The error type. + /// + [JsonPropertyName("error")] + public required string Error { get; set; } + + /// + /// A human readable message. + /// + [JsonPropertyName("message")] + public string? Message { get; set; } +} \ No newline at end of file diff --git a/PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs b/PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs new file mode 100644 index 0000000..d296cfc --- /dev/null +++ b/PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs @@ -0,0 +1,82 @@ +namespace PinkSea.AtProto.Server.Xrpc; + +/// +/// Signifies a successful or failed XRPC call invocation. +/// +/// The type of the result. +public class XrpcErrorOr : IXrpcErrorOr +{ + /// + /// The value of the XRPCErrorOr. + /// + public TResult? Value { get; init; } + + /// + public XrpcError? Error { get; init; } + + /// + public bool IsSuccess => Error is null; + + /// + public object GetUnderlyingObject() + { + return IsSuccess + ? Value! + : Error!; + } + + /// + /// Returns a successful XRPC call. + /// + /// The value. + /// The successful XrpcErrorOr. + public static XrpcErrorOr Ok(TResult value) + { + return new XrpcErrorOr + { + Value = value + }; + } + + /// + /// Returns a failed XRPC call. + /// + /// The error type. + /// The error message (optional.) + /// The failed XrpcErrorOr. + public static XrpcErrorOr Fail( + string error, + string? message = null) + { + return new XrpcErrorOr + { + Error = new XrpcError + { + Error = error, + Message = message + } + }; + } +} + +/// +/// Internal specification of the XrpcErrorOr type for the handler. +/// +public interface IXrpcErrorOr +{ + /// + /// Whether this call is successful. + /// + bool IsSuccess { get; } + + /// + /// The error. + /// + XrpcError Error { get; } + + /// + /// Gets either the error or the value. + /// + /// The underlying object. + object GetUnderlyingObject(); +} \ No newline at end of file diff --git a/PinkSea.AtProto/Models/OAuth/OAuthState.cs b/PinkSea.AtProto/Models/OAuth/OAuthState.cs index c196ee7..922d905 100644 --- a/PinkSea.AtProto/Models/OAuth/OAuthState.cs +++ b/PinkSea.AtProto/Models/OAuth/OAuthState.cs @@ -61,4 +61,13 @@ public class OAuthState /// The custom client-defined redirect url. /// public string? ClientRedirectUrl { get; set; } + + /// + /// Check if this token has expired. + /// + /// Whether this token has expired. + public bool HasExpired() + { + return ExpiresAt <= DateTimeOffset.UtcNow; + } } \ No newline at end of file diff --git a/PinkSea/Lexicons/Procedures/BeginLoginFlowProcedureResponse.cs b/PinkSea/Lexicons/Procedures/BeginLoginFlowProcedureResponse.cs index 785fd24..0f7590c 100644 --- a/PinkSea/Lexicons/Procedures/BeginLoginFlowProcedureResponse.cs +++ b/PinkSea/Lexicons/Procedures/BeginLoginFlowProcedureResponse.cs @@ -12,10 +12,4 @@ public class BeginLoginFlowProcedureResponse /// [JsonPropertyName("redirect")] public string? Redirect { get; set; } - - /// - /// The failure reason. - /// - [JsonPropertyName("failureReason")] - public string? FailureReason { get; set; } } \ No newline at end of file diff --git a/PinkSea/Xrpc/BeginLoginFlowProcedure.cs b/PinkSea/Xrpc/BeginLoginFlowProcedure.cs index de3bb2f..a73195f 100644 --- a/PinkSea/Xrpc/BeginLoginFlowProcedure.cs +++ b/PinkSea/Xrpc/BeginLoginFlowProcedure.cs @@ -16,7 +16,7 @@ public class BeginLoginFlowProcedure( : IXrpcProcedure { /// - public async Task Handle(BeginLoginFlowProcedureRequest request) + public async Task> Handle(BeginLoginFlowProcedureRequest request) { try { @@ -34,30 +34,43 @@ public class BeginLoginFlowProcedure( // Log in via a password. var authorized = await atProtoAuthorizationService.LoginWithPassword(normalizedHandle, request.Password); - return !authorized.IsError - ? new BeginLoginFlowProcedureResponse - { Redirect = $"{request.RedirectUrl}?code={authorized.Value}" } - : new BeginLoginFlowProcedureResponse - { FailureReason = authorized.Error }; + + if (!authorized.IsError) + { + return XrpcErrorOr.Ok(new BeginLoginFlowProcedureResponse + { + Redirect = $"{request.RedirectUrl}?code={authorized.Value}" + }); + } + + return XrpcErrorOr.Fail( + "PasswordFailure", + authorized.Error); } var authorizationServer = await oAuthClient.BeginOAuthFlow( normalizedHandle, request.RedirectUrl); - return authorizationServer.IsError - ? new BeginLoginFlowProcedureResponse - { FailureReason = authorizationServer.Error } - : new BeginLoginFlowProcedureResponse { Redirect = authorizationServer.Value }; + if (authorizationServer.IsError) + { + return XrpcErrorOr.Fail( + "OAuthFailure", + authorizationServer.Error); + } + + return XrpcErrorOr.Ok(new BeginLoginFlowProcedureResponse + { + Redirect = authorizationServer.Value + }); } catch (Exception e) { logger.LogError($"Failed to log-in for {request.Handle}", e); - return new BeginLoginFlowProcedureResponse - { - FailureReason = $"Server encountered an exception while performing your login: {e.Message}. Are you sure your handle is of the format @name.bsky.social?" - }; + return XrpcErrorOr.Fail( + "UnknownError", + $"Server encountered an exception while performing your login: {e.Message}. Are you sure your handle is of the format @name.bsky.social?"); } } } \ No newline at end of file diff --git a/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs b/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs index 4dcafce..fb6e5f8 100644 --- a/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs +++ b/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs @@ -15,16 +15,16 @@ public class DeleteOekakiProcedureHandler( OekakiService oekakiService) : IXrpcProcedure { /// - public async Task Handle(DeleteOekakiProcedureRequest request) + public async Task> Handle(DeleteOekakiProcedureRequest request) { var state = contextAccessor.HttpContext?.GetStateToken(); if (state is null) - return null!; + return XrpcErrorOr.Fail("NoAuthToken", "Missing authorization token."); await oekakiService.ProcessDeletedOekaki( request.RecordKey, state); - return new Empty(); + return XrpcErrorOr.Ok(new Empty()); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs b/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs index 139bd80..a405cf8 100644 --- a/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs +++ b/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs @@ -12,7 +12,7 @@ public class GetAuthorFeedQueryHandler(FeedBuilder feedBuilder) : IXrpcQuery { /// - public async Task Handle(GetAuthorFeedQueryRequest request) + public async Task> Handle(GetAuthorFeedQueryRequest request) { var limit = Math.Clamp(request.Limit, 1, 50); var since = request.Since ?? DateTimeOffset.Now.AddMinutes(5); @@ -23,9 +23,9 @@ public class GetAuthorFeedQueryHandler(FeedBuilder feedBuilder) .Limit(limit) .GetFeed(); - return new GenericTimelineQueryResponse() + return XrpcErrorOr.Ok(new GenericTimelineQueryResponse { Oekaki = feed - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs b/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs index 26a2e29..5fcfb38 100644 --- a/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs +++ b/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs @@ -12,7 +12,7 @@ public class GetAuthorRepliesQueryHandler(FeedBuilder feedBuilder) : IXrpcQuery { /// - public async Task Handle( + public async Task> Handle( GetAuthorFeedQueryRequest request) { var limit = Math.Clamp(request.Limit, 1, 50); @@ -24,9 +24,9 @@ public class GetAuthorRepliesQueryHandler(FeedBuilder feedBuilder) .Limit(limit) .GetFeed(); - return new GenericTimelineQueryResponse() + return XrpcErrorOr.Ok(new GenericTimelineQueryResponse { Oekaki = feed - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs b/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs index da236c1..00f41c3 100644 --- a/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs +++ b/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs @@ -12,13 +12,13 @@ public class GetHandleFromDidQueryHandler(IDidResolver didResolver) : IXrpcQuery { /// - public async Task Handle(GetHandleFromDidQueryRequest request) + public async Task> Handle(GetHandleFromDidQueryRequest request) { var handle = await didResolver.GetHandleFromDid(request.Did); - return new GetHandleFromDidQueryResponse() + return XrpcErrorOr.Ok(new GetHandleFromDidQueryResponse() { Handle = handle ?? request.Did - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetIdentityQueryHandler.cs b/PinkSea/Xrpc/GetIdentityQueryHandler.cs index a368871..5b9047c 100644 --- a/PinkSea/Xrpc/GetIdentityQueryHandler.cs +++ b/PinkSea/Xrpc/GetIdentityQueryHandler.cs @@ -1,3 +1,6 @@ +using PinkSea.AtProto.Authorization; +using PinkSea.AtProto.Models.Authorization; +using PinkSea.AtProto.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Server.Xrpc; @@ -12,25 +15,46 @@ namespace PinkSea.Xrpc; [Xrpc("com.shinolabs.pinksea.getIdentity")] public class GetIdentityQueryHandler(IHttpContextAccessor httpContextAccessor, IOAuthStateStorageProvider oAuthStateStorageProvider, - IDidResolver didResolver) + IDidResolver didResolver, + IAtProtoAuthorizationService atProtoAuthorizationService, + IAtProtoOAuthClient oauthClient, + ILogger logger) : IXrpcQuery { /// - public async Task Handle(GetIdentityQueryRequest request) + public async Task> Handle(GetIdentityQueryRequest request) { var state = httpContextAccessor.HttpContext?.GetStateToken(); if (state is null) - return null!; + return XrpcErrorOr.Fail("NoAuthToken", "Missing authorization token."); var oauthState = await oAuthStateStorageProvider.GetForStateId(state); if (oauthState is null) - return null!; + return XrpcErrorOr.Fail("InvalidToken", "Invalid token."); + + if (oauthState.HasExpired()) + { + // Try to renew the session. + logger.LogInformation("Trying to renew session for {Did} while fetching identity.", + oauthState.Did); + + if (oauthState.AuthorizationType == AuthorizationType.PdsSession) + { + if (!await atProtoAuthorizationService.RefreshSession(state)) + return XrpcErrorOr.Fail("SessionExpired", "Your session has expired, log in again."); + } + else + { + if (!await oauthClient.Refresh(state)) + return XrpcErrorOr.Fail("SessionExpired", "Your session has expired, log in again."); + } + } var didDocument = await didResolver.GetDocumentForDid(oauthState.Did); - return new GetIdentityQueryResponse + return XrpcErrorOr.Ok(new GetIdentityQueryResponse { Did = oauthState.Did, Handle = didDocument!.GetHandle()! - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetOekakiQueryHandler.cs b/PinkSea/Xrpc/GetOekakiQueryHandler.cs index 97f940e..d5458cf 100644 --- a/PinkSea/Xrpc/GetOekakiQueryHandler.cs +++ b/PinkSea/Xrpc/GetOekakiQueryHandler.cs @@ -22,21 +22,21 @@ public class GetOekakiQueryHandler( : IXrpcQuery { /// - public async Task Handle(GetOekakiQueryRequest request) + public async Task> Handle(GetOekakiQueryRequest request) { var parent = await dbContext.Oekaki .Include(o => o.TagOekakiRelations) .FirstOrDefaultAsync(o => o.AuthorDid == request.Did && o.OekakiTid == request.RecordKey); if (parent == null) - return null; + return XrpcErrorOr.Fail("NotFound", "Could not find this record."); var childrenFeed = await feedBuilder .StartWithOrdering(c => c.IndexedAt) .Where(c => c.ParentId == parent.Key) .GetFeed(); - return new GetOekakiQueryResponse() + return XrpcErrorOr.Ok(new GetOekakiQueryResponse() { Parent = !parent.Tombstone @@ -48,6 +48,6 @@ await didResolver.GetHandleFromDid(parent.AuthorDid) ?? "invalid.handle", parent), Children = childrenFeed.ToArray() - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs b/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs index 2d4bafc..75c6955 100644 --- a/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs +++ b/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs @@ -13,7 +13,7 @@ public class GetParentForReplyQueryHandler(PinkSeaDbContext dbContext) : IXrpcQuery { /// - public async Task Handle(GetParentForReplyQueryRequest request) + public async Task> Handle(GetParentForReplyQueryRequest request) { var parent = await dbContext.Oekaki .AsNoTracking() @@ -23,12 +23,12 @@ public class GetParentForReplyQueryHandler(PinkSeaDbContext dbContext) .FirstOrDefaultAsync(); if (parent is null) - return null; + return XrpcErrorOr.Fail("NotFound", "Could not find the parent for this record."); - return new GetParentForReplyQueryResponse() + return XrpcErrorOr.Ok(new GetParentForReplyQueryResponse() { AuthorDid = parent.AuthorDid, RecordKey = parent.OekakiTid - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetRecentQueryHandler.cs b/PinkSea/Xrpc/GetRecentQueryHandler.cs index 2f45123..52244ed 100644 --- a/PinkSea/Xrpc/GetRecentQueryHandler.cs +++ b/PinkSea/Xrpc/GetRecentQueryHandler.cs @@ -12,7 +12,7 @@ public class GetRecentQueryHandler( FeedBuilder feedBuilder) : IXrpcQuery { /// - public async Task Handle(GenericTimelineQueryRequest request) + public async Task> Handle(GenericTimelineQueryRequest request) { var limit = Math.Clamp(request.Limit, 1, 50); var since = request.Since ?? DateTimeOffset.Now.AddMinutes(5); @@ -23,9 +23,9 @@ public class GetRecentQueryHandler( .Limit(limit) .GetFeed(); - return new GenericTimelineQueryResponse + return XrpcErrorOr.Ok(new GenericTimelineQueryResponse { Oekaki = feed - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/GetTagFeedQueryHandler.cs b/PinkSea/Xrpc/GetTagFeedQueryHandler.cs index bcbdbce..60dbded 100644 --- a/PinkSea/Xrpc/GetTagFeedQueryHandler.cs +++ b/PinkSea/Xrpc/GetTagFeedQueryHandler.cs @@ -12,7 +12,7 @@ public class GetTagFeedQueryHandler(FeedBuilder feedBuilder) : IXrpcQuery { /// - public async Task Handle(GetTagFeedQueryRequest request) + public async Task> Handle(GetTagFeedQueryRequest request) { var limit = Math.Clamp(request.Limit, 1, 50); var since = request.Since ?? DateTimeOffset.Now.AddMinutes(5); @@ -24,9 +24,9 @@ public class GetTagFeedQueryHandler(FeedBuilder feedBuilder) .Limit(limit) .GetFeed(); - return new GenericTimelineQueryResponse + return XrpcErrorOr.Ok(new GenericTimelineQueryResponse { Oekaki = feed - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/InvalidateSessionProcedure.cs b/PinkSea/Xrpc/InvalidateSessionProcedure.cs index 7670ba7..52a71e8 100644 --- a/PinkSea/Xrpc/InvalidateSessionProcedure.cs +++ b/PinkSea/Xrpc/InvalidateSessionProcedure.cs @@ -15,15 +15,15 @@ public class InvalidateSessionProcedure( ILogger logger) : IXrpcProcedure { /// - public async Task Handle(Empty request) + public async Task> Handle(Empty request) { var state = contextAccessor.HttpContext?.GetStateToken(); if (state is null) - return new Empty(); + return XrpcErrorOr.Ok(new Empty()); logger.LogInformation($"Invalidating session for ID {state}"); await oAuthStateStorageProvider.DeleteForStateId(state); - return new Empty(); + return XrpcErrorOr.Ok(new Empty()); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs b/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs index 0c184cd..9d65e93 100644 --- a/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs +++ b/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs @@ -15,14 +15,14 @@ public class ListReposByCollectionQueryHandler(PinkSeaDbContext dbContext) : IXrpcQuery { /// - public async Task Handle(GetReposByCollectionRequest request) + public async Task> Handle(GetReposByCollectionRequest request) { if (request.Collection != "com.shinolabs.pinksea.oekaki") { - return new GetReposByCollectionResponse + return XrpcErrorOr.Ok(new GetReposByCollectionResponse { Repos = [] - }; + }); } var limit = Math.Clamp(request.Limit, 1, 2000); @@ -38,7 +38,7 @@ public class ListReposByCollectionQueryHandler(PinkSeaDbContext dbContext) .Take(limit) .ToListAsync(); - return new GetReposByCollectionResponse + return XrpcErrorOr.Ok(new GetReposByCollectionResponse { Repos = users.Select(user => new GetReposByCollectionResponse.Repo { @@ -48,6 +48,6 @@ public class ListReposByCollectionQueryHandler(PinkSeaDbContext dbContext) Cursor = users.Count > 0 ? HttpUtility.UrlEncode(users[^1].CreatedAt.ToString("o")) : null - }; + }); } } \ No newline at end of file diff --git a/PinkSea/Xrpc/PutOekakiProcedure.cs b/PinkSea/Xrpc/PutOekakiProcedure.cs index 0cc948c..5290920 100644 --- a/PinkSea/Xrpc/PutOekakiProcedure.cs +++ b/PinkSea/Xrpc/PutOekakiProcedure.cs @@ -16,27 +16,39 @@ public class PutOekakiProcedure( OekakiService oekakiService) : IXrpcProcedure { /// - public async Task Handle(UploadOekakiRequest request) + public async Task> Handle(UploadOekakiRequest request) { var state = contextAccessor.HttpContext?.GetStateToken(); if (state is null) - return null!; + return XrpcErrorOr.Fail("NoAuthToken", "Missing authorization token."); var result = await oekakiService.ProcessUploadedOekaki(request, state); return result.State switch { - OekakiUploadState.NotAuthorized => null!, - OekakiUploadState.NotAPng => null!, - OekakiUploadState.UploadTooBig => null!, - OekakiUploadState.FailedToUploadBlob => null!, - OekakiUploadState.FailedToUploadRecord => null!, - OekakiUploadState.ExceedsDimensions => null!, - _ => new PutOekakiProcedureResponse + OekakiUploadState.NotAuthorized => XrpcErrorOr.Fail( + result.State.ToString(), + "This user was not authorized to upload this oekaki."), + OekakiUploadState.NotAPng => XrpcErrorOr.Fail( + result.State.ToString(), + "This oekaki was not a PNG file."), + OekakiUploadState.UploadTooBig => XrpcErrorOr.Fail( + result.State.ToString(), + "This oekaki exceedes the size limit imposed by the lexicon."), + OekakiUploadState.FailedToUploadBlob => XrpcErrorOr.Fail( + result.State.ToString(), + "Failed to upload the blob to the user's PDS."), + OekakiUploadState.FailedToUploadRecord => XrpcErrorOr.Fail( + result.State.ToString(), + "Failed to upload the record to the user's PDS."), + OekakiUploadState.ExceedsDimensions => XrpcErrorOr.Fail( + result.State.ToString(), + "This oekaki exceeds the dimension limit imposed by the AppView."), + _ => XrpcErrorOr.Ok(new PutOekakiProcedureResponse { AtLink = $"at://{result.Oekaki!.AuthorDid}/com.shinolabs.pinksea.oekaki/{result.Oekaki.OekakiTid}", RecordKey = result.Oekaki.OekakiTid - } + }) }; } } \ No newline at end of file diff --git a/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs b/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs index 732be1a..7ba6231 100644 --- a/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs +++ b/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs @@ -20,27 +20,27 @@ public class RefreshSessionProcedureHandler( IHttpContextAccessor httpContextAccessor) : IXrpcProcedure { /// - public async Task Handle(Empty request) + public async Task> Handle(Empty request) { var stateId = httpContextAccessor.HttpContext?.GetStateToken(); if (stateId is null) - return null!; + return XrpcErrorOr.Fail("NoAuthToken", "Missing authorization token."); var state = await oauthStateStorageProvider.GetForStateId(stateId); if (state is null) - return null!; + return XrpcErrorOr.Fail("InvalidToken", "Invalid token."); if (state.AuthorizationType == AuthorizationType.PdsSession) { if (!await atProtoAuthorizationService.RefreshSession(stateId)) - return null!; + return XrpcErrorOr.Fail("SessionExpired", "Your session has expired, log in again."); } else { if (!await oauthClient.Refresh(stateId)) - return null!; + return XrpcErrorOr.Fail("SessionExpired", "Your session has expired, log in again."); } - return new Empty(); + return XrpcErrorOr.Ok(new Empty()); } } \ No newline at end of file From 21b3edf944e3b966ee072734f4f7b7e043d4a0f3 Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Tue, 25 Mar 2025 17:18:36 +0100 Subject: [PATCH 02/21] fix: stop erroring out on this event. --- .../Streaming/JetStream/Events/AtProtoIdentity.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PinkSea.AtProto/Streaming/JetStream/Events/AtProtoIdentity.cs b/PinkSea.AtProto/Streaming/JetStream/Events/AtProtoIdentity.cs index 241de3d..c989ab2 100644 --- a/PinkSea.AtProto/Streaming/JetStream/Events/AtProtoIdentity.cs +++ b/PinkSea.AtProto/Streaming/JetStream/Events/AtProtoIdentity.cs @@ -13,18 +13,18 @@ public class AtProtoIdentity [JsonPropertyName("did")] public required string Did { get; set; } - /// - /// The new handle of the DID. - /// - [JsonPropertyName("handle")] - public required string Handle { get; set; } - /// /// The sequence number. /// [JsonPropertyName("seq")] public required ulong SequenceNumber { get; set; } + /// + /// The new handle of the DID. + /// + [JsonPropertyName("handle")] + public string? Handle { get; set; } + /// /// The timestamp. /// From 877470d2fec126cb6e559a626b1067088806b2b2 Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Tue, 25 Mar 2025 17:24:19 +0100 Subject: [PATCH 03/21] fix: use the last time_us for playback. --- PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs b/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs index eeb5e34..f30db68 100644 --- a/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs +++ b/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs @@ -117,12 +117,6 @@ private async Task OnWebsocketMessage(ResponseMessage message) public async Task StopAsync(CancellationToken cancellationToken) { await _client!.Stop(WebSocketCloseStatus.NormalClosure, ""); - - // Save the last timestamp. - LastTimeInMicroseconds = DateTimeOffset - .UtcNow - .ToUnixTimeMilliseconds() * 1000; - await SaveCursorFile(); } From b41ebb5a84b514e6e29b7a9ac5e994e2b0304c86 Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Tue, 25 Mar 2025 17:53:42 +0100 Subject: [PATCH 04/21] feat: surround the login in try/catch. --- PinkSea.Frontend/src/components/LoginBar.vue | 30 +++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/PinkSea.Frontend/src/components/LoginBar.vue b/PinkSea.Frontend/src/components/LoginBar.vue index b9eee42..ee58794 100644 --- a/PinkSea.Frontend/src/components/LoginBar.vue +++ b/PinkSea.Frontend/src/components/LoginBar.vue @@ -10,21 +10,23 @@ const loginButton = useTemplateRef("login-button"); const beginOAuth = async () => { loginButton.value!.disabled = true; - const { data } = await xrpc.call("com.shinolabs.pinksea.beginLoginFlow", { - data: { - handle: handle.value, - redirectUrl: `${location.origin}/callback`, - - password: password.value.length > 0 - ? password.value - : null + try { + const { data } = await xrpc.call("com.shinolabs.pinksea.beginLoginFlow", { + data: { + handle: handle.value, + redirectUrl: `${location.origin}/callback`, + + password: password.value.length > 0 + ? password.value + : null + } + }); + + if (data.redirect !== null && data.redirect !== undefined) { + document.location = data.redirect; } - }); - - if (data.redirect !== null && data.redirect !== undefined) { - document.location = data.redirect; - } else { - alert(`Failed to log in: ${data.failureReason}`); + } catch (e) { + alert(`Failed to log in: ${e}`); loginButton.value!.disabled = false; } } From db336a4430e722fa9503ca4729f5878431e5272c Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Wed, 26 Mar 2025 18:58:36 +0100 Subject: [PATCH 05/21] refactor: move out models to a shared dll. --- PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj | 4 ++++ PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs | 1 + PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs | 2 ++ .../Xrpc/ServiceCollectionExtensions.cs | 1 + .../Lexicons/AtProto/CreateSessionResponse.cs | 2 +- .../Lexicons/AtProto/DeleteRecordRequest.cs | 2 +- .../Lexicons/AtProto/DeleteRecordResponse.cs | 4 ++-- .../Lexicons/AtProto/GetReposByCollectionRequest.cs | 2 +- .../Lexicons/AtProto/GetReposByCollectionResponse.cs | 2 +- .../Lexicons/AtProto/ListRecordsRequest.cs | 2 +- .../Lexicons/AtProto/ListRecordsResponse.cs | 2 +- .../Lexicons/AtProto/PutRecordRequest.cs | 2 +- .../Lexicons/AtProto/PutRecordResponse.cs | 4 ++-- .../Lexicons/AtProto/Records/SelfLabel.cs | 2 +- .../Lexicons/AtProto/Records/SelfLabels.cs | 2 +- .../Lexicons/AtProto/UploadBlobResponse.cs | 4 ++-- .../Lexicons/BaseLexiconObject.cs | 2 +- .../Lexicons/Bluesky/Records/AspectRatio.cs | 2 +- .../Lexicons/Bluesky/Records/Facet.cs | 2 +- .../Lexicons/Bluesky/Records/Image.cs | 4 ++-- .../Lexicons/Bluesky/Records/ImageEmbed.cs | 2 +- .../Lexicons/Bluesky/Records/LinkFacet.cs | 2 +- .../Lexicons/Bluesky/Records/Post.cs | 5 ++--- .../Lexicons/Bluesky/Records/Profile.cs | 4 ++-- .../Lexicons/Bluesky/Records/TagFacet.cs | 2 +- .../Lexicons/Types/Blob.cs | 2 +- .../Lexicons/Types/Commit.cs | 2 +- .../Lexicons/Types/Record.cs | 2 +- .../Lexicons/Types/Reference.cs | 2 +- .../Lexicons/Types/StrongRef.cs | 2 +- .../Lexicons/Types/Tid.cs | 2 +- .../Models/Did/DidDocument.cs | 3 +-- .../Models/Did/DidService.cs | 2 +- .../Models/Did/DidVerificationMethod.cs | 2 +- .../Models/ErrorOr.cs | 2 +- PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj | 9 +++++++++ .../Xrpc/XrpcError.cs | 2 +- .../Xrpc/XrpcErrorOr.cs | 2 +- .../Authorization/AtProtoAuthorizationService.cs | 4 ++-- .../Authorization/IAtProtoAuthorizationService.cs | 2 +- PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs | 2 +- PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs | 2 +- .../OAuth => OAuth/Models}/AuthorizationRequest.cs | 0 .../OAuth => OAuth/Models}/AuthorizationServer.cs | 0 .../Models}/AuthorizationType.cs | 0 .../{Models/OAuth => OAuth/Models}/ClientMetadata.cs | 0 .../{Models/OAuth => OAuth/Models}/DpopKeyPair.cs | 0 .../{Models/OAuth => OAuth/Models}/OAuthState.cs | 0 .../OAuth => OAuth/Models}/ProtectedResource.cs | 0 .../Models}/PushedAuthorizationRequestResponse.cs | 0 .../{Models/OAuth => OAuth/Models}/TokenRequest.cs | 0 .../{Models/OAuth => OAuth/Models}/TokenResponse.cs | 0 PinkSea.AtProto/PinkSea.AtProto.csproj | 4 ++++ PinkSea.AtProto/Resolvers/Did/DidResolver.cs | 2 +- PinkSea.AtProto/Resolvers/Did/IDidResolver.cs | 2 +- .../Streaming/JetStream/JetStreamListener.cs | 2 +- PinkSea.sln | 6 ++++++ PinkSea/Controllers/WellKnownController.cs | 3 +-- PinkSea/Lexicons/Records/Image.cs | 2 +- PinkSea/Lexicons/Records/Oekaki.cs | 2 +- .../Services/Hosting/FirstTimeRunAssistantService.cs | 2 +- .../Services/Integration/BlueskyIntegrationService.cs | 10 +++++----- PinkSea/Services/OekakiService.cs | 4 ++-- PinkSea/Xrpc/BeginLoginFlowProcedure.cs | 1 + PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs | 1 + PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs | 1 + PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs | 1 + PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs | 1 + PinkSea/Xrpc/GetIdentityQueryHandler.cs | 1 + PinkSea/Xrpc/GetOekakiQueryHandler.cs | 1 + PinkSea/Xrpc/GetParentForReplyQueryHandler.cs | 1 + PinkSea/Xrpc/GetRecentQueryHandler.cs | 1 + PinkSea/Xrpc/GetTagFeedQueryHandler.cs | 1 + PinkSea/Xrpc/InvalidateSessionProcedure.cs | 1 + PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs | 3 ++- PinkSea/Xrpc/PutOekakiProcedure.cs | 1 + PinkSea/Xrpc/RefreshSessionProcedureHandler.cs | 1 + 77 files changed, 100 insertions(+), 62 deletions(-) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/CreateSessionResponse.cs (94%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/DeleteRecordRequest.cs (92%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/DeleteRecordResponse.cs (76%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/GetReposByCollectionRequest.cs (90%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/GetReposByCollectionResponse.cs (93%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/ListRecordsRequest.cs (90%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/ListRecordsResponse.cs (95%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/PutRecordRequest.cs (93%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/PutRecordResponse.cs (89%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/Records/SelfLabel.cs (81%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/Records/SelfLabels.cs (88%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/AtProto/UploadBlobResponse.cs (71%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/BaseLexiconObject.cs (92%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/AspectRatio.cs (87%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/Facet.cs (93%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/Image.cs (84%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/ImageEmbed.cs (88%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/LinkFacet.cs (87%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/Post.cs (89%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/Profile.cs (86%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Bluesky/Records/TagFacet.cs (87%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Types/Blob.cs (93%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Types/Commit.cs (89%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Types/Record.cs (92%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Types/Reference.cs (84%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Types/StrongRef.cs (89%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Lexicons/Types/Tid.cs (97%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Models/Did/DidDocument.cs (96%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Models/Did/DidService.cs (87%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Models/Did/DidVerificationMethod.cs (90%) rename {PinkSea.AtProto => PinkSea.AtProto.Shared}/Models/ErrorOr.cs (96%) create mode 100644 PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj rename {PinkSea.AtProto.Server => PinkSea.AtProto.Shared}/Xrpc/XrpcError.cs (91%) rename {PinkSea.AtProto.Server => PinkSea.AtProto.Shared}/Xrpc/XrpcErrorOr.cs (98%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/AuthorizationRequest.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/AuthorizationServer.cs (100%) rename PinkSea.AtProto/{Models/Authorization => OAuth/Models}/AuthorizationType.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/ClientMetadata.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/DpopKeyPair.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/OAuthState.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/ProtectedResource.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/PushedAuthorizationRequestResponse.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/TokenRequest.cs (100%) rename PinkSea.AtProto/{Models/OAuth => OAuth/Models}/TokenResponse.cs (100%) diff --git a/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj b/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj index bab9a89..cf22ea4 100644 --- a/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj +++ b/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj @@ -11,4 +11,8 @@ + + + + diff --git a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs index a8f8430..68624a9 100644 --- a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs @@ -1,5 +1,6 @@ using System.Text.Json; using System.Text.Json.Serialization; +using PinkSea.AtProto.Shared.Xrpc; namespace PinkSea.AtProto.Server.Xrpc; diff --git a/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs b/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs index 0b3d7ae..9f04397 100644 --- a/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/IXrpcRequestHandler.cs @@ -1,3 +1,5 @@ +using PinkSea.AtProto.Shared.Xrpc; + namespace PinkSea.AtProto.Server.Xrpc; /// diff --git a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs index d52a1a2..2b276b3 100644 --- a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs +++ b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs @@ -1,5 +1,6 @@ using System.Reflection; using Microsoft.AspNetCore.Mvc; +using PinkSea.AtProto.Shared.Xrpc; namespace PinkSea.AtProto.Server.Xrpc; diff --git a/PinkSea.AtProto/Lexicons/AtProto/CreateSessionResponse.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/CreateSessionResponse.cs similarity index 94% rename from PinkSea.AtProto/Lexicons/AtProto/CreateSessionResponse.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/CreateSessionResponse.cs index 237fa57..8710ffe 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/CreateSessionResponse.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/CreateSessionResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The response for the "com.atproto.server.createSession" xrpc call. diff --git a/PinkSea.AtProto/Lexicons/AtProto/DeleteRecordRequest.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/DeleteRecordRequest.cs similarity index 92% rename from PinkSea.AtProto/Lexicons/AtProto/DeleteRecordRequest.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/DeleteRecordRequest.cs index 922d89a..c05cf19 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/DeleteRecordRequest.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/DeleteRecordRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The request for the "com.atproto.repo.deleteRecord" xrpc procedure. diff --git a/PinkSea.AtProto/Lexicons/AtProto/DeleteRecordResponse.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/DeleteRecordResponse.cs similarity index 76% rename from PinkSea.AtProto/Lexicons/AtProto/DeleteRecordResponse.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/DeleteRecordResponse.cs index 6e6a3c3..bdababb 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/DeleteRecordResponse.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/DeleteRecordResponse.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The response produced by "com.atproto.repo.deleteRecord". diff --git a/PinkSea.AtProto/Lexicons/AtProto/GetReposByCollectionRequest.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/GetReposByCollectionRequest.cs similarity index 90% rename from PinkSea.AtProto/Lexicons/AtProto/GetReposByCollectionRequest.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/GetReposByCollectionRequest.cs index ebaaac7..3dfb53b 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/GetReposByCollectionRequest.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/GetReposByCollectionRequest.cs @@ -1,4 +1,4 @@ -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The request for the "com.atproto.sync.listReposByCollection" XRPC call. diff --git a/PinkSea.AtProto/Lexicons/AtProto/GetReposByCollectionResponse.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/GetReposByCollectionResponse.cs similarity index 93% rename from PinkSea.AtProto/Lexicons/AtProto/GetReposByCollectionResponse.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/GetReposByCollectionResponse.cs index 93612bf..5d9372b 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/GetReposByCollectionResponse.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/GetReposByCollectionResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// A response for the "com.atproto.sync.listReposByCollection" XRPC call. diff --git a/PinkSea.AtProto/Lexicons/AtProto/ListRecordsRequest.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/ListRecordsRequest.cs similarity index 90% rename from PinkSea.AtProto/Lexicons/AtProto/ListRecordsRequest.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/ListRecordsRequest.cs index a3e01ff..3a8c31c 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/ListRecordsRequest.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/ListRecordsRequest.cs @@ -1,4 +1,4 @@ -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The request for the "com.atproto.repo.listRecords" XRPC call. diff --git a/PinkSea.AtProto/Lexicons/AtProto/ListRecordsResponse.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/ListRecordsResponse.cs similarity index 95% rename from PinkSea.AtProto/Lexicons/AtProto/ListRecordsResponse.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/ListRecordsResponse.cs index 35cf63c..0746c52 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/ListRecordsResponse.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/ListRecordsResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// Response for the "com.atproto.repo.listRecords" XRPC call. diff --git a/PinkSea.AtProto/Lexicons/AtProto/PutRecordRequest.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/PutRecordRequest.cs similarity index 93% rename from PinkSea.AtProto/Lexicons/AtProto/PutRecordRequest.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/PutRecordRequest.cs index 92b73fa..7ae4f2b 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/PutRecordRequest.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/PutRecordRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The "com.atproto.repo.putRecord" request. diff --git a/PinkSea.AtProto/Lexicons/AtProto/PutRecordResponse.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/PutRecordResponse.cs similarity index 89% rename from PinkSea.AtProto/Lexicons/AtProto/PutRecordResponse.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/PutRecordResponse.cs index cbaf9a0..95ab228 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/PutRecordResponse.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/PutRecordResponse.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The response produced by "com.atproto.repo.putRecord". diff --git a/PinkSea.AtProto/Lexicons/AtProto/Records/SelfLabel.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/Records/SelfLabel.cs similarity index 81% rename from PinkSea.AtProto/Lexicons/AtProto/Records/SelfLabel.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/Records/SelfLabel.cs index ea3dcb7..3bad6c7 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/Records/SelfLabel.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/Records/SelfLabel.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto.Records; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto.Records; /// /// A self label. diff --git a/PinkSea.AtProto/Lexicons/AtProto/Records/SelfLabels.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/Records/SelfLabels.cs similarity index 88% rename from PinkSea.AtProto/Lexicons/AtProto/Records/SelfLabels.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/Records/SelfLabels.cs index 962b568..60c1453 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/Records/SelfLabels.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/Records/SelfLabels.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.AtProto.Records; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto.Records; /// /// The self-labels. diff --git a/PinkSea.AtProto/Lexicons/AtProto/UploadBlobResponse.cs b/PinkSea.AtProto.Shared/Lexicons/AtProto/UploadBlobResponse.cs similarity index 71% rename from PinkSea.AtProto/Lexicons/AtProto/UploadBlobResponse.cs rename to PinkSea.AtProto.Shared/Lexicons/AtProto/UploadBlobResponse.cs index 644d778..c9b6138 100644 --- a/PinkSea.AtProto/Lexicons/AtProto/UploadBlobResponse.cs +++ b/PinkSea.AtProto.Shared/Lexicons/AtProto/UploadBlobResponse.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; -namespace PinkSea.AtProto.Lexicons.AtProto; +namespace PinkSea.AtProto.Shared.Lexicons.AtProto; /// /// The response produced by "com.atproto.repo.uploadBlob". diff --git a/PinkSea.AtProto/Lexicons/BaseLexiconObject.cs b/PinkSea.AtProto.Shared/Lexicons/BaseLexiconObject.cs similarity index 92% rename from PinkSea.AtProto/Lexicons/BaseLexiconObject.cs rename to PinkSea.AtProto.Shared/Lexicons/BaseLexiconObject.cs index 853bce1..5dd66cf 100644 --- a/PinkSea.AtProto/Lexicons/BaseLexiconObject.cs +++ b/PinkSea.AtProto.Shared/Lexicons/BaseLexiconObject.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons; +namespace PinkSea.AtProto.Shared.Lexicons; /// /// The base lexicon object. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/AspectRatio.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/AspectRatio.cs similarity index 87% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/AspectRatio.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/AspectRatio.cs index d2a4b1e..4b09ea9 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/AspectRatio.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/AspectRatio.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// The aspect ratio of the image. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/Facet.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Facet.cs similarity index 93% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/Facet.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Facet.cs index a764bd3..b73481d 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/Facet.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Facet.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// A facet. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/Image.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Image.cs similarity index 84% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/Image.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Image.cs index fef16f8..d034350 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/Image.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Image.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// The image kept within image embed. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/ImageEmbed.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/ImageEmbed.cs similarity index 88% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/ImageEmbed.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/ImageEmbed.cs index 1f37096..a5d00c3 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/ImageEmbed.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/ImageEmbed.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// An image embed. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/LinkFacet.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/LinkFacet.cs similarity index 87% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/LinkFacet.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/LinkFacet.cs index 1c146a3..78b5d23 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/LinkFacet.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/LinkFacet.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// A link facet. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/Post.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Post.cs similarity index 89% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/Post.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Post.cs index 4dd008e..a5ef2f6 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/Post.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Post.cs @@ -1,8 +1,7 @@ -using System.Diagnostics.CodeAnalysis; using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.AtProto.Records; +using PinkSea.AtProto.Shared.Lexicons.AtProto.Records; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// A Bluesky post record. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/Profile.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Profile.cs similarity index 86% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/Profile.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Profile.cs index 71bb980..8da7718 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/Profile.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/Profile.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// The profile record. diff --git a/PinkSea.AtProto/Lexicons/Bluesky/Records/TagFacet.cs b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/TagFacet.cs similarity index 87% rename from PinkSea.AtProto/Lexicons/Bluesky/Records/TagFacet.cs rename to PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/TagFacet.cs index 7c47af5..c6b844d 100644 --- a/PinkSea.AtProto/Lexicons/Bluesky/Records/TagFacet.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Bluesky/Records/TagFacet.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Bluesky.Records; +namespace PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; /// /// A tag facet. diff --git a/PinkSea.AtProto/Lexicons/Types/Blob.cs b/PinkSea.AtProto.Shared/Lexicons/Types/Blob.cs similarity index 93% rename from PinkSea.AtProto/Lexicons/Types/Blob.cs rename to PinkSea.AtProto.Shared/Lexicons/Types/Blob.cs index 45d46ca..cd82385 100644 --- a/PinkSea.AtProto/Lexicons/Types/Blob.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Types/Blob.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Types; +namespace PinkSea.AtProto.Shared.Lexicons.Types; /// /// An AT protocol blob. diff --git a/PinkSea.AtProto/Lexicons/Types/Commit.cs b/PinkSea.AtProto.Shared/Lexicons/Types/Commit.cs similarity index 89% rename from PinkSea.AtProto/Lexicons/Types/Commit.cs rename to PinkSea.AtProto.Shared/Lexicons/Types/Commit.cs index b36dd3d..8d05c93 100644 --- a/PinkSea.AtProto/Lexicons/Types/Commit.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Types/Commit.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Types; +namespace PinkSea.AtProto.Shared.Lexicons.Types; /// /// A commit to a repo. diff --git a/PinkSea.AtProto/Lexicons/Types/Record.cs b/PinkSea.AtProto.Shared/Lexicons/Types/Record.cs similarity index 92% rename from PinkSea.AtProto/Lexicons/Types/Record.cs rename to PinkSea.AtProto.Shared/Lexicons/Types/Record.cs index 3a3894c..35ccc48 100644 --- a/PinkSea.AtProto/Lexicons/Types/Record.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Types/Record.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Types; +namespace PinkSea.AtProto.Shared.Lexicons.Types; /// /// An AT Protocol record. diff --git a/PinkSea.AtProto/Lexicons/Types/Reference.cs b/PinkSea.AtProto.Shared/Lexicons/Types/Reference.cs similarity index 84% rename from PinkSea.AtProto/Lexicons/Types/Reference.cs rename to PinkSea.AtProto.Shared/Lexicons/Types/Reference.cs index 420acb8..0fcfb0a 100644 --- a/PinkSea.AtProto/Lexicons/Types/Reference.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Types/Reference.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Types; +namespace PinkSea.AtProto.Shared.Lexicons.Types; /// /// An AT protocol reference. diff --git a/PinkSea.AtProto/Lexicons/Types/StrongRef.cs b/PinkSea.AtProto.Shared/Lexicons/Types/StrongRef.cs similarity index 89% rename from PinkSea.AtProto/Lexicons/Types/StrongRef.cs rename to PinkSea.AtProto.Shared/Lexicons/Types/StrongRef.cs index dc90494..d0c35d3 100644 --- a/PinkSea.AtProto/Lexicons/Types/StrongRef.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Types/StrongRef.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Lexicons.Types; +namespace PinkSea.AtProto.Shared.Lexicons.Types; /// /// A URI with a content-hash fingerprint. diff --git a/PinkSea.AtProto/Lexicons/Types/Tid.cs b/PinkSea.AtProto.Shared/Lexicons/Types/Tid.cs similarity index 97% rename from PinkSea.AtProto/Lexicons/Types/Tid.cs rename to PinkSea.AtProto.Shared/Lexicons/Types/Tid.cs index 34bea16..0eeea6e 100644 --- a/PinkSea.AtProto/Lexicons/Types/Tid.cs +++ b/PinkSea.AtProto.Shared/Lexicons/Types/Tid.cs @@ -1,6 +1,6 @@ using System.Security.Cryptography; -namespace PinkSea.AtProto.Lexicons.Types; +namespace PinkSea.AtProto.Shared.Lexicons.Types; /// /// An AT protocol time-based ID. diff --git a/PinkSea.AtProto/Models/Did/DidDocument.cs b/PinkSea.AtProto.Shared/Models/Did/DidDocument.cs similarity index 96% rename from PinkSea.AtProto/Models/Did/DidDocument.cs rename to PinkSea.AtProto.Shared/Models/Did/DidDocument.cs index c82bfc9..429ffc6 100644 --- a/PinkSea.AtProto/Models/Did/DidDocument.cs +++ b/PinkSea.AtProto.Shared/Models/Did/DidDocument.cs @@ -1,7 +1,6 @@ -using System.Text.Json; using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Models.Did; +namespace PinkSea.AtProto.Shared.Models.Did; /// /// A DID document. diff --git a/PinkSea.AtProto/Models/Did/DidService.cs b/PinkSea.AtProto.Shared/Models/Did/DidService.cs similarity index 87% rename from PinkSea.AtProto/Models/Did/DidService.cs rename to PinkSea.AtProto.Shared/Models/Did/DidService.cs index b0edf91..fc128e2 100644 --- a/PinkSea.AtProto/Models/Did/DidService.cs +++ b/PinkSea.AtProto.Shared/Models/Did/DidService.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Models.Did; +namespace PinkSea.AtProto.Shared.Models.Did; public class DidService { diff --git a/PinkSea.AtProto/Models/Did/DidVerificationMethod.cs b/PinkSea.AtProto.Shared/Models/Did/DidVerificationMethod.cs similarity index 90% rename from PinkSea.AtProto/Models/Did/DidVerificationMethod.cs rename to PinkSea.AtProto.Shared/Models/Did/DidVerificationMethod.cs index f5985ea..1594296 100644 --- a/PinkSea.AtProto/Models/Did/DidVerificationMethod.cs +++ b/PinkSea.AtProto.Shared/Models/Did/DidVerificationMethod.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Models.Did; +namespace PinkSea.AtProto.Shared.Models.Did; public class DidVerificationMethod { diff --git a/PinkSea.AtProto/Models/ErrorOr.cs b/PinkSea.AtProto.Shared/Models/ErrorOr.cs similarity index 96% rename from PinkSea.AtProto/Models/ErrorOr.cs rename to PinkSea.AtProto.Shared/Models/ErrorOr.cs index 2331c5a..51212c4 100644 --- a/PinkSea.AtProto/Models/ErrorOr.cs +++ b/PinkSea.AtProto.Shared/Models/ErrorOr.cs @@ -1,4 +1,4 @@ -namespace PinkSea.AtProto.Models; +namespace PinkSea.AtProto.Shared.Models; /// /// A type that represents either an error or a value. diff --git a/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj b/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj new file mode 100644 index 0000000..3a63532 --- /dev/null +++ b/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/PinkSea.AtProto.Server/Xrpc/XrpcError.cs b/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs similarity index 91% rename from PinkSea.AtProto.Server/Xrpc/XrpcError.cs rename to PinkSea.AtProto.Shared/Xrpc/XrpcError.cs index dbc90aa..5c0fd07 100644 --- a/PinkSea.AtProto.Server/Xrpc/XrpcError.cs +++ b/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Server.Xrpc; +namespace PinkSea.AtProto.Shared.Xrpc; /// /// Simple model describing an XRPC error. diff --git a/PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs b/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs similarity index 98% rename from PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs rename to PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs index d296cfc..78caf02 100644 --- a/PinkSea.AtProto.Server/Xrpc/XrpcErrorOr.cs +++ b/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs @@ -1,4 +1,4 @@ -namespace PinkSea.AtProto.Server.Xrpc; +namespace PinkSea.AtProto.Shared.Xrpc; /// /// Signifies a successful or failed XRPC call invocation. diff --git a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs index 901ea79..a96e044 100644 --- a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs +++ b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs @@ -2,13 +2,13 @@ using System.Net.Http.Json; using Microsoft.Extensions.Logging; using PinkSea.AtProto.Helpers; -using PinkSea.AtProto.Lexicons.AtProto; -using PinkSea.AtProto.Models; using PinkSea.AtProto.Models.Authorization; using PinkSea.AtProto.Models.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Resolvers.Domain; +using PinkSea.AtProto.Shared.Lexicons.AtProto; +using PinkSea.AtProto.Shared.Models; using PinkSea.AtProto.Xrpc.Client; namespace PinkSea.AtProto.Authorization; diff --git a/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs b/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs index 628f78a..25f0eba 100644 --- a/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs +++ b/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs @@ -1,4 +1,4 @@ -using PinkSea.AtProto.Models; +using PinkSea.AtProto.Shared.Models; namespace PinkSea.AtProto.Authorization; diff --git a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs index 8213bbe..925dbb8 100644 --- a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs @@ -6,13 +6,13 @@ using Microsoft.IdentityModel.Tokens; using PinkSea.AtProto.Helpers; using PinkSea.AtProto.Http; -using PinkSea.AtProto.Models; using PinkSea.AtProto.Models.Authorization; using PinkSea.AtProto.Models.OAuth; using PinkSea.AtProto.Providers.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Resolvers.Domain; +using PinkSea.AtProto.Shared.Models; namespace PinkSea.AtProto.OAuth; diff --git a/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs index 9171380..6ed9303 100644 --- a/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs @@ -1,5 +1,5 @@ -using PinkSea.AtProto.Models; using PinkSea.AtProto.Models.OAuth; +using PinkSea.AtProto.Shared.Models; namespace PinkSea.AtProto.OAuth; diff --git a/PinkSea.AtProto/Models/OAuth/AuthorizationRequest.cs b/PinkSea.AtProto/OAuth/Models/AuthorizationRequest.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/AuthorizationRequest.cs rename to PinkSea.AtProto/OAuth/Models/AuthorizationRequest.cs diff --git a/PinkSea.AtProto/Models/OAuth/AuthorizationServer.cs b/PinkSea.AtProto/OAuth/Models/AuthorizationServer.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/AuthorizationServer.cs rename to PinkSea.AtProto/OAuth/Models/AuthorizationServer.cs diff --git a/PinkSea.AtProto/Models/Authorization/AuthorizationType.cs b/PinkSea.AtProto/OAuth/Models/AuthorizationType.cs similarity index 100% rename from PinkSea.AtProto/Models/Authorization/AuthorizationType.cs rename to PinkSea.AtProto/OAuth/Models/AuthorizationType.cs diff --git a/PinkSea.AtProto/Models/OAuth/ClientMetadata.cs b/PinkSea.AtProto/OAuth/Models/ClientMetadata.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/ClientMetadata.cs rename to PinkSea.AtProto/OAuth/Models/ClientMetadata.cs diff --git a/PinkSea.AtProto/Models/OAuth/DpopKeyPair.cs b/PinkSea.AtProto/OAuth/Models/DpopKeyPair.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/DpopKeyPair.cs rename to PinkSea.AtProto/OAuth/Models/DpopKeyPair.cs diff --git a/PinkSea.AtProto/Models/OAuth/OAuthState.cs b/PinkSea.AtProto/OAuth/Models/OAuthState.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/OAuthState.cs rename to PinkSea.AtProto/OAuth/Models/OAuthState.cs diff --git a/PinkSea.AtProto/Models/OAuth/ProtectedResource.cs b/PinkSea.AtProto/OAuth/Models/ProtectedResource.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/ProtectedResource.cs rename to PinkSea.AtProto/OAuth/Models/ProtectedResource.cs diff --git a/PinkSea.AtProto/Models/OAuth/PushedAuthorizationRequestResponse.cs b/PinkSea.AtProto/OAuth/Models/PushedAuthorizationRequestResponse.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/PushedAuthorizationRequestResponse.cs rename to PinkSea.AtProto/OAuth/Models/PushedAuthorizationRequestResponse.cs diff --git a/PinkSea.AtProto/Models/OAuth/TokenRequest.cs b/PinkSea.AtProto/OAuth/Models/TokenRequest.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/TokenRequest.cs rename to PinkSea.AtProto/OAuth/Models/TokenRequest.cs diff --git a/PinkSea.AtProto/Models/OAuth/TokenResponse.cs b/PinkSea.AtProto/OAuth/Models/TokenResponse.cs similarity index 100% rename from PinkSea.AtProto/Models/OAuth/TokenResponse.cs rename to PinkSea.AtProto/OAuth/Models/TokenResponse.cs diff --git a/PinkSea.AtProto/PinkSea.AtProto.csproj b/PinkSea.AtProto/PinkSea.AtProto.csproj index 8cb2bb1..7254500 100644 --- a/PinkSea.AtProto/PinkSea.AtProto.csproj +++ b/PinkSea.AtProto/PinkSea.AtProto.csproj @@ -18,4 +18,8 @@ + + + + diff --git a/PinkSea.AtProto/Resolvers/Did/DidResolver.cs b/PinkSea.AtProto/Resolvers/Did/DidResolver.cs index d09d195..5106ec5 100644 --- a/PinkSea.AtProto/Resolvers/Did/DidResolver.cs +++ b/PinkSea.AtProto/Resolvers/Did/DidResolver.cs @@ -1,7 +1,7 @@ using System.Net.Http.Json; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; -using PinkSea.AtProto.Models.Did; +using PinkSea.AtProto.Shared.Models.Did; namespace PinkSea.AtProto.Resolvers.Did; diff --git a/PinkSea.AtProto/Resolvers/Did/IDidResolver.cs b/PinkSea.AtProto/Resolvers/Did/IDidResolver.cs index 2dcc887..8cb963b 100644 --- a/PinkSea.AtProto/Resolvers/Did/IDidResolver.cs +++ b/PinkSea.AtProto/Resolvers/Did/IDidResolver.cs @@ -1,4 +1,4 @@ -using PinkSea.AtProto.Models.Did; +using PinkSea.AtProto.Shared.Models.Did; namespace PinkSea.AtProto.Resolvers.Did; diff --git a/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs b/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs index f30db68..36bd23a 100644 --- a/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs +++ b/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs @@ -103,7 +103,7 @@ private async Task OnWebsocketMessage(ResponseMessage message) LastTimeInMicroseconds = @event.TimeInMicroseconds; await SaveCursorFile(); - + foreach (var listener in listeners) await listener.HandleEvent(@event); } diff --git a/PinkSea.sln b/PinkSea.sln index 5bf2470..7349f18 100644 --- a/PinkSea.sln +++ b/PinkSea.sln @@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PinkSea.AtProto", "PinkSea. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PinkSea.AtProto.Server", "PinkSea.AtProto.Server\PinkSea.AtProto.Server.csproj", "{6FE0DEC1-C8FF-45CC-BD8C-29EF2CD13D34}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PinkSea.AtProto.Shared", "PinkSea.AtProto.Shared\PinkSea.AtProto.Shared.csproj", "{AEE524FB-E9E9-43EF-8597-5C243F5C509C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -24,5 +26,9 @@ Global {6FE0DEC1-C8FF-45CC-BD8C-29EF2CD13D34}.Debug|Any CPU.Build.0 = Debug|Any CPU {6FE0DEC1-C8FF-45CC-BD8C-29EF2CD13D34}.Release|Any CPU.ActiveCfg = Release|Any CPU {6FE0DEC1-C8FF-45CC-BD8C-29EF2CD13D34}.Release|Any CPU.Build.0 = Release|Any CPU + {AEE524FB-E9E9-43EF-8597-5C243F5C509C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEE524FB-E9E9-43EF-8597-5C243F5C509C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEE524FB-E9E9-43EF-8597-5C243F5C509C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEE524FB-E9E9-43EF-8597-5C243F5C509C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/PinkSea/Controllers/WellKnownController.cs b/PinkSea/Controllers/WellKnownController.cs index f184b31..a235a4e 100644 --- a/PinkSea/Controllers/WellKnownController.cs +++ b/PinkSea/Controllers/WellKnownController.cs @@ -1,7 +1,6 @@ -using System.Text.Json; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; -using PinkSea.AtProto.Models.Did; +using PinkSea.AtProto.Shared.Models.Did; using PinkSea.Models; namespace PinkSea.Controllers; diff --git a/PinkSea/Lexicons/Records/Image.cs b/PinkSea/Lexicons/Records/Image.cs index 1c8d905..b4f099a 100644 --- a/PinkSea/Lexicons/Records/Image.cs +++ b/PinkSea/Lexicons/Records/Image.cs @@ -1,5 +1,5 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; namespace PinkSea.Lexicons.Records; diff --git a/PinkSea/Lexicons/Records/Oekaki.cs b/PinkSea/Lexicons/Records/Oekaki.cs index 6827e9d..3813511 100644 --- a/PinkSea/Lexicons/Records/Oekaki.cs +++ b/PinkSea/Lexicons/Records/Oekaki.cs @@ -1,5 +1,5 @@ using System.Text.Json.Serialization; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.Types; namespace PinkSea.Lexicons.Records; diff --git a/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs b/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs index dcb0715..4ad0b65 100644 --- a/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs +++ b/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs @@ -1,8 +1,8 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; using Npgsql; -using PinkSea.AtProto.Lexicons.AtProto; using PinkSea.AtProto.Resolvers.Did; +using PinkSea.AtProto.Shared.Lexicons.AtProto; using PinkSea.AtProto.Xrpc.Client; using PinkSea.Database; using PinkSea.Helpers; diff --git a/PinkSea/Services/Integration/BlueskyIntegrationService.cs b/PinkSea/Services/Integration/BlueskyIntegrationService.cs index d99a879..1c35b3b 100644 --- a/PinkSea/Services/Integration/BlueskyIntegrationService.cs +++ b/PinkSea/Services/Integration/BlueskyIntegrationService.cs @@ -1,15 +1,15 @@ using System.Text; using System.Text.RegularExpressions; using Microsoft.Extensions.Options; -using PinkSea.AtProto.Lexicons.AtProto; -using PinkSea.AtProto.Lexicons.AtProto.Records; -using PinkSea.AtProto.Lexicons.Bluesky.Records; -using PinkSea.AtProto.Lexicons.Types; using PinkSea.AtProto.Providers.Storage; +using PinkSea.AtProto.Shared.Lexicons.AtProto; +using PinkSea.AtProto.Shared.Lexicons.AtProto.Records; +using PinkSea.AtProto.Shared.Lexicons.Bluesky.Records; +using PinkSea.AtProto.Shared.Lexicons.Types; using PinkSea.AtProto.Xrpc.Client; using PinkSea.Lexicons.Records; using PinkSea.Models; -using Image = PinkSea.AtProto.Lexicons.Bluesky.Records.Image; +using Image = PinkSea.AtProto.Shared.Lexicons.Bluesky.Records.Image; namespace PinkSea.Services.Integration; diff --git a/PinkSea/Services/OekakiService.cs b/PinkSea/Services/OekakiService.cs index 7c0ecd7..5185221 100644 --- a/PinkSea/Services/OekakiService.cs +++ b/PinkSea/Services/OekakiService.cs @@ -1,8 +1,8 @@ using System.Text.RegularExpressions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; -using PinkSea.AtProto.Lexicons.AtProto; -using PinkSea.AtProto.Lexicons.Types; +using PinkSea.AtProto.Shared.Lexicons.AtProto; +using PinkSea.AtProto.Shared.Lexicons.Types; using PinkSea.AtProto.Models.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Resolvers.Domain; diff --git a/PinkSea/Xrpc/BeginLoginFlowProcedure.cs b/PinkSea/Xrpc/BeginLoginFlowProcedure.cs index a73195f..9cdd900 100644 --- a/PinkSea/Xrpc/BeginLoginFlowProcedure.cs +++ b/PinkSea/Xrpc/BeginLoginFlowProcedure.cs @@ -1,6 +1,7 @@ using PinkSea.AtProto.Authorization; using PinkSea.AtProto.OAuth; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Lexicons.Procedures; namespace PinkSea.Xrpc; diff --git a/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs b/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs index fb6e5f8..9921f54 100644 --- a/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs +++ b/PinkSea/Xrpc/DeleteOekakiProcedureHandler.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Extensions; using PinkSea.Lexicons; using PinkSea.Lexicons.Procedures; diff --git a/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs b/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs index a405cf8..c869fc4 100644 --- a/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs +++ b/PinkSea/Xrpc/GetAuthorFeedQueryHandler.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Lexicons.Queries; using PinkSea.Services; diff --git a/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs b/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs index 5fcfb38..a43701a 100644 --- a/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs +++ b/PinkSea/Xrpc/GetAuthorRepliesQueryHandler.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Lexicons.Queries; using PinkSea.Services; diff --git a/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs b/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs index 00f41c3..f3d0ad8 100644 --- a/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs +++ b/PinkSea/Xrpc/GetHandleFromDidQueryHandler.cs @@ -1,5 +1,6 @@ using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Lexicons.Queries; namespace PinkSea.Xrpc; diff --git a/PinkSea/Xrpc/GetIdentityQueryHandler.cs b/PinkSea/Xrpc/GetIdentityQueryHandler.cs index 5b9047c..6d444d3 100644 --- a/PinkSea/Xrpc/GetIdentityQueryHandler.cs +++ b/PinkSea/Xrpc/GetIdentityQueryHandler.cs @@ -4,6 +4,7 @@ using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Extensions; using PinkSea.Lexicons.Queries; diff --git a/PinkSea/Xrpc/GetOekakiQueryHandler.cs b/PinkSea/Xrpc/GetOekakiQueryHandler.cs index d5458cf..90edbf4 100644 --- a/PinkSea/Xrpc/GetOekakiQueryHandler.cs +++ b/PinkSea/Xrpc/GetOekakiQueryHandler.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Options; using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Database; using PinkSea.Lexicons.Objects; using PinkSea.Lexicons.Queries; diff --git a/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs b/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs index 75c6955..a633442 100644 --- a/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs +++ b/PinkSea/Xrpc/GetParentForReplyQueryHandler.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Database; using PinkSea.Lexicons.Queries; diff --git a/PinkSea/Xrpc/GetRecentQueryHandler.cs b/PinkSea/Xrpc/GetRecentQueryHandler.cs index 52244ed..72eaace 100644 --- a/PinkSea/Xrpc/GetRecentQueryHandler.cs +++ b/PinkSea/Xrpc/GetRecentQueryHandler.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Lexicons.Queries; using PinkSea.Services; diff --git a/PinkSea/Xrpc/GetTagFeedQueryHandler.cs b/PinkSea/Xrpc/GetTagFeedQueryHandler.cs index 60dbded..8d23ceb 100644 --- a/PinkSea/Xrpc/GetTagFeedQueryHandler.cs +++ b/PinkSea/Xrpc/GetTagFeedQueryHandler.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Lexicons.Queries; using PinkSea.Services; diff --git a/PinkSea/Xrpc/InvalidateSessionProcedure.cs b/PinkSea/Xrpc/InvalidateSessionProcedure.cs index 52a71e8..c67cac8 100644 --- a/PinkSea/Xrpc/InvalidateSessionProcedure.cs +++ b/PinkSea/Xrpc/InvalidateSessionProcedure.cs @@ -1,5 +1,6 @@ using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Extensions; using PinkSea.Lexicons; diff --git a/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs b/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs index 9d65e93..5886e71 100644 --- a/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs +++ b/PinkSea/Xrpc/ListReposByCollectionQueryHandler.cs @@ -1,7 +1,8 @@ using System.Web; using Microsoft.EntityFrameworkCore; -using PinkSea.AtProto.Lexicons.AtProto; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Lexicons.AtProto; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Database; namespace PinkSea.Xrpc; diff --git a/PinkSea/Xrpc/PutOekakiProcedure.cs b/PinkSea/Xrpc/PutOekakiProcedure.cs index 5290920..3a9786c 100644 --- a/PinkSea/Xrpc/PutOekakiProcedure.cs +++ b/PinkSea/Xrpc/PutOekakiProcedure.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Extensions; using PinkSea.Lexicons.Procedures; using PinkSea.Models; diff --git a/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs b/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs index 7ba6231..bdaf8e1 100644 --- a/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs +++ b/PinkSea/Xrpc/RefreshSessionProcedureHandler.cs @@ -3,6 +3,7 @@ using PinkSea.AtProto.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Server.Xrpc; +using PinkSea.AtProto.Shared.Xrpc; using PinkSea.Extensions; using PinkSea.Lexicons; From 4c21585a2164ae08b8d727a4af96bc1155e1a7bd Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Wed, 26 Mar 2025 19:24:08 +0100 Subject: [PATCH 06/21] refactor: implement the XRPC client in a more sane way. --- PinkSea.AtProto.Shared/Xrpc/XrpcError.cs | 8 ++- PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs | 2 +- .../AtProtoAuthorizationService.cs | 39 ++++++------- .../Xrpc/Client/BasicXrpcClient.cs | 51 ++++------------- PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs | 54 ++++-------------- .../Xrpc/Client/DefaultXrpcClientFactory.cs | 10 ++-- PinkSea.AtProto/Xrpc/Client/IXrpcClient.cs | 8 ++- .../Xrpc/Client/SessionXrpcClient.cs | 55 ++++--------------- .../HttpResponseMessageExtensions.cs | 49 +++++++++++++++++ .../Xrpc/Extensions/ObjectExtensions.cs | 28 ++++++++++ PinkSea.AtProto/Xrpc/XrpcErrorOr.cs | 6 -- .../Hosting/FirstTimeRunAssistantService.cs | 22 +++++--- PinkSea/Services/OekakiService.cs | 6 +- 13 files changed, 166 insertions(+), 172 deletions(-) create mode 100644 PinkSea.AtProto/Xrpc/Extensions/HttpResponseMessageExtensions.cs create mode 100644 PinkSea.AtProto/Xrpc/Extensions/ObjectExtensions.cs delete mode 100644 PinkSea.AtProto/Xrpc/XrpcErrorOr.cs diff --git a/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs b/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs index 5c0fd07..553f0ea 100644 --- a/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs +++ b/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs @@ -5,7 +5,7 @@ namespace PinkSea.AtProto.Shared.Xrpc; /// /// Simple model describing an XRPC error. /// -public class XrpcError +public sealed class XrpcError { /// /// The error type. @@ -18,4 +18,10 @@ public class XrpcError /// [JsonPropertyName("message")] public string? Message { get; set; } + + /// + public override string ToString() + { + return $"[{Error}] > {Message}"; + } } \ No newline at end of file diff --git a/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs b/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs index 78caf02..a8aefdc 100644 --- a/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs +++ b/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs @@ -72,7 +72,7 @@ public interface IXrpcErrorOr /// /// The error. /// - XrpcError Error { get; } + XrpcError? Error { get; } /// /// Gets either the error or the value. diff --git a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs index a96e044..0b9aad9 100644 --- a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs +++ b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs @@ -1,5 +1,4 @@ using System.IdentityModel.Tokens.Jwt; -using System.Net.Http.Json; using Microsoft.Extensions.Logging; using PinkSea.AtProto.Helpers; using PinkSea.AtProto.Models.Authorization; @@ -20,15 +19,12 @@ public class AtProtoAuthorizationService( IDidResolver didResolver, IDomainDidResolver domainDidResolver, IOAuthStateStorageProvider oauthStateStorageProvider, - IHttpClientFactory httpClientFactory, IXrpcClientFactory xrpcClientFactory, ILogger logger) : IAtProtoAuthorizationService { /// public async Task> LoginWithPassword(string handle, string password) { - const string endpoint = "/xrpc/com.atproto.server.createSession"; - var identifier = handle.StartsWith("did") ? handle : await domainDidResolver.GetDidForDomainHandle(handle); @@ -41,24 +37,23 @@ public async Task> LoginWithPassword(string handle, string passw return ErrorOr.Fail($"Could not fetch the DID document for {identifier}."); var pds = didDocument.GetPds()!; - using var httpClient = httpClientFactory.CreateClient(); - - var resp = await httpClient.PostAsJsonAsync($"{pds}{endpoint}", new - { - identifier, - password - }); + using var xrpcClient = await xrpcClientFactory.GetWithoutAuthentication(pds); + var resp = await xrpcClient.Procedure( + "com.atproto.server.createSession", + new + { + identifier, + password + }); - if (!resp.IsSuccessStatusCode) + if (!resp.IsSuccess) { - var reason = await resp.Content.ReadAsStringAsync(); - logger.LogError($"Failed login for {handle} with reason {reason}"); - - return ErrorOr.Fail($"Got a non-OK response from your PDS {reason}."); + logger.LogError($"Failed login for {handle} with reason {resp.Error}"); + return ErrorOr.Fail(resp.Error!.Message ?? resp.Error.Error); } - var tokenResponse = await resp.Content.ReadFromJsonAsync(); - if (tokenResponse is null || !tokenResponse.Active) + var tokenResponse = resp.Value!; + if (!tokenResponse.Active) return ErrorOr.Fail($"The password token is not active."); var jwt = new JwtSecurityTokenHandler(); @@ -99,18 +94,18 @@ public async Task RefreshSession(string stateId) return false; var resp = await xrpcClient.Procedure("com.atproto.server.refreshSession"); - if (resp is null) + if (!resp.IsSuccess) return false; var jwt = new JwtSecurityTokenHandler(); - var jwtToken = jwt.ReadJwtToken(resp.AccessToken); + var jwtToken = jwt.ReadJwtToken(resp.Value!.AccessToken); var expiry = new DateTimeOffset(jwtToken.ValidTo) .UtcDateTime; var oauthState = await oauthStateStorageProvider.GetForStateId(stateId); - oauthState!.AuthorizationCode = resp.AccessToken; - oauthState.RefreshToken = resp.RefreshToken; + oauthState!.AuthorizationCode = resp.Value.AccessToken; + oauthState.RefreshToken = resp.Value.RefreshToken; oauthState.ExpiresAt = expiry; await oauthStateStorageProvider.SetForStateId(stateId, oauthState); diff --git a/PinkSea.AtProto/Xrpc/Client/BasicXrpcClient.cs b/PinkSea.AtProto/Xrpc/Client/BasicXrpcClient.cs index d76bcba..c4af0ad 100644 --- a/PinkSea.AtProto/Xrpc/Client/BasicXrpcClient.cs +++ b/PinkSea.AtProto/Xrpc/Client/BasicXrpcClient.cs @@ -1,6 +1,8 @@ using System.Net.Http.Json; -using System.Text.Json; using System.Web; +using Microsoft.Extensions.Logging; +using PinkSea.AtProto.Shared.Xrpc; +using PinkSea.AtProto.Xrpc.Extensions; namespace PinkSea.AtProto.Xrpc.Client; @@ -9,14 +11,15 @@ namespace PinkSea.AtProto.Xrpc.Client; /// public sealed class BasicXrpcClient( HttpClient client, - string host) : IXrpcClient + string host, + ILogger logger) : IXrpcClient { /// - public async Task Query(string nsid, object? parameters = null) + public async Task> Query(string nsid, object? parameters = null) { var actualEndpoint = $"{host}/xrpc/{nsid}"; if (parameters is not null) - actualEndpoint += $"?{ObjectToQueryParams(parameters)}"; + actualEndpoint += $"?{parameters.ToQueryString()}"; var request = new HttpRequestMessage { @@ -25,18 +28,11 @@ public sealed class BasicXrpcClient( }; var resp = await client.SendAsync(request); - if (!resp.IsSuccessStatusCode) - return default; - - if (typeof(TResponse) == resp.GetType()) - return (TResponse)(object)resp; - - var str = await resp.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize(str); + return await resp.ReadXrpcResponse(logger); } /// - public async Task Procedure(string nsid, object? parameters = null) + public async Task> Procedure(string nsid, object? parameters = null) { var actualEndpoint = $"{host}/xrpc/{nsid}"; @@ -50,16 +46,11 @@ public sealed class BasicXrpcClient( request.Content = JsonContent.Create(parameters); var resp = await client.SendAsync(request); - - var str = await resp.Content.ReadAsStringAsync(); - - return resp.IsSuccessStatusCode - ? JsonSerializer.Deserialize(str) - : default; + return await resp.ReadXrpcResponse(logger); } /// - public async Task RawCall(string nsid, HttpContent bodyContent) + public async Task> RawCall(string nsid, HttpContent bodyContent) { var actualEndpoint = $"{host}/xrpc/{nsid}"; @@ -72,11 +63,7 @@ public sealed class BasicXrpcClient( }; var resp = await client.SendAsync(request); - var str = await resp.Content.ReadAsStringAsync(); - - return resp.IsSuccessStatusCode - ? JsonSerializer.Deserialize(str) - : default; + return await resp.ReadXrpcResponse(logger); } /// @@ -84,18 +71,4 @@ public void Dispose() { client.Dispose(); } - - /// - /// Converts an object to a query string. - /// - /// The object. - /// The resulting query string. - private static string ObjectToQueryParams(object obj) - { - var props = from p in obj.GetType().GetProperties() - where p.GetValue(obj, null) != null - select p.Name.ToLowerInvariant() + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null)!.ToString()); - - return string.Join('&', props.ToArray()); - } } \ No newline at end of file diff --git a/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs b/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs index 9340728..a27080b 100644 --- a/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs +++ b/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs @@ -1,7 +1,10 @@ using System.Text.Json; using System.Web; +using Microsoft.Extensions.Logging; using PinkSea.AtProto.Http; using PinkSea.AtProto.Models.OAuth; +using PinkSea.AtProto.Shared.Xrpc; +using PinkSea.AtProto.Xrpc.Extensions; namespace PinkSea.AtProto.Xrpc.Client; @@ -10,48 +13,35 @@ namespace PinkSea.AtProto.Xrpc.Client; /// public class DPopXrpcClient( DpopHttpClient client, - OAuthState clientState) + OAuthState clientState, + ILogger logger) : IXrpcClient { /// - public async Task Query( + public async Task> Query( string nsid, object? parameters = null) { var actualEndpoint = $"{clientState.Pds}/xrpc/{nsid}"; if (parameters is not null) - actualEndpoint += $"?{ObjectToQueryParams(parameters)}"; + actualEndpoint += $"?{parameters.ToQueryString()}"; var resp = await client.Get(actualEndpoint, clientState.KeyPair); - if (resp.IsSuccessStatusCode) - { - var str = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Got back data from the PDS: {str}"); - return JsonSerializer.Deserialize(str); - } - - return default; + return await resp.ReadXrpcResponse(); } /// - public async Task Procedure( + public async Task> Procedure( string nsid, object? parameters = null) { var actualEndpoint = $"{clientState.Pds}/xrpc/{nsid}"; var resp = await client.Post(actualEndpoint, parameters, clientState.KeyPair); - - var str = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Got back data from the PDS: {str}"); - - if (resp.IsSuccessStatusCode) - return JsonSerializer.Deserialize(str); - - return default; + return await resp.ReadXrpcResponse(); } /// - public async Task RawCall(string nsid, HttpContent bodyContent) + public async Task> RawCall(string nsid, HttpContent bodyContent) { var actualEndpoint = $"{clientState.Pds}/xrpc/{nsid}"; var resp = await client.Send( @@ -59,28 +49,8 @@ public class DPopXrpcClient( HttpMethod.Post, clientState.KeyPair, value: bodyContent); - - var str = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Got back data from the PDS: {str}"); - - if (resp.IsSuccessStatusCode) - return JsonSerializer.Deserialize(str); - - return default; - } - - /// - /// Converts an object to a query string. - /// - /// The object. - /// The resulting query string. - private static string ObjectToQueryParams(object obj) - { - var props = from p in obj.GetType().GetProperties() - where p.GetValue(obj, null) != null - select p.Name.ToLowerInvariant() + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null)!.ToString()); - return string.Join('&', props.ToArray()); + return await resp.ReadXrpcResponse(logger); } /// diff --git a/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs b/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs index 261ae42..c326902 100644 --- a/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs +++ b/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs @@ -1,3 +1,4 @@ +using Microsoft.Extensions.Logging; using PinkSea.AtProto.Http; using PinkSea.AtProto.Models.Authorization; using PinkSea.AtProto.OAuth; @@ -13,7 +14,8 @@ public class DefaultXrpcClientFactory( IOAuthStateStorageProvider stateStorageProvider, IHttpClientFactory httpClientFactory, IJwtSigningProvider jwtSigningProvider, - IOAuthClientDataProvider clientDataProvider) : IXrpcClientFactory + IOAuthClientDataProvider clientDataProvider, + ILogger logger) : IXrpcClientFactory { /// public async Task GetForOAuthStateId(string stateId) @@ -28,16 +30,16 @@ public class DefaultXrpcClientFactory( { var dpopClient = new DpopHttpClient(httpClient, jwtSigningProvider, clientDataProvider.ClientData); dpopClient.SetAuthorizationCode(oauthState.AuthorizationCode); - return new DPopXrpcClient(dpopClient, oauthState); + return new DPopXrpcClient(dpopClient, oauthState, logger); } - return new SessionXrpcClient(httpClient, oauthState); + return new SessionXrpcClient(httpClient, oauthState, logger); } /// public Task GetWithoutAuthentication(string host) { var httpClient = httpClientFactory.CreateClient("xrpc-client"); - return Task.FromResult(new BasicXrpcClient(httpClient, host)); + return Task.FromResult(new BasicXrpcClient(httpClient, host, logger)); } } \ No newline at end of file diff --git a/PinkSea.AtProto/Xrpc/Client/IXrpcClient.cs b/PinkSea.AtProto/Xrpc/Client/IXrpcClient.cs index f00f1d9..80206ff 100644 --- a/PinkSea.AtProto/Xrpc/Client/IXrpcClient.cs +++ b/PinkSea.AtProto/Xrpc/Client/IXrpcClient.cs @@ -1,3 +1,5 @@ +using PinkSea.AtProto.Shared.Xrpc; + namespace PinkSea.AtProto.Xrpc.Client; /// @@ -12,7 +14,7 @@ public interface IXrpcClient : IDisposable /// The parameters. /// The type of the response. /// The response, if it exists. - Task Query( + Task> Query( string nsid, object? parameters = null); @@ -23,7 +25,7 @@ public interface IXrpcClient : IDisposable /// The parameters. /// The type of the response. /// The response, if it exists. - Task Procedure( + Task> Procedure( string nsid, object? parameters = null); @@ -34,7 +36,7 @@ public interface IXrpcClient : IDisposable /// The body content. /// The response type. /// The response, if it exists. - Task RawCall( + Task> RawCall( string nsid, HttpContent bodyContent); } \ No newline at end of file diff --git a/PinkSea.AtProto/Xrpc/Client/SessionXrpcClient.cs b/PinkSea.AtProto/Xrpc/Client/SessionXrpcClient.cs index 4288031..bf77998 100644 --- a/PinkSea.AtProto/Xrpc/Client/SessionXrpcClient.cs +++ b/PinkSea.AtProto/Xrpc/Client/SessionXrpcClient.cs @@ -1,7 +1,10 @@ using System.Net.Http.Json; using System.Text.Json; using System.Web; +using Microsoft.Extensions.Logging; using PinkSea.AtProto.Models.OAuth; +using PinkSea.AtProto.Shared.Xrpc; +using PinkSea.AtProto.Xrpc.Extensions; namespace PinkSea.AtProto.Xrpc.Client; @@ -12,14 +15,15 @@ namespace PinkSea.AtProto.Xrpc.Client; /// public class SessionXrpcClient( HttpClient client, - OAuthState clientState) : IXrpcClient + OAuthState clientState, + ILogger logger) : IXrpcClient { /// - public async Task Query(string nsid, object? parameters = null) + public async Task> Query(string nsid, object? parameters = null) { var actualEndpoint = $"{clientState.Pds}/xrpc/{nsid}"; if (parameters is not null) - actualEndpoint += $"?{ObjectToQueryParams(parameters)}"; + actualEndpoint += $"?{parameters.ToQueryString()}"; var request = new HttpRequestMessage { @@ -33,18 +37,11 @@ public class SessionXrpcClient( }; var resp = await client.SendAsync(request); - if (resp.IsSuccessStatusCode) - { - var str = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Got back data from the PDS: {str}"); - return JsonSerializer.Deserialize(str); - } - - return default; + return await resp.ReadXrpcResponse(logger); } /// - public async Task Procedure(string nsid, object? parameters = null) + public async Task> Procedure(string nsid, object? parameters = null) { // Hack but as long as it works :3 const string refreshNsid = "com.atproto.server.refreshSession"; @@ -68,18 +65,11 @@ public class SessionXrpcClient( request.Content = JsonContent.Create(parameters); var resp = await client.SendAsync(request); - - var str = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Got back data from the PDS: {str}"); - - if (resp.IsSuccessStatusCode) - return JsonSerializer.Deserialize(str); - - return default; + return await resp.ReadXrpcResponse(logger); } /// - public async Task RawCall(string nsid, HttpContent bodyContent) + public async Task> RawCall(string nsid, HttpContent bodyContent) { var actualEndpoint = $"{clientState.Pds}/xrpc/{nsid}"; @@ -97,14 +87,7 @@ public class SessionXrpcClient( }; var resp = await client.SendAsync(request); - - var str = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Got back data from the PDS: {str}"); - - if (resp.IsSuccessStatusCode) - return JsonSerializer.Deserialize(str); - - return default; + return await resp.ReadXrpcResponse(logger); } /// @@ -112,18 +95,4 @@ public void Dispose() { client.Dispose(); } - - /// - /// Converts an object to a query string. - /// - /// The object. - /// The resulting query string. - private static string ObjectToQueryParams(object obj) - { - var props = from p in obj.GetType().GetProperties() - where p.GetValue(obj, null) != null - select p.Name.ToLowerInvariant() + "=" + HttpUtility.UrlEncode(p.GetValue(obj, null)!.ToString()); - - return string.Join('&', props.ToArray()); - } } \ No newline at end of file diff --git a/PinkSea.AtProto/Xrpc/Extensions/HttpResponseMessageExtensions.cs b/PinkSea.AtProto/Xrpc/Extensions/HttpResponseMessageExtensions.cs new file mode 100644 index 0000000..60a483f --- /dev/null +++ b/PinkSea.AtProto/Xrpc/Extensions/HttpResponseMessageExtensions.cs @@ -0,0 +1,49 @@ +using System.Text.Json; +using Microsoft.Extensions.Logging; +using PinkSea.AtProto.Shared.Xrpc; + +namespace PinkSea.AtProto.Xrpc.Extensions; + +/// +/// Extension class for the HTTP response message class. +/// +public static class HttpResponseMessageExtensions +{ + /// + /// Reads an XRPC response from this HTTP response. + /// + /// The HTTP response. + /// Optional logger for this. + /// The internal type of the response. + /// The XRPC error or a value. + public static async Task> ReadXrpcResponse( + this HttpResponseMessage message, + ILogger? logger = null) + { + var body = await message.Content.ReadAsStringAsync(); + if (!message.IsSuccessStatusCode) + { + var error = JsonSerializer.Deserialize(body) ?? new XrpcError + { + Error = "UnknownError", + Message = body + }; + + logger?.LogWarning("XRPC call to {Endpoint} returned an error: [{Type}] > {Message}", + message.RequestMessage?.RequestUri, + error.Error, + error.Message); + + return XrpcErrorOr.Fail(error.Error, error.Message); + } + + logger?.LogInformation("XRPC call to {Endpoint} ended with a success.", + message.RequestMessage?.RequestUri); + + if (message is TResponse typedResponse) + return XrpcErrorOr.Ok(typedResponse); + + var result = JsonSerializer.Deserialize(body); + return XrpcErrorOr.Ok(result!); + } +} \ No newline at end of file diff --git a/PinkSea.AtProto/Xrpc/Extensions/ObjectExtensions.cs b/PinkSea.AtProto/Xrpc/Extensions/ObjectExtensions.cs new file mode 100644 index 0000000..5de2868 --- /dev/null +++ b/PinkSea.AtProto/Xrpc/Extensions/ObjectExtensions.cs @@ -0,0 +1,28 @@ +using System.Web; + +namespace PinkSea.AtProto.Xrpc.Extensions; + +/// +/// Extensions for the base object class. +/// +public static class ObjectExtensions +{ + /// + /// Converts an object to a query string. + /// + /// The object. + /// The resulting query string. + public static string ToQueryString(this object obj) + { + var props = obj.GetType() + .GetProperties() + .Where(p => p.GetValue(obj) != null) + .Select(p => + { + var value = p.GetValue(obj)!.ToString(); + return $"{p.Name.ToLowerInvariant()}={HttpUtility.UrlEncode(value)}"; + }); + + return string.Join('&', props); + } +} \ No newline at end of file diff --git a/PinkSea.AtProto/Xrpc/XrpcErrorOr.cs b/PinkSea.AtProto/Xrpc/XrpcErrorOr.cs deleted file mode 100644 index f50452f..0000000 --- a/PinkSea.AtProto/Xrpc/XrpcErrorOr.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace PinkSea.AtProto.Xrpc; - -public class XrpcErrorOr -{ - -} \ No newline at end of file diff --git a/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs b/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs index 4ad0b65..179dfe5 100644 --- a/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs +++ b/PinkSea/Services/Hosting/FirstTimeRunAssistantService.cs @@ -93,15 +93,16 @@ private async Task Backfill() Limit = 2000 // The max limit as defined. }); - if (repos is null) + if (!repos.IsSuccess) { - logger.LogError("Failed to backfill posts. Got no repos from the relay."); + logger.LogError("Failed to backfill posts. {Error}", + repos.Error); return; } // Store the children to be added after their parents. var children = new List<(string, string, string, Oekaki)>(); - foreach (var did in repos.Repos.Select(r => r.Did)) + foreach (var did in repos.Value!.Repos.Select(r => r.Did)) { children.AddRange(await BackfillForDid(did)); } @@ -151,12 +152,12 @@ await InsertOekakiIntoDatabase( Cursor = cursor }); - if (response is null) + if (!response.IsSuccess) break; - cursor = response.Cursor; + cursor = response.Value!.Cursor; - foreach (var oekaki in response.Records) + foreach (var oekaki in response.Value.Records) { if (appViewConfig.Value.BackfillSkipDimensionsVerification != true && !await ValidateRemoteOekakiDimensions(xrpcClient, oekaki.Value, did)) @@ -231,10 +232,15 @@ await repoXrpcClient.Query( cid = record.Image.Blob.Reference.Link }); - if (!response!.IsSuccessStatusCode) + if (!response.IsSuccess) + { + logger.LogWarning("Failed to fetch blob for {Did}/{Cid}.", + authorDid, + record.Image.Blob.Reference.Link); return false; + } - var data = await response.Content.ReadAsByteArrayAsync(); + var data = await response.Value!.Content.ReadAsByteArrayAsync(); return PngHeaderHelper.ValidateDimensionsForOekaki(data); } } \ No newline at end of file diff --git a/PinkSea/Services/OekakiService.cs b/PinkSea/Services/OekakiService.cs index 5185221..93770a0 100644 --- a/PinkSea/Services/OekakiService.cs +++ b/PinkSea/Services/OekakiService.cs @@ -135,7 +135,7 @@ await SetBlueskyCrosspostTidForOekaki( "com.atproto.repo.uploadBlob", byteArrayContent); - return result?.Blob; + return result.Value?.Blob; } /// @@ -198,8 +198,8 @@ await SetBlueskyCrosspostTidForOekaki( Record = oekaki }); - return response is not null - ? (oekaki, response.Cid) + return response.IsSuccess + ? (oekaki, response.Value!.Cid) : null; } From abf20c20ee1634504005709df624f8942428a0d8 Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Wed, 26 Mar 2025 19:44:35 +0100 Subject: [PATCH 07/21] refactor: get rid of all stray Console.WriteLines. --- PinkSea.AtProto/Http/DpopHttpClient.cs | 29 ++++++++++++------- PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs | 8 +++-- .../Streaming/JetStream/JetStreamListener.cs | 3 +- PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs | 2 -- .../Xrpc/Client/DefaultXrpcClientFactory.cs | 18 ++++++++---- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/PinkSea.AtProto/Http/DpopHttpClient.cs b/PinkSea.AtProto/Http/DpopHttpClient.cs index 57a601b..b342df7 100644 --- a/PinkSea.AtProto/Http/DpopHttpClient.cs +++ b/PinkSea.AtProto/Http/DpopHttpClient.cs @@ -3,6 +3,7 @@ using System.Security.Cryptography; using System.Text; using System.Text.Json; +using Microsoft.Extensions.Logging; using Microsoft.IdentityModel.Tokens; using PinkSea.AtProto.Models.OAuth; using PinkSea.AtProto.OAuth; @@ -13,7 +14,7 @@ namespace PinkSea.AtProto.Http; /// /// A DPoP-capable HTTP client. /// -public class DpopHttpClient : IDisposable +public sealed class DpopHttpClient : IDisposable { /// /// The HTTP client. @@ -30,6 +31,11 @@ public class DpopHttpClient : IDisposable /// private readonly OAuthClientData _clientData; + /// + /// The logger. + /// + private readonly ILogger? _logger; + /// /// The authorization header value. /// @@ -51,11 +57,13 @@ public class DpopHttpClient : IDisposable public DpopHttpClient( HttpClient client, IJwtSigningProvider jwtSigningProvider, - OAuthClientData clientData) + OAuthClientData clientData, + ILogger? logger = null) { _client = client; _jwtSigningProvider = jwtSigningProvider; _clientData = clientData; + _logger = logger; } /// @@ -108,13 +116,12 @@ public async Task Get( /// /// Performs a raw send. /// - /// - /// - /// - /// - /// - /// - /// + /// The endpoint we're sending to. + /// The method to send via. + /// The DPoP keypair. + /// The DPoP nonce. + /// The value to add in the body. + /// The response from the server. public async Task Send( string endpoint, HttpMethod method, @@ -152,7 +159,8 @@ public async Task Send( if ((resp.StatusCode != HttpStatusCode.BadRequest && resp.StatusCode != HttpStatusCode.Unauthorized) || nonce is not null) return resp; - Console.WriteLine($"Failed to fetch with DPoP: {await resp.Content.ReadAsStringAsync()}"); + _logger?.LogWarning("Failed to fetch with DPoP: {Reason}", + await resp.Content.ReadAsStringAsync()); // Failed to send, maybe requires DPoP nonce? // Retry sending with the nonce. @@ -171,6 +179,7 @@ public async Task Send( value); } + /// public void Dispose() { _client.Dispose(); diff --git a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs index 925dbb8..803b1a4 100644 --- a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs @@ -13,6 +13,7 @@ using PinkSea.AtProto.Resolvers.Did; using PinkSea.AtProto.Resolvers.Domain; using PinkSea.AtProto.Shared.Models; +using PinkSea.AtProto.Shared.Xrpc; namespace PinkSea.AtProto.OAuth; @@ -104,10 +105,11 @@ public async Task> BeginOAuthFlow( var resp = await _client.Post(authServer!.PushedAuthorizationRequestEndpoint!, body, keyPair); if (!resp.IsSuccessStatusCode) { - var reason = await resp.Content.ReadAsStringAsync(); - Console.WriteLine($"Failed to send a PAR: {reason}"); + var reason = await resp.Content.ReadFromJsonAsync(); + logger.LogError("Failed to send a PAR: {Reason}", + reason); - return ErrorOr.Fail($"PDS returned a non-OK response while sending the PAR: {reason}"); + return ErrorOr.Fail($"PDS returned a non-OK response while sending the PAR: {reason?.Message}"); } var parResponse = await resp.Content.ReadFromJsonAsync(); diff --git a/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs b/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs index 36bd23a..b501441 100644 --- a/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs +++ b/PinkSea.AtProto/Streaming/JetStream/JetStreamListener.cs @@ -109,7 +109,8 @@ private async Task OnWebsocketMessage(ResponseMessage message) } catch (Exception e) { - Console.WriteLine($"Encountered an exception while handling JetStream event: {e}"); + logger.LogError(e, + "Encountered an exception while handling a JetStream event."); } } diff --git a/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs b/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs index a27080b..301fe28 100644 --- a/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs +++ b/PinkSea.AtProto/Xrpc/Client/DPopXrpcClient.cs @@ -1,5 +1,3 @@ -using System.Text.Json; -using System.Web; using Microsoft.Extensions.Logging; using PinkSea.AtProto.Http; using PinkSea.AtProto.Models.OAuth; diff --git a/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs b/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs index c326902..97d0d62 100644 --- a/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs +++ b/PinkSea.AtProto/Xrpc/Client/DefaultXrpcClientFactory.cs @@ -15,7 +15,7 @@ public class DefaultXrpcClientFactory( IHttpClientFactory httpClientFactory, IJwtSigningProvider jwtSigningProvider, IOAuthClientDataProvider clientDataProvider, - ILogger logger) : IXrpcClientFactory + ILoggerFactory loggerFactory) : IXrpcClientFactory { /// public async Task GetForOAuthStateId(string stateId) @@ -24,22 +24,30 @@ public class DefaultXrpcClientFactory( if (oauthState?.AuthorizationCode is null) return null; + var xrpcLogger = loggerFactory.CreateLogger(); var httpClient = httpClientFactory.CreateClient("xrpc-client"); if (oauthState.AuthorizationType == AuthorizationType.OAuth2) { - var dpopClient = new DpopHttpClient(httpClient, jwtSigningProvider, clientDataProvider.ClientData); + var dpopClientLogger = loggerFactory.CreateLogger(); + var dpopClient = new DpopHttpClient( + httpClient, + jwtSigningProvider, + clientDataProvider.ClientData, + dpopClientLogger); + dpopClient.SetAuthorizationCode(oauthState.AuthorizationCode); - return new DPopXrpcClient(dpopClient, oauthState, logger); + return new DPopXrpcClient(dpopClient, oauthState, xrpcLogger); } - return new SessionXrpcClient(httpClient, oauthState, logger); + return new SessionXrpcClient(httpClient, oauthState, xrpcLogger); } /// public Task GetWithoutAuthentication(string host) { + var xrpcLogger = loggerFactory.CreateLogger(); var httpClient = httpClientFactory.CreateClient("xrpc-client"); - return Task.FromResult(new BasicXrpcClient(httpClient, host, logger)); + return Task.FromResult(new BasicXrpcClient(httpClient, host, xrpcLogger)); } } \ No newline at end of file From f96d03675b37b3c6d4e1a03984371066e82a1440 Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Wed, 26 Mar 2025 22:54:02 +0100 Subject: [PATCH 08/21] refactor: slight refactor of the XRPC handler. --- .../Xrpc/DefaultXrpcHandler.cs | 5 ++--- PinkSea.AtProto.Server/Xrpc/IXrpcHandler.cs | 4 +++- .../Xrpc/ServiceCollectionExtensions.cs | 17 ++++++++++++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs index 68624a9..12b580c 100644 --- a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs @@ -7,12 +7,11 @@ namespace PinkSea.AtProto.Server.Xrpc; /// /// The default XRPC handler. /// -/// public class DefaultXrpcHandler( IServiceProvider serviceProvider) : IXrpcHandler { /// - public async Task HandleXrpc( + public async Task HandleXrpc( string nsid, HttpContext context) { @@ -38,7 +37,7 @@ public class DefaultXrpcHandler( .GetProperty("Result")!; var errorOr = resultProperty.GetValue(task) as IXrpcErrorOr; - return errorOr!.GetUnderlyingObject(); + return errorOr; } /// diff --git a/PinkSea.AtProto.Server/Xrpc/IXrpcHandler.cs b/PinkSea.AtProto.Server/Xrpc/IXrpcHandler.cs index 8001d21..469cfa5 100644 --- a/PinkSea.AtProto.Server/Xrpc/IXrpcHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/IXrpcHandler.cs @@ -1,3 +1,5 @@ +using PinkSea.AtProto.Shared.Xrpc; + namespace PinkSea.AtProto.Server.Xrpc; /// @@ -11,7 +13,7 @@ public interface IXrpcHandler /// The namespace ID. /// The HTTP context. /// The response from the handler. - Task HandleXrpc( + Task HandleXrpc( string nsid, HttpContext context); } \ No newline at end of file diff --git a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs index 2b276b3..76251d9 100644 --- a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs +++ b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs @@ -46,6 +46,13 @@ public static IEndpointRouteBuilder UseXrpcHandler(this IEndpointRouteBuilder ro return routeBuilder; } + /// + /// Handles an XRPC call. + /// + /// The context. + /// The namespace ID. + /// The service provider. + /// The result of the xrpc call. private static async Task HandleXrpc( HttpContext ctx, string nsid, @@ -53,9 +60,13 @@ private static async Task HandleXrpc( { var xrpcHandler = serviceProvider.GetRequiredService(); var result = await xrpcHandler.HandleXrpc(nsid, ctx); + if (result is null) + { + return Results.StatusCode(StatusCodes.Status500InternalServerError); + } - return result is XrpcError - ? Results.BadRequest(result) - : Results.Ok(result); + return !result.IsSuccess + ? Results.BadRequest(result.Error) + : Results.Ok(result.GetUnderlyingObject()); } } \ No newline at end of file From 48e539285d1cfbd24f5dcd0cfe232f695a930bf0 Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 02:20:18 +0100 Subject: [PATCH 09/21] feat: invalidation of password auth sessions. --- Meta/banner.png | Bin 0 -> 138265 bytes Meta/screenshot.png | Bin 78401 -> 74293 bytes .../AtProtoAuthorizationService.cs | 17 ++++++ .../IAtProtoAuthorizationService.cs | 10 +++- PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs | 33 +++++++++++ PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs | 7 +++ .../OAuth/Models/TokenRevokeRequest.cs | 36 ++++++++++++ PinkSea/Xrpc/InvalidateSessionProcedure.cs | 22 ++++++- README.md | 55 ++++++++++++++++-- 9 files changed, 169 insertions(+), 11 deletions(-) create mode 100644 Meta/banner.png create mode 100644 PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs diff --git a/Meta/banner.png b/Meta/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..5b256eabda403b774adbb5c75d3028973d4477d0 GIT binary patch literal 138265 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%0DH@l&!)%LXQgDDAcCKbw9=R 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

vzg;6&o%c+*|o>vzLn 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

tGZE?DNtt>HM_H{{zcrrJ3E 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≧^bpf!9RnXn5o2-qwk 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 UX|A&L*h9ceU-t^SM8`Jxe>;#wqW}N^ literal 0 HcmV?d00001 diff --git a/Meta/screenshot.png b/Meta/screenshot.png index b6cd4c722da20384e853389f0be7b5a8b0b34577..01fc816651b97bc39c97cf9c2ba47cd5af1c378d 100644 GIT binary patch literal 74293 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 literal 78401 zcmZ^K2UJs8*EWu07tv910D*BpP^xr8i)9o6fl(BsB_kztB7|ZniHeHK00Khjpn!;! z2mwMU$tVhhBm{yGsTnB=JwSjE(*B?`|M$M@|3B7ZL2k}Hcb|RsdG@o*efqn-mGoZu zy;4$A($-ggyDla5Z8(T9-Opm?c)Ct%+-sk{ zb5tUllvLdZb>Ny@UrarIZOA!T=b`W&{yqMV_9+GFK5?qOMcZc&H!vnU0T$8rns%mJ z^GM~Cosl+WJWub?R~9$AcqJK8R!C^S=(X7?h?L*MNBfTDm@r~TTb4e!bH_x4Vu zjomZcEqS;+>>P)PP~+z+;bwP!m(=kHbGNDgkxu_ADc6hZCKh4I2Nb{ENV)N*t@mv7 z0l)lezCzMJ65mfg_U%ilp7_1JMH7vRMXYz??^LL*=r@AHEN^ zc(U{RoRZsyYR_ZeAayZs9IR$~Nm}lHS!z+b4L{G70uOS$9m6S%=EdcFA>#8VNmuQXM~@?$i3ZW3=7

w{&D^#$}Y2jxC26pY>U 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⋘-P6z*v7-3nn9gW|McZ}vhO7agoF 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 diff --git a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs index 0b9aad9..d928aac 100644 --- a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs +++ b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs @@ -112,4 +112,21 @@ public async Task RefreshSession(string stateId) return true; } + + /// + public async Task InvalidateSession(string stateId) + { + try + { + using var xrpcClient = await xrpcClientFactory.GetForOAuthStateId(stateId); + if (xrpcClient is null) + return; + + await xrpcClient.Procedure("com.atproto.server.deleteSession"); + } + finally + { + await oauthStateStorageProvider.DeleteForStateId(stateId); + } + } } \ No newline at end of file diff --git a/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs b/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs index 25f0eba..4fda4e3 100644 --- a/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs +++ b/PinkSea.AtProto/Authorization/IAtProtoAuthorizationService.cs @@ -18,7 +18,13 @@ public interface IAtProtoAuthorizationService /// /// Refreshes the session. /// - /// - /// + /// The id of the session. + /// Whether the session has been refreshed. public Task RefreshSession(string stateId); + + /// + /// Invalidates the session. + /// + /// The id of the session. + public Task InvalidateSession(string stateId); } \ No newline at end of file diff --git a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs index 803b1a4..e504309 100644 --- a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs @@ -8,6 +8,7 @@ using PinkSea.AtProto.Http; using PinkSea.AtProto.Models.Authorization; using PinkSea.AtProto.Models.OAuth; +using PinkSea.AtProto.OAuth.Models; using PinkSea.AtProto.Providers.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Resolvers.Did; @@ -234,6 +235,38 @@ public async Task Refresh(string stateId) return true; } + /// + public async Task InvalidateSession(string stateId) + { + try + { + var oauthState = await oAuthStateStorageProvider.GetForStateId(stateId); + if (oauthState is null) + return; + + var clientData = clientDataProvider.ClientData; + var assertion = jwtSigningProvider.GenerateClientAssertion(new JwtSigningData + { + ClientId = clientData.ClientId, + Audience = oauthState.Issuer, + Key = clientData.Key + }); + + var tokenRequest = new TokenRevokeRequest() + { + ClientId = clientData.ClientId, + Token = oauthState.AuthorizationCode!, + ClientAssertionType = JwtClientAssertionType, + ClientAssertion = assertion, + CodeVerifier = oauthState.PkceString, + }; + } + finally + { + await oAuthStateStorageProvider.DeleteForStateId(stateId); + } + } + /// public async Task GetOAuthProtectedResourceForPds(string pds) { diff --git a/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs index 6ed9303..56d2988 100644 --- a/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs @@ -32,7 +32,14 @@ Task CompleteAuthorization( /// Refreshes a state. /// /// The state id. + /// Whether it has been refreshed. Task Refresh(string stateId); + + /// + /// Invalidates a state. + /// + /// The state id. + Task InvalidateSession(string stateId); /// /// Gets the OAuth protected resource for a given PDS. diff --git a/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs b/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs new file mode 100644 index 0000000..272f679 --- /dev/null +++ b/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs @@ -0,0 +1,36 @@ +using System.Text.Json.Serialization; + +namespace PinkSea.AtProto.OAuth.Models; + +public class TokenRevokeRequest +{ + /// + /// Identifies the client software. + /// + [JsonPropertyName("client_id")] + public required string ClientId { get; init; } + + /// + /// The PKCE challenge value. + /// + [JsonPropertyName("code_verifier")] + public required string CodeVerifier { get; init; } + + /// + /// The token to revoke. + /// + [JsonPropertyName("token")] + public required string Token { get; init; } + + /// + /// Used by confidential clients to describe the client authentication mechanism. + /// + [JsonPropertyName("client_assertion_type")] + public string? ClientAssertionType { get; init; } + + /// + /// Only used for confidential clients, for client authentication + /// + [JsonPropertyName("client_assertion")] + public string? ClientAssertion { get; init; } +} \ No newline at end of file diff --git a/PinkSea/Xrpc/InvalidateSessionProcedure.cs b/PinkSea/Xrpc/InvalidateSessionProcedure.cs index c67cac8..7653864 100644 --- a/PinkSea/Xrpc/InvalidateSessionProcedure.cs +++ b/PinkSea/Xrpc/InvalidateSessionProcedure.cs @@ -1,3 +1,5 @@ +using PinkSea.AtProto.Authorization; +using PinkSea.AtProto.Models.Authorization; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Server.Xrpc; using PinkSea.AtProto.Shared.Xrpc; @@ -11,6 +13,7 @@ namespace PinkSea.Xrpc; /// [Xrpc("com.shinolabs.pinksea.invalidateSession")] public class InvalidateSessionProcedure( + IAtProtoAuthorizationService atProtoAuthorizationService, IOAuthStateStorageProvider oAuthStateStorageProvider, IHttpContextAccessor contextAccessor, ILogger logger) : IXrpcProcedure @@ -18,13 +21,26 @@ public class InvalidateSessionProcedure( /// public async Task> Handle(Empty request) { - var state = contextAccessor.HttpContext?.GetStateToken(); + var stateId = contextAccessor.HttpContext?.GetStateToken(); + if (stateId is null) + return XrpcErrorOr.Ok(new Empty()); + + var state = await oAuthStateStorageProvider.GetForStateId(stateId); if (state is null) return XrpcErrorOr.Ok(new Empty()); - logger.LogInformation($"Invalidating session for ID {state}"); + logger.LogInformation("Invalidating session for ID {SessionId}", + state); + + if (state.AuthorizationType == AuthorizationType.PdsSession) + { + await atProtoAuthorizationService.InvalidateSession(stateId); + } + else + { + await oAuthStateStorageProvider.DeleteForStateId(stateId); + } - await oAuthStateStorageProvider.DeleteForStateId(state); return XrpcErrorOr.Ok(new Empty()); } } \ No newline at end of file diff --git a/README.md b/README.md index 83c0d57..63736b9 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,61 @@

-
- PinkSea
- poniko's house
- +

+
+A decentralized oekaki (お絵描き, jp. drawing) BBS running as an [AT Protocol AppView](https://atproto.com/guides/glossary#app-view). + +It allows you to log in with your AT Protocol account and draw right in the browser using a modified variant of the [tegaki.js](https://github.com/desuwa/tegaki) editor! Your images are stored on your ATProto Personal Data Server, meaning that no PinkSea instance actually controls them. If one goes down, another one can take its place. You are in full control of everything you draw. + +Other than just drawing, PinkSea allows you to tag your oekaki, grouping them together like in sites akin to Pixiv. PinkSea also permits responding with oekaki to other oekaki! + ![An image of PinkSea's frontend displaying an oekaki post.](Meta/screenshot.png) -An oekaki BBS running as an [AT Protocol AppView](https://atproto.com/guides/glossary#app-view). -# Running +# Running (Docker) + +In order to run PinkSea as a Docker container, you need to have the [Docker runtime](https://www.docker.com/) installed. + +1. Clone this repository by doing `git clone https://github.com/shinolabs/PinkSea` + +2. Navigate to the cloned repository. + +3. Copy `.env.example` to `.env` and modify the settings according to your setup. + +| ENV Config Name | Description | Default Value | +|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------| +| POSTGRES_USERNAME | The username used for the PostgreSQL database login | pinksea | +| POSTGRES_PASSWORD | The password used for the PostgreSQL database login | pinksea | +| POSTGRES_PORT | The port used to connect to PostgreSQL | 5432 | +| POSTGRES_DATABASE | The name of the database used for PinkSea | PinkSea | +| APPVIEW_URL | The URL used by the AppView API | https://api.your.tld | +| FRONTEND_URL | The URL used by the frontend. (Can be the same as the AppView) | https://your.tld | +| BACKFILL_SOURCE | The source used for backfilling the local instance. (Can be either a relay or another PinkSea instance) | https://relay1.us-west.bsky.network | +| BACKFILL_SKIP_DIMENSIONS_VERIFICATION | Whether to skip verifying dimensions for each oekaki post while backfilling. Will speed it up sacrificing full validity. | false | +| JETSTREAM_ENDPOINT | The ATProto [JetStream](https://github.com/bluesky-social/jetstream) endpoint used by this PinkSea instance. | jetstream1.us-east.bsky.network | +| PLC_DIRECTORY | The [PLC directory](https://github.com/did-method-plc/did-method-plc) endpoint used by this PinkSea instance. | https://plc.directory | +| IMAGE_PROXY_TEMPLATE | The image proxy endpoint used by this PinkSea instance. {0} will be populated with the author's DID, while {1} will be populated with the CID of the blob. | https://cdn.bsky.app/img/feed_fullsize/plain/{0}/{1} | + +4. Run `docker compose up -d` to start the containers and detach from them. + +5. (Initial run only) Wait for PinkSea to finish backfilling all the oekaki posts. + +Your PinkSea instance will now be accessible at the `FRONTEND_URL` endpoint you've specified for it, fully connected with the entire ATProto network! Simple as that! + +## Updating + +1. Run `docker compose down` to shut down the containers. + +2. Run `git pull` to fetch the latest changes to the repository. + +2. Run `docker compose up -d --build` to force rebuild all the PinkSea dockerfiles. + +Your PinkSea instance should now be up-to-date! + +# Running (Manual) ## Backend (AppView) From a66e5fc60e68ec1521182e0fe57b1fd5365eaf1a Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 10:19:51 +0100 Subject: [PATCH 10/21] feat: style the PinkSea AppView info page a bit. --- PinkSea/wwwroot/index.html | 52 ++++++++++++++++++++++++++++++++++--- PinkSea/wwwroot/logo.png | Bin 0 -> 1624 bytes 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 PinkSea/wwwroot/logo.png diff --git a/PinkSea/wwwroot/index.html b/PinkSea/wwwroot/index.html index 23a5178..824b223 100644 --- a/PinkSea/wwwroot/index.html +++ b/PinkSea/wwwroot/index.html @@ -1,3 +1,49 @@ -This is an AT Protocol Application View (AppView) for the "PinkSea" application: https://github.com/shinolabs/PinkSea -
-Most API routes are under /xrpc/ \ No newline at end of file + + + + PinkSea + + + + +
+ +
+ This is an AT Protocol Application View (AppView) for the PinkSea application: https://github.com/shinolabs/PinkSea +
+ Most API routes are under /xrpc/ +
+ + + diff --git a/PinkSea/wwwroot/logo.png b/PinkSea/wwwroot/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..84d70c6ed71ffe27d037bbf564c1ab9f7481edc4 GIT binary patch literal 1624 zcmV-e2B-OnP)-p)Dw)Na#Z`K@`ykS1P5o zjg9)^gB1jy6oUF7DuNf{UwQiHMduHaGWR~_{SkiFjznt%z znKS4AIuj=SctwD{M%Un^1bFTQN`MmJ83E7Xbp$8@o)PdIUPpiu;28nW;dKODNd(CF z$=ieb<&IT9d%o|`@ILaJ*AXCN6L(Unw1tH3!z?V>gZbrx0X_X&Qj0>rAWTbc#@PH6IyMn2r&25doI)+0eG7o zg84cHF%blY@D{y3%u{^=MheF<0=g3kPjU|H`5cyyd&~Z&Q(Le;-;Sl*(q#O{^)lc2 z$zPa;Lf^g{5pXQ_I$!8C-WcDeC5ztVl`Buz!X&3ot)TP&JWnOwfjBGTLg-|_aQPj< z2)Na91e`d8)lX2{arj6Pwr^1z=Qy1{+sJ_wi_2+Bc9e^E#O)5j989e9+g{Bt?GP+5 zIS2wa+7Xa1Zbi^{tpWx$9Hv*Pl-}o3!;!JVqf`pY2XwzxT=T}CQwn8`&dkT=CY6?Q zT$WI(_$@kv6;=Z2}1|A-A;#{=TBF^m^b@vKj#u*3Yb> z)P+y+&wD}x1;r@zc+)z$i{exjO`Zn9j~hQLg1Mb(5YylQdfs;iAXR#~rDBJb;>PNT zs8@{qno5fw%N@l)wAAYxSY1`!XUR%E|2Os)(5*mKXu5h?#?4+cGu*s))stCSwtxikK>57e})y zVs2BQyOkfYuW&)%tVpWt>5sP?qt0Ja~SZEhfMa*QPt+a`y2h@g9Ma&#@Rm9w|`rk_T zh(#l)d&HtKvTdPz#B`5XWS`MJVv!InNCQ>G76j(VAgYK(LbL!4R1sSMkRw8-FkN35onV7rG+6|sb7aaF`jfK)|H6)~ez9d(bG?hy;0P*f2!nP^oJGe_ya zmU?QU17><^qCIFe>vcUfF$_LEHE|9qdTJsd(Nh!SOg5L7ttw*8!KW%>&A@{yV*XiB zMa(+~s)(r~riz#j+Q+JR{&ayp8}Rz%v4#!~Y9{ Wb)>9%s!8+!0000 Date: Fri, 28 Mar 2025 10:33:48 +0100 Subject: [PATCH 11/21] docs: expand on the manual running section of the docs. --- PinkSea.Gateway/appsettings.example.json | 2 +- README.md | 29 +++++++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/PinkSea.Gateway/appsettings.example.json b/PinkSea.Gateway/appsettings.example.json index 8d59d49..a266c9e 100644 --- a/PinkSea.Gateway/appsettings.example.json +++ b/PinkSea.Gateway/appsettings.example.json @@ -1,6 +1,6 @@ { "GatewaySettings": { - "PinkSeaEndpoint": "https://api.pinksea.art", + "AppViewEndpoint": "https://api.pinksea.art", "FrontEndEndpoint": "https://pinksea.art" } } diff --git a/README.md b/README.md index 63736b9..a37b2b0 100644 --- a/README.md +++ b/README.md @@ -63,16 +63,14 @@ In order to run the AppView, you need the [.NET 8 SDK](https://dotnet.microsoft. ### First-time run -1. Run `docker compose up -d` inside of the root folder to start PostgreSQL (if you do not have PostgreSQL installed yet.) -2. Open the `PinkSea` folder -3. Copy the sample `appsettings.example.json` file to `appsettings.json` +1. Open the `PinkSea` folder +2. Copy the sample `appsettings.example.json` file to `appsettings.json` - 1. Modify the `PostgresConfig` to point to your PostgreSQL settings. If you're using the supplied docker compose, you do not need to change this. + 1. Modify the `PostgresConfig` to point to your PostgreSQL settings. 2. Point the `AppViewConfig` URL to where your AppView will reside, this is the URL that will be used to identify your PinkSea instance. (As an example, for the official PinkSea instance, it's `https://api.pinksea.art`) 3. (OPTIONAL) Point the `FrontendConfig` to point to where your PinkSea frontend resides. This is used for BlueSky cross-posting with a link. Leaving it blank will disallow cross-posting. (Again, as an example, for the official PinkSea instance it's `https://pinksea.art`) -4. Perform `dotnet ef database update` to run the neccessary migrations. -5. Run `dotnet run --configuration Release` to start the PinkSea AppView. +3. Run `dotnet run --configuration Release` to start the PinkSea AppView. PinkSea will automatically perform migrations. That's it! Your server now is connected to the ATmosphere and is ready to start cooperating with other PinkSea AppViews. @@ -90,8 +88,8 @@ In order to run the client app locally, you need a fairly modern [Node.js](https 1. Navigate to `PinkSea.Frontend`. 2. Run `npm i` to download the required packages. -3. Navigate to the `src/api/atproto` folder. -3. Point the `serviceEndpoint` value inside of `client.ts` to your AppView instance. (For example, for the official PinkSea instance, the endpoint is `https://api.pinksea.art`) +3. Copy the `.env.example` file to `.env`. +4. Set `VITE_PINKSEA_API_URL` to your AppView instance. (For example, for the official PinkSea instance, the endpoint is `https://api.pinksea.art`) ### Running a local server @@ -107,6 +105,21 @@ In order to run the client app locally, you need a fairly modern [Node.js](https The built app will be inside of the `dist` folder. +## Gateway (SSR helpers for the frontend) + +### Configuration + +1. Open the `PinkSea.Gateway` folder. +2. Copy the sample `appsettings.example.json` file to `appsettings.json` +3. Edit the values inside of it + + 1. Point `AppViewEndpoint` URL to where your AppView resides. (As an example, for the official PinkSea instance, it's `https://api.pinksea.art`). + 2. Point `FrontEndEndpoint` URL to where your frontend will reside. (As an example, for the official PinkSea instance, it's `https://pinksea.art`). + +4. Create the `wwwroot` folder. +5. Copy the built frontend from `PinkSea.Frontend/dist` to `wwwroot` +6. Run `dotnet run --configuration Release` to start the PinkSea gateway helper. + # Acknowledgments This is a list of people I'd love to extend my most sincere gratitude to!! From 3c188fee05d99eada1b199a849e3304bc7fbfb8a Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 10:53:12 +0100 Subject: [PATCH 12/21] docs: relicense all libraries under CC0. this allows them to be used in countries that do not respect the public domain. --- PinkSea.AtProto.Server/LICENSE | 145 +++++++++++++++++++++++++++------ PinkSea.AtProto.Shared/LICENSE | 121 +++++++++++++++++++++++++++ PinkSea.AtProto/LICENSE | 145 +++++++++++++++++++++++++++------ README.md | 18 +++- 4 files changed, 379 insertions(+), 50 deletions(-) create mode 100644 PinkSea.AtProto.Shared/LICENSE diff --git a/PinkSea.AtProto.Server/LICENSE b/PinkSea.AtProto.Server/LICENSE index 00d2e13..0e259d4 100644 --- a/PinkSea.AtProto.Server/LICENSE +++ b/PinkSea.AtProto.Server/LICENSE @@ -1,24 +1,121 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to \ No newline at end of file +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/PinkSea.AtProto.Shared/LICENSE b/PinkSea.AtProto.Shared/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/PinkSea.AtProto.Shared/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/PinkSea.AtProto/LICENSE b/PinkSea.AtProto/LICENSE index 00d2e13..0e259d4 100644 --- a/PinkSea.AtProto/LICENSE +++ b/PinkSea.AtProto/LICENSE @@ -1,24 +1,121 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to \ No newline at end of file +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md index a37b2b0..c9c5789 100644 --- a/README.md +++ b/README.md @@ -122,10 +122,24 @@ The built app will be inside of the `dist` folder. # Acknowledgments -This is a list of people I'd love to extend my most sincere gratitude to!! +PinkSea was built by these wonderful people, I'd like to extend a massive thank you to everyone involved with the project! * [GlitchyPSI](https://bsky.app/profile/glitchypsi.xyz) for drawing the "post is missing" image visible whenever we see a post that does not exist! Thank you so much!!! +![contributors badge](https://readme-contribs.as93.net/contributors/shinolabs/PinkSea?shape=circle) + # License -The PinkSea code (with the exception of PinkSea.AtProto and PinkSea.AtProto.Server) is licensed under the European Union Public License-1.2. PinkSea.AtProto is released into the public domain as specified by the Unlicense. The appropriate licenses are in each folder's LICENSE files. +PinkSea's licensing is split across projects in this monorepo. + +The following projects are licensed under the European Union Public License-1.2: +- PinkSea +- PinkSea.Frontend +- PinkSea.Gateway + +The following libraries that PinkSea is built on top of are licensed under the Creative Commons Zero license: +- PinkSea.AtProto +- PinkSea.AtProto.Shared +- PinkSea.AtProto.Server + +Please use them to built your own projects! \ No newline at end of file From c6dfd67ce422467277f8eb97dafafbe3648598fa Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 11:52:19 +0100 Subject: [PATCH 13/21] feat: add OAuth2 token revocation. --- .../AtProtoAuthorizationService.cs | 1 + PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs | 43 ++++++++++++++++++- PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs | 1 + .../OAuth/Models/AuthorizationServer.cs | 5 ++- PinkSea.AtProto/OAuth/Models/OAuthState.cs | 5 +++ .../OAuth/Models/TokenRevokeRequest.cs | 6 +++ PinkSea/Xrpc/InvalidateSessionProcedure.cs | 8 ++-- README.md | 2 +- 8 files changed, 63 insertions(+), 8 deletions(-) diff --git a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs index d928aac..79338b9 100644 --- a/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs +++ b/PinkSea.AtProto/Authorization/AtProtoAuthorizationService.cs @@ -72,6 +72,7 @@ public async Task> LoginWithPassword(string handle, string passw PkceString = "", Issuer = "", TokenEndpoint = "", + RevocationEndpoint = "", KeyPair = new DpopKeyPair() { PrivateKey = "", diff --git a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs index e504309..8e3a4f6 100644 --- a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs @@ -130,6 +130,7 @@ await oAuthStateStorageProvider.SetForStateId(state, Issuer = authServer.Issuer, KeyPair = keyPair, TokenEndpoint = authServer.TokenEndpoint, + RevocationEndpoint = authServer.RevocationEndpoint, Pds = pds, ClientRedirectUrl = redirectUrl }); @@ -252,14 +253,54 @@ public async Task InvalidateSession(string stateId) Key = clientData.Key }); - var tokenRequest = new TokenRevokeRequest() + // Revoke the access token first. + var revokeRequest = new TokenRevokeRequest() { ClientId = clientData.ClientId, Token = oauthState.AuthorizationCode!, + TokenTypeHint = "access_token", ClientAssertionType = JwtClientAssertionType, ClientAssertion = assertion, CodeVerifier = oauthState.PkceString, }; + + var resp = await _client.Post( + oauthState.RevocationEndpoint, + revokeRequest, + oauthState.KeyPair); + + if (!resp.IsSuccessStatusCode) + { + logger.LogError($"Failed to revoke the access token: {await resp.Content.ReadAsStringAsync()}"); + } + + var assertion2 = jwtSigningProvider.GenerateClientAssertion(new JwtSigningData + { + ClientId = clientData.ClientId, + Audience = oauthState.Issuer, + Key = clientData.Key + }); + + // Now revoke the refresh token. + var refreshRevokeRequest = new TokenRevokeRequest() + { + ClientId = clientData.ClientId, + Token = oauthState.RefreshToken!, + TokenTypeHint = "refresh_token", + ClientAssertionType = JwtClientAssertionType, + ClientAssertion = assertion2, + CodeVerifier = oauthState.PkceString, + }; + + var resp2 = await _client.Post( + oauthState.RevocationEndpoint, + refreshRevokeRequest, + oauthState.KeyPair); + + if (!resp2.IsSuccessStatusCode) + { + logger.LogError($"Failed to revoke the refresh token: {await resp2.Content.ReadAsStringAsync()}"); + } } finally { diff --git a/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs index 56d2988..bd58714 100644 --- a/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/IAtProtoOAuthClient.cs @@ -1,4 +1,5 @@ using PinkSea.AtProto.Models.OAuth; +using PinkSea.AtProto.OAuth.Models; using PinkSea.AtProto.Shared.Models; namespace PinkSea.AtProto.OAuth; diff --git a/PinkSea.AtProto/OAuth/Models/AuthorizationServer.cs b/PinkSea.AtProto/OAuth/Models/AuthorizationServer.cs index a94f458..1b71e23 100644 --- a/PinkSea.AtProto/OAuth/Models/AuthorizationServer.cs +++ b/PinkSea.AtProto/OAuth/Models/AuthorizationServer.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace PinkSea.AtProto.Models.OAuth; +namespace PinkSea.AtProto.OAuth.Models; public class AuthorizationServer { @@ -16,5 +16,8 @@ public class AuthorizationServer [JsonPropertyName("pushed_authorization_request_endpoint")] public required string PushedAuthorizationRequestEndpoint { get; init; } + [JsonPropertyName("revocation_endpoint")] + public required string RevocationEndpoint { get; init; } + // TODO: Rest from https://atproto.com/specs/oauth#summary-of-authorization-flow } \ No newline at end of file diff --git a/PinkSea.AtProto/OAuth/Models/OAuthState.cs b/PinkSea.AtProto/OAuth/Models/OAuthState.cs index 922d905..67c174b 100644 --- a/PinkSea.AtProto/OAuth/Models/OAuthState.cs +++ b/PinkSea.AtProto/OAuth/Models/OAuthState.cs @@ -37,6 +37,11 @@ public class OAuthState /// public required string TokenEndpoint { get; set; } + /// + /// The token revocation endpoint. + /// + public required string RevocationEndpoint { get; set; } + /// /// The personal data server of the user. /// diff --git a/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs b/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs index 272f679..41835a7 100644 --- a/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs +++ b/PinkSea.AtProto/OAuth/Models/TokenRevokeRequest.cs @@ -33,4 +33,10 @@ public class TokenRevokeRequest /// [JsonPropertyName("client_assertion")] public string? ClientAssertion { get; init; } + + /// + /// The hint as to the type of the token being revoked. + /// + [JsonPropertyName("token_type_hint")] + public string? TokenTypeHint { get; init; } } \ No newline at end of file diff --git a/PinkSea/Xrpc/InvalidateSessionProcedure.cs b/PinkSea/Xrpc/InvalidateSessionProcedure.cs index 7653864..b14b264 100644 --- a/PinkSea/Xrpc/InvalidateSessionProcedure.cs +++ b/PinkSea/Xrpc/InvalidateSessionProcedure.cs @@ -1,5 +1,6 @@ using PinkSea.AtProto.Authorization; using PinkSea.AtProto.Models.Authorization; +using PinkSea.AtProto.OAuth; using PinkSea.AtProto.Providers.Storage; using PinkSea.AtProto.Server.Xrpc; using PinkSea.AtProto.Shared.Xrpc; @@ -14,6 +15,7 @@ namespace PinkSea.Xrpc; [Xrpc("com.shinolabs.pinksea.invalidateSession")] public class InvalidateSessionProcedure( IAtProtoAuthorizationService atProtoAuthorizationService, + IAtProtoOAuthClient oAuthClient, IOAuthStateStorageProvider oAuthStateStorageProvider, IHttpContextAccessor contextAccessor, ILogger logger) : IXrpcProcedure @@ -33,13 +35,9 @@ public async Task> Handle(Empty request) state); if (state.AuthorizationType == AuthorizationType.PdsSession) - { await atProtoAuthorizationService.InvalidateSession(stateId); - } else - { - await oAuthStateStorageProvider.DeleteForStateId(stateId); - } + await oAuthClient.InvalidateSession(stateId); return XrpcErrorOr.Ok(new Empty()); } diff --git a/README.md b/README.md index c9c5789..978d7d1 100644 --- a/README.md +++ b/README.md @@ -142,4 +142,4 @@ The following libraries that PinkSea is built on top of are licensed under the C - PinkSea.AtProto.Shared - PinkSea.AtProto.Server -Please use them to built your own projects! \ No newline at end of file +Please use them to build your own projects! \ No newline at end of file From a03eabfa592ac3ae67123a8a82f18cb2fb7b6f02 Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 15:38:38 +0100 Subject: [PATCH 14/21] refactor: better error logging for XRPC handlers. --- .../Xrpc/DefaultXrpcHandler.cs | 76 +++++++++++++------ .../Xrpc/ServiceCollectionExtensions.cs | 18 +++-- PinkSea.AtProto.Shared/Xrpc/XrpcError.cs | 6 ++ PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs | 7 +- 4 files changed, 75 insertions(+), 32 deletions(-) diff --git a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs index 12b580c..acf3bf1 100644 --- a/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs +++ b/PinkSea.AtProto.Server/Xrpc/DefaultXrpcHandler.cs @@ -1,5 +1,6 @@ using System.Text.Json; using System.Text.Json.Serialization; +using PinkSea.AtProto.Shared.Models; using PinkSea.AtProto.Shared.Xrpc; namespace PinkSea.AtProto.Server.Xrpc; @@ -17,20 +18,41 @@ public class DefaultXrpcHandler( { var implementationType = XrpcTypeResolver.GetTypeMappingFor(nsid); if (implementationType is null) - return null; + { + return XrpcErrorOr.Fail( + "NotFound", + $"Did not find a handler for {nsid}", + 404); + } var service = serviceProvider.GetService(implementationType.HandlerType); if (service is null) - return null; + { + return XrpcErrorOr.Fail( + "NoHandler", + $"No handler was registered for {nsid}.", + 500); + } var requestObject = await GetObjectForType(implementationType, context); - if (requestObject is null) - return null; + if (requestObject.IsError) + { + return XrpcErrorOr.Fail( + "FailedDeserialization", + requestObject.Error!); + } + + if (requestObject.Value is null) + { + return XrpcErrorOr.Fail( + "FailedDeserialization", + "An unknown error has occurred while deserializing the call parameters."); + } var method = service.GetType() .GetMethod("Handle")!; - var task = (Task)method.Invoke(service, [requestObject])!; + var task = (Task)method.Invoke(service, [requestObject.Value])!; await task.ConfigureAwait(false); var resultProperty = task.GetType() @@ -46,30 +68,40 @@ public class DefaultXrpcHandler( /// The XRPC type mapping. /// The HTTP context. /// The deserialized object. - private static async Task GetObjectForType( + private static async Task> GetObjectForType( XrpcTypeMapping typeMapping, HttpContext context) { - // If this is a procedure, we just have to parse JSON. Nice! - if (!typeMapping.IsQuery) + try { - var json = await JsonSerializer.DeserializeAsync( - context.Request.Body, - typeMapping.RequestType); + // If this is a procedure, we just have to parse JSON. Nice! + if (!typeMapping.IsQuery) + { + var json = await JsonSerializer.DeserializeAsync( + context.Request.Body, + typeMapping.RequestType); - return json; - } + return ErrorOr.Ok(json); + } - // Dirty hack :3 - var queryDict = context - .Request - .Query - .ToDictionary(k => k.Key, v => v.Value.ToString()); + // Dirty hack :3 + var queryDict = context + .Request + .Query + .ToDictionary(k => k.Key, v => v.Value.ToString()); - var queryJson = JsonSerializer.Serialize(queryDict); - return JsonSerializer.Deserialize(queryJson, typeMapping.RequestType, new JsonSerializerOptions(JsonSerializerDefaults.Web) + var queryJson = JsonSerializer.Serialize(queryDict); + return ErrorOr.Ok(JsonSerializer.Deserialize( + queryJson, + typeMapping.RequestType, + new JsonSerializerOptions(JsonSerializerDefaults.Web) + { + NumberHandling = JsonNumberHandling.AllowReadingFromString + })); + } + catch (JsonException e) { - NumberHandling = JsonNumberHandling.AllowReadingFromString - }); + return ErrorOr.Fail($"Failed deserializing parameters for XRPC call: {e.Message}"); + } } } \ No newline at end of file diff --git a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs index 76251d9..11ce555 100644 --- a/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs +++ b/PinkSea.AtProto.Server/Xrpc/ServiceCollectionExtensions.cs @@ -59,14 +59,16 @@ private static async Task HandleXrpc( [FromServices] IServiceProvider serviceProvider) { var xrpcHandler = serviceProvider.GetRequiredService(); - var result = await xrpcHandler.HandleXrpc(nsid, ctx); - if (result is null) - { - return Results.StatusCode(StatusCodes.Status500InternalServerError); - } + var result = await xrpcHandler.HandleXrpc(nsid, ctx) ?? XrpcErrorOr.Fail( + "InternalServerError", + "An unknown error has occurred.", + 500); + + if (result.IsSuccess) + return Results.Ok(result.GetUnderlyingObject()); - return !result.IsSuccess - ? Results.BadRequest(result.Error) - : Results.Ok(result.GetUnderlyingObject()); + return Results.Json( + result.Error, + statusCode: result.Error!.StatusCode ?? 400); } } \ No newline at end of file diff --git a/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs b/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs index 553f0ea..da4a8e5 100644 --- a/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs +++ b/PinkSea.AtProto.Shared/Xrpc/XrpcError.cs @@ -18,6 +18,12 @@ public sealed class XrpcError /// [JsonPropertyName("message")] public string? Message { get; set; } + + /// + /// An optional status code, to override the status code within the XRPC server handler. + /// + [JsonIgnore] + public int? StatusCode { get; set; } /// public override string ToString() diff --git a/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs b/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs index a8aefdc..5b9022c 100644 --- a/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs +++ b/PinkSea.AtProto.Shared/Xrpc/XrpcErrorOr.cs @@ -43,17 +43,20 @@ public static XrpcErrorOr Ok(TResult value) /// /// The error type. /// The error message (optional.) + /// The status code to send back. /// The failed XrpcErrorOr. public static XrpcErrorOr Fail( string error, - string? message = null) + string? message = null, + int? statusCode = 400) { return new XrpcErrorOr { Error = new XrpcError { Error = error, - Message = message + Message = message, + StatusCode = statusCode } }; } From fb2ebe26970ba514e94b6a9eb685628b6171df4f Mon Sep 17 00:00:00 2001 From: naomiEve <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 15:41:25 +0100 Subject: [PATCH 15/21] fix: replace '-' with '_' in ToNormalizedTag(). stays in-line with the editor hints. --- PinkSea/Extensions/StringExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PinkSea/Extensions/StringExtensions.cs b/PinkSea/Extensions/StringExtensions.cs index cc8d423..0956f36 100644 --- a/PinkSea/Extensions/StringExtensions.cs +++ b/PinkSea/Extensions/StringExtensions.cs @@ -15,7 +15,7 @@ public static string ToNormalizedTag(this string tag) // First normalize the tag. var normalized = tag.Trim(); normalized = normalized.TrimStart('#') - .Replace(' ', '-'); + .Replace(' ', '_'); return normalized; } From 594bee8c2ec33e2a7d5773cfb05bd15c4097b6ae Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Fri, 28 Mar 2025 17:58:31 +0100 Subject: [PATCH 16/21] docs: further improvements to the docs! --- README.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 978d7d1..963d84c 100644 --- a/README.md +++ b/README.md @@ -125,9 +125,44 @@ The built app will be inside of the `dist` folder. PinkSea was built by these wonderful people, I'd like to extend a massive thank you to everyone involved with the project! * [GlitchyPSI](https://bsky.app/profile/glitchypsi.xyz) for drawing the "post is missing" image visible whenever we see a post that does not exist! Thank you so much!!! +* [yazuto](https://bsky.app/profile/cryztl.bsky.social) for designing our lovely mascot PinkSea-tan! She's the cutest being ever!! ![contributors badge](https://readme-contribs.as93.net/contributors/shinolabs/PinkSea?shape=circle) +Thank you to everyone who participated in the GitHub drawing thread as well to make this README this much nicer!! All of the images in this README have been drawn by PinkSea users inside of PinkSea! + +### Page screenshot + +Top to bottom: + +* [bye.omg.lol](https://bsky.app/profile/did:plc:3vjz7behkko4oxk5cun2jebo) +* [fatty2can.bsky.social](https://bsky.app/profile/did:plc:tyugvzks6xkrx4rqt6qsnnuo) +* [sako.works](https://bsky.app/profile/did:plc:akbwbra4o3smxvbi77aebelp) + +### Header + +Clockwise from the top left: + +* [reileky.com](https://bsky.app/profile/did:plc:6n5bcgoq5q2d734ggiddmeph) +* [fluff.im](https://bsky.app/profile/did:plc:k6yjal5gikabksjw4kdgnpg6) +* [domatoxi.bsky.social](https://bsky.app/profile/did:plc:zndnaxckapyzp4q2yoeeyva4) +* [lyrinne.bsky.social](https://bsky.app/profile/did:plc:ru3xmujndfpilmaexvsyz6zh) +* [aikoyori.xyz](https://bsky.app/profile/did:plc:6aakz2mue7yaw4olibq3loql) +* [chimpbeef.bsky.social](https://bsky.app/profile/did:plc:e3u5a3bbv5j6hz42ew5xucng) + +### Footer + +Clockwise from the top left: + +* [alyxia.dev](https://bsky.app/profile/did:plc:6vwpm5wzk6t4n3jenj2dl2bj) +* [docshoebox.bsky.social](https://bsky.app/profile/did:plc:qcumxnjbtxhrpsrtn5lhglkf) +* [ofplayers.net](https://bsky.app/profile/did:plc:h7qqicb64fhosb6o7t5hvgwu) +* [thememesniper.dev](https://bsky.app/profile/did:plc:5wh3hjau5fsq65evluglwduk) +* [murrax.dev](https://bsky.app/profile/did:plc:rr4f7bfwd32fgpbr35gy5lfb) +* [vescien.bsky.social](https://bsky.app/profile/did:plc:set35dzzhdxffu7cmxtljng3) + +Click [here](https://pinksea.art/did:plc:vrk3nc7pk3b5kuk6y5dewnuw/oekaki/3ll5pqkgkdsvx) to visit the original thread! + # License PinkSea's licensing is split across projects in this monorepo. @@ -142,4 +177,6 @@ The following libraries that PinkSea is built on top of are licensed under the C - PinkSea.AtProto.Shared - PinkSea.AtProto.Server -Please use them to build your own projects! \ No newline at end of file +Please use them to build your own projects! + +made with ❤ by shinonome laboratories, 2024-2025. we're glad you're here \ No newline at end of file From 36599fd41f853b30246ff67d7f2baf75366ccf2c Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Sat, 29 Mar 2025 16:10:25 +0100 Subject: [PATCH 17/21] chore: add nuget information to library csprojs. --- PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj | 6 ++++++ PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj | 7 +++++++ PinkSea.AtProto/PinkSea.AtProto.csproj | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj b/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj index cf22ea4..3513320 100644 --- a/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj +++ b/PinkSea.AtProto.Server/PinkSea.AtProto.Server.csproj @@ -5,6 +5,12 @@ enable enable library + shinonome laboratories + An XRPC handler implementation for ASP.NET Core based on top of PinkSea.AtProto. + https://github.com/shinolabs/PinkSea/tree/master/PinkSea.AtProto.Server + https://creativecommons.org/public-domain/cc0/ + https://github.com/shinolabs/PinkSea + git diff --git a/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj b/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj index 3a63532..a08aa4c 100644 --- a/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj +++ b/PinkSea.AtProto.Shared/PinkSea.AtProto.Shared.csproj @@ -4,6 +4,13 @@ net8.0 enable enable + library + shinonome laboratories + The shared libraries for PinkSea's ATProto services. + https://github.com/shinolabs/PinkSea/tree/master/PinkSea.AtProto.Shared + https://creativecommons.org/public-domain/cc0/ + https://github.com/shinolabs/PinkSea + git diff --git a/PinkSea.AtProto/PinkSea.AtProto.csproj b/PinkSea.AtProto/PinkSea.AtProto.csproj index 7254500..0afb4d2 100644 --- a/PinkSea.AtProto/PinkSea.AtProto.csproj +++ b/PinkSea.AtProto/PinkSea.AtProto.csproj @@ -5,6 +5,12 @@ enable enable library + shinonome laboratories + ATProto libraries built for PinkSea. + https://github.com/shinolabs/PinkSea/tree/master/PinkSea.AtProto + https://creativecommons.org/public-domain/cc0/ + https://github.com/shinolabs/PinkSea + git From e0b959f0b639f628096ed58d068d4f84f90a6b66 Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Sat, 29 Mar 2025 21:06:48 +0100 Subject: [PATCH 18/21] docs: add the footer. --- Meta/footer.png | Bin 0 -> 99606 bytes Meta/screenshot.png | Bin 74293 -> 74262 bytes README.md | 11 ++++++++--- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 Meta/footer.png diff --git a/Meta/footer.png b/Meta/footer.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1511cc87dbec3bf7529df393cd96a6daf0a986 GIT binary patch literal 99606 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

O`ib$`y90lf zES7J9HplRn@{QII+1>A;#pjCTx$&CK;W0t5s5W$WeO9*4>>wj`-(1xoX@Bg}*|Q76 ziNde;jWstKPn{CJ=+>b7(A)f`!=HZVDU<3@KVF^{Ei;aZi3v8NI=4o%QfZUQv(3MM zIjT?695NO&&|iE|Cn7`{WH(!FhkO~mj19AI zYbOIYeyR(X+xft2yHk&p0U|^87WUT@TXfQ!VW=DtH|KseeREG3n0<&&ium#4jqOP) z?)QF*7fjFXR=NziFj>!g>amqYao227>!XA_aYfqbisofL`|l|whfS6qh5fm@T_3ht zb9AXK28CyW25uV}F^A)wm{g|NfLGv1-e3D7M8egb3zKJb)S~#w@37Jz{1DL0#ilRE zPyrQF7GZ&mvcs)kD&VSj8y<%i<_7%E-_xv&GE|T}6{hgW0wv#sR~Uo~sXdgq!l{0g z^-8GzYyejHIYYWp$F&p(rcBOHtalzh`hBvkuxD+e(+l#;T6Z&1#zoa7p7IwyV3;s9 zY!ED=^orcs z5%&xz$(ZyrZdZ=h3mtKCoO^DrmGaodn%nl1mka0{Psa1|)Ji4*K7hP%xu14$(~#@w+-W= z2#UcT!_*y}lU>g)m7mJ}y*Z3YDmeK&FEa74Qm1bzN&`86)Ju@W30arr(_X@6ap2c> zO5cnwwR^+g-T_cRClvJ%Z!y>Hz;-N<;2d>j2xwODKTpk4Lk>(4ESx%w6SDUS*wRA{ z6zb%h53UbjwR$HuvpxBpeRnTQP=96Ml<6S;9v^y)kPwIobe-;`Q&vg!y;8ENV72Vt zR%u%AZ&+XSs4sU1BIMogZjfAqxl{@?^H9&@@l#a!Hrs8kyZJWue6j`|E_M?S!mN8V zkmf2!@5jG4`Ot?Yh8s6({^mIGCov&vuS$Ji*u9|m^=>@=SAb(U zTO!ju8c$M}owcvARaf_5wZ*F&K5(-1f%RtTK*y~+@PxWGBXi4gw?HXNf|w^%?l^IN zGQ;hZ*lQ|nGD63fIdW|hbNdT) zBT#Ql+2N@i71i(MVwtc|E?Eq0;SJl;5=29}EWSQHk#AGEKGI8zMSHj`yYoR>cT;AE z7m;Dxl|XlNFn||pTc+9roKOYnCy0$^S9Dm>*FT6c&56hFBObrpgK0^29SFfC{7bBnR%y@oP77h$-q##o~Bk^b6mq$jR;}cdE;HG4{3qYoCN%@rpl*TTr9>lo?6d1~ zlwhFuU&aLq$+F5;NM0#7!eI4|XWSDf=tE649+V#G&_=}ktG9P${x14%QOt5sVzY)7 zShJ~y&C?k2B4SK~PKM}=&y6{hfejOo#uV^N)*d*S!@5?xS<^&fyT z)CRMpjG;lKUaNRw3_r^+=_(f(l~X6s^YC~iuCF~_{l&NMc~J9!o4~0a-8JkmQdOef z?5Xt>5B4GD)$B!2@onpFN)}p3?Q+Uj5xZ_ubnJzj9b4jS63qVj$7snQJ0)gH#5!ji z9dpp&c!hO?aOke&iS|V`?Cak8Q@_(7u`m4pD~<7J-ll2_736$HPkU-8f<$Ge?GnF@ zl)_O1tM|7RJ_p;=1`(m%w&;A91?W0H$8*qNvoa1`#!gZGo%WQ{$(geZS)|cw~A^)nYYDLYEWOKsYp{ zMDW+^_FOI2F~A6qR>0v-i2z#I0~1VP%L^?Q)G!Nbd>7}`;kp~|D8oiR(%nz>-O{|r z(-gRxLYlqhU29j#{ZOo<6}DYx!`tqe zqbmyVC$U*av>baKHlq@kbVN>I9sBdB=)uHGeiL&ay=9yuk7Z;<4b#7Yy0m`ou@Fz_ zF)x$k1az3MrBTtgMJ3<#BbJovoTgYr8nwjaXL28->u!YBnAHDU=y1aa+=QTh+sVAZ zzB_4Q;sBsf6V^_XQSNNCp39}iX7^m9A~{B6^0%hpHBMnkEU<$Q5W!9B=aTXXQTo5W z>4hifoe2WsBJsU-hvR4XFO~~9(H$vV3F;n8OT&2`^^a=`wLZtYA4h}uvc_}Z%`~l3 zDL@qX4vsH?x;VSm?|vRu*{U4#?aB&R8;A*jij-#GY+|S6VQbv1THr8>D(uIVavq9M z;*s(k57@?0>0ehwqkaIdrSrrCbrmG#F`$9n8hfP{_9%znCjB1+oZj}y!~?!?{4eLO z_RsIiOj&l^RM3K0{nygm6e~TKT`)27!79jC^4Duj(6? zZ(0sad*Kp~K-|>2g{m0=Md!VuDo^U;g<#K9QzszHf;v-J>6_1@dcUP9UAuei=;1mA zB4THLMHF38der#gjc29*xA_Cl^CrJhMk(SOw#o1H&FJcAXvX*H9a~fd*O!2@?!f#ZG1M{Z=VY}A3tNGs3 z=gBCUq0VT=`2o=?9|+C}5sO>a^%2KjcE8ZtgcJJu+1zpVgLC!X)1m&!_n?9tYW=i4 zZgkp$MeEv^%GyATOGP4~Y4PlED~932x$;+{%$yZbB?Qq&P&2wxF?yAGo%nkL!Z%Uam1##t= zFDv*2WeHgO2vh!X>R0Ra{9UxX;un>*ebKAoXvjC(Yihj--}2d)o0vo^=8yF62eDCV zXB{{EYv3iLLr?fsIV1#7!t8bK=q}8F1ytT_ltudqJxEa}Cen&1w-QrO)fD+(`_+m1 zAxrbUJW8}uD>K3TDS`yJXd6E0q+6V6amF9+_#6b{oK1DWw`-^++q~ZWG-74q>+`eU zMZ0FNA^<>EK1{7U`qg&UJPJPdXraSJ&M>Fi{1EV8TRK!%fu*Wx9<#kNa@4mcPs}E9 z=RRWt9x;OyIGI7(J6FiZ3W zmqy!OCYjKX0ad@dqr3%NFtMas56p;k6p0L%5?%0> z(^{Qf4aLPDRJhTH0gmR^UI*T06}6##3TRAAE$iBq{j3Ga3eymKUYkS}pSm%8KRgwb zL;wdWeXO$ee4`jmhqG=m>rv3mAEY2d_QGKv!CU>mOGDG4lBovol6np(BRf>O&yjqL zFn^#W&4@bk-+0=zcdoTx{KOx%pCT5~ujM(~frbb&P{d{4IZ7nU(&cAAt_+7q^ zRy$6^M|{`{vlN(89Q*sSmS6_%uiu$+Eh0LuH6>J*>ybKZ&4x+3AcE&m64Qw6I!eI?A&ZzuJSX1eGlU$=Wp zs^*?SsfhRpIag>3@Vh?OD)Yr~c_YKsIh>q+#hIFGtlDG=B}0W9EP@Zb_>T`PIXr7d*h+y zc75yW)5#A-uE{}#7H-jQk5Uy#{_6T@Iy$nIO@HdEI(D~~m;8n+O! ztW!>v$JT|%<3Aw_f@%`O{#bXNGgtSh>dza#Q*A`f(A(v<($U;7UHT?99&f>iri#at zbEA(zS4&8Crj&|r`0U+g{rNTgeNSo*S<5D$;SUuL&n;c^#hNhZ2N6IX`sWTGA@s#O zpCe-kASm5w(ZI{$a}AmcFR3tRl7!DmwKk8Iwp`!6O>mf3aEunOAHyBJAM_3gj>kXB zw*gE@w8jkm>Ah)9fyUySTMvp-q>?V{7FZ2=Jh^x#2RfH7VmdtTF9I9KK6LZeY_r_I z;=L6Uo-84TRbKymiaK;FEGGza9j$tDkS|(c??T|-yZ}Nev&xrzTjGnkexO2{hk3yQ zIq;Vm3W6fU*g*GBHGFhp%NJ9xAp4e7OZAh5MxIrrOg5q+r7G|;c?-%DM=p#JXMv{!8Yx#5AJC7 zBSE8U{L8q)pNOX1Yeg?+qej9YD}XjhGWzRQXqZ!oVvuvp-HNPiUEv38er zo}V=yjNV>Z;aE0owm-joNnQP3KH~+?pVx}NMV^9r#WQiIJ}_nvT-en5o?KwFEtNS| zRD`wwYs#LDvU?r%)76TX^_sj4*6G<|???3y8ct@xQqRIsB4KO_nz~aj1zC|K= z1b`{aKCF=I*Kl7cBZss2Hcb|XTGS53o!r4q7X1=G<5Z)*7|*|Az=<*|GLt`&zTbj& z+4-x1Xe>?vl4B76wmTzK=CM*Qjo&__y|L$2rO5~U7pv;Xv|0_`a*vYA)F|(1Ij%^4 zA?r_`H*uxNpDm?#%%(>^DV5WA-qq_13ZWzztBgn;{1crU%%#|0Y0D*4~;VLy~T{46^{BY_s z!l@D&Yt%eQ{~aJ{osJE^B0uYNsOKigyj3Oh4NGsh5q{S?giUO}nAlc}c(|p+7O0p@ zHAI`mp}SwTpkJCUlbP%@l@)M|u{2rT`vSpE^!i1RT|@;#Te@ z3bJQ>)Q*V_qM(^MGF7fN%Tmm+8*_uEaWP+VV7b&~J`hnQD3r<6FKZ;BrD~Jk%MdM! z_9z{a$osqB+I4tvepBn5mcKI$N;uE+EaFGR9IFr2iFhh{7Lyi|`x$@-Wa?%Ovr$t0 z?_AW|XP}p{z-P~jhLgy~YIS5Ww8bSyetbw*3(b!3N#(w4dSOUo58d?|Gd%zHt~bbs zv^l`m+PD`VQuW5QSxNXwqJ#^bP(#tBXXeKjl`qbRb*%(x(W&)Th=T-?nBOTbJ=eNa z_F_bBkGG|!>w`fI<98Bn9+V~VOTDC{3}5(n&o2vT$YYo7>>14~i=1D+A(Y}OUvTr- z8r1og`&Yv)x+&FyZ&I(Kaa-{-D*9a+K%KSr^w7`n!&${k?iVP+A~2yPw}nM41hgZx z`j1Mia_pYiH+9XVN5+9#MPwgF6W+a!r=h zab${%j^0qjuEXaWd#5Iys>c1!vE!|Rvjut|qJq$7AHGY1D!%?f-i`B*`XZ*3q&J%Q zk}4v>1&bY2aLeP2vS5%*$@ z{|ph{u}8aY91IT~N^clYaJUAre^g0-GNk~(%gxRc*P+u&L!P6Nrq@`5r>iWI5=#Q$ zZJs$1L3u-sWN$#oRMKm7tR0ODbR^g-qR)ZD__7C_8a}7*+MwmLb}#^Lrf5Zb z{BFM6)RVX4BK796BM7i6G<`f3B@G`i^#F=sg`70aZlUhr|7fqrP6BLe zlEGOPggRtEG-9&Vm7jjW9GKQUk=XN^>mgNFJ;Oy~CK$Hk?p0fV_a8a)qtaKRWTPWp zORqJMf9tNQ)wpWkOWZt8Zc>d??#FFco%H+6So`w` zQ#7-=akVvH{jI~csVx$AiWM8Mi09h$7uj`?=hUkD_oP&(oT;(5+&$$ zG&&%UO~>s+@us_WY4k`|UliPdPAWn3h$h1M^gq_z?rFeqYA@c-wpg>UeZDkf)b`Tf z_Y=?7B385K*acv`Et_;Fz(yoF|G_RWdgN~|3m3~f)oxS?uuUaX1|l0+`Cox)4oiaa+} zd)>Y07Mm-CUU;tkltLi@HsvY;$MEXM=PR#jKe@fGcKzS$(SwK5nk;5>QuY3nQdLv% zYf|dAHc6ze=gMlr zMAjTB#a9`1zecwsk2)7@A2GH6!FK*e2X{Nqu$VmEJ>_CyXGiwNU0Isz1|S~A!m?z< zi$aUs{7D#s=G(@L+UYn+jhXY)Pb~tFlwxb~2ZDwkRc8ZusCFoB65qBUP%wMyWH(GB zE);$_OG5uqZgu`G_XCe3rpnjvu6m!Q_@+62K8V*m@bjd2%KqC3Ok~ToUFyM(8JRcl zjg3~Xqoi!797V1b$gPzvJUsE%y_}j@q{Eg54#he)aLVEMojX^u-@B^Yz^}oM7=98e z%FEA0e=d-LXl{mK7Es`8eRB+naOWeG+4f3{Abl%(OT9n$iW6PwSOMEH_;5>7?V&0F zA5%(ax`e5051df)~*xb5g3fI5Qqn7)GikA-rRk^W)dreIjL{kC~W8^O8s9Xoa$Tr zoa--U>TtAMPxPs^i2yhJNv}^ zX*37Z81nbr*28Cs8+ytGfOfU_d%twRCbYlri(k|d9k&(kL&4mZ_boM9Qld)h$U=(` zY4eyKs1vIloF%UZ4TS<{K5r9n!@a$VP_2B17081@D^kreo{)ZHJT#-4pOP3%e0FD4 zwh#%@QuI`9L`A+GD0Fj6b!K(1M`a8CF*{NE=;6vH*6>n*Xe%D$7-@&fNNCzFHVzx zY%W(APb6Zfu8&E97!&iB;bW30>I_~z+!5k9InUMlBYu0>b4i?Dq)=)n!=w)wsR2(g zl3Vs2v%G7Wzt33S`u^c=VDTDhX=QYP-DNFuidzin3%EUReT2xvBi=|JffC5G*2H0# zG13>aE?-TJLG9p9$39G zCTJWq)Vxv-K4}xGc;?^t=okIMEI6k{0%P|7XG3W84rZPlU@} z{JW$$AgXXi9}F(1U-{3AUQPgguew3+(@cWi#$am4z~k|VhzzPh!p1x?wa^7EBEo|q zZO>7H@a>BI8seY9Ys{N4r!0zA^+TcV0N#(mm6pxq!n1>ecXCkVdp@ zp#BqE;#)Kzd0V0$biV6bV=;Q{vO#5V7;!n0T!BmRF!E8;DYIuHx7_Ghi_9;S65urt z`{^*v_!B80QF--7cDy<{p@bne(P^-l1P0}ljdleQ`RP}AwAl`)R0D0>n8a%{zOeUwnig)u<#KUgRux%ZV%uV=w z+Q*0l_7ITpE)Z!`HY=t@%gwPPzarD|zf)fNpSl4g5kU3d1E3$lwX9eE-~NC9m*}-0 z%do?6X7`zwel0G3(Z6hlcNfJ)NuwCJ>JFxy&7FWD7QB!jhsz-kA5UfVSIf^evrm5a5zkW!#_0ax~fgKuR;>rRmcW{y)J#L zlNbH;hHv_5hL%l8yTDUZFPYzkmu85ClLJ=POp#)}?AYsl<8u&)zo1g@J-wj{IQ>H- zP2+u|wKV)!F1C(7u4$v!Lb=g(;k#pUP@lDLd5uor(`8qLRdLd3|Fuxg*Wb1eL_M)O z(FH*xPbR0j#wZ8F6=dF0^xXoIH^epV(hvz3U%8u6Gy~A12^mN?R<`ZYe{g$v)ix$i zRePm+!Yau)uL^pP5T8Qcy`z`xsfLc^nI|TvaZ}b7-O0Jq#M7Aw=7Ro}kLN0nUCY$a zKCj-5dh&zUIw->MsVxmipfj}+Dt9T^;kpuo((c^+!xb|OJ?t~ioxd(}jJM%>>S*Zq zYpUNf>z6ERjYjvc7RZRGemV#IV8>*$*2vqI(s4yi(_gh+PUJvri+~IrHf=f?{ta9U z1h>$zflf&Al%6N=m9;0LNfC3})jzU(v^v(xj_H|DH%CT|xt5CNYS!~8TLl2MR#jWG z_@i+<4HIK%_ zz4aoT@Z5p0^epQYosw;ilXiQBqWZ0A?&n)!HXUu*9}Do2A?864*oSBP0qWlb+O3`VBBUzYoV*xc_5vn7!YRId8_)rcl5yc}KFwO^CyY{^N*wIvme(MLEi( z$VMp!gsddeNNqW}a>jtGCh*|eC7mygAzWy=?U5%2)$V+0L5Dsx&%*=OIt1v*Ml0XL z;E7_(W(4AP!sYwjPv*wz(EdI^$dLOoMGxu!{jps<`)>DeaxG(VoZ|*5az1E_=vlB< z7r`}s=r*kVEWj)_BjVt}+Q_k#?cmyJ&?`|7zR*$5wc)&`BQ-E$pC0geFkta#X1Kpk zSAvj2NAd-tF1yv+zC#vXKkJcC^QW)7Vey>6KU99d@m6<%7($>+c51CGbik;bSUF!8 z;7OP9n2YhRhBi4H9WApg^7730R92B5uZ}l-bYvt~8urB$j`p9lE}HkG$&(HDDWV1uNMM8@-ABkjpCT7?*ZB z_FB0U_D$Fy%O^A6nn2!oY-Trb3v2H^pOrX;gIjpe5(sjg7k{t$FoKBq-HRvzUw>BD zx|M|1!;vw#cX${3*mudD2jx7xGx_m|_S7ERy^ArX``Isw5$b60rk5d?rDwLI%m^9$N#Yb!#Rp z#eQb61pWnZ&fC>SZFvRyY;G&>HzkFLS)ZvvCokh7gfBS4EJtm-bn(FQHOu?#rK7DW zqUEwy#VX~J;lI1aMoH`V^W$-fCMx2TjBoG61v1)|a&4H%LgJ^++=I$v;LeUmXnUpT zYU>NSf={^8`uEf2v$7NO^iK4|{D{Q5HA@5*y#8+ms4`$bTKSD%d2VTn{1-6mL<)>6 z0%kt96)NB%&xIb?8EErp{~jzrvpp&YS9W^Ct-s-%6F~HxRiZmi2euq;3}^4IbRx$% zb}IVr4I7gXpdL0lwMT0BEBY3QB?s`Dv|ba9pupP=@k~^qH=HT7`Z_@j#o1VM_T+5F z829p*TKpGG0VSY(HMd$Jfjs(_zz_->o0xEHl$^t$%XCyTLFA4Ja^!`|zqHM5*&u;xl@2Po_vJ^k|=$-LH&W?&VeG3!B^Z{9OQJ5_C=)*z@K~KT+X*wnWDq*jla-t%Wq#ZuRp`i~Ql|Nrj^UftZ+_lwrPf z6=)a4K^AP39}!@NQoB(1clmFD*0}qQTO5TJdGH&_%X*=B7*5)Q>v4o?pJbfJZoR1+ zlv+YH>#G0dqpj5*^QRFRH(s4H8{Yy>TKAYs&cl3%-p|5JQ3or{wBGxx?LL13=3wMR zBk+sCyN@XKm$4mbpQJ7{-djlo3eh)aNm7J}+p22baFUo!WH+bWo&JMX>Y`WI0f`9T z?n!r&EB=XJG^TMTL3sGpCi@Rpa8|7T^CwkRby)>TR)+g@r>1;=G6@0rL)3**4}T~f zj$(Jb9$u%rJO*|po$cUQBZfRQ2v0~aei(|)VE^%KaVB&t=gQsVe+(WUEJb?NNs?z0 zqLJQ5$A0#6R=Cr_#)A^+Pl`f-Q9T3A3XZtvrzg>-{LD4k>~Na8@}aBwk5XI#H7L;>PsWtnpdA~m${Ui)59>R z|Cfn~td&t;p`@gxrLZulb1r1;e8nn7eOPqwLuhWg7r6N&GC(W=MIUF-eyjjk$P`!| z?Mz0C`ffZ7uM~IezZ{0^7kdsbI?w$wc+i}@PAB5MVnKcGDy5)a{+|;!NW!>f4JBqW zMO{qCjnnJ-wr#wAL+TJ9PEOjkqRIspCBgsKwpNNsUE=y67W1XM{adMREI2z0OI2UCVG2-auf9ah4_$k=*^o6*zK$t~CK41>IYPH32JhpVYi^wQxRaCf@ z2;&G|!|TtL1U@8CQbZ%GYpvyW4blGu zww2|=@0=tt+sI3=CyA<=#{pQBtwFuN3^@(k-1?&}xZ6w+W)GrlsVZDXFQp5Bk=ry? z%m}d@pUw#$O{#vO6)?()E4Mcz&A^@NIV)PR`LK^P`GF+5HZ8RQf3<3?-p7wdn0~h$ zax^G!RtNV4RHq?t4be(7*4Cs1>bkenfp!d&`4WxRd8sIBVeoh_Y&iOTz?4%RKX~nV z3Xd+zyv~;~*kSMxcIM-l{YEe=pg?$oZxN&h@vuLZkeY$MgzKUi`ap!vC2y zR5%(QWQ@|s323!}i-WG)W%IyY+ugNaS+`H^p-Atk{&2a|K|+ATK67f2|xQFB%JB4^SP|Hq{6tS-f1*tkIQi*9|fU1}0nhCCN zHX*iX^&w2{g0Kb!rKNLkUj9Qb$YNdH=rFdBFhXYKyC3j+Klx1IZA)3i+3UL@uUI|T zeK(gzlf(Y16ElR;<8iR+8yiDN8B3x^(Oy#fJ|>n0R_~=;h0PCPc82uzypw1%Jsi5*XNch$RK>SJww2Hflh;DrU+2Y-OQZT=m5SuDtg$QUweRqWTTU(S4Mw zV~d8VV~?Poi2B6#nzXu5J4=JyvRCnFKMZ6BiKLlg$&&L!FSi!@qW)SU?rSvG+eQgz zuON-N{p2=&s33yDwx^45a{*SpO~~ou=%7G31Uas)f6>r>3ppvZV^-j2XsWe+cGT0_ zSgzJMXt1-1k7q5Gw>s;A!?5Rs0Indf1arwHs)eVV7~pbSCmD_R6iD)MpK?MHGK+YOw{=0vYH z5+|P;Z5G$~543yMeXlques$$456_i#HB8p9odb;moM9ipMuo)uoowK~_qR0p;lJ&7 z)8q_2d-|$4q1@==@R_2g2~7u6sX*7SR1EvV21oA0iD#GBw`fJQuWWG$`K{RS@}S}> zL+5-g$7r#2)!hk{l`g)p)owh5krj_c_9<16Uj?6- zucBu+`lDPs7BznVK5K`avCU;)@20rTudvwvF}dU5L^L1Qym~wTS%>jj`QbgfSaa|d z4u0#{gz5ENN{j})4A9G!y(hQ7m;^H>ewEuBL6{mdxNavCb6x#^bKR<^rff!+v34i1 zM3bWskDnX!y(C}qA`d``{=lZ_Nfu#uHeH4?@HxOYw^Nem^n2_lq8J!iJB1HjO8N)~ z^P~>A4{sFk+Gys+l8m~5^)3I9)3M``Gy_CvbVrYNtMt<1Xzv!!|I{E)zcd- zYi$E1T!L&+t9siUzyc?t(^}^NxEeMOI(P>D2^SuvzlMp}+m(gM5{@%J1004c3ikbS zHqbeTN57{37ytOT^RQsQEaEYDFWS`}#w2+IOd>RPOQ?QZ?w=oNO37{vLz{*RV6UH5~4YWVZhEr#8arSEse#KnD-Od0`6+cjoH z*AtVRKQ#pn`NT716qnXuS8s~@bo$q)YseftR@bn298u=n zpAhz6b0hLiTH0$c3_u6er4?GydJv7eh)>9APz22>4zV-4QVMic2tJbemKO}~u8?J< z2OVPnKH7q8EXldsT1&~b=ji_Z`~L={tRZATV@DrMs~?EDzJk(>_E28y=^(E(JUO@x z(8r&>`tfZNi@|?Z&8nSr3=Cl#8y+-IHBPZ#I}^o(GpeQGR2adF!Jx&*z6Ygt-C|Y3 zx~1YKv?j31f2h!Q^x^CIbx{Ka#!QIEOCvHI7brw*Xz#svavFS~J#Q)U!!N)zpKt>) znSxdQR5(VRJp%}V7DiTBI} zeU0=iwp-UbIWH2UJ`WS5>d(WJT%gpGn+Bnn?#5wXkvS&}c58>k!oU8C;{FP$7Bi1~ z6k!P+9cDoa_aHhEM$bm3{qz%OT>jYdO>i%`81(7SA5IFHA8=dW{WWKwLVqTL^t$jZ zz~6O%jV{ucr@y@?X?kkt!Gj0%oSe(QtvUVhq8uJPOrCQ;NPrYayW?h&$4pouWRNtb zk`P9IKH-k!QH@~UUX`X1ma%Q`0l#D|{{`;w*BoM1hu)LzGAr<1lK(Ydq5#SO6P%Pc zP)k6UgpKl~cS%V}QS~c~WXH0y2Yh3d&sF})W z&3EZ89FE?88nH^%{^TBpyF*bRv$r|57FEFc+VC)UiuV-f-zG@qEDV`A` z@>GLkOaUi>?o{!FHuG9p%J~>daO81ta6kk@co;mWg4KRuOU85I_lb^R@T&2ekXjjGM9!dbgKU5i;$+6w3IqSwGeoPx1$ z1YKB2MJ%rCNq=lEW1~a8ShS4z78MnxVq|nqGfmE6EAal+qk<2g?Nc3)lOVt)WgD}%dF0&^JgTFocNQ|LFqpdfMC2PV3bRL8idn;PMFIQg5T<;Ds^gF| z7T!AKV`1l9`jQ)Pc(Ab?5&dGe39Qc=V97G4ou;q8AS|p&^X=79B4wz>s)D`zp|r8x zo1g_y+!}{%eNUC`N{ow(GrXyx`L`uI&~6ZK$t>xYG&~>+^~lRq#j^;J*?5_nU?5s` z+(jOu9@LNg{Xp}dnI#X;Gpjsilnn^QIgBga7}4l@lAl?(nGlWe)M8RnzJ)zhfjf9K zP}m(J5*CjSv>D8|lf*AP{2Ejsc!kSP687%1F;DU60)Os=&5fAeVh+NwYNQogS*7C`jUUbO{gJ@WpR+$Y+~MP(q%YQz5+d{a_c|2PdZh_;X7-4O)mqUx)d+M2n>%lL7F9n`)=4W&ojr zc8Y1kk}{EffLr8n3YTwK{M$$utIlSbq=LK_SM-`Ql>+2wPdlGQPzz67=hf}(JxK)T z0rA81iji^ioU}P0Y*#wUriKxNp(u5Xw^xudb_pIt#;5T8VZi z6$%$E%+W|83VqA(>59=XKgW%W2#BZqdCj5uE5XCJ@#@2%i6#N*3#wD}RHa`Hg>LB; zQ~^=;E0@}GW?^VuFh$h<4d~Yb@rUSgPh!^?Ou{T;fk0Tms3A5w?c>kk6|b^J=~niL zKkr5$YD=fsiT{NWK2yK@8m7U2FvwEI5Gz1zzFsS+olwzPdqt!RyNTZUNni%<4U{Sz zm)B&8U2fnhz^I3t8DUK)+hj|)5l(?D0I+rNa- z1D1=cTMBwc-_vZrEheu{UY2iT?HaDjzmJi2+7el(7!G5QlSa851P4q^ys#UP*v!fy z?-}pQ7-i@g9mRPJ?7giqUoy$A1AZ~CeW!eVa+T9`sNu8d-MiyxHg8&y%KQ#@WNrA) z#6d^l^rH96%;oVye}%yzsc^;dZ~kUOrNVy80-jI?KGZFtGrhzlw!b0f@U;bCWip)$ zQtbUoop**6>>^1Pi`aB#;7w@UONsmG#g^STC0Q}T{*uI=wUtM*J% z>$-b!rJKy^{qvZbd?8%tp|^WLLRy|+&+xnUcf)CC%5FCh{CB4l`J;UfcW0-a10fsZ zkhOQJvorC@=f!z$NI2nAHns?F50604*!GNyX=Llr5m(wanl8TO-!Hu;)2V?}Ec4#C zin@-z(#@vO%e8-%sh9z4J-$q!4n^9_56#`*_t+Ppxj%pB0-srfnVfa-O0?x75!m@R%R&w)C(W@VKLaar2u>P?;!|XXcOu z_0GQrI?wSvqQ{*<5r$t|T+@GH_H11}#(p?3sD)4yTsQbsOW+THSSZ3OzE!h=*gDzD zUh*2=+aLv+mDe?*ilC_($P?0TLQrM^^hYL$B@I4P7QO%YQ+tJ|-*2a=18{A6-v}wg z>f^9*ZsnH0WzA5lxwF~}+~*^xkuz~C^P=AT$G53{&FzOU+!<0vG(z)s1XT~w^9Q~q zg^gO_*ZJgXrXy>?2Ee}$ghzvKf-gG)LXgjR%gzhGhtHu>GVa|XA;JFVx|}%zrZ9K%l-H|y(tmx{JJ@t z8MgdCH7*n$G*6i}Ue!J$_Az+V6(|1DXncObJC~;P-C?C9LCi$IbA4?3Xp=|zsspL@ zi|l4ky^=Uy8g}`qgpAY(3?nciAfDf)d721a4dN*msD7!$nTRUEh|g2tNE`)O0XiV{ z!Sg$@S7272J?wbOU`O4>ZtLW(Ag4VDkceQr&1CHU4GQ}E{}DqbmAnn1`WX7GFAB^N z!T)T3F@ihE6#oMPsY3noT8Z4C!i;p3$4QD56P{<_JZ3Q2o?@m|y4Nk8q-yg3T5DFR z{^xb;gYwk}6c487^Jyynwz^z7r*}V!kD+Iw za;wCPWptE>>lkh;f1R*OSRITeAK-M@q13v>4(>;+yQ|g1;cV{DOAtRDBa0N+cwDpchjOl zM)4Nav1~>f-b-U#m+ovGanl?g`O})Ck3@ba^)q5+=rf56997_lwl|m&L|pL-r%2fc z9-dNXxy8S!Z5Pj}AdmeyurL*~9;BA33V^N(Vq|=LwD&ZDpM2wd64dOCGjF^7>FMt) zMP7j`{VHXa6f^ z;}*X&ORCiGZ@sBxRMfO4e<|uTee5V#+ecKbuJu&&oCEANLgKDG_;0ID=)xfYm+yc}8SXS`r^Q+Fx z=wVIopcd}HcpwCA^jG@)gFqtu8f$V& zyYP5vDDi~2oD0ZmhjVpxwZbqbY;UU;3SR%Q=e9E|@94NE;GELNOV@4T9Tna^{ypv) zP@88?zNr2yy7+zSh2Ub}(IaU3Q9)mHt1EZwZJw=;F$o)7VKnR1r5Rd7xHKsAx94O| z0~iPG(o0JQ035Y}xFf=Ek*~7^5jcRA$oT!QT`!ru zx>W6k7(CV%cbemN%oUIfuq!VA$)JmU1YaGr`$QLQL zvKj|zJq#avb3e2jZE!^diNhnx$jwp6R%q$LgaWeh~PZ3eCN8 ztj421abAy`@2zh8Rl|D)cdiIY-5uH*$pVr!OXb;y=D?{L-F7^}=c5sClm z0kEodW&YH_%;PI5(nbh&7SwY6?acnM`>G^>X(}$c z$N}pFtOh8cccud}T|Yi;$Zwsi6Oh5-$r5c!t$)7*@NXXgM`J;t4#YYI|0Czm2}A(L zPj=k`DsYoh!CUf?s&a2=%g{PNDKj!;#^961DeT@3mA3A$w&RPChxEYHv1#k-QF0D| z!wd>o0bX6;n}NX%CZ7e|Ibp0~Js_ev&xRVD)xR5!;l3ab4F0ahPWck^!KR8)Hx zeeXea$o6QriAZrGA18P*!c!`*b0!m;M;%&qR6H-_%t2>H42(E%f*#P=ek)`Vex={6 z)CIp5ltw{~p1+X`aDA){MYe?-*UoMRCUNY)wCj0;xzW`)r3apLG!;F6@BORw-=~mI zwV?b)k%-w^5;mX-XcNIF%5Om39w6T$XSn@{s;zf%e5;Pe=!VwH*Cm zU;t^_<)weRT@tNiY5dN!a#O)8FBnV+!YU^3g8`~DLm+3@aH9qZd(Y9a8Bd#??u~kQ zfkC<<5yRlxbwN>#MB9k;lUwLB7~`9#z!?D8`SYh{(>wvTBK=l3PC!Qj2F;QR*rD*QhkQe#8*mkSf7}yZR-|G0#QPOAG{n|Nr(o?kKAtkCSpt3ic zOgl#q31jq)14fzWN6X%+%$Ny))&VJyiD~6evX`=#T9BlzwD;tB^1G*HKkAiVD!pz$ z14NZ|ffGaZ6)p?-j#7EQ`N7RTsCmOb;R;GZ;I^_>CyQ)IBLDz_5$ArT#?_2Sd)dDMB;GQdfg!0@ z$4*NaSIrN)_x$d)7A=4wTbm!0sU@92njO6EK!B5)7mvr?)sfktFZ%g&8z@vi{`9UM z{{2U8sh6L4y8E3FIK(LylrO3Hno1Edbih@BV*@xWM9<9eHa1JRwdHuuK|UCdoAid# z76}fgb_yfOykO%P840~+z7-d1<~(VnB_-86xmHw)Ubwghr5B*9SzH5Rq7vikLhED- zdDxSK>10a)j%hp)h;y~-Kcodw6!-|~4W2bIaKdQt>!*mqkSyKZx)Z<*m471(`apIi z0S+lBMpJzi7Y~)Xg{i`=~JuRQUP!6Bz7nC!it6t>hDk8Is` zvIPLnWIa>J8neIc8 zQJEeivAAmWH}jkWGeTwSFPk~0&;6CBWi`I*u|Qc z6tx<#gXqxs0N>r-&;lY-&M=`t?Ypu7V{DAd&nT%CY%#VG#8 zT7Qrj`u_BnB9QnSMxL`9lv0}Cf%2Aq&>}Fr>YvyC0HU?J*%DEJ_G#m`NH#133`>){ zB?m3m{*%ERUG!=03rYiG7U-w;wKOjwbhb^BB|~zd9FX>kW2MUgyD$ z)N5qYi>L>nD=gu^yZU(_TVv$?dn#gW6xV-rN-s*|)5rJN^OYOKM~8rU5s@vW(v=Q+ z)M|eXG&XJ1ZogJVSml@o%WeMM&eUq)Xc)xB&Dy}|YtU20({2&CvwqE~>0nlKkg3y=6RSXhZua{ys6A2|DV+?kK1M>6*|lC&OQyj<3a92Y+|B7euGjOFVL;Gi;faM(5d*Y1)wLu%E$Y={K^x&fkq=6_-8^F&=XNZ*xgZw=Pl@yw?ImtP zEdMn&^sh=l()V|bG1_-0-8c(sj?71aay$eUYh*TXxv_}x0q@@he61+$_zo=N>r6rC z!FP9m4tOAs7#c$<-OQ(tcrMemK&A2ib)pr&zGTwr%y8fCZ4rK8Z}L7r4(<$3T@a00 z+p~xQErKYli4PZlS7{@Crx8mQmG;lxv^;H-$lrjx`*C)2dyE2UHN8l4CsicQ(iK91 z1lIj-uWAi&@rHD)>3!`!e>|aa`B;9F0hD4vP;?_kG(3re)QaUUk@wnz?ls8B82O8% zD^NPxGJLWuf(a;nz}$4Z-)Soj`j6Qo;mb`?P)GE2yaKch1|cDG0OboeN-{BZmtXt- zT31vwcpF6hVxOV%y=d^KIc*aSDbrJ8r3*UOU$ILcOI6}*rpK(uXM}bI8?opLJwTuFC5;O?V*c^`swk_P{1e-`h-~Iltwtjuq zbPYvB5-Adcgl1{84d6+lsywMNBe4T#@Z5uY(u>>9KX2!-qIHDI;1A#vfTy$d$kV_k;b}&JvlB;*2kxA!0Y|{_YXN)ezDM=#F{WU zP<;*8xjF_U_AxX_%lw@|Lb9J4)8}`coNT)Q)gQR?O$jQZ9;e+9X z)$IbI7&u^nUwY$3qOJvm28RuYHq2*Tb+ov1K!6Z>gUO*we(wy3Z#D^Od|#1Kk}bl zhuYJ@t&Z*6YqhJLhDAd;-K17^Hb1b%)=@%qguIMnmBi&R;ip1AvE;p#)zpjG(C6dqaOXlNkp<{s% zfd0p-V1p#&KcYJr{hA9X^_GX3*MBV+!D%%wa~){?=sZ{b@ACbQ?uW8Ez!wv`H`qQUq>%6`6#!P{Z2Sk@&V7mJ57>HaKMR{A? zf8TrJ@K+`3Jb#9eCL=TTQ`-w^nJ6q_eJC7f5!damoX}EuCy#dL6;bgxpviC zrQFLY%aDaL-(5luV3~e>pl7VqaULJt_dQN|tVr`81o1KR=G-15s8{25SF7zlO@$(W zriOwdlyt%q3jyL&5qrSkz3JcwDulLy3b&rS>XCT z+;ZRIxi}u~_uZQB>{NO6J%#5z18bjCp>RA=iU~%_on(TH0XY;^{T&G6UpR8-hTE<*P{ zJhUEk{v7aowDxC6tIeeYBb{o zQa}O7nZP^^Ms9U`E9|w-8=2#ssuG?LMSVnS%Fci}MzUCT723g-QCQZGmzS|!o^|N8 z9uDIJ0-eOUYtS|_^RJIB-O|fqKwI$MY(r>)c~-!%nrrS49L0m1dr)0H=MQB9Otz@p z^1u@X2F5&KOv?LVXvl;eWN>)1_pN(+cmX0)(n!w(iU)c1MApw>y75w}4gavYO<|y@ z6m^c)a(i6uAl!<5 z*qK)ohsa+^r>Td&pt}0YM8t;HZh#ac-U6;@>is`!f4Udk=j#F{uIY2Bi!+`39Z4!j<#tXkoXTC6g zd@ERHZj>xhuDysWNr}Y$K(cSt&<3|EE$I3B9x4|Jcn7(53+EK);Bdj2_MO71ZzWF?lSAHQ*z z17)w^A2Ca|&)l3^ZZYqjEMHqGd8*|De+t@t^mCASe7Z~)2Pp^;zrWo5$@ot#c^bBI zi_Gs|0E$#UHi%~4Ex?)2H3YEpC|r$gg^*!Ty%NEE!)^r3k80c#Vt8!+3V4-SnmYGc zI7$S4zF*ez;}=BqjJjzcr$8d0)tYU6U%_@EtKckxXH4J=`7VtyK!v;mWNrX3-K=(P zePJj{dPY0IHIiZxwNv_Aiur7MjGOb(i}c=9=|4!&4P=+#%;y8#iZ*0LAd~=<3qx*Q z3BZ#wYOQLCD8T+WjwqklnMuw`&;5)8XX%A|6|{F?kp>!rjHP5udQje#g~NXzkJCBB$~!YHoX0Ceq-%#6CjQXBsYOt_%7!FSI|!ogP@Luc0+XshVGN;}Sg=sv{N03d8& zg*IkE2}ef;RMvsKiya2Sl7$K$7LiAc?LUDz9*!NTcb)_GAH*|wGXv{aYwEMPU~zos z26LGGfT09X%}6;6!0yQ3VZX%I000`37Dr_6N0ScHMpvrwid&k^{jex8xx z#14QXf{Pdh(oCWPVx-Rjt<8{>d2ssCzli`~1$hT77v8p~cb$WXBSpIj0zkhfSPTCt zspam!a6uXefI}lmx)epy4|e~2efPxpHc^M}WJsyps9ze`1>|J}N~47k+G;LPqr!Z}3cj_zGi@Z2P@eQt_Lkz$R z#O>K#^^qfY+yA2oI`|;22qiSxB9w@Tr?*$Z#k0b1|C)hZ8dy+Td>thG=wo^ncG#Vr zS}6PyNOXu*90flY|S^=cK!+LWIu=e%QzDn# zXZl#b)`#Js%x|4FJm7fsn*CA)PVd4DqTn&IX#C2bh{3KR*W?O-T^n~C(EmQ zs0#3IZw3{#>JtCCeER&7l1tdq%*599u;ka*XO(5R5fy5gtjqOH*(G@yW+gBRpRvTg z3}E)(3S9hC-=>aIlJYLp`H|7mgv79h2obuc_iS^bKN92oJQ*bb2$|vQybgW%8j$647pjYf|zhm zg+wtTSLFzLtpELEEypMhJ|We@ha1NABzj|0nv^*lv-^GQX#~B)*FKL@wZal#XD*?~ zR;I+Wk5twq&RHqv&;QStqEBGcr{;i<>*p2|7PqN(Oyvs{4l)-Jl!{K@ur-w>T{AJf zO}OSL@&3X>jNi@7nV&wc`9BW~K7@vbWDYxmJ{Cc|W^Ht5N;-qzqk$nyIzyF&);;)Q z)%a@6<&x6Pum0!fzqpiUkQr+`#wfq&IPzJW%%y1p=DPpq?Uked=k23*P;gmr4-2#h zi*%x3<&;i%o@TG&<4EQeiAk6>9N*ESSZ9k+PA^qZ%s*l)rF7=-)>z2sQ~-`{{|~Ug?I>CI5$6JqP>Rh>Q89d z%#{s(QRt}th5zYW$Gg4rbd?u-LT8hzb`L*uJJ)QeJG6XGtgN>pF?s9L_hwk))05-4 zB%b#HYIeZ~1i{HX%a=OTghf1muvWjZ71aehsa_W+s(n%Zd|ft@Ms~}o8XbG^GdSan zdP5|!EQC!lQCfn%>RoW43;u=z~oQ-H; zJ~-%n{Wdzw*B3fC*flb5%Dc5CV?mQ2T3Lc6?CjK`Zy22wLlD0AUC|kN)2=Y=z*#9k zlDtqMnoYkcw<08>W0yuLVO=ubzw}Xmgf!d_MHM=Y%U>bIU<62^jsWs#v?kd^8N8 z4m3#~dOURp=r9g_SxL^a7^p#Jdh9LdH01m{pu zam`+jRNEX+K=3*EjV=jteYm*rk?ZsJO%!r{hK9N|a>hq@+tdUFtqNKT<;Z^+6tvc) zoj(WnS>okurik5d61SHd(Z|J>FwU^ijYb2E^EgtLUUPd~=SP@cn0?0=4fDxMZpHT% zH}O+ZgUVn{n`MJC`f${Qmu|3B1sLO(;Rmy}vv*$*sP_0SUBmc2zlAVlOTKy6WQoj< zWFw%)yoFe*ELAb!9Xu%PSj4SG=6pwNa}Z_gwmX917QR*9ReLYbSXso&o(6H0l~(2U zX~GOWYii>=M%lrih-Xc_s=!s>-) zt-}gy%F1zU7Z4UkgW%xc;2pMF@+`Uu2TMKc+Q7LNS!K+r^Gg+ZAbKIf$*A0avzAk% zwz2IxGYB&(j@G(Mg@WOc^e6EGIf&9K?r;cs>~)Ff4L%`-)YT^GmXrdyE?|QGPHHD%#$Ju` z=#c93P3ggLH%jiaVXr%=HZ7m`kQmEK(p#}S1g4EKFJodM;qy|W`;N;mQ;);uG=ip< z8;js!H`f~&rtId@nPt2t%)t0v2m8qHY($mmE7TwkO&IM%PNI%()C5_m*64s6(U00y zTlaAM(dc`19Rv<=O-rZ5CZ)=CJVKjh^~vGca#&eitFpWMN7?CppkkyK2q_ z>mK0DWsQ)Zk;n8f-U*yYREFFGojrCx$Pp=6POi{!i4l67Qm$@S_bmM4zW##dGVDg< z8Gy}br|VM_gK<7AGG|qfQlQ2mU=cUxj*OI?)I5jS#GuK7m%v2*$ss2$ ziu6EY6h3FFL;-_9ibDvwJa~5JG#|2cTM2vsu_$ujO>^ zhbH@(?_vOhAA6oCCH0A^x^X#)s)YjM?e3PDu2z&5c9+M^yZm$u^o~-EoT}W4bQ;4i zoK-BlwmY3pU4denu*Su(v3G(jLAWj+j3okSHR&|6msXJp*$7A&1}-^sRYLD=PV;7( z+Aif|tU?PJ98}p&Q9_BIGK)vJ)!%+vyb==yy>lad&VJ7=)ZLFvK8)0mKKe%SEEokM zvh`Z;n6k;Hve}Zt~zn9i1PYXCKwXQzH}!d@v2F{LnGHl zhuIDfRA3{%e#=Inc6Xxcuv8Uq+r|uGTn3wX*EDo|@~%=AnInFkMFl(!ztg7uSL8eo z6-O528-e4tDf;5(;8}I>3I*l#4Vg;X%lqx2&l7`Ff6wjfUh>Dqu>Csy?h2*6r<}Ow z>?nPiAth2)LWi8?hvXJQ!qPRx*xKzaiNYa-SP`5VX0ugL+V!Ff>@zqkyR|42?snma zSj1C__^5P?qqOgp`!I_8#JM(GYsNVxl{n}7BHoEhZZqgUg0zpH97Uo3+siTXN(_oh z?(Wz^qEZB^p|A-Xdo(?xYR3RK?w(b+qy>vOC%K1&yH8c0XU!?pYJ$=F+v^;JhnUsb zbvG(pyjJs^e0Eg;3*niKh+jQ=IysQ*UXq$QV6Fzl6<34hC`E#2c?Q1^mjiZa#9-JF zjz&IzIkd6EC}e2D@=q)xIR6-h??ythDP5BED96kq$_|C&3z@{5t_^F-rWd<4 zbB|Qp4z20MHy*K>i`>T&-%+#>=XfVP@uU+S z6yA@Y#ph1(1(o>IfQMj*o7VYPP)v{_SGS+=&-vjO6_g3nDKN+7Ifml6ry>kHj8H}} zECeEFb>UucZ?APG`(_!#z20DRBF{!}Rqa1K=*$+KJN-Dj2P&&>m!Z8>4*d=I zCT&03FV_=lrSK!@3q}9_>^3_r2GcO-cfe@D?@#5G?}Ilvg9t&e>b|>Ub#O!4QA=KO z*1bdVpg;DCjvF0%c6&lmel?MhfWI`_1Pj)``_ok{(|E}?A!e_6u3`ln-<7(wyBhr} zJ%%B7@=RjQSb%id;6jYLZS5)fTNDJjOv-xWJ`rfy|&(!ga%A=#-l{PSmQ&0cyjj!|+4RRL_(uT&?O*_l_ri>VG_FjIcHxx9{fu`~n2!!2o zqueZc3UL9lsZ0uO74wazo`z zh`Mp*=YPMQTKG8{>M;7X6X{YlPp0BAz{%`n0n~6|B3#>sxlv_Xbh(s3y@YHH$2>`iG8DUhT^HLYn;n@wrY-QA`}^aN<)L=4t50t_bkD zSIfTi4N{E1=1zYC3|RuW!wRBvOjlsCtLJ(gi_;259A=;Gud9#rs9XgeM}brLuLBtc z!fm#KeQ~p>P_nHc32qYPimqcPNi5hAB8V1;-d~z(@hL|G5%Uhai=GpTj$+vFHyq1z+p)!7S$LvF5nu2nSefm?s z*Np5Q_Iw+B+c+dp)Ijkiv&`SFl7oR520rU(Z-=ig$f2FI)~^Y94i0(gKEY12G{@9! z$9jeQuS%jDH@@?zZT|W76R*O=h{R}?W_8=s+1-8ku=r~`Chf=B5`Kn)%iPf1lB*^^ zZ({P9Ic+-%4=w5BJpo)!-Kpjb@LW`_tvW-nU;8yLU)~WbGMF!Q&+I=5^uKqkFP_d_ zB37S8H%V|x_3}&|k%ykT*poidIf_c{A_?ZoKAsunbRC9%!X&lJf(oR2?oufAvsIR;w|;x;qu*^&b8s zWmdk}HP{7DQ1H`Z#5kuBhbf%ZI?r$)-Wng^W>LM)6eT61Q{j$~+>2OZ_c`b8l)@ zu52_o1h0l*(8*+RKH$@$-6EAPdU=NYP#|qr+teD4JCwNoe6LLkEYia0d2kW3QrS@z z%50`~>{Sk?=I-+Q`}-vOTF1r>bF9Vhc3a4dnbpfrY@FUmf9j`5V26j9pk-C2|<{gWjq&w{SgJ6EVnbOxH+`c zT6R-y8tAX7l->_NCNIC|@73UY{3?&19^kYADPtY2R3Z<)^>**NA;w>j5rF3-nZMJU zlg4IbD`d1zA!ZR5;Rd16sx1X2fjR33(%DJxn(j4pQ`09$wuDcFW{Kq>LbHOhk^wAm z_NrRD!^we)N_pS;=f!rurh(xhgRj}hh|_J{+HYXp7sYv@%}ZR7cc=BLkKX)|vcQP8 zQgNA?Xn*md`vR!g8pMEbH)y=pLCZ7%=e{keurhlk97YWqg+{aRH}^r()2O+CwBZfND&+M&`)R6<+Sh>h{+(3)fQ?^ zdQ8`(*(w*zByF7BQaLykn(|ri_I-GvR#}-~tLw-3{jiq1di3rUn^(ebJKQ!PSs$0; z59;gdl_t8@#@}|A4M$s1QQb>p?xgE(rNtRwx$~zwkf0;4QYmAZXS#T}oCvazx?aBO z8Vt34S5Y=j(T)+DQ62npv9jr_c%Mv`!6~CU8-?|7dOwhm99b`hMzc5P>H5yiQI zPKL#2V9>a8Ua|UnxjyHltEJ;mifK16jXpy%2nIK~cSqse`C)hVETkFds8;EdgzItF z)=4=FC0VwgI(&(69UBpH{ea2G@9>EeePBT=U`ot3xIZhF%zaWs8;DYdT7_Tkkl)7$ zfzosl^J80ZvQ92n;5ozYtT8;u!nzrhfA9|GQOi7oFhTGj9+bAl;`F$`KKj%glKn*0 zK0qN5M43M8IC=nmmh-m(e$UZu;qNvWE=31Yd(tL(y8A^nd&N1kzb8jaLNSxlPW!=y z%t~BBFL;E0iF%UPM@K$urs!v7wFN0QU~|b-)+ADmAYG4L81aAwt(J$hOeKH_;z zwYsfGK5OvU@GJAyl%c8;bnL=an2W&>DaFbxoCwLyGI>dsh z8(IcXOc_r;g>9a8qC+U5@EL*cH=i2*6o?`De9=QhswON%k9by85xRqi3a_Su)zs=} z!di=#=&KHL5P$4Z!T)r)>Am!Y7kn0*D<{@GH`bUN7=8U(#>tTv2XS_$6mGF&u54oR zI=z+aYX3`R-Pj!Y?9ND5aY);4VZttSgvow5Bizirwcdg!^5D0XM-E@h^leLC+0*BL zm!mimSENms8NS{C*&L+5M+@l8si#~0j+dh|DCLUjY&R)_q&G|6`e36N?iR|SSTv&>$q)c>3>?l%a@^g>zMbGaeOx&!$$`8fkJ$%5wDyM#qs9= z<90!B)pdQLHurW3fzhsGZO=IR`5p`N?P^>IJTP3k%_Ss&sYbBI zucD#EN)TepL<*bcv%;Df@9{VPI2%ge*A*=@tb1A5L-=LdiMJ`V-(W(wz1Ix6qzi zuzMxZK*O-b>~LzCvZMw#!f zG{+a(5RuO^>EPy_?@jjAT`#u=O@KLan(epW;YCCYedUO!`Om1sp7xJ=8PH(Mk`JC; z+>;2SNwINg-rd%Y-`%0NhHrDFQ- zt`a_o@`kW-K+J_64Ly*dM}O$@8g4)~==SWb!MasORmzOg`exqUUk6CX)uh(9zdP*= zEJ4(Ty*+qRpOUvhn0W4?cz81+E>IBiYrRKj1I(>8=h)FzO?vqpd+)qS0uU^CGPUv@f3~^So;>e!;W>atj{9G&{XT~SAMk#YzYWt0On{GZguJ3BaZ@gdV}1& zB8BPZ!_fo;0r#Q%?Hwm&dFKc(J}su;4m!`f&$9PS#ZgaBg^yY1N4i^ZYf> z6`ssdX|ezW^FR~!DBS{5gnf{`txu6YYU}Wjz!(*U*Ph^vwAbm8)Rh^(XW0J6cIobjVOYghfy_R~76 za)RRcy;SR<<_W$qguT`yq2BAYWB?ExsrGFLOA=7>(w8oQep?kGKPaS^>YXV9FOF#Z zf@5f48EeTEcSnSEsj*l z!Ybb>sV6wz{fv0H;g!$FIqX@s=yHxGs4@8UZP*~AiO2=!)_MJiOga1Zp80_rruHV* zPDMjORfQLryz@M7N18`Dh0}k{jAVWxLqqy->gBm?(e>)PEpe2W8`kH-#~oqBYet`# zRpkt1-8oHa(80f=fj|+n)zue=GAiUl^1;Cu%_FEHWhZVfYh8V^xr@naY3Qjt4Cs+W z{b9&U1NRG-=b=uC2W{ z^sbSVh}3dId@6kYLO4%1G3velXHDmGZsF3%vd>{A|8hJc!7;rr!#yYa5C_wg@7?^F zL{5+EzKs5|rKJa8qk8fEA>zCQSCGoFd@`)hkP5rpOldV(`#Q+|Z8#~p9)H@G_Mo8S z+n~&M#-K7e`1^S6_ojBY+B*e@QG780Ac=4=KrejjDfb*g$neYj&UgW8kba+{vaswa zW6+0nTg;&dVnyDEn5smHazVf?q2P(AJQts%ib2y=!!<4@)m2lg8_xwu!#86qv}AhD zdzeAZAi8f9K|tM$kzOp9ivn&5&65atLX&-%2&TtU-Tj$qKe4t9epdFX8ADS6I zjUJq5|Cs&L^ex3-=DcJBWl4PpNxXoQWx^LzZBfV4TlQ;FeRjS%phMvs*olBDSGvXh zS)1|~)SE4*HW0jf9%0BNxG94aBexgBoQ=FVw&0cYyvOZXh`b{CIyPMzN zp`CwC?zNc>R!=Iyp~Ca>unqC+96pSrUmukwj9#hpZ4|g-ct&liu(amd;-m-qKYrfe zS@E^=R%UUASH`6c*c#Csd_oO+$O6X_l7l+nnIH!2Yrdeu+o&E@v7`=g zi_h4FTey{Kp8tL__kP`4<<%>taLFF^^RIHxp6!G3%;=y1=txx=(zY6bE4Ji$+0T@` znyO6O*-a>&ZFG9}jZ}+y`c6Z5=|f1aREU^civA$sU6*_s}N$>+pd-AO`|{0VkR;?3(UH&QCE>oIZZ?v-QjKHyP}8$q^4F zNqKA}NyKegTJ)%5IIN}O&Q(<)nZaH@xbzf{$}b=q@u&S(=|zI5POy3ccbTL#l*A+- z`QT{gKBuWYYf)x4G44!?FV{ltB)QWpPZsjFsHk+_Avql=A^Msy(#rvAo4`{AOJm8WVeS5Xhk*5AD! zboOIQ2LfESVjZqzQ!#z9YrI1g!Zw~cBLcbh{#IDW2*1a5>Inyj&mAUryr`K6e|BjP zZ@C_Z%lU>SyeE`yVSVkfeFLAKE05xr(B%8xpgdJ9pjq313-Fpx>(>D50h!+F8Wm?n zgN<)G2JmZCb9q>W^=3y3If%@Z(VEPT+}LyreRN;qGEJz~(!l8K;k|Hx?gyn*cWs|C zpmUUE=I4sCz#msRbPOyT?qZxH0bh>Eaa?3mpM9Uc)s?$jzwV0|+CVIb$C%{B=Ai^= z1x1b5ok1?$`m2{(Bjy*+G6dq0<6*10GacZxjSgF3`LZg;5h?^f-nhS;IJ#^cfUrk^ z?k0HM`JhJ`#I~T-w3y0AKaFC}4B`?UKs>>aQaescJi`>@i?)ktl3y9cS$B{oS=j3! zZ*1(a{#&_@&Y!sCv_B%SRT-9p<|W=*HCreV#pVMs#9gf$Wc=8C!*p75M$DJSykkk{ zG&*dvJ+3!<ITPqL`_PC*o-^?#0TtZib^PxK0Vfe zI;cJE8WDIhHxaD~qYpy8j=;dJ8_Uswz5wH+ZD7~!ch}O30H$%3O4gFPVn(L+@^H{U zY4yEBZYTek1SpLupZs<|9+$eNa1ZnDA~tz%l&4A%B-WqG_k~|9c{w>W;(F188-B1j zLFHLXp+4$nu6}oWQ-qUuez-96oA$-U(UNL%dueHDH}2uUvjL$_;}ZRkbYVv-$5u(~ zU*W`DnQFvF*b3J%6t;eW1$x}8ji>bEySVPF%~;B20R;~+(fSJmtNF84%PFQb6k#u= zWBi-2*mXpS6wCzba$k~`W!}nwBoJhur`EzqTnGe4D{3?evp+3ZCD`IZk}@y;>9ZpNoLk{ zOeUL^m#A!-3$Gd{P?dVZR-EI=19HK}YY#2m37Yp%=Lmvrg{YoeZmHg%E`bMqJr2R| zPwc2azzM$J54nb?B_s?y{*{e*Z{7w{0Z+OQ8HdyW1F-*nZhd5F^t8tsyRd!%VXO%g z46-TbK!Xh`mxy5408Oung0qhx2U)CpsRW;bK zTm$)JR_*f~Q0(yG&E$3dQPx5x&m{ zN|Nw!D@yscrh~*allPbxqD5=YkBXMc$>gV>%=v1p{LM?evE=QoTQRQ*xrWLA(t86s z2);jW2WjL__awJaPysL+8Cj-MxqbQ-%S$5R*+s$PK=-a)b@`sq1Rj&1Bv!dbCv`I*joScX}FGszn;1@>W9+ zDZ^`u`(*vX!Od$BN_5zb-~FtSXee*C8aYl6xkVYdTB6>2ZlP%UlkB)RT%U9}4>3Y? zzPt34*ox)K&$11N!E1GI$Vw!c86@o{@z~OxKHEuYzcH~yoX0g)Q|_7t38%n9%Zih!pu`6 z4oQS~K)ig^jryy(_BT8tVlj9iaHp`yr@wT+FlNjIbX_OCNzd7ab_E=~QIv@yQA{n% zV2NF0eJ`z zdg>Us2ZyFmOh_^j?DLRy(DqXQoR467DwlhX?t)!^sM%jhSrTut`{nUB%OAqQ zB*IBXo3HLGn(l5aswYORcwur|g!EQ9DtMNV^B++dFfgEK(S=NOt6fs?B+0;pS$W{~ zhhKx7ecMKFeaohqqVZ6#uY_||`V2q0b5q_E8jXYG&6Sz8c1S@Lcw9{C7g9!+D^i*1 zi8_*=y}*F{X5~odAK(vE-+Sr1MV+!|$q9NNWpI?7wB@E{{-ikUySKNi&vnU|)9%n!6WQBi)f%k*CmLWs5RnUbbKx zSAW-1yAn4CUo?5YT_{h$DYn@GqKh>}20WhE2}@tUhOoTG;OiK1kd%wreV8FOJMEl7 zmW=@AT1gi8K2&RFpaSQhCIy5N;yAeB+x8~LMp*y|b4dTF_D+dPX)04EFg(W`@%|CO zKUe%g*El|#-o(ZmWIu82K31D>`FDoTLY_nwvsA0K~yM3NVgzea4ps<#gyUFqB!ZyiC2GbBr^k|%c-rfIc z_m=!)_@HaUlKuScoI~E5F_y;{wmdCAQIQe*W)K8wm3Z$8w?(`7o3#PEhXo4Q9ToB&U!9=N^|~GU;S`W$l6CjTRYt6+@TfO; z>h@28xwd*y^ z*CfhsmS7mK9cjx{#ERGuu9$7@z+v#My^3bVVWYL=#I)^)Y)hamOB2X0(2~cPyXUCczN3f#Fp?+#ae<2Um@gQsX0=U;iV*woNedRD z9ACMUOl&KG-x90u+e1eIiV-+DS}R9l#f4^X-tBLeLvMDl`&-)ktS_Tp-DpSHh`tt0 z(Anm^=kPsmu@%d1l+i=oiBPzufE)}CSj}%Bz-&De*)3Q0mT5z=qq_I78ytZ|>!5HU z^|&I)nZ{B#pVSb4R|qyOAdIbu8uE4XCfkeb1%8i`vhg(fK{#;<94kqDB=D8+Q0k zst~<*oU}EcbdzNUOaR_!ZyG(6>SIV2NgOEt-khefjucuWM48^bAxa-eX`qBRrQO7vus+eung9X<3g^ zgPb*C^;BF{-a4poK{=?f*xcEnFKUo1%7<-x4d~dXbjgKX3q)y$6lfYRMpV-eF#U;& z9pq@|m0jB}`mdv6H|J1~FB3(F5Mq$&J zV6Bjh19EKsos#Gb!gK&m^}fr5ht99Rx>p!Uq6T&E8E|`CRlII1jD-MPb4}Q?K2&RE zV3dqZ=ENTlHRx+LV$L4)G@swuNS0n6cLlxRO@Z$Lsg7Eoa;C)9W;z?;7vaVF`|a0D z$Lb3Jf)KX~x7hml&hood9{_+K%usdfJs1W4M_(KyH>*+(J~8Z}&8`bVfL{KzP%bE$ zR#JW8z{dKw+j)`-O#W8iv-LrZvjkBQ-Oc}E>Z_xwe7>(QB@z}=Jv~>OE`uVPRy??lbr6A5T&&)Y{@3XfRX+Sqb1Hs9{NlYVf z33fmD=nEpmira`9!W#x{MNP7B{c^g7J&5S#N&RX9Sz{)2fk+_GvIk9L0`n44qH2h- z5_}$k_@$L9qiK2I^Tk+&Q|Cw#+J46GznjE_WM+~LT`n4p5!4DD)R9jR#J>8Z&bWg8 zg9*WXI!GpagnZ|umkIQ%ZufE?AMT?#vKO{K2GvL=&|XR-yr_Q>WFY`P5FC}oU&BUm zX&%)HNe=c!J33~=;n`B0Htg@2p7NgWxo1E_tY`jgcgM`q8A z8>7o?=NznZ);{2SWf7X2n_K?+wCV_;pXb@3n}L`d5tWr2FKFk9Zp<3ZfOdWO%V{3)`27+{IY&ZDbKnnb0&|W=yD6wdN6bc6}$% z^NCRyl(eCIDQ{`=Hu%&sW1+o`r-+m>0|qNDVvC9$efGd;<5Hz(8z@atRnP77h-MSl08pLtyC5^k z15oabo5_7guv&5A`8uB)o(u-8kv}e1_YL%x=F0i#+0A1lQ#lvWK*mr&MgnRUF-V6= zDEahmOc9Lf(bE7S2n)ns{&y9tBt#g(suiNtH&?z@aR{lT7)KOF{lXux26+V8L0vrx zYY$YsFpP`Lww1>Z_@G)Dy3^xq2!T#P?A#G<{+KshSGY-7RIz?V3P@2K?ni9tX5Oyx z*4>cG_hkv}TnZ>oP)%*37+7*&c>-y)-)e#cU_YF>DX!zv>X6mz*)zHl<5;jxn7E(A9x`1;jqVp&Lv$y&9by0L5LJ2zWw?x)hhLUA26q;0H*1aG`Vr(R|3^yMgoJUkv@zZ)9E*p#6t1x@IGB8yl0fxdu9vlS;d zdKN_*`?Yyts@>!Cb1XJf7*sJq6{?Pl{>!bp+Z4>eym5ky#{=WI7=*!mLj?Y84XAzj z#DS5xMhj?Cegla@tgSe(od-;HU`!-tTuh{aZ%JEO<9f^v;x{$XGyE(dZK~}paj!w@ z7;$~Tor--(AMWiHP!km@&OG$DTfJFH(+mZoiwNk(V_B&5e65pu@RE% zwg=5es>pS3YT<| z9QG9ILqx&)@?D*9u#L@S?X{c16{3U%8Wp;WI}1b0TwOHei|iaivEqg`aSYwI7qX)W zL3!i-TKjheq13jjZzSxI8NB5nKJ(r(EFtW*Jnkaj+_z=2qa3EyK>k&v?n)dw+~oku zXarO$glIO3BU8&@2eqHr3dJZxoWQwa1R?wU)tBf4P6!06gd93rEcoReAF+Uk2fqC=IMaCDvWeH9{n>} zDhVikG-ZDRc+}E?wfBwmvo~4Uq4flxddF+G-&Hmb0Pu7-T8{v_ZZX?;x4%s?yr`X_ zr314Z(zYO)U^Z;-vFnsxz{s0#f3yGN@|W>^yg1-&nLxPihO80LyuXDvuvn2Ot5>y| z|Mj$Bk97Yz``}Cj-pz$~V6*Ii&0>kzLh;smX1kihuvPm;nf-hco^J7)qMi-q9Khrk zBt}^;4MA{)zW08eju9b{;j9U%Kud+ygrBh)m8w_^yw&E9jCafA&7C-y0KUZh@7kq{ z=HzNsx26!$B-qTsGQd#iXZBrl)w;g2c*dbhuC;$)+Tx&#J?BWc51=r?{;pV=9WAl>X+X0PZ9 zTonWznTk{XoL;S1A^+#PAF2M_suZ5`Tj(33b~&7R`SUzO%HkuOML>(#%T6>12De)o zf9g~qjW>cKc`##T(<<8a+LOT#l|z3difVA6O7{Gw=Iq|yjdSzW7Lm7R^WQLN6@DQ@ zB@=M)Kh|P+PkV_(cpKmbB}IN>Cm>h_n208+Kna@(s<(~~$>8ANtKt?NCMG6HXJ_Z6 zj)V6?JSlCIb|UcIf&@;L^$%9LT`PnYJvg!naB2mvhx?eHgT7ydp3|HD;LT68IZT%^ z^bSb(o)?|v$mM>D-UbkqLS$=^Ln2V-84^*aV37KnzU28ko+-M|;a=Um)q3{qF0ni0Ew<6|O!2BdBDqtdOnka6tHpC&5o#145oE zh|FiM#6DrHOZJyT-SiFKyN)3V6#jj_+e;cwQ2oUye0a0X{YAtQu&}94ypsqbJAE2U zZ{XL^O^i zKpZ05HWoT~;!;Vdw77UC!^p-KEsWK^QXx3^HompaCPXUd6MsHo3JT@%Pe~kEArstp zUEo16qB@9hc}LECh}23pHMLM0W_1N}YUeg`Am}?f!n|(rR2Cj4+WZtlz;NPFhlix! zn)9G_-c;E*8ZxD#xi~R4VGHYRnHv3?_qN`H?f*k97j3`|1au+s!s)XS+DsUtfHu_!RE&~;Ge=md7<}2-PE82eYIxIg9~K4YYP{4y z5U*UXYZn^BhB;A&xWCvah>*c@7Wl?ox#Bis;Mt-KDr|4LOqk`Oz&0@O1sO!VdFyBX zRns^`>mu)nZ?h{@yhO@rUFHp}NKa?mFj9jC;xJ}JcV{yk9}tipS!X|w%*t1^BA6%1 z+WvOrSb$Xywh6|rFwgfieRpjHb}s`=iS z+p$@PTbaY9H4Z{b^&~#v*N)#v2oI?m&E2@+j#N@S-+9eubCV(%D4necFwn;&8Q{WCev+OP|6Z02semTmNN`bWW zHF|v_Mu~WP>xEwJTIdwoU3FDQZ&8%oH==Y0_oUFZrP+P!fnHxm~FPi?u{Xj1fFCRW_>X#d&DvP%DLM` zD(QR(aLPxQkR#$TGcN({-8nBQhw?d6Hy8c0{33K1^%@O1A ziX2Nwx#S0eRuA=;EX!yRFa}@~tEC1wYnNKtOpgK6lCcD>gFpKANN&%%pS!e+A_f64 z{}=X);ri@W!=~1l5Ctg7O^ZkOecnOAuH|0I0vKl??rop4l5`7rM|9wyOTM%r-x}N} z^LP()$aaN9f#EBUvND74kc^Mkb5mk)lTrn!e{}1$o%#rsW2oif(`zhxycab(#~y%$ zih%eWWBs4gddR&- zyyzm9Q?|EqNgq1olJNE`+Fzj51250VQKbCsE84W6M^7T=Q9)u?+E347fP>6mhtA+^ zLk5R~Pqe#IHY6kBUuZtuL4*z zk@j$nO3f(WR+m^+ZRF66kSBMvVZLC#~Nt_~^*%wp}4tIVxv@HKb zg1MwCI&XPA6kAJYoWNeRgN-(u}gcP5zt_0DHNPT>3vE- zVrC|jnYV;U`W&LluzC>`&QJmefCq8YrA;ch zXIaw|Cpfz~D;M^SbqLA&WH;;jq<}Ch3Lmo%A(v5p?=fO&$`AB<_$W8BWG#~=E>{Fo zaP*)qm|5e8OO9Z=ZzyriQU=Ne=APHgo*@bs$o>dZ*MYU#5PA#zH_A37)iPEfIBRB6 z&G5%O^tbs;uIbbF)mA~~$mc$5t*4{iK&0Rzwxng~*>iN4W>-G2``1jc_cXYV(x1$I z(OJGl2{$I!;2ya!j%`!uS z1;D`U_kPtYl=B!xOBpCfz!@j{s-leY>mFGZj>lAy`=LmMA6U0gjq!&`EEEP!*b57a z{a?nd+x;;f_MVA-6QRBJ+JfRS&7&F$FPw{IS4w~_mK7K;^B8TJH)r47gf=ee;mx}C z#AcVGLdaY#O?zI+Wr1eC;@TxK=Pu2W&n`POlarGpWZngE4fje?9hOSxpVb z7tq^U3?jHFB`g>J6gT?ej0bC*smR|s1jF)Ys4yBZhcLtIThEj`@Vc zH};f`|MmQ@PfMyTrcw0|^;_om*O|9al_&vE99kxr`Ap5$!VYCzUhl=&r3fbRIEJ3) z{%Cvh^N2Xzjl{oTYu8P;GSbjSkVLVWV2%mY&2%P_o$Kd(7b9xYM?paefwHG6H62Eg zA4~l+)EGYq$DjRt#H+`wdd`UI4W^fzXqCNGp+S|)y#O|<2FapPQC7E?$K+n_TBqON zf<&PZ5KnHq0#7D{bbzqg>|d9TE&KJ2J!%Uz9b#ZTlQ3F(O+m<<`hHgXIs0Y%6-jww zNItK_c9DFZY79T5Wba)i9gNT^uv``t$JMIVWqQ|qb$*JNWy7Fx&?$TVaYEw3Z%u_PF6 zoXxx456O7bE~%p>Q?UJTkXmAEB(R?J!(9oD>1_!g-t1W8i9m+mCNcQ+sa0RRFN^oZ z{qY=nx7xFhYYbS!Et`M%OHsc++}|v!Y2(iF@6QJZHlwd3&{}94r}D=++nSjYpa9EaCRVl4XvM1J)Pb~d z44VPHkzteGpo2AWDGG=d7ms|mM>F&9_UCH)COd&9-u?aIvS_g{z(Pasnp9Q>mXY%! zmkrx%%(XAq8aw6s z+?~5*xExnqp6pXDK)=yB8;*0&(YZ2s>p6q`+igB>di*Z>GaH^UJN~ymy(s7XzLAod zGm*vY28<0E|BOv?RVs48DK#KC*I6CFSl*aEuIYHK%w6EnlcK>k_m)#*0U zV~l+ek2$*Y;{FbRP1$f|YudT%e%*|%>Nyxm=VIc&DQj4MR_6%qAH08o@~6=(Rswn*IRnIi=gJPZa%q5q4D+`+EVUs z)3Mv47ha)eY=lCqz=#0Y!^}VJ85p(hQH_63FRa}J@kvUAD_JXpM4ObM0%X;d<&M3s z)!S5wqC`<-g52-;Z$KLN{CoaMjC}~F zc$}U3%`F(Xc-Aa>I?R(#{|$rzv>9YmWO@7!ucdqnm%NspYrlR*(#b}jQa8rM@q3U7lis5U}T z>E8Rw_qU4QDCvWj{G+T>Ox+KHxv}qZe*1@D#g7J9R@T8xY`)X}J24)k_BJvtLvOUL z?^Nwx?!9#DII9z5V%0iik5AaRS|0xHj-e5WyXh_-g^DPsJQN<^RXGf3Vv;X#_^?{7 z>L)rj!AKh%Q~hV(7qCd;$J-b+(JF-a7A|k+A^qpjLqqv;VqnxsC{Pp$%tFa1bE`t> zUmLq`g(iw>^{C3nU=kVXSJ5AYjBECEFpS^yW{7BG(prB!GI6HW;fE8wtmxXcRc z@BURBi7cE*XJ3RYcM!^%Fu$D~qo#;N0 z+in^bNy2FyKwo=tNcm1mS=RV)_$vn(&_XdM`rY^HWgN=RS=jzLmc%HRRuzK4)6Z;Q zo(Za*LHt6Ryzd@EdKAi03mg`o22emm;+F29^K0Db9FQksbDz~=h^$xXH@7=^vCks1 z>5+z;~-haomG z4?Ta=B~ptU&yPBDhDJKC(xvyZn*Z(gFg_Y7xMXnDiHuf~6Mf%CU=Ag-BP%K~(^-JJ zu2u$PKl8@`#lX&Zo(0JVlOqtg(6jFjDi6;FB}1o96k}pJR{&oF*(WLl#0e`(tplMi zsJ1MA(G));$V0CJp%OkC;`}QD!LA&+#WGKWX zH&7XKAioQU!_gz25uVGOMg;6Di`Yt-dI8qJ>}}!i>+8dYHDF}1X%41cyogiS^iqJd zvR5TN=^e3{dPG7}=0w`S%d%0d*Sk6&5>@IP!tbt z1@kM>70e9??+uGHc#Ap1s`~2pv@v;^2d2?%v2!-uMCQh-^Hq10DiKUwbI1 zD)5wT#UbwSLQNz=)1I^%tO_TlnNxLQM;65#!Q2^`tz2$e&cTAz#gT8_P)F{?f21O! zPp0Z?(vTutK9ha3J`$OR)Xva*`4-h1ZJ*dvT7{=_FOJnVJXu2N6~LOm{6u)c691eP zM5B`mOoxsH9fGZEWy^6;*I(2H28-bmM3*wWs>EGkOywy?X>H{+2sB$urzw)Qo5|l3772Q*9JxRkmNbQ{;D7m`%5ty%tS7;6wc1&hu$$m2^>s zPE}E24**>$9AT>>A5?wSV`0q3SD$j@-bKi0ctO8 zeQ3+KiNMv7v(6-Ku7)r!|3d~H2JP3`v%uY78gxpIt65m@d4-A#ZA7Y;Ff7u`eK`_@ z>V&hF`!#+Rf*HtK*?@=Y?dvNFpSko9p=exk$N<7F#)FsQm$s}?ia}cUC9DauWpO88 ze^@5pl-N8 zG%BuZ->+Y&rs=2mvhQ(i8PYPe=66i9H>g3q3poq3UAgE#(5|;9i4i@YjZ%BF;rWiY zXe5qNsy~8?Ec3!}3mRlH3xi3M80iR|=_{HV@kS#gZu~a=*Tdj=O8o*gsqKwq(rGP4kY_cy=Zd1X$lX{e&GivAs3dEbf+5mp+N+|wU8%sdVTHXb2g== zU1f?Q22_MWoOK}TebMK1gprAf>#w-`fqq%Sd4K%#Dwj<~NJsJ867a~7r62au4Ux~M z5mBE7n5M#Xwa}QRY|`%}c+B}*qLF+g>0%8Ki3#Im1iQ&0wrO463WF?9Jy-49oqCx( z{LfS0iBUe>jB#gpZfa{ZHs?)_ql}5%l}>|Q>A*wYYr*#6_63V~hSLGp<#}GV@ut1N z*6{P=i30IHn0pTqDHpd|@cDhWwKlmvPARdW~Tjqs%U0nfWeAByrYzF z0fgw-$lGt58v>D=RdKrP4-M)oDd*zVgJ03@sOAMex$N$uwka)m)r|*Inx+gI&c6He zb#TWf2t-Zf7*y5hC z6w@P3PED;va(wRqE%p(3-4P+|ZGT^5k_){UEV`c3GO|Iu`Kpk}X*n8pQt~*sZ96M6{X3rUlm{;8Vrnue77@+j3Bz12 z)(1IR$q4z`zk4t*``u(R=41}I4plxQnef+ED_c5uyHVzuyCIt+hqJts6MOIDs2CiI zViSO8>MsodgnHtA=@ENnx6?9~U7y4zqdhL=%YpeB=vPlRUNZqZ7VSJUFoxIC zQ5n&Zl>r}s)sd$Vnp;5V>Xh4j&F_O?yQ?dO3W>*uM_8AAd^|5@Ji}x9iKFopo)ytpg|@spBe#Z4}OkpyrK00xa9WyS($cJI%h zN}CCK=?8G<&4RIQNE2i6AR0qP00u`Zj@?W-O29er9z*%kj9`6|?(Qxe(A_eK=*_I^ zih+^TY=O|G=GB@a~i;y)`vkK0Ln`IVaz{*gT-E&^O0OK&B3*@ySc>GTN)mEr8ARg5_7~IqUahP)WmoE3gK7+G%}Q@tZsF zK`&4eM}nCLV{km^wtxHfP2hJ}WsUppuW#1Y)?tE6@QV}_gM}3pj_JuiFgnVg8E@z8 zFcLwW<^%i;HoNk7<(iyWf41T8sMBvZmCTk6%2~&6hY|(oVmlQoIP^YUK>;I@h*Qzk z(tbvwM|R||7BG{D5Jd+!QIX4xP0H4K>S+C)YU#24fHC9AN{Q0(uH9Pu%H2J5RzTj6 zQaZz7Ngq0Ap}qvfyr$jmq}u_}uD@XlRwh$g?X@MR!G_jad8XH7<6y2;^?Y*LHk(di zFgMX4T0?zQiQVd4GlQ0?tNFxgOP^m)IYmK5Ken#XYuw<5C)31W{Ox~L@gm;XK)GBG zC}(X1=Xe7%!=KIy;ss`+Vju^B>0_L*r?V<~@IhT)9$<(gX?y`>p)Hd!&rJm~$Cce0 z@Q~w0uIMXEFiH6^CvJ811SjZMuB7idRSohYa-?y2gscUQ*>Ol!q+=_<0V=g zkPe_!KmI$RX4d%uMcou$P8)jd(k+7In#+Th!+FcinHNK*^%N~C&@3%N1f-S$DevBL zPVKo7KM$=h?%!BLQ1PAHmoZ>PDD{-cP|AeNoff+dXlPo1^vKC=u|Lo)HySR`#ugMK zGeU>_r#C1bi-5-eL^k$^8K}9V}IZL#~4 z)b>>l|0@gtK?+Uy0WYn}_q(s*{0$n$7BfH|Wef}qq`J!tS_pw?s=dl}TebCUS})|b zHvYN1?c5%`3fC;t4F(pS##6;_1&)8m{vhvZSMBx@shs+%SW>YA=gYaKlL}tt`WIHki(SN7fw|0kJJHqg%}T8_e7+F^KD*iR189G46V)J! za-@Mop!EF#_8^MJRH>U|q>tcyp?-1-0R$^uHeG2C9=cw{cW~*vK7ouYIIt-6|t-5rs?e&Zd;#%gEGkNatwDT}aa8{DV!y>YK>8 z(D$0T`RK8rJmAc;j*SY#MGjMZp)A7C((~iLF-SeP>KaumSpO#vRX_o*np$+7p zxX;tjgskY5?AuKnCZk~!&3obiZNYp226-VMXT4cqQ@jFt$x2AfYTo3+&d=zmYn1IQvu6_#M z#{^Bt6s!0ZFn;)v#PsF}9D=`rHd$6FlJ(XPoJx=YaJ8)h{#IIA8Yu*uG6p1F+DQph zMH+){1)&@;HY3#8&Qgf4w$c16-T}w~xOF&3v)~JK2dlU;iBu^{y?%u|%Muw-Y^t*( zK1mx1vsM2Y2YIoR@~u?DPy5R#$56k{;UDh8eLWotL(I<+u<#S$+Ub1YhDRm&YY{fL z3Yx!e0Ctko)ry0L;N;$8ygy2H%p%%X@&*h<+hoJ9wV;lB;09oG(=doi=@X!kNRI#k zO>6fN*ZXUMFdW1;?witk_b{4uccGb|qK z3_lZQj}Abg&MY<6^K*199ZW9n6asuwX`F#y6b3MPayR_x3L`aA4($Gne#1v!AOZ3= zn!A2Yr%|0jsAl)KS3m(M45$Y*l^4jMP6n0Tk7|n{2n1N2s`?NlC7WywefG26XUU;wDNGPzh81)PupI3OVV7@5h(tbe(vX!s(mQj&=r5^;#cn$yZbu<39!oY zd=x-Ngg4M|SoQ;rD4(NVn3Y|C^?;G+2J{lRQ-=VI%={^E_WK&pWf%&kwI8}H;rzw! z)pDyT(W4ke7+KZ35yQEWtPb`(qWOlqR*dKJ`SjJ4pkbR2l1ee@;KIBli};zAE}Cgm zjIB0FObjGim(M}H4x$R|H_8%4fv5h4xf(%EJ{l(RzRTRNZ!%5xmY6EtoT$%gfq7LG z_icq6a7juzI5u;-YO4#eIrg@VI?eH^r(JVmc>KXS)?C%x9f=s>3yB1EfM!%AFE6il zs|QzaEM;s&L_`Mr`&9Ndt$2XfhRo0Fj#!8RZVLW5^6%)Sfc6!BFuhR~L;+r2(?8BZ zoZ&jKX_@}`7rf6TsroKx%U*kI@JrO%#-?+%Gw6xwBp|FSjXM$HMaw7P*8>sc+X658 zk2q@S)w97-r_`ZfJXHY%Iy$WnWfg6rf*9LI|?H4)H4g&)Ac`2+PotT z9PS$EYHFp48ZjmMSt9ja8`&K9`%8u{D{DWbR!TTQN;E1!_f7rJx~aqcotwvbRch`v z0Gqs(S3+JjIbSP;*r>Iy$pGhRBEwt0t@jUCWB$)Lrauo)saTR=XfIvf1Ju#-ea%?* zgZknDo~kIt*?kbn%2Iu~>U}f{FS{H^ZH0c*)8}$gFCQL7+N9r>OP`(XXuc)Lqp~g$ z4)s|q4pu(vWBvECA&)ax0jv8@)}dbDUBkuHez{>j#%XH6Lv!jLoR-hmRvs%89j*}a zvs^mDUyfn;P{dlB{jM7+An@#{{J5{lt)08{I)GZlF9c0(fNzIWh#G`_@NzR$^FZ_m zv#*sXg3{8SiJZ@xU4n7Pa3BOSnJiTQB;ZUlI5gy1{nIML`B8={!>yk<7MVZ*k)a0y zKo0qVzRMQpB47D)f{W~0bv3v0XKoaRY#(lWKGJ2MQxyO?;Df(P4bfrMG82G5NT18K z&`UrB;ayj;va$7`5b1wGD~ummyvs$GD3d4rsUt@?`qo7BD}JK}#z(|zJ0A)DJUrft zm`8++9Gnq{I@$$LrAE#_tybTa?esNAsHtJaJz!F7z}kp%i!gUdCzE~kxBg}`B2XR@ey^>$D+TJLGvwo%IA;N|!6 z?J$SgCKGYyrO<&>UgWf&-$4>=Qt-LT)Rc>PluP{QDOcGaq{_gJW7X41(++*z3=(rP z{2zn$t4(A=cy2TI?Df1VG~R?DQ1qYu%yxXDXg02GdfmIC&=OWfMW^lN6l(|QngkN- z+iyi<6W?{;#juJFCM&u3u71@r*q@`SEt`Lz`Gef@w4xFVrpkcwfvWlg-3(r7QBmj0 z{W(8q#!!P$v3nPrT)6-ashrODu&^Ubw0h_-xaRx7jpj6=!f!G} zsAHVYZGjF_hL;N;rc z7)P~Vsu*U4gc4Yzg>cM5GCK|sub~6JkGv^Nw=+Tx6CDKwcl$rNR-^~S8tP&?Rw4jZ zI3Fr-cqjCz6xzl$STv*Z#!hu5D^J2%Y)V z1&VqZpDwrI(4rBh1XC&C)OcY&t67=a>P&k!H}b#8l@0tis4b?&3Vj3Y%u-&}!2KH4 zTTEbX0Z(66T~`%aZigoGO`!PI5|y`Z0{+5g*e7Je+_Bc?M-~TjQPQsHOm#i zY)An)F_O)*+Igf8pk#dMku83>Xi|3Wy+tDbdtz)j_#Dj46XP+cM%h+G>@lbNErxgY z{Z;VzEThoHN5?Fe*+L;*vY~&T=S}Ng)jwZ5R-#$f1<-`VXIXXHUE8?4spNAksni%S zIbrYciNHtx7&7X}-PQk^u@6)(^2&jtDh%F@vo^nhU3?knn6ZIHB$k#TF~61QH|IZO z`<6%T({%KVXD`L0JLda{$A`e-7M2iBKw!47HT6db?cJPXSR{2=<9z35E6evjfHuio z6T1S?_hH;#89?&X_pyYPV=S+Mv`KhMED0~(cdaY9aWh5FXIH;Y%oE|%kTXX-?h0tr8z^u>4>Vh8LGmT{=Y1um-}fHprjwF4+m)zq&VoC$%&#y z@u#yj7&CQ0a1Kqqh8$o2eeszL>Zhji8nGd51PhY#-5}90|I2Uf25eYNT)1~;u4$Mu z9Jhr8PzRb0By7A-1FqR<5T{`-po!6Ia-oxpA)9lUQ3L&MmB0VCXCf^_O4lD-L6$vm zGIfKCozvsU7>*ct0D$kfq5Vz;56t|GW(aE6TH}7dzqW&P00#O9oKK%(EUP!f%I=L=j`qhtWG z{niEpqBlDDU8V0bKnJIOgtrVew$WMu7pqrvYqho$MH-4>mGN|{To6AX?rYdH5(2Yc z_(W9H=nb%m!*94rz}6(?uoTeK5C^zgb%y&vWm2fdiOdI|d+n-+11!nfYD0V=DtoYrq5pozt^+Xc& z!TbRVr@jxTBqsc{O0@%%S+wdS&%Vex;|V^UYj9ivaRY$kS_i1VoUAMgGcz+M6s8T4 zc(`{VtnOPM&q6#qT%r6om)z&Q+JOK$Nz4OhI#I>#*B+yXYc04arp9Uv)OMiy^8wgo`nxzm3ncw9a ziEH0B`3KeJ5@rNNjGg|7&P;cp;cq-sn<3H4pshIGT~?AWLI7QSxwSA zho()!ZuhpI_xm@;YWIZGgf$BUT7w5?EETQXj`b7Z^^13EmsIEUnc2?7NGNpuf&@5R z>%>hH!K=X3XH#94SIGm~F`u5M>c>*;Tm)jH?0%H^4@t!UNNT+5d6*?DLrYUfxqCH_ zP!3SxH_&gG&!m+J&Yi`azszYPU=YS7_4D_=^=_fqMCo3GYv|=x0Hxn00^laQL3e|>1iG1+&7o8~A=B@_THGD~{+Sy3 z>2SE*Hg9A_&*01jKPwFV@7y2~CMMMEO&d?8FF+*5Z=f6=ubxL(1;2N81R~Wj67w_^ zKI=XKO_Mc>5(oHuB1auak0fuvS=R?_3Bte>3@KoiI{}e`4k6|=hD3nwa_1-Y>^>B@ zUJwF7M>ojRK!AXBf?l&&(U6Mv`)6=bBJ^-M8dMe7*rI=N;3wOJMHyg7!B5U<+yQAl zpSOcI)d5(<1bOn&AB&g~yfh(%gZg~Z1hbSN1IWIDhw$ssM?`DPYXk@zBDS_3rO{i- z!_u+SAy+~x+KX5sBuKy^QEBJwX%yD`l!3E*8bo6!IPe8dW_5!zL3!Rc1>Q0>Fe z{A4fU&JIh)?M=-r!s_Z+=qt~Uu=!QGDwT_NfP@;a_eKlo6OnXdND&@xYWH(6D8)@$ zqz0H4AVuF3Ch3$0M2}+p$HMC{q;zDN(hJ++%;OEgy@*Bn%^9BJM>ZE&KGo=PI}_uc zVTUdRI6%yuGpSqx#hB${#eljFl(CaI^Ctdy3p<_!F0UcLqrAOJh7Z_P|_XW?`wjdIq>n z;6xbY*$6EB@qpGMsqvZvA^4oXDN z@=RTJO;f+V8g{VCbkp4HW?4{lt6b1#FV>sGJrOLlf7vvx`tcLd0v&C{by87y?NCc!fLpZe$eI>j0fA;f<+(0sAwH~i zhuW=#J|VSaPDoBowG*BPiYV>mbF z!Y!UB7u^NK30y84FH3dnm>s7l$_-j-$86Cb@!eD(wWS;U8o1$gJ9}^XUsc(E-=i%DVu*-2xlqml z`{&3nrJ_SU%WXFPCa0c6N+t35@D<)i>1YKY@>>Z0^XTzZubqoh!>^=mJ%VXq*m-s& zjQ#8ZN`~CN4!I;p#hGV+=#k>6TwtW3r)Lv)kQ|EDvz9fF1CF8tN5Ge{`G3|yW)mb_ zrZR?X7htuOQO>p5&mES8#+*O%1OpaEXEo`!xA(&peepUo2S@0V11jXjix}cW1PDrrWkr4$1#_OUd4|SC0?b3nK}zVs2ZeN6sRXnEyOM*APJ1W z6#kK9k7@MGJAjoMY(Qu(5BZ$$eRYF;=~cBpQ|yacQ`z4E63G(37^Fuzdyfo6wQ%6nAi95|~`eEW8S zws3f{4nCFxi+c~Y)_VKHUB&bYcoCj>?l3#H9zQbl+)OS!_lj==FyX^xpSW^?k)a`0 zD9xYYZ1I&qhxT!>xo=YCiRKXap zTq0U-HthO{Kc1U=0$}49mn*hLB8E#(GA+C&ONSgCfE`QN@GwqQkHfnKX_fbpf zmHK{#$oDlon818ulJ5o8#)b6bN4r1%SFx1sRRTi9D^QdK9yDbg*!Cn7womfbew#TW z%0F3ll{vEWEj@j?tASFK|697%V#Ut4$@IV$DU^<*G~EQOb4q{vcLU?y1p-jco2}IB z0t-vAp%srOdkt(o*JVmos#njshd>>XK7L%LU6s3376g!4==B{{fe!p6frvfay22^e zv<@-LVPX)Gvao838bxyrmr-t7itm-yU^c<@8XTep@3c`M8ll3*QFYW|_AYBtP82O) z-x&FRVCB32V}}S~^$@!@zZ+MIZUySDJFh#JL7R5Y>oTSliD?r&SfU| zdc7SOG9RDY9U?&@_UFQt!tv)5TRM$9U0iUtf-#6}%bt%3ulSHG3{-&eDQxNbii8rI zJ@6pqlkyzQ$_%wa7!@9eOHnMEaaA_!6aTEBJfGTTFAomP7%5MkfBUS}@Np-V;QW86 zPPODSfEfges>8$E0=5SRRKG?8NUf5BLeIY8{7{Y^nyUiDvX0zB-vPe>N6qq=G%E}< zXZB1%H3#BHD1kbjXiBAQYA(KN!^N~a6njSVFDUPjv$p?_sk4fza(lb@rn|cYkyNC+ zQv{@>kp^jy?v(D7&J7CEB_Q1)QUcN?(wk7azqLL8i|@iQ9A2C=cvyDys_J3=sfPhQdd)h zC?q?9q%iA)cK}$Ysi|oKW)B(s4*De`kKw9F^#d2J@4<-#j2IzR_C2@f z#7;@f79(99HI8%M#v5N~xv^f?&+#3b{Io27#|tx)*oZA$Yktic%V#QoHSkuX!NB7& zz4X@Ff>ZFL`V8>h{YrKCE|GSg3%fU{cBtgRAB;GS^s{23fEfNIlwoy30YWas|4IFG z#N$xunw>`j|GDt+Gr!`-5dH-5o{Hx!9YddubOnI$52zVPsmJ9-<{cVCb6^#{1dgCH z63KnR+&V%sHLT($T5(qfc7L*uPQcy^3NG7R+f3J|bq{CNf&C!d2Qv@kfwlwV>8zor z;VVyDZ*L)=v%N4dbVh>UQb)3T6$VnefJVm;tOJ{YCR};Yeg18_O_k{vJtL!dFv=gB zs1l<`4ne>66I8!|bbC4UXEXwDm!0}h-CsK#Hmsj!-NVfJITO6bfm;;B+FIRaO(7r} zjx8DDx$I8Ho+(7|n2TBgy1L&Sd7w#qYL_qJqwb-L*Jib30r*mM5WMsG4XiHjf$n^Gpq!kNAW5PEKHHX$pYGUC5skckQbK=IAQiIa z(KN8;r6-XaOq}gXF>VA95@L5szeQDBN7iOYI#Sj(ega3gIoFWi*orD0uB$8^7(7<`AmZd7&M!+ZxEPYoAuVwSQB``bUOwoDm|7T zL!!GJ-#?d25}S33F1WL+T7oU83?U|4dkL!law!DAgUnIXpJs(A|NRnV2ddhWUF${= zMP7RV?#~Al4;PSDo9znZ)|4F*U~mr!N_(5#9TdFL9Ndr`Surth0F#WD^N~9~BD$dRJ5@%&iwi7g;+#lBj6$*u z$2V%+@11Abp|S*0c@cC90GlJO-UkYKhZgLU75^p;krkjhR(W-^p~>4gJs{3vj^1Ev zfKl#Suudk;I);Ik=H6}V9^Ul1ahYeE(~6vQs_HAH>vkI=#7Q5En|tN6MhVc&!FNbt zNC|2q_zqG1U|eWBrx}lcpKUR?qsaFK2JGnvc`a#Pij|(4n%V;y21~)JxFr}i1FF77 z>@DYuvF2(!Ye_lpuZ3z)|J$%6p(+T^&x3DiR!Dn_@Vvmgl^nIe+P!`P*-vL^^saCf zlLPm%R=KumUnGHdlQ_6KP#|;l%=$b+u$o@zg1cs=w(8i2g8DIGC8GK4tSmxGOW<$c znXhN&cU&qxnDa@ZfxsmsCZHJH`SCG^^zO&XIub(cBOWF{$yHwtYAB12&uT3az{$%F zXQ0KJeJv&`g;7U165QELB{G>%K0iJTd056RI@Ny7Zem!**8L5o3X3z&-=s_ zN{rSn{QEcPje6nHI=P2vRYLfkbHyFJ#g9~9vPYH$+DRI}bOrzSOF*km^&A=9*?Yz_ zRN*8Hq;;qop-CS(C;Zoy8EvDlw zcPvz|9X-4fqu#N95` z|8|aak+BA+n|*L6?@9k~9uipMC!cakJh08iQ-US$LB6bZGq`D?3wOYzUO*yafebRL zfX8M{dZM#gT?Cfb_PW@5rwe|yPlRcbV{v&19#`_n& z<0px9+hHO?xco74RNBc5qnlN)_naiv=-*NzA}HH;KJ;LHx!SVlhig5;*TLq!9oN6h z&~x@}=?TR~EV2SOaUWX^C6KcTQG!|a z8F(4t8~KA0*@0&827$Cv?|yi=O~1>Qfkky`DSR=G`$#m>g!A9*2pFbZ%X^o>oK?5p z5(n7*g2BwiE%L+akBOj=&fE9PBWb4BC*w#EqvmscHx4%0ue}KIroV^C4i;E$A&=Fg zsvhG9#l7vWW%E*(HK!}ste20U<;2-+rBf)qxcMULQGfrOI)V@YAme2UXD~4&CGph` z-JsuhLr0Dx1c;^0m9V70g&;!KLZp@iyz5MJzy?2Qi~jy(`g08#DYVAdlNg{jVJIjE z{I**_LiPkwuoB2wmd#8YL>E5GYDJjBb^N1y?skibcQ3ktaDM$e&v+l`m;lU9sLr=1 zNfaBYS&*s%n`~12mJ}V3O1Pw3qf&;S#@?1b_7hjnIrw%VOWXCongqk3lxfX^jN%1z z4fCM|+TieuI6sh09OMSPbMX5VDD;$XY|*wrqDYi&$*eYf+ftzdz6G>=ex9)uFT+%$ zDrx|FFC@FY9vvo06$yiIS`6V+i?YPT!4Te-`Yj*UQSQY%iXz=;%Z! z(+0+FfvA>~9I!}h*;m{2DEe^_-cC}|BL0n@0Uc<=Ztjk;-ZQBwpkw`htj>$M!NlxV z4_FH)1rcP()PJwAdv$e5m2uGwNMqONz-SvDyT30sSJUn4W%I$<4542T6YiU= z(Yus>EJ#w@zO){jv zq>H$B2Dja@PE7D10Qo#ACiP}|YsbNuXE{49SHB}}?M zqJ5Tf6<_q|P^C?laXI_hgOmeSb>4A(kMz4V-Czqh=T^t{zHo=;)1jImys-H2t7QE| z*G8S-D?Ak)+$-EJ!z8Q2j&7yk;LlRSa=#Df;RGAL9nIonXz+x9616rp9E=g})9NN3 zm5VRJvsD)8WVPqoeFfTa2&A$jVQ_&*T~i9dya=K+XJnH3AR@#lSDa=U3)5s%P;i6z z$~+Y-H(V0ZN=dbjHGHVA5ZIl%*RP$nj)K4^PRquIMLXVWQ(N$3H&lRJ)=){QXXERB z+X)1cz@|&rbh(Cf+i6!NHNFua@_dkFgGi2}W^kFAVWT%3@Fj7W3|!er$FC;+avT3T zNz460L5~xExk8G5_ULOa2ZRehwA7D`$}bV|@ylf7sxss?-IwptqY&n#trVr**c1H_ z&?6|j(@3N-L+N}{Ba}U`ib*#wkJ0EFLyL@xgKqUs8-u<8d9{QBZlze{-=e4Pj3RG! z(>}<#4|^?TkxD4T2*_>yI-xx?V%z)Yv)4Xu&sc{y4Qabx5~!jwqAM1zg4IZBdiqo~ z-@i&k_8ZxFZ7vLCM?3#Z92Q{qCFLr|OSb`E?hr60oeEe~QP48cxdP8S9MBylo}5S{ z`kur6UYo6YxmAr`e}0vEWSRkq>4MkpZDMCb)KCC?9tTE7Uf?jnJ4d&y50#d~ox=XY zKBT13zI90Xi_Sjs@N|ahrUnyZSDv(<)UAZGJpjsgoUiVQpdBLr`N^>OBP z(e)7duoE^HOT!#-Q-Tm%ujKS*ol*sH)1}SPDEdMxtB2g1nZ3?xD&>qfWKh$m)Rqr zmdyb*6S+iyUxeXTX*!4${+f^%{$Rd0Q-}AN7CIGwL6=#up>x$B(JOH6dhqf?S@Cx` z_d~&*!3?P7gS6vfWDw4~c##H=>ak2DCcL@@v2Lce%ZWg)w_7%q!s$r#v@`Kq$hv8! zQ0^|Gq&Y^Tpx+or0u>{;-Bdw4SQ1MnFzuqDs>mbwzsw>IlR-4_MWnaD@-6+`8|YYt z-ZUjQp_rx6#?Byq?!PsSD<-~pi$wz&k+wa3?=C{8C-f4>NGM^&5y4>6Sq3a@ZI)>3 z7u+M%0yICKFOTV&nEo1s>5`L54W0BUAxfL&kxDr9>a>%;h>M-XI-tj-!R2jg7(&V4 z)#CkkRYVfA7mQNFZ0E0j1H}?N4$?RWrpH9a?jcsLQ#}w#@WlGTfw|#B*CVWY>2lev zV|D`sIN2CH>qFNUy*HCC#5w656Nh)l^27$5s4IABg(iQU^{05=QDAb2#%ufKO<6uw z1q(}{>0CNInHdGSnqEL3zyIw+MlpI9hjE}78y~S*3jS1d6<%Z_j(b7Sp&r!F z?M%^|L4s=aAk}P89+m7I(<-95x7}jsRmBh|UAjwsI$p2tW*U=dD2J|A@Eu%?<~lAG z0rK1*2`o7wLDqoTnm4x-Ox8bkn#r+JqY)+3s&L|FGd1$ymjBFs?iTdi11TAK;M=e| zHzC9*Xkw{Rj*m#_m!^R4)exZFQ8YU6Tv2EfEV!eEu|zv9+5^cyvw+BdcZKkUUm1uj z*S|FdY=SQ@p9;;p4gx#kYtn^uc0Pz`=5PLjjd{a-19Iq4$(+C=CG$-)p01|}Kw2DhL0)54LNpVytt;7;~XT)LaCyp$~#r&(O*psipl|jAlXj}*l z#jy1ksAqr@6M#^J@)H0n2uWbYmn1KHre$K4*me@L>;CWci`e@Ebhbcu62b5=8P=R( z**@#O4b{MFBKY3u_76xr_At;xSgS!iTRE0%M11oLRTov-p?+!D0Zn5qNNzX6Ih!o4 zefLv#!<`j4`Cgzo`~%V;*RJ>2UbWU^J*l=NQJwJg&uziZRja+ z84v|RC+xv*cqRrOUt1Z5ds;`IV*OQ6=>*kEZ=u;+AqSCusQpW!vOw|3y6(+^4R(&B z&J59v2y6LPMMFaxjD!E~nBmn^3UKz60e# zrp}2BxU-#e#hwBZy_S6I7Mvu0n0bNZ5F{EddyY-;_o^mvl+xa~4tcio7_sAWgI0ah z!_F+rh#fPM-d=dnS`vSP7~SNZYrXdL^eL2Ogv>COq3}tY&YF-D#8V{?JEk`n$i!NE z?m?!RWa&HHi*1h}R=2J)n2cFudQ4y%Y0$nt{l!MjFh?+{@Z;K8wvH#xT)HF+qXw{9 zmUmVO!a*^n$`=3lCGdm>0bfUeX0Vg{D#n_9}5XPoa%y*pA0jmLf zUK|epMpKhUk<4&A&|@a9e{-ed8?R zxQ@d1^~Nz(n40TGV(kwd$nhmdZDWCs9m#VVvAs%0^i|Xcyh0=z`W|_7)NVAy<_#b% zJaf(^wEA0Jl80#3WM$}-?{j10{6$BKkU%Xu&+&SEoZN4d;BxaUF2ijqDv=?`TsL*m z0OV;X7m}tNuzkt87}Fwt|J((U8mqBF(vgDDq*m{Dtc%KU00)i)zT#PBIEVmxe5=N) zbc4U)5u|b9T!Ld#e?uDnVH2M)ZjfmNqB4dlVi)zMO;dF~(S>?Jx9ID<3^aLU%*hRr zPi&Jbs89A_)iIj{Smsz**&R=;vwy1$71t2KkMLyL?2{K7S`h#)^B8daxZ4!-r0 z_Nh=zfJDJ;CK>`I_}L92M`(S}jaR*yTUwUEDWD#)C1dvi_b4wi zV(Hn~eJ9HXN7lk;qOa-7=(sgLjt19XA)48=RYAf1YSW zhR%I8Bz&*{haHzBQ=Z6BI6Z4A)f;n4zu5?48Ckc&_}IAN_P=Yv%5C$=G(%E<55G;!tys` zHCw6ZNT@H8?h3{u4sdWv&%N-Y$#94i;#HetT?l?=W;k#C`|}rX3n=?8Xdk*(@&lv` zzJ8rC1yl}wb-%qMeb-tgph)?&{2sA-(__E3mNa#)2ih4_BRP@X~hR_i({43ghDHQ-=lQseS6Ir%Y#kw31H z@g&rV-ePidOg;V8!cExX$ONCnKykQSYa+6Jm_@Lq;iMK2SGgKXJV)dNa%w>Av8d%l zfmG$WE0C@Ih@Z#J6!Z1a?}f8#;bR%#BBYCqM-iIWC~(|XvCom9)d6adfVK-G;stvy z4ogS@7k<}Rc(`_v6jYvW)4(F#?ZdVR70;NchDRXMKxzl^?DsHmXE$zuYqk3On|n)|57q|n&e*UD{y{7-{-;pyBTr(`C5b8Q zc^vlbXs94SD*V?FbT`mN!4+He5ydwlv0?N?hKUzcU2g7C2| zEewFts_PT2r`eRMND8GRfJdkwv^<(bIqRIJa`Z}md$u<-Z|L1pfR zi%%FB7$Ei}ROnEM&7zB?fW;0wlx3k82`_ySq*xYaD8c+!n|e#bO37WBTc4KhgUr@0 zkjFGDpy6D%p9LZ$ZFyEv&HEdXys%I|WZ z$;lnqW=Fjby22tI8sWBi{cS_Y?3J;-E)$s$ zrJp^m{k5~zkBzw&AG~Y4eTt6mD14)NzXsuKn4be*`t{jc4`!3ozaY|M#Rky(4gc12Nh!5Xu183gXY?A$zO=RdT$o0Kls@_ZIJ& zF$d>@Cd7QuHh(l;3A!Pva*m9Th(OKd!eG?;=LNNqK4uByd41HD34XS4q;GDp%J1mM zChlnlwb#q7&Qmre>j^pr2y|!YB<7m08mxhvkcj9J*&ruN&4O7=EYK#dhYp+o(e%jF zBQeU97YY1sCqI8SwmO`x-(Ibc(*|Um9)n*AtBTlxW=#wBnX<%T-DkXk}&`4Gvh0VnA2pm2>1uWPVj5;Anl-hY_z>TtY*>w%#D0;vPdHI>s zS}m%?6Ol}$S7qzz`bX7?Q~7VSG!+*FC< zH%&IUb=0&;7II0^Dk`)V(cXi=NEQa?s>F+YFupMdL$geY6%>T`<5o+m5Oi;+cr&xe zCH8VHL!m$Nbc#VH$(ec9>zd&hSbtu{9{$%=c>Ac5y|KmiiWkzq=`oz)0at*+i`>xgTplZxrNd0(g}{fK)u{n`vmg4!8f+|2 znI0Y|weuk&VAJrRK6|*eN(Isnb>d!D1ZZUY=;++aMB?k3;kzu4g6Pu&-28d-#-h2%WRIp zR(KubqxJr8azx;rtU8DSF5zJb{kxlu=KH%Z=Wq%PBBL}D0kS%$=q-4w@>93u-2u+6 zkibH7V1jyRBIA z8kuhkNl77D&SPVU5UhA3G>YC1b^mv^MCb^ZeT%!`M#Zr)_#lEA6;4PQfc?yxSjpZ2uNZLnpp1UYRh|2p^^#7{zysBWqx{4fYr!hC_bz54OR~SD>n8 zudMVOhzdt{+qQc8?}3?Y-Yd4rMS}1%N^vh-F<-w39PQJG=aoRt%p?{|NpS)WDzoVK zA0L(AXi@nu58#b|!?(h8QxLb3W+O5*?D)R3<52`2b)-~pxak2BUc*A53|(T_v%>Rd z3vMq|x6ev)-dh2OO8R#}nj_IaUu`6yD&%Z+Lu9ca-0kw)6QXP9S7Cq|iUmLZI0sD3 z8CM@v7rB$Lp79Kv9wl%I>wv@~gJyi-zmMHZCyRUc1e;kX_AH7X z$O&)u_7?sSuyns|>fJcWl&FBdB>OjV6lUc@@d%G%t!Z*+@|8CSl5kcWc>vp;A_W0# z3IN`#pkw_`*(BjNSgZB(%^DyDhSse7Js3X@oH{qVnXhCZDD?xgqRR7>*oizApq`}< zZm0RtA$LxP2dhrcrs&czjLQek2gtD1S_z9o`z)9T!dIJv^> zdn^qLlgoOshht`y%R4q-JFR^lO7c06O7aQ!W|Oy299yK}uHM48M}|OJNTGKR9#1dV zxBR?u@w-lPt;(!T%#ig?quIkFMI;hwVe*J1+e09>AYZFOXs=_Qy4 zz>OgcHxb(&aI~NPsIafj2Y!ve2a8{hWCqVicJF_9?wHPYw$wldsc~Fx znZ9@<)s+|Gk{Y+t&yG-2%hpVsFsYxwY_}he0K~oI^-_Bmr&o~I_!oHi$1|S>Tmvi# zpWXf$Am|TWHRjyAETSI(U02@v&FwQL^Lvt%`i?emr}Z{FZ@?W|)Pc8u1i`Xu<6HuG zEJ6obEk`M*&f&sQV41*%9@I2s3*lgNU5j;9w^)-uLyHxqW^pP`?RB!WAnw_^_L&N%I`I{hkF+hYZ_gZ5eFqj7n@~sTKsl{&+{y_JU5Kvh$9&QYxJJSrccU7(ISR@z43uD5S6ChQN%WY?(Z(9bx#_l2D zl$`^umot$;!BzMVG!n@7@)H!pO@CkUz@8E2@ISll#?LkW@A%@&o2d2xG10=4urs$D z7!7BL7)>2(O*u&N4W)lhKUCbM(ok1re1G#`b=1~d&T=AlpPM;FNJyBR7}P+g6-`(E zf`GU<3JQIRCh`sac= zJy*#E_xA6c-xtFv+ut+)0+K}ARL6)39&lQ+OfPaB7U+gVD$v!m zit+jg)cC|I5HdNwMpS;QMHDs9Oj^ESIJ}8_VY^+&~nD!_XDYnsyBA!ciDOlTmLY z)zE;Vm*Dz5fqMF+c{JsyBlA>hyh^5nnx-@E$FmQ?c$P+z;aoW2KcQ#)c(_~UN59*V zGgUxrod0(uJW+hNRcpo?q^|Sch&z>ik<#+|jd{W5JLGF@7~+80vl^s5EK>C()3pYF z?;n8WH>ld@b8$#>nUOMmKglRCt6Z8!5mL;ekSCb>Sgu;ePzFiA_|y9h@Bh41ysHt< z(=w7^p(j^;q?{?=;rc@HL0^4${Na9J9RKx8VYTLr?sbH%C-su|c5c>(P1YJb0C7CL zF$E#9@jKr1&I$&bg+CEtA~-PNPq?i=8c8PDpY3UB=8MI!0%a#XtvZY;_xgU_z>p^3 z`7@bz^58QF4P<@!ChSM?dA97}9dx8-S(tw8djefFjg#u9{pxabe&@vPX;qqP85NLP zsKHaX;oj(ssGs>G>BA2~8t%UnTs(Lb0~2>O5vtFvUHol8R~}GeDAfGs<=fMzJJeIc zPq_$d4?MVn+vYNWcXK#pCoOy5oj{FT>1nW-wes#;=6~~!(OlVB3ubDD`mTEbq+ACg z=D*-+c7dLbu<;(CjL^MTUWRVL>s*D?NnknEIpOw~s~`N9?SGJ3D^)aiSNnE^bnqCI z#Y-%RA`k=j87-rY^P|-SK!TA?&5w)3Ns57KV+g*f3P6;3$YQP+ZzCxG)oA+OzHv824L zN6AI;y~=N7JCSU{QN-u8+vhs3Y;z5Y<|G2lm0pf~+K;pTEPwz(9`j~dxt#a{2|7FJ zaAjEL+r{SG#cr;6i!1!LQLf}W{}As-slojT{&v2CyHn%FMYd6#g^EYFqaqc(FxNVUXk4Nf0w28`M93?i@H|j3&xrV z!eLxN2@DAOv;5c4TIY>{#BIaQ0RNsD3F=@mN_vuoUS*$aV8F(yZu_hFz0v$|>8rC1 zM`hUg7lP>h$-jUuu>n?^6Aj;icCaY$;XdoPBb}Lyg$EaS>IR6!hKSeOj@N+$Cn;GgJ^Xiy7q9PT0`?2Xugz-N^3ZoG7AStzkN_{0Hm)ATd zq|Z6geSQ~PzUM;KQ&+R8!q8=Iowz?!EO|Q$(!k+hSh!RdV^#TQl_Axni${5e+PV<# z?to_T-gG*Hds`5tlK-o)6Q|wf)+XOhP2!qxRBBfCbD_>2-5;CT=w~$=#3*faLH}fH zP$3DWuNeCs^z&l$KcB=~%a>ShoE(vEN%gDmNA zK-Fu|&=r&+%sEf9*6gFqaEOicRzVwH#JN1|GC1u)g*&xgM+Ayv+`1vMh$6tAy)OD? zs30JO;t{vwcC{%8Y8Vi!*{BbHVLqOnt&{DQU0OdrOzt|gk9Jy^;^(Mm)Y#;;SN*gx zF%c|pNcKo6y^LVL{C>Ty`*J5g8v#Pw`IWH`Nv$%)j=}AV^@}e%4KKNs_G%PL&L4!! zuMwX7rWWah8yJPv4F@*1#^Py zRpE$+>Oba(E3Nk!p^PTNY?{Q8Urhl&#zTP`_j6;&GHMc$ojmfO9-?S zl&*BjT8TXWOu_k#o|2)2FIi996|(eaN0~h$1S1xKWXqQKC8+4FQ*6ur_Zv53&F2h|LsBU&IrXmZmbbPIYF(3VkhB4lp5WPl+;L8*DhS%4;&S_oRiJDAXWL#H}3d`!2^>LHcOueK*ng&8aV2jXifvGa`W;HypO=R@J>7~0LJhUHi6=z15kJ2u zfU1xP|9BmwpN;c<-sNIbKV#bF^NSgMre`?KbtxJKvuY6A*(w?p9|n=<0@;7;Y;1mq z4Jcy23x_6VkH%=Wt2l-i&ZI4JC-AjXz^RIs2EW9c-;MePSK3ytFOFcw^9XG8)lJ zeXyZOFIxxth(UysMX~vt_%oH5ONeT{g1`v96r>YiE1S?x_j#8pPS+| zz<#}(Zl{}ECd49Gi_r8#E=J1Yg-wW$g4@0)*C1*4{r>J01mw)$Oqi^1=DsBE5#{5Q zLl`{ycm2J$_OQkuK4fa}#oW(JfgY!EtQTTaqHGc!r@k|23u1$m&% zI=>vNL;Mp`g@b0WZXvS{!{Iv&z!vaF#O`dUqFC=EgbdwSACDfAYDZX;#rByrK`%zA!Dv< z5gU-4Nti#XhqE0|3>y?$I8b>~+F4;@jsHBJjE*nOC$bJXD5Qs2m!bTLP36xVAs+;g zql{O%s?R294~~4J4N|{lp@lqxNzx`mtQj6&icy45J%x>pja$IK;v0HJF#ht~QnAT# zc}XypP1l+uhuCNBn@vY)udsOkB*T_aA`W zV<#u6FVusCm@&H&3oUg9Q521Z9r~)(UQ3Om8i4_2;*X?JxJJcMM&;Nb`9yiUEy5Fp zvdg^1ADP%QkG@o?yJ#3|(u%{#LCxFcENH9~AzaS)S9*9~MZ020bw`&oC+1jhlBdvT#puu<*NSg+%p0BS%&E=hL4vvlV(8=JYYIXY2}jq=3OVK6{42{5b$@L&dB<4OFQXHiKwPMF0P$XT(hf< zcyC~3huU0DLJurzf(TqumD(m z#Zs#{xItM{KR;ob zJCn`b=?%WjY?Cp`zg;TLs95}EM&Rnz&*2yViyKbF&@nGpw#Kt0srQ-$vX9BOFZVzM zFP%55WkTyZSlO)Ri5kl)g*S_|N-Mug)gla?zrltJ=+>M0X z-WJW?mHQqc3?dYzRj5QZp1viKk@o$yE)n@UHE8u|5YJ{;rqaq3&s0zcO)jGE`zbZ` z;0?Q3;f@h@Z7wrj=@gF1aOCq+8(!A$3FsF`SH`A)Pn!DNX8tt5=GxjgE3P75HB-tA zJm3l}7u`qnK;>d;;3H|HwmG{60OjIcOoJb+rDkVHkkVPFRBFh>)6K4nvYG(!>T(gx z9=IK>A{gF$e&|Tl_1ez+^<;apGw`9yaLyKmjr7*#kh-cyuWv`RZHQ4WSSu}sJDP^S zH4mbiBt8hQAb!qF4uAM3gRs1GBJpQvU34RyixR8@a5>8_?GG1$4`fa5?SBTSl#6}HpQd*IF%lZVaen;A%5YToA z#8E*YmyV-{iCY)M3qtX|UgMv#h9O}RcZFU(D)nGDJs*QAtvt3$el#LzFVbDN zC(0e(L@=gp+Y%2X|CD0%8l~|2Bx)gGfKFl60*&@sZG9DQVW5BPj98kPXfE(N+;^`;3Iz5#>GaBoea6BS%XThIbG z7yt}XrXRquHMyb5=xJ}!ght1eJ+B@^T`X-b9RfkC!WsEzwc_|?k-Gc17g`$h|Ml%8g z>HcK+u(=W*r|U>CxBjjFrisQC`=Y(ju1MB(Q1+K4wxYxH09Mvo|F`0SWelvC#TJcG z7&d{7i3JDvb3%y||E(8`mSy^TQgUCiU}9l?CU~D%F)a9Hix$XL=0@P+a)qW`_>hjq zbBQ3OE&`i^aDY`ed%G+DQ8q55`TFjy;|BOO#{l)>4}?63mmTMJd5{_HIVY$Y9&Keg zO17|m=C6bGVf-e?jz7whtwn1Ijw18mO7jcnTk>z*vAzkj=tCD3H$!eF=Xb8O?hXsr zj{s>7(Z)`L<^qgbt;=2)5bTbTE22+Q<~Oa%;0|~PLN?;p0Wa3{S6>ty_6X<-Yv%c3 z%;d&G%~aR8d(j;sE&O8&=^I6jsAjRjte6%tD9Q8K^Jd+_A!vV;oVk3O9AbCWI}^dB_m-RRBm>Lg z`i}Onh|97{y6D>9rQ)TbJt#f4@0k{eeFMid(_dO=(iV}|F3G(|3;9D3f2UT6@D z82I*6!HYWHOeQMP^QZPVZg?FJZXBq~^R$qOj<-7b9k32Sc_^#g&D`jrgjH7e{4Tbk zEh-3+BYmRZcsbS2mQBlGwC@9s1weo+w2xBp+joKV z3tUN(g<0kHXE1L56@f<(PTS$ZxJH`RN7G2-YqdIG2a+?qsS=gJ-xy;8)8_JVa{k_84E4yLE*;-};(SSp zfun`PsgwO!k3pA#2Nk=Oe!W#aJ>bCka02Dx06|9Z=v{O|&S1ygjq}bBf!o-q-1d@z z+vtc)zQ@5tlc9)Jy1N)!%VqUQtWdHz^B)bfJ|+0AD3^PiiV_%k_T@hsEgj__?-%ti zJ)n97RkZNPM@+gp>vOMqzSbU zFOO^$$0D8jcHu_WniI9VqFsOMS@hl7-;ie4EoEm{2%#X21yjEpO@7sFkFrJQ(aMd< z=Pw0~6{J5=pS>^=A;iXZCvlHA*POt>k45wf)(LZ0f6w+!&7%JqrSJY>Wup}uu5Z&L zsfWj6$)D^Lq7lJ>5q)D*F(5+pm{d!UOc0k<*f2!yK!FhB!?Nysq-|~( z^|o*VN23IHzfk^$`j5L-iGVyI8l)}uk3=Sj>s4dqZe4FHgVI>btaB~F(M0eu{1u4; z#ikZR%jx)CF%>i>nf)riewJ2n?fg#K&~Pfwj9H4g$3ufIT6=KxQ^6Ecj&Evs$7|ot z49dy(`nArLX8i0A2)!kweZ{b&*#i_1X?++_qS*o@C{sA!5QX&1;6Z$u+t1xlmc7#tABFY32=e#^(=HVG7D(Vhh7PG5?*=WUP1d$2*Z$#3t(Oybu9L0RIroExQOX7&wx zq^ij|Oy=Gk?J&a!p@|GMT4{n2c-K}R!A@82TORrIN3A>+F^y2dh^uSihPM;-HV?NU z=)4tN7jKC1b_)pi%uoR-EnFRjMfEM@R6(1=a z^#`f3oq4J}a(8<&PUG>SiNjNW&`juG9HgQrw%60?IRN@*O&-Fz0wnHBeB`rThI1|M}S(iWspRss=Gj9Sq;m z-RB8%yHuRT#ont!W1Wshf|NWe66Y^=vRGw|u1nc=zfbpTZ02zxWkXebi{i^j5OUr| z32@(6k9)r`meBv==lpcrv3I?P3)jcBZ1&QBl?F#Bs~xnz|C{c=myyVmJlbc+tHurJ zbF99yM`Rm!RzVO=o|1=%yqcFWQElGfgKjqHi^)V!Mz*vFH-K956oq8V5F>r*Q=^LH zEYiQSm@tKfejbBf6X3{mQ_u1w0>y#EXOgKF4-Q%q3Wo;+M}G4HnOlUm*-R=qrC%rR z!GKTjFWTH!unvKArC+S1oZc099<9JvvWR0-?X4QmggjswvJ`?E zxYSpptTo%)h+^zW3szt#XROPXC~b2>Ua!!f z*LUEfN3+A4!@oc7Yn8RjbOTa}r*X3=2*;04Gl^~#siPbWQJjQiQNEfd@Q*2z3cid+ z)N?)>d`*u9BglKESA*_XO^@`hm2j9ZXxl)$FDGd~rxMW(=iiusJ}HV5v|d>N3&P^K zU-!nfF9z7_o75MzmHw}&uZ)Va{k|SLrCVAhRJuC{K?z9#89-VZ3F(p?N8CuV*<?pBO}t33SB38Zcjop$y{R zGS#y4X=8rkBetB_P22PPrP6Oc$f9RA;VY^vR}4xxwRoZ*7B&CSc-Z@OIo%fq8RmOe zmxcz0Z{LMKN;5Tx8#!e*^%vaHvP-f`itJ+D4fhUm&buiYiOMOR%<2Uz&j{Wyv?W(+-7GRwAV*}=^b~QWDJ6bhR!X ztZ+^oIFml+K3oZleTb?Haw{DlBKW3Q#GML<`qLJUSRNiNoxOr+%Q^1;$UBu#$%h3M zS(vBtJiS$eGmd&Yph&?=H{&;7=#0^kuoS;X2X&cnr_P?|v*wiLz(wXi>O7RJuEg!U z$h-XX5u?s1+*%(_ieGC3h37;klV4(2s~pL`m-oj)?!Vv|tQq!4r7hOQvdnMBMYHQ- zC|&C~H6WMe*6Kj{=pj!=@ja zb*DhK5ak@ShDrjn&iR<-Lwc2tvP4&t7N(oOC#I#hy8#a~<;h-qhBsTpj6d1$)D z5CVwd_(E%CyyEy_=V|Yb+R3|EotO9+K0Um{^J&HG#E~m9sm(xu zlDx8?JR!?AygH)AiiS^JiHL`_tBAYXb~uvfCykI-Xgif6Y$(h!JbuXQ)2QcVlp7@5 z5=yuC96hDL9Y`UxtDWDqWmzK`yt`Wctf$Imj|E{#4Pi7*lGO{lYL`gvN9&xho+rr znE$h|s)_b|!N*G-3&$7Z#x7}`L#}A7e**!oN0Q)bfKVl;AVF~{u(LJ!^=`j*U7C;& zFh7=(JzDex8*NuH*KDNY9=6L+pvfS<`2szhiS|7I*PQ1e>i@_cIot~l`SaEd6|Vcp z$a*s62XNw)xz{FtZHN~$GgYk5Ej@Uw)LL2uvuq3~d^v*W-+;qE>V0|SNPe(YM!drU z!+jZDl!bG!Q*?PW^aTC;HElAUEaTE191#8&BEmtrB$#mdtaqU}E^6L)`grQjs4wA$TpIS@bdU)LV~e0ok`Xx11| zgIY}ghKF>B@tu>$nQCm1E+w+u^Baii?Jv2`K>lXLhKU$wKWq1h6-}nwMLG=_kN5dvCf$uz6!L3PdTciwv&;14-ByB6=o441zfulte_`*?AVfvpp-0Z;8JwhBZG?@&3M3{^OtQ#c zvlUAT`u=jq&90IeqxsWg`D_hqXtwjgg~=2x9#X9G`+CsA%8#&GNa$y4+5yZoF@#;! z-RyHQbA&YHVX6q6i0R#ESll~8oqtHc?Q8;Ar1vO@>~1$e!FB=76m$k4&87<$&>+&9 zr!Kx=8!>M_5zuc7#y91G5c{?8SH{~$k2N)S=4jyA#I+dQ^7CRnapik^BdNmZ`wEje zR3Zxw$|K?DU{+@4Rt5fSU1&{BO@T~S9{t=l_8IS#J;O<};wS|MMk+l;)^Dgj&Xf1r zX#&56LuIjlkeyk=n5n@#uM2^#L6ti|b-R?d=Kkq>o#Y_yC@2*a)Us! zR{xTBp{i{0ua)T^_Lb(`hCWJUQy@!R3p}l%r=^vWox{p$YGQzZxfj8;MT^Gl*3i%p ziKLv&(;Hv4xvJ%)lfPwm?J#z;x@mH`^UGN57Zhq?1xzYaQy>s|U5*veQ(q~J-;)Sw zju%qPgOktKZl=lfV(iYWd2Az*!Y3=lU2cv>z7p zsDzY4z~7UVF#E`ZW{{N{;96=4uS5TOw*i53med-c{k>h3Mm}{n%0X7#Z7H7emRheD z%hykhT^^g2b>1RbWKJgK`ExiPn{Su`jSUQb9CCI|34aUK}Gh+Jk8;TDGt&%W^W7Q}vzIT+ouU7?$cdcIk(1)K5QW3ksG5datox zq+?q*jB7k4(lCp!`V=r-oejTxzrq5loM%|C@bG?_8$thjH~Zo^ABVa|tJ547qkEDs zC>%o5%k;gI_%)w!0X`$#kaiAs;(Fu*3FS9rqb_9-2xAF#e*3JPj^o`Fk|UFLzzz>? z5@n^!{HaCZ&|)6k6yRVO-=7aWZz)xuaM@TaWYK0jy&)x6qw80uT<(b&)RFNTRT-=% zc}!|n_M*Q3#*76mu8ed2yg_2#>_1Kf8E%{n_hJsnqv&fXje?VNzc^GlJ@w+WAVrHsrk(sE?8DiRSJ8VxJoT^OS%2;F?ehvokU>(!< zH(6V4CDXR&U)i=ETFq6oLqdx?w+gc;@bISc<_cevLDtjo)#33ykI1C@Z}|O?eqXNh z9=9EE5_G>|0|K5jYk0TZys03OV1w{-Ls(;T!d2iI+M~47lETuVIC_LemTFPoY;>WEwN$WJBzfueZ?Zm@iN=26fG%x@0(<$*Uaeas-*{Nc{P`s~Tk$}~g zefhxGAAT)AsZlL(O-*R3^aReP*REXcBli*~^`+Ls?4@X)AHd{_=;IR>w%B|c$ zgy6+_dRp4)dv3;v!(FJ4u67_GaMhmSv>$Vt^x?LyJTyXJKMG0^NiMD=8`Ci(6eJVNlX6=gU6_>LVTtG1r>Uu!%k@9T2m zgJ1p(wef;K8J;=1gjakRvA5Z!2ZiRsoMw87%F1)^r#=?vbInP3WZ}A@mQ*=Txj1MJ zb(DxuDL3d|!6ifqHER5w7F~-H2&Ycf^|uTC)Rsbqa@n?_{_D%B>dF52w#;}LgQ&yf z*&*QXc)#G}x)ZEgxByW*WmW)_z@{kc9VefO*eh8jVWoqOcr`?)E-D~senT{Dj1=W4E&k&xB_?j2K( z*sw^)JGgtUdx_bCA(w#*7ll_hwUFZx=iyt)Q$lRN0FYxZ+B|$UvX6})lL_lv8od`Fu<7Sav`Tz4JY*KG+?I3QiV3)j z{-kc+=E)1_oDFy;0LcMOcW}0tzj?lC|3QCs7ZQ8ir~cVZn~vwzo)3$`B+KqMq(lV=95@_RCJ$#_08K*A~KR#EI)Q*KOq1xYj*($vcJv6415Ea1LC4Q5TeiZ#@6e#{pTl}R^j*D z0sjB`Coqd}>fNg5mah+}jb0rhi{P$Wcs^A^3k2M$YuZ(kY#K>0+%Vk3tZgbi%Oji9 z#bz%XF(E{rV#<2~Jw z=rn(7+^04{2@YXJlF)6_ajKcag|;?|TOW&ckB`OhYUYlH2)nyfvMZu_XK<~ZZXGcC zZ~4t8`k)ooFq!3VN{eZet$2DYr8H!K0Wb(4J;zqK1zx)VS` zJodQ^|I>#1%Lmu`B+Cb4PSax=1FwQ=cV^1UfCnx9`<;7x&p}BrfE^%eV`s-@a~A#a zbzDkFm|Pg}c>-sym-=o2m8y+;%2XwNK+$~=e4Tg(G9>REtA!Xgo#3Ag;=9=Xa*M@?a z#b%L>Kp-5WGP%VhWEJrg*OzB}8R##|h&#_NzdZfMFJ3;_3*24<+JG$@7J6LIvT^^v zApsfAy{og%E18lSY$A*g*vWeZd>oV~T#Q@1o)7F-0Gm8u;d8*$31lnnLNHf5?Y6UW z`%4AIZnueawt@N-cO-X!WisqdsHdT#EmGgIQ`UpeiWxDiXh<8wMXb->diu`uy-L-Z zSrksSFKQGa7RYd_^PZ-Y~?7%<>)YV+QgipNY>5mT7ll;PLPIO?c#VcWiG?R5tQmBn|2XZhu`*-wc0t9nmB!J?$)3ingtb3N6&S5XV z(R$5+b+l{2EG2ZNe31WQ;}#%996qndhFpvAT6bJ_UjC^x7my1yS;b|dC;r`Wc5Mzs z>m8JS--K%X1#moqH|=P}0w^!B^t%OJYK@9i_BtBv)G`7nVaLqbskj+Y3W4|50XyxOZ|XQf0><$B+VyiQ^c8_Os7#v!VtT8fv~+&y|>yeYiaZ1XmV}wY6X)iLPTWzLDiI&g z%xQ;(KcG{PAi?sj7>+sti+|(+b0HU77G8Q9!m{O7b#${A<1OBR5e_ui<Od*Yi zlGe`c%1J7Iz-(##)4knI_i`JhsHMi;#%Gry?q|0o978&hxr*r((ebpWD$PulR~ir zZvQ}|&uHeUbuAn9A3q+m>01Jz?8(7~t7cfc)PF!>^x6Xx3vE*8kepBc!fQvv_u6K` z-5))IyjkvAfgK=h+<#1Wjb)YcKZ#zjgPisrnsaB6r#N^&@-3;_l`Ell{T>UfZK3yX z&zP2uS(bN~%t*{_E}JJNlJKt?~7PUD-2&g7Uk`12jjg}cmWL1;j?r3CIl^o)~Ol&k$1z^TXa<* zR@(>Lncpd#J$DH<)--A7x05kG^X6HvtP~WA;V7Zc2rKFtU?tn2PK8we+h6=6eRR`4 zG0QbEDFnvBy!KEYz+WtP1MET|yG+$m{_E&J)vsN$R9UAa%HEI8SLRl{#{qkNF8pn! zi-C@y_j*x!8Rgsj<5|cY-JeX(jpVxwiy!BQYn&m6DWWX2{vWV-G zeX$5dka6jXB! zIV@CcS324-{+>@OVw6seyUxwrJVrN_K#5yiCs}R@`)n`B9s=1uts{~W;>Yo9^V)+B zjWF`GxD#1I>}{9tl+5?{67|!7ChJZ&o=>gZ3hzaH@?RL?x=~ga4)%BU z*ZeFOd@c!w3_D_%z#`Us?VM8O*$ z<3Dh#8OiY#?xQsG#*4TuH-%9ZBXEMMzbZI_F3Z}W91KR`Ymsu$TYAb{G$%HJ>5;v(~>Xs+Ijl; zGhlzrp3vZF>ZWkH5$F)<{9nQlDtm$xqa$xlj_7t3x3rd?%kqJLQ*a%^*SsE0P#GiVC#R*y#J zG!{JWOr-XyHX~ArG2)~sm%>{f4t zuNnLcCv&Xc%aCKjCfWuK-NVfW#|+MZXtJ>zjMx>{4q=uc`RXv;gD2s!xkpvtVS zD{zn$YLEf@es=>F`bi~H2=-tw%yZ@Fggp_{mQ6N{wQPgmO}eqkFyA<+b~ZhKQY+H$ zytH+{z@KZfUg<$>+y4(ACo_p#qFW=d#3 zrPLPL6Ewk;H@>lLg2N%>Fuw@i+iCnO*prwf!i~FCNx!7E&yJ8(90-`a_Z{DQm7qrQK>d8{lwGo7B zANPLDLfj$Z#eelw&*tCM=kI^z{GuX4aEkN;)plJov-s6jE69#=0H}%=H}y?SesMK$ zV-J6NZ)7j}bv)+|Gy17RQts|Yo)JQ)$^jEHdFZo|tpG3V%u+*59$zl;Yk=zKe5m|_ ztmLB9K37@DRV$)y4dBb}M=md0W`1O`wu7Z;dV2G z7L>U{a4K7X3D%Ubh)2YD2h^23@y;s(VhObnAS(I=Yc!H;+R${^RXHHRL8-ZZ>G!#G z;sdyLlK1ao?6Xt9@6RsUepfwP3K4bDK{`MnW%D(}joxf);#$?81#LDs3Pc5zYI0s; zk+~}5K7WTg%2Ha8_amxDZr9d)l0P&EgYDgH&mtXPVMc}JM-=|;CI437G-cu?qm!jt zn`l(SZ?=Vw5Sz2hWGx;G+nb%A_h1+2V{Z~PehQa~+F92$lit&sLs;?m5b$S1sy^+# zqpmU^a-K;4@MBEdQ8gn$i4QC*#WJY2JWQdjaiE^VW1)c_NU;%!DI}?|_k(gEgU6l^X z`~@joNpVR8l#;iB$EODV59hi*COK^rcu9_oKUdEqBKLm2C=<7R*7kv!?PjfDw^?G6 zrU}B57xmzyv!-DBv$woAsfX8%-=-wQHvCRClUES6wXXR9!XSmf+^s77VF?E@(VRm# z^7p{sFl&mXTQ&0%Ong~to=yWFwlvcWX-YLU=DvwIR4Xu1e-5?+Kgh8NSh3qQ69|nPpL6GwQ(eqsw*r4RWfjB(>(*Fakwt_ke=jN&ZOl8y0E)wO)#=0%! zDBMYyvJZX5DYalIxGPvM4(@CM?$->Ae5ga3R%o?7Y~{R}e)PHLe7U4y7}>Y_gg1@c zVumSQFOmDQ8*&a5&;ka7FeG;=!~eZtoW%X_fPg1!+}*10)<$@TducBMo#|&2KqUBk z9{7ZPd$Ue43sX>uwaMP3n159LiK|NB=-C~SawXc?!c4=kAb%C!?J~8z!8ie=c@${@rg z(UK@G784JKd^Q#ukM<7Z^Pn+5uRO}qhO$rPNH_2JHC)z@vedpoA`KH&?N2sDsz}H# z7?3Vss^$7N+-;v`>tb4P8}2{TBm#m5b5A+=>-?Oz?6K&aDDD(6kuKx0;3EI$MRuM0 zls77pF-N|tHAxZ+xIT^QhxaqbvbOKkwLYk^2hV~$OEQKl;C6t|nEK%_n!%-_^D9Wq WN9A6*c$Inx_|t%Dt5zsmhW|fXsC*d! literal 0 HcmV?d00001 diff --git a/Meta/screenshot.png b/Meta/screenshot.png index 01fc816651b97bc39c97cf9c2ba47cd5af1c378d..10b47ebaf385e17562e96a410a04b7c13b3ca718 100644 GIT binary patch literal 74262 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

Dd1!<|h>$G8r;=-V;$plstrIq%0SS=fDiZZ* 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 AQUCw| literal 74293 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 diff --git a/README.md b/README.md index 963d84c..fe7988b 100644 --- a/README.md +++ b/README.md @@ -155,10 +155,10 @@ Clockwise from the top left: Clockwise from the top left: * [alyxia.dev](https://bsky.app/profile/did:plc:6vwpm5wzk6t4n3jenj2dl2bj) -* [docshoebox.bsky.social](https://bsky.app/profile/did:plc:qcumxnjbtxhrpsrtn5lhglkf) +* [murrax.dev](https://bsky.app/profile/did:plc:rr4f7bfwd32fgpbr35gy5lfb) * [ofplayers.net](https://bsky.app/profile/did:plc:h7qqicb64fhosb6o7t5hvgwu) * [thememesniper.dev](https://bsky.app/profile/did:plc:5wh3hjau5fsq65evluglwduk) -* [murrax.dev](https://bsky.app/profile/did:plc:rr4f7bfwd32fgpbr35gy5lfb) +* [docshoebox.bsky.social](https://bsky.app/profile/did:plc:qcumxnjbtxhrpsrtn5lhglkf) * [vescien.bsky.social](https://bsky.app/profile/did:plc:set35dzzhdxffu7cmxtljng3) Click [here](https://pinksea.art/did:plc:vrk3nc7pk3b5kuk6y5dewnuw/oekaki/3ll5pqkgkdsvx) to visit the original thread! @@ -179,4 +179,9 @@ The following libraries that PinkSea is built on top of are licensed under the C Please use them to build your own projects! -made with ❤ by shinonome laboratories, 2024-2025. we're glad you're here \ No newline at end of file +--- + +

+ made with love by
+ +

\ No newline at end of file From d5a28512c2fba29e31f609b4e7d63369a6a18327 Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Sat, 29 Mar 2025 21:09:58 +0100 Subject: [PATCH 19/21] docs: adjust the contributors. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe7988b..18e6466 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ PinkSea was built by these wonderful people, I'd like to extend a massive thank * [GlitchyPSI](https://bsky.app/profile/glitchypsi.xyz) for drawing the "post is missing" image visible whenever we see a post that does not exist! Thank you so much!!! * [yazuto](https://bsky.app/profile/cryztl.bsky.social) for designing our lovely mascot PinkSea-tan! She's the cutest being ever!! -![contributors badge](https://readme-contribs.as93.net/contributors/shinolabs/PinkSea?shape=circle) +![contributors badge](https://readme-contribs.as93.net/contributors/shinolabs/PinkSea?perRow=10&shape=circle&textColor=white) Thank you to everyone who participated in the GitHub drawing thread as well to make this README this much nicer!! All of the images in this README have been drawn by PinkSea users inside of PinkSea! From 00a77c851e00ce742d0b2e205ec0a27bded12569 Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Sun, 30 Mar 2025 14:23:12 +0200 Subject: [PATCH 20/21] feat: deserialize OAuth errors properly. --- PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs | 4 +-- PinkSea.AtProto/OAuth/Models/OAuthError.cs | 27 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 PinkSea.AtProto/OAuth/Models/OAuthError.cs diff --git a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs index 8e3a4f6..47c3ac1 100644 --- a/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs +++ b/PinkSea.AtProto/OAuth/AtProtoOAuthClient.cs @@ -106,7 +106,7 @@ public async Task> BeginOAuthFlow( var resp = await _client.Post(authServer!.PushedAuthorizationRequestEndpoint!, body, keyPair); if (!resp.IsSuccessStatusCode) { - var reason = await resp.Content.ReadFromJsonAsync(); + var reason = await resp.Content.ReadFromJsonAsync(); logger.LogError("Failed to send a PAR: {Reason}", reason); @@ -341,7 +341,7 @@ public async Task InvalidateSession(string stateId) /// Generates a DPoP keypair. /// /// The DPoP keypair. - private DpopKeyPair GenerateDPopKeypair() + private static DpopKeyPair GenerateDPopKeypair() { using var ecdsa = ECDsa.Create(ECCurve.CreateFromFriendlyName("nistp256")); return new DpopKeyPair diff --git a/PinkSea.AtProto/OAuth/Models/OAuthError.cs b/PinkSea.AtProto/OAuth/Models/OAuthError.cs new file mode 100644 index 0000000..601dc3b --- /dev/null +++ b/PinkSea.AtProto/OAuth/Models/OAuthError.cs @@ -0,0 +1,27 @@ +using System.Text.Json.Serialization; + +namespace PinkSea.AtProto.OAuth.Models; + +/// +/// An OAuth error. +/// +public class OAuthError +{ + /// + /// The error type. + /// + [JsonPropertyName("error")] + public required string Error { get; set; } + + /// + /// A human readable message. + /// + [JsonPropertyName("error_description")] + public string? Message { get; set; } + + /// + public override string ToString() + { + return $"[{Error}] > {Message}"; + } +} \ No newline at end of file From 1e17f2e712ceaab84fe7a3837a36bd37a3d8703b Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Sun, 30 Mar 2025 14:26:11 +0200 Subject: [PATCH 21/21] docs: readmes. --- PinkSea.AtProto.Server/README.md | 2 +- PinkSea.AtProto.Shared/README.md | 7 +++++++ PinkSea.AtProto/README.md | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 PinkSea.AtProto.Shared/README.md diff --git a/PinkSea.AtProto.Server/README.md b/PinkSea.AtProto.Server/README.md index be7a51e..ea8fe43 100644 --- a/PinkSea.AtProto.Server/README.md +++ b/PinkSea.AtProto.Server/README.md @@ -48,4 +48,4 @@ Your new query will now be available at `/xrpc/tld.domain.handlerName` # Licensing -Unlike the rest of the PinkSea repository, which is EUPL licensed, PinkSea.AtProto is released under the public domain, as described by the Unlicense. Please build on top of it! \ No newline at end of file +Unlike the rest of the PinkSea repository, which is EUPL licensed, PinkSea.AtProto.Server is released under the Creative Commons Zero license, effectively putting it in the public domain. Please build on top of it! \ No newline at end of file diff --git a/PinkSea.AtProto.Shared/README.md b/PinkSea.AtProto.Shared/README.md new file mode 100644 index 0000000..45d0ccd --- /dev/null +++ b/PinkSea.AtProto.Shared/README.md @@ -0,0 +1,7 @@ +# PinkSea.AtProto.Shared + +Thiss is a library containing models shared between PinkSea.AtProto and PinkSea.AtProto.Server. + +# Licensing + +Unlike the rest of the PinkSea repository, which is EUPL licensed, PinkSea.AtProto.Shared is released under the Creative Commons Zero license, effectively putting it in the public domain. Please build on top of it! \ No newline at end of file diff --git a/PinkSea.AtProto/README.md b/PinkSea.AtProto/README.md index df04d0f..79c47e1 100644 --- a/PinkSea.AtProto/README.md +++ b/PinkSea.AtProto/README.md @@ -4,4 +4,4 @@ This is a C# library for interfacing with the AT protocol, developed specificall # Licensing -Unlike the rest of the PinkSea repository, which is EUPL licensed, PinkSea.AtProto is released under the public domain, as described by the Unlicense. Please build on top of it! \ No newline at end of file +Unlike the rest of the PinkSea repository, which is EUPL licensed, PinkSea.AtProto is released under the Creative Commons Zero license, effectively putting it in the public domain. Please build on top of it! \ No newline at end of file