From 944bc4a3faa539a223d8529935ac6d4f3390b092 Mon Sep 17 00:00:00 2001 From: Lilith River Date: Thu, 21 Mar 2024 02:19:35 -0600 Subject: [PATCH] Create Imageflow.Server.ExampleModernAPI and CustomMediaEndpoint --- Imageflow.Server.sln | 8 +- .../CustomMediaEndpoint.cs | 204 +++++++++++++++ .../Dockerfile | 23 ++ .../Imageflow.Server.ExampleModernAPI.csproj | 32 +++ .../Imageflow.Server.ExampleModernAPI.http | 6 + .../Program.cs | 70 ++++++ .../appsettings.Development.json | 8 + .../appsettings.json | 9 + .../json/test.json | 6 + .../packages.lock.json | 232 ++++++++++++++++++ .../wwwroot/images/fire.jpg | Bin 0 -> 68351 bytes 11 files changed, 597 insertions(+), 1 deletion(-) create mode 100644 examples/Imageflow.Server.ExampleModernAPI/CustomMediaEndpoint.cs create mode 100644 examples/Imageflow.Server.ExampleModernAPI/Dockerfile create mode 100644 examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.csproj create mode 100644 examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.http create mode 100644 examples/Imageflow.Server.ExampleModernAPI/Program.cs create mode 100644 examples/Imageflow.Server.ExampleModernAPI/appsettings.Development.json create mode 100644 examples/Imageflow.Server.ExampleModernAPI/appsettings.json create mode 100644 examples/Imageflow.Server.ExampleModernAPI/json/test.json create mode 100644 examples/Imageflow.Server.ExampleModernAPI/packages.lock.json create mode 100644 examples/Imageflow.Server.ExampleModernAPI/wwwroot/images/fire.jpg diff --git a/Imageflow.Server.sln b/Imageflow.Server.sln index 5f95a957..3a023fb7 100644 --- a/Imageflow.Server.sln +++ b/Imageflow.Server.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29503.13 @@ -64,6 +64,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Imazen.Routing", "src\Imaze EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Imazen.Abstractions", "src\Imazen.Abstractions\Imazen.Abstractions.csproj", "{A04B9BE0-4931-4305-B9AB-B79737130F20}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Imageflow.Server.ExampleModernAPI", "examples\Imageflow.Server.ExampleModernAPI\Imageflow.Server.ExampleModernAPI.csproj", "{4AF9EFF8-5456-4711-B847-6DD31F949B02}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -158,6 +160,10 @@ Global {A04B9BE0-4931-4305-B9AB-B79737130F20}.Debug|Any CPU.Build.0 = Debug|Any CPU {A04B9BE0-4931-4305-B9AB-B79737130F20}.Release|Any CPU.ActiveCfg = Release|Any CPU {A04B9BE0-4931-4305-B9AB-B79737130F20}.Release|Any CPU.Build.0 = Release|Any CPU + {4AF9EFF8-5456-4711-B847-6DD31F949B02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4AF9EFF8-5456-4711-B847-6DD31F949B02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4AF9EFF8-5456-4711-B847-6DD31F949B02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4AF9EFF8-5456-4711-B847-6DD31F949B02}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/examples/Imageflow.Server.ExampleModernAPI/CustomMediaEndpoint.cs b/examples/Imageflow.Server.ExampleModernAPI/CustomMediaEndpoint.cs new file mode 100644 index 00000000..9d9649e3 --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/CustomMediaEndpoint.cs @@ -0,0 +1,204 @@ +using System.Buffers; +using System.Text; +using System.Text.Json; +using Imazen.Abstractions.Blobs; +using Imazen.Abstractions.Resulting; +using Imazen.Routing.HttpAbstractions; +using Imazen.Routing.Layers; +using Imazen.Routing.Promises; +using Imazen.Routing.Requests; + +namespace Imageflow.Server.ExampleModernAPI; + + +internal record CustomFileData(string Path1, string QueryString1, string Path2, string QueryString2); + +/// +/// This layer will capture requests for .json.custom paths. No .custom file actually exists, but the .json does, and we'll use that to determine the dependencies. +/// +public class CustomMediaLayer(PathMapper jsonFileMapper) : Imazen.Routing.Layers.IRoutingLayer +{ + public string Name => ".json.custom file handler"; + + public IFastCond? FastPreconditions => Conditions.HasPathSuffixOrdinalIgnoreCase(".json.custom"); + public ValueTask?> ApplyRouting(MutableRequest request, CancellationToken cancellationToken = default) + { + // FastPreconditions should have already been checked + var result = jsonFileMapper.TryMapVirtualPath(request.Path.Replace(".json.custom", ".json")); + if (result == null) + { + // no mapping found + return new ValueTask?>((CodeResult?)null); + } + var physicalPath = result.Value.MappedPhysicalPath; + var lastWriteTimeUtc = File.GetLastWriteTimeUtc(physicalPath); + if (lastWriteTimeUtc.Year == 1601) // file doesn't exist, pass to next middleware + { + return new ValueTask?>((CodeResult?)null); + } + // Ok, the file exists. We can load and parse it using System.Text.Json to determine the dependencies.\ + return RouteFromJsonFile(physicalPath, lastWriteTimeUtc, result.Value.MappingUsed, request, cancellationToken); + } + + private async ValueTask?> RouteFromJsonFile(string jsonFilePath, DateTime lastWriteTimeUtc, IPathMapping mappingUsed, MutableRequest request, CancellationToken cancellationToken) + { + // TODO: here, we could cache the json files in memory using a key based on jsonFilePath and lastWriteTimeUtc. + + var jsonText = await File.ReadAllTextAsync(jsonFilePath, cancellationToken); + var data = JsonSerializer.Deserialize(jsonText); + if (data == null) + { + return CodeResult.Err((HttpStatus.ServerError, "Failed to parse .json custom data file")); + } + + return new PromiseWrappingEndpoint(new CustomMediaPromise(request.ToSnapshot(true),data)); + } +} + +internal class CustomMediaPromise(IRequestSnapshot r, CustomFileData data) : ICacheableBlobPromise +{ + public bool IsCacheSupporting => true; + public IRequestSnapshot FinalRequest { get; } = r; + + public async ValueTask CreateResponseAsync(IRequestSnapshot request, IBlobRequestRouter router, IBlobPromisePipeline pipeline, + CancellationToken cancellationToken = default) + { + // This code path isn't called, it's just to satisfy the primitive IInstantPromise interface. + return new BlobResponse(await TryGetBlobAsync(request, router, pipeline, cancellationToken)); + } + + public bool HasDependencies => true; + public bool ReadyToWriteCacheKeyBasisData { get; private set; } + + /// + /// Gets a promise for the given path that includes caching logic if indicated by the caching configuration and the latency by default. + /// + /// + /// + /// + /// + private async ValueTask> RouteDependencyAsync(IBlobRequestRouter router, string childRequestUri, + CancellationToken cancellationToken = default) + { + if (FinalRequest.OriginatingRequest == null) + { + return CodeResult.ErrFrom(HttpStatus.BadRequest, "OriginatingRequest is required, but was null"); + } + var dependencyRequest = MutableRequest.ChildRequest(FinalRequest.OriginatingRequest, FinalRequest, childRequestUri, HttpMethods.Get); + var routingResult = await router.RouteToPromiseAsync(dependencyRequest, cancellationToken); + if (routingResult == null) + { + return CodeResult.ErrFrom(HttpStatus.NotFound, "Dependency not found: " + childRequestUri); + } + if (routingResult.TryUnwrapError(out var error)) + { + return CodeResult.Err(error.WithAppend("Error routing to dependency: " + childRequestUri)); + } + return CodeResult.Ok(routingResult.Unwrap()); + } + public async ValueTask RouteDependenciesAsync(IBlobRequestRouter router, CancellationToken cancellationToken = default) + { + var uri1 = data.Path1 + data.QueryString1; + var uri2 = data.Path2 + data.QueryString2; + + foreach (var uri in new[]{uri1, uri2}) + { + var routingResult = await RouteDependencyAsync(router, uri, cancellationToken); + if (routingResult.TryUnwrapError(out var error)) + { + return CodeResult.Err(error); + } + Dependencies ??= new List(); + Dependencies.Add(routingResult.Unwrap()); + } + ReadyToWriteCacheKeyBasisData = true; + return CodeResult.Ok(); + } + + internal List? Dependencies { get; private set; } + + private LatencyTrackingZone? latencyZone = null; + /// + /// Must route dependencies first! + /// + public LatencyTrackingZone? LatencyZone { + get + { + if (!ReadyToWriteCacheKeyBasisData) throw new InvalidOperationException("Dependencies must be routed first"); + // produce a latency zone based on all dependency strings, joined, plus the sum of their latency defaults + if (latencyZone != null) return latencyZone; + var latency = 0; + var sb = new StringBuilder(); + sb.Append("customMediaSwitcher("); + foreach (var dependency in Dependencies!) + { + latency += dependency.LatencyZone?.DefaultMs ?? 0; + sb.Append(dependency.LatencyZone?.TrackingZone ?? "(unknown)"); + } + sb.Append(")"); + latencyZone = new LatencyTrackingZone(sb.ToString(), latency, true); //AlwaysShield is true (never skip caching) + return latencyZone; + } + } + + public void WriteCacheKeyBasisPairsToRecursive(IBufferWriter writer) + { + FinalRequest.WriteCacheKeyBasisPairsTo(writer); + if (Dependencies == null) throw new InvalidOperationException("Dependencies must be routed first"); + foreach (var dependency in Dependencies) + { + dependency.WriteCacheKeyBasisPairsToRecursive(writer); + } + + var otherCacheKeyData = 1; + writer.WriteInt(otherCacheKeyData); + } + + private byte[]? cacheKey32Bytes = null; + public byte[] GetCacheKey32Bytes() + { + return cacheKey32Bytes ??= this.GetCacheKey32BytesUncached(); + } + + public bool SupportsPreSignedUrls => false; + + public async ValueTask> TryGetBlobAsync(IRequestSnapshot request, IBlobRequestRouter router, IBlobPromisePipeline pipeline, + CancellationToken cancellationToken = default) + { + // Our logic is to return whichever dependency is smaller. + // This is a contrived example, but it's a good example of how to use dependencies. + var blobWrappers = new List(); + var smallestBlob = default(IBlobWrapper); + try + { + foreach (var dependency in Dependencies!) + { + var result = await dependency.TryGetBlobAsync(request, router, pipeline, cancellationToken); + if (result.TryUnwrapError(out var error)) + { + return CodeResult.Err(error); + } + var blob = result.Unwrap(); + blobWrappers.Add(blob); + + if (smallestBlob == null || blob.Attributes.EstimatedBlobByteCount < smallestBlob.Attributes.EstimatedBlobByteCount) + { + smallestBlob = blob; + } + } + if (smallestBlob == null) + { + return CodeResult.ErrFrom(HttpStatus.NotFound, "No dependencies found"); + } + return CodeResult.Ok(smallestBlob.ForkReference()); + } + finally + { + foreach (var blobWrapper in blobWrappers) + { + blobWrapper.Dispose(); + } + } + } +} + diff --git a/examples/Imageflow.Server.ExampleModernAPI/Dockerfile b/examples/Imageflow.Server.ExampleModernAPI/Dockerfile new file mode 100644 index 00000000..9fad555b --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/Dockerfile @@ -0,0 +1,23 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER $APP_UID +WORKDIR /app +EXPOSE 8080 +EXPOSE 8081 + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.csproj", "examples/Imageflow.Server.ExampleModernAPI/"] +RUN dotnet restore "examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.csproj" +COPY . . +WORKDIR "/src/examples/Imageflow.Server.ExampleModernAPI" +RUN dotnet build "Imageflow.Server.ExampleModernAPI.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "Imageflow.Server.ExampleModernAPI.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "Imageflow.Server.ExampleModernAPI.dll"] diff --git a/examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.csproj b/examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.csproj new file mode 100644 index 00000000..f8e824a0 --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.csproj @@ -0,0 +1,32 @@ + + + + net8.0 + enable + enable + Linux + + + + + + + + + + .dockerignore + + + + + + + + + + + + + + + diff --git a/examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.http b/examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.http new file mode 100644 index 00000000..15c38d1d --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/Imageflow.Server.ExampleModernAPI.http @@ -0,0 +1,6 @@ +@Imageflow.Server.ExampleModernAPI_HostAddress = http://localhost:5025 + +GET {{Imageflow.Server.ExampleModernAPI_HostAddress}}/img/test.json.custom + + +### diff --git a/examples/Imageflow.Server.ExampleModernAPI/Program.cs b/examples/Imageflow.Server.ExampleModernAPI/Program.cs new file mode 100644 index 00000000..50ac0c0e --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/Program.cs @@ -0,0 +1,70 @@ +using Imageflow.Fluent; +using Imageflow.Server; +using Imageflow.Server.ExampleModernAPI; +using Imazen.Abstractions.Logging; +using Imazen.Routing.Layers; +using PathMapping = Imazen.Routing.Layers.PathMapping; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +builder.Services.AddImageflowLoggingSupport(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + + +app.UseImageflow(new ImageflowMiddlewareOptions() + .MapPath("/images", Path.Join(builder.Environment.WebRootPath, "images")) + .SetMyOpenSourceProjectUrl("https://github.com/imazen/imageflow-dotnet-server") + .AddRoutingConfiguration((routing) => + { + routing.ConfigureEndpoints((endpoints) => + { + endpoints.AddLayer(new CustomMediaLayer(new PathMapper(new[] + { + new PathMapping("/img/", Path.Join(builder.Environment.ContentRootPath, "json"), true) + }))); + }); + })); + + +var summaries = new[] +{ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" +}; + +app.MapGet("/weatherforecast", () => + { + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + return forecast; + }) + .WithName("GetWeatherForecast") + .WithOpenApi(); + +app.Run(); + +record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) +{ + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); +} + diff --git a/examples/Imageflow.Server.ExampleModernAPI/appsettings.Development.json b/examples/Imageflow.Server.ExampleModernAPI/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/examples/Imageflow.Server.ExampleModernAPI/appsettings.json b/examples/Imageflow.Server.ExampleModernAPI/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/examples/Imageflow.Server.ExampleModernAPI/json/test.json b/examples/Imageflow.Server.ExampleModernAPI/json/test.json new file mode 100644 index 00000000..d5ac8480 --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/json/test.json @@ -0,0 +1,6 @@ +{ + "Path1": "/images/fire.jpg", + "Path2": "/images/fire.jpg", + "Querystring1": "format=webp&quality=80", + "Querystring2": "format=jpeg&quality=76" +} \ No newline at end of file diff --git a/examples/Imageflow.Server.ExampleModernAPI/packages.lock.json b/examples/Imageflow.Server.ExampleModernAPI/packages.lock.json new file mode 100644 index 00000000..72d37f5e --- /dev/null +++ b/examples/Imageflow.Server.ExampleModernAPI/packages.lock.json @@ -0,0 +1,232 @@ +{ + "version": 1, + "dependencies": { + "net8.0": { + "Microsoft.AspNetCore.OpenApi": { + "type": "Direct", + "requested": "[8.0.3, )", + "resolved": "8.0.3", + "contentHash": "mUq0UL+H7UtA3Jud/7/BC7n5W2c4zCvTFUa2hE2+/oQqATa4oGHb87ETON09SEWkcbBRTz3WM16kTE+zuoXq2A==", + "dependencies": { + "Microsoft.OpenApi": "1.4.3" + } + }, + "Swashbuckle.AspNetCore": { + "type": "Direct", + "requested": "[6.4.0, )", + "resolved": "6.4.0", + "contentHash": "eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==", + "dependencies": { + "Microsoft.Extensions.ApiDescription.Server": "6.0.5", + "Swashbuckle.AspNetCore.Swagger": "6.4.0", + "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0", + "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0" + } + }, + "CommunityToolkit.HighPerformance": { + "type": "Transitive", + "resolved": "8.2.2", + "contentHash": "+zIp8d3sbtYaRbM6hqDs4Ui/z34j7DcUmleruZlYLE4CVxXq+MO8XJyIs42vzeTYFX+k0Iq1dEbBUnQ4z/Gnrw==" + }, + "Imageflow.AllPlatforms": { + "type": "Transitive", + "resolved": "0.13.1", + "contentHash": "cOuUD9JqwgGqkOwaXe3rjmHdA8F1x1Bqsu4m9x9tgJUGsMqytOeujYHz/trctU+VY8rODoCVw4fStJ8vVELIeQ==", + "dependencies": { + "Imageflow.NativeRuntime.osx-x86_64": "2.0.0-preview8", + "Imageflow.NativeRuntime.ubuntu-x86_64": "2.0.0-preview8", + "Imageflow.NativeRuntime.win-x86": "2.0.0-preview8", + "Imageflow.NativeRuntime.win-x86_64": "2.0.0-preview8", + "Imageflow.Net": "0.13.1" + } + }, + "Imageflow.NativeRuntime.osx-x86_64": { + "type": "Transitive", + "resolved": "2.0.0-preview8", + "contentHash": "3wEglrMqVzlnAVBTdK6qcRySdo/4ajBP5ASRuK3yHfBqPp3ld4ke6guxuSZbgDTObIxai7KTLlsIvQZhusymUA==" + }, + "Imageflow.NativeRuntime.ubuntu-x86_64": { + "type": "Transitive", + "resolved": "2.0.0-preview8", + "contentHash": "H8K5kZqcM3IliDRZD3H8BN6TbeLgcW+6FsDZ3EvlqBvu41s+Lv9vxE+c3m1cUQhsYBs76udUhgJFNR1D6x3U5g==" + }, + "Imageflow.NativeRuntime.win-x86": { + "type": "Transitive", + "resolved": "2.0.0-preview8", + "contentHash": "WunIva5NZ2iMPKCyz8ZTkN7SRaW3szBijMg5YK7jaSFZHw8Xiky/GFfghc0XgWTuILxwO4YbY86e8QvW8CBigQ==" + }, + "Imageflow.NativeRuntime.win-x86_64": { + "type": "Transitive", + "resolved": "2.0.0-preview8", + "contentHash": "1rY6C9Hjj7U9toa7FlnveiSBKccZlvCaHwdxPRQS0vDpAZZCJrTA/H7VYdreifpnIDInYcf0i/3oEKzEnj884w==" + }, + "Imageflow.Net": { + "type": "Transitive", + "resolved": "0.13.1", + "contentHash": "QHSghMGgiy4DhRloqEgNaaY+AM/28mwSF5Q371B90JyKDGIEtJPYMX+d8AkCmHuuf9Tgc6Zl8v+9ieY5yXGcNw==", + "dependencies": { + "Microsoft.IO.RecyclableMemoryStream": "[3.0.0, 4.0.0)", + "System.Text.Json": "6.0.9" + } + }, + "Microsoft.Extensions.ApiDescription.Server": { + "type": "Transitive", + "resolved": "6.0.5", + "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "EcnaSsPTqx2MGnHrmWOD0ugbuuqVT8iICqSqPzi45V5/MA1LjUNb0kwgcxBGqizV1R+WeBK7/Gw25Jzkyk9bIw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "+k4AEn68HOJat5gj1TWa6X28WlirNQO9sPIIeQbia+91n03esEtMSSoekSTpMjUzjqtJWQN3McVx0GvSPFHF/Q==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.IO.RecyclableMemoryStream": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "irv0HuqoH8Ig5i2fO+8dmDNdFdsrO+DoQcedwIlb810qpZHBNQHZLW7C/AHBQDgLLpw2T96vmMAy/aE4Yj55Sg==" + }, + "Microsoft.OpenApi": { + "type": "Transitive", + "resolved": "1.4.3", + "contentHash": "rURwggB+QZYcSVbDr7HSdhw/FELvMlriW10OeOzjPT7pstefMo7IThhtNtDudxbXhW+lj0NfX72Ka5EDsG8x6w==" + }, + "Swashbuckle.AspNetCore.Swagger": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==", + "dependencies": { + "Microsoft.OpenApi": "1.2.3" + } + }, + "Swashbuckle.AspNetCore.SwaggerGen": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==", + "dependencies": { + "Swashbuckle.AspNetCore.Swagger": "6.4.0" + } + }, + "Swashbuckle.AspNetCore.SwaggerUI": { + "type": "Transitive", + "resolved": "6.4.0", + "contentHash": "1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==" + }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "6.0.3", + "contentHash": "ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "sDJYJpGtTgx+23Ayu5euxG5mAXWdkDb4+b0rD0Cab0M1oQS9H0HXGPriKcqpXuiJDTV7fTp/d+fMDJmnr6sNvA==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "6.0.9", + "contentHash": "2j16oUgtIzl7Xtk7demG0i/v5aU/ZvULcAnJvPb63U3ZhXJ494UYcxuEj5Fs49i3XDrk5kU/8I+6l9zRCw3cJw==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" + } + }, + "imageflow.server": { + "type": "Project", + "dependencies": { + "Imageflow.AllPlatforms": "[0.13.1, )", + "Imazen.Common": "[0.1.0--notset, )", + "Imazen.Routing": "[0.1.0--notset, )", + "Microsoft.IO.RecyclableMemoryStream": "[3.0.0, )" + } + }, + "imazen.abstractions": { + "type": "Project", + "dependencies": { + "CommunityToolkit.HighPerformance": "[8.*, )", + "Microsoft.Extensions.Hosting.Abstractions": "[2.*, )", + "System.Collections.Immutable": "[6.*, )", + "System.Text.Encodings.Web": "[6.*, )" + } + }, + "imazen.common": { + "type": "Project", + "dependencies": { + "Imazen.Abstractions": "[0.1.0--notset, )", + "Microsoft.Extensions.Hosting.Abstractions": "[2.2.0, )" + } + }, + "imazen.routing": { + "type": "Project", + "dependencies": { + "CommunityToolkit.HighPerformance": "[8.*, )", + "Imageflow.Net": "[0.13.0, )", + "Imazen.Abstractions": "[0.1.0--notset, )", + "Imazen.Common": "[0.1.0--notset, )", + "System.Collections.Immutable": "[6.*, )", + "System.IO.Pipelines": "[6.*, )" + } + } + } + } +} \ No newline at end of file diff --git a/examples/Imageflow.Server.ExampleModernAPI/wwwroot/images/fire.jpg b/examples/Imageflow.Server.ExampleModernAPI/wwwroot/images/fire.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4bb42cc5d50b5ec9d48aad343444acec1e8422a GIT binary patch literal 68351 zcmbTdWmFtp6sFs_J0W=EF2S89B)A2)V8PwpA-FUWT!Xv2ySuvt3(`R2&g7e!HM7?J zb?-fO_OCisYd@=Ozo*{wzVf~Uz?PMikp#fNzyJ*YZGiW6z!v}%UxWYG5s(oO z;NcNak&qCP(NWRS(NNLQFfehkF)(p3(a^97uyOG4KYaLrj`fj{0G|*S{{#MiCxL{+ICoZZNR_ zazsQzMnOgUH=q$401E>L2MZ7PU)KLd`~KSxfX6|=rR4aGh^K6XMCFLj85sW?nOeNI z_k+spB@NdPryvwmf{%nm#I$tu42(?NJiL7T0)k(@N=Qmc%gCy#scUFzY3mr9n3|be zSXw!|xVpJ}czOl@3<(VjkBCf2{FRiPlA4yDmtRm=R9sS8R#)H9*woz8+Sb=UFgP?k zGCDRlzp%Kpyt2Bs`)6+|SBLMviz?oPo&r;_<(0dr_#lR4zaKaGFIWpyA%7h5m>3 zKgs^zfd&2lBKtpJ|CehGfDQ-q@8ZGX06>5T*~oa!AQ)9ettr1l=^LV4WQ)?v$YCa~ zzmMPj)Q(g6F6sP_(+G1>7u0%+{S)DyTPL*}8WYtzLbq0RtRtjjsP|ZgYmUW;9t$f= zFRB_miyA(X(8P2!8&E1yT#w$DXnuSC8okViBjh?UL%<3d1eng1CEGBt_yQ_xE2x3l zTU+ujCT^N*65CJ8_eFM?*rms)xB@SOykN5}TP#73FHPo?_Ey_KhO;gqR_)rGacTr8;#rT(5>}Pj@@`w;a<5t6Ub9t3i2G(C z`g17g5zD|NzLH;2_9l=7e0~RXl?F~cvbV4eZFs_w&Q*3)XVuo*o(6bSh3?5WYhByB z@^oQ6Wt3dC-nr8F1(j~<=;_+JuTzN7h1~n)=S&4~YS1U1mx4a44j1W7XwhH}N-82* zrD;d7>`hKX86V5MbxZyv`MFC?Z>a`}=3e>>0`gyToNH6X_u2IYRW+u}iEuK_KP;}D za(;=!n`DI4-jyLgXB{8V1A zm-b>9QkqM1F4|mu2UIsFupCFI?qd9ac2|0tjGC|(0DCM zzsTU97d%Qz?sg1q6!_8Xyip&Ek^9)1pjI{?7zeBpzW6e^&R!6iFxx>6qH9RwL>!MV z^ucst1y%%y-q!B5twx~)XGDbVLRf@Ph8i|rtapjdO-mkysC=F_+JL*>$3#$Mx|kzc z;fByqJK!2oEg1kDs*>B)lf)2b7NCwX$w1`0#vkgrN5{ml*_5uN9y(dN#!GHa<3C;A zK4Ch{sgS@Nw=S1xt*2-2hzG02XZx=KyytPksywiCFZW8i8?I(+o77!BMno`o9Kl{e z>wSV*i~Gs7Vnw^u*TVG_2+LjD7eJ#)ufps~d|o+ImwGENlMczcPk24W4@tvgd&R2L ze%4(2m-1^rqB7hQE|h@Wnr=HO0kLW1+kyB2*Wo@w{-A7JU^Y%lbPWdhyL;JW(FTpt zgg+w@5-8_jtCMOov?e@-GrUpyG4u*2p5okhxa^I(Q=-f=VH7KUCY;Xbxv!W*Ar>xp z09xE&@cLNxaHqM|3f<>~k+JE-R#GYVE-O9mpI zq!8fhOQAM!Bw_N!^zgyd9%pl%>V<_iGTP9=-sU&`EYaYCU7vs5k~2P@r)rB4woE63 zCNJG77lZJ08oU0^>OTBBAB~RfFmdpT%!r15G2-0x&HBaC744{@+P^$U%^z;7!Q^MO zO!Ow%2^`+Wyen;+(`K6?h?9=}nrq@y5jOwaPjMt{R_mfC%Y3TJvP~0)B3MGSAt);H zxfjxF*QgtQ(7pR{A@*X!Dc_MK)NyqBuVt-={kK#ze!c_vU~9NI$2V%Q*G+P?zD~cZ z-Acmx{uT5gaGjbO{GCC>s_~$E#g4UVz?wXzq)2j!Fl4kJ=8Q1@#^~S8>yH)2Zbu!m zr?oz{@xiCJoyim4O#~!p?BVxHjX7hhfaw zt%W3D9ASxQ*7^?sxc>1kJM5G6m}wlUdsl& z8LTnc&Bb~nP1o8SIhMT>5dnCjJ8wxjrCJpZYX$|;#@VC?9%~yxSfcs2MTp`SnpeiQ z^}J4!$Y&_GH>!{77B)vMKd2%y1GFGyVXFF3zQtsmdx|b=eTQR0fy8kD410>v`)N>& zvmc(j?ma9oZ6(dOj~lLUE-=9a8Lm9-)1>G#`3UA@FakZVSO>~zmb&ng8__pa_g@<= zUl?p>#mt_+{`qc>hAVIcrApv{U4LjgVb)q=sHA9$Fo=mhgE7SNLwT`)3rawtdj6|< zs@U3?KBdIwkxe8BaSYZ~D1I$HOXh_oNlV6Ijz;+5`HE=)P3qsWzE>Tkl0DQ=fxa%S z2gZpoz`-+$AX==fOkpy;M%yf1Pt-BRjiJVmB6ZL6znplJ2`VT`?`Yr@p(jXhyYVjz z7(X1H&INE$Hl^=|M>5hSZXTjVx^2-cJ0bR=B)6fs3m3Q zI3KuvLX92Th7dHnUr*H*c&nX{x{CxoWj@Uy^3KoW-vwzw+xYak#^UwZl1U(lTZBfE z)YkPwn)=(p_ z5Tic#FhMB=C@Ur8KJmr+XDJg#KU%(sZtDOl)0HY&c>_L1ie}C!i(zg`z(xXA^+0mQ*H(6! zdx(qmV11OL&e&|y@J1x&Sfby|Y6QG?!p&xPqxqH>NyGQC9AX4reHG3}M1C>BPmy6~ z1^$Rqk2l3%Su@B@+64{*%s^9Bt5sRtW1-$5%GbidqzoqxmVsZZ7W-M&z0KbNi!yM? zX4)Ut_*96rWmF1WD4v!E7q`Qx;z%qS<$h9wj&TRNvlojn%q4p?X44)(937^hygzY7 z&52Q`X>4ZcGW7AyLY&cwr*9IxW-`ejHV#5H)Q!Xz@SnTsgF$UR4fItxmEgLD_OL7b zE*FO){W$@(D@^B?m`{wu`?meRSx@SWfvM$jI>+_YhzaM^JtXQhKrmHEOMQ~ts7dY- zWxkv0tL2=I)+oNmHI<(X5ys7l1O*w!uW!w1_GP-~G2M%sUq^GQ5tNQJE(o49v?XFw zL^Vk&#DTL)NS77yu+$i_rf|s!n4+mA+4!SEGo+V-{(^?qx*JM%>&5dwBVL!(?PmiE z(oZH=S1YK%j?WoH;;*0jO8W0Yqbr=-(Va3PUImIHva#VKJKg~vHry~yXc3UBJC#vX ze>cW7seKO~5-ZxmZB9JOo!W55mu39nSnB{&1`~0=OQwB4DV`rwXM@j8Imn8rqhsLS zkWVZf>Au&nv=+JmJB`!fE>K#zgQX^}RFtR63Edl!G29i;=Zd}7)L?u?t|fvs(GKX- z{IVEMX);L!gvdY2()8)T^UWn-DWhLm#!lyC&Q@d|*wu^dJfGb24j7Ix-}GRE=3ld> zKrW31qK(3KyykzlL83vl3tlm${2ap+DQ{2FyWO&KWOh>mwNWv2NBJU|A&9;+P{Mn7ab>;`5f77Vm0Rbb3QVT&0HAI3w%h;obtKSJ>PG<2MySF}6`cvjAxuk1$LP7^)xXfC`E+;LP+X03Hd{YrFLe~|rI`r_bQR^b);+bn*4bEr=D zD9|A=U*LpmgevZ1h3)y7mR!*m>kGv}E{G=hq`14~<f#1{6j^~KbIb0Q}qm?{YT|xBE zpXvK_z3IE36#l~vZLt_#QV@jKWvL-hzAwVFjMuT4#$; zazr;{b%gh-T_KO8zRV?;Z?z?s6Zho6Znj(?NGX++A9zL%Vo|ZuI4-G|a7U3#7IDYo z5-oWp_2!$rt@2ixv2PGaxSP{p%8v^7Q)xLHf1!VY%1PCbg)5K@;=JbZ$AbOa+0kuq z$ld`R6&_O4#sR)oy4Lq|YHKH-`aNyw$9ndW>^1bue6_hwV~3OGUz89_`JNnjb>c`A z2AEJMI{Sa`9Nj)$>p(X}Iv6p=q@2wu`>5-YVUWPo#7|>{*nkJ#EAb zd!LuCVEUTNat_X!6{mDlQ^q;$EqXNrI|U(6E7~McAu^{iEhh)Gbenj#L!{9T1Xrz zCej$!t!U$KTUYF4N+6iy1WlXb8%uYowJ9x3AL z3$s+#dV7tbqW3a=!D_}f+Q!J_A&J0;0iOi5;G7;~p2Z5)6CHwtKHF{+)5yJvzI{8B zp4+~Vf2uUbxr+#7*0$(!y!Mq2B@dSOjTR$Tko1b_r)}Zz-C$K1f8QwTYxFtMF~K+E z)A)yF=0fep!GSqy!_Q_{yfS1QJ@$Zi< z8J}hn|K06OQBWX5x90GUsYLG8t8I6E(S;5gKg?{c9baL?4SV`?$9Bqc!Vn^DTLQB< z2xpmex3#30Jnxpu^mav1U?S+>9zTo=2?uV*%IqI)zeJwiA`?}9<3f{po33MUz7G`A zb%f-kz9Kj+d&KgB;X;p>fnOd~VPC;1m|%zRwQgt!W#B(7Fz9}f)*5mp4SE<5D%uOS zmaJw6Y8Bx|)eQonk&9uSgsF+usUWd2sxa?5zOBAYnC!>B%d&YrCE)5T>#lW1Bg33D ze59NSf%3}BJ0MV>LCh?b_xO@B5m#SYI|Jz;f*<%z@f@^TUN;Qy0d#H-fN1sJ+Fr@x#gfMg*z?H(?AR3`$}S!?^APM-dpOzd2rrn|5mSC(0e zEw8q%Cmg=0Bd{L4mnfcI*4Jiqt!#J5PaY%7L@X9N?ILOf!;-T@!kybl5(U*MPr zmZ6^G9}=-xhf}X8cdvU4@?u5X%aMK8v=%r8jH7+GE2$ZKdUBD(f3G`dQk?h~N>LM$ z);r0R(nVC(#B$K96gNsn%3;j~&;}7?9Ox_2Ji{#HSk=tS`LYerlZYq2jljJy{%pgl z8{oV$_S>rb%jDL0rPdSBk!z;ViL`JB8^A0_pGc_&$KNx|{|-2vTRnE?o5K(Nm{cEB zQjqzi9%8NKF1py_fcbfBpew*R8C1xA*9n=8Q5agOoKCH|tVJi?v;Xq=4WZ=)tMWT@ zQey0^Th$_d&s+rIx?k%vl4601Kd&3K_2idWP^Ozkt;-N^f2tSX}Q>a2h3Nv;o|&Ypbp zRApBXhli;@rUG|~43V5_6Bp%(W;jq~X~wsbVeY%0somoT6iZuL$}; zE6Ft87z}weUjix&8zb2VnKhMiB5qB5xg8WiTspfa%9hx8P&l`Mv zx!M|BZRvJJrxEVTNhWb|4%+IutvmtH%!9lrDopghc zbDpSEYi7A9&#EdKt-YUi8xu;ve(+K|?}Jq3aGB)t(&h1zwmq+z_z#5=IiHrZPa>RB zJhE)M$k$P>3D&89B6&S&48zNNX)Bw}E<1QNmJ<;>(|HrTc~K{AzF>c-&z2_I zxuHs{vaJ15BHiYYsr?m}bs$Y;1=CKsOQ}we z5G0w40Z%*c1F10lkkSHa@RO>>F=d=E-bevCd;k#o0k(qlPz=dFsr8j%u=Paq$|^p+ zcDt8p^lsci4l6;Lb&nqu3X-+9(#V#jdem0U9JlKQFN9K+zQzLZ3&%oFb5i|f6NGru z_3FO&!MyQeydvG?qG^6io@X$P1by-!m$oAXj)u^7<*{DQ$OwY`GlA~_J@GZY`len_ z%y+gLf~9FPD*jVS!=@7lLD{gZXkN=osd(3uf%tc0qeKa zv5{Ak=8;#9=Gzx$9VOJ^QgJ)(7`bUObWIpIUy+lnzEeS+w@a?qp9Y7p8cCFZ9 zn6RE9pk+J})1!KebO1`S^*7xdD!-G_uz>cJ?OneEK(c9`fx)1VA1(1~{Zq9`0v4t} z2(i9NBLS7ajbbdYh%T|(kx3GmDdTsGOJO`NE8XSN;(Q-u4Q4||-7+yyCD{k}EG#Rp zv{ktGjFN_NY^;Bhv=d@J0A3nezzGiPgya!459T=m5KS<1-KNAq*?x_ksG_MO%O%D! zSLME#CV|T}c02y;vZDrQBdr7<<2J>&ulgS4k*@q;o`6FQK3qlmy5A=c^qNA@zoP6e zq!wW0oP(GqykQco1#}(rVoP_TyfZxM=9f_R;|?kcjKbalRzyhthW>r6*6v-ksXg$u zBl$+!`68gUJwod3;zqC6uEwI33tk<;Omvag32KU?WZrGZl-I)1+YkA^e~=bf_N=q) z)Wb6io~*EQ#3eygFi(-=YjU;4EME0vl(-YP{QZOcgw~Sc$6$H#^5bQq6DG9AlrM=u z)0U=)uxX3|li}cHOA*bLH`hgLRcqee^mW~q&N_I)rDFn#eQ0B>;|)*x7R4q}lxhSd zerndeSk`zw+X0HJb|nHRQ*pzKWY*qd``siIA@>RJncDXf)Sh@>BSh{vmsVk6sB^A9 z*d(f*uOg4}x~vaP+^*%%JC$xBIcG^1`7u%TsIuwP`U~#9$t$*1KgnCXt7U#osFa9) zt_qRE0kuB37Y0!V>37fYe7%asyph((+-+g)&(+B*MulSciC8Rq$BT8IRZBi>D`KNS zy13zhI%?ksLf>ViwxcR9KdO3RrCki5#OD&a-_$FL?kqUHhjMVPYyA}eo=n4Hi5Y0_?Wi_a9~9hH`qTUgw(^yrTErs+^Us z8`{$#1_%p8$*|ijrJ1!Vpa?}|Y8q1Sh01`QS=)~a3)xeQ5p|v810j(e9|5ETpM_0K z;I^q6I+X zI@L5XV=&7L+hx~9XVCFDgBwW`8^QN}Hn;RKjd?$)Vy7Vl?gYrh(v`*6kZ9&5l&&iR z`T#;W@LdFtQop-6NaRDb6Jw}R>qkWC{gr-qqh^6}L42o4vg+&vW_)jR^~Y^D2ad!5 zIgD1aPhE{)WI}bZuziD^W))~At?72iGz1a>!K=-zST!GBB#@mB&BI(=I>@%HPwO~QG3fzdDA?ezMjr+4D*)xUR6Wi1;u}C0s5Yv8&!m~uo zW?vk!gHVnUbp50x`-rEuVx_B;tv0<7Hz#eTQ?3tWqL(J8@RD z^*%&yL%0Mo+#F2eFebrbNrmPp3zfD9EV$gPR8`VLR5WkG8lVXG?q4PDoC4}0!&~25 zH5t@5(=%0g<4x`{4qppu(DxFX>A@3zjgvZqcc*`o#2qPYt9z(H#jtJv-iwyX zmdq9r{$w}FONT_1dfTn>*U{u*FA^pX?h4-Jr;o6brKm(SG`p~f-;|m-1?~$FHod62 ztRypN(@kOdQ#k{JAb|_U4tvE1at>i{xM;bvLEP)UnYrUi(M*Baig%!ZyAqexg9RQ1 z+1Fpy2@nV4DRni|+KXs#kH*jBD~mT^^3^`FJ)8CcvftgIZJFbOix2QlcP)VO@;t{r z@3^@wYhM0p?eYt#n;uS~F93 zNfYu9?TzHM?g7$|N*nrz1(xuvt&1i$MqgZjpQRBw+iizY{Z5`{1G*XZo~JdEqCZs> ziPI!f>=?tXl{JLu9ukqIaQE0GVCOQfb&5@cbZinwpfskb13#0#Uve#f_^~#6j^fFQ zcRcQmbsZ>IA{O6Ig4oZ&ALEHC+Br$Vs4RgG_}>9j)Wju^_L^9Nk}eQU;$DIKlF>Uw~w`#y{y3ZPe#>U#{n`R3!ewy5KFq;Mn=` zaqO+;8E5EYK8ycq?^~nQ<)+Rcy3=P;G^&VMj@35eO4@^dwx#$QZzO;!tgZ;}A4~DV z%!I_A0q^cg*)@@e1PM7tt!m}{Y|$2;&s9aH6cg*de3>dVv6V@wrBCT`tVKC)3Ctwl zcaAW_kWMEpPHP*y8pqZ}I&V@SKd3`m{imFIFHQ( zjuhLs6T#CR@?p1=s}F?f!(Q~4*MaM^cbztC-bAbh9iVHg;9j(G^C8$^o(HQTOZOX= z@W-^!C8DW4a!zH~X4d#E&Tiva(>)D4Fnw{U2m0P%zGu#?PRkEp89(%8fm1Zl~Su z4`#4ApFgAzt^KhSzVk6B%)s1!xI=kiqMN<3gZ-{x3xZMwrQJWq=o;Y3R@b0;$9X-5 zO&$H+<33nsy*q24wK+#p$ukcFUE(4aaEY)eRG3M##T7XaYm@T=!+WOxIR^})8hv?W z{VlSJgO93Hi`TuJpHxL>cb}t=q}%7U+cJb|`rjUfmB}+K6JN960Tz-+<89&0N05HZ3j)U<1|V%s5?Kj7Pt*x#i*Z_aO$7YvrU??(1YW? zRuf?TK?WsRSh_(+9ghgvZAak~U>p237&yQ`7-f56_vE4Yf{}gcnQnZ%lVhB3=jOn( zd_%tFgQukiLBB*A)!|~vyV}v@gf->P?RS9bKQOFL{Y%X=Xt|G6h+Q%}yF%jm_IJN? z>bDclP@}iMa9izY_F-M{4`zKtJQ((ae6lOv3gn<0HKP+n>HEisYC(@k#}pPG-}q%x z;kCo$sEKO@zCK>n@AcYNcq|5JP`-@5RwBwpA+vace!HuPx2- z4l|SXjrFga+k5dBvg%Boo*;Zw{H0j`z(37xHf=WXY*~&@#SdxHhEjRXN#y;(PwMRT zlcdwm_AG9kG6Q9^Ns;#E(U@I3sJHb{G>HVHXM+&dy{0$XkPq|pGjPktlf;TqyFehv z+f;LVNd2{^X*l?_oe-${sNxZZ@I2C>lUw{EK^uSaC~uW}otEB`qD(^%J}h z?X|$S#?ZD&wphG+Xmk%*VFLYT9w8s}Q`K+iu2*QP6i(q?+Yl^JcE0n*&T|3X&W0OI z^K|ZRhdsGvI4rrPlMR(RTWt(G#KN20b4tU)oYoKzX^qL~3)bz0l-$H$Lt?=t4>E=A z4UvbplDtE;HJ{ukg1ei9NYfX=65UYlcYtl|WWhoKp=GYhgh*tSS1f;Tb(yWp>IeDi z;?)Z{)TLUM43TtgQ5Dgs@8C$+N-4!wf!}isT*>kp1-pv! zs_8spqb{w7bkyo7=g!S$&jaB{?Z!URpEtdB2UeniR&(^g-w@E;vOS zH=1K_JbZTD_r^2g6i0v0y2O;%I9wzv1bAtG9alv}9xVD>XcpVihT_Fh?k5 z=E~cw@opu;26E+piT;{}eBO;`F7-fNdTjN%Q##L%CRPd@yz+XU`wkHHQU_tbz%QQD zSne!TC=57xLQ9kIO?-Dm?S48)by>5^Eq7p%?JLVvJ~XZNtkHGUHF+HUo5x~V2?D`7 z1_?s-h9W9F?45eD1*p{YRu*rjX@9xVl!fsB^(9fO^p+io-KCKo4> z9~s7cyV+do=;~k3&fW}`_XUi07MBk_?!zGD4>IuoboJc9)+#=o`kSUHX`DM#6P9s{ z1~AHH-Gj$H2~DSirVT-8*SE4ec}l%TiT^}MbB5LWPXrHt(tQ}mbz&)7=N-`d zf+;1jHTo8oeX?zyASYL{pCGU@A}%K2o5o8)YYoCt+bodOz53R)6f9>iC$d?dB8iJq@rF{o$5 z#yBR^Tuww6zdaqFG3RCO@p!bS%Hjq$#CQK;hD;KrpAA5Vxu|U42;#%PKR?C{nr~T+ z`tGJJjnUu?H^2{Rpd`oH2k;AG8%cTUjW;&Ll?FP=%__uB68goEyt_wcP(5hw2r{!V zZdJ>gRZvddN|IVu$DIA}c=`D*7fS?6kjrC_zado4pMC6370{}Vib8&b@wnKsr@-EK ze_dfqqAw64gD&>{oEfa2z0GRK0`~SBQdgyPcS|K}p+6YC8?722B(`z8KK8O|i1*|e zZ8)?t!gFY7-&%=`lyYf@qDp#PZ>@siTbp_%|F^eVGjK zPEc#tEK9j)KC6xGyG#pE!wKX1Rm)>~Jw4ufkD5`GD=JOM@JHinN8BGjE*Uenm}iju zFi3*gF|T<+;wkrZx<~j?2Odv8S7KtAF|05Q$QLcRe$cQhbv%I7MJmkbCh)OK`v0*X z2FBs{l=7-@>$^2ih+x^gg%&hMmorPXOby#u<kiS_DGKzI*VTq>NneGLNN(@y z=Tri;YZIS&Ol^Xs#=biz-yoJ77|1zvX^)x>FWVbEUf*)p3=9xhjS0~jp8hgyB-0NC)t?`2Ce$&|2PnbKz^~MpK-N4_#Ew$wk$}pX{ z>97zuNYPeCJATg#cs^uKcKS?Fv*obqIr#nI%T5M+gaICRHHLu|&hZi#7fDo;Z8uf) znQ9QsKkJu(@3|U1Gn<(+@#Uvs#^k%9lQ&Q7QH%zYR58^aL)d5+3ilT)G%T#*mBHJa zx347OLmSD%rnjKna|!Qz2+CznUpLm-Mo!`qE~lW|J8YT{c8XB&&bCesjY?DlBmF{zEyxeymnX~auI zq+jk6?ue+0Lsw3SjpZ9fj)I1#adSKF(BIif;+lPIl)bVe>iG{*jt=*PTdQyZB1}Xk zY7NRNFcSFR{tJXr`b7IJ>Ni9y(&Rk{<6E9m=K}rJ8W~n)`KVU6vZiy#UZQfGzxB+c zXyd@FW+wF>KwtvOFeuDx2Ho@528RyXZyruW}u^mgnFGw_DlFAY(( z9r%q)dM$L~x10kK@b6ve3smB#(J<=B%9c{mB3+>#ui4R9hW&j zwsf^TRE@96t>C!L=cBWtq>AQ{q=PQth+a5;2KBJAi^XzHuOLn|gY2hKYP-Q7G2aInbo$v3;DN0uxfJ-$|jFt!6?M&@;G!0n^Uq=1bo;{(qK04Wl;U{QwU_QoqnHorhki zSKs^}k=XoQ>!Ma$UZE&Yg(XOW@Xrh37XHT-SR{LS4cA`+-}an`Z!6J<%VpWvvQaK8 zX)Mht)?|Zcu*5OMx%n3YKfGRN-aO-#yaQ%Ry4qV3_8=cMy`@lU0mh34_V9aQ3l{+GUA;5$G^OwRmAvwQ>%AD8sefsJJT z$u{GgtD6#9ly-!t?E=i4bwcrJTw@Gfggd%-TFSw`jV6tsoCXWTE??uyZ!Rl?1!=j8 z5vJH7rDix}`ApV0{B4$GZyh~%(OQ?JNFz>fwM*2v{(yR$sX)~za)>Jut^L3@wmJXt3Y2lzHH8;oZ=9%Bp zx*L;vd3!B`^;N62=YktFE^b7Kt?(_MWtd0Lq@am=Z?${Hyu{S&qebQxp#ocsq?ln& z@$umPQ+>YITK~e~_K}W;)?Yr|Lc9ZHx&r*8w`U?JN@rw}Pf!i_I!$_(I(|%S-#?=A zYR&Svs%=oyW*esUK6i9X*idRaYzULSw_(fw7)8 z{s5xeLAP}BV7~A)?oI-sc5Bahj(%&p_4Z%qx=a!sAbIn}a-!vE)dQXoB-U|Ww6iRQ8D z-)^i9uAOor^~HnOH%n65t`uV{yDuYxWfUZZhFDaAUf7w=p%=YXi>SIrYa1F^DEDfCdPSV_i<}SsIXJ@x*RdCkhWtz8;_N1O_Srx(D563gNrcaTdGi5}=|r&l z^yx9119-N*dx1Shw_v)=BjG3SywULun3sV3@=s^Y`I~jaA77Rjpjci3cn?i1r$jgh z&^2p^cOz2hE>tas?^%rjZ)OGH{x;eD4DYC=+t#!UP$17=)jkY+SQ%!rLkl;q~m{DuO==?y$Et6nO0?i595QC&+&XB>sl z0L^>P1b-795BPd5ib$#G#%SB#`m#-HXhdh#l}38(83m0GouS{2L6^E93)~)S1d->f zO9X_b4zy8Mpqa>PdlDa%8DU+sG1ecHx?Uf~S!}@_1wPOm*D6ov{zAxo7EUS3#c!y8 zhzrBnElE2N?c`eNQ%s&7y=q*)bE{)xUR+ik8_aWYw<2>AG$(9lfi2xuc1Q_AGIH%m z*70NO>cjO%N5*?|nA&M1xN4pYeXa+*3J-7fw4?BoCzm~k6vOKUNN+znOV{v$<3{>5 zR`^E)Q{?5lL~Aegj>yY4F1FuRZnvR|9r#m2w>O7Xne*;Z%TP8s1vh>r{0DtzZ*RGb z2;=tof3+eJ#sp&nvy|W&n_%gB=Fuh3sP?hr>VqVsT~aby5gG{xg(>DA5V~>X9hvyJ z5|jXJTCuYAnzw%D&eRsk5NJR#h=;X4m;SWhJ?%9m)ccPYO&gwH6@EE+u;(~?mtIGH zxQ69*&gR@aMbnjI_Au>A+rQElowT&Wq)Q}(M}!YSNX31_{ z7vw%|7#YuOXn{n(ZWZTr^te?4hlm3@Edr9#Me?|(FNcbe?CAkb4uXc>ix$*8jnr0k zCoo@~HxMINKfY;8&8C{S0vSL$eSndEIMKeMu6Di@gu9<&uzBnf$~~}+J_6SGv=`@} zalVZ3PYFD)h&ZlqM2b=C4i}5@8CCJ_F2w$P2O!_Wl|s}j|L{d$%puq4R!wBZ3*|Gx?E7!1tOf zUW=CJ#7_nsm$eMYwbgKNd0=~01%ZyZhAQf>K=N?m(fNhWCk@m1MVA&5V&)t`bOG?w8e&(;c4 z#pYsiDTp8}++xA_h+OIy?f|hzL6NqVKH3PsQc&z^W-E|LlJYi&X+ys~Ck{F48(-cJ z5_DlgNdtGJ^uHV;j0&ee8Q(2r_xC>) zh3r(4zpb6h&+WIRt`DO`>RRfk#*NQgA~88m({-7u$zW|Ui41SN_??S+7z#Z3T4iWR2BGT6>WKYk<-%7{79&5!jKH2L zmcBXWE}z`8Z5&=B{)&!&u_gwnMNmX?;8^PTqd>>ZT=)@ZQxAcVDgM`EC+9yaJJZPv zJ(Qs+zSweYso2eyg|;uR)WKLp%0UsJoSk-8Eerh^;=>H(Qm9?v=Ay0KQN~Xum-7sR z&-qkK?dBN$tgcr%5}m_9U#B{evN42OrN(a3vK} z_(MgNj3drbPqH%qua{^AG%U{6Cg;Yn!MNlF`nY6PNEc=9rNc;T68|L^JDY1gl<206 zrq5UPTSpt-w8z}!Lj84){zCjPn&g&Q-f3`F{J><+!jC55&jm%X@n0NCp{4-S)cBwX(&f9@vI2CBFf;4_EU}|_Z^?&Y2I3nT2zYyB_3*NE1 z^(~$8v9Wep&g^IuvOzicVFmfh^r#^Ibn%_ywwDdyfpR$tThf8nHxP?BuF_t%Wng}l zN8~$T@Z&V=-EW?WI<{#BstWJVG;A|F08W3wV2N~J+$*7R=HrI(lHRL>T6N8%k`bC& zdyDv?d7^!-h21n`RHR~>$Zm7m28U5cCL&{iZNkYO+O%u5N$X1p=6ws+?A)HJ5q>h? zQ)ZbKO}yCK4?CfZI7H`vt5UlIE;Npl&rvFDrxcHkV|1@J(?d^(+!NMGe0h;8f0(Yx z#}lEo~=S+pzF*>L&)RUu3iKK0=4Wwtv$X3AvQF z`S3x{^n?_y42gt7`;NdDw#F~z!3jfGe@V4J6J9j@^Yr3Lw_&`*)CqAL&x9aEaKo(Y zTRctuzV0jt(XB{Gwt0hp2gpv?3Z5@!b2rK8DP3xn<2=+(ntk4})l)x6o-`aK z8HKHq%0JPdekI<59iKf&7R9RKBhJ`B`914eX(mbVWZO>)m|b5DP};$;(DmV6&hi@=_l)AEK#p!HGbtd@eb!bXOA#T=MrP=Co5;|pA)TevMX{M*h-p!e1;GkoY#w)C$I z78j>a(>HGRaqu+Rdo7{{_%btH59-skgZc1uZJ!4OCI6Lg!!oZ{Vw+u;MWN6~jk~94 zhrp}^oeHtN_D?p6w-p&VSbrUIKMh;r2RIRqJiZX#RuBn)c6I%geh!--#}DwvWSl+4 zlLR!k{!l_UVp|1{Wd&@!O*cuRSv$fzW^3mLB$K+6Sa&>dTuwdz;ft|_BwYDs{QMyq zs}wKAvTBzKEd6je?pbBfpmFE4saOp7_ygu^H(+mo@PuDH=(NKougGE+Nm;CGq~7 zier1k^mgz?m(o&t&ydm?d_j84Pr475z03*5sBAwar--+m<7Q=vXJQ&8JSF|783};r z)xxn>i@ykp7A#u1GA_4&+VQl~EH=_N%)7*Z((KHT&X(XnuJ{=B^8VOZrPcbEAH&#g z$C-nRj}0zkJ@h5FuD|0p>%@W%8ppxABKc$<@UcmJ!NMOsp>%)dwU;YDDqbeV0_A44 z)k2TZxC0eYKz-dQ&IYRggRQd)i?WLv_8_mKq#&Itse~ZXF`yzPCC$(&4Ba^h2uRHk z(nvQ9-6`GO-CaWu%rO4*eMjHHfAAbX*Av&?d#!b^dwH_|wKNYoQ>}su&plb}`5}De z#nx|L%^0~ir1+;R2SL;Sy64Rb zlo(Lrv!i)d8-`zG^McR;Vb8Jxv_2tk`sFPBqXbAmH_V-W!c0r)Dp^u}l(WWJL(NV14 zm%da93VAePLCR$%O(_TJH)VzgnyLSaW5*5bGh+bDbUO=65dCaBWw>A+E;``F%YA3r zz@WGl8fs~&E3V?>?NgQ>RgZZ4*x8$;^ZTv|$AsR_eR6rOH8m<0oR`>nBT6V%Uduoy zFT->(6C;H_8c2Be!pJ}mm3YS(*lAL@zf(ShA$VUV$?mCeLeLue>vRf*(a!+}I2>rs zZH5NE(pStyLRpvzX%}VDf7vg|4SW@lZrQQ*882$&=-r-iSyAAl&5%YcQO}WidC&L; zg%bOA-}DNkw~as^#bwv1`@`2tw0dM=+{4h2Y3q`&m1a?H~LnrDN}1yqwx^4xxI%=av`hg zmwpAZjq~!yj(nh=Q66-{l_lAY!^y(|q=^5U!!IT>U&@|q7(QFGdFBhZtdV5C<)jQe zm?=05QGUX(VMJ=k9cM%!AIGNBKuXX|Nk} z+@R|xg+~w$#BD?th$K86-#}0X)l{Q^|7Aspt7MR=8xp@FOL;b!J6Be~g{XvF#~JED z@TRpy^YTlWPT95lQH=m>99o@}Txj*6EknTfIxZnurC zHw-1{YQ`L_4HeBE4mnxb?bTKti9(#1L51%*ZdEq>>PYgzLl9P9nn_8v{da|)_BxWw z#UEiCrX(Ee7#;i2)z;0&)pK?sS$WIZ@-N3y8S&ez;m(VF!6UO-H>q!c6)jQ)tU0>` zZKAwq=sx(@qKgu^!^8J~fUz^S_trOb6(iU zslpx8~_1bYfR)mEIfOR&yLSbHs^ra|GE zI?kxz#vn^WUetW#hXvx2n`_~AKK?P6?UA$KRx_2!Yn_%TJvJ{!Yv>r?WlZ~wv!_I* zK4o6PaDAMfey5O5_hhOYyFIlVwZ;Vah^8}bg zn%@qvr@tIHq3Z_sTv%OV(F;yfTk1VVd92g-z3jtH^C2DaCg00%1(r8#7csaBqd)?f z@o-$H52`wS+xBk#tInrS>0@HkP})W=w9C4>gQhB#I=vv<&+(eT_t2n9^fQXI58c&M zrs2D9UbfEgeASne|4fv~!$1FnukTSo{hR=UV&^@YvV_d~*5e!y^W$gqp0(ivU#~a* zir$xZpGZJ6b)IgdY0t)+1IDyWmA&taVa5_~77Y_746W<(aAJjXp1Q{q_U&@X7B2gf zwZ#*<^VvYyp!1eWf-8}eRe?f1RNOUbW-bg3*Yw&lw9B=ni`X_0gK36Y^4`xjpgl8a zfU~UaiGzY1&7kL!S{M({>sl5TnT?On#C!(t4(4zVouHhfJf~kL_=MG)@!Nu^aS;HB zTkWR7cLM{Z|45UzHlG`v-F^3uh&;6%VodHIahWm|p^>~a`@UKF>8hEktx0FXBfSCs z@KNrna4XiJTKFzA0;$_9Cwq%$vR1B8nb*M-dMv&a%;+MsTUD>m)KqYEaGZFiQ25)btK`R?w< zljSJy5n<2z6FBj41qp(rWF-P&EEtdQGP1_3b<3L5|%Rh2sds~ zVmbI$LRR7}G|S)5lhLS(I>-HD3rg{tx&mh@WAl~M^!aRR(dUnWlfSs9ermD%_BET; z{{s}4C<)ATTNn&G$p_WbsjlNR2<_Lg~i=x20cUQW4jemoHP z)A==B{kK_Anz{GYEgs(MWTA!B=iP>OIiV1oy{U?PzbeJoT4a?X)LfZXmnTToC$KO9 zEU5n+tew&Z-;;N7;^eyw8#DZwA>E62pfkyDKjd3b72Nw)v1Gs@|FXb%@&xw>o^)h} zKV-M0?8bh(e)qfmx`?i>qX!?F_pzXbR7p*&PuyhPtBI|8X|{q_^N`fGAE?yMBN%%r)}Zgo&UA| zF^!kHGb3EbovSzWHf?>;!?eWsc&_x+ZUapBM?gy;Nuf%{xmbDfucN2;1su}(5xZ-?671T@um7Smn}D~ zM6W#aBK}}bh*LnLoOs+6Fe3?BE?rxVxNeDAv*sIRwPxX6|C1yFIJu_2EkoV-jI$c( z&0A|BT3csY0(a@cE;--4Qc$GyW|Xs_hdLQXuHo3V0J9I>6WzbrJU19EA)J@HDXxQj z!?6wMz?%wJR^S80NPk37s_Tj?WBLIAk5s+k4Ki-qxeO zRlLRtOPyoJ!NuqF%uAgXP6K^vKa`)bc+ZiREgei4=&h_836#1=vjF!8YEN196Jn~A zpRv~)3&WoZ|3(bYrQJoBt(r@k_~lHe2b~Mp%qdP~H9QZ4ED0MW9WMs0H43APS9UPL zMRK~3g&R!~zwW02efs8?dU}#Y7G4ZjlxnR%DQC;wE#0-O-OYAbIF8Z*z<^A`8AUO6 zPFnbI<6Y_iH*H2f#0+T~)1R=Bmo9Ii4^XDyKM6YcYT#yQ+@_i=-=Sqq3~4Y?@1c*? z8)B_32%fI^?~MFasm5Z%Xt)@5Vm3BYNMf`?D}En+ZHZE_QZWptuVgZOIr? zJ|V3gLJgC*B5%`sT95LW^T@7FWuVcwzlF^qWPI~V?MQ;B!Ik(T#BF7Ei|{^j7< ztr7OaO1PUU(#i<&P^_;=)EYdT#L=eEUFl7x>kJx)uuqoGBU5(8bao?TF3ZiuGD8G4 zqGT7xE&y*%mZz~#Y)D&4#o_ z&3!zxjWW4h?(ls*v^)snOj!te4|LrjAPGp#kE?e-@4uhVK|hSJI_Ulv8>!cM{B+#M{Y!V(B% zqj?mpY1!ZZN>++~ZVZdeLpX%O#C-}6<+;>K&C-+6N^Z17S(AkKQ9W0)7!6b5mV+hd zqAgE?K;1UuM#hJdAk1=G+xd&!VMaQ+9GG3)Q}o z4sRD9O)2k0yh|dthh#W^!1<#5?0%|TQscBghuGbX@$tBMv&D2lEEP=bWz^P7*U=s> zc>rO8*|_<&z_O=yXFZVO+M;#FBG{KGpEu@teouRhvUsobBn9v-yA}}fHmZeFD593Y zh+w|^rq1~-eDX`zFv!`t!v6ST%OyR_dv1b>*q6Ye%n)RqP#Ctc!tRh{H~m)WCAFq1 z@Fy|3JB@v=cF;R(k^Nd9#`4CeXW60|A(&@&YMC<*cD@n9WA{XHW(T`K)3wZfi3bOB zQPcdhRed?fU#&VQAD^jN;hGZF&t{NEEZ>2w6njjRk{q&#K4sXzFB=Tsj03eK%Rhj+VXLTP#}s<)8p$Z0CyrGX$km>kZL!55GL)c-$A`2hYXcU!i_sRzt$&>=>SrZAd&d{%H!&MjDOD3CDgm%{-Mb%jzfj>4^M~rV;#mcUQ zjAB>(_kO>8m|+0w6>PnWoNc3+q3Z+^UFDv8M9!b2*!}}#>oT5v2r6P)p`RNy<)d&K zTk)+hP=Q3f_2lLrQN!R#J8i5mb?DJdw`dkGe5VyB$ly+sAq!Z_Xw|31OvHJHTUH=t z*Foi^CwKmJwG@K0il@1e_3J>|f!Q|teOifbMt0=PrrSAB9cVa6E< zLyL3Hn=4q?xq-D2$yEs_osZ*d#iB=*SgYDP&e+#!6U5=ST51=`v-^L5cS%~Mi@Wf5 zi7H57*r`xEN!uIb;+TI#i^oIg_aW4f9|dGMXl{?)gGul51hl?(jM@Oh#CkB?Fzpul z`kVaHTb2iH;qqVN;Pa`z_UC2hiMr>k*MpV7X8Ca0e*oX0@bz4)_{i95vC08UmbkN& zo2n*73WLNF)kmKzh~7E-`(NMx=j1=!UVb$Epc15kyhe;@*wpDc zbQ`=99Rs5x{q6v`s@!Fxy%Rf7D!6d~{Oy>^E`zQ5fV zgQrA}Vw9Sj*!RCH4&KCf#7@B`4>Eqh4W`9U8|)`kgx(HerFK^j=6_1|U~g4d3%APG z!6Wd{lE+?s*G34*ZTF8FyH{&NvbS!ig@eVpP6_Q!p%}0s-gL^}FT^MfyV(oe!&caV zZb}R`9e?m@%GbaSTd^pJGFH1$(wjbBMkDBuA+jqX6xBJ_5O$;yb*fBzTu(a9;Y(-Q zO^O={dLOs@+1<*Gb|PQP@s7_r?_@_yZW)*uWZi7`qI6|0${Vk*{HHDjos?YU_uD29 z4xt1xvn>{gL=6Le^#qRE$LcrW9W4}Peo&f_LDb2#8x6%7kOag2-Jgn!y}EDyx>@S+ zZX(~qG10@u!?r|{Be?gf)e_ZtD$cMq4^kiBkyNTH?%E56;nUxUBf2IVVPR_oZfnnK zLw||CDI9pxo`=5C`)$rt`|t)u12|`{hQH)xMf9(0MMuV2kAs(ZV$ZH5 zV5;DWcp<7W5~M%-J^x7L)pmwT*Dz9c>$Xz@Br`1_pIh&L;%Tn?s=3~QOP(y9{iEn} z@(}4;73M(Bp;{t|Hdf?o|L1z0m7e(`q}Rf)ac>Vp37j+iNmb=fqLm;)hl>Uo-K~$W zlyp9b{{A{ZSe7#q;`Sc}GwSb)K3VmB8DHxy6`Vu=r@nSh#awpu9B}HuWpnCYURAR+ zb78dfk(zRKLWEoWVeBDwV;sy=i$U2Z>SeL#ySM1M#Ohi|sMw+0s|UiuJv z6xtr2ifck9hnHRw>d99IOHX5U4JAH0v++65C6y?XsOQr5p}C~jmj3{LFqZ4y$EqPV zlsDBzbY2999+9Y(dfP}pDVk+J{vUj+<Rno;Q8M z^`h~0ah6;sNr6}&!OS{SODeFlaUYnWt}A%sVslG4N+@`KF;6ou_HOnE>vZhpw{(g2 zwh*g_#ZMTxO1_w}8Qi*yP|q-)rTkqCe%%7QI%+BLA0XZ7p5xU2zB9J>RDzf;WE7d- zDNl(**c##o`E%Htv61XHG;gnI2x9vOfLX+N_Ng~dF_jypO+6|Fd%*=VV;?6_PuG?u zQ$3A%*t@?q8-UYA>0XKXG{6^l1bp(AynMAEJ#GF(bt`@P<=MexesdcL+rT?3_m?P{ z?aP1s(BRa3s)~Ki&{2*?b<$^6%}r~EgSTuzB-o2R>^21M(vXirp8rq(@GU2(TjRux&R@=9HJZya$<&}iO;~><)Pug6MC<0}K#G(*g(WFL za};99{#4>qS;`K_0S6l1;CA*|(kvNt+o_ zI<w81{Sj%%|4Vi+WPrRyKgj8uT*{bB@hir5LbHE8SPu+F@W3X8GOW`QOjjiYwkpy#qt4tBMiz>3Pi zUdO5r^0dOSlBodG_?qwxBwkW8D8+uH527M873UGYpqLdl1^;i^pet; zgYrTM#mYQ5MPjLssC3o?_r&o7u*K7)fAAG!s0dyqy}E~8GfCE8v<<>ww3ayjzd0^C z71;(WROQdXpxQCRWSk~v8Q;6jRDw5bjdm>Xo$yj0--^+JfWR!lxFJRrmvB^h4}{6+ z7vx2%O8q2rqhRSoWy`ma1Ch7u#G(j)e8d?((%y%`)GEB|n8<>B6i!ykSER}E<;i=O z{*`7Ck?i;5wAGS|4dI(dd(a84tkFluivYB|KrJ|P)Ri;Ytift1yPu+>*;(!m#_+`n zI#a!A$E4}-T;Jf3bYVf>5o4{pqElYASFapY`$;gUz$U>(%xJl>5;oERrS6w%*r}55 zU43XiANk(WFEVjM$Ar9V4paNhP>CzHCqW`Z;ojFX+XNE2@%132+i`K?jiQ5{W@2hR zR8qUZ_FP*v4eesLXBP{1edR+x{HnjrA69WC1<6ji{)A;nY^w0jTU@v(dEvySznU?3 zxKdQ~`CbjX60O)?1>Cz{40$b;=V>YI2cZMxNw`1>>!{u)m6;)r$ zpTc?A=FMAMMEVlg-t$Q|07ypb(7?Q98Iq-57`_ah>Ep)7k>#h)dMDOkHX~DRV7TH5 zU{xX{_0e5i(l6CQ;a&isavu+_HY=`3Tv^E+u=qhLg7G$WNP5B%psMoC(b<}C-_1bp z^gQCw@Rg$Rnm6@=_LZ8hQt9^+ds1w@(3%{vV4;!^CZ=Igb+RMGMd}$eG9q#Bwc@Pb zqay^iOAR~#nFWlY;{O0!*p%3ozAm#gI422PCw|fB49Wcmh~jcNj1#@1#xNzsiR`kCOVqen`tYy}P!##PzHQ@F=UwzZfcjBY-M z1p#l;v+VPXUe>2dl7eCu-uvStArg{G;BP|OU*t~m{;0{!^wa$Sx_XEc*J6totwmgM zo<3dC)WNN#4xWP`+-)Ns0cPy0Af>qY2l(mB4|a09i5Ol1E%mYdlu0!HYeJFwBgcsz zS6@fK#@@lp#%v!~GgnWH6gpu!KC@l&T9CicpvU4d{aCd`~i3ja7_zc**JAM6S!lD0r;FmHVnN zF4sdhBO+gBk4z-wak$pBuVT4EKMx7fD;Ly)Ul3`nAL%m&FjiCYA5v?n1Hw>S6+yH^ z*pjrXOS0-P7O>Ab1|dXRV;j%6x??-GyK{~cNGqtJ0@N%dnFM$Db44pFlxEe{UQXpD z9>7rK?7XON(QNwhR?l?vjne|Pr1*JjVgOd)T7JlyE~dFe{`CFDpr_8b2TL@N7BTi1 zX{K}j1n#lv@ItP@Xj(S;-7OdQed$xbQ1#{Qxlg6~*pEGYzSU1PIxY?riZLhft*7!0 zV`Xm8U-vmJd$Cy`ZttsIG=ezlqH?eeZ?kMImA&}IES}WmZVG&5s3llF%R0E$P=6^_ zQQ@lHeBRzcy((~CS9uOnZ9&L(9VJYl1#G^0_l1+6a6@T1NL;2V{{fgs#J$d|JN>IY zf|t5hp9KoFtA&;4-X*oWvzPD*jG=9iXL-Ith;XD)C)0icDf{nO+1p)-(^x;%-OO|;r@!uLCR1OEWp{@d=1?~(B($jN&H6|L6B zl->2}7?zB`q9jEUP1=txDI?h%%}!N()mWznnq6Kr;LKH=sGgP=|72Dcuhfza5E;zb zjccY~Y0OhckpRnW89{&=m^VS%5;v7OAj z1S{cyDWGkkpUB!~jSbw>ytT8@G{~Jzrl2;qs%h8MIvt9@Wsn#X&-cr5XtzrsQ186b z%h!heE!c2vXCXbFP(8Bs_VOP<^5`6BXlsA9_G{6$$sYbF@BU5HtlA~+!_)(jGb7D( zSsUZg8Y0*;vvxJWkC`XcUx?mB|ug(b(a&b)<)GhidR*|k`MAqG3U?icP*{9H6o3$xX?pp8$$=&x-6k- zrf#OGPU|sz_pk6)aeB`D97Wbr-}#G9@AeOa72 zTO=x|Ck1@?y#1FQ#YTJml0(TSsFPWLR;s*uJMj-~qqRQIsD110X_< zqQ{7wWsL9mlXzzp==5bBsIIJj zF_)(vpf|&SNU>+*AA6A~+AFhCbzyTjTe3wyt#S-Q_DPg*@*u25uJe33y(^O*iy_%l z4>Y`8_nSUC3pzTqj$2bK)K_G#Pr}lPx%>Pl`@l>%o!s#ICD4-IL-n`lvVIy55>*|4 zkG83~qOI_%r&|+C!{M9gez;?sEnk_?(5R4qRU=+TKVz-)#m4KOi(zpCkx!CyP+^$< zYX|jH89itZaMGTKXVDnmw7W@988e0mIk*DQlPF9g?zs}dH#*#QcCWh>nfrEs+gi~; z2yTz@)K7o(Oo$6Pl`COw_Fj}vg=9&o>F`*WCLpa~qi^RmFP4U~4lbxa3@9&@RigUr zdGWH-%y6-aWDN)hGOO6oKr$nHO+T0TFMnz1d(wlGvwPzCL`J@bBs%a_{cI9eb+V;; zbVw|vo-*f!V%Cq(pR*MmH6ZwbWx-& z(-0`oJZ*mA+tI{f?mLLK;(i$S=ReSWVMvwePUU&B&r+3AKi*#0Ws96}k zV7ZU_nPD9o{VLQsS_kLPg8l>N*hX9W-REd}xvYn#XIq}Jh0J7p0PC+UCanV9v(C?nBX)ft~6{gfP#RDFq} z6vZ<63`)5vGWFq_se`!8go5SbQ8_eaF1;ywUF9k^y^2FU7X#re-1WXTt3h+XC|AQ5 zh~-6)b*#Jx*!D_fO0_ZNpaYG1(wp|<+w+pIaWc(8x*F9$jISF0*c_7RoSdD_>CKRO${yv? zEa5&Ums3yPNN*P2`=4cbpgqh*JMkH0(-OW$m4qiwbagM0VJ z(nXP08!P-eE$uBc*96UAqw98)D7Cb8GkQv6dHNrG8A;)r0(LfYU2&kEjS)sVPoCG7 zDVzJ%a;U02`o@zrTpG4!31`erpZ>Ifmlbrp^SE+JFKaPk)Ki3oQGU$O4;(WKjd0np znyFb5xO|zx20B>CP3munYJGx#zeQ7)^Mbt3r>q4`H1$>f4t`RlsZAgI1;7-{17`@R zg_44affr5S#z z72M`oLLMA>feMWlCJZ}~?%%$=j+g&#&w7+`8qFUbRpVvldikGfbO#~q@0ha0!H}jS zzkONRwrZzRxXNu$xnpvxSovelMx#d`_~4^(X5H>CS3A#D5SBl* zl+=MCpTc2C`I>il2S;A{-x2zUQK$yCMkC&r`(qX95>I5y^W^9^_dWCi^W$?4Zbfso zPTEcnS=mI`4x;vcl#E*~Pv08SHP$Xr%siBG^|6i4I`CDWMP6Q!FP)Kj!g{ohZ`Jkb zWd2^Pv^3yll5zktvM~aQ4p~M9mLF1&5kjl@?vEt;cLNpSY!UfygoNxqlnRFfJh6-U z*aZc>XpM*S2gjuk2`j!WNzpK0;}pO2_{;+rQ!hr0#gT(0Uq)%DFogrk^h`DGcv0r3 z;P-ZSP91dbEze%$gNszi0K*WdrV=D=Vh%^Y*~uFF+Uz@m)DRS6={J!dY)-@Z@2k0g zfjV**?%&DJzrqX_{S~%N|LNIffrBkExzFrr#)d~6A9p6UnCN?HFl<6Bmhcad0J{R< zKiU-+m1yyAO8}*YjA9!IezK&Gv5TXKA@NuK$3YwO?;sqD(vMTb^&G(^VNW*2*9!oQ z8Lt*a#AB5_qnZ!ucw3k4b|ai$)`nC2)>uoZu%_Z>lyM#b=ZzHVpljXUU7s66SU>Ju z{H^5r8_5g_46a1NzyWnORZS~@bo7qd1o@$uYzV;&dO2ul_@ z^^RBhJD2gv@}}O9aH6Fmn#=h}dvK3%9(RbkPn@V_>kMLK;>(FR2t6JFjyW=m~!=mt;B94M)4q?W3|3a=Po^oRN5-WQ^{ov!*kAiZ1U7QRentnipzOV zKbzv85OSZydpM65T1ES4g5Ez;TnQL<9cFLtZa(mow=VA~*{sshJdqx`7y zx0PUWH4Ul%W0nGZ3zC-sh$h4+aRaa)^=}5uJEH?gX01I-CeK}Vd2?hh6+_@kzxC3Y zr08|Kx~tK19b~oql(^N#P;kQR0Y&b`s1%DwpQC?ac@OVOk6#pu1Tz8KP@yJy2Ck<; zoK_7HGE*z+p7%=pj}`dQ{ajd*3He+t6m~y{M#B_|4Ek2Ew@q}okUTuUB9p3P6q%G# zY{tbTlSL**`t4u?l$njSda5o?6(%H!3^E|6Z}(|9T?kCPvx{a6RVur#>Ul_L}H za=gP7C=CSv0SNv9*i0ea{^VQ8ctq1}XJX=`&3}Ndvm3b;=+|gsW`At=_)WPkNO1bf z=i#-*lhf{mAP)@c9_epgefCEq=#Mc+LM)>aIsYZAoKZCDu? zGlLymp@q1w;>_}Er}MHxjIruBAE2p9o#z!hw6|#g-Ubxl@0ykLXdG0zp^ZA*=NosE zoH6x+mN;WQ6wPZHHOcD1c_E*$zqysnY^Ipuff-=!1 zbb7Od;V|Wa~~NCh~!*;=v~_C9mM%#O1Z3 zd%*x|h%BHH(-s*0Tn{v8k|5XdEb>ECAKqH6B4fI5TH#`7;Bf=`v7OP{--@`mulUxx z97wwrR^cnyU{ttRP2R)Di8QI@N3<53s-%&=t0o3=g;TJx|L$sGky~`gZ=~B-$uTqg z&3=a;q^*@x@KOacnEK)wN%GLCn8B!*kx9k{XIWzd|9b-ICK>6F$cL^qM$A9JADI#z zX|BJ^rl**VPhD2uJ$NC9D#B-n-mY+cZE5`-mbz)T9Su2MyX=iu!B3&$=_0q+5`IUf z+*B%v7E{GK#Xs6L+?e8}mA`k%tqtTUec^N}p96M{M0pk&%w#@^i1HmRAsc!^!hlbU{7~azuMSN8g>fx7yV)E zx;-;rGmy^5To}$jk>&^qD$0FdKf;5{5?ZcKw8V?^=V0~WF;dT1?9A8>6vC#82Lf^KJp?{pY$_Hl%ClHA zw1*YD*Xkgq1}=r<5)*+&D!p0F>h#^zMC}j!BK_zC9K+w=zKuVckYNR|lGAeFpij!W zHdf(QcEz?c+w4aib2s~rw zYNY$I@+TLHGh#h1JNpj+5Vvpx7waBSrO-!!Y3`(8);~kI8*rnw&v?AA%CjX|J+%I-WpO`|cf7Wy2Rv2n#tn29 z?(qW^*u?1_RPEpAqatKrdbJl@pjB%`` zL@eJrGw)8)b$ocKCASLli11_rS_D{6W-?P1gd}aNhO=4LDw8t%H-cOa`g{EN&wVL7#0&#;-T+1)?py5J##gqGej&$Fp9{&5Xtktkh@n z^oZr)&Y*N6*IsS;WO*CU+h6Yzzs{DOp6bc__ATF%#1o<^0p*6R{8JRehMotYF_4d0 zXor^NQqBFk8ybxLp&QaS)m=CTcrF_nfj;8Xu+>)|35AVvwzkTu8dT*HX9+LB@#*#t3G8UE*_Mn}Zf)LDAHl3bo!&|U zE85@4{#cK@7a2{=>cI?mEVCMdv;|>2vxBpAsk1DF&_#(D+=IWnEgiavKjfJ74$*w) zFVx0Q^tzXaxpMD7L(bH=a}E7B?BsXRrQQ_vKd@kFC%7pu_r3jNSCs9@E6JbSMyVQ; zH3MX%;8!f96g4a*?d!?F1eJy|o8BF?_A3Jly;%x6L-}PI5cCIehV-4*X@*($cl;4% zrQ+2WFgDy;om(>DJ;u(!&rp<3gRbNdAuVe$VsrM@uGK?MtcQO~_ru#}-Cf?i$lDj| zau$hPUUy%-qSFyHtDVcImTtEI~VoXm{p7;9^@r!s|yZz54h&)vuX*h@5r9c zlbMSH6woCBv0m)ZX?;=sa0woXk8;N^bqm60+~ez1+suDnkQ2tmE#FYwcyu;vBCSwd z$O6sphKusX4Hf}%WPTI)7S$aX%?l{(W!>~^YusMu$o{&@iZFoYsH5oR@@`uR^29xz z^5J*Q2=_|0w;gu|DSDFUzgR%~mcC~g`01_XbezJsV_%;vy(q zS?8WeMfw={);IWzGG9Z`s08P78{>jZcBey56q&?3Ie^^Oo`)PulJFRI<)(obD-ZUl ztsb9=GZFPgwDE8c{+a!167nMLID-3){%!wfrYOIW^;DUVCC7mQcJ{KzzIF)8=@rkL zUINb>kj^5%)lB%8aKH1NcFF6TvS^u*h!3F{-B0NfPAS`Yb_xAQ-HOTY_+NbcW5Cw@ z8*^})zELIG1GtlYxXQ!`Y#R#Bnj<{A#7cTarpqG~(@#E(T);-!6|Rk5bdDoU>}D#) z$gvL|QNiW^65J^%ViPm8$xZT=#V=vNe7cNk;exB{H4O z4y-X#POEgG;#6Ty4=t6uVVR4mb=#Sih!Sh<;w>4GRI5>w@$QTL-`3RsX;1yX*Xi`4 z;WWUq_5*yWB#Et}=ewHm}65mrR{iMdukwFBbFFcC{?N=)*riIxr*cFIbSZ z2$*6^Q;c$Z9u{#k^iF<}<40}$K-;uNZ&)9S_E|q8|F~pV#v-VlhS2OARGA2z>j736 zbq`#X(?m&bezSA?<^FvBZ@OgYay$^Z<5znQQvsia+;?^{%W#)1HR$p6cP!%_7;$o3 zT!P&0?T`kHRkt=hu8Bwg0C?)#uqALu4mQ=vz=hT}KO#)|?bx3)iveD6z7(dcS zdlf=Cvw;ji^!8!|$yj@;zLtubBxda0YY+R^B}CvsB}tI)j4mV9?hsya9HY!m1Hfp3 zgZ4`Hu-9`K0_*2_V~bcpT8%D^dxAzxygWlyGnS|OBjVzG<6-38Bx1vsn1UtDEc<$* zumhz?Ixt*I*d^JhGf|N?;J4Ltr3_;hZfvkr2F9B9e*)`Un2NhzoHQD-tI7jdBR+00 z%|D_5@*DJZzawdDMXdFD^WEhxG0Ox>OS71p`~Ph$ePBdkUc3vz&|@d&BrL)sO?6~P z5>l3Z3+CVNW=Uu?VWa1atQJ}&o{apxJ)vK}myji0RB*u+?oz{*ZGC`mXe^oEkZ*gi zC#E(J-d5>k`CRq}90H{l?o7Kl^|oTbGcnxRvcmykkIa#G*x_NV62aY}@p6MQuli4i zQ9l?lGn(!Aa^rybtJSw-%mEv(o{OcllLFd`1@cNYOFP)^xc3Y_EtM~P{ zOG`(Zr^iOeo0l3fcCY+XI3d0RDusqwe$S3(b84C>zp-ekJyc;nMJ;*wuKZ$LEeN=u z0TmIocGY$dc@@T?1_&(7Zt#$)ciPhZB3wBJarz&>!ZG=4Kv#dSVD6cHi;I_d42IHZ z+4Dm9ZmiN7|6}#;SfIYQW~vThIl#O;9P;aXvfhBHr!-rUh{{7AxGW^>M2 zV}jXiFMerj<5v<&m%hu7w)}8Uyqm~&6)hPdz0K@gLhk^oS`0~SU5_;0l2_38iwqq#nyUA4)&ZQF{=-`pw z*WyDu+jP6sH7Si;B$G)btgnx}!Vfx^0NWT59^4xgCVp#ojS1Na5k`Ox(p9$cTBQYx zM6>&>?I$Q$WxD?X_^&bah;{^N%Gh^iU79jOpXAiI8q&DazPLLrvk&mv{!-1h4ih`; zi)i+k|Em2w1V2J>4>T67^EG3=%q`5Kb>cE^Wv>McX($Enj4v(lcC>c155-by84|Jz z2SH|3_Ekz39B2+)X9y7ZHmivNecj4T@1SUwKV&Y&i+p9GQtNHPlV$UZ=v+R17~(G!!c^7B_-9ph~oFx0`b1QY*bmv5ipL2pLp zs}aWf7L!|Orq(+s0JcxA364C&JGJJ4csux@eZas2_&svuCPavcS+VzPFASpcA|pkk`5Hl3 zA&!A$Y9UXkU)h%dh6@`?jJ~>Zrk$p-{)MMsu`I;KLP<&Q(>JFXrow}g@9A8KKXug` zs0csPHSdOm@e+}6Woih6*MH}RxLYcCwdG-Dwe6xh$KQ?yJ=fg29Df?S^s$&x)8CY{ zJ^c2SFVh?I%d?)6_sHXaCOJf&YN5On4gEqQ8OlO?ud-njjxEsrVj{IfU~*$*3zBw| zY1DKoKT5BSt%^aV=1>bjgPMW{Af$$m#y+4GQd!j}#XTD9)|zIEwlybzyD({a3=-qtmn zJt~Ud=YlQw%1ooxHY2EO0VXKTVYR$cmK_gav7~ezV`rVMjLx>)hnhC*j0+^e$9gC@ z@3Np-5P@#9oLS6*3LCZ%D|sazpIK3y!Nfl#+D;h_@EdsH6NqSF-pFleJaz;pbIlxezcT(qz+1i~12FxrC43=jyW4*@uo0PGE4K=Pcnd#uN z^7~g3?dy+ooseCsQRLj+TG2THkx_r!fNDnC?~ljrE8gpzU_Q2KKBQ@kY@S$dSH$E8 zj&u=At2?Cq1Bl*NV~kn$O0e@f8O!J;FELHbzA`x+xu%|F?}xq@i!Nhp@i>OSKfcN5 zoA(DizE19K#vmW8aKTkSdbGQKE0FUDMkdY?it<8K<9xKUjlaO#v6}jsr93ywmc}wXChm7RckhI9fBp>3V=U13|Gk7Qqrcs&;x%AK zgc7wx(b~KTL?&(&lPCJ;X+q<6+(xC7O9OCE9`%YB0?Byd4?s9X3NnUy8KHRYvZQcA z@8L+j@MFvoSX4eo@^kS@bgzqmE_%3Ak?TSP)mZ+zmR53BJE2N1XR_rFtxMf#U!1S) z#96J%eD5afuhdkKt8oF6g8IcB0E~-y*5l>cPI66c`Q;O19^c|xC+!Dgpu&{{{b96! z7bh~sn&1Q2!r6;)#83%K)0~|Dr|r#HPgecnp}5%N6@Ah(_6rKNUM4w6sb?5TDU9jqv8hwu}Ms((IF7Dk; zZP*yU)S(3Cqko=Pd(iGDlTD827IwR)R1fQnVIL(YIM4hqALR3wf>9teETH}S$fLcl z=b;f-OHvbhi$~*zO;*W-&6=q&8M8a>(R8ly^3rSY5ywfs8vQVfU1;36pXaf}|Ik2- zGGu#OvSHlw^tB_UOT3QmA4AjJc0wPuIi80`mD-D&mGbL9zc3sm;|^usWu9ym&`YkUg~8}U({sk491Q>zq+9~p!8n- zJ!uNYLVkBvLA8=CSmE@!WgH#hO6la*>z7a2(RfD&`jw~7E9ovIA=}Yha|$;%YEXmd z*uC+0cjz~BdOf2V&%xBQ-4~RWVyB>G#xU&9-8VhwQwW}&-1J#dm=*V}{5TS9lNOJ@S}x!qdbqB{kb<5XexmzO)fekG zBCgxP`BtC{)R7S@JmrPHLXyGS!G~>KWtp`v?S*Kf>++3pqQrP_g^1O2>k4(v{3!b< zyX%N_@YEX;F9MB7Jm{v&NM|^&ey>kYRaVlQ)+v(j1Z;c7wC{>F3)2qdwNAMzI-z8% zrfo{Svx=Ddnl0%y!~nh;5c3$bu#P$EvR%}0W^QWqLQ4?;mtqIXnrE9h)DWl?oIBQ# zDyx;tAU{DN*j=*ZyC>4vj{QEg#K6sE+0wiWJq`XA1GtmZ+EAQuDKQh#7j8_vvb4h= zj`jFss|Lk2>MN38e5>M`fG4-flRZHqkr_STV6Ao(Y-z=_l*{Sv@A1P~vS99KO@DFi z2)GDIrg!=2RqW9W_)bEHq}{K6pfv0wE*m?ZB88CrJ?w;6Cy@5(LuXM{p(N1 z%n{D{(lD9Wg?X}arW5?C0<1P}DEZ=J6XaFXNafkyN;Pq6p$T3nzyz*B+NwRZ*JGpVtH~9r zV8u3~5ku5pWI6uXQ-!18&i5S7-;&&qKuTm@_ifGz$QLjsx>Nk(-jgSP64UU8g*Q07 zlQP3AELmQYHlqlcWr}MKemg!pA(a+xTM-ibrwbIjMA!?<#y2~Y3*{tJ1x+U!A50GY zA_&T6bQWPkXM#uERYkCBMRb2+^}+Vy-0 zsV;vrhJZ1h7)l7n14(Ls+XxO5KL6)h{DBhfibK7M)_OLOT}_W!Hph>KFL|;wNpcJj zuM-fb!<+emvJ|JV)M95u7d^VIaHnles#G;7mw)$CR`=}Geh!@-Nov#0nVHEX>J51y82;NVdXA#s-c1j^$q zXzb%7&|NWIA=l!uXEI8YPx%Ocl5W9X(I=KlPiOxRImh&pYZJlct~{BemCFdv3jB&h z|0esl(z%#HAoJYC%fC%*c{8WX!gn*2=FIpXJ3kbXT{Y z8eA~Q*1_$}z3k10h~&Aya5br4!74qb{V;ROOhVL|m6e~k7=ZpEY*K3|2tw;m7TP4@G$fL87jSZp2mU#*Wtm6p- zu8X|R2QRE-q|$#yca#Wu{WvC0c%SFPX4V|zo;O5JyXJ9SU3r{7b~b4;$d-1OeZxGH z*Brx~7bZjO{*Q#+&mHyR?Gy67e-j#9@TeW~6#^fP%)Zfy7{NbRX6w4A(wdbuGX7`f zS#i=lg@0QZ2iw)(nA>Ju-Xi>Q3IY5V0TUZksqxMSK+^Nkb4&IspLjZ5!?wpu5Zf`u+%WEl7T51lG5@2?}YWg&slj1zf>>{ z&)Vn*TI~Vh=f>4^s8f}GWD8Poi@K7huLElRC)j?4NA&C8dO%N_?*6;}~@c9m|7>k~gm33ji=hU5~tDA&UPkT*ku0^`86| zC@n#$=DueCthYjzgl{&wSnq^XRy;Owl|3!g8D~c;goFoiwy$3Z#vq}OQg;a=l9EPi zZyA5utWtM2Cv0HIn#UDLpQHF`o@W-PIN<-D+8{QeH{O&ixCIot!<95r28SD3)LvRC z*A^U#V8lwqfoP5h(sjYD=NW)2owKt98|#(|n!~4=dY>5a$j?Svk{7gHp*va}NZ-34 zTPj0SO+3`g%>IsWE646kvN)}t(oj6PhV;R$2>(>)2Q%!$^2PDX;8S_QHm|mVqApHa zMminE1^N!`5%!=S1T1CIXV$_trykwrI`E_m6~Isa^nU5f1&iHtkz2Rf0qUXZi1(^) z1m8bp7zVJtcb+!#PV-IOjiKNGnGj!UA;4X@=f1Nb{vrEsS{<-LKG~6vvGMepd&i7+ z_dk?bmGn34jf$Sf48_@OEe~nNjfy_J{nREJ&=F?s;<l?ULc-XPee)l-1&7={Ks;eV>kHL&FwbB?15Zb*|i z6MOZQdKah zECJzT5VHI`qeq3an~KHcbjGo&L@)!?v?bFyA2ih{DR-LZTUYw?|GHQipqyNBH@pyYpca@^N_i7D%Iek0DUt~uhJz2 z#Znyi-$~|nUyflL*HzI*C5fURNlAygnMjQ3#WkV{bUbMBjtI1}m6p(y5_kTLd&k2l zDvsudM!DJ1n-v{Zb|DJu(lt@oV~K8<06>f}RO zM@}!^b8bv|7!9?+*I5L%Y{Do}BPs|@x;h-J3VBHVKo2tHu#A`qKjHqGGImiy zxAN+F_KDYNI+{yKzm(JhZzmm_FL#a4TQ)0eH&KhKmv_EE-B!$i_df39`8)Mx{PXSj zJGgzr7H<92qUh2{bPCxivX*BiwzYWX0dMu!%CPL%$`PeRcf;_qt!+V=W*td&MMBrP z(4VJAP3EGO83)o4#piRbR{fA4Ik)Tzk2x+#Km7n3rZn8@oTFE7o=?vvJ{CFKONX#_ z7!K`;{_u|1f2izlfsaM|d$NCdCBL<)7nG#v_o1}fF zV0>EH8JT&%7Le|xBn@)fi1czWQ+UV5KMI`_i}Lrsq3G_umHf3Pkt`Nu8)##yR$7PZ zvgYvTT5`7SY`5oD)Ysv;=@vLGV*b1QlaRblz%@OMn3>3_G4P3Ch7xfD zMF^xf<5uv6E49;IjcMD)!T^=N##@!D_Sc~q-0~m4YKCi{wsC%0zqQ8i#Gfn>7zTajpae9`TRY#Ax<7Bstl(R)-Sh>R@IXBF z-i|i{Sj6{qI4IB`@1_strGW!Mlmi#Sk5QjFxy2HLuTlJrk}8eFX{lNx`YN=Ac#0}< zYM%N}KB_RV`_M7~KC?OzfUPwtnCoVs=9T)7WSj1}g-RE%+Y)A#g}Lf$G_O#q@B1N# z>kFNrN3$p1`=GtvCl}+4ETY+sDL*bxmws-1PM8LPA#L#2iZ{My&0;B8kL6cXy|;80 zh@=bOwx8%rGtg}Bfynw_kLlx*hq0y(;Eb z_3t9(n;SfiM$>h*52KNG76^-vWeQme>9h;UGW$>3d%E4r>U3l=80cMuo%5fBorD)8{wV|?)G2Xisf2q9rWJ^;s4hSi z3pSg{uJlZT3_a@H35rE~s9DE(=|w5>f6s5ji7f@pAbM+M&En%jD3ozscV}#CKF-K zMTsy(T4>&(M&~Rguc=Mv z7!h*BOSZWUlT5|vJV@B&5Tt6`_tUA|S_I(ro+G7if|SNSjk235$YR}mKc_rAuW9Xc zijD$V1tr_AbE$LZ(<`W4YcS?q@TI+ugqnozls5*ne;Sze&KUbiiM)Zyjq}=+H#HamR#tKJBMjl$-&3pFfVakGC3zr+x1IBuy;7{gC49m)G(iO1S$MFkoZN zKT9@EajAc{fpi>O+TM50?Byx|Dms0aS%u3b)Am_tzD#%Zv+Z^fwxZ*4|f9koSUKnH9i;(l0xVdm|l!3jN# z=P&QuEA*zBOQTHT1{Q^DD-K4fI}J}@J74qqO_OFOAPQNZ& zDM(GMVIgob@o_;)HFoz7tHG+EhtQPR>kNwE*2IBCy3(bV5hQ|&*+&^JXg8%tl$>Am z@S(<|b2srhOAUXiM#34sU}GDKif{YW+<(6PR6ge0sOt_AwlHok5nn*Prm9Okk+DSn zDdpUFEJHv;K&FYfjO-lbrIVH`52#Dp2mUuy2#LKO;doH58_vHk3REER;Ey5 zz`fSQ2E%UJtvcMo4zTc(E2j4q?Hkw~+|8?CR=_I5q1EeVcr>1rG3?dDWwv+2r(D}r zjr09HxyKO2k%YcDVMZ0awc&bjyE>n-4XyqF-}`{ghA`P?JZ@e|Q%MJ-*#IfJV7E0Q z@K}I;Fct3XOeF2~kxt@_>mht!Q-BL~)y66N*ic)k>Eh*z&GnNbM6k-~ZnGTtoa zn3%Y)&Z1+z;VV_9e?W)xWWMP9{U*&<5&SQDfCVkH@VWMa=fD%|ZFNfd5!WKt>e2?% z7pyULJksM+zS3Qn|E;g~J$}>=^hsCpeqXO|91V`90>rfS?Xz$6q-B`+|EIGSwU7^c zDCpOZDiO)&10h}Ze`0j5Rv9rN$qG~>DCaTUqSUtqt@qm2NJ=$w5?;6^;LNrD*wECh zOY(GdqWMB7Mp@NV#~^96RUd`_T?1#0*}!MI+&7f|V{y76ibsYQD-UdJ!q_{aD28vl z?Sy>4sY6=rggY;S^)oZ_=J$+`Txad?Y71=SM?aYap-2pVp!N7DI$t_-a*8gx7`-$GK5rbRVP@~v{O#5(- zABZBNHL4;zldb;xiMJ)+4y4V%WlfW+GI(k8G3ll|&^N~E&+HH>Z43#E>Wq1HE`Qb~ zkuwtYJIqn9J&|hBspG)ieTglZvu@p*a+k%g`>>qNuMQ@&QZz1zi0+WTw|!*p z$?<((ga0I#w7)+YJ6%gd7~`+?mK!iGneI3;wz;j~Fl6AkTORt0x>vF(npik^fbFOC zbe1xVR);Q?_^i+bt}VsQF4wgRQry@g!JLDh#-H7?*5f&Lc4;;2L?|T4OLixTmJtGO zp0yR;_P?v0ZbBCkIKWibWk1F2zH?0h4(a0rpp_L}ibL0KjNtOLpx?g4xcB2TTN%85 z?N0hwX0#dNz2V#3>&%f4d+)P;;eC0UruQLDl5P?%hp|YkU%uyW!(j5eFLg_D*b7#3 z7%>Mgh?yp0*eQ&d7)>M3&aNMorC6IukgE-dwKbF;KI8fc-fngm%_>a&;_4h4055|0 zpkaFN^6wzkd#kW0r5)B|BNENj&r*A0X{t5{>PL`KgxWr!HafF!h)PkS{5zU&nX+?N z=*Zn>C%IgZ+WGOXcSHP*Q==AkDAQo$%x!uE77!kDeG_{8x&$BdWo%I*Kh7jlu>sTJ z^+-(6VcT_elrJ4h(;tLec^rLnGRB)stkCzbt_M~YB$HsWf>GJ-U~N}X*|dRWTeYUl zQe%0GSSVGRECZngo(J7$9wdqhe+}rcv4U}9auep7j)?vh_cdNA-~&vnXXSXXir^&c zL1_ZHe!jw5!KCBcop-&OXmDS&JA4i;o|pFxD((N2NmxT4j&-Ckt@pFk-@eAFVnl zL5@Q=LwU!x5!1Ygmz!scAXhJ5R>-%VLcbJ3CCawG@T>WUjO!9XNE4AnSObC^0cgWQ z(^&b@S|Aa=Bva)7{!s}D3>#brq-Eak^1lpjU zc%L5#k}AsmZZhW%AD&cyY1d_DU(esgZjuHI)|{;=8cM%>p=6)7_6`zsX?aT^GI85! z{CK3@4It!antW3AqEO2%5ZR)>MWzp~AEwT!dK**pW}0wmSE%~uHW$~o(5PmN<70Cz zs9X*LJKsF#zR-*xx;dLHK}=ti76W3k-KCD8u<7JBe$mBxG%{M5lQz-MwW{^(HcmQ3tT-`iZ|eK?JKd)c;-o zC~#3}W^zlG3s8q&R;P~Eq}WDF7#}VnGZ;DD8?(Z#*RF~WFYObB0Hi=2s&a?fBdEgQ zx$sU#cspR`S>dIAEhY=laMqc1LpVxE#fIc;Vob|7=>=)zq5J4I9vHw<2^zW zlTEwcwdQN0;eFZftG+d2sJ=xP$$$Drtk#zHefp!ep4;wGqqU!W_;I4Ygrko(QDC7m zKi9vt*YSM+O^eMK|_v;)z3v^R=)gnP^cnM86>x9VySU%#mk4^-1b-haB}0yFpNaW|6FaD7 z)gMb?sN?Cqb2Zgvc#hMxKq;>KK3H75>ocmzmBDS*u-}E7#SL<0083i(c_jSwMpD%M z`GvN|G*IYsZBF{!`~m88IPLpo5%{+{RIv4pg`zxr`(vXxex0lr$Aqpq)4|)T>R$rY zgv*|xy+VkzUprg^`U4$lD=Azgt?x{OPy%_sZF?tIEemxR8ap#t!@+i*TreP!w9}?( z-DS#Kj?(Rw zxplV)(J|fMN0dQ&MDA00db&>X_sWiTrwq3qv-=Dv>krU#7SqL3WY`H7PVC2(Ww-tI zW7RuBHqH~khuF0A9qMG8Ap9JSEjo3LqAVoms5!GH>g6m8id9p*G`4f{U17-@HSFbw z=9?^vDlOjkELeXA^)(3oL)oJTq~B5`m&%YgTX-zKmEx3t@W<9_&mw|@uTrn5 zp4G;ejY@fB8>baM8sM4zP{2_bSaubQ)|hS3j})T<$@7nlNC+~he2*6<>=cQQM9s*` z3aqIX*X778Gja&$R0DombtKsdOWNLc@$Y!FZ18zA(SBweTF-3m6RoxRz}MSQ6ZIzj zj~yvnmfXk2s|j4|2gB>eOebnl-x{EU_lT320`I^c-DtPW;3DysM8DJP>Y}+qgK>X* zm1uB+oJs+mDw36(ggcNA*#zxZ{d3c0H+d8t+kr&~@@3FEle`&_0KL_zRMzjK^j(BT za3zl@2C0$O)m)lo2%BV-qKF*EIn9;t=j&uEwzzCOdNSw|3d80<#fLjPcV`5mP(RCf zlf|@)dEsVuycBz354oT9#rK`kon$J~hf=AKsQ3qV!RAWuxRj^U`;+M`XLr*^4P+Uf z?_yodUupJcBq+18UA$K7tErW?Hu8#PJ*~Fq(zhr zYH9*l8&Sby$i9gC^6EQ<^-IYvu+RI~a=!w8HA-ReR-On&`3VfE0nH7-ZIbHG9l1@@ z_Tof^ebmF?qSU7$A>JQl!SqeWPwt)a0$0G}{Y@D}m-Vsj9E+BoxCB|E`oSaA{c95!bwryuOgnVBk z{k_#(*tWHF@;JTp1ehZ5^uK+C}f*HN;4A_54 zgk0lqx(YoV)KcUqr+yk5>50iX6Y}Uw*)M z6eE7(Wp0+BAfX__knN(uvF=kImK#fJ9#hixn|Vl>g2`Xxz_WVtbpG@Pa+V$V0ivjS zju%g@toFPhy% z%(gR~w<^)~Ry!3)=P$#ab2bRZW`b42H6Dh>Lv zR}IF@^eFBmyLhPN6G)3_yWlB;jT5~+XE=O&S zc)iKC*DeELETgxX!)D{x#%h;sVWmiE`SEse57#>r5z^41b^`vyaWkdA{8sxted;fw zIPVhSbqIWEt~R^7#xq6JrL27a0h*ReWuwcPjq>JZE12O&4UH!Sv7rYxU-+3{h&YF% z8_Q;}X#oEG%Ak4D?{^HC%>(kV@7gjOG?hDn}y>5u;2z$%cu=Lq#uvlLiWRIKPg0Q$q|1d4iYV zKoI6BY8#E1Wn@uiQ0Xw}A=0*!wPRMm;`dI3zP=fLgP%q>jCL*jP`mz3+L{W8c;RN> zBKo9&qt8>Uy%xGa1G&2@%VMePI6ERmAO<#fb(^0zEY)iXQLu8d+ckbTb$_b%(GaWg&D2?+HuXh% zt_YF)u6wfF#mRZFFmAo-h}LH};C`+~REk9W>X|j zrtQfz8+9i)mTZ%0Vl@HTmsL%F(=P5Jl@*4MIvPJ={{|Wf1GbDL&SLxH4)qw5Mj3wF zzZ-tn_$_M71I4)2chsrEj%&_1|U^KlciQqput z*|xib|8+F(ffOpgshI(IQB~_$QirI|Z=*@{`}Ul(b=TcR?|K9n_mRFanc;8>@WKPk zG2b2@fsQ4)`^=Qq)Q||%iK^rq!1hYTS$|W6K-a%Fu<$_e2CT*XhvrJ29s6YNwB9$xsyoF6BS( zNt7dF|JL{sWQ#tqv&+AP{GHr$NKfqd)}Z*J#Vl;1g|I&}4|=o!L(IVSG`EvS7mvaXYmZ~Tpw&PbPHYb_pzy7>W$3C%_Z$jyH! zc9#JsN)Y;u=(qeF5)3@|vD3_tZQip}#q65OAfM`s{bz4VQ&wqg1+_@T!;E6NNwH0} zrG>ukC!pxfmbesFjMF|0eJ$;h3wMkxvf=QQ=71+1f({I>S)brNuJ1bhGWU<)vKB)`#yEI%O zQ@fx|HOpE!?00Tl1dSE)o{$>|G9KH z3YVvk8i>Vs(XAVNKs{pnEhuHj2EF<)RjI z6q_LNNsdNT`+cKt^2=nCKc}BQU#IkdPastEDpowNv9>z-T%X*u+lbzZiS};kVcI}S z%-#g^S95Qh=m)?VHL}_dyaD%@wAeY?Z5wuWIpSpv9J93;)mpQrSYIZgc*1~YqUa^u zF-Mz5z(#w}6!6nviSwEH)rH?0y|W4l9+k^!>S-j;(a$ug=aLc+Zo}ejZrl&}{xYC^ z%vM`Q*CTx)K{%L!!l%VL70j?5{KQ`4@ZDjVa&Ju0H~drpLmb$H9?#mRt>)ip_-R_s z4ICF;nkQUrVfks}`vYlEx2g;EYXTY4hYjhEFW4-<53xg2_fRC)qLrxiT!r-Y)$|o2 zo~9NX�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