diff --git a/.gitignore b/.gitignore index 50032e8..ced4e45 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ vcpkg_installed *.userosscache *.sln.docstates appsettings.Development.json +appsettings.Production.json profile.arm.json # User-specific files (MonoDevelop/Xamarin Studio) diff --git a/Giants.DataContract/Contracts/V1/AppVersion.cs b/Giants.DataContract/Contracts/V1/AppVersion.cs index f4ab976..5fdf937 100644 --- a/Giants.DataContract/Contracts/V1/AppVersion.cs +++ b/Giants.DataContract/Contracts/V1/AppVersion.cs @@ -35,5 +35,15 @@ { return new Version(this.Major, this.Minor, this.Build, this.Revision); } + + public static bool operator<(AppVersion a, AppVersion b) + { + return a.ToVersion() < b.ToVersion(); + } + + public static bool operator>(AppVersion a, AppVersion b) + { + return a.ToVersion() > b.ToVersion(); + } } } diff --git a/Giants.DataContract/Contracts/V1/VersionInfoUpdate.cs b/Giants.DataContract/Contracts/V1/VersionInfoUpdate.cs new file mode 100644 index 0000000..2a6c504 --- /dev/null +++ b/Giants.DataContract/Contracts/V1/VersionInfoUpdate.cs @@ -0,0 +1,6 @@ +using Giants.DataContract.V1; + +namespace Giants.DataContract.Contracts.V1 +{ + public record VersionInfoUpdate(string AppName, AppVersion AppVersion, string FileName); +} diff --git a/Giants.Services/Core/ServicesModule.cs b/Giants.Services/Core/ServicesModule.cs index c9bd4d5..8077bb8 100644 --- a/Giants.Services/Core/ServicesModule.cs +++ b/Giants.Services/Core/ServicesModule.cs @@ -17,8 +17,8 @@ services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/Giants.Services/Services/IUpdaterService.cs b/Giants.Services/Services/IUpdaterService.cs deleted file mode 100644 index d52fbce..0000000 --- a/Giants.Services/Services/IUpdaterService.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Giants.Services -{ - using System.Threading.Tasks; - - public interface IUpdaterService - { - Task GetVersionInfo(string gameName); - } -} diff --git a/Giants.Services/Services/IVersioningService.cs b/Giants.Services/Services/IVersioningService.cs new file mode 100644 index 0000000..60276d5 --- /dev/null +++ b/Giants.Services/Services/IVersioningService.cs @@ -0,0 +1,12 @@ +namespace Giants.Services +{ + using Giants.DataContract.V1; + using System.Threading.Tasks; + + public interface IVersioningService + { + Task GetVersionInfo(string appName); + + Task UpdateVersionInfo(string appName, AppVersion appVersion, string fileName); + } +} diff --git a/Giants.Services/Services/InitializerService.cs b/Giants.Services/Services/InitializerService.cs index d5a8914..7b1d15b 100644 --- a/Giants.Services/Services/InitializerService.cs +++ b/Giants.Services/Services/InitializerService.cs @@ -6,11 +6,11 @@ public class InitializerService : IHostedService { - private readonly IUpdaterStore updaterStore; + private readonly IVersioningStore updaterStore; private readonly IServerRegistryStore serverRegistryStore; public InitializerService( - IUpdaterStore updaterStore, + IVersioningStore updaterStore, IServerRegistryStore serverRegistryStore) { // TODO: Pick these up from reflection and auto initialize diff --git a/Giants.Services/Services/UpdaterService.cs b/Giants.Services/Services/UpdaterService.cs deleted file mode 100644 index 6857dbf..0000000 --- a/Giants.Services/Services/UpdaterService.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Threading.Tasks; - -namespace Giants.Services -{ - public class UpdaterService : IUpdaterService - { - private readonly IUpdaterStore updaterStore; - - public UpdaterService(IUpdaterStore updaterStore) - { - this.updaterStore = updaterStore; - } - - public async Task GetVersionInfo(string appName) - { - ArgumentUtility.CheckStringForNullOrEmpty(appName, nameof(appName)); - - return await this.updaterStore.GetVersionInfo(appName); - } - } -} diff --git a/Giants.Services/Services/VersioningService.cs b/Giants.Services/Services/VersioningService.cs new file mode 100644 index 0000000..45554b1 --- /dev/null +++ b/Giants.Services/Services/VersioningService.cs @@ -0,0 +1,71 @@ +using Giants.DataContract.V1; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace Giants.Services +{ + public class VersioningService : IVersioningService + { + private readonly IVersioningStore versioningStore; + private readonly IConfiguration configuration; + private readonly ILogger logger; + private const string InstallerContainerName = "public"; + + public VersioningService( + IVersioningStore updaterStore, + IConfiguration configuration, + ILogger logger) + { + this.versioningStore = updaterStore; + this.configuration = configuration; + this.logger = logger; + } + + public Task GetVersionInfo(string appName) + { + ArgumentUtility.CheckStringForNullOrEmpty(appName); + + return this.versioningStore.GetVersionInfo(appName); + } + + public async Task UpdateVersionInfo(string appName, AppVersion appVersion, string fileName) + { + ArgumentUtility.CheckStringForNullOrEmpty(appName); + ArgumentUtility.CheckForNull(appVersion); + ArgumentUtility.CheckStringForNullOrEmpty(fileName); + + Uri storageAccountUri = new Uri(this.configuration["StorageAccountUri"]); + + VersionInfo versionInfo = await this.GetVersionInfo(appName); + if (versionInfo == null) + { + throw new ArgumentException($"No version information for {appName} found.", nameof(appName)); + } + + if (appVersion < versionInfo.Version) + { + throw new ArgumentException($"Version {appVersion.SerializeToJson()} is less than current version {versionInfo.Version.SerializeToJson()}", nameof(appVersion)); + } + + if (fileName.Contains('/') || fileName.Contains('\\')) + { + throw new ArgumentException("File name must be relative to configured storage account.", nameof(fileName)); + } + + var installerUri = new Uri(storageAccountUri, $"{InstallerContainerName}/{fileName}"); + var newVersionInfo = new VersionInfo() + { + AppName = appName, + Version = appVersion, + InstallerUri = installerUri, + }; + + this.logger.LogInformation("Updating version info for {appName}: {versionInfo}", appName, newVersionInfo.SerializeToJson()); + + await this.versioningStore.UpdateVersionInfo(newVersionInfo); + } + } +} diff --git a/Giants.Services/Store/CosmosDbUpdaterStore.cs b/Giants.Services/Store/CosmosDbVersioningStore.cs similarity index 88% rename from Giants.Services/Store/CosmosDbUpdaterStore.cs rename to Giants.Services/Store/CosmosDbVersioningStore.cs index 2e72b79..af549c5 100644 --- a/Giants.Services/Store/CosmosDbUpdaterStore.cs +++ b/Giants.Services/Store/CosmosDbVersioningStore.cs @@ -6,14 +6,14 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; - public class CosmosDbUpdaterStore : IUpdaterStore + public class CosmosDbVersioningStore : IVersioningStore { private readonly ILogger logger; private readonly IMemoryCache memoryCache; private readonly IConfiguration configuration; private CosmosDbClient client; - public CosmosDbUpdaterStore( + public CosmosDbVersioningStore( ILogger logger, IMemoryCache memoryCache, IConfiguration configuration) @@ -39,6 +39,11 @@ return versionInfo; } + public async Task UpdateVersionInfo(VersionInfo versionInfo) + { + await this.client.UpsertItem(versionInfo); + } + public async Task Initialize() { this.client = new CosmosDbClient( diff --git a/Giants.Services/Store/FileUpdaterStore.cs b/Giants.Services/Store/FileVersioningStore.cs similarity index 63% rename from Giants.Services/Store/FileUpdaterStore.cs rename to Giants.Services/Store/FileVersioningStore.cs index b223c49..b644f8c 100644 --- a/Giants.Services/Store/FileUpdaterStore.cs +++ b/Giants.Services/Store/FileVersioningStore.cs @@ -3,13 +3,18 @@ using System; using System.Threading.Tasks; - public class FileUpdaterStore : IUpdaterStore + public class FileVersioningStore : IVersioningStore { public Task GetVersionInfo(string appName) { throw new NotImplementedException(); } + public Task UpdateVersionInfo(VersionInfo versionInfo) + { + throw new NotImplementedException(); + } + public Task Initialize() { throw new NotImplementedException(); diff --git a/Giants.Services/Store/IUpdaterStore.cs b/Giants.Services/Store/IVersioningStore.cs similarity index 63% rename from Giants.Services/Store/IUpdaterStore.cs rename to Giants.Services/Store/IVersioningStore.cs index f577543..f1fccdb 100644 --- a/Giants.Services/Store/IUpdaterStore.cs +++ b/Giants.Services/Store/IVersioningStore.cs @@ -2,10 +2,12 @@ { using System.Threading.Tasks; - public interface IUpdaterStore + public interface IVersioningStore { Task GetVersionInfo(string appName); + Task UpdateVersionInfo(VersionInfo versionInfo); + Task Initialize(); } } diff --git a/Giants.Services/Utility/ArgumentUtility.cs b/Giants.Services/Utility/ArgumentUtility.cs index 37a791b..ac53f5d 100644 --- a/Giants.Services/Utility/ArgumentUtility.cs +++ b/Giants.Services/Utility/ArgumentUtility.cs @@ -1,10 +1,5 @@ namespace Giants.Services { - // Decompiled with JetBrains decompiler - // Type: Microsoft.VisualStudio.Services.Common.ArgumentUtility - // Assembly: Microsoft.VisualStudio.Services.Common, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - // MVID: 8C174B92-2E1F-4F71-9E6B-FC8D9F2C517A - using System; using System.Collections; using System.ComponentModel; @@ -14,7 +9,7 @@ public static class ArgumentUtility { [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void CheckForNull(object var, string varName) + public static void CheckForNull(object var, [CallerArgumentExpression("var")] string varName = null) { if (var == null) throw new ArgumentNullException(varName); @@ -23,18 +18,18 @@ public static void CheckStringForNullOrEmpty( string stringVar, - string stringVarName) + [CallerArgumentExpression("stringVar")] string stringVarName = null) { - ArgumentUtility.CheckStringForNullOrEmpty(stringVar, stringVarName, false); + ArgumentUtility.CheckStringForNullOrEmpty(stringVar, false, stringVarName); } - public static void CheckForNonnegativeInt(int var, string varName) + public static void CheckForNonnegativeInt(int var, [CallerArgumentExpression("var")] string varName = null) { if (var < 0) throw new ArgumentOutOfRangeException(varName); } - public static void CheckForNonPositiveInt(int var, string varName) + public static void CheckForNonPositiveInt(int var, [CallerArgumentExpression("var")] string varName = null) { if (var <= 0) throw new ArgumentOutOfRangeException(varName); @@ -42,8 +37,8 @@ public static void CheckStringForNullOrEmpty( string stringVar, - string stringVarName, - bool trim) + bool trim, + [CallerArgumentExpression("stringVar")] string stringVarName = null) { ArgumentUtility.CheckForNull((object)stringVar, stringVarName); if (trim) @@ -54,9 +49,9 @@ public static void CheckStringLength( string stringVar, - string stringVarName, int maxLength, - int minLength = 0) + int minLength = 0, + [CallerArgumentExpression("stringVar")] string stringVarName = null) { ArgumentUtility.CheckForNull((object)stringVar, stringVarName); if (stringVar.Length < minLength || stringVar.Length > maxLength) @@ -65,7 +60,7 @@ public static void CheckEnumerableForNullOrEmpty( IEnumerable enumerable, - string enumerableName) + [CallerArgumentExpression("enumerable")] string enumerableName = null) { ArgumentUtility.CheckForNull((object)enumerable, enumerableName); if (!enumerable.GetEnumerator().MoveNext()) @@ -74,7 +69,7 @@ public static void CheckEnumerableForNullElement( IEnumerable enumerable, - string enumerableName) + [CallerArgumentExpression("enumerable")] string enumerableName = null) { ArgumentUtility.CheckForNull((object)enumerable, enumerableName); foreach (object obj in enumerable) @@ -84,7 +79,7 @@ } } - public static void CheckForEmptyGuid(Guid guid, string varName) + public static void CheckForEmptyGuid(Guid guid, [CallerArgumentExpression("guid")] string varName = null) { if (guid.Equals(Guid.Empty)) throw new ArgumentException("EmptyGuidNotAllowed", varName); @@ -94,7 +89,7 @@ int value, int minValue, int maxValue, - string varName) + [CallerArgumentExpression("value")] string varName = null) { if (value < minValue || value > maxValue) throw new ArgumentOutOfRangeException(varName, "ValueOutOfRange"); @@ -103,8 +98,8 @@ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void CheckForOutOfRange( T var, - string varName, - T minimum) + T minimum, + [CallerArgumentExpression("var")] string varName = null) where T : IComparable { ArgumentUtility.CheckForNull((object)var, varName); @@ -115,9 +110,9 @@ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void CheckForOutOfRange( int var, - string varName, int minimum, - int maximum) + int maximum, + [CallerArgumentExpression("var")] string varName = null) { if (var < minimum || var > maximum) throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange"); @@ -126,9 +121,9 @@ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void CheckForOutOfRange( long var, - string varName, long minimum, - long maximum) + long maximum, + [CallerArgumentExpression("var")] string varName = null) { if (var < minimum || var > maximum) throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange"); @@ -136,18 +131,12 @@ public static void CheckForDateTimeRange( DateTime var, - string varName, DateTime minimum, - DateTime maximum) + DateTime maximum, + [CallerArgumentExpression("var")] string varName = null) { if (var < minimum || var > maximum) throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange"); } - - public static void EnsureIsNull(object var, string varName) - { - if (var != null) - throw new ArgumentException("NullValueNecessary"); - } } } diff --git a/Giants.Services/Utility/ObjectExtensions.cs b/Giants.Services/Utility/ObjectExtensions.cs new file mode 100644 index 0000000..97ccd23 --- /dev/null +++ b/Giants.Services/Utility/ObjectExtensions.cs @@ -0,0 +1,12 @@ +using System.Text.Json; + +namespace Giants.Services +{ + public static class ObjectExtensions + { + public static string SerializeToJson(this object obj) + { + return JsonSerializer.Serialize(obj); + } + } +} diff --git a/Giants.WebApi/Controllers/VersionController.cs b/Giants.WebApi/Controllers/VersionController.cs index 8882a51..bda0451 100644 --- a/Giants.WebApi/Controllers/VersionController.cs +++ b/Giants.WebApi/Controllers/VersionController.cs @@ -1,7 +1,10 @@ -using System.Threading.Tasks; -using AutoMapper; +using AutoMapper; +using Giants.DataContract.Contracts.V1; using Giants.Services; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Identity.Web.Resource; +using System.Threading.Tasks; namespace Giants.WebApi.Controllers { @@ -12,22 +15,36 @@ namespace Giants.WebApi.Controllers public class VersionController : ControllerBase { private readonly IMapper mapper; - private readonly IUpdaterService updaterService; + private readonly IVersioningService versioningService; + private const string VersionWriteScope = "App.Write"; public VersionController( IMapper mapper, - IUpdaterService updaterService) + IVersioningService versioningService) { this.mapper = mapper; - this.updaterService = updaterService; + this.versioningService = versioningService; } [HttpGet] public async Task GetVersionInfo(string appName) { - Services.VersionInfo versionInfo = await this.updaterService.GetVersionInfo(appName); + ArgumentUtility.CheckStringForNullOrEmpty(appName); + + Services.VersionInfo versionInfo = await this.versioningService.GetVersionInfo(appName); return this.mapper.Map(versionInfo); } + + [Authorize] + [RequiredScopeOrAppPermission( + AcceptedAppPermission = new[] { VersionWriteScope }) ] + [HttpPost] + public async Task UpdateVersionInfo([FromBody] VersionInfoUpdate versionInfoUpdate) + { + ArgumentUtility.CheckForNull(versionInfoUpdate); + + await this.versioningService.UpdateVersionInfo(versionInfoUpdate.AppName, versionInfoUpdate.AppVersion, versionInfoUpdate.FileName); + } } } diff --git a/Giants.WebApi/Giants.WebApi.csproj b/Giants.WebApi/Giants.WebApi.csproj index 74b9d2d..fa1cb54 100644 --- a/Giants.WebApi/Giants.WebApi.csproj +++ b/Giants.WebApi/Giants.WebApi.csproj @@ -11,8 +11,9 @@ - + + diff --git a/Giants.WebApi/Startup.cs b/Giants.WebApi/Startup.cs index 7933da2..767630b 100644 --- a/Giants.WebApi/Startup.cs +++ b/Giants.WebApi/Startup.cs @@ -1,5 +1,6 @@ using AutoMapper; using Giants.Services; +using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; @@ -8,6 +9,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; +using Microsoft.Identity.Web; +using Microsoft.IdentityModel.Logging; +using System; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Threading.Tasks; namespace Giants.Web { @@ -32,6 +39,47 @@ namespace Giants.Web services.AddOpenApiDocument(); + services.AddApplicationInsightsTelemetry(); + + IdentityModelEventSource.ShowPII = true; + + services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddMicrosoftIdentityWebApi(options => + { + Configuration.Bind("AzureAd", options); + options.Events = new JwtBearerEvents(); + options.Events.OnAuthenticationFailed = async context => + { + await Task.CompletedTask; + }; + options.Events.OnForbidden = async context => + { + await Task.CompletedTask; + }; + options.Events.OnChallenge = async context => + { + await Task.CompletedTask; + }; + options.Events.OnTokenValidated = async context => + { + string[] allowedClientApps = this.Configuration.GetValue("AllowedClientIds").Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + + string clientAppId = context?.Principal?.Claims + .FirstOrDefault(x => x.Type == "azp" || x.Type == "appid")?.Value; + + if (clientAppId == null || !allowedClientApps.Contains(clientAppId)) + { + throw new UnauthorizedAccessException("The client app is not permitted to access this API"); + } + + await Task.CompletedTask; + }; + + }, options => + { + Configuration.Bind("AzureAd", options); + }); + services.AddHttpContextAccessor(); services.TryAddSingleton(); @@ -46,6 +94,7 @@ namespace Giants.Web { if (env.IsDevelopment()) { + Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true; app.UseDeveloperExceptionPage(); app.UseOpenApi(); } @@ -54,8 +103,10 @@ namespace Giants.Web app.UseRouting(); + app.UseAuthentication(); app.UseAuthorization(); + app.UseEndpoints(endpoints => { endpoints.MapControllers(); diff --git a/Giants.WebApi/appsettings.json b/Giants.WebApi/appsettings.json index f82cc71..0534827 100644 --- a/Giants.WebApi/appsettings.json +++ b/Giants.WebApi/appsettings.json @@ -12,7 +12,7 @@ "ServerTimeoutPeriodInMinutes": "7", "ServerCleanupIntervalInMinutes": "1", "MaxServerCount": 1000, - "MaxServersPerIp": 5, + "MaxServersPerIp": 5, "DiscordUri": "https://discord.gg/Avj4azU", "BlobConnectionString": "", "CrashBlobContainerName": "crashes" diff --git a/Giants.WebApi/packages.lock.json b/Giants.WebApi/packages.lock.json index 598502d..4b181b4 100644 --- a/Giants.WebApi/packages.lock.json +++ b/Giants.WebApi/packages.lock.json @@ -12,14 +12,23 @@ "System.Reflection.Emit": "4.7.0" } }, - "Microsoft.ApplicationInsights": { + "Microsoft.ApplicationInsights.AspNetCore": { "type": "Direct", - "requested": "[2.14.0, )", - "resolved": "2.14.0", - "contentHash": "j66/uh1Mb5Px/nvMwDWx73Wd9MdO2X+zsDw9JScgm5Siz5r4Cw8sTW+VCrjurFkpFqrNkj+0wbfRHDBD9b+elA==", + "requested": "[2.21.0, )", + "resolved": "2.21.0", + "contentHash": "d+7MB4YdUMc9Mtq2u6C7TritzC0eKfHkhGmlnNckDDQiOQuk9IHMPxUmPBRMm/tn+db8fI/BYno9jGxLhI+SZw==", "dependencies": { - "System.Diagnostics.DiagnosticSource": "4.6.0", - "System.Memory": "4.5.4" + "Microsoft.ApplicationInsights": "2.21.0", + "Microsoft.ApplicationInsights.DependencyCollector": "2.21.0", + "Microsoft.ApplicationInsights.EventCounterCollector": "2.21.0", + "Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0", + "Microsoft.ApplicationInsights.WindowsServer": "2.21.0", + "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0", + "Microsoft.AspNetCore.Hosting": "2.1.1", + "Microsoft.AspNetCore.Http": "2.1.22", + "Microsoft.Extensions.Configuration.Json": "3.1.0", + "Microsoft.Extensions.Logging.ApplicationInsights": "2.21.0", + "System.Text.Encodings.Web": "4.7.2" } }, "Microsoft.AspNetCore.Mvc.Versioning": { @@ -28,6 +37,25 @@ "resolved": "4.1.1", "contentHash": "ioFhRz5gm2Ny+t758Jab638eTG8Uui++klcH00EgBuU/BQbjkbFY+9xw/CkoAChIcrJsoQP2NKDYJ09zN5jR0g==" }, + "Microsoft.Identity.Web": { + "type": "Direct", + "requested": "[1.25.2, )", + "resolved": "1.25.2", + "contentHash": "AMKPBr5ldwZhv74Ks1ZmO8JHaT438pfLX2yxE00R+MhU9ZJm0VyozD0RW7kTy8U5su9pMKXQk438rI/PJ4PFpA==", + "dependencies": { + "Microsoft.AspNetCore.Authentication.JwtBearer": "5.0.12", + "Microsoft.AspNetCore.Authentication.OpenIdConnect": "5.0.12", + "Microsoft.Identity.Web.Certificate": "1.25.2", + "Microsoft.Identity.Web.Certificateless": "1.25.2", + "Microsoft.Identity.Web.TokenCache": "1.25.2", + "Microsoft.IdentityModel.Logging": "6.20.0", + "Microsoft.IdentityModel.LoggingExtensions": "6.20.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.20.0", + "Microsoft.IdentityModel.Validators": "6.20.0", + "System.IdentityModel.Tokens.Jwt": "6.20.0", + "System.Text.Encodings.Web": "5.0.1" + } + }, "NSwag.AspNetCore": { "type": "Direct", "requested": "[13.7.0, )", @@ -49,8 +77,8 @@ }, "Azure.Core": { "type": "Transitive", - "resolved": "1.4.1", - "contentHash": "6LbGLiZwlU6SfOaINCfrQ+f91bRWZ8XvB90Qfm69x1t3z+5D4jmXnQiuPYPZcgtxFjPKA3IwyHGuDZRkSo1Urg==", + "resolved": "1.6.0", + "contentHash": "kI4m2NsODPOrxo0OoKjk6B3ADbdovhDQIEmI4039upjjZKRaewVLx/Uz4DfRa/NtnIRZQPUALe1yvdHWAoRt4w==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.0.0", "System.Buffers": "4.5.0", @@ -61,6 +89,42 @@ "System.Threading.Tasks.Extensions": "4.5.2" } }, + "Azure.Identity": { + "type": "Transitive", + "resolved": "1.3.0", + "contentHash": "l1SYfZKOFBuUFG7C2SWHmJcrQQaiXgBdVCycx4vcZQkC6efDVt7mzZ5pfJAFEJDBUq7mjRQ0RPq9ZDGdSswqMg==", + "dependencies": { + "Azure.Core": "1.6.0", + "Microsoft.Identity.Client": "4.22.0", + "Microsoft.Identity.Client.Extensions.Msal": "2.16.5", + "System.Memory": "4.5.3", + "System.Security.Cryptography.ProtectedData": "4.5.0", + "System.Text.Json": "4.6.0", + "System.Threading.Tasks.Extensions": "4.5.2" + } + }, + "Azure.Security.KeyVault.Certificates": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "I+irkjO1JBzJWYBLhW835/b7GllxkjMbQwrirhxUJsf6FQnH+eIGin4T/jBLgyuu1zPsn2AxiUFju6Shb/uiNA==", + "dependencies": { + "Azure.Core": "1.0.2", + "System.Memory": "4.5.3", + "System.Text.Json": "4.6.0", + "System.Threading.Tasks.Extensions": "4.5.2" + } + }, + "Azure.Security.KeyVault.Secrets": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "SK4XTPEaXI5UTdtSkr8TN4ZKnvazNHhybnnkxHgOyRAhV9ObcIjbrNlhS4ZeR8XtI+HidL+v/WIIVfR1+jKB8Q==", + "dependencies": { + "Azure.Core": "1.0.2", + "System.Memory": "4.5.3", + "System.Text.Json": "4.6.0", + "System.Threading.Tasks.Extensions": "4.5.2" + } + }, "Azure.Storage.Blobs": { "type": "Transitive", "resolved": "12.5.1", @@ -79,6 +143,78 @@ "Azure.Core": "1.4.1" } }, + "Microsoft.ApplicationInsights": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "btZEDWAFNo9CoYliMCriSMTX3ruRGZTtYw4mo2XyyfLlowFicYVM2Xszi5evDG95QRYV7MbbH3D2RqVwfZlJHw==", + "dependencies": { + "System.Diagnostics.DiagnosticSource": "5.0.0" + } + }, + "Microsoft.ApplicationInsights.DependencyCollector": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "XArm5tBEUdWs05eDKxnsUUQBduJ45DEQOMnpL7wNWxBpgxn+dbl8nObA2jzExbQhbw6P74lc/1f+RdV4iPaOgg==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.21.0", + "System.Diagnostics.DiagnosticSource": "5.0.0" + } + }, + "Microsoft.ApplicationInsights.EventCounterCollector": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "MfF9IKxx9UhaYHVFQ1VKw0LYvBhkjZtPNUmCTYlGws0N7D2EaupmeIj/EWalqP47sQRedR9+VzARsONcwH8OCA==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.21.0" + } + }, + "Microsoft.ApplicationInsights.PerfCounterCollector": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "RcckSVkfu+NkDie6/HyM6AVLHmTMVZrUrYnDeJdvRByOc2a+DqTM6KXMtsTHW/5+K7DT9QK5ZrZdi0YbBW8PVA==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.21.0", + "Microsoft.Extensions.Caching.Memory": "1.0.0", + "System.Diagnostics.PerformanceCounter": "4.7.0" + } + }, + "Microsoft.ApplicationInsights.WindowsServer": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "Xbhss7dqbKyE5PENm1lRA9oxzhKEouKGMzgNqJ9xTHPZiogDwKVMK02qdbVhvaXKf9zG8RvvIpM5tnGR5o+Onw==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.21.0", + "Microsoft.ApplicationInsights.DependencyCollector": "2.21.0", + "Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0", + "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0", + "System.Diagnostics.DiagnosticSource": "5.0.0" + } + }, + "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "7D4oq+9YyagEPx+0kNNOXdG6c7IDM/2d+637nAYKFqdWhNN0IqHZEed0DuG28waj7hBSLM9lBO+B8qQqgfE4rw==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.21.0", + "System.IO.FileSystem.AccessControl": "4.7.0" + } + }, + "Microsoft.AspNetCore.Authentication.JwtBearer": { + "type": "Transitive", + "resolved": "5.0.12", + "contentHash": "3JwsAApGFKFBVvlV8vMNdF04Mb8zPuHT5q8sunwNTbaN4JtjXLVGKAyUCy+I1JeqP+3EKfZxe3wMj4fVEOLKlA==", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.7.1" + } + }, + "Microsoft.AspNetCore.Authentication.OpenIdConnect": { + "type": "Transitive", + "resolved": "5.0.12", + "contentHash": "YtPrKHTie1TZeqnlbIKAEU51alFD+SCvTIu2L2no+UGStU5RzEqRuJvVfe+aP9tSrJE+Wyy+YdUqZLtA9QfkHg==", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.7.1" + } + }, "Microsoft.AspNetCore.Authorization": { "type": "Transitive", "resolved": "1.0.2", @@ -89,82 +225,108 @@ "System.Security.Claims": "4.0.1" } }, + "Microsoft.AspNetCore.Cryptography.Internal": { + "type": "Transitive", + "resolved": "5.0.8", + "contentHash": "giHheyNLOb+cAHpb8b0GhaS0xJ+hAIIDSyWPe5aOPwpgctsjOPRKFyn/268xv+zBVuEtyRJJEnBUlkOVzyIpZA==" + }, + "Microsoft.AspNetCore.DataProtection": { + "type": "Transitive", + "resolved": "5.0.8", + "contentHash": "wCMdfuKA+ePcB4nEDau5tNhhhC5NFa2LEXoRhk2Xaot13FFlyKA4t5UzIyV/OnAfB/bqbAIvChJD+biWY7u5SA==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.Internal": "5.0.8", + "Microsoft.AspNetCore.DataProtection.Abstractions": "5.0.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Win32.Registry": "5.0.0", + "System.Security.Cryptography.Xml": "5.0.0" + } + }, + "Microsoft.AspNetCore.DataProtection.Abstractions": { + "type": "Transitive", + "resolved": "5.0.8", + "contentHash": "ZI9S2NGjuOKXN3PxJcF8EKVwd1cqpWyUSqiVoH8gqq5tlHaXULwPmoR0DBOFON4sEFETRWI69f5RQ3tJWw205A==" + }, + "Microsoft.AspNetCore.Hosting": { + "type": "Transitive", + "resolved": "2.1.1", + "contentHash": "MqYc0DUxrhAPnb5b4HFspxsoJT+gJlLsliSxIgovf4BsbmpaXQId0/pDiVzLuEbmks2w1/lRfY8w0lQOuK1jQQ==", + "dependencies": { + "Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1", + "Microsoft.AspNetCore.Http": "2.1.1", + "Microsoft.AspNetCore.Http.Extensions": "2.1.1", + "Microsoft.Extensions.Configuration": "2.1.1", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.1.1", + "Microsoft.Extensions.Configuration.FileExtensions": "2.1.1", + "Microsoft.Extensions.DependencyInjection": "2.1.1", + "Microsoft.Extensions.FileProviders.Physical": "2.1.1", + "Microsoft.Extensions.Hosting.Abstractions": "2.1.1", + "Microsoft.Extensions.Logging": "2.1.1", + "Microsoft.Extensions.Options": "2.1.1", + "System.Diagnostics.DiagnosticSource": "4.5.0", + "System.Reflection.Metadata": "1.6.0" + } + }, "Microsoft.AspNetCore.Hosting.Abstractions": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "CSVd9h1TdWDT2lt62C4FcgaF285J4O3MaOqTVvc7xP+3bFiwXcdp6qEd+u1CQrdJ+xJuslR+tvDW7vWQ/OH5Qw==", + "resolved": "2.1.1", + "contentHash": "76cKcp2pWhvdV2TXTqMg/DyW7N6cDzTEhtL8vVWFShQN+Ylwv3eO/vUQr2BS3Hz4IZHEpL+FOo2T+MtymHDqDQ==", "dependencies": { - "Microsoft.AspNetCore.Hosting.Server.Abstractions": "1.0.2", - "Microsoft.AspNetCore.Http.Abstractions": "1.0.2", - "Microsoft.Extensions.Configuration.Abstractions": "1.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.2", - "Microsoft.Extensions.FileProviders.Abstractions": "1.0.1", - "Microsoft.Extensions.Logging.Abstractions": "1.0.2" + "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.1.1", + "Microsoft.AspNetCore.Http.Abstractions": "2.1.1", + "Microsoft.Extensions.Hosting.Abstractions": "2.1.1" } }, "Microsoft.AspNetCore.Hosting.Server.Abstractions": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "6ZtFh0huTlrUl72u9Vic0icCVIQiEx7ULFDx3P7BpOI97wjb0GAXf8B4m9uSpSGf0vqLEKFlkPbvXF0MXXEzhw==", + "resolved": "2.1.1", + "contentHash": "+vD7HJYzAXNq17t+NgRkpS38cxuAyOBu8ixruOiA3nWsybozolUdALWiZ5QFtGRzajSLPFA2YsbO3NPcqoUwcw==", "dependencies": { - "Microsoft.AspNetCore.Http.Features": "1.0.2", - "Microsoft.Extensions.Configuration.Abstractions": "1.0.2" + "Microsoft.AspNetCore.Http.Features": "2.1.1", + "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" } }, "Microsoft.AspNetCore.Http": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "w9AJMakVIuP0KhLe3pdwWNDSWhwDEjfRyai907iGmia0a5O3OBJw9JMhpenVHHeXAARwLi/zVn9oVwd1RFKzTA==", + "resolved": "2.1.22", + "contentHash": "+Blk++1JWqghbl8+3azQmKhiNZA5wAepL9dY2I6KVmu2Ri07MAcvAVC888qUvO7yd7xgRgZOMfihezKg14O/2A==", "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "1.0.2", - "Microsoft.AspNetCore.WebUtilities": "1.0.2", - "Microsoft.Extensions.ObjectPool": "1.0.1", - "Microsoft.Extensions.Options": "1.0.2", - "Microsoft.Net.Http.Headers": "1.0.2", - "System.Buffers": "4.0.0", - "System.Threading": "4.0.11" + "Microsoft.AspNetCore.Http.Abstractions": "2.1.1", + "Microsoft.AspNetCore.WebUtilities": "2.1.1", + "Microsoft.Extensions.ObjectPool": "2.1.1", + "Microsoft.Extensions.Options": "2.1.1", + "Microsoft.Net.Http.Headers": "2.1.1" } }, "Microsoft.AspNetCore.Http.Abstractions": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "peJqc7BgYwhTzOIfFHX3/esV6iOXf17Afekh6mCYuUD3aWyaBwQuWYaKLR+RnjBEWaSzpCDgfCMMp5Y3LUXsiA==", + "resolved": "2.1.1", + "contentHash": "kQUEVOU4loc8CPSb2WoHFTESqwIa8Ik7ysCBfTwzHAd0moWovc9JQLmhDIHlYLjHbyexqZAlkq/FPRUZqokebw==", "dependencies": { - "Microsoft.AspNetCore.Http.Features": "1.0.2", - "System.Globalization.Extensions": "4.0.1", - "System.Linq.Expressions": "4.1.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Runtime.InteropServices": "4.1.0", - "System.Text.Encodings.Web": "4.0.0" + "Microsoft.AspNetCore.Http.Features": "2.1.1", + "System.Text.Encodings.Web": "4.5.0" } }, "Microsoft.AspNetCore.Http.Extensions": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "itaTI4YSVsLjvmpInhQ3b6Xs1q+CxJT/3z3q5G6hLuLkq30vvWEbM40NfzUzvwzPCEiXXlp+nJTEK2wgoJa70Q==", + "resolved": "2.1.1", + "contentHash": "ncAgV+cqsWSqjLXFUTyObGh4Tr7ShYYs3uW8Q/YpRwZn7eLV7dux5Z6GLY+rsdzmIHiia3Q2NWbLULQi7aziHw==", "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "1.0.2", - "Microsoft.Extensions.FileProviders.Abstractions": "1.0.1", - "Microsoft.Net.Http.Headers": "1.0.2", - "System.Buffers": "4.0.0", - "System.IO.FileSystem": "4.0.1" + "Microsoft.AspNetCore.Http.Abstractions": "2.1.1", + "Microsoft.Extensions.FileProviders.Abstractions": "2.1.1", + "Microsoft.Net.Http.Headers": "2.1.1", + "System.Buffers": "4.5.0" } }, "Microsoft.AspNetCore.Http.Features": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "9l/Y/CO3q8tET3w+dDiByREH8lRtpd14cMevwMV5nw2a/avJ5qcE3VVIE5U5hesec2phTT6udQEgwjHmdRRbig==", + "resolved": "2.1.1", + "contentHash": "VklZ7hWgSvHBcDtwYYkdMdI/adlf7ebxTZ9kdzAhX+gUs5jSHE9mZlTamdgf9miSsxc1QjNazHXTDJdVPZKKTw==", "dependencies": { - "Microsoft.Extensions.Primitives": "1.0.1", - "System.Collections": "4.0.11", - "System.ComponentModel": "4.0.1", - "System.Linq": "4.1.0", - "System.Net.Primitives": "4.0.11", - "System.Net.WebSockets": "4.0.0", - "System.Runtime.Extensions": "4.1.0", - "System.Security.Claims": "4.0.1", - "System.Security.Cryptography.X509Certificates": "4.1.0", - "System.Security.Principal": "4.0.1" + "Microsoft.Extensions.Primitives": "2.1.1" } }, "Microsoft.AspNetCore.JsonPatch": { @@ -274,15 +436,11 @@ }, "Microsoft.AspNetCore.WebUtilities": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "xWCqsnZLt0nSoiyw3x250k7PzV/ub1dtjZfLUCy89gTdAHF3jWivnzN+Mw5+LB8EYwEA4WY+u5l5s6innImJTw==", + "resolved": "2.1.1", + "contentHash": "PGKIZt4+412Z/XPoSjvYu/QIbTxcAQuEFNoA1Pw8a9mgmO0ZhNBmfaNyhgXFf7Rq62kP0tT/2WXpxdcQhkFUPA==", "dependencies": { - "Microsoft.Extensions.Primitives": "1.0.1", - "System.Buffers": "4.0.0", - "System.Collections": "4.0.11", - "System.IO": "4.1.0", - "System.IO.FileSystem": "4.0.1", - "System.Text.Encodings.Web": "4.0.0" + "Microsoft.Net.Http.Headers": "2.1.1", + "System.Text.Encodings.Web": "4.5.0" } }, "Microsoft.Azure.Cosmos": { @@ -332,21 +490,22 @@ }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "Uj/0fmq7FWi7B7RfLkn2UJE1SThJ60mOlChx9P5nRjP/EbeYNm+LoyiOr6yPhDsArwHttKyun18TXXJ2C9EE/g==", + "resolved": "5.0.0", + "contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==", "dependencies": { - "Microsoft.Extensions.Primitives": "3.1.7" + "Microsoft.Extensions.Primitives": "5.0.0" } }, "Microsoft.Extensions.Caching.Memory": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "EvNcJWk0KKSqyXefiUTgF5D94r40rmmtAvo5/yhy7u5/CtRjqyN7wQBSKz2ezWlu5vbuMGyaMktANgkk4kEkaw==", + "resolved": "5.0.0", + "contentHash": "/1qPCleFOkJe0O+xmFqCNLFYQZTJz965sVw8CUB/BQgsApBwzAUsL2BUkDvQW+geRUVTXUS9zLa0pBjC2VJ1gA==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "3.1.7", - "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", - "Microsoft.Extensions.Logging.Abstractions": "3.1.7", - "Microsoft.Extensions.Options": "3.1.7" + "Microsoft.Extensions.Caching.Abstractions": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" } }, "Microsoft.Extensions.Configuration": { @@ -359,32 +518,50 @@ }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "WJEbrrIgly95D9rM8Gwr4w8sbYla6/iOcCZ0UE7+Qg/Q8NnQJwAJ60Lq1A26zbNE8Fm1fkbGU90LDl8e+BoRSQ==", + "resolved": "5.0.0", + "contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==", "dependencies": { - "Microsoft.Extensions.Primitives": "3.1.7" + "Microsoft.Extensions.Primitives": "5.0.0" } }, - "Microsoft.Extensions.Configuration.Binder": { + "Microsoft.Extensions.Configuration.EnvironmentVariables": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "FYQ64i7DwYO6XDdOFi+VkoRDDzel570I+X/vTYt6mVJWNj1SAstXwZ71P5d6P2Cei+cT950NiScOwj4F8EUeTA==", + "resolved": "2.1.1", + "contentHash": "6xMxFIfKL+7J/jwlk8zV8I61sF3+DRG19iKQxnSfYQU+iMMjGbcWNCHFF/3MHf3o4sTZPZ8D6Io+GwKFc3TIZA==", "dependencies": { - "Microsoft.Extensions.Configuration": "3.1.7" + "Microsoft.Extensions.Configuration": "2.1.1" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "OjRJIkVxUFiVkr9a39AqVThft9QHoef4But5pDCydJOXJ4D/SkmzuW1tm6J2IXynxj6qfeAz9QTnzQAvOcGvzg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "3.1.0", + "Microsoft.Extensions.FileProviders.Physical": "3.1.0" + } + }, + "Microsoft.Extensions.Configuration.Json": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "gBpBE1GoaCf1PKYC7u0Bd4mVZ/eR2bnOvn7u8GBXEy3JGar6sC3UVpVfTB9w+biLPtzcukZynBG9uchSBbLTNQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "3.1.0", + "Microsoft.Extensions.Configuration.FileExtensions": "3.1.0" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "yp38AFc5tJQZkjINjXBcxq+dANU06lo27D84duitZthtRPsgKJL87uf9RWRsDdRsWd+kXflmdMWFLKFjyKx6Pw==", + "resolved": "5.0.0", + "contentHash": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "oKL2yNtTN1/cOp+cbdyv5TeLzO+GkO9B3fvbcPzKWTNCkDoH3ccYS3FWC1p4KSYe9frW4WsyfSTeM8X+xftOig==" + "resolved": "5.0.0", + "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", @@ -400,10 +577,10 @@ }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "nasMSdDlIIBcKgGVHoZdFSmfUY1bI0zkvfZTsWLlEFcMCVD0fzcgsVlkeZTzPLJV0w7Uwq3okOgMWpU1nFEhxg==", + "resolved": "5.0.0", + "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "3.1.7" + "Microsoft.Extensions.Primitives": "5.0.0" } }, "Microsoft.Extensions.FileProviders.Embedded": { @@ -415,15 +592,28 @@ "System.Runtime.Extensions": "4.1.0" } }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "KsvgrYp2fhNXoD9gqSu8jPK9Sbvaa7SqNtsLqHugJkCwFmgRvdz76z6Jz2tlFlC7wyMTZxwwtRF8WAorRQWTEA==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "3.1.0", + "Microsoft.Extensions.FileSystemGlobbing": "3.1.0" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "tK5HZOmVv0kUYkonMjuSsxR0CBk+Rd/69QU3eOMv9FvODGZ2d0SR+7R+n8XIgBcCCoCHJBSsI4GPRaoN3Le4rA==" + }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "4j6lSyPJF2emznd7Y4nZp8UbVyhe/defMPyFBV+YfINbAgJ3HgUPWp2QdsO87WOzWjlXTU4ZFwL2fuuMbwdR5g==", + "resolved": "5.0.0", + "contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "3.1.7", - "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", - "Microsoft.Extensions.FileProviders.Abstractions": "3.1.7", - "Microsoft.Extensions.Logging.Abstractions": "3.1.7" + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" } }, "Microsoft.Extensions.Http": { @@ -438,38 +628,41 @@ }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "p68Hvr8S+t+bGUeXRX6wcjlkK961w0YRXWy8O6pkTsucdNpnzB8mwLIgcnQ7oj0biw8S1Ftv4PREzPIwo1UwpA==", + "resolved": "5.0.0", + "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==", "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "3.1.7", - "Microsoft.Extensions.DependencyInjection": "3.1.7", - "Microsoft.Extensions.Logging.Abstractions": "3.1.7", - "Microsoft.Extensions.Options": "3.1.7" + "Microsoft.Extensions.DependencyInjection": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "oD7LQbMuaqq/yAz8PKX0hl4+H/vDFTQHo8rxbKB36P1/bG8FG7JUVKBoHkSt1MaJUtgyiHrH1AlAhaucKUKyEg==" + "resolved": "5.0.0", + "contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w==" + }, + "Microsoft.Extensions.Logging.ApplicationInsights": { + "type": "Transitive", + "resolved": "2.21.0", + "contentHash": "tjzErt5oaLs1caaThu6AbtJuHH0oIGDG/rYCXDruHVGig3m8MyCDuwDsGQwzimY7g4aFyLOKfHc3unBN2G96gw==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.21.0", + "Microsoft.Extensions.Logging": "2.1.1" + } }, "Microsoft.Extensions.ObjectPool": { "type": "Transitive", - "resolved": "1.0.1", - "contentHash": "pJMOnxuqmG37OjccfvtqVoo3bQGoN+0EJUzzp7+2uxSdioER82caAk6Yi/z5aysapn5XENNIIa7SaYnYKSS69A==", - "dependencies": { - "System.Diagnostics.Debug": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } + "resolved": "2.1.1", + "contentHash": "SErON45qh4ogDp6lr6UvVmFYW0FERihW+IQ+2JyFv1PUyWktcJytFaWH5zarufJvZwhci7Rf1IyGXr9pVEadTw==" }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "O5TXu1D79hbaZuKCIK4mswSP86MtmiIQjuOZnVhPdbjOVILsoQwZUtnmU2xRfX1E0QWuFEI0umhw3mDDn6dNHw==", + "resolved": "5.0.0", + "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", - "Microsoft.Extensions.Primitives": "3.1.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" } }, "Microsoft.Extensions.PlatformAbstractions": { @@ -487,8 +680,8 @@ }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "3.1.7", - "contentHash": "sa17s3vDAXTuIVGxuJcK713i0B0iaUoiwY4Sl2SLHhMqM8snznn0YVGiZAVkoKEUFWjvIg1Z/JNmAicBamI4mg==" + "resolved": "5.0.0", + "contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==" }, "Microsoft.Extensions.WebEncoders": { "type": "Transitive", @@ -500,19 +693,128 @@ "System.Text.Encodings.Web": "4.0.0" } }, + "Microsoft.Identity.Client": { + "type": "Transitive", + "resolved": "4.42.0", + "contentHash": "BQeEI4mKDJaludUZwZXfmAs7y1Lhkbm81KDg4Q3JWY8tXi5S7vFFJ4+xcrZtEEuqtDnyhP+Yx0u+1PeOALuTGA==" + }, + "Microsoft.Identity.Client.Extensions.Msal": { + "type": "Transitive", + "resolved": "2.16.5", + "contentHash": "VlGUZEpF8KP/GCfFI59sdE0WA0o9quqwM1YQY0dSp6jpGy5EOBkureaybLfpwCuYUUjQbLkN2p7neUIcQCfbzA==", + "dependencies": { + "Microsoft.Identity.Client": "4.22.0", + "System.Security.Cryptography.ProtectedData": "4.5.0" + } + }, + "Microsoft.Identity.Web.Certificate": { + "type": "Transitive", + "resolved": "1.25.2", + "contentHash": "XAiRKbc7hmwOgxb7B5ufUKLJyP44tvXgFpSN5ppgdqZl+IGbaL+AOnjXGAhTq2MC1J379ArBrg+wCIXHzcpv5w==", + "dependencies": { + "Azure.Identity": "1.3.0", + "Azure.Security.KeyVault.Certificates": "4.1.0", + "Azure.Security.KeyVault.Secrets": "4.1.0", + "System.Text.Encodings.Web": "5.0.1" + } + }, + "Microsoft.Identity.Web.Certificateless": { + "type": "Transitive", + "resolved": "1.25.2", + "contentHash": "hqLe/10QqZr+/pByoOIPj3mAzAJDb5gKVvPdbfgNc+aYAr2Zff27LiOPG1XIEAKBzt12kt2LR7htDXv7eBQLiA==", + "dependencies": { + "Azure.Identity": "1.3.0", + "System.Text.Encodings.Web": "4.7.2" + } + }, + "Microsoft.Identity.Web.TokenCache": { + "type": "Transitive", + "resolved": "1.25.2", + "contentHash": "CkiQRFBNflNDpojiznQ2gybup/ZnieObi5kRrc0yfLgLvYU54AP6PD1yo8v6mzWJnf+/dEYeMJNcpaXm9C7fIg==", + "dependencies": { + "Microsoft.AspNetCore.DataProtection": "5.0.8", + "Microsoft.Extensions.Caching.Memory": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Identity.Client": "4.42.0", + "System.Security.Cryptography.Xml": "6.0.1", + "System.Text.Encodings.Web": "5.0.1" + } + }, + "Microsoft.IdentityModel.Abstractions": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "FHBdt4gOc6UhrCXvzai0W0/n9ZKjdm/glMSBT145/N4f2HEYNvxgH+GBdmN2rRL4p3IwOyLAUaWiN8Ofomg8EQ==" + }, + "Microsoft.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "ov/c3pdHerzipMDMc4zfPAYLeRmHjpnAFXufSsvZWDs9SsZmyMpcnnXBXBOa8MPnoKDOFzUGocyMs9EsJFQT4w==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "6.20.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "KQ8rcHvRO7bmByzO1VL8brSJQECpI6c7ktyQmGpF9YcxpkuMN2UqEkh7a2HnAHNksSsEq7T3CIXFF8p9OwLu5A==", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "6.20.0" + } + }, + "Microsoft.IdentityModel.LoggingExtensions": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "IcVgpXQW7w9xjimvoJFWavhUmI4aJXH71Wia5lMh72fLYZ3AnAmNtJjGW3Ue8bPYGHcvGum9dfJRHWA4XYHLiA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "Microsoft.IdentityModel.Abstractions": "6.20.0" + } + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "OSvIX92O69VZ8ONkDKf4/qBW3PsV09au3k9vD+4aSY2eLDD5fUvWlCZsUcZe6+L6e3qOVtk6h9+oBH77BlEKJg==", + "dependencies": { + "Microsoft.IdentityModel.Logging": "6.20.0", + "Microsoft.IdentityModel.Tokens": "6.20.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "vWzemekJ3ZacLl6CPCgL08OKX7tvnPmEW+WuhUzhab6TTJfyv4nnW9soY8TazjnZN45JS20Z05UwhS9nzbhSJg==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "6.20.0", + "System.IdentityModel.Tokens.Jwt": "6.20.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "M0DEpe7298FTmISCjjzNHFwteYdFxYbjhR8TZmcKSlUCt3lfmIz8/RqzGH7hX6xmB2V8/7XkXpf7OXhvnoEfAg==", + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.20.0", + "System.Security.Cryptography.Cng": "4.5.0" + } + }, + "Microsoft.IdentityModel.Validators": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "Njrn9lnGdVq26CtChr+VrEg9OypvluhM6JP6vOQHBL8DhTrx6B37/mHr65C5ozSroxyhnqRTnXeIRB0CCdjW7w==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "6.20.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.20.0", + "System.IdentityModel.Tokens.Jwt": "6.20.0" + } + }, "Microsoft.Net.Http.Headers": { "type": "Transitive", - "resolved": "1.0.2", - "contentHash": "Nym2m4l2kb5jQRl5YlP1nAxneqpRfknFLy5PBKMYiC4kR/gDIQ4fi4rU9u7UdjEXMVgfWDIPpijx9YnSDEbOHw==", + "resolved": "2.1.1", + "contentHash": "lPNIphl8b2EuhOE9dMH6EZDmu7pS882O+HMi5BJNsigxHaWlBrYxZHFZgE18cyaPp6SSZcTkKkuzfjV/RRQKlA==", "dependencies": { - "System.Buffers": "4.0.0", - "System.Collections": "4.0.11", - "System.Diagnostics.Contracts": "4.0.1", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime.Extensions": "4.1.0", - "System.Text.Encoding": "4.0.11" + "Microsoft.Extensions.Primitives": "2.1.1", + "System.Buffers": "4.5.0" } }, "Microsoft.NETCore.Platforms": { @@ -535,6 +837,15 @@ "System.Runtime": "4.3.0" } }, + "Microsoft.Win32.Registry": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", "resolved": "4.7.0", @@ -895,14 +1206,6 @@ "System.Text.Encoding": "4.3.0" } }, - "System.Diagnostics.Contracts": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "HvQQjy712vnlpPxaloZYkuE78Gn353L0SJLJVeLcNASeg9c4qla2a1Xq8I7B3jZoDzKPtHTkyVO7AZ5tpeQGuA==", - "dependencies": { - "System.Runtime": "4.1.0" - } - }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", @@ -915,8 +1218,19 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "mbBgoR0rRfl2uimsZ2avZY8g7Xnh1Mza0rJZLPcxqiMWlkGukjmRkuMJ/er+AhQuiRIh80CR/Hpeztr80seV5g==" + "resolved": "5.0.0", + "contentHash": "tCQTzPsGZh/A9LhhA6zrqCRV4hOHsK90/G7q3Khxmn6tnB1PuNU0cRaKANP2AWcF9bn0zsuOoZOSrHuJk6oNBA==" + }, + "System.Diagnostics.PerformanceCounter": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "kE9szT4i3TYT9bDE/BPfzg9/BL6enMiZlcUmnUEBrhRtxWvurKoa8qhXkLTRhrxMzBqaDleWlRfIPE02tulU+w==", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.Win32.Registry": "4.7.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + } }, "System.Diagnostics.Tools": { "type": "Transitive", @@ -969,6 +1283,11 @@ "System.Threading": "4.0.11" } }, + "System.Formats.Asn1": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA==" + }, "System.Globalization": { "type": "Transitive", "resolved": "4.3.0", @@ -1003,6 +1322,15 @@ "System.Runtime.InteropServices": "4.3.0" } }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "6.20.0", + "contentHash": "yallJBcQCF34rkf4Ebakou/gCT74XtlgvR8q3M96S1uP9X/XgLp9sjQ6wJRewYLeBYGgi4o5WSY/XaI9aQjRXw==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "6.20.0", + "Microsoft.IdentityModel.Tokens": "6.20.0" + } + }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", @@ -1068,6 +1396,15 @@ "System.Threading.Tasks": "4.3.0" } }, + "System.IO.FileSystem.AccessControl": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "vMToiarpU81LR1/KZtnT7VDPvqAZfw9oOS5nY6pPP78nGYz3COLsQH3OfzbR+SjTgltd31R6KmKklz/zDpTmzw==", + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.0" + } + }, "System.IO.FileSystem.Primitives": { "type": "Transitive", "resolved": "4.3.0", @@ -1114,8 +1451,8 @@ }, "System.Memory": { "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" }, "System.Net.Http": { "type": "Transitive", @@ -1174,17 +1511,6 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Net.WebSockets": { - "type": "Transitive", - "resolved": "4.0.0", - "contentHash": "2KJo8hir6Edi9jnMDAMhiJoI691xRBmKcbNpwjrvpIMOCTYOtBpSsSEGBxBDV7PKbasJNaFp1+PZz1D7xS41Hg==", - "dependencies": { - "Microsoft.Win32.Primitives": "4.0.1", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Threading.Tasks": "4.0.11" - } - }, "System.Numerics.Vectors": { "type": "Transitive", "resolved": "4.5.0", @@ -1251,6 +1577,11 @@ "System.Runtime": "4.3.0" } }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" + }, "System.Reflection.Primitives": { "type": "Transitive", "resolved": "4.3.0", @@ -1385,12 +1716,8 @@ }, "System.Security.AccessControl": { "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "3.1.0", - "System.Security.Principal.Windows": "4.7.0" - } + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" }, "System.Security.Claims": { "type": "Transitive", @@ -1429,21 +1756,8 @@ }, "System.Security.Cryptography.Cng": { "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0" - } + "resolved": "4.5.0", + "contentHash": "WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==" }, "System.Security.Cryptography.Csp": { "type": "Transitive", @@ -1504,6 +1818,14 @@ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, + "System.Security.Cryptography.Pkcs": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "ynmbW2GjIGg9K1wXmVIRs4IlyDolf0JXNpzFQ8JCVgwM+myUC2JeUggl2PwQig2PNVMegKmN1aAx7WPQ8tI3vA==", + "dependencies": { + "System.Formats.Asn1": "6.0.0" + } + }, "System.Security.Cryptography.Primitives": { "type": "Transitive", "resolved": "4.3.0", @@ -1555,6 +1877,15 @@ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, + "System.Security.Cryptography.Xml": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "5e5bI28T0x73AwTsbuFP4qSRzthmU2C0Gqgg3AZ3KTxmSyA+Uhk31puA3srdaeWaacVnHhLdJywCzqOiEpbO/w==", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Cryptography.Pkcs": "6.0.1" + } + }, "System.Security.Permissions": { "type": "Transitive", "resolved": "4.7.0", @@ -1574,8 +1905,8 @@ }, "System.Security.Principal.Windows": { "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==" + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" }, "System.Text.Encoding": { "type": "Transitive", @@ -1600,17 +1931,8 @@ }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "4.0.0", - "contentHash": "TWZnuiJgPDAEEUfobD7njXvSVR2Toz+jvKWds6yL4oSztmKQfnWzucczjzA+6Dv1bktBdY71sZW1YN0X6m9chQ==", - "dependencies": { - "System.Diagnostics.Debug": "4.0.11", - "System.IO": "4.1.0", - "System.Reflection": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } + "resolved": "5.0.1", + "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==" }, "System.Text.Json": { "type": "Transitive",