diff --git a/README.md b/README.md index d43366f93..a2d3d4350 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS fee - [Download/Installation](https://sonarr.tv/#downloads-v3) - [FAQ](https://wiki.servarr.com/sonarr/faq) - [Wiki](https://wiki.servarr.com/Sonarr) -- [v4 Beta API Documentation](https://sonarr.tv/docs/api) +- [API Documentation](https://sonarr.tv/docs/api) - [Donate](https://sonarr.tv/donate) ## Support diff --git a/frontend/src/Helpers/Hooks/useApiQuery.ts b/frontend/src/Helpers/Hooks/useApiQuery.ts index 0cc1196b4..4d7c2c01b 100644 --- a/frontend/src/Helpers/Hooks/useApiQuery.ts +++ b/frontend/src/Helpers/Hooks/useApiQuery.ts @@ -35,7 +35,7 @@ interface QueryOptions { | undefined; } -const apiRoot = window.Sonarr.apiRoot; +const apiRoot = '/api/v5'; // window.Sonarr.apiRoot; function useApiQuery(options: QueryOptions) { const { path, headers } = useMemo(() => { diff --git a/src/NzbDrone.Host/Bootstrap.cs b/src/NzbDrone.Host/Bootstrap.cs index 165617ad8..487fa4c68 100644 --- a/src/NzbDrone.Host/Bootstrap.cs +++ b/src/NzbDrone.Host/Bootstrap.cs @@ -39,6 +39,7 @@ namespace NzbDrone.Host "Sonarr.Core", "Sonarr.SignalR", "Sonarr.Api.V3", + "Sonarr.Api.V5", "Sonarr.Http" }; diff --git a/src/NzbDrone.Host/Sonarr.Host.csproj b/src/NzbDrone.Host/Sonarr.Host.csproj index 916085933..c0d18739b 100644 --- a/src/NzbDrone.Host/Sonarr.Host.csproj +++ b/src/NzbDrone.Host/Sonarr.Host.csproj @@ -1,27 +1,28 @@  - - net8.0 - Library - - - - - - - - - - - - - - - - - - - ..\Libraries\Interop.NetFwTypeLib.dll - True - - + + net8.0 + Library + + + + + + + + + + + + + + + + + + + + ..\Libraries\Interop.NetFwTypeLib.dll + True + + diff --git a/src/NzbDrone.Host/Startup.cs b/src/NzbDrone.Host/Startup.cs index ecf50e427..979e8605d 100644 --- a/src/NzbDrone.Host/Startup.cs +++ b/src/NzbDrone.Host/Startup.cs @@ -25,6 +25,7 @@ using NzbDrone.Host.AccessControl; using NzbDrone.Http.Authentication; using NzbDrone.SignalR; using Sonarr.Api.V3.System; +using Sonarr.Api.V5.Series; using Sonarr.Http; using Sonarr.Http.Authentication; using Sonarr.Http.ClientSchema; @@ -87,7 +88,10 @@ namespace NzbDrone.Host { options.ReturnHttpNotAcceptable = true; }) + + // Register all controllers from the API and HTTP projects .AddApplicationPart(typeof(SystemController).Assembly) + .AddApplicationPart(typeof(SeriesLookupController).Assembly) .AddApplicationPart(typeof(StaticResourceController).Assembly) .AddJsonOptions(options => { @@ -109,6 +113,18 @@ namespace NzbDrone.Host } }); + c.SwaggerDoc("v5", new OpenApiInfo + { + Version = "5.0.0", + Title = "Sonarr", + Description = "Sonarr API docs - The v5 API docs apply to Sonarr v5 only.", + License = new OpenApiLicense + { + Name = "GPL-3.0", + Url = new Uri("https://github.com/Sonarr/Sonarr/blob/develop/LICENSE") + } + }); + var apiKeyHeader = new OpenApiSecurityScheme { Name = "X-Api-Key", @@ -265,7 +281,7 @@ namespace NzbDrone.Host app.UseMiddleware(); app.UseMiddleware(); app.UseMiddleware(); - app.UseMiddleware(new List { "/api/v3/command" }); + app.UseMiddleware(new List { "/api/v3/command", "/api/v5/command" }); app.UseWebSockets(); diff --git a/src/Sonarr.Api.V5/Series/AlternateTitleResource.cs b/src/Sonarr.Api.V5/Series/AlternateTitleResource.cs new file mode 100644 index 000000000..481527c0a --- /dev/null +++ b/src/Sonarr.Api.V5/Series/AlternateTitleResource.cs @@ -0,0 +1,35 @@ +using NzbDrone.Common.Extensions; +using NzbDrone.Core.DataAugmentation.Scene; + +namespace Sonarr.Api.V5.Series; + +public class AlternateTitleResource +{ + public string? Title { get; set; } + public int? SeasonNumber { get; set; } + public int? SceneSeasonNumber { get; set; } + public string? SceneOrigin { get; set; } + public string? Comment { get; set; } +} + +public static class AlternateTitleResourceMapper +{ + public static AlternateTitleResource ToResource(this SceneMapping sceneMapping) + { + var comment = sceneMapping.Comment; + + if (comment.IsNullOrWhiteSpace() && sceneMapping.FilterRegex.IsNotNullOrWhiteSpace()) + { + comment = "Limited matching"; + } + + return new AlternateTitleResource + { + Title = sceneMapping.Title, + SeasonNumber = sceneMapping.SeasonNumber, + SceneSeasonNumber = sceneMapping.SceneSeasonNumber, + SceneOrigin = sceneMapping.SceneOrigin, + Comment = comment + }; + } +} diff --git a/src/Sonarr.Api.V5/Series/SeasonResource.cs b/src/Sonarr.Api.V5/Series/SeasonResource.cs new file mode 100644 index 000000000..b01776eaf --- /dev/null +++ b/src/Sonarr.Api.V5/Series/SeasonResource.cs @@ -0,0 +1,44 @@ +using NzbDrone.Core.MediaCover; +using NzbDrone.Core.Tv; + +namespace Sonarr.Api.V5.Series; + +public class SeasonResource +{ + public int SeasonNumber { get; set; } + public bool Monitored { get; set; } + public SeasonStatisticsResource? Statistics { get; set; } + public List? Images { get; set; } +} + +public static class SeasonResourceMapper +{ + public static SeasonResource ToResource(this Season model, bool includeImages = false) + { + return new SeasonResource + { + SeasonNumber = model.SeasonNumber, + Monitored = model.Monitored, + Images = includeImages ? model.Images : null + }; + } + + public static Season ToModel(this SeasonResource resource) + { + return new Season + { + SeasonNumber = resource.SeasonNumber, + Monitored = resource.Monitored + }; + } + + public static List ToResource(this IEnumerable models, bool includeImages = false) + { + return models.Select(s => ToResource(s, includeImages)).ToList(); + } + + public static List ToModel(this IEnumerable resources) + { + return resources.Select(ToModel).ToList(); + } +} diff --git a/src/Sonarr.Api.V5/Series/SeasonStatisticsResource.cs b/src/Sonarr.Api.V5/Series/SeasonStatisticsResource.cs new file mode 100644 index 000000000..8ca48ad1f --- /dev/null +++ b/src/Sonarr.Api.V5/Series/SeasonStatisticsResource.cs @@ -0,0 +1,44 @@ +using NzbDrone.Core.SeriesStats; + +namespace Sonarr.Api.V5.Series; + +public class SeasonStatisticsResource +{ + public DateTime? NextAiring { get; set; } + public DateTime? PreviousAiring { get; set; } + public int EpisodeFileCount { get; set; } + public int EpisodeCount { get; set; } + public int TotalEpisodeCount { get; set; } + public long SizeOnDisk { get; set; } + public List? ReleaseGroups { get; set; } + + public decimal PercentOfEpisodes + { + get + { + if (EpisodeCount == 0) + { + return 0; + } + + return (decimal)EpisodeFileCount / (decimal)EpisodeCount * 100; + } + } +} + +public static class SeasonStatisticsResourceMapper +{ + public static SeasonStatisticsResource ToResource(this SeasonStatistics model) + { + return new SeasonStatisticsResource + { + NextAiring = model.NextAiring, + PreviousAiring = model.PreviousAiring, + EpisodeFileCount = model.EpisodeFileCount, + EpisodeCount = model.EpisodeCount, + TotalEpisodeCount = model.TotalEpisodeCount, + SizeOnDisk = model.SizeOnDisk, + ReleaseGroups = model.ReleaseGroups + }; + } +} diff --git a/src/Sonarr.Api.V5/Series/SeriesLookupController.cs b/src/Sonarr.Api.V5/Series/SeriesLookupController.cs new file mode 100644 index 000000000..d504cca1f --- /dev/null +++ b/src/Sonarr.Api.V5/Series/SeriesLookupController.cs @@ -0,0 +1,52 @@ +using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.MediaCover; +using NzbDrone.Core.MetadataSource; +using NzbDrone.Core.Organizer; +using NzbDrone.Core.SeriesStats; +using Sonarr.Http; + +namespace Sonarr.Api.V5.Series; + +[V5ApiController("series/lookup")] +public class SeriesLookupController : Controller +{ + private readonly ISearchForNewSeries _searchProxy; + private readonly IBuildFileNames _fileNameBuilder; + private readonly IMapCoversToLocal _coverMapper; + + public SeriesLookupController(ISearchForNewSeries searchProxy, IBuildFileNames fileNameBuilder, IMapCoversToLocal coverMapper) + { + _searchProxy = searchProxy; + _fileNameBuilder = fileNameBuilder; + _coverMapper = coverMapper; + } + + [HttpGet] + public IEnumerable Search([FromQuery] string term) + { + var tvDbResults = _searchProxy.SearchForNewSeries(term); + return MapToResource(tvDbResults); + } + + private IEnumerable MapToResource(IEnumerable series) + { + foreach (var currentSeries in series) + { + var resource = currentSeries.ToResource(); + + _coverMapper.ConvertToLocalUrls(resource.Id, resource.Images); + + var poster = currentSeries.Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Poster); + + if (poster != null) + { + resource.RemotePoster = poster.RemoteUrl; + } + + resource.Folder = _fileNameBuilder.GetSeriesFolder(currentSeries); + resource.Statistics = new SeriesStatistics().ToResource(resource.Seasons); + + yield return resource; + } + } +} diff --git a/src/Sonarr.Api.V5/Series/SeriesResource.cs b/src/Sonarr.Api.V5/Series/SeriesResource.cs new file mode 100644 index 000000000..0387d6f65 --- /dev/null +++ b/src/Sonarr.Api.V5/Series/SeriesResource.cs @@ -0,0 +1,159 @@ +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Languages; +using NzbDrone.Core.MediaCover; +using NzbDrone.Core.Tv; +using Sonarr.Http.REST; + +namespace Sonarr.Api.V5.Series; + +public class SeriesResource : RestResource +{ + public string? Title { get; set; } + public List? AlternateTitles { get; set; } + public string? SortTitle { get; set; } + public SeriesStatusType Status { get; set; } + public bool Ended => Status == SeriesStatusType.Ended; + public string? ProfileName { get; set; } + public string? Overview { get; set; } + public DateTime? NextAiring { get; set; } + public DateTime? PreviousAiring { get; set; } + public string? Network { get; set; } + public string? AirTime { get; set; } + public List? Images { get; set; } + public Language? OriginalLanguage { get; set; } + public string? RemotePoster { get; set; } + public List? Seasons { get; set; } + public int Year { get; set; } + public string? Path { get; set; } + public int QualityProfileId { get; set; } + public bool SeasonFolder { get; set; } + public bool Monitored { get; set; } + public NewItemMonitorTypes MonitorNewItems { get; set; } + public bool UseSceneNumbering { get; set; } + public int Runtime { get; set; } + public int TvdbId { get; set; } + public int TvRageId { get; set; } + public int TvMazeId { get; set; } + public int TmdbId { get; set; } + public DateTime? FirstAired { get; set; } + public DateTime? LastAired { get; set; } + public SeriesTypes SeriesType { get; set; } + public string? CleanTitle { get; set; } + public string? ImdbId { get; set; } + public string? TitleSlug { get; set; } + public string? RootFolderPath { get; set; } + public string? Folder { get; set; } + public string? Certification { get; set; } + public List? Genres { get; set; } + public HashSet? Tags { get; set; } + public DateTime Added { get; set; } + public AddSeriesOptions? AddOptions { get; set; } + public Ratings? Ratings { get; set; } + public SeriesStatisticsResource? Statistics { get; set; } + public bool? EpisodesChanged { get; set; } +} + +public static class SeriesResourceMapper +{ + public static SeriesResource ToResource(this NzbDrone.Core.Tv.Series model, bool includeSeasonImages = false) + { + return new SeriesResource + { + Id = model.Id, + Title = model.Title, + SortTitle = model.SortTitle, + Status = model.Status, + Overview = model.Overview, + Network = model.Network, + AirTime = model.AirTime, + Images = model.Images.JsonClone(), + Seasons = model.Seasons.ToResource(includeSeasonImages), + Year = model.Year, + OriginalLanguage = model.OriginalLanguage, + Path = model.Path, + QualityProfileId = model.QualityProfileId, + SeasonFolder = model.SeasonFolder, + Monitored = model.Monitored, + MonitorNewItems = model.MonitorNewItems, + UseSceneNumbering = model.UseSceneNumbering, + Runtime = model.Runtime, + TvdbId = model.TvdbId, + TvRageId = model.TvRageId, + TvMazeId = model.TvMazeId, + TmdbId = model.TmdbId, + FirstAired = model.FirstAired, + LastAired = model.LastAired, + SeriesType = model.SeriesType, + CleanTitle = model.CleanTitle, + ImdbId = model.ImdbId, + TitleSlug = model.TitleSlug, + Certification = model.Certification, + Genres = model.Genres, + Tags = model.Tags, + Added = model.Added, + AddOptions = model.AddOptions, + Ratings = model.Ratings + }; + } + + public static NzbDrone.Core.Tv.Series ToModel(this SeriesResource resource) + { + return new NzbDrone.Core.Tv.Series + { + Id = resource.Id, + Title = resource.Title, + SortTitle = resource.SortTitle, + Status = resource.Status, + Overview = resource.Overview, + Network = resource.Network, + AirTime = resource.AirTime, + Images = resource.Images, + Seasons = resource.Seasons?.ToModel() ?? new List(), + Year = resource.Year, + OriginalLanguage = resource.OriginalLanguage, + Path = resource.Path, + QualityProfileId = resource.QualityProfileId, + SeasonFolder = resource.SeasonFolder, + Monitored = resource.Monitored, + MonitorNewItems = resource.MonitorNewItems, + UseSceneNumbering = resource.UseSceneNumbering, + Runtime = resource.Runtime, + TvdbId = resource.TvdbId, + TvRageId = resource.TvRageId, + TvMazeId = resource.TvMazeId, + TmdbId = resource.TmdbId, + FirstAired = resource.FirstAired, + SeriesType = resource.SeriesType, + CleanTitle = resource.CleanTitle, + ImdbId = resource.ImdbId, + TitleSlug = resource.TitleSlug, + RootFolderPath = resource.RootFolderPath, + Certification = resource.Certification, + Genres = resource.Genres, + Tags = resource.Tags, + Added = resource.Added, + AddOptions = resource.AddOptions, + Ratings = resource.Ratings + }; + } + + public static NzbDrone.Core.Tv.Series ToModel(this SeriesResource resource, NzbDrone.Core.Tv.Series series) + { + var updatedSeries = resource.ToModel(); + + series.ApplyChanges(updatedSeries); + + return series; + } + + public static List ToResource(this IEnumerable series, + bool includeSeasonImages = false) + { + return series.Select(s => ToResource(s, includeSeasonImages)).ToList(); + } + + public static List ToModel(this IEnumerable resources) + { + return resources.Select(ToModel).ToList(); + } +} diff --git a/src/Sonarr.Api.V5/Series/SeriesStatisticsResource.cs b/src/Sonarr.Api.V5/Series/SeriesStatisticsResource.cs new file mode 100644 index 000000000..e9fefba3d --- /dev/null +++ b/src/Sonarr.Api.V5/Series/SeriesStatisticsResource.cs @@ -0,0 +1,42 @@ +using NzbDrone.Core.SeriesStats; + +namespace Sonarr.Api.V5.Series; + +public class SeriesStatisticsResource +{ + public int SeasonCount { get; set; } + public int EpisodeFileCount { get; set; } + public int EpisodeCount { get; set; } + public int TotalEpisodeCount { get; set; } + public long SizeOnDisk { get; set; } + public List? ReleaseGroups { get; set; } + + public decimal PercentOfEpisodes + { + get + { + if (EpisodeCount == 0) + { + return 0; + } + + return (decimal)EpisodeFileCount / (decimal)EpisodeCount * 100; + } + } +} + +public static class SeriesStatisticsResourceMapper +{ + public static SeriesStatisticsResource ToResource(this SeriesStatistics model, List? seasons) + { + return new SeriesStatisticsResource + { + SeasonCount = seasons?.Count(s => s.SeasonNumber > 0) ?? 0, + EpisodeFileCount = model.EpisodeFileCount, + EpisodeCount = model.EpisodeCount, + TotalEpisodeCount = model.TotalEpisodeCount, + SizeOnDisk = model.SizeOnDisk, + ReleaseGroups = model.ReleaseGroups + }; + } +} diff --git a/src/Sonarr.Api.V5/Sonarr.Api.V5.csproj b/src/Sonarr.Api.V5/Sonarr.Api.V5.csproj new file mode 100644 index 000000000..a11be2f9e --- /dev/null +++ b/src/Sonarr.Api.V5/Sonarr.Api.V5.csproj @@ -0,0 +1,18 @@ + + + net8.0 + enable + enable + Sonarr.Api.V5 + + + + + + + + + + + + diff --git a/src/Sonarr.Http/ApiInfoController.cs b/src/Sonarr.Http/ApiInfoController.cs index aebdce4a7..1e5aaac63 100644 --- a/src/Sonarr.Http/ApiInfoController.cs +++ b/src/Sonarr.Http/ApiInfoController.cs @@ -11,8 +11,8 @@ namespace NzbDrone.Http { return new ApiInfoResource { - Current = "v3", - Deprecated = new List() + Current = "v5", + Deprecated = new List { "v3" } }; } } diff --git a/src/Sonarr.Http/VersionedApiControllerAttribute.cs b/src/Sonarr.Http/VersionedApiControllerAttribute.cs index 331494f47..39de670f4 100644 --- a/src/Sonarr.Http/VersionedApiControllerAttribute.cs +++ b/src/Sonarr.Http/VersionedApiControllerAttribute.cs @@ -31,4 +31,12 @@ namespace Sonarr.Http { } } + + public class V5ApiControllerAttribute : VersionedApiControllerAttribute + { + public V5ApiControllerAttribute(string resource = "[controller]") + : base(5, resource) + { + } + } } diff --git a/src/Sonarr.sln b/src/Sonarr.sln index 84814bbce..f3a657fcf 100644 --- a/src/Sonarr.sln +++ b/src/Sonarr.sln @@ -75,6 +75,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sonarr.Mono", "NzbDrone.Mon EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sonarr.Windows", "NzbDrone.Windows\Sonarr.Windows.csproj", "{4AE3B731-442E-4AF0-88A5-9FABEB685A0D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sonarr.Api.V5", "Sonarr.Api.V5\Sonarr.Api.V5.csproj", "{1A9DFC67-3712-47A5-8DCA-0BCAA95F9EDC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Posix = Debug|Posix @@ -83,316 +85,214 @@ Global Release|Windows = Release|Windows EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Debug|Any CPU.Build.0 = Debug|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Debug|Posix.ActiveCfg = Debug|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Debug|Posix.Build.0 = Debug|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Debug|Windows.ActiveCfg = Debug|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Debug|Windows.Build.0 = Debug|Any CPU - {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Release|Any CPU.Build.0 = Release|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Release|Posix.ActiveCfg = Release|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Release|Posix.Build.0 = Release|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Release|Windows.ActiveCfg = Release|Any CPU {3DCA7B58-B8B3-49AC-9D9E-56F4A0460976}.Release|Windows.Build.0 = Release|Any CPU - {FAFB5948-A222-4CF6-AD14-026BE7564802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FAFB5948-A222-4CF6-AD14-026BE7564802}.Debug|Any CPU.Build.0 = Debug|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Debug|Posix.ActiveCfg = Debug|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Debug|Posix.Build.0 = Debug|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Debug|Windows.ActiveCfg = Debug|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Debug|Windows.Build.0 = Debug|Any CPU - {FAFB5948-A222-4CF6-AD14-026BE7564802}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FAFB5948-A222-4CF6-AD14-026BE7564802}.Release|Any CPU.Build.0 = Release|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Release|Posix.ActiveCfg = Release|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Release|Posix.Build.0 = Release|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Release|Windows.ActiveCfg = Release|Any CPU {FAFB5948-A222-4CF6-AD14-026BE7564802}.Release|Windows.Build.0 = Release|Any CPU - {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Any CPU.Build.0 = Debug|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Posix.ActiveCfg = Debug|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Posix.Build.0 = Debug|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Windows.ActiveCfg = Debug|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Debug|Windows.Build.0 = Debug|Any CPU - {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Any CPU.Build.0 = Release|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Posix.ActiveCfg = Release|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Posix.Build.0 = Release|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Windows.ActiveCfg = Release|Any CPU {CADDFCE0-7509-4430-8364-2074E1EEFCA2}.Release|Windows.Build.0 = Release|Any CPU - {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Posix.ActiveCfg = Debug|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Posix.Build.0 = Debug|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Windows.ActiveCfg = Debug|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Debug|Windows.Build.0 = Debug|Any CPU - {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Any CPU.Build.0 = Release|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Posix.ActiveCfg = Release|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Posix.Build.0 = Release|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Windows.ActiveCfg = Release|Any CPU {193ADD3B-792B-4173-8E4C-5A3F8F0237F0}.Release|Windows.Build.0 = Release|Any CPU - {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Debug|Any CPU.Build.0 = Debug|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Debug|Posix.ActiveCfg = Debug|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Debug|Posix.Build.0 = Debug|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Debug|Windows.ActiveCfg = Debug|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Debug|Windows.Build.0 = Debug|Any CPU - {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Release|Any CPU.Build.0 = Release|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Release|Posix.ActiveCfg = Release|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Release|Posix.Build.0 = Release|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Release|Windows.ActiveCfg = Release|Any CPU {35388E8E-0CDB-4A84-AD16-E4B6EFDA5D97}.Release|Windows.Build.0 = Release|Any CPU - {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Posix.ActiveCfg = Debug|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Posix.Build.0 = Debug|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Windows.ActiveCfg = Debug|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Debug|Windows.Build.0 = Debug|Any CPU - {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Any CPU.Build.0 = Release|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Posix.ActiveCfg = Release|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Posix.Build.0 = Release|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Windows.ActiveCfg = Release|Any CPU {BEC74619-DDBB-4FBA-B517-D3E20AFC9997}.Release|Windows.Build.0 = Release|Any CPU - {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Debug|Any CPU.Build.0 = Debug|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Debug|Posix.ActiveCfg = Debug|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Debug|Posix.Build.0 = Debug|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Debug|Windows.ActiveCfg = Debug|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Debug|Windows.Build.0 = Debug|Any CPU - {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Release|Any CPU.Build.0 = Release|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Release|Posix.ActiveCfg = Release|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Release|Posix.Build.0 = Release|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Release|Windows.ActiveCfg = Release|Any CPU {D18A5DEB-5102-4775-A1AF-B75DAAA8907B}.Release|Windows.Build.0 = Release|Any CPU - {CBF6B8B0-A015-413A-8C86-01238BB45770}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBF6B8B0-A015-413A-8C86-01238BB45770}.Debug|Any CPU.Build.0 = Debug|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Debug|Posix.ActiveCfg = Debug|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Debug|Posix.Build.0 = Debug|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Debug|Windows.ActiveCfg = Debug|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Debug|Windows.Build.0 = Debug|Any CPU - {CBF6B8B0-A015-413A-8C86-01238BB45770}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBF6B8B0-A015-413A-8C86-01238BB45770}.Release|Any CPU.Build.0 = Release|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Release|Posix.ActiveCfg = Release|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Release|Posix.Build.0 = Release|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Release|Windows.ActiveCfg = Release|Any CPU {CBF6B8B0-A015-413A-8C86-01238BB45770}.Release|Windows.Build.0 = Release|Any CPU - {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Debug|Any CPU.Build.0 = Debug|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Debug|Posix.ActiveCfg = Debug|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Debug|Posix.Build.0 = Debug|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Debug|Windows.ActiveCfg = Debug|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Debug|Windows.Build.0 = Debug|Any CPU - {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Release|Any CPU.Build.0 = Release|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Release|Posix.ActiveCfg = Release|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Release|Posix.Build.0 = Release|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Release|Windows.ActiveCfg = Release|Any CPU {8CEFECD0-A6C2-498F-98B1-3FBE5820F9AB}.Release|Windows.Build.0 = Release|Any CPU - {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Debug|Any CPU.Build.0 = Debug|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Debug|Posix.ActiveCfg = Debug|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Debug|Posix.Build.0 = Debug|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Debug|Windows.ActiveCfg = Debug|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Debug|Windows.Build.0 = Debug|Any CPU - {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Release|Any CPU.Build.0 = Release|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Release|Posix.ActiveCfg = Release|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Release|Posix.Build.0 = Release|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Release|Windows.ActiveCfg = Release|Any CPU {CC26800D-F67E-464B-88DE-8EB1A0C227A3}.Release|Windows.Build.0 = Release|Any CPU - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|Any CPU.Build.0 = Debug|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|Posix.ActiveCfg = Debug|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|Posix.Build.0 = Debug|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|Windows.ActiveCfg = Debug|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Debug|Windows.Build.0 = Debug|Any CPU - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|Any CPU.Build.0 = Release|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|Posix.ActiveCfg = Release|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|Posix.Build.0 = Release|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|Windows.ActiveCfg = Release|Any CPU {6BCE712F-846D-4846-9D1B-A66B858DA755}.Release|Windows.Build.0 = Release|Any CPU - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|Posix.ActiveCfg = Debug|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|Posix.Build.0 = Debug|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|Windows.ActiveCfg = Debug|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Debug|Windows.Build.0 = Debug|Any CPU - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|Any CPU.Build.0 = Release|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|Posix.ActiveCfg = Release|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|Posix.Build.0 = Release|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|Windows.ActiveCfg = Release|Any CPU {700D0B95-95CD-43F3-B6C9-FAA0FC1358D4}.Release|Windows.Build.0 = Release|Any CPU - {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Debug|Any CPU.Build.0 = Debug|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Debug|Posix.ActiveCfg = Debug|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Debug|Posix.Build.0 = Debug|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Debug|Windows.ActiveCfg = Debug|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Debug|Windows.Build.0 = Debug|Any CPU - {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Any CPU.Build.0 = Release|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Posix.ActiveCfg = Release|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Posix.Build.0 = Release|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Windows.ActiveCfg = Release|Any CPU {FF5EE3B6-913B-47CE-9CEB-11C51B4E1205}.Release|Windows.Build.0 = Release|Any CPU - {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Debug|Any CPU.Build.0 = Debug|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Debug|Posix.ActiveCfg = Debug|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Debug|Posix.Build.0 = Debug|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Debug|Windows.ActiveCfg = Debug|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Debug|Windows.Build.0 = Debug|Any CPU - {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Release|Any CPU.Build.0 = Release|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Release|Posix.ActiveCfg = Release|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Release|Posix.Build.0 = Release|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Release|Windows.ActiveCfg = Release|Any CPU {4CCC53CD-8D5E-4CC4-97D2-5C9312AC2BD7}.Release|Windows.Build.0 = Release|Any CPU - {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Posix.ActiveCfg = Debug|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Posix.Build.0 = Debug|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Windows.ActiveCfg = Debug|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Debug|Windows.Build.0 = Debug|Any CPU - {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Any CPU.Build.0 = Release|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Posix.ActiveCfg = Release|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Posix.Build.0 = Release|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Windows.ActiveCfg = Release|Any CPU {F2BE0FDF-6E47-4827-A420-DD4EF82407F8}.Release|Windows.Build.0 = Release|Any CPU - {95C11A9E-56ED-456A-8447-2C89C1139266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95C11A9E-56ED-456A-8447-2C89C1139266}.Debug|Any CPU.Build.0 = Debug|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Debug|Posix.ActiveCfg = Debug|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Debug|Posix.Build.0 = Debug|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Debug|Windows.ActiveCfg = Debug|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Debug|Windows.Build.0 = Debug|Any CPU - {95C11A9E-56ED-456A-8447-2C89C1139266}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95C11A9E-56ED-456A-8447-2C89C1139266}.Release|Any CPU.Build.0 = Release|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Release|Posix.ActiveCfg = Release|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Release|Posix.Build.0 = Release|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Release|Windows.ActiveCfg = Release|Any CPU {95C11A9E-56ED-456A-8447-2C89C1139266}.Release|Windows.Build.0 = Release|Any CPU - {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Debug|Any CPU.Build.0 = Debug|Any CPU {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Debug|Posix.ActiveCfg = Debug|Any CPU {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Debug|Windows.ActiveCfg = Debug|Any CPU {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Debug|Windows.Build.0 = Debug|Any CPU - {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Release|Any CPU.Build.0 = Release|Any CPU {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Release|Posix.ActiveCfg = Release|Any CPU {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Release|Windows.ActiveCfg = Release|Any CPU {D12F7F2F-8A3C-415F-88FA-6DD061A84869}.Release|Windows.Build.0 = Release|Any CPU - {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Debug|Posix.ActiveCfg = Debug|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Debug|Posix.Build.0 = Debug|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Debug|Windows.ActiveCfg = Debug|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Debug|Windows.Build.0 = Debug|Any CPU - {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Release|Any CPU.Build.0 = Release|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Release|Posix.ActiveCfg = Release|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Release|Posix.Build.0 = Release|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Release|Windows.ActiveCfg = Release|Any CPU {7C2CC69F-5CA0-4E5C-85CB-983F9F6C3B36}.Release|Windows.Build.0 = Release|Any CPU - {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Debug|Any CPU.Build.0 = Debug|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Debug|Posix.ActiveCfg = Debug|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Debug|Posix.Build.0 = Debug|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Debug|Windows.ActiveCfg = Debug|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Debug|Windows.Build.0 = Debug|Any CPU - {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Release|Any CPU.Build.0 = Release|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Release|Posix.ActiveCfg = Release|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Release|Posix.Build.0 = Release|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Release|Windows.ActiveCfg = Release|Any CPU {80B51429-7A0E-46D6-BEE3-C80DCB1C4EAA}.Release|Windows.Build.0 = Release|Any CPU - {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Debug|Any CPU.Build.0 = Debug|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Debug|Posix.ActiveCfg = Debug|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Debug|Posix.Build.0 = Debug|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Debug|Windows.ActiveCfg = Debug|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Debug|Windows.Build.0 = Debug|Any CPU - {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Release|Any CPU.Build.0 = Release|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Release|Posix.ActiveCfg = Release|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Release|Posix.Build.0 = Release|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Release|Windows.ActiveCfg = Release|Any CPU {40D72824-7D02-4A77-9106-8FE0EEA2B997}.Release|Windows.Build.0 = Release|Any CPU - {7140FF1F-79BE-492F-9188-B21A050BF708}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7140FF1F-79BE-492F-9188-B21A050BF708}.Debug|Any CPU.Build.0 = Debug|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Debug|Posix.ActiveCfg = Debug|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Debug|Posix.Build.0 = Debug|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Debug|Windows.ActiveCfg = Debug|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Debug|Windows.Build.0 = Debug|Any CPU - {7140FF1F-79BE-492F-9188-B21A050BF708}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7140FF1F-79BE-492F-9188-B21A050BF708}.Release|Any CPU.Build.0 = Release|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Release|Posix.ActiveCfg = Release|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Release|Posix.Build.0 = Release|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Release|Windows.ActiveCfg = Release|Any CPU {7140FF1F-79BE-492F-9188-B21A050BF708}.Release|Windows.Build.0 = Release|Any CPU - {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Debug|Posix.ActiveCfg = Debug|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Debug|Posix.Build.0 = Debug|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Debug|Windows.ActiveCfg = Debug|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Debug|Windows.Build.0 = Debug|Any CPU - {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Release|Any CPU.Build.0 = Release|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Release|Posix.ActiveCfg = Release|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Release|Posix.Build.0 = Release|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Release|Windows.ActiveCfg = Release|Any CPU {5370BFF7-1BD7-46BC-AF06-7D9EA5CDA1D6}.Release|Windows.Build.0 = Release|Any CPU - {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Posix.ActiveCfg = Debug|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Posix.Build.0 = Debug|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Windows.ActiveCfg = Debug|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Debug|Windows.Build.0 = Debug|Any CPU - {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Any CPU.Build.0 = Release|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Posix.ActiveCfg = Release|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Posix.Build.0 = Release|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Windows.ActiveCfg = Release|Any CPU {C0EA1A40-91AD-4EEB-BD16-2DDDEBD20AE5}.Release|Windows.Build.0 = Release|Any CPU - {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Debug|Any CPU.Build.0 = Debug|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Debug|Posix.ActiveCfg = Debug|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Debug|Posix.Build.0 = Debug|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Debug|Windows.ActiveCfg = Debug|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Debug|Windows.Build.0 = Debug|Any CPU - {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Release|Any CPU.Build.0 = Release|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Release|Posix.ActiveCfg = Release|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Release|Posix.Build.0 = Release|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Release|Windows.ActiveCfg = Release|Any CPU {F3F63718-63C6-432F-BDDC-C960AD95EC82}.Release|Windows.Build.0 = Release|Any CPU - {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Debug|Any CPU.Build.0 = Debug|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Debug|Posix.ActiveCfg = Debug|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Debug|Posix.Build.0 = Debug|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Debug|Windows.ActiveCfg = Debug|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Debug|Windows.Build.0 = Debug|Any CPU - {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Release|Any CPU.Build.0 = Release|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Release|Posix.ActiveCfg = Release|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Release|Posix.Build.0 = Release|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Release|Windows.ActiveCfg = Release|Any CPU {22F71728-AB73-4774-8DC2-6D2D7734AE0C}.Release|Windows.Build.0 = Release|Any CPU - {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Debug|Any CPU.Build.0 = Debug|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Debug|Posix.ActiveCfg = Debug|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Debug|Posix.Build.0 = Debug|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Debug|Windows.ActiveCfg = Debug|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Debug|Windows.Build.0 = Debug|Any CPU - {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Release|Any CPU.Build.0 = Release|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Release|Posix.ActiveCfg = Release|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Release|Posix.Build.0 = Release|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Release|Windows.ActiveCfg = Release|Any CPU {4AE3B731-442E-4AF0-88A5-9FABEB685A0D}.Release|Windows.Build.0 = Release|Any CPU + {1A9DFC67-3712-47A5-8DCA-0BCAA95F9EDC}.Debug|Posix.ActiveCfg = Debug|Any CPU + {1A9DFC67-3712-47A5-8DCA-0BCAA95F9EDC}.Debug|Posix.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE