From 6aff4957929707e6eb31af71a9ab9f83c1898bf6 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 09:44:39 +0200 Subject: [PATCH 001/569] Document.Html --- .../Document.Html/Model/HtmlNodeBase.cs | 19 +++++++++++++++++++ .../Document.Html/Model/HtmlSection.cs | 17 ----------------- .../Document.Html/Model/HtmlTOC.cs | 2 +- .../Serialization/HtmlDocumentSerializer.cs | 8 ++++++++ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs index 6325dc890..78f2a5df4 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs @@ -55,4 +55,23 @@ protected static int TryParseInt(string? s, int fallback) Attributes.TryGetValue(name, out var value); return value; } + + public IEnumerable Enumerate() + { + var stack = new Stack(); + stack.Push(this); + while (stack.Count > 0) + { + var cur = stack.Pop(); + yield return cur; + if (cur is HtmlNodeBase b) + { + for (int i = b.Nodes.Count - 1; i >= 0; i--) + { + stack.Push((IDocElement)b.Nodes[i]); + } + } + } + } + } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs index e0c08f431..747776b1b 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs @@ -23,21 +23,4 @@ public IDocContent AddTOC(string aName, int aLevel) return toc; } - public IEnumerable Enumerate() - { - var stack = new Stack(); - stack.Push(this); - while (stack.Count > 0) - { - var cur = stack.Pop(); - yield return cur; - if (cur is HtmlNodeBase b) - { - for (int i = b.Nodes.Count - 1; i >= 0; i--) - { - stack.Push((IDocElement)b.Nodes[i]); - } - } - } - } } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs index acc08ae37..0675a7b21 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs @@ -16,7 +16,7 @@ public HtmlTOC(string name, int level) public override IDocStyleStyle GetStyle() => new HtmlStyle("TOC"); - public void RebuildFrom(IDocContent root) + public void RebuildFrom(IDocSection root) { // Einfacher TOC: Alle Headlines bis Level einsammeln TextContent = string.Empty; diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs index 8a90bbd70..4a2e97d77 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs @@ -202,7 +202,15 @@ private static void WriteInline(StringBuilder sb, HtmlContentBase content) if (!string.IsNullOrEmpty(span.Id)) sb.Append($" id=\"{System.Net.WebUtility.HtmlEncode(span.Id)}\""); sb.Append(">"); + if (span.FontStyle.Bold) + sb.Append(""); + if (span.FontStyle.Italic) + sb.Append(""); WriteInline(sb, span); + if (span.FontStyle.Italic) + sb.Append(""); + if (span.FontStyle.Bold) + sb.Append(""); sb.Append(""); break; From 01632061bec4931230bf6fd48c135388bb223398 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 09:44:46 +0200 Subject: [PATCH 002/569] HtmlExample --- .../Data/DocumentUtils/HtmlExample/Program.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs b/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs index ec218dda9..28ec889ad 100644 --- a/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs +++ b/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs @@ -4,6 +4,7 @@ using System; using System.IO; using Document.Html; +using Document.Html.Model; namespace HtmlExample; @@ -31,7 +32,7 @@ private static void CreateHtmlDocument2() // Optional: weitere Elemente p.AddLineBreak(); - p.AddSpan("Fetter Text", Document.Html.Model.HtmlFontStyle.Default); + p.AddSpan("Fetter Text", HtmlFontStyle.BoldStyle); // Dokument speichern var outputPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "example.html"); @@ -45,18 +46,18 @@ private static void CreateHtmlDocument2() private static void CreateSampleDocument() { // Beispiel: Dokument erstellen, schreiben und wieder lesen - IDocSection root = new Document.Html.Model.HtmlSection(); - var h1 = (Document.Html.Model.HtmlHeadline)root.AddHeadline(1); + IDocSection root = new HtmlSection(); + HtmlHeadline h1 = (Document.Html.Model.HtmlHeadline)root.AddHeadline(1); h1.TextContent = "Titel"; var p = root.AddParagraph("Body"); p.AppendText("Hallo "); - p.AddSpan("Welt", Document.Html.Model.HtmlFontStyle.Default); + p.AddSpan("Welt", HtmlFontStyle.Default); p.AddLineBreak(); - var toc = (Document.Html.Model.HtmlTOC)root.AddTOC("Inhalt", 2); + var toc = (HtmlTOC)root.AddTOC("Inhalt", 2); toc.RebuildFrom(root); var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test.html"); - Document.Html.IO.HtmlDocumentIO.SaveAsync(root, path); + Document.Html.IO.HtmlDocumentIO.SaveAsync(root as HtmlSection, path); var loaded = Document.Html.IO.HtmlDocumentIO.LoadAsync(path).Result; Debug.WriteLine(loaded); } From 0593bc450a69aca8348aab2e86a99436178abfc1 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 10:12:17 +0200 Subject: [PATCH 003/569] CSharpBible --- CSharpBible/Data/Data.sln | 52 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/CSharpBible/Data/Data.sln b/CSharpBible/Data/Data.sln index 6bdc08c72..5c4461f4d 100644 --- a/CSharpBible/Data/Data.sln +++ b/CSharpBible/Data/Data.sln @@ -24,7 +24,6 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewFolder1", "NewFolder1", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" ProjectSection(SolutionItems) = preProject Data.props = Data.props - Data_net.props = Data_net.props EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DocumentUtils", "DocumentUtils", "{C72F7201-74F9-66F9-5C2C-ABF0F08448DC}" @@ -41,6 +40,19 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Html", "DocumentUt EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlExample", "DocumentUtils\HtmlExample\HtmlExample.csproj", "{A2862C98-D5FA-429A-AA92-DA789A26B42C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Pdf", "DocumentUtils\Document.Pdf\Document.Pdf.csproj", "{B50FAEFE-A885-AB90-75D1-9A7F05117452}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NebelEbook", "NebelEbook\NebelEbook.csproj", "{6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{84D27F74-D2BA-6C25-2661-968F101900D9}" + ProjectSection(SolutionItems) = preProject + Data.props = Data.props + Data_net.props = Data_net.props + Directory.Build.props = Directory.Build.props + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PdfExample", "DocumentUtils\PdfExample\PdfExample.csproj", "{1791F8EA-B4E9-36F3-9786-CC82AA18DD64}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -219,6 +231,42 @@ Global {A2862C98-D5FA-429A-AA92-DA789A26B42C}.Release|x64.Build.0 = Release|Any CPU {A2862C98-D5FA-429A-AA92-DA789A26B42C}.Release|x86.ActiveCfg = Release|Any CPU {A2862C98-D5FA-429A-AA92-DA789A26B42C}.Release|x86.Build.0 = Release|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Debug|x64.ActiveCfg = Debug|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Debug|x64.Build.0 = Debug|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Debug|x86.ActiveCfg = Debug|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Debug|x86.Build.0 = Debug|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Release|Any CPU.Build.0 = Release|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Release|x64.ActiveCfg = Release|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Release|x64.Build.0 = Release|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Release|x86.ActiveCfg = Release|Any CPU + {B50FAEFE-A885-AB90-75D1-9A7F05117452}.Release|x86.Build.0 = Release|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Debug|x64.ActiveCfg = Debug|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Debug|x64.Build.0 = Debug|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Debug|x86.ActiveCfg = Debug|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Debug|x86.Build.0 = Debug|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Release|Any CPU.Build.0 = Release|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Release|x64.ActiveCfg = Release|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Release|x64.Build.0 = Release|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Release|x86.ActiveCfg = Release|Any CPU + {6EA9603A-5675-3F8C-D61E-27BCBC9B61F9}.Release|x86.Build.0 = Release|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Debug|x64.ActiveCfg = Debug|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Debug|x64.Build.0 = Debug|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Debug|x86.ActiveCfg = Debug|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Debug|x86.Build.0 = Debug|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|Any CPU.Build.0 = Release|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x64.ActiveCfg = Release|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x64.Build.0 = Release|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x86.ActiveCfg = Release|Any CPU + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -236,6 +284,8 @@ Global {F49367C5-BA79-496C-91B2-78CF8019F709} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} {C15F9B94-87A4-33B3-573C-9D20A39031CD} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} {A2862C98-D5FA-429A-AA92-DA789A26B42C} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} + {B50FAEFE-A885-AB90-75D1-9A7F05117452} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} + {1791F8EA-B4E9-36F3-9786-CC82AA18DD64} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3170725E-BCC0-429F-98D9-04E76E850A0B} From a230f3f95f623b28542302739f910a307cd2ce49 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:22 +0200 Subject: [PATCH 004/569] AboutEx --- CSharpBible/AboutEx/AboutEx.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/AboutEx/AboutEx.csproj b/CSharpBible/AboutEx/AboutEx.csproj index d26fcf273..7f0109d5f 100644 --- a/CSharpBible/AboutEx/AboutEx.csproj +++ b/CSharpBible/AboutEx/AboutEx.csproj @@ -14,7 +14,7 @@ - + From 498e4678ada9891f5923ae1fcfd106926b9f84aa Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:23 +0200 Subject: [PATCH 005/569] AboutExTests --- CSharpBible/AboutExTests/AboutExTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/AboutExTests/AboutExTests.csproj b/CSharpBible/AboutExTests/AboutExTests.csproj index 311c6998a..4a17d50ff 100644 --- a/CSharpBible/AboutExTests/AboutExTests.csproj +++ b/CSharpBible/AboutExTests/AboutExTests.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 3e288803c51bc9710ba91cb2e3c316b715390508 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:33 +0200 Subject: [PATCH 006/569] Basic_Del00_Template --- .../Basics/Basic_Del00_Template/Basic_Del00_Template.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj b/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj index a1564185c..88b8dca1c 100644 --- a/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj +++ b/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj @@ -16,8 +16,8 @@ - - + + From 9d73a010edb4adddd3c0fd4e98aa0702e1591ba4 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:34 +0200 Subject: [PATCH 007/569] Basic_Del00_TemplateTests --- .../Basic_Del00_TemplateTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj b/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj index c5e732190..720a3b8c9 100644 --- a/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj +++ b/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -26,6 +26,6 @@ - + From f6e46c08d64650468535b21b905eb7f9a8c3699a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:34 +0200 Subject: [PATCH 008/569] Basic_Del01_Action --- .../Basics/Basic_Del01_Action/Basic_Del01_Action.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj b/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj index 31c6d5dc9..8b85e2b81 100644 --- a/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj +++ b/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj @@ -19,8 +19,8 @@ - - + + From c12079c4348bb3677fa118c0630c3b48d91b3a14 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:34 +0200 Subject: [PATCH 009/569] Basic_Del01_ActionTests --- .../Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj b/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj index 04710efdc..6fdecb621 100644 --- a/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj +++ b/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 0e1fad000b2e25d6682aa2a56bc1bfaca36fb6b4 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:35 +0200 Subject: [PATCH 010/569] Basic_Del02_Filter --- CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj b/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj index 44fa7750c..0fade3f08 100644 --- a/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj +++ b/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj @@ -19,7 +19,7 @@ - + From 30509a5825175b1c1b1e44c6ef1185f9b0cd6aa3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:35 +0200 Subject: [PATCH 011/569] Basic_Del02_FilterTests --- .../Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj b/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj index 8faae2d5f..c042e7c8c 100644 --- a/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj +++ b/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From fc4801ec399702659ba0fb5864842a35438657cd Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:35 +0200 Subject: [PATCH 012/569] Basic_Del03_General --- .../Basics/Basic_Del03_General/Basic_Del03_General.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj b/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj index 9220a0753..2a6b6e8a9 100644 --- a/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj +++ b/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj @@ -16,8 +16,8 @@ - - + + From 0373f235337f72572a99bb6ca35e60351455b9bd Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:35 +0200 Subject: [PATCH 013/569] Basic_Del03_GeneralTests --- .../Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj b/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj index 98a7fb59b..007530620 100644 --- a/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj +++ b/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From db625088c65deea0200a7d5e4859bb9d075b2c31 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:36 +0200 Subject: [PATCH 014/569] Basic_Del04_TestImposibleStuff --- .../Basic_Del04_TestImposibleStuff.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj b/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj index a22456cb2..7bd9e483a 100644 --- a/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj +++ b/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj @@ -16,7 +16,7 @@ - + From 106c02e4e43c0e39198fbaf165f5f7d036b44b8c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:16:36 +0200 Subject: [PATCH 015/569] Basic_Del04_TestImposibleStuffTests --- .../Basic_Del04_TestImposibleStuffTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj b/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj index e931efb03..f4a7d9570 100644 --- a/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj +++ b/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 941061701cd749dad49142ff93522c74698ba0b6 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:17:27 +0200 Subject: [PATCH 016/569] ConsoleMouseApp --- CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp.csproj | 2 +- .../ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp.csproj b/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp.csproj index 9cb6f6595..031e94873 100644 --- a/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp.csproj +++ b/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp.csproj @@ -25,7 +25,7 @@ - + diff --git a/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj b/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj index 0f6646c4f..3b7c14afa 100644 --- a/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj +++ b/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj @@ -28,7 +28,7 @@ - + From 15938bbdb1df7e185a8e409395e092896ddd9c42 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:17:37 +0200 Subject: [PATCH 017/569] TestConsoleDemo --- CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj b/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj index e3f416343..95d99f938 100644 --- a/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj +++ b/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj @@ -25,7 +25,7 @@ - + \ No newline at end of file From 770eed34c9dfec08bc3bf74fa0158debc21faa0a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:17:38 +0200 Subject: [PATCH 018/569] TestConsoleTests --- .../ConsoleApps/TestConsoleTests/TestConsoleTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj b/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj index 4b4696c05..961d7a542 100644 --- a/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj +++ b/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 34e5e2bc87f6b6a328876c11375d9ffccd248392 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:38 +0200 Subject: [PATCH 019/569] DBTest1 --- CSharpBible/DB/DBTest1/DBTest1.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/DB/DBTest1/DBTest1.csproj b/CSharpBible/DB/DBTest1/DBTest1.csproj index e1f990ff5..f9912103f 100644 --- a/CSharpBible/DB/DBTest1/DBTest1.csproj +++ b/CSharpBible/DB/DBTest1/DBTest1.csproj @@ -12,7 +12,7 @@ --> - + From 3a25b40856d9b0e5b77c1d1c14c0fd5a94a773e8 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:38 +0200 Subject: [PATCH 020/569] FoxCon --- CSharpBible/DB/FoxCon/FoxCon.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/DB/FoxCon/FoxCon.csproj b/CSharpBible/DB/FoxCon/FoxCon.csproj index dda79f003..b75f566c2 100644 --- a/CSharpBible/DB/FoxCon/FoxCon.csproj +++ b/CSharpBible/DB/FoxCon/FoxCon.csproj @@ -19,8 +19,8 @@ - - + + From 5b5732a36c7f75f3d6266b69a3f75f7db625e491 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:38 +0200 Subject: [PATCH 021/569] MdbBrowser --- CSharpBible/DB/MdbBrowser/MdbBrowser.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj b/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj index b911cc0ff..6fc0daf6d 100644 --- a/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj +++ b/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj @@ -22,7 +22,7 @@ - + From 530fc98972941f49523d0fab0b44ecc73431e4f6 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:43 +0200 Subject: [PATCH 022/569] OLEDBTest --- CSharpBible/DB/OLEDBTest/OleDbTest.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/DB/OLEDBTest/OleDbTest.csproj b/CSharpBible/DB/OLEDBTest/OleDbTest.csproj index d5166768d..ac5cdb340 100644 --- a/CSharpBible/DB/OLEDBTest/OleDbTest.csproj +++ b/CSharpBible/DB/OLEDBTest/OleDbTest.csproj @@ -13,7 +13,7 @@ - + From 123894c1e6e95298b70cbef201d01e9ae7f4b4b7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:43 +0200 Subject: [PATCH 023/569] OLEDBTest2 --- CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj b/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj index e626f52d6..82db9fd9e 100644 --- a/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj +++ b/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj @@ -13,7 +13,7 @@ - + From 73d7ea93252ebf022fef274a0bfb19d564415cbc Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:50 +0200 Subject: [PATCH 024/569] CustomerRepositoryTests --- .../CustomerRepositoryTests.csproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj b/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj index 525953059..660a117c0 100644 --- a/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj +++ b/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj @@ -11,11 +11,11 @@ - + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -24,7 +24,7 @@ - + From 108c67d5c2a0ee4b8e0c119403c7fbb172d71cd0 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:18:56 +0200 Subject: [PATCH 025/569] CreateCards --- CSharpBible/Games/CreateCards/CreateCards.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/CreateCards/CreateCards.csproj b/CSharpBible/Games/CreateCards/CreateCards.csproj index ce3ac64c1..a7a3b5f46 100644 --- a/CSharpBible/Games/CreateCards/CreateCards.csproj +++ b/CSharpBible/Games/CreateCards/CreateCards.csproj @@ -7,7 +7,7 @@ - + From 313382a79503c65adee73c4f158236b30478a3f8 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:02 +0200 Subject: [PATCH 026/569] Galaxia_UI --- CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj b/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj index bf0fab4f6..8f8963e24 100644 --- a/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj +++ b/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj @@ -14,7 +14,7 @@ - + From 5eaea1f6dbcb3cfb9fd0a269842303a2b6c175a5 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:06 +0200 Subject: [PATCH 027/569] Game_BaseTests --- CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj b/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj index 0a1c6a774..b813525b0 100644 --- a/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj +++ b/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6b1afd9fbbcadb9789fdd091f8577076d2e87eeb Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:19 +0200 Subject: [PATCH 028/569] Snake_BaseTests --- CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj b/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj index 38c4c9fe2..4eb11aae2 100644 --- a/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj +++ b/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 91fd1ce5bc73fa49be1a9f9ff68782739f8b4dbb Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:19 +0200 Subject: [PATCH 029/569] Snake_Console --- CSharpBible/Games/Snake_Console/Snake_Console.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Snake_Console/Snake_Console.csproj b/CSharpBible/Games/Snake_Console/Snake_Console.csproj index fbcc0d5df..bc8e5aa51 100644 --- a/CSharpBible/Games/Snake_Console/Snake_Console.csproj +++ b/CSharpBible/Games/Snake_Console/Snake_Console.csproj @@ -12,7 +12,7 @@ - + From b285a2e72c22bd8121ff1efb6d41372f2b68ba49 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:21 +0200 Subject: [PATCH 030/569] Sokoban_Base --- CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj b/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj index 31da748ed..28c82f09e 100644 --- a/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj +++ b/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj @@ -50,7 +50,7 @@ - + From 992bae6d60b047a46aefb269214961ab15a13f42 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:23 +0200 Subject: [PATCH 031/569] Sokoban_BaseTests --- CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj b/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj index c582f73f0..75e229593 100644 --- a/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj +++ b/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj @@ -15,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 254a41a1cf333ed59091d94437ba02ef887af4d4 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:26 +0200 Subject: [PATCH 032/569] Sudoku_BaseTests --- CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj b/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj index 40a9b147e..31285810d 100644 --- a/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj +++ b/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj @@ -14,7 +14,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + From eb14df787a0b216b0d0bf1a639cf57b743b5b011 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:28 +0200 Subject: [PATCH 033/569] Tetris_BaseTests --- CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj b/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj index 5bf9374c8..fc5ded758 100644 --- a/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj +++ b/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj @@ -16,7 +16,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 8659423bf3f56370968c70b5e6f40caa2caf07c1 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:28 +0200 Subject: [PATCH 034/569] VectorGfx --- CSharpBible/Games/VectorGfx/VectorGfx.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/VectorGfx/VectorGfx.csproj b/CSharpBible/Games/VectorGfx/VectorGfx.csproj index 1b0c6319f..e47a37126 100644 --- a/CSharpBible/Games/VectorGfx/VectorGfx.csproj +++ b/CSharpBible/Games/VectorGfx/VectorGfx.csproj @@ -18,7 +18,7 @@ - + From bc61a8f7a266c915239f4d30560a5f8bd9052063 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:28 +0200 Subject: [PATCH 035/569] VectorGfx2 --- CSharpBible/Games/VectorGfx2/VectorGfx2.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj b/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj index 1b0c6319f..e47a37126 100644 --- a/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj +++ b/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj @@ -18,7 +18,7 @@ - + From 4677ce0f2fb4bd2487fb28e3352fe20b0c1b679e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:29 +0200 Subject: [PATCH 036/569] VTileEdit --- CSharpBible/Games/VTileEdit/VTileEdit.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/VTileEdit/VTileEdit.csproj b/CSharpBible/Games/VTileEdit/VTileEdit.csproj index b0f4a0828..0e003986a 100644 --- a/CSharpBible/Games/VTileEdit/VTileEdit.csproj +++ b/CSharpBible/Games/VTileEdit/VTileEdit.csproj @@ -10,7 +10,7 @@ - + From ded6556081cf2a37166ba5acf5a1e3af75f1525d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:29 +0200 Subject: [PATCH 037/569] VTileEditTests --- CSharpBible/Games/VTileEditTests/VTileEditTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj b/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj index 2bd44e5a4..0ac8c6f64 100644 --- a/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj +++ b/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From f63f45bc145737edbbeb60243c093ecdff0f9d47 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:29 +0200 Subject: [PATCH 038/569] Werner_Flaschbier --- .../Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj b/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj index c0150ab02..482d7daf8 100644 --- a/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj +++ b/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj @@ -24,7 +24,7 @@ - + From 4434b013336aaf1c112b04c744ced00c0bcb62f7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:31 +0200 Subject: [PATCH 039/569] Werner_Flaschbier_BaseTests --- .../Werner_Flaschbier_ConsoleTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj index c77041a81..1b0d6155a 100644 --- a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj +++ b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 516d466046ca3aa4639e31f93c5d1584c8d8ba22 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:19:33 +0200 Subject: [PATCH 040/569] All_Graphics --- CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj b/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj index afe874690..2f0930546 100644 --- a/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj +++ b/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj @@ -28,8 +28,8 @@ - - + + From a4d295bd9fde06c803f1a73eb0f32a884a3b0913 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:20:17 +0200 Subject: [PATCH 041/569] MVVM_ImageHandling --- .../Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj | 4 ++-- .../Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj index 97437f74a..dba4faa67 100644 --- a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj +++ b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj index 7cf377d1b..48a734ec6 100644 --- a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj +++ b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj @@ -8,8 +8,8 @@ - - + + From 7dbd70434faea8b5d37cde6401f2ad63688af1a0 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:20:20 +0200 Subject: [PATCH 042/569] MVVM_ImageHandlingTests --- .../MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj | 2 +- .../MVVM_ImageHandling_netTests.csproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj index f68761f2c..d07daee22 100644 --- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj +++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj index b025b1dd7..8222033c0 100644 --- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj +++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj @@ -8,9 +8,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 314ad7b731c5ee0c05725be38913b3cc365e4f56 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:20:31 +0200 Subject: [PATCH 043/569] PermutationTests --- CSharpBible/Graphics/PermutationTests/PermutationTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj b/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj index 487894ca8..23841877d 100644 --- a/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj +++ b/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 778da812b466daaf7029f0b1fdb9718afc678f76 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:20:54 +0200 Subject: [PATCH 044/569] TitleGen --- CSharpBible/Graphics/TitleGen/TitleGen.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Graphics/TitleGen/TitleGen.csproj b/CSharpBible/Graphics/TitleGen/TitleGen.csproj index ecbb55899..2d7b0f07f 100644 --- a/CSharpBible/Graphics/TitleGen/TitleGen.csproj +++ b/CSharpBible/Graphics/TitleGen/TitleGen.csproj @@ -9,7 +9,7 @@ - + From 093e4b78bdd6b9c6301cfcd2381d05c8fa508113 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:20:56 +0200 Subject: [PATCH 045/569] BaseLib --- CSharpBible/Libraries/BaseLib/BaseLib.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Libraries/BaseLib/BaseLib.csproj b/CSharpBible/Libraries/BaseLib/BaseLib.csproj index ab4179580..d1f93c86e 100644 --- a/CSharpBible/Libraries/BaseLib/BaseLib.csproj +++ b/CSharpBible/Libraries/BaseLib/BaseLib.csproj @@ -24,6 +24,6 @@ - + \ No newline at end of file From 6a4a16e2decb346d75796dc5b6c1406063a257e5 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:20:57 +0200 Subject: [PATCH 046/569] BaseLibTests --- CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj b/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj index 985d58f92..5ac780599 100644 --- a/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj +++ b/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 2e74237ce3c22a942757a211cbbfb607928a2dcd Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:05 +0200 Subject: [PATCH 047/569] ConsoleDisplayTests --- .../Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj b/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj index b3ded236f..6d2e1461a 100644 --- a/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj +++ b/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj @@ -17,7 +17,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 50234909d01b9b7d07b292ef55228cc1d7c3ba23 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:19 +0200 Subject: [PATCH 048/569] GenInterfaces --- CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj b/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj index f861dcdf6..bb4b065eb 100644 --- a/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj +++ b/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj @@ -13,6 +13,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 90fa800de48bfe3789e65adcb86b5e1a18e64d7f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:24 +0200 Subject: [PATCH 049/569] MathLibraryTests --- CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj | 2 +- .../Libraries/MathLibraryTests/MathLibrary_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj b/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj index d84caf5c5..a7388186c 100644 --- a/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj +++ b/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj @@ -13,7 +13,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/CSharpBible/Libraries/MathLibraryTests/MathLibrary_netTests.csproj b/CSharpBible/Libraries/MathLibraryTests/MathLibrary_netTests.csproj index 6829028a7..5807e1481 100644 --- a/CSharpBible/Libraries/MathLibraryTests/MathLibrary_netTests.csproj +++ b/CSharpBible/Libraries/MathLibraryTests/MathLibrary_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From a642add43b5b8ce2bb1a528e87659f25d1cae6d7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:27 +0200 Subject: [PATCH 050/569] MVVM_BaseLib --- CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj b/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj index 365085146..cbf905d4d 100644 --- a/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj +++ b/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj @@ -26,7 +26,7 @@ - + From 2080bee23006ffe816ae839d27fbb539009af472 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:28 +0200 Subject: [PATCH 051/569] MVVM_BaseLibTests --- .../Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj b/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj index 26be6ef46..66894667b 100644 --- a/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj +++ b/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj @@ -20,12 +20,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 6af7ed91b67747022ce8c679117c9e703ca3d0d3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:46 +0200 Subject: [PATCH 052/569] DemoLibraryTests --- .../MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj index 6a166acbe..137e342b8 100644 --- a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj +++ b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj @@ -15,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7e17b8fe915eb8806a6206cca9b5c4d5f16f93b0 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:21:57 +0200 Subject: [PATCH 053/569] ItemsControlTut3_netTests --- .../ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj index 0c55b8ed1..2a331f6b2 100644 --- a/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj @@ -16,7 +16,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 9518ae4bc185eec0ee9ff25f4184101f0762650a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:02 +0200 Subject: [PATCH 054/569] ItemsControlTut4_netTests --- .../ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj index ed70455cc..fd27264dc 100644 --- a/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj @@ -15,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From c97c350f151db4b146aafe0057b2458de558af01 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:09 +0200 Subject: [PATCH 055/569] ListBindingTests --- .../MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj | 2 +- .../MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj index 8ae4f997c..bb39b5c88 100644 --- a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj @@ -27,7 +27,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj index 4083f2628..67febf751 100644 --- a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From b3fbc5c07ddf4ec039880043becfe37e81681e1f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:18 +0200 Subject: [PATCH 056/569] MVVM_00a_CTTemplateTests --- .../MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj | 2 +- .../MVVM_00a_CTTemplate_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj index be31ce388..0f5773558 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj index edcca100a..fbc035456 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From ecc5fa3db1d246bee6310e0305ecf4eee55a010b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:21 +0200 Subject: [PATCH 057/569] MVVM_00_IoCTemplate --- .../MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj | 2 +- .../MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj index d1ba16798..9e243068e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj index d53e04685..780795add 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj @@ -8,7 +8,7 @@ - + From f779f8fccf2864236fd14ffafd3be331a92dda4e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:25 +0200 Subject: [PATCH 058/569] MVVM_00_IoCTemplateTests --- .../MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj | 2 +- .../MVVM_00_IoCTemplate_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj index 191ac4c00..d78c50542 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj index 2e632ba89..1ef0a80d2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 288121477d9b8658debcd26f3014b0f90d7a2c88 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:34 +0200 Subject: [PATCH 059/569] MVVM_00_TemplateTests --- .../MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj | 2 +- .../MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj index e08278205..03d6ff0f6 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj index e55cc2ef8..d36663d91 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 124a7d4cb97243da65dbf9cb2b4f81d2ac7ba7ff Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:43 +0200 Subject: [PATCH 060/569] MVVM_03a_CTNotifyChangeTests --- .../MVVM_03a_CTNotifyChangeTests.csproj | 2 +- .../MVVM_03a_CTNotifyChange_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj index 1b865a3da..1c072b7ba 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj index 8d0610efa..cfe7dfec5 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From fc3e4abc519a895eeda7cc58df029adc76bc3a30 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:51 +0200 Subject: [PATCH 061/569] MVVM_03_NotifyChangeTests --- .../MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj | 2 +- .../MVVM_03_NotifyChange_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj index 705131696..a46a0eb7e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj index f73d7a579..e786b125c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From bc190dfc2a716a7cf74280bf0344138faa19a155 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:22:59 +0200 Subject: [PATCH 062/569] MVVM_04a_CTRelayCommandTests --- .../MVVM_04a_CTRelayCommandTests.csproj | 2 +- .../MVVM_04a_CTRelayCommand_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj index 9b53ba2e4..9276b2245 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj index c3eaf4bdc..9370f3504 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7aee1bb0e64cc8ebcd9a24899ac449fd9e049774 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:09 +0200 Subject: [PATCH 063/569] MVVM_04_DelegateCommandTests --- .../MVVM_04_DelegateCommandTests.csproj | 2 +- .../MVVM_04_DelegateCommand_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj index 9e469d0fd..e33ec269e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj index edb376ccd..7454d9eb7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 28e1f42364c6249f0144e0ab2a9228eb126d7361 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:12 +0200 Subject: [PATCH 064/569] MVVM_05a_CTCommandParCalc --- .../MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj | 2 +- .../MVVM_05a_CTCommandParCalc_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj index 8e633694a..891802cde 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj @@ -17,7 +17,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj index ff40b96f7..2d65b76a3 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj @@ -20,7 +20,7 @@ - + From 6a60731dfa42079b19d5b6cfb05272006e48c68d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:15 +0200 Subject: [PATCH 065/569] MVVM_05a_CTCommandParCalcTests --- .../MVVM_05a_CTCommandParCalcTests.csproj | 2 +- .../MVVM_05a_CTCommandParCalc_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj index aaa2e24cb..fefa34f6f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj index 7789dc794..2475a08f7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7396c1ee182e27771040f7e04b3bbe63f99ed4ea Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:24 +0200 Subject: [PATCH 066/569] MVVM_05_CommandParCalculatorTests --- .../MVVM_05_CommandParCalculatorTests.csproj | 2 +- .../MVVM_05_CommandParCalculator_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj index c255eafde..932761d16 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj index 434f6fc0c..e3aa6651d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 739806434b05f158a3785297f7958fb0b66fb102 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:34 +0200 Subject: [PATCH 067/569] MVVM_06_ConvertersTests --- .../MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj index 0115a7c2b..5a56abf8b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 0e823bd3760b717938d177439b2863017cca36e5 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:44 +0200 Subject: [PATCH 068/569] MVVM_06_Converters_3Tests --- .../MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj | 2 +- .../MVVM_06_Converters_3_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj index 63f6166e9..f16fcbe79 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj index be0fee207..d9d3439f9 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 97a411d07adc22edf32a4fe827c2723ca5c7be9e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:47 +0200 Subject: [PATCH 069/569] MVVM_06_Converters_4 --- .../MVVM_06_Converters_4/MVVM_06_Converters_4.csproj | 2 +- .../MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj index 2813669e9..8b8236095 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj index 21169dfe3..1cc35b2e7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj @@ -14,7 +14,7 @@ - + From 23e372232db5157285ab791c03f2958214741b59 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:23:51 +0200 Subject: [PATCH 070/569] MVVM_06_Converters_4Tests --- .../MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj | 2 +- .../MVVM_06_Converters_4_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj index f6304cac6..bb4c49991 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj index 913987f11..82221dd49 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 9c8a92e2d8bceb7aa617e0136558b8f57ade78eb Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:24:00 +0200 Subject: [PATCH 071/569] MVVM_09a_CTDialogBoxesTests --- .../MVVM_09a_CTDialogBoxesTests.csproj | 2 +- .../MVVM_09a_CTDialogBoxes_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj index 492b6fdc2..e3964eb18 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj index edd359802..901ce91b6 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 90b6632b8e14def3d941149cc7a2d5f48b31c12e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:24:09 +0200 Subject: [PATCH 072/569] MVVM_09_DialogBoxesTest --- .../MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj | 2 +- .../MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj index 24c1ddc04..88535a567 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj index 8a71bdce5..f6cce5f91 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From b856330e6e3b3a9ddfc7868825e08072c281f672 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:24:18 +0200 Subject: [PATCH 073/569] MVVM_16_UserControl1Tests --- .../MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj | 2 +- .../MVVM_16_UserControl1_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj index 9cbb28031..102173924 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj index 1f735b90a..1dd39e1f7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 2bbc588226746e759576d44f84d0bfa2579e3a1a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:24:39 +0200 Subject: [PATCH 074/569] MVVM_18_MultiConvertersTests --- .../MVVM_18_MultiConvertersTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj index 1f865fce3..08c3d7233 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 643dd1487e5e7cf9dfe8927de05ec0bed6d75486 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:24:45 +0200 Subject: [PATCH 075/569] MVVM_19_FilterListsTests --- .../MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj | 2 +- .../MVVM_19_FilterLists_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj index a9d7d77a4..786545b49 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj @@ -27,7 +27,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj index a9c56ac06..88004cffd 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 84aac5315fc05e18d4c8bf588641228181eb3aad Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:24:54 +0200 Subject: [PATCH 076/569] MVVM_20a_CTSysdialogsTests --- .../MVVM_20a_CTSysdialogsTests.csproj | 2 +- .../MVVM_20a_CTSysdialogs_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj index 15cc97fb3..b8afcaf7a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj @@ -15,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj index bbb4bdd79..285c7a279 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 44787bd639390f1189bd2665e278a0f42361de2e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:02 +0200 Subject: [PATCH 077/569] MVVM_20_SysdialogsTests --- .../MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj | 2 +- .../MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj index 18cceef1d..5b00bf021 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj @@ -15,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj index d49d78d2c..25375373c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6314b7301ddda73c5ec9e9f63ec049237b3093f0 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:16 +0200 Subject: [PATCH 078/569] MVVM_22_CTWpfCap --- .../MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj | 2 +- .../MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj index b03b3b0c8..ff835e6b8 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj @@ -22,7 +22,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj index 0b87ea46b..c122aec87 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj @@ -19,7 +19,7 @@ - + From 80c64104b4da3d45979f7f5168de112021a5f078 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:20 +0200 Subject: [PATCH 079/569] MVVM_22_CTWpfCapTests --- .../MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj | 2 +- .../MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj index ab771d959..27851f224 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj index 19bdb945a..1f2d4a8b7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj @@ -22,13 +22,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 6adce2b3de54ed61ada7fc9d20f1577eac363b3b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:24 +0200 Subject: [PATCH 080/569] MVVM_22_WpfCap --- CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj | 2 +- .../MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj index 20bc45544..bf110cca7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj @@ -22,7 +22,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj index 758a96e00..a07ad4aa8 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj @@ -19,7 +19,7 @@ - + From b6a64773460c0fb9312efded0060132a87a12f53 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:27 +0200 Subject: [PATCH 081/569] MVVM_22_WpfCapTests --- .../MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj | 2 +- .../MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj index cf4b7c628..1d07b6824 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj index 7ddf738d5..0794c96dc 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 211cc7a7fec3f8561bf579e18d81165970e55633 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:36 +0200 Subject: [PATCH 082/569] MVVM_24a_CTUserControlTests --- .../MVVM_24a_CTUserControlTests.csproj | 2 +- .../MVVM_24a_CTUserControl_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj index 2f49797a6..2fce76ae4 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj index b115ff8d4..917142bd9 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 228a4c44b3931b3de61d9bab3f063fcfb119c942 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:48 +0200 Subject: [PATCH 083/569] MVVM_24b_UserControlTests --- .../MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj | 2 +- .../MVVM_24b_UserControl_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj index e669eb588..d5025600c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj index 6f05096a1..d7850d15e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From bc8908eb8210f35866c9ddb0b7f6e2e3e48b7012 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:25:59 +0200 Subject: [PATCH 084/569] MVVM_24c_CTUserControlTests --- .../MVVM_24c_CTUserControlTests.csproj | 2 +- .../MVVM_24c_CTUserControl_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj index 8aba20fb5..90d988287 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj index e93383db2..923a860aa 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 0d58639b197ac30d906f3fb8c699d5a00b0e26f1 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:11 +0200 Subject: [PATCH 085/569] MVVM_24_UserControlTests --- .../MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj | 2 +- .../MVVM_24_UserControl_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj index 0dee8cde8..54af138cd 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj index 6ebaeb241..b0ffa3de9 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From a164cce3a78650f3113294316135ac2ec35f20c3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:14 +0200 Subject: [PATCH 086/569] MVVM_25_RichTextEdit --- .../MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj | 2 +- .../MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj index 0d7914030..4d8a76760 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj @@ -12,7 +12,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj index 3a57b5d01..1fbaf8d83 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj @@ -11,7 +11,7 @@ - + From 4be51d6eef8542d45847e8566d529fcf98a570e7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:18 +0200 Subject: [PATCH 087/569] MVVM_25_RichTextEditTests --- .../MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj | 2 +- .../MVVM_25_RichTextEdit_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj index 2a8f4b2b7..cd7ee217c 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj index 030e5e43e..0bb75ff01 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From c8f47d9175f137a486e6341d7242dde1501ef833 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:38 +0200 Subject: [PATCH 088/569] MVVM_27_DataGridTests --- .../MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj | 2 +- .../MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj index 83ef498e2..44d7c3b1a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj index 3b027992f..f9e8f2150 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 8b2e35ea434225c626386fe1d0a6f985244fca53 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:42 +0200 Subject: [PATCH 089/569] MVVM_28_1_CTDataGridExt --- .../MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj | 2 +- .../MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj index a300a025a..b66d6adaa 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj index ea257179f..2e3cb5216 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj @@ -8,7 +8,7 @@ - + From f6bf270ac7cb4344114e5734653f8f18f1ebfc03 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:45 +0200 Subject: [PATCH 090/569] MVVM_28_1_CTDataGridExtTests --- .../MVVM_28_1_CTDataGridExtTests.csproj | 2 +- .../MVVM_28_1_CTDataGridExt_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj index 386dbe485..26389b5ea 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj index 41e8d5482..1eafe4253 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 96a8c935688cebf36a12043eec3009a022a3d492 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:26:55 +0200 Subject: [PATCH 091/569] MVVM_28_1_DataGridExtTests --- .../MVVM_28_1_DataGridExtTests.csproj | 2 +- .../MVVM_28_1_DataGridExt_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj index 6ca0de73d..8fac1a27d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj index be28196da..ed83eab40 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 8f83770cc77303119d081f03f9e35eb4516d89c5 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:27:04 +0200 Subject: [PATCH 092/569] MVVM_28_DataGridTests --- .../MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj | 2 +- .../MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj index 64f33b659..9c580b21b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj index 96241e03a..9def65217 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From c7c4e48212a6a2edfc497ec04d247b8e12f5adfb Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:27:13 +0200 Subject: [PATCH 093/569] MVVM_31a_CTValidation1Tests --- .../MVVM_31a_CTValidation1Tests.csproj | 2 +- .../MVVM_31a_CTValidation1_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj index a8b83e8da..2cb53d332 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj index 016896d7b..17d37b463 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From b3a71538178d2877e10a40af67278de7bd4b0b48 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:27:22 +0200 Subject: [PATCH 094/569] MVVM_31a_CTValidation2Tests --- .../MVVM_31a_CTValidation2Tests.csproj | 2 +- .../MVVM_31a_CTValidation2_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj index ae84f7005..e32266c99 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj index 1cbaf6644..77804fdb2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 929fdc09d6815d4928c519b5c70e4a7a8eef13ef Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:27:31 +0200 Subject: [PATCH 095/569] MVVM_31a_CTValidation3Tests --- .../MVVM_31a_CTValidation3Tests.csproj | 2 +- .../MVVM_31a_CTValidation3_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj index 17ee181f8..8019f1b29 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj index 082eda5eb..ace88065e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From e4bbf49d817b78cbba03a4cff449b9439147abb5 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:27:43 +0200 Subject: [PATCH 096/569] MVVM_31_Validation1Tests --- .../MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj | 2 +- .../MVVM_31_Validation1_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj index aa6622de4..23517b70f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj index e42881e6b..16836bcc1 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 4956eab66b56e72545ac689ec2a151d861a509a7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:27:53 +0200 Subject: [PATCH 097/569] MVVM_31_Validation2Tests --- .../MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj | 2 +- .../MVVM_31_Validation2_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj index 68eb3c266..78b514775 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj index f8662ff31..927b4f482 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 31de8ea6664cf43029db73e2482d457306903862 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:02 +0200 Subject: [PATCH 098/569] MVVM_33a_CTEvents_To_CommandsTests --- .../MVVM_33a_CTEvents_To_CommandsTests.csproj | 2 +- .../MVVM_33a_CTEvents_To_Commands_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj index 760b19a99..039192278 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj index 115c151bf..faa8b5951 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From d091b20b455fe0420c4b32408f708254c8443e43 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:11 +0200 Subject: [PATCH 099/569] MVVM_33_Events_to_CommandsTests --- .../MVVM_33_Events_to_CommandsTests.csproj | 2 +- .../MVVM_33_Events_to_Commands_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj index 1be3b4c87..fa17ffd2a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj index be1028ccb..81d75ad8b 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From ec8629326da2480c1b10fe5b684222fcfc78770d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:19 +0200 Subject: [PATCH 100/569] MVVM_34a_CTBindingEventArgsTests --- .../MVVM_34a_CTBindingEventArgsTests.csproj | 2 +- .../MVVM_34a_CTBindingEventArgs_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj index cb02ab3ce..f61cc33e6 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj index 3797d6f14..65c150e9a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 69183f93fbaf52b52125a4b33d2fc778b2dd9141 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:28 +0200 Subject: [PATCH 101/569] MVVM_34_BindingEventArgsTests --- .../MVVM_34_BindingEventArgsTests.csproj | 2 +- .../MVVM_34_BindingEventArgs_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj index 24be0e0b8..2cbb01162 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj index 59443f7f0..376c19a60 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 780b0ce8d36379b9d9da7ae7f4d563d076ec4cde Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:37 +0200 Subject: [PATCH 102/569] MVVM_35_CommunityToolkitTests --- .../MVVM_35_CommunityToolkitTests.csproj | 2 +- .../MVVM_35_CommunityToolkit_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj index ab47f23af..5f5b121c2 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj index 9eda84deb..85a455e1f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 596577c4eb81b2b64985325c74a3e132700fad98 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:40 +0200 Subject: [PATCH 103/569] MVVM_36_ComToolKtSavesWork --- .../MVVM_36_ComToolKtSavesWork.csproj | 2 +- .../MVVM_36_ComToolKtSavesWork_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj index dbf62f211..a61862468 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj index 554c738d5..c3f5d8c8e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj @@ -8,7 +8,7 @@ - + From 518c6c623e939631d45b1e0644ab580044ded2ed Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:42 +0200 Subject: [PATCH 104/569] MVVM_36_ComToolKtSavesWorkTests --- .../MVVM_36_ComToolKtSavesWorkTests.csproj | 2 +- .../MVVM_36_ComToolKtSavesWork_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj index d121e16f9..22b05f6a4 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj index 83410b560..6666c620e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6ab9c86468c6e2a13023e8b2b80bf58a0187be4a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:45 +0200 Subject: [PATCH 105/569] MVVM_37_TreeView --- .../MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj | 2 +- .../MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj index 0e2ac4d2f..9bd7f3bf5 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj @@ -12,7 +12,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj index e3550e264..dfb5e06bf 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj @@ -8,7 +8,7 @@ - + From 6a6d23adbcd61685a9e4485b76b61c5291944ca7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:47 +0200 Subject: [PATCH 106/569] MVVM_37_TreeViewTests --- .../MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj | 2 +- .../MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj index 110e1bef2..28a69b513 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj index abfca548c..afe19df31 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From aac92bbdea1b235df3bcdf83244737e383cec10f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:51 +0200 Subject: [PATCH 107/569] MVVM_38_CTDependencyInjection --- .../MVVM_38_CTDependencyInjection.csproj | 2 +- .../MVVM_38_CTDependencyInjection_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj index d1ba16798..9e243068e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj index 464e98a0f..26278ba8d 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj @@ -8,7 +8,7 @@ - + From d5698981748715e3043bc5b2b85bd75714bd3090 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:53 +0200 Subject: [PATCH 108/569] MVVM_38_CTDependencyInjectionTests --- .../MVVM_38_CTDependencyInjectionTests.csproj | 2 +- .../MVVM_38_CTDependencyInjection_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj index 007856b31..2b4fe1e61 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj index 1862d1c0a..121e8f431 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6517f85d522cbbcf60bd043f1608851672409e0b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:55 +0200 Subject: [PATCH 109/569] MVVM_39_MultiModelTest --- .../MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj | 2 +- .../MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj index 2a9c65501..1c4967f27 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj index f9a500bc9..9c8b927e9 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj @@ -8,7 +8,7 @@ - + From 062831ea04417f1c7b1f1f497ea1a54b769ed105 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:28:58 +0200 Subject: [PATCH 110/569] MVVM_39_MultiModelTestTests --- .../MVVM_39_MultiModelTestTests.csproj | 2 +- .../MVVM_39_MultiModelTest_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj index 43bb5a4af..8ede82116 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj index c7df81eb3..cbf49ae0f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From b854fb192e53bc5b5d5fccf8e86fc0800fd3a144 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:00 +0200 Subject: [PATCH 111/569] MVVM_40_Wizzard --- .../MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj | 2 +- .../MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj index f95a3c536..2b70d6e58 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj @@ -20,7 +20,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj index 7b5592810..f5d71e3c3 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj @@ -16,7 +16,7 @@ - + From 8b1c692d43d641bc00c52bf622585c11bcea1ed7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:03 +0200 Subject: [PATCH 112/569] MVVM_40_WizzardTests --- .../MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj | 2 +- .../MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj index ed816e7ca..07ab23ad8 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj index 63a498cf1..3570afc3a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 1a77629b339d0862cb26162e42835f3068368037 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:05 +0200 Subject: [PATCH 113/569] MVVM_41_Sudoku --- CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj | 2 +- .../MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj index 0bc8fb903..89995937a 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj @@ -11,7 +11,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj index 5a92069c8..92892d170 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj @@ -13,7 +13,7 @@ - + From d707eeb04202164cc53cc1861f0dfcde7a795644 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:07 +0200 Subject: [PATCH 114/569] MVVM_41_SudokuTests --- .../MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj | 2 +- .../MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj index 3904f714c..f0cc5c8a7 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj index a1c42757d..38f7aa869 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 6a01b43c2f62c75da7a2aabe3d87bb4bd57e72dc Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:10 +0200 Subject: [PATCH 115/569] MVVM_99_SomeIssue --- .../MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj | 2 +- .../MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj index 216c08d55..9e243068e 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj index 338689ba7..780795add 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj @@ -8,7 +8,7 @@ - + From 6c6dc351800c3c439e787f855fa00e7cac361ada Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:17 +0200 Subject: [PATCH 116/569] MVVM_AllExamples --- .../MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj index 1e11d00c1..0e84a38ea 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj @@ -8,7 +8,7 @@ - + From ad0c8cde5b30aa3d20f42167bf7c6656ec137c7c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:21 +0200 Subject: [PATCH 117/569] MVVM_AllExamplesTests --- .../MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj | 2 +- .../MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj index 7c59ad28b..8618b808f 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj index 60a46affd..b01180ebc 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From c2dea361f01585bbe8495cb6a2b35dd4ada850e4 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:38 +0200 Subject: [PATCH 118/569] WpfAppTests --- CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj | 2 +- CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj index f69d8caf3..fccc5f70e 100644 --- a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj +++ b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj index 4c4075336..2c358fd3a 100644 --- a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 84688a7f1cf25f69416bcb4592d2e3b09017842f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:51 +0200 Subject: [PATCH 119/569] Pattern_00_Template --- .../Pattern_00_Template/Pattern_00_Template.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj b/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj index 858346c8d..ce675dcc0 100644 --- a/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj +++ b/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj @@ -15,7 +15,7 @@ - + From 4f2c0f227651af737da7a873c8a36b7e861525bf Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:51 +0200 Subject: [PATCH 120/569] Pattern_00_TemplateTests --- .../Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj b/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj index ff4d0a818..e74b76a8f 100644 --- a/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj +++ b/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From a41470a0f5337c888f5b866092613cc462c4fb8a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:55 +0200 Subject: [PATCH 121/569] Pattern_01_SingletonTests --- .../Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj b/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj index 29f290606..4981366a5 100644 --- a/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj +++ b/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 1c75f316819816a61db857a8a542709309b71f69 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:29:59 +0200 Subject: [PATCH 122/569] Pattern_02_ObserverTests --- .../Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj b/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj index 09a0e71c6..b86d4d6c7 100644 --- a/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj +++ b/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 16a159aac5b2b98a2c2633300c029dffec7c60e7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:30:22 +0200 Subject: [PATCH 123/569] SomeThing2aTests --- CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj b/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj index a2d97e20a..db00f9f1a 100644 --- a/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj +++ b/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 869ea41b72f72ba7a09020e736a83ca7f3c5c783 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:30:22 +0200 Subject: [PATCH 124/569] SomeThing2Tests --- CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj b/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj index 411221351..e86ace3e9 100644 --- a/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj +++ b/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj @@ -11,7 +11,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 8a9fb308194be3349a1c95a10ab485b4fe87ff77 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:30:25 +0200 Subject: [PATCH 125/569] Tests --- CSharpBible/Tests/Test.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Tests/Test.csproj b/CSharpBible/Tests/Test.csproj index e22c84f3c..0788c3d7a 100644 --- a/CSharpBible/Tests/Test.csproj +++ b/CSharpBible/Tests/Test.csproj @@ -12,7 +12,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From b5968470ef3cd1a4a124b4b0a8bf1c688884c10c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:05 +0200 Subject: [PATCH 126/569] WPF_AnimationTimingTests --- .../WPF_AnimationTimingTests/WPF_AnimationTimingTests.csproj | 2 +- .../WPF_AnimationTiming_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTimingTests.csproj b/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTimingTests.csproj index ea553ac6f..1ba815433 100644 --- a/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTimingTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTimingTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTiming_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTiming_netTests.csproj index 45c1e8443..1a2303431 100644 --- a/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTiming_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_AnimationTimingTests/WPF_AnimationTiming_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 31a5737e8a5dbf34e1578adcb4806cd94268f162 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:08 +0200 Subject: [PATCH 127/569] WPF_Brushes --- CSharpBible/WPFSamples_2/WPF_Brushes/WPF_Brushes.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Brushes/WPF_Brushes.csproj b/CSharpBible/WPFSamples_2/WPF_Brushes/WPF_Brushes.csproj index 428e966b5..c85657fb3 100644 --- a/CSharpBible/WPFSamples_2/WPF_Brushes/WPF_Brushes.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Brushes/WPF_Brushes.csproj @@ -32,7 +32,7 @@ - + From 6824a48cdba889ef99789173c38b2719d5532611 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:13 +0200 Subject: [PATCH 128/569] WPF_Complex_LayoutTests --- .../WPF_Complex_LayoutTests/WPF_Complex_LayoutTests.csproj | 2 +- .../WPF_Complex_LayoutTests/WPF_Complex_Layout_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_LayoutTests.csproj b/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_LayoutTests.csproj index fe3881e7b..32cf474c5 100644 --- a/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_LayoutTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_LayoutTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_Layout_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_Layout_netTests.csproj index c78020c7d..93e318735 100644 --- a/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_Layout_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Complex_LayoutTests/WPF_Complex_Layout_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 7875c232d32203c1b932dca80d143d16052d2610 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:22 +0200 Subject: [PATCH 129/569] WPF_ControlsAndLayoutTests --- .../WPF_ControlsAndLayoutTests.csproj | 2 +- .../WPF_ControlsAndLayout_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayoutTests.csproj b/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayoutTests.csproj index c54cf2ce7..eab8c70dd 100644 --- a/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayoutTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayoutTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayout_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayout_netTests.csproj index 3422c301a..bdec7bb0b 100644 --- a/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayout_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_ControlsAndLayoutTests/WPF_ControlsAndLayout_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 65774e7f6566d65ff09bf59ca4fbc8b5d5aeeef6 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:34 +0200 Subject: [PATCH 130/569] WPF_CustomAnimationTests --- .../WPF_CustomAnimationTests/WPF_CustomAnimationTests.csproj | 2 +- .../WPF_CustomAnimation_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimationTests.csproj b/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimationTests.csproj index 7abcec43e..998a79bd1 100644 --- a/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimationTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimationTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimation_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimation_netTests.csproj index dc236aba4..ad13f9d47 100644 --- a/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimation_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_CustomAnimationTests/WPF_CustomAnimation_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 737e7e5399ba1cbafbbe9b39d443bb701a45d072 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:37 +0200 Subject: [PATCH 131/569] WPF_Geometry --- CSharpBible/WPFSamples_2/WPF_Geometry/WPF_Geometry.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Geometry/WPF_Geometry.csproj b/CSharpBible/WPFSamples_2/WPF_Geometry/WPF_Geometry.csproj index 93589279c..eb0ab0a75 100644 --- a/CSharpBible/WPFSamples_2/WPF_Geometry/WPF_Geometry.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Geometry/WPF_Geometry.csproj @@ -24,7 +24,7 @@ - + From 71fb13eb25770648355cdaab861577182e47da7e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:38 +0200 Subject: [PATCH 132/569] WPF_Hello_World --- CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World.csproj | 2 +- .../WPFSamples_2/WPF_Hello_World/WPF_Hello_World_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World.csproj b/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World.csproj index 9aa1ccf9e..a49f7c685 100644 --- a/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World_net.csproj b/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World_net.csproj index b3ccbf687..7a0739425 100644 --- a/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World_net.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Hello_World/WPF_Hello_World_net.csproj @@ -8,7 +8,7 @@ - + From a4ac45570613455687c6ab7c29ee83609b8befe2 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:42 +0200 Subject: [PATCH 133/569] WPF_Hello_WorldTests --- .../WPF_Hello_WorldTests/WPF_Hello_WorldTests.csproj | 2 +- .../WPF_Hello_WorldTests/WPF_Hello_World_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_WorldTests.csproj b/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_WorldTests.csproj index 820c888c7..9a41c7464 100644 --- a/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_WorldTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_WorldTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_World_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_World_netTests.csproj index eec89ea38..cfff935cb 100644 --- a/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_World_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Hello_WorldTests/WPF_Hello_World_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 2c32deef6b76140d3e6fc621772150e5a8243b43 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:45 +0200 Subject: [PATCH 134/569] WPF_ImageView --- CSharpBible/WPFSamples_2/WPF_ImageView/WPF_ImageView.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/WPFSamples_2/WPF_ImageView/WPF_ImageView.csproj b/CSharpBible/WPFSamples_2/WPF_ImageView/WPF_ImageView.csproj index bc1beb8f1..62bcf2f78 100644 --- a/CSharpBible/WPFSamples_2/WPF_ImageView/WPF_ImageView.csproj +++ b/CSharpBible/WPFSamples_2/WPF_ImageView/WPF_ImageView.csproj @@ -33,7 +33,7 @@ - + From 087bf43408b548e8d82415f7d7143bad455e339f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:31:52 +0200 Subject: [PATCH 135/569] WPF_MasterDetailTests --- .../WPF_MasterDetailTests/WPF_MasterDetailTests.csproj | 2 +- .../WPF_MasterDetailTests/WPF_MasterDetail_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetailTests.csproj b/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetailTests.csproj index ebb312550..2205e42e9 100644 --- a/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetailTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetailTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetail_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetail_netTests.csproj index 4afe2119a..615165dd4 100644 --- a/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetail_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_MasterDetailTests/WPF_MasterDetail_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 43883983a983c68ac6115264c65b3185af72b987 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:32:04 +0200 Subject: [PATCH 136/569] WPF_MoveWindowTests --- .../WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindowTests.csproj | 2 +- .../WPF_MoveWindowTests/WPF_MoveWindow_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindowTests.csproj b/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindowTests.csproj index 9fe903acf..85e819b9d 100644 --- a/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindowTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindowTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindow_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindow_netTests.csproj index c54221f65..05f38c36b 100644 --- a/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindow_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_MoveWindowTests/WPF_MoveWindow_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From c909d7560899c1337765ca991496134dc523ff1c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:32:08 +0200 Subject: [PATCH 137/569] WPF_Sample_Template --- .../WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template.csproj | 2 +- .../WPF_Sample_Template/WPF_Sample_Template_net.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template.csproj b/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template.csproj index 9aa1ccf9e..a49f7c685 100644 --- a/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template.csproj @@ -8,7 +8,7 @@ - + diff --git a/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template_net.csproj b/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template_net.csproj index b3ccbf687..7a0739425 100644 --- a/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template_net.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Sample_Template/WPF_Sample_Template_net.csproj @@ -8,7 +8,7 @@ - + From 5bedcd26ab91c40ea3518eec5aff03fff7b1e3a8 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:32:14 +0200 Subject: [PATCH 138/569] WPF_Sample_TemplateTests --- .../WPF_Sample_TemplateTests/WPF_Sample_TemplateTests.csproj | 2 +- .../WPF_Sample_Template_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_TemplateTests.csproj b/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_TemplateTests.csproj index a2db1008f..f7b908b56 100644 --- a/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_TemplateTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_TemplateTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_Template_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_Template_netTests.csproj index c80a91b66..2f3fb4292 100644 --- a/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_Template_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_Sample_TemplateTests/WPF_Sample_Template_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 62cae795a5248945d4f9e453f310e34dba3f0cb3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:32:26 +0200 Subject: [PATCH 139/569] WPF_StickyNotesDemoTests --- .../WPF_StickyNotesDemoTests/WPF_StickyNotesDemoTests.csproj | 2 +- .../WPF_StickyNotesDemo_netTests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemoTests.csproj b/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemoTests.csproj index 86ab0ec6b..27e8a7778 100644 --- a/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemoTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemoTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemo_netTests.csproj b/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemo_netTests.csproj index ff598e606..0a0f0cae7 100644 --- a/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemo_netTests.csproj +++ b/CSharpBible/WPFSamples_2/WPF_StickyNotesDemoTests/WPF_StickyNotesDemo_netTests.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 5fe6625c06a0af787383bf858a1d6d5b9d6f26df Mon Sep 17 00:00:00 2001 From: Joe Care Date: Wed, 17 Sep 2025 18:32:43 +0200 Subject: [PATCH 140/569] CSharpBible --- CSharpBible/CSharpBible.sln | 4453 ++++++++++++++++++++- CSharpBible/Calc/Directory.Packages.props | 6 +- 2 files changed, 4454 insertions(+), 5 deletions(-) diff --git a/CSharpBible/CSharpBible.sln b/CSharpBible/CSharpBible.sln index c9db77561..60f666379 100644 --- a/CSharpBible/CSharpBible.sln +++ b/CSharpBible/CSharpBible.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.1.32421.90 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11012.119 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{2507ABCC-C0AD-4108-BB22-29D26F0E58B9}" ProjectSection(SolutionItems) = preProject @@ -981,1728 +981,6024 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc32.WPF", "Calc\Calc32WP EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexaBan", "HexaBan\HexaBan.csproj", "{D3656A8A-2504-4537-8C34-F2B93D8E53EC}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calc32Cons", "Calc32Cons", "{27CA988F-D0B1-44A3-C522-7B0FE34AC26B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calc32Tests", "Calc32Tests", "{3FBFCD30-512F-5378-410A-570AC4EA4596}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calc32WPF", "Calc32WPF", "{4A11C420-A2D1-C3D6-782C-68D0E71D3A02}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc32_net.WPF", "Calc\Calc32WPF\Calc32_net.WPF.csproj", "{24788952-DCC6-4D42-8D1C-B3B6D3130A63}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{F2E35B3E-9711-EDEC-6202-DB40BDEED14A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calc32WPFTests", "Calc32WPFTests", "{95E26BD5-1687-298F-F8B4-FABD41602EDB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc64WF", "Calc\Calc64WF\Calc64WF.csproj", "{3E75CC72-F514-405F-947D-CFE690DF5947}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WFSystem.Data", "WFSystem.Data", "{6D8B63C3-DD1E-8A5C-B171-6D20D3F89E60}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc64WFTests", "Calc\Calc64WFTests\Calc64WFTests.csproj", "{5532F188-437D-423B-B883-1ECF3BFAF7C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WaveFuncCol", "WaveFuncCol", "{7CCAAAAC-B84A-93BB-8156-EAF8E95D8524}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveFunCollapse", "ConsoleApps\WaveFuncCol\WaveFunCollapse.csproj", "{35478F32-2633-43E7-BFC2-CE7A9BFBA05F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveFunCollapse_net", "ConsoleApps\WaveFuncCol\WaveFunCollapse_net.csproj", "{879AE820-20CC-46CA-9009-64D32502B902}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveFuncColFrm", "ConsoleApps\WaveFuncColFrm\WaveFuncColFrm.csproj", "{0D69001C-8230-494F-8CE8-0ECB56EE879E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DocumentUtils", "DocumentUtils", "{C59CD07D-726D-36FF-06E5-2CFE8C4AA341}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Base", "Data\DocumentUtils\Document.Base\Document.Base.csproj", "{B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Html", "Data\DocumentUtils\Document.Html\Document.Html.csproj", "{D330949C-D1F0-4ACB-875A-31103D037C8E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Odf", "Data\DocumentUtils\Document.Odf\Document.Odf.csproj", "{12AFF030-3076-4AA8-9455-376135FEE8B2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Pdf", "Data\DocumentUtils\Document.Pdf\Document.Pdf.csproj", "{CEAC9DDF-09B5-4458-868C-5C55AF2D1004}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HelloWorld", "HelloWorld", "{3E67E7E7-E882-9F59-D079-FC5B21A859BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorldOdf", "Data\DocumentUtils\HelloWorld\HelloWorldOdf.csproj", "{144D3191-A382-4F2E-A66E-93D4ADDBF772}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlExample", "Data\DocumentUtils\HtmlExample\HtmlExample.csproj", "{953FC22C-C991-4592-A79C-7B47F0643DD9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OdtBoldTextExample", "Data\DocumentUtils\OdtBoldTextExample\OdtBoldTextExample.csproj", "{413C9216-A248-4561-9051-47D8CB7D5E03}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PdfExample", "Data\DocumentUtils\PdfExample\PdfExample.csproj", "{1A5C4376-871E-474B-8EE2-EBCF1FDCD275}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NebelEbook", "Data\NebelEbook\NebelEbook.csproj", "{B62A835C-7EAF-465C-97C5-CD7D33A80DC1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RepoMigrator", "RepoMigrator", "{B1288289-8E4E-6C15-7A35-26F58963379A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoMigrator.App.Wpf", "Data\RepoMigrator\RepoMigrator.App.Wpf\RepoMigrator.App.Wpf.csproj", "{40195C95-70C5-46D9-B315-8C4853D61BB8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoMigrator.Core", "Data\RepoMigrator\RepoMigrator.Core\RepoMigrator.Core.csproj", "{5AB47124-984B-4FBA-9091-906E92C21051}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoMigrator.Providers.Git", "Data\RepoMigrator\RepoMigrator.Providers.Git\RepoMigrator.Providers.Git.csproj", "{422830F2-BA7F-4352-B1FA-9FEFE05A6473}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoMigrator.Providers.SvnCli", "Data\RepoMigrator\RepoMigrator.Providers.SvnCli\RepoMigrator.Providers.SvnCli.csproj", "{E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoMigrator.Providers.Svn", "Data\RepoMigrator\RepoMigrator.Providers.Svn\RepoMigrator.Providers.Svn.csproj", "{533DA3F1-0980-49AD-9671-79B67708D5B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoMigrator.Tests", "Data\RepoMigrator\RepoMigrator.Tests\RepoMigrator.Tests.csproj", "{E76F260F-2C64-4AAA-968A-0897A53B3CC4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Asteroids", "Asteroids", "{93599B04-1843-177F-5584-7EF3F0570CA1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Galaxia_Base", "Games\Galaxia_Base\Galaxia_Base.csproj", "{537B871D-3F5B-4B3D-8802-C51EF3B74C56}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Galaxia_BaseTests", "Games\Galaxia_BaseTests\Galaxia_BaseTests.csproj", "{09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Galaxia_UI", "Games\Galaxia_UI\Galaxia_UI.csproj", "{B63048B4-A819-4055-8F5D-298234C1B370}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Galaxia_UI.Tests", "Games\Galaxia_UI.Tests\Galaxia_UI.Tests.csproj", "{2536C0B3-710C-4E64-8902-4087B02850A5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexaBan_Console", "Games\HexaBan_Console\HexaBan_Console.csproj", "{9BDBE4AE-2C2F-407C-B505-111DF20E4B75}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexaBan_ConsoleLnx", "Games\HexaBan_Console\HexaBan_ConsoleLnx.csproj", "{286835C4-3512-4B7D-954C-68730467D873}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexaBan_ConsoleWin", "Games\HexaBan_Console\HexaBan_ConsoleWin.csproj", "{A8CDC6DB-7162-40D0-847A-B315EAE6362A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Werner_Flaschbier", "Werner_Flaschbier", "{C0BAF5C2-A612-C75B-506C-C44F4931DFAF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Werner_Flaschbier_BaseTests", "Games\Werner_Flaschbier_BaseTests\Werner_Flaschbier_BaseTests.csproj", "{76AA26DD-63AA-4F75-9D82-783C5F153D1F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "All_Graphics", "All_Graphics", "{2912AFB9-D603-3E64-AD11-26DE507B708A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDisc", "Graphics\PrimeDisc\PrimeDisc.csproj", "{1B102E23-1FAE-426B-8A4F-640E8C41F23E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CommonDialogs", "CommonDialogs", "{45205C9A-D287-40D4-A591-FBF46BE1EE8B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConsoleLib", "ConsoleLib", "{2B5109A9-60F0-FA4F-248A-32AEA1B9E3E7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSFreeVision_", "CSFreeVision_", "{A9C8AE41-49E9-B0D1-B9C2-3707A36590C0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MathLIbrary", "MathLIbrary", "{7647491A-E6D3-3A0A-FAC9-B20F025B9228}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MathLibraryTests", "MathLibraryTests", "{11C1845A-12CF-43AD-D569-D94A7B64BA41}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WFSystem.Windows.Data_net", "Libraries\WFSystem.Data\WFSystem.Windows.Data_net.csproj", "{CA54E8DB-2D43-408B-9F32-202993926BDA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00a_CTTemplate", "MVVM_00a_CTTemplate", "{35B67E21-F95C-A128-AAC7-98ECD309BB08}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00a_CTTemplateTests", "MVVM_00a_CTTemplateTests", "{81B5ADF0-0FE7-38B6-BB1F-258668F73A55}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_IoCTemplate", "MVVM_00_IoCTemplate", "{937B2B28-C6F9-F736-CA84-6F41EC001F72}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_IoCTemplateTests", "MVVM_00_IoCTemplateTests", "{89E47D2D-0FED-252E-89BF-3867D1F3EA7C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_Template", "MVVM_00_Template", "{F4C0F0A1-8F1E-2F16-0055-3BD455FB79A8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_TemplateTests", "MVVM_00_TemplateTests", "{356B940A-B913-2682-98C3-C3E57573DC3A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03a_CTNotifyChange", "MVVM_03a_CTNotifyChange", "{3D234EAB-5375-DFC1-C54A-EFE9FA9110CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03a_CTNotifyChangeTests", "MVVM_03a_CTNotifyChangeTests", "{094E084C-39C6-61F1-3E88-AEB60E3E12BB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03_NotifyChange", "MVVM_03_NotifyChange", "{B364655D-B626-F63D-0168-22FFCA099451}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03_NotifyChangeTests", "MVVM_03_NotifyChangeTests", "{5F9756D8-F7B6-5C70-7839-41F6CD4BC35E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04a_CTRelayCommand", "MVVM_04a_CTRelayCommand", "{52B8A00A-66D5-4CCC-1708-B7B12877476A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04a_CTRelayCommandTests", "MVVM_04a_CTRelayCommandTests", "{A90BEEB2-CAD6-15E1-5481-4E795477880B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04_DelegateCommand", "MVVM_04_DelegateCommand", "{A0E0B6B2-E393-4084-0D2F-7CE532D8EBC6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04_DelegateCommandTests", "MVVM_04_DelegateCommandTests", "{6ED1FE0C-F08F-A029-DA61-649ECC4EFE89}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05a_CTCommandParCalc", "MVVM_05a_CTCommandParCalc", "{2030957B-7247-3074-4A89-293EB0AA1680}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05a_CTCommandParCalcTests", "MVVM_05a_CTCommandParCalcTests", "{44F409E5-506A-6C09-9445-559D8EA13438}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05_CommandParCalculator", "MVVM_05_CommandParCalculator", "{73789618-605D-5565-3CE1-9A1F53A92FAC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05_CommandParCalculatorTests", "MVVM_05_CommandParCalculatorTests", "{12BA5DEA-6543-39F3-EAA8-E90F4D4C6AA9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters", "MVVM_06_Converters", "{D34E636E-4C6A-4267-8BB3-134B93CAAA5E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_2", "MVVM_06_Converters_2", "{B9A6DAF3-39E7-DE94-2DB0-CD0B4116E99B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_3", "MVVM_06_Converters_3", "{68939C6E-528E-0D37-2DD0-E823FED9435B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_3Tests", "MVVM_06_Converters_3Tests", "{B76C70D4-3F9B-3E2A-F379-0332B15D8EBB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_4", "MVVM_06_Converters_4", "{B9D4101C-6AAC-42C1-B954-FB7DB4DB8E3A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_4Tests", "MVVM_06_Converters_4Tests", "{2EC51B34-C119-621A-0014-760CE5F0B491}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09a_CTDialogBoxes", "MVVM_09a_CTDialogBoxes", "{65A02EAC-D630-FFDA-CE85-0857516332BE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09a_CTDialogBoxesTests", "MVVM_09a_CTDialogBoxesTests", "{101F2412-D5EA-8970-B026-1C6453AA08C4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09_DialogBoxes", "MVVM_09_DialogBoxes", "{5F7FBF59-C0D3-84AA-9D5B-3B7DBEFAFF10}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09_DialogBoxesTest", "MVVM_09_DialogBoxesTest", "{B8DC2BA7-8B7D-40E2-E137-05BBC8882581}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_16_Usercontrol1", "MVVM_16_Usercontrol1", "{16366B21-4A73-288D-918C-33B83FB95333}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_16_UserControl1Tests", "MVVM_16_UserControl1Tests", "{DB8C5291-84BA-FBFE-87F8-38445F59A0EB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_16_Usercontrol2", "MVVM_16_Usercontrol2", "{A0EA3843-5486-7EBB-8046-F2617B0EAAC0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_17_1_CSV_Laden", "MVVM_17_1_CSV_Laden", "{24DA9CFA-5161-32A2-BB8F-85042131ECD8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_18_MultiConverters", "MVVM_18_MultiConverters", "{9CB38DED-C950-B157-51E5-03C2171518D8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_19_FilterLists", "MVVM_19_FilterLists", "{E801F37E-5B4C-8F17-D435-586F70A5FB6B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_19_FilterListsTests", "MVVM_19_FilterListsTests", "{C05949C5-7FE3-3C35-8FFE-8420853C236C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20a_CTSysdialogs", "MVVM_20a_CTSysdialogs", "{05F10A2E-FF30-C377-9643-B16AFC4A5677}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20a_CTSysdialogsTests", "MVVM_20a_CTSysdialogsTests", "{A469D233-B14F-E271-A58C-FAC4DF0CF0AF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20_Sysdialogs", "MVVM_20_Sysdialogs", "{0EC0B80D-0095-BDF1-9D48-C12A680C09F8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20_SysdialogsTests", "MVVM_20_SysdialogsTests", "{ED7C9B4D-1423-7F30-6663-1AAD3C143790}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_21_Buttons", "MVVM_21_Buttons", "{50A61679-4740-2BAD-E513-0405933795B2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_22_WpfCap", "MVVM_22_WpfCap", "{CD032C5F-71AD-CC26-983F-EE04FB047671}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_22_WpfCapTests", "MVVM_22_WpfCapTests", "{C38244D1-6253-FE83-6B5E-EB2C940F784A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24a_CTUserControl", "MVVM_24a_CTUserControl", "{49C2D696-8323-D094-7735-8036B36BE94E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24a_CTUserControlTests", "MVVM_24a_CTUserControlTests", "{FD3DF346-45EC-03A8-83EC-320E87CAAF03}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24b_UserControl", "MVVM_24b_UserControl", "{72DA18D6-3E2E-8405-9995-C3F637953FDC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24b_UserControlTests", "MVVM_24b_UserControlTests", "{9A1E1AF6-5A6B-7572-69BE-CDD853571ABA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24c_CTUserControl", "MVVM_24c_CTUserControl", "{FE782471-E276-11AF-680D-2172C1366A5A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24c_CTUserControlTests", "MVVM_24c_CTUserControlTests", "{9EC985B7-BD0C-2B4E-25B2-CD76C2C7D3BF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24_UserControl", "MVVM_24_UserControl", "{9890F303-1C13-1F9C-925B-6E34EE635A8F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24_UserControlTests", "MVVM_24_UserControlTests", "{37671097-DCFA-02DB-E294-91170F0317C8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_26_BindingGroupExp", "MVVM_26_BindingGroupExp", "{08D3AE13-DF83-0365-7A9C-E1FC46B15049}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_26_CTBindingGroupExp", "MVVM_26_CTBindingGroupExp", "{8B265EE8-F993-AAA1-8531-1130A87A6715}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_27_DataGrid", "MVVM_27_DataGrid", "{0A8E0E66-6661-8F93-21B7-CB46A1935836}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_27_DataGridTests", "MVVM_27_DataGridTests", "{F338708A-E76C-01F2-53B8-0EFDD8EAA9A2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_CTDataGridExt", "MVVM_28_1_CTDataGridExt", "{C9DED555-89F1-EFF5-12D7-836E6F0E284F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_CTDataGridExtTests", "MVVM_28_1_CTDataGridExtTests", "{AB4D81C8-3EE1-1F12-4731-2B94DEFBE435}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_DataGridExt", "MVVM_28_1_DataGridExt", "{43000BE9-143A-01E4-1469-C86029693138}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_DataGridExtTests", "MVVM_28_1_DataGridExtTests", "{8D539B1E-2EB3-BA6B-47CB-99B99C1F8FC5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_DataGrid", "MVVM_28_DataGrid", "{C8A30850-71AD-845B-BF71-D71B9A8FE5CC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_DataGridTests", "MVVM_28_DataGridTests", "{504F48A4-1C70-D701-C8E4-D05413E5B131}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation1", "MVVM_31a_CTValidation1", "{C443EA80-01A0-A500-772B-D0EA14C483EB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation2", "MVVM_31a_CTValidation2", "{D81C36AE-DD33-8906-6171-06ECF33BCB7D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation2Tests", "MVVM_31a_CTValidation2Tests", "{C2443422-306D-6070-EBFF-7C045B094B59}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation3", "MVVM_31a_CTValidation3", "{07B5DDA6-B3C0-F6B4-A0FC-9BABD19573FE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation3Tests", "MVVM_31a_CTValidation3Tests", "{175217BC-7F9A-AC50-3E93-C1738A692DF5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation1", "MVVM_31_Validation1", "{EA11F743-E9FF-B9BB-C9C1-0ABAE76A3257}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation1Tests", "MVVM_31_Validation1Tests", "{56BC7864-C3E0-5F88-F2F8-5AD1B237E0AF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation2", "MVVM_31_Validation2", "{2A1E82CB-98C6-234F-80E1-C46801FEC588}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation2Tests", "MVVM_31_Validation2Tests", "{D248FAC1-E2FD-AD1A-B0E4-4929469A6C50}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33a_CTEvents_To_Commands", "MVVM_33a_CTEvents_To_Commands", "{C545B622-0BBA-9C9E-17D1-6B85C13C8DC4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33a_CTEvents_To_CommandsTests", "MVVM_33a_CTEvents_To_CommandsTests", "{0A5BCC31-A229-6A1D-80EB-26AD3AE77047}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33_Events_to_Commands", "MVVM_33_Events_to_Commands", "{0583A2B5-9DCB-1DAC-C305-ED8DB17630F4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33_Events_to_CommandsTests", "MVVM_33_Events_to_CommandsTests", "{3F356281-7030-86EB-F242-63BC789659DB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34a_CTBindingEventArgs", "MVVM_34a_CTBindingEventArgs", "{1D457442-2A0A-9092-8BFB-3C89D773A0C7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34a_CTBindingEventArgsTests", "MVVM_34a_CTBindingEventArgsTests", "{441E5896-6300-C5B7-9CFA-732CBB1515C9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34_BindingEventArgs", "MVVM_34_BindingEventArgs", "{80EA4566-9782-6860-B55F-7CE0C95FB8B7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34_BindingEventArgsTests", "MVVM_34_BindingEventArgsTests", "{FC00484A-3F54-AC5D-EEFD-11A1386C8D58}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_35_CommunityToolkit", "MVVM_35_CommunityToolkit", "{6F175F33-D423-8E9A-D6D0-3685DB455477}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_35_CommunityToolkitTests", "MVVM_35_CommunityToolkitTests", "{FB14C50C-71E2-7AF8-503C-5ADBD4B5FEFF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_36_ComToolKtSavesWork", "MVVM_36_ComToolKtSavesWork", "{130BF9BF-7CEA-64B4-18C0-4BDE1D2802AB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_36_ComToolKtSavesWorkTests", "MVVM_36_ComToolKtSavesWorkTests", "{2F4EDBF9-0A6F-323C-BEA3-C8E90D39AC36}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_37_TreeView", "MVVM_37_TreeView", "{3B2EE9B3-8456-D155-0FA8-8094CD356F05}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_37_TreeViewTests", "MVVM_37_TreeViewTests", "{C6829286-01AD-CC04-88DA-2C3C921778C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_38_CTDependencyInjection", "MVVM_38_CTDependencyInjection", "{26C8CA75-C75C-76DA-4A12-995AFE8124D7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_38_CTDependencyInjectionTests", "MVVM_38_CTDependencyInjectionTests", "{F814C598-1DAB-DACC-B4EB-A85066D3599A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_39_MultiModelTest", "MVVM_39_MultiModelTest", "{EF2EE4FB-D5C9-A64E-C754-755C13A8C438}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_39_MultiModelTestTests", "MVVM_39_MultiModelTestTests", "{C45EDC7F-0CB4-40E8-F931-DE1CBDE52126}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_99_SomeIssue", "MVVM_Tutorial\MVVM_99_SomeIssue\MVVM_99_SomeIssue.csproj", "{69FECC01-0962-4016-9C28-9D67E394E93D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_99_SomeIssue_net", "MVVM_Tutorial\MVVM_99_SomeIssue\MVVM_99_SomeIssue_net.csproj", "{7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_99_SomeIssueTests", "MVVM_Tutorial\MVVM_99_SomeIssueTests\MVVM_99_SomeIssueTests.csproj", "{986DC63A-ED03-4510-A8DB-032ED01D0D13}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_99_SomeIssue_netTests", "MVVM_Tutorial\MVVM_99_SomeIssueTests\MVVM_99_SomeIssue_netTests.csproj", "{7D643587-61D1-4276-92E6-C633F1C71AA4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfApp1", "WpfApp1", "{99FF9800-36D6-579C-4E45-F30735702E83}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp1", "Web\BlazorApp1\BlazorApp1.csproj", "{4344981E-87E8-4FAA-BCC3-09147FD3CBB3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client", "Client", "{AD6C8ADC-03EE-A995-3861-1C8B097D1EEF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{DADEAE32-375E-1DCB-51F7-15E49EB31C27}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{C327BA3D-AE71-5BB1-A358-58367EA08EC5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebApp1", "WebApp1", "{8FED1CC7-9896-C818-5CAF-1325280483F8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp2", "Web\WebApp1\BlazorApp2\BlazorApp2.csproj", "{807913E3-95A1-4293-80F8-D1FEDEDA94B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebApplication1", "WebApplication1", "{03339228-3758-A62D-24B8-FD6F2401F4A9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplication1", "Web\WebApp1\WebApplication1\WebApplication1\WebApplication1.csproj", "{AB1F8FC9-8726-48F2-B034-727BE5297B7F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Styles_and_Templates", "Styles_and_Templates", "{00C67240-0466-0445-BAE9-824583C685F4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_AlternatingAppearanceOfItems", "WPFSamples_2\Styles_and_Templates\WPF_AlternatingAppearanceOfItems\WPF_AlternatingAppearanceOfItems.csproj", "{46D66569-3E63-470C-9469-289B5A0D12D4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_ContentControlStyle", "WPFSamples_2\Styles_and_Templates\WPF_ContentControlStyle\WPF_ContentControlStyle.csproj", "{431A0845-C890-411B-82D3-DD2CECC36ACF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_EventTriggers", "WPFSamples_2\Styles_and_Templates\WPF_EventTriggers\WPF_EventTriggers.csproj", "{E30A1BE4-EB9C-466A-861A-C71BA8D5B019}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_FindingElementsInTemplates", "WPFSamples_2\Styles_and_Templates\WPF_FindingElementsInTemplates\WPF_FindingElementsInTemplates.csproj", "{EC2A7EB9-1F25-4534-83EB-3E7A072E5899}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_IntroToStylingAndTemplating", "WPFSamples_2\Styles_and_Templates\WPF_IntroToStylingAndTemplating\WPF_IntroToStylingAndTemplating.csproj", "{9A0D825F-45FB-439C-A57D-E206B4918C95}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_Brushes", "WPFSamples_2\WPF_Brushes\WPF_Brushes.csproj", "{C9707878-5739-498B-A982-BEC90E63B458}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_Geometry", "WPFSamples_2\WPF_Geometry\WPF_Geometry.csproj", "{B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_ImageView", "WPFSamples_2\WPF_ImageView\WPF_ImageView.csproj", "{DA21C175-58F7-4701-B0B1-E0AA5EB624FA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6D860275-CDFB-48FB-8D51-472EB96884DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D860275-CDFB-48FB-8D51-472EB96884DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Debug|x64.ActiveCfg = Debug|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Debug|x64.Build.0 = Debug|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Debug|x86.ActiveCfg = Debug|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Debug|x86.Build.0 = Debug|Any CPU {6D860275-CDFB-48FB-8D51-472EB96884DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D860275-CDFB-48FB-8D51-472EB96884DF}.Release|Any CPU.Build.0 = Release|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Release|x64.ActiveCfg = Release|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Release|x64.Build.0 = Release|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Release|x86.ActiveCfg = Release|Any CPU + {6D860275-CDFB-48FB-8D51-472EB96884DF}.Release|x86.Build.0 = Release|Any CPU {CC06D768-2ACB-4A65-9649-4FF534E77144}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CC06D768-2ACB-4A65-9649-4FF534E77144}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Debug|x64.ActiveCfg = Debug|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Debug|x64.Build.0 = Debug|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Debug|x86.ActiveCfg = Debug|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Debug|x86.Build.0 = Debug|Any CPU {CC06D768-2ACB-4A65-9649-4FF534E77144}.Release|Any CPU.ActiveCfg = Release|Any CPU {CC06D768-2ACB-4A65-9649-4FF534E77144}.Release|Any CPU.Build.0 = Release|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Release|x64.ActiveCfg = Release|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Release|x64.Build.0 = Release|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Release|x86.ActiveCfg = Release|Any CPU + {CC06D768-2ACB-4A65-9649-4FF534E77144}.Release|x86.Build.0 = Release|Any CPU {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Debug|x64.ActiveCfg = Debug|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Debug|x64.Build.0 = Debug|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Debug|x86.ActiveCfg = Debug|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Debug|x86.Build.0 = Debug|Any CPU {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Release|Any CPU.ActiveCfg = Release|Any CPU {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Release|Any CPU.Build.0 = Release|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Release|x64.ActiveCfg = Release|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Release|x64.Build.0 = Release|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Release|x86.ActiveCfg = Release|Any CPU + {48FE59A6-F385-4B4D-AB50-F2A88C949924}.Release|x86.Build.0 = Release|Any CPU {4AB88278-F044-49ED-A324-7C931A66DA71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4AB88278-F044-49ED-A324-7C931A66DA71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Debug|x64.ActiveCfg = Debug|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Debug|x64.Build.0 = Debug|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Debug|x86.ActiveCfg = Debug|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Debug|x86.Build.0 = Debug|Any CPU {4AB88278-F044-49ED-A324-7C931A66DA71}.Release|Any CPU.ActiveCfg = Release|Any CPU {4AB88278-F044-49ED-A324-7C931A66DA71}.Release|Any CPU.Build.0 = Release|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Release|x64.ActiveCfg = Release|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Release|x64.Build.0 = Release|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Release|x86.ActiveCfg = Release|Any CPU + {4AB88278-F044-49ED-A324-7C931A66DA71}.Release|x86.Build.0 = Release|Any CPU {C8249E35-ED76-4180-95BA-317F8DC45683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8249E35-ED76-4180-95BA-317F8DC45683}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Debug|x64.ActiveCfg = Debug|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Debug|x64.Build.0 = Debug|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Debug|x86.ActiveCfg = Debug|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Debug|x86.Build.0 = Debug|Any CPU {C8249E35-ED76-4180-95BA-317F8DC45683}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8249E35-ED76-4180-95BA-317F8DC45683}.Release|Any CPU.Build.0 = Release|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Release|x64.ActiveCfg = Release|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Release|x64.Build.0 = Release|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Release|x86.ActiveCfg = Release|Any CPU + {C8249E35-ED76-4180-95BA-317F8DC45683}.Release|x86.Build.0 = Release|Any CPU {1050FECD-B665-4B48-A068-5C46259D640A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1050FECD-B665-4B48-A068-5C46259D640A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Debug|x64.ActiveCfg = Debug|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Debug|x64.Build.0 = Debug|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Debug|x86.ActiveCfg = Debug|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Debug|x86.Build.0 = Debug|Any CPU {1050FECD-B665-4B48-A068-5C46259D640A}.Release|Any CPU.ActiveCfg = Release|Any CPU {1050FECD-B665-4B48-A068-5C46259D640A}.Release|Any CPU.Build.0 = Release|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Release|x64.ActiveCfg = Release|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Release|x64.Build.0 = Release|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Release|x86.ActiveCfg = Release|Any CPU + {1050FECD-B665-4B48-A068-5C46259D640A}.Release|x86.Build.0 = Release|Any CPU {24267033-7025-4264-9C9C-3888A294B8DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {24267033-7025-4264-9C9C-3888A294B8DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Debug|x64.ActiveCfg = Debug|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Debug|x64.Build.0 = Debug|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Debug|x86.ActiveCfg = Debug|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Debug|x86.Build.0 = Debug|Any CPU {24267033-7025-4264-9C9C-3888A294B8DA}.Release|Any CPU.ActiveCfg = Release|Any CPU {24267033-7025-4264-9C9C-3888A294B8DA}.Release|Any CPU.Build.0 = Release|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Release|x64.ActiveCfg = Release|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Release|x64.Build.0 = Release|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Release|x86.ActiveCfg = Release|Any CPU + {24267033-7025-4264-9C9C-3888A294B8DA}.Release|x86.Build.0 = Release|Any CPU {C9207149-1178-4D9E-818E-36C4DA31047C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C9207149-1178-4D9E-818E-36C4DA31047C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Debug|x64.ActiveCfg = Debug|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Debug|x64.Build.0 = Debug|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Debug|x86.Build.0 = Debug|Any CPU {C9207149-1178-4D9E-818E-36C4DA31047C}.Release|Any CPU.ActiveCfg = Release|Any CPU {C9207149-1178-4D9E-818E-36C4DA31047C}.Release|Any CPU.Build.0 = Release|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Release|x64.ActiveCfg = Release|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Release|x64.Build.0 = Release|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Release|x86.ActiveCfg = Release|Any CPU + {C9207149-1178-4D9E-818E-36C4DA31047C}.Release|x86.Build.0 = Release|Any CPU {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Debug|x64.Build.0 = Debug|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Debug|x86.ActiveCfg = Debug|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Debug|x86.Build.0 = Debug|Any CPU {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Release|Any CPU.Build.0 = Release|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Release|x64.ActiveCfg = Release|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Release|x64.Build.0 = Release|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Release|x86.ActiveCfg = Release|Any CPU + {86A9A87A-D6BF-4904-B4CA-21BD4CFF82B8}.Release|x86.Build.0 = Release|Any CPU {897C5AD9-EDFD-4160-B837-62933591247F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {897C5AD9-EDFD-4160-B837-62933591247F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Debug|x64.ActiveCfg = Debug|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Debug|x64.Build.0 = Debug|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Debug|x86.ActiveCfg = Debug|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Debug|x86.Build.0 = Debug|Any CPU {897C5AD9-EDFD-4160-B837-62933591247F}.Release|Any CPU.ActiveCfg = Release|Any CPU {897C5AD9-EDFD-4160-B837-62933591247F}.Release|Any CPU.Build.0 = Release|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Release|x64.ActiveCfg = Release|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Release|x64.Build.0 = Release|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Release|x86.ActiveCfg = Release|Any CPU + {897C5AD9-EDFD-4160-B837-62933591247F}.Release|x86.Build.0 = Release|Any CPU {00B65B52-928A-4E3F-9058-499F5D66918F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {00B65B52-928A-4E3F-9058-499F5D66918F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Debug|x64.ActiveCfg = Debug|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Debug|x64.Build.0 = Debug|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Debug|x86.ActiveCfg = Debug|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Debug|x86.Build.0 = Debug|Any CPU {00B65B52-928A-4E3F-9058-499F5D66918F}.Release|Any CPU.ActiveCfg = Release|Any CPU {00B65B52-928A-4E3F-9058-499F5D66918F}.Release|Any CPU.Build.0 = Release|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Release|x64.ActiveCfg = Release|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Release|x64.Build.0 = Release|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Release|x86.ActiveCfg = Release|Any CPU + {00B65B52-928A-4E3F-9058-499F5D66918F}.Release|x86.Build.0 = Release|Any CPU {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Debug|x64.ActiveCfg = Debug|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Debug|x64.Build.0 = Debug|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Debug|x86.Build.0 = Debug|Any CPU {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Release|Any CPU.ActiveCfg = Release|Any CPU {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Release|Any CPU.Build.0 = Release|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Release|x64.ActiveCfg = Release|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Release|x64.Build.0 = Release|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Release|x86.ActiveCfg = Release|Any CPU + {AF16F7AF-CF83-4679-8111-0BBE9BCDA102}.Release|x86.Build.0 = Release|Any CPU {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Debug|x64.ActiveCfg = Debug|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Debug|x64.Build.0 = Debug|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Debug|x86.ActiveCfg = Debug|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Debug|x86.Build.0 = Debug|Any CPU {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Release|Any CPU.ActiveCfg = Release|Any CPU {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Release|Any CPU.Build.0 = Release|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Release|x64.ActiveCfg = Release|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Release|x64.Build.0 = Release|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Release|x86.ActiveCfg = Release|Any CPU + {4BCC197C-7F28-4F6E-B831-D02BE0ABE839}.Release|x86.Build.0 = Release|Any CPU {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Debug|x64.ActiveCfg = Debug|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Debug|x64.Build.0 = Debug|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Debug|x86.ActiveCfg = Debug|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Debug|x86.Build.0 = Debug|Any CPU {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Release|Any CPU.ActiveCfg = Release|Any CPU {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Release|Any CPU.Build.0 = Release|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Release|x64.ActiveCfg = Release|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Release|x64.Build.0 = Release|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Release|x86.ActiveCfg = Release|Any CPU + {98D9C22F-ED66-4219-B6B8-8E38A04F9771}.Release|x86.Build.0 = Release|Any CPU {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Debug|x64.ActiveCfg = Debug|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Debug|x64.Build.0 = Debug|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Debug|x86.ActiveCfg = Debug|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Debug|x86.Build.0 = Debug|Any CPU {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Release|Any CPU.ActiveCfg = Release|Any CPU {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Release|Any CPU.Build.0 = Release|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Release|x64.ActiveCfg = Release|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Release|x64.Build.0 = Release|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Release|x86.ActiveCfg = Release|Any CPU + {DCBA9C93-38E4-4B0C-ABE5-DA89C8CF8785}.Release|x86.Build.0 = Release|Any CPU {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Debug|x64.ActiveCfg = Debug|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Debug|x64.Build.0 = Debug|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Debug|x86.ActiveCfg = Debug|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Debug|x86.Build.0 = Debug|Any CPU {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Release|Any CPU.Build.0 = Release|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Release|x64.ActiveCfg = Release|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Release|x64.Build.0 = Release|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Release|x86.ActiveCfg = Release|Any CPU + {BEC7B68A-CBF1-4579-B253-6E8B1DFDE47D}.Release|x86.Build.0 = Release|Any CPU {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Debug|x64.ActiveCfg = Debug|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Debug|x64.Build.0 = Debug|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Debug|x86.ActiveCfg = Debug|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Debug|x86.Build.0 = Debug|Any CPU {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Release|Any CPU.Build.0 = Release|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Release|x64.ActiveCfg = Release|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Release|x64.Build.0 = Release|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Release|x86.ActiveCfg = Release|Any CPU + {C2394507-B93B-4CAA-B667-4D6A8524BDFE}.Release|x86.Build.0 = Release|Any CPU {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Debug|x64.ActiveCfg = Debug|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Debug|x64.Build.0 = Debug|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Debug|x86.ActiveCfg = Debug|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Debug|x86.Build.0 = Debug|Any CPU {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Release|Any CPU.ActiveCfg = Release|Any CPU {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Release|Any CPU.Build.0 = Release|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Release|x64.ActiveCfg = Release|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Release|x64.Build.0 = Release|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Release|x86.ActiveCfg = Release|Any CPU + {05BBD8C1-C970-4B4B-AE79-892D25441E0C}.Release|x86.Build.0 = Release|Any CPU {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Debug|x64.ActiveCfg = Debug|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Debug|x64.Build.0 = Debug|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Debug|x86.ActiveCfg = Debug|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Debug|x86.Build.0 = Debug|Any CPU {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Release|Any CPU.ActiveCfg = Release|Any CPU {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Release|Any CPU.Build.0 = Release|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Release|x64.ActiveCfg = Release|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Release|x64.Build.0 = Release|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Release|x86.ActiveCfg = Release|Any CPU + {F22909B4-7DA6-4E52-9682-0AACD6D0E90B}.Release|x86.Build.0 = Release|Any CPU {9A31567A-4BDD-442A-912A-C82D020D6269}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9A31567A-4BDD-442A-912A-C82D020D6269}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Debug|x64.ActiveCfg = Debug|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Debug|x64.Build.0 = Debug|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Debug|x86.Build.0 = Debug|Any CPU {9A31567A-4BDD-442A-912A-C82D020D6269}.Release|Any CPU.ActiveCfg = Release|Any CPU {9A31567A-4BDD-442A-912A-C82D020D6269}.Release|Any CPU.Build.0 = Release|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Release|x64.ActiveCfg = Release|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Release|x64.Build.0 = Release|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Release|x86.ActiveCfg = Release|Any CPU + {9A31567A-4BDD-442A-912A-C82D020D6269}.Release|x86.Build.0 = Release|Any CPU {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Debug|x64.ActiveCfg = Debug|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Debug|x64.Build.0 = Debug|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Debug|x86.ActiveCfg = Debug|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Debug|x86.Build.0 = Debug|Any CPU {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Release|Any CPU.ActiveCfg = Release|Any CPU {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Release|Any CPU.Build.0 = Release|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Release|x64.ActiveCfg = Release|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Release|x64.Build.0 = Release|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Release|x86.ActiveCfg = Release|Any CPU + {5BD6F565-B18E-4B62-B51B-0EC58AD82AE1}.Release|x86.Build.0 = Release|Any CPU {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Debug|x64.ActiveCfg = Debug|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Debug|x64.Build.0 = Debug|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Debug|x86.ActiveCfg = Debug|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Debug|x86.Build.0 = Debug|Any CPU {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Release|Any CPU.ActiveCfg = Release|Any CPU {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Release|Any CPU.Build.0 = Release|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Release|x64.ActiveCfg = Release|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Release|x64.Build.0 = Release|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Release|x86.ActiveCfg = Release|Any CPU + {ABC8A3FB-12D1-40ED-AA6C-DBFF48B7A080}.Release|x86.Build.0 = Release|Any CPU {F00E843B-7625-425C-B74F-46E04D99E137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F00E843B-7625-425C-B74F-46E04D99E137}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Debug|x64.ActiveCfg = Debug|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Debug|x64.Build.0 = Debug|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Debug|x86.ActiveCfg = Debug|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Debug|x86.Build.0 = Debug|Any CPU {F00E843B-7625-425C-B74F-46E04D99E137}.Release|Any CPU.ActiveCfg = Release|Any CPU {F00E843B-7625-425C-B74F-46E04D99E137}.Release|Any CPU.Build.0 = Release|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Release|x64.ActiveCfg = Release|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Release|x64.Build.0 = Release|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Release|x86.ActiveCfg = Release|Any CPU + {F00E843B-7625-425C-B74F-46E04D99E137}.Release|x86.Build.0 = Release|Any CPU {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Debug|x64.Build.0 = Debug|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Debug|x86.Build.0 = Debug|Any CPU {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Release|Any CPU.Build.0 = Release|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Release|x64.ActiveCfg = Release|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Release|x64.Build.0 = Release|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Release|x86.ActiveCfg = Release|Any CPU + {7F6EC75C-1EDF-4A89-8D9B-D09E57770A13}.Release|x86.Build.0 = Release|Any CPU {58C1A208-2F56-4411-86B9-1DAA8165605D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58C1A208-2F56-4411-86B9-1DAA8165605D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Debug|x64.ActiveCfg = Debug|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Debug|x64.Build.0 = Debug|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Debug|x86.ActiveCfg = Debug|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Debug|x86.Build.0 = Debug|Any CPU {58C1A208-2F56-4411-86B9-1DAA8165605D}.Release|Any CPU.ActiveCfg = Release|Any CPU {58C1A208-2F56-4411-86B9-1DAA8165605D}.Release|Any CPU.Build.0 = Release|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Release|x64.ActiveCfg = Release|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Release|x64.Build.0 = Release|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Release|x86.ActiveCfg = Release|Any CPU + {58C1A208-2F56-4411-86B9-1DAA8165605D}.Release|x86.Build.0 = Release|Any CPU {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Debug|x64.Build.0 = Debug|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Debug|x86.ActiveCfg = Debug|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Debug|x86.Build.0 = Debug|Any CPU {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Release|Any CPU.Build.0 = Release|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Release|x64.ActiveCfg = Release|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Release|x64.Build.0 = Release|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Release|x86.ActiveCfg = Release|Any CPU + {D7B4BCF6-7DD5-48D7-8790-A1326D4A773E}.Release|x86.Build.0 = Release|Any CPU {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Debug|x64.ActiveCfg = Debug|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Debug|x64.Build.0 = Debug|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Debug|x86.ActiveCfg = Debug|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Debug|x86.Build.0 = Debug|Any CPU {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Release|Any CPU.ActiveCfg = Release|Any CPU {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Release|Any CPU.Build.0 = Release|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Release|x64.ActiveCfg = Release|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Release|x64.Build.0 = Release|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Release|x86.ActiveCfg = Release|Any CPU + {26CCCE4D-A445-46AF-BA58-6FED8EF8412A}.Release|x86.Build.0 = Release|Any CPU {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Debug|x64.ActiveCfg = Debug|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Debug|x64.Build.0 = Debug|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Debug|x86.ActiveCfg = Debug|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Debug|x86.Build.0 = Debug|Any CPU {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Release|Any CPU.Build.0 = Release|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Release|x64.ActiveCfg = Release|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Release|x64.Build.0 = Release|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Release|x86.ActiveCfg = Release|Any CPU + {D2DCEC34-78B6-443F-8DDA-E37E9295B6AF}.Release|x86.Build.0 = Release|Any CPU {90D16669-CD99-4843-8387-8B13DE75710C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90D16669-CD99-4843-8387-8B13DE75710C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Debug|x64.ActiveCfg = Debug|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Debug|x64.Build.0 = Debug|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Debug|x86.ActiveCfg = Debug|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Debug|x86.Build.0 = Debug|Any CPU {90D16669-CD99-4843-8387-8B13DE75710C}.Release|Any CPU.ActiveCfg = Release|Any CPU {90D16669-CD99-4843-8387-8B13DE75710C}.Release|Any CPU.Build.0 = Release|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Release|x64.ActiveCfg = Release|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Release|x64.Build.0 = Release|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Release|x86.ActiveCfg = Release|Any CPU + {90D16669-CD99-4843-8387-8B13DE75710C}.Release|x86.Build.0 = Release|Any CPU {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Debug|x64.ActiveCfg = Debug|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Debug|x64.Build.0 = Debug|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Debug|x86.ActiveCfg = Debug|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Debug|x86.Build.0 = Debug|Any CPU {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Release|Any CPU.Build.0 = Release|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Release|x64.ActiveCfg = Release|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Release|x64.Build.0 = Release|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Release|x86.ActiveCfg = Release|Any CPU + {AD2B36C5-FA6E-4B42-921D-37F667D7F9C0}.Release|x86.Build.0 = Release|Any CPU {85A3CD48-2240-45B2-9757-F03877201923}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {85A3CD48-2240-45B2-9757-F03877201923}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Debug|x64.ActiveCfg = Debug|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Debug|x64.Build.0 = Debug|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Debug|x86.ActiveCfg = Debug|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Debug|x86.Build.0 = Debug|Any CPU {85A3CD48-2240-45B2-9757-F03877201923}.Release|Any CPU.ActiveCfg = Release|Any CPU {85A3CD48-2240-45B2-9757-F03877201923}.Release|Any CPU.Build.0 = Release|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Release|x64.ActiveCfg = Release|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Release|x64.Build.0 = Release|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Release|x86.ActiveCfg = Release|Any CPU + {85A3CD48-2240-45B2-9757-F03877201923}.Release|x86.Build.0 = Release|Any CPU {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Debug|x64.ActiveCfg = Debug|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Debug|x64.Build.0 = Debug|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Debug|x86.ActiveCfg = Debug|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Debug|x86.Build.0 = Debug|Any CPU {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Release|Any CPU.ActiveCfg = Release|Any CPU {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Release|Any CPU.Build.0 = Release|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Release|x64.ActiveCfg = Release|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Release|x64.Build.0 = Release|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Release|x86.ActiveCfg = Release|Any CPU + {373A4CB4-0164-43DF-A51B-52368B1C9FA3}.Release|x86.Build.0 = Release|Any CPU {5920E447-6855-4DD9-9A93-57892EBB789C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5920E447-6855-4DD9-9A93-57892EBB789C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Debug|x64.ActiveCfg = Debug|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Debug|x64.Build.0 = Debug|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Debug|x86.ActiveCfg = Debug|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Debug|x86.Build.0 = Debug|Any CPU {5920E447-6855-4DD9-9A93-57892EBB789C}.Release|Any CPU.ActiveCfg = Release|Any CPU {5920E447-6855-4DD9-9A93-57892EBB789C}.Release|Any CPU.Build.0 = Release|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Release|x64.ActiveCfg = Release|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Release|x64.Build.0 = Release|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Release|x86.ActiveCfg = Release|Any CPU + {5920E447-6855-4DD9-9A93-57892EBB789C}.Release|x86.Build.0 = Release|Any CPU {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Debug|x64.ActiveCfg = Debug|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Debug|x64.Build.0 = Debug|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Debug|x86.ActiveCfg = Debug|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Debug|x86.Build.0 = Debug|Any CPU {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Release|Any CPU.ActiveCfg = Release|Any CPU {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Release|Any CPU.Build.0 = Release|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Release|x64.ActiveCfg = Release|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Release|x64.Build.0 = Release|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Release|x86.ActiveCfg = Release|Any CPU + {52CEFB40-D9BD-4A33-9481-1D36ABE3E528}.Release|x86.Build.0 = Release|Any CPU {B91620F6-4909-4C9A-821B-8A82F525D747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B91620F6-4909-4C9A-821B-8A82F525D747}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Debug|x64.ActiveCfg = Debug|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Debug|x64.Build.0 = Debug|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Debug|x86.ActiveCfg = Debug|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Debug|x86.Build.0 = Debug|Any CPU {B91620F6-4909-4C9A-821B-8A82F525D747}.Release|Any CPU.ActiveCfg = Release|Any CPU {B91620F6-4909-4C9A-821B-8A82F525D747}.Release|Any CPU.Build.0 = Release|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Release|x64.ActiveCfg = Release|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Release|x64.Build.0 = Release|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Release|x86.ActiveCfg = Release|Any CPU + {B91620F6-4909-4C9A-821B-8A82F525D747}.Release|x86.Build.0 = Release|Any CPU {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Debug|x64.ActiveCfg = Debug|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Debug|x64.Build.0 = Debug|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Debug|x86.ActiveCfg = Debug|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Debug|x86.Build.0 = Debug|Any CPU {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Release|Any CPU.Build.0 = Release|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Release|x64.ActiveCfg = Release|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Release|x64.Build.0 = Release|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Release|x86.ActiveCfg = Release|Any CPU + {5D9F6134-D9CB-4D09-A1B1-C22E10B43506}.Release|x86.Build.0 = Release|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Debug|x64.ActiveCfg = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Debug|x64.Build.0 = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Debug|x86.ActiveCfg = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Debug|x86.Build.0 = Debug|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Release|Any CPU.ActiveCfg = Release|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Release|Any CPU.Build.0 = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Release|x64.ActiveCfg = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Release|x64.Build.0 = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Release|x86.ActiveCfg = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317C}.Release|x86.Build.0 = Release|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Debug|x64.ActiveCfg = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Debug|x64.Build.0 = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Debug|x86.ActiveCfg = Debug|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Debug|x86.Build.0 = Debug|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Release|Any CPU.ActiveCfg = Release|Any CPU {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Release|Any CPU.Build.0 = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Release|x64.ActiveCfg = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Release|x64.Build.0 = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Release|x86.ActiveCfg = Release|Any CPU + {418DCE75-5DFE-4524-94B0-CC8D2B0B317D}.Release|x86.Build.0 = Release|Any CPU {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Debug|x64.ActiveCfg = Debug|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Debug|x64.Build.0 = Debug|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Debug|x86.ActiveCfg = Debug|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Debug|x86.Build.0 = Debug|Any CPU {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Release|Any CPU.ActiveCfg = Release|Any CPU {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Release|Any CPU.Build.0 = Release|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Release|x64.ActiveCfg = Release|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Release|x64.Build.0 = Release|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Release|x86.ActiveCfg = Release|Any CPU + {31B2E563-29C0-44A1-8961-6A32BEF118BF}.Release|x86.Build.0 = Release|Any CPU {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Debug|x64.Build.0 = Debug|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Debug|x86.ActiveCfg = Debug|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Debug|x86.Build.0 = Debug|Any CPU {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Release|Any CPU.ActiveCfg = Release|Any CPU {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Release|Any CPU.Build.0 = Release|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Release|x64.ActiveCfg = Release|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Release|x64.Build.0 = Release|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Release|x86.ActiveCfg = Release|Any CPU + {556D7E83-0A6F-4C8F-8682-429C9F3BCD0E}.Release|x86.Build.0 = Release|Any CPU {34D5A083-6197-4603-93C0-539158579DAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34D5A083-6197-4603-93C0-539158579DAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Debug|x64.ActiveCfg = Debug|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Debug|x64.Build.0 = Debug|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Debug|x86.ActiveCfg = Debug|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Debug|x86.Build.0 = Debug|Any CPU {34D5A083-6197-4603-93C0-539158579DAB}.Release|Any CPU.ActiveCfg = Release|Any CPU {34D5A083-6197-4603-93C0-539158579DAB}.Release|Any CPU.Build.0 = Release|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Release|x64.ActiveCfg = Release|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Release|x64.Build.0 = Release|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Release|x86.ActiveCfg = Release|Any CPU + {34D5A083-6197-4603-93C0-539158579DAB}.Release|x86.Build.0 = Release|Any CPU {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Debug|x64.ActiveCfg = Debug|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Debug|x64.Build.0 = Debug|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Debug|x86.ActiveCfg = Debug|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Debug|x86.Build.0 = Debug|Any CPU {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Release|Any CPU.ActiveCfg = Release|Any CPU {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Release|Any CPU.Build.0 = Release|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Release|x64.ActiveCfg = Release|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Release|x64.Build.0 = Release|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Release|x86.ActiveCfg = Release|Any CPU + {5F710E80-7C09-477E-B606-B7ECDDED5FAC}.Release|x86.Build.0 = Release|Any CPU {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Debug|x64.ActiveCfg = Debug|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Debug|x64.Build.0 = Debug|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Debug|x86.ActiveCfg = Debug|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Debug|x86.Build.0 = Debug|Any CPU {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Release|Any CPU.Build.0 = Release|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Release|x64.ActiveCfg = Release|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Release|x64.Build.0 = Release|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Release|x86.ActiveCfg = Release|Any CPU + {752917E2-0A8D-4B39-8786-76F1EF9426AF}.Release|x86.Build.0 = Release|Any CPU {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Debug|x64.ActiveCfg = Debug|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Debug|x64.Build.0 = Debug|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Debug|x86.ActiveCfg = Debug|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Debug|x86.Build.0 = Debug|Any CPU {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Release|Any CPU.Build.0 = Release|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Release|x64.ActiveCfg = Release|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Release|x64.Build.0 = Release|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Release|x86.ActiveCfg = Release|Any CPU + {AFCEC61D-9C18-49E5-94AE-17429BB06C78}.Release|x86.Build.0 = Release|Any CPU {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Debug|x64.Build.0 = Debug|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Debug|x86.ActiveCfg = Debug|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Debug|x86.Build.0 = Debug|Any CPU {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Release|Any CPU.Build.0 = Release|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Release|x64.ActiveCfg = Release|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Release|x64.Build.0 = Release|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Release|x86.ActiveCfg = Release|Any CPU + {D32FA801-F7D2-42DA-A2FA-B3453E61243E}.Release|x86.Build.0 = Release|Any CPU {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Debug|x64.ActiveCfg = Debug|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Debug|x64.Build.0 = Debug|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Debug|x86.Build.0 = Debug|Any CPU {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Release|Any CPU.Build.0 = Release|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Release|x64.ActiveCfg = Release|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Release|x64.Build.0 = Release|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Release|x86.ActiveCfg = Release|Any CPU + {D6A4B6AE-F401-4CBF-8DAF-541B9B46B5F6}.Release|x86.Build.0 = Release|Any CPU {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Debug|x64.Build.0 = Debug|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Debug|x86.Build.0 = Debug|Any CPU {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Release|Any CPU.Build.0 = Release|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Release|x64.ActiveCfg = Release|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Release|x64.Build.0 = Release|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Release|x86.ActiveCfg = Release|Any CPU + {4B1434DC-C076-4FC3-8E1A-E65C06B3A258}.Release|x86.Build.0 = Release|Any CPU {E499895B-C183-4190-9A55-4ADD699C0AD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E499895B-C183-4190-9A55-4ADD699C0AD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Debug|x64.ActiveCfg = Debug|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Debug|x64.Build.0 = Debug|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Debug|x86.ActiveCfg = Debug|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Debug|x86.Build.0 = Debug|Any CPU {E499895B-C183-4190-9A55-4ADD699C0AD3}.Release|Any CPU.ActiveCfg = Release|Any CPU {E499895B-C183-4190-9A55-4ADD699C0AD3}.Release|Any CPU.Build.0 = Release|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Release|x64.ActiveCfg = Release|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Release|x64.Build.0 = Release|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Release|x86.ActiveCfg = Release|Any CPU + {E499895B-C183-4190-9A55-4ADD699C0AD3}.Release|x86.Build.0 = Release|Any CPU {0260C25D-E601-4D07-A933-F94DE59B5445}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0260C25D-E601-4D07-A933-F94DE59B5445}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Debug|x64.ActiveCfg = Debug|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Debug|x64.Build.0 = Debug|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Debug|x86.ActiveCfg = Debug|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Debug|x86.Build.0 = Debug|Any CPU {0260C25D-E601-4D07-A933-F94DE59B5445}.Release|Any CPU.ActiveCfg = Release|Any CPU {0260C25D-E601-4D07-A933-F94DE59B5445}.Release|Any CPU.Build.0 = Release|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Release|x64.ActiveCfg = Release|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Release|x64.Build.0 = Release|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Release|x86.ActiveCfg = Release|Any CPU + {0260C25D-E601-4D07-A933-F94DE59B5445}.Release|x86.Build.0 = Release|Any CPU {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Debug|x64.ActiveCfg = Debug|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Debug|x64.Build.0 = Debug|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Debug|x86.ActiveCfg = Debug|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Debug|x86.Build.0 = Debug|Any CPU {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Release|Any CPU.ActiveCfg = Release|Any CPU {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Release|Any CPU.Build.0 = Release|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Release|x64.ActiveCfg = Release|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Release|x64.Build.0 = Release|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Release|x86.ActiveCfg = Release|Any CPU + {BCD96092-39F7-4DEE-B6E3-4BC4317F5513}.Release|x86.Build.0 = Release|Any CPU {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Debug|x64.Build.0 = Debug|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Debug|x86.Build.0 = Debug|Any CPU {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Release|Any CPU.Build.0 = Release|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Release|x64.ActiveCfg = Release|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Release|x64.Build.0 = Release|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Release|x86.ActiveCfg = Release|Any CPU + {7A7419CD-963D-424C-BB92-34AA9D966DC2}.Release|x86.Build.0 = Release|Any CPU {6DD9F402-FAB4-4113-A378-7007049118DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DD9F402-FAB4-4113-A378-7007049118DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Debug|x64.ActiveCfg = Debug|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Debug|x64.Build.0 = Debug|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Debug|x86.ActiveCfg = Debug|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Debug|x86.Build.0 = Debug|Any CPU {6DD9F402-FAB4-4113-A378-7007049118DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DD9F402-FAB4-4113-A378-7007049118DF}.Release|Any CPU.Build.0 = Release|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Release|x64.ActiveCfg = Release|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Release|x64.Build.0 = Release|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Release|x86.ActiveCfg = Release|Any CPU + {6DD9F402-FAB4-4113-A378-7007049118DF}.Release|x86.Build.0 = Release|Any CPU {77599858-F490-4056-AAF7-F7092ABE3F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {77599858-F490-4056-AAF7-F7092ABE3F23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Debug|x64.ActiveCfg = Debug|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Debug|x64.Build.0 = Debug|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Debug|x86.ActiveCfg = Debug|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Debug|x86.Build.0 = Debug|Any CPU {77599858-F490-4056-AAF7-F7092ABE3F23}.Release|Any CPU.ActiveCfg = Release|Any CPU {77599858-F490-4056-AAF7-F7092ABE3F23}.Release|Any CPU.Build.0 = Release|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Release|x64.ActiveCfg = Release|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Release|x64.Build.0 = Release|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Release|x86.ActiveCfg = Release|Any CPU + {77599858-F490-4056-AAF7-F7092ABE3F23}.Release|x86.Build.0 = Release|Any CPU {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Debug|x64.ActiveCfg = Debug|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Debug|x64.Build.0 = Debug|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Debug|x86.ActiveCfg = Debug|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Debug|x86.Build.0 = Debug|Any CPU {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Release|Any CPU.Build.0 = Release|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Release|x64.ActiveCfg = Release|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Release|x64.Build.0 = Release|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Release|x86.ActiveCfg = Release|Any CPU + {F8F1508A-B8A0-48EB-9359-7A043C4B447E}.Release|x86.Build.0 = Release|Any CPU {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Debug|x64.ActiveCfg = Debug|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Debug|x64.Build.0 = Debug|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Debug|x86.ActiveCfg = Debug|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Debug|x86.Build.0 = Debug|Any CPU {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Release|Any CPU.ActiveCfg = Release|Any CPU {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Release|Any CPU.Build.0 = Release|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Release|x64.ActiveCfg = Release|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Release|x64.Build.0 = Release|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Release|x86.ActiveCfg = Release|Any CPU + {B143A3A3-7C40-4C17-9AA0-37BE3B85C231}.Release|x86.Build.0 = Release|Any CPU {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Debug|x64.ActiveCfg = Debug|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Debug|x64.Build.0 = Debug|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Debug|x86.ActiveCfg = Debug|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Debug|x86.Build.0 = Debug|Any CPU {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Release|Any CPU.ActiveCfg = Release|Any CPU {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Release|Any CPU.Build.0 = Release|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Release|x64.ActiveCfg = Release|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Release|x64.Build.0 = Release|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Release|x86.ActiveCfg = Release|Any CPU + {424A36FC-064A-4C1E-8DD4-356921B7B31B}.Release|x86.Build.0 = Release|Any CPU {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Debug|x64.ActiveCfg = Debug|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Debug|x64.Build.0 = Debug|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Debug|x86.ActiveCfg = Debug|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Debug|x86.Build.0 = Debug|Any CPU {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Release|Any CPU.ActiveCfg = Release|Any CPU {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Release|Any CPU.Build.0 = Release|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Release|x64.ActiveCfg = Release|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Release|x64.Build.0 = Release|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Release|x86.ActiveCfg = Release|Any CPU + {B35A115C-1C1A-490E-90E2-E2CD1AF2C7D9}.Release|x86.Build.0 = Release|Any CPU {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Debug|x64.Build.0 = Debug|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Debug|x86.ActiveCfg = Debug|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Debug|x86.Build.0 = Debug|Any CPU {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Release|Any CPU.Build.0 = Release|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Release|x64.ActiveCfg = Release|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Release|x64.Build.0 = Release|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Release|x86.ActiveCfg = Release|Any CPU + {8A930C1B-86BB-4E19-9E11-3D857113C48F}.Release|x86.Build.0 = Release|Any CPU {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Debug|x64.ActiveCfg = Debug|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Debug|x64.Build.0 = Debug|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Debug|x86.ActiveCfg = Debug|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Debug|x86.Build.0 = Debug|Any CPU {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Release|Any CPU.Build.0 = Release|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Release|x64.ActiveCfg = Release|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Release|x64.Build.0 = Release|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Release|x86.ActiveCfg = Release|Any CPU + {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5}.Release|x86.Build.0 = Release|Any CPU {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Debug|x64.ActiveCfg = Debug|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Debug|x64.Build.0 = Debug|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Debug|x86.ActiveCfg = Debug|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Debug|x86.Build.0 = Debug|Any CPU {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Release|Any CPU.ActiveCfg = Release|Any CPU {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Release|Any CPU.Build.0 = Release|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Release|x64.ActiveCfg = Release|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Release|x64.Build.0 = Release|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Release|x86.ActiveCfg = Release|Any CPU + {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483}.Release|x86.Build.0 = Release|Any CPU {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Debug|x64.ActiveCfg = Debug|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Debug|x64.Build.0 = Debug|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Debug|x86.ActiveCfg = Debug|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Debug|x86.Build.0 = Debug|Any CPU {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Release|Any CPU.ActiveCfg = Release|Any CPU {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Release|Any CPU.Build.0 = Release|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Release|x64.ActiveCfg = Release|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Release|x64.Build.0 = Release|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Release|x86.ActiveCfg = Release|Any CPU + {13662848-3BDB-4119-BF5D-D58EA0F8026E}.Release|x86.Build.0 = Release|Any CPU {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Debug|x64.ActiveCfg = Debug|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Debug|x64.Build.0 = Debug|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Debug|x86.ActiveCfg = Debug|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Debug|x86.Build.0 = Debug|Any CPU {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Release|Any CPU.ActiveCfg = Release|Any CPU {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Release|Any CPU.Build.0 = Release|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Release|x64.ActiveCfg = Release|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Release|x64.Build.0 = Release|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Release|x86.ActiveCfg = Release|Any CPU + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628}.Release|x86.Build.0 = Release|Any CPU {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Debug|x64.ActiveCfg = Debug|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Debug|x64.Build.0 = Debug|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Debug|x86.ActiveCfg = Debug|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Debug|x86.Build.0 = Debug|Any CPU {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Release|Any CPU.Build.0 = Release|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Release|x64.ActiveCfg = Release|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Release|x64.Build.0 = Release|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Release|x86.ActiveCfg = Release|Any CPU + {48DB524E-13DC-412B-A6BF-E8912F5682EA}.Release|x86.Build.0 = Release|Any CPU {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Debug|x64.ActiveCfg = Debug|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Debug|x64.Build.0 = Debug|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Debug|x86.Build.0 = Debug|Any CPU {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Release|Any CPU.ActiveCfg = Release|Any CPU {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Release|Any CPU.Build.0 = Release|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Release|x64.ActiveCfg = Release|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Release|x64.Build.0 = Release|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Release|x86.ActiveCfg = Release|Any CPU + {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6}.Release|x86.Build.0 = Release|Any CPU {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Debug|x64.ActiveCfg = Debug|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Debug|x64.Build.0 = Debug|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Debug|x86.ActiveCfg = Debug|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Debug|x86.Build.0 = Debug|Any CPU {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Release|Any CPU.Build.0 = Release|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Release|x64.ActiveCfg = Release|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Release|x64.Build.0 = Release|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Release|x86.ActiveCfg = Release|Any CPU + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5}.Release|x86.Build.0 = Release|Any CPU {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Debug|x64.ActiveCfg = Debug|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Debug|x64.Build.0 = Debug|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Debug|x86.ActiveCfg = Debug|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Debug|x86.Build.0 = Debug|Any CPU {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Release|Any CPU.ActiveCfg = Release|Any CPU {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Release|Any CPU.Build.0 = Release|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Release|x64.ActiveCfg = Release|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Release|x64.Build.0 = Release|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Release|x86.ActiveCfg = Release|Any CPU + {FA9F3597-4C9F-48FA-A507-54BF6825C637}.Release|x86.Build.0 = Release|Any CPU {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Debug|x64.ActiveCfg = Debug|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Debug|x64.Build.0 = Debug|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Debug|x86.ActiveCfg = Debug|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Debug|x86.Build.0 = Debug|Any CPU {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Release|Any CPU.ActiveCfg = Release|Any CPU {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Release|Any CPU.Build.0 = Release|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Release|x64.ActiveCfg = Release|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Release|x64.Build.0 = Release|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Release|x86.ActiveCfg = Release|Any CPU + {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67}.Release|x86.Build.0 = Release|Any CPU {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Debug|x64.ActiveCfg = Debug|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Debug|x64.Build.0 = Debug|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Debug|x86.ActiveCfg = Debug|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Debug|x86.Build.0 = Debug|Any CPU {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Release|Any CPU.Build.0 = Release|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Release|x64.ActiveCfg = Release|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Release|x64.Build.0 = Release|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Release|x86.ActiveCfg = Release|Any CPU + {A29E68D2-E956-4C72-898A-7445C09C4AEB}.Release|x86.Build.0 = Release|Any CPU {29598C75-C195-4159-A235-B4843820BB2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {29598C75-C195-4159-A235-B4843820BB2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Debug|x64.ActiveCfg = Debug|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Debug|x64.Build.0 = Debug|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Debug|x86.ActiveCfg = Debug|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Debug|x86.Build.0 = Debug|Any CPU {29598C75-C195-4159-A235-B4843820BB2D}.Release|Any CPU.ActiveCfg = Release|Any CPU {29598C75-C195-4159-A235-B4843820BB2D}.Release|Any CPU.Build.0 = Release|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Release|x64.ActiveCfg = Release|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Release|x64.Build.0 = Release|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Release|x86.ActiveCfg = Release|Any CPU + {29598C75-C195-4159-A235-B4843820BB2D}.Release|x86.Build.0 = Release|Any CPU {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Debug|x64.ActiveCfg = Debug|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Debug|x64.Build.0 = Debug|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Debug|x86.ActiveCfg = Debug|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Debug|x86.Build.0 = Debug|Any CPU {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Release|Any CPU.ActiveCfg = Release|Any CPU {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Release|Any CPU.Build.0 = Release|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Release|x64.ActiveCfg = Release|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Release|x64.Build.0 = Release|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Release|x86.ActiveCfg = Release|Any CPU + {9960C80E-9A03-4D27-BD75-7E1B90A3EDB0}.Release|x86.Build.0 = Release|Any CPU {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Debug|x64.ActiveCfg = Debug|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Debug|x64.Build.0 = Debug|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Debug|x86.Build.0 = Debug|Any CPU {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Release|Any CPU.ActiveCfg = Release|Any CPU {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Release|Any CPU.Build.0 = Release|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Release|x64.ActiveCfg = Release|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Release|x64.Build.0 = Release|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Release|x86.ActiveCfg = Release|Any CPU + {1F55EC24-0EAD-484E-B3C0-7F69D4C6D955}.Release|x86.Build.0 = Release|Any CPU {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Debug|x64.ActiveCfg = Debug|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Debug|x64.Build.0 = Debug|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Debug|x86.ActiveCfg = Debug|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Debug|x86.Build.0 = Debug|Any CPU {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Release|Any CPU.ActiveCfg = Release|Any CPU {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Release|Any CPU.Build.0 = Release|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Release|x64.ActiveCfg = Release|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Release|x64.Build.0 = Release|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Release|x86.ActiveCfg = Release|Any CPU + {0B01FB9D-88A8-4C58-AED4-1EDC9AF6934A}.Release|x86.Build.0 = Release|Any CPU {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Debug|x64.ActiveCfg = Debug|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Debug|x64.Build.0 = Debug|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Debug|x86.ActiveCfg = Debug|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Debug|x86.Build.0 = Debug|Any CPU {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Release|Any CPU.ActiveCfg = Release|Any CPU {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Release|Any CPU.Build.0 = Release|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Release|x64.ActiveCfg = Release|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Release|x64.Build.0 = Release|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Release|x86.ActiveCfg = Release|Any CPU + {A5CDA595-5AC3-43D1-A4B0-87A00588160D}.Release|x86.Build.0 = Release|Any CPU {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Debug|x64.ActiveCfg = Debug|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Debug|x64.Build.0 = Debug|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Debug|x86.ActiveCfg = Debug|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Debug|x86.Build.0 = Debug|Any CPU {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Release|Any CPU.Build.0 = Release|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Release|x64.ActiveCfg = Release|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Release|x64.Build.0 = Release|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Release|x86.ActiveCfg = Release|Any CPU + {6D223626-69C8-4EC0-B73E-FBD29484C37F}.Release|x86.Build.0 = Release|Any CPU {B4B321AC-D3C4-414C-A596-1B60D1200527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B4B321AC-D3C4-414C-A596-1B60D1200527}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Debug|x64.ActiveCfg = Debug|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Debug|x64.Build.0 = Debug|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Debug|x86.ActiveCfg = Debug|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Debug|x86.Build.0 = Debug|Any CPU {B4B321AC-D3C4-414C-A596-1B60D1200527}.Release|Any CPU.ActiveCfg = Release|Any CPU {B4B321AC-D3C4-414C-A596-1B60D1200527}.Release|Any CPU.Build.0 = Release|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Release|x64.ActiveCfg = Release|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Release|x64.Build.0 = Release|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Release|x86.ActiveCfg = Release|Any CPU + {B4B321AC-D3C4-414C-A596-1B60D1200527}.Release|x86.Build.0 = Release|Any CPU {A00F04CE-203D-4657-BE0D-B3362864970D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A00F04CE-203D-4657-BE0D-B3362864970D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Debug|x64.ActiveCfg = Debug|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Debug|x64.Build.0 = Debug|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Debug|x86.ActiveCfg = Debug|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Debug|x86.Build.0 = Debug|Any CPU {A00F04CE-203D-4657-BE0D-B3362864970D}.Release|Any CPU.ActiveCfg = Release|Any CPU {A00F04CE-203D-4657-BE0D-B3362864970D}.Release|Any CPU.Build.0 = Release|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Release|x64.ActiveCfg = Release|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Release|x64.Build.0 = Release|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Release|x86.ActiveCfg = Release|Any CPU + {A00F04CE-203D-4657-BE0D-B3362864970D}.Release|x86.Build.0 = Release|Any CPU {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Debug|x64.ActiveCfg = Debug|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Debug|x64.Build.0 = Debug|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Debug|x86.ActiveCfg = Debug|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Debug|x86.Build.0 = Debug|Any CPU {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Release|Any CPU.ActiveCfg = Release|Any CPU {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Release|Any CPU.Build.0 = Release|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Release|x64.ActiveCfg = Release|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Release|x64.Build.0 = Release|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Release|x86.ActiveCfg = Release|Any CPU + {89850168-7AB1-4A47-AF8D-8F6F35CD46DC}.Release|x86.Build.0 = Release|Any CPU {4943798F-C5BA-4A79-929C-3D6427510A91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4943798F-C5BA-4A79-929C-3D6427510A91}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Debug|x64.ActiveCfg = Debug|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Debug|x64.Build.0 = Debug|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Debug|x86.ActiveCfg = Debug|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Debug|x86.Build.0 = Debug|Any CPU {4943798F-C5BA-4A79-929C-3D6427510A91}.Release|Any CPU.ActiveCfg = Release|Any CPU {4943798F-C5BA-4A79-929C-3D6427510A91}.Release|Any CPU.Build.0 = Release|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Release|x64.ActiveCfg = Release|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Release|x64.Build.0 = Release|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Release|x86.ActiveCfg = Release|Any CPU + {4943798F-C5BA-4A79-929C-3D6427510A91}.Release|x86.Build.0 = Release|Any CPU {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Debug|x64.ActiveCfg = Debug|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Debug|x64.Build.0 = Debug|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Debug|x86.ActiveCfg = Debug|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Debug|x86.Build.0 = Debug|Any CPU {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Release|Any CPU.Build.0 = Release|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Release|x64.ActiveCfg = Release|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Release|x64.Build.0 = Release|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Release|x86.ActiveCfg = Release|Any CPU + {1360C24E-066A-4C43-9C07-3D6A0DB2FBFD}.Release|x86.Build.0 = Release|Any CPU {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Debug|x64.ActiveCfg = Debug|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Debug|x64.Build.0 = Debug|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Debug|x86.ActiveCfg = Debug|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Debug|x86.Build.0 = Debug|Any CPU {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Release|Any CPU.ActiveCfg = Release|Any CPU {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Release|Any CPU.Build.0 = Release|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Release|x64.ActiveCfg = Release|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Release|x64.Build.0 = Release|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Release|x86.ActiveCfg = Release|Any CPU + {E9E7DD4E-90AD-4A0A-A219-4E902247CAAB}.Release|x86.Build.0 = Release|Any CPU {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Debug|x64.ActiveCfg = Debug|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Debug|x64.Build.0 = Debug|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Debug|x86.ActiveCfg = Debug|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Debug|x86.Build.0 = Debug|Any CPU {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Release|Any CPU.ActiveCfg = Release|Any CPU {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Release|Any CPU.Build.0 = Release|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Release|x64.ActiveCfg = Release|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Release|x64.Build.0 = Release|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Release|x86.ActiveCfg = Release|Any CPU + {20AA77E3-3884-4C10-9B62-D48DA98D846A}.Release|x86.Build.0 = Release|Any CPU {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Debug|x64.ActiveCfg = Debug|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Debug|x64.Build.0 = Debug|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Debug|x86.ActiveCfg = Debug|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Debug|x86.Build.0 = Debug|Any CPU {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Release|Any CPU.ActiveCfg = Release|Any CPU {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Release|Any CPU.Build.0 = Release|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Release|x64.ActiveCfg = Release|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Release|x64.Build.0 = Release|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Release|x86.ActiveCfg = Release|Any CPU + {070E91DD-75E9-4186-A773-A2FB576AD1AB}.Release|x86.Build.0 = Release|Any CPU {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Debug|x64.ActiveCfg = Debug|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Debug|x64.Build.0 = Debug|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Debug|x86.Build.0 = Debug|Any CPU {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Release|Any CPU.Build.0 = Release|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Release|x64.ActiveCfg = Release|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Release|x64.Build.0 = Release|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Release|x86.ActiveCfg = Release|Any CPU + {3A6D15DB-3EC0-4A8D-96CF-39A55D71C508}.Release|x86.Build.0 = Release|Any CPU {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Debug|x64.Build.0 = Debug|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Debug|x86.Build.0 = Debug|Any CPU {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Release|Any CPU.Build.0 = Release|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Release|x64.ActiveCfg = Release|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Release|x64.Build.0 = Release|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Release|x86.ActiveCfg = Release|Any CPU + {5B519E7C-1335-439C-900E-BF0E5FAD92BC}.Release|x86.Build.0 = Release|Any CPU {C5CFA539-54BE-44DD-887A-00567A0982F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C5CFA539-54BE-44DD-887A-00567A0982F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Debug|x64.ActiveCfg = Debug|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Debug|x64.Build.0 = Debug|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Debug|x86.ActiveCfg = Debug|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Debug|x86.Build.0 = Debug|Any CPU {C5CFA539-54BE-44DD-887A-00567A0982F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {C5CFA539-54BE-44DD-887A-00567A0982F8}.Release|Any CPU.Build.0 = Release|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Release|x64.ActiveCfg = Release|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Release|x64.Build.0 = Release|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Release|x86.ActiveCfg = Release|Any CPU + {C5CFA539-54BE-44DD-887A-00567A0982F8}.Release|x86.Build.0 = Release|Any CPU {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Debug|x64.ActiveCfg = Debug|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Debug|x64.Build.0 = Debug|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Debug|x86.ActiveCfg = Debug|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Debug|x86.Build.0 = Debug|Any CPU {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Release|Any CPU.Build.0 = Release|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Release|x64.ActiveCfg = Release|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Release|x64.Build.0 = Release|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Release|x86.ActiveCfg = Release|Any CPU + {B6DB23AF-F580-46B5-B5FA-570333B24A78}.Release|x86.Build.0 = Release|Any CPU {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Debug|x64.ActiveCfg = Debug|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Debug|x64.Build.0 = Debug|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Debug|x86.ActiveCfg = Debug|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Debug|x86.Build.0 = Debug|Any CPU {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Release|Any CPU.Build.0 = Release|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Release|x64.ActiveCfg = Release|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Release|x64.Build.0 = Release|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Release|x86.ActiveCfg = Release|Any CPU + {1E374AC6-253C-43B1-AE51-C61BBFA9CDDB}.Release|x86.Build.0 = Release|Any CPU {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Debug|x64.ActiveCfg = Debug|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Debug|x64.Build.0 = Debug|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Debug|x86.ActiveCfg = Debug|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Debug|x86.Build.0 = Debug|Any CPU {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Release|Any CPU.ActiveCfg = Release|Any CPU {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Release|Any CPU.Build.0 = Release|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Release|x64.ActiveCfg = Release|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Release|x64.Build.0 = Release|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Release|x86.ActiveCfg = Release|Any CPU + {363ABE13-A78E-401F-BAB7-F0259FC7EF83}.Release|x86.Build.0 = Release|Any CPU {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Debug|x64.ActiveCfg = Debug|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Debug|x64.Build.0 = Debug|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Debug|x86.ActiveCfg = Debug|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Debug|x86.Build.0 = Debug|Any CPU {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Release|Any CPU.Build.0 = Release|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Release|x64.ActiveCfg = Release|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Release|x64.Build.0 = Release|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Release|x86.ActiveCfg = Release|Any CPU + {B2E5EE6D-2D56-4B4D-B34C-23C607A6B8F1}.Release|x86.Build.0 = Release|Any CPU {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|Any CPU.Build.0 = Debug|Any CPU {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|x64.ActiveCfg = Debug|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|x64.Build.0 = Debug|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|x86.ActiveCfg = Debug|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Debug|x86.Build.0 = Debug|Any CPU {9731A406-15A0-4A93-A812-483C19ECD846}.Release|Any CPU.ActiveCfg = Release|Any CPU {9731A406-15A0-4A93-A812-483C19ECD846}.Release|Any CPU.Build.0 = Release|Any CPU {9731A406-15A0-4A93-A812-483C19ECD846}.Release|Any CPU.Deploy.0 = Release|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Release|x64.ActiveCfg = Release|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Release|x64.Build.0 = Release|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Release|x86.ActiveCfg = Release|Any CPU + {9731A406-15A0-4A93-A812-483C19ECD846}.Release|x86.Build.0 = Release|Any CPU {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Debug|x64.ActiveCfg = Debug|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Debug|x64.Build.0 = Debug|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Debug|x86.ActiveCfg = Debug|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Debug|x86.Build.0 = Debug|Any CPU {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Release|Any CPU.Build.0 = Release|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Release|x64.ActiveCfg = Release|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Release|x64.Build.0 = Release|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Release|x86.ActiveCfg = Release|Any CPU + {CBF9810B-C6DB-47A6-9C5D-6E20DBF8B5E1}.Release|x86.Build.0 = Release|Any CPU {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Debug|x64.ActiveCfg = Debug|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Debug|x64.Build.0 = Debug|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Debug|x86.ActiveCfg = Debug|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Debug|x86.Build.0 = Debug|Any CPU {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Release|Any CPU.ActiveCfg = Release|Any CPU {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Release|Any CPU.Build.0 = Release|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Release|x64.ActiveCfg = Release|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Release|x64.Build.0 = Release|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Release|x86.ActiveCfg = Release|Any CPU + {40A6110B-F1A0-4476-B64F-D629313D9FA1}.Release|x86.Build.0 = Release|Any CPU {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Debug|x64.ActiveCfg = Debug|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Debug|x64.Build.0 = Debug|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Debug|x86.ActiveCfg = Debug|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Debug|x86.Build.0 = Debug|Any CPU {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Release|Any CPU.ActiveCfg = Release|Any CPU {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Release|Any CPU.Build.0 = Release|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Release|x64.ActiveCfg = Release|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Release|x64.Build.0 = Release|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Release|x86.ActiveCfg = Release|Any CPU + {05957481-A4DD-4DF6-A2E8-9DCB1CF2F232}.Release|x86.Build.0 = Release|Any CPU {92FEDA3D-2A80-464D-B629-42315B133CB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {92FEDA3D-2A80-464D-B629-42315B133CB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Debug|x64.ActiveCfg = Debug|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Debug|x64.Build.0 = Debug|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Debug|x86.ActiveCfg = Debug|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Debug|x86.Build.0 = Debug|Any CPU {92FEDA3D-2A80-464D-B629-42315B133CB7}.Release|Any CPU.ActiveCfg = Release|Any CPU {92FEDA3D-2A80-464D-B629-42315B133CB7}.Release|Any CPU.Build.0 = Release|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Release|x64.ActiveCfg = Release|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Release|x64.Build.0 = Release|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Release|x86.ActiveCfg = Release|Any CPU + {92FEDA3D-2A80-464D-B629-42315B133CB7}.Release|x86.Build.0 = Release|Any CPU {8DE194E5-C84B-4781-92CD-8539572499EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8DE194E5-C84B-4781-92CD-8539572499EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Debug|x64.Build.0 = Debug|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Debug|x86.Build.0 = Debug|Any CPU {8DE194E5-C84B-4781-92CD-8539572499EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {8DE194E5-C84B-4781-92CD-8539572499EC}.Release|Any CPU.Build.0 = Release|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Release|x64.ActiveCfg = Release|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Release|x64.Build.0 = Release|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Release|x86.ActiveCfg = Release|Any CPU + {8DE194E5-C84B-4781-92CD-8539572499EC}.Release|x86.Build.0 = Release|Any CPU {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Debug|x64.ActiveCfg = Debug|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Debug|x64.Build.0 = Debug|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Debug|x86.ActiveCfg = Debug|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Debug|x86.Build.0 = Debug|Any CPU {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Release|Any CPU.Build.0 = Release|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Release|x64.ActiveCfg = Release|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Release|x64.Build.0 = Release|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Release|x86.ActiveCfg = Release|Any CPU + {FC714AE4-2AA2-481D-8F53-C9A13D096166}.Release|x86.Build.0 = Release|Any CPU {9457C3AB-6349-4C09-8319-3FCA307E6438}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9457C3AB-6349-4C09-8319-3FCA307E6438}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Debug|x64.ActiveCfg = Debug|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Debug|x64.Build.0 = Debug|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Debug|x86.ActiveCfg = Debug|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Debug|x86.Build.0 = Debug|Any CPU {9457C3AB-6349-4C09-8319-3FCA307E6438}.Release|Any CPU.ActiveCfg = Release|Any CPU {9457C3AB-6349-4C09-8319-3FCA307E6438}.Release|Any CPU.Build.0 = Release|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Release|x64.ActiveCfg = Release|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Release|x64.Build.0 = Release|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Release|x86.ActiveCfg = Release|Any CPU + {9457C3AB-6349-4C09-8319-3FCA307E6438}.Release|x86.Build.0 = Release|Any CPU {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Debug|x64.ActiveCfg = Debug|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Debug|x64.Build.0 = Debug|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Debug|x86.ActiveCfg = Debug|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Debug|x86.Build.0 = Debug|Any CPU {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Release|Any CPU.ActiveCfg = Release|Any CPU {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Release|Any CPU.Build.0 = Release|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Release|x64.ActiveCfg = Release|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Release|x64.Build.0 = Release|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Release|x86.ActiveCfg = Release|Any CPU + {A66C16B1-C48C-4C1B-9FC0-61826967F933}.Release|x86.Build.0 = Release|Any CPU {229D9174-FB54-4366-BC1C-072366D8A6B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {229D9174-FB54-4366-BC1C-072366D8A6B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Debug|x64.ActiveCfg = Debug|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Debug|x64.Build.0 = Debug|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Debug|x86.Build.0 = Debug|Any CPU {229D9174-FB54-4366-BC1C-072366D8A6B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {229D9174-FB54-4366-BC1C-072366D8A6B2}.Release|Any CPU.Build.0 = Release|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Release|x64.ActiveCfg = Release|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Release|x64.Build.0 = Release|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Release|x86.ActiveCfg = Release|Any CPU + {229D9174-FB54-4366-BC1C-072366D8A6B2}.Release|x86.Build.0 = Release|Any CPU {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Debug|x64.ActiveCfg = Debug|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Debug|x64.Build.0 = Debug|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Debug|x86.ActiveCfg = Debug|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Debug|x86.Build.0 = Debug|Any CPU {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Release|Any CPU.ActiveCfg = Release|Any CPU {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Release|Any CPU.Build.0 = Release|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Release|x64.ActiveCfg = Release|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Release|x64.Build.0 = Release|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Release|x86.ActiveCfg = Release|Any CPU + {246F7428-D220-4DC7-8F12-05CEF2F666A7}.Release|x86.Build.0 = Release|Any CPU {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Debug|x64.Build.0 = Debug|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Debug|x86.Build.0 = Debug|Any CPU {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Release|Any CPU.Build.0 = Release|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Release|x64.ActiveCfg = Release|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Release|x64.Build.0 = Release|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Release|x86.ActiveCfg = Release|Any CPU + {7BCBBC4E-A7EA-4AB1-AF2D-81325A5368A5}.Release|x86.Build.0 = Release|Any CPU {27777C75-0DA7-4489-BE60-51E74F921090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {27777C75-0DA7-4489-BE60-51E74F921090}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Debug|x64.ActiveCfg = Debug|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Debug|x64.Build.0 = Debug|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Debug|x86.ActiveCfg = Debug|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Debug|x86.Build.0 = Debug|Any CPU {27777C75-0DA7-4489-BE60-51E74F921090}.Release|Any CPU.ActiveCfg = Release|Any CPU {27777C75-0DA7-4489-BE60-51E74F921090}.Release|Any CPU.Build.0 = Release|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Release|x64.ActiveCfg = Release|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Release|x64.Build.0 = Release|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Release|x86.ActiveCfg = Release|Any CPU + {27777C75-0DA7-4489-BE60-51E74F921090}.Release|x86.Build.0 = Release|Any CPU {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Debug|x64.ActiveCfg = Debug|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Debug|x64.Build.0 = Debug|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Debug|x86.ActiveCfg = Debug|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Debug|x86.Build.0 = Debug|Any CPU {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Release|Any CPU.ActiveCfg = Release|Any CPU {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Release|Any CPU.Build.0 = Release|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Release|x64.ActiveCfg = Release|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Release|x64.Build.0 = Release|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Release|x86.ActiveCfg = Release|Any CPU + {9EA5388E-5333-4C8A-8B27-8E16AC4E7137}.Release|x86.Build.0 = Release|Any CPU {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Debug|x64.ActiveCfg = Debug|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Debug|x64.Build.0 = Debug|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Debug|x86.ActiveCfg = Debug|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Debug|x86.Build.0 = Debug|Any CPU {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Release|Any CPU.ActiveCfg = Release|Any CPU {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Release|Any CPU.Build.0 = Release|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Release|x64.ActiveCfg = Release|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Release|x64.Build.0 = Release|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Release|x86.ActiveCfg = Release|Any CPU + {385737C2-FB69-44AD-ACBB-A2CBE11686E4}.Release|x86.Build.0 = Release|Any CPU {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Debug|x64.ActiveCfg = Debug|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Debug|x64.Build.0 = Debug|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Debug|x86.ActiveCfg = Debug|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Debug|x86.Build.0 = Debug|Any CPU {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Release|Any CPU.ActiveCfg = Release|Any CPU {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Release|Any CPU.Build.0 = Release|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Release|x64.ActiveCfg = Release|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Release|x64.Build.0 = Release|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Release|x86.ActiveCfg = Release|Any CPU + {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA}.Release|x86.Build.0 = Release|Any CPU {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Debug|x64.Build.0 = Debug|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Debug|x86.ActiveCfg = Debug|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Debug|x86.Build.0 = Debug|Any CPU {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Release|Any CPU.Build.0 = Release|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Release|x64.ActiveCfg = Release|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Release|x64.Build.0 = Release|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Release|x86.ActiveCfg = Release|Any CPU + {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE}.Release|x86.Build.0 = Release|Any CPU {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Debug|x64.Build.0 = Debug|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Debug|x86.Build.0 = Debug|Any CPU {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Release|Any CPU.Build.0 = Release|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Release|x64.ActiveCfg = Release|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Release|x64.Build.0 = Release|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Release|x86.ActiveCfg = Release|Any CPU + {33D1CD60-0C70-4645-A50E-CA82F83CE0A5}.Release|x86.Build.0 = Release|Any CPU {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Debug|x64.ActiveCfg = Debug|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Debug|x64.Build.0 = Debug|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Debug|x86.ActiveCfg = Debug|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Debug|x86.Build.0 = Debug|Any CPU {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Release|Any CPU.ActiveCfg = Release|Any CPU {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Release|Any CPU.Build.0 = Release|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Release|x64.ActiveCfg = Release|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Release|x64.Build.0 = Release|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Release|x86.ActiveCfg = Release|Any CPU + {E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C}.Release|x86.Build.0 = Release|Any CPU {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Debug|x64.Build.0 = Debug|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Debug|x86.Build.0 = Debug|Any CPU {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Release|Any CPU.Build.0 = Release|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Release|x64.ActiveCfg = Release|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Release|x64.Build.0 = Release|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Release|x86.ActiveCfg = Release|Any CPU + {4B6719F3-89B1-4C4F-9690-150D0ABDA36F}.Release|x86.Build.0 = Release|Any CPU {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Debug|x64.ActiveCfg = Debug|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Debug|x64.Build.0 = Debug|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Debug|x86.ActiveCfg = Debug|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Debug|x86.Build.0 = Debug|Any CPU {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Release|Any CPU.ActiveCfg = Release|Any CPU {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Release|Any CPU.Build.0 = Release|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Release|x64.ActiveCfg = Release|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Release|x64.Build.0 = Release|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Release|x86.ActiveCfg = Release|Any CPU + {C7A0CD1D-504A-44DE-AFA1-61BE31DCAE41}.Release|x86.Build.0 = Release|Any CPU {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Debug|x64.ActiveCfg = Debug|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Debug|x64.Build.0 = Debug|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Debug|x86.ActiveCfg = Debug|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Debug|x86.Build.0 = Debug|Any CPU {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Release|Any CPU.Build.0 = Release|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Release|x64.ActiveCfg = Release|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Release|x64.Build.0 = Release|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Release|x86.ActiveCfg = Release|Any CPU + {F0207D93-9C3B-4C45-84AE-F4CD3D12AB84}.Release|x86.Build.0 = Release|Any CPU {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Debug|x64.ActiveCfg = Debug|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Debug|x64.Build.0 = Debug|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Debug|x86.ActiveCfg = Debug|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Debug|x86.Build.0 = Debug|Any CPU {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Release|Any CPU.Build.0 = Release|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Release|x64.ActiveCfg = Release|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Release|x64.Build.0 = Release|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Release|x86.ActiveCfg = Release|Any CPU + {2B62F35C-118E-4CA3-94E3-EEB61C46DD7F}.Release|x86.Build.0 = Release|Any CPU {EF55EC82-DD69-4776-A702-0C08DA61B418}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EF55EC82-DD69-4776-A702-0C08DA61B418}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Debug|x64.ActiveCfg = Debug|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Debug|x64.Build.0 = Debug|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Debug|x86.ActiveCfg = Debug|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Debug|x86.Build.0 = Debug|Any CPU {EF55EC82-DD69-4776-A702-0C08DA61B418}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF55EC82-DD69-4776-A702-0C08DA61B418}.Release|Any CPU.Build.0 = Release|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Release|x64.ActiveCfg = Release|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Release|x64.Build.0 = Release|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Release|x86.ActiveCfg = Release|Any CPU + {EF55EC82-DD69-4776-A702-0C08DA61B418}.Release|x86.Build.0 = Release|Any CPU {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Debug|x64.ActiveCfg = Debug|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Debug|x64.Build.0 = Debug|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Debug|x86.ActiveCfg = Debug|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Debug|x86.Build.0 = Debug|Any CPU {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Release|Any CPU.Build.0 = Release|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Release|x64.ActiveCfg = Release|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Release|x64.Build.0 = Release|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Release|x86.ActiveCfg = Release|Any CPU + {1E835620-C60E-49C8-9855-4CFA0F2A54AE}.Release|x86.Build.0 = Release|Any CPU {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Debug|x64.Build.0 = Debug|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Debug|x86.Build.0 = Debug|Any CPU {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Release|Any CPU.Build.0 = Release|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Release|x64.ActiveCfg = Release|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Release|x64.Build.0 = Release|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Release|x86.ActiveCfg = Release|Any CPU + {7D5AE513-2636-4981-A459-88DB90C3DFA9}.Release|x86.Build.0 = Release|Any CPU {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Debug|x64.Build.0 = Debug|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Debug|x86.Build.0 = Debug|Any CPU {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Release|Any CPU.Build.0 = Release|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Release|x64.ActiveCfg = Release|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Release|x64.Build.0 = Release|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Release|x86.ActiveCfg = Release|Any CPU + {D1461ADD-B8EC-4F72-B3B1-4202EC6DB1B9}.Release|x86.Build.0 = Release|Any CPU {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Debug|x64.ActiveCfg = Debug|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Debug|x64.Build.0 = Debug|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Debug|x86.ActiveCfg = Debug|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Debug|x86.Build.0 = Debug|Any CPU {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Release|Any CPU.ActiveCfg = Release|Any CPU {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Release|Any CPU.Build.0 = Release|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Release|x64.ActiveCfg = Release|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Release|x64.Build.0 = Release|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Release|x86.ActiveCfg = Release|Any CPU + {20E5E7E6-0191-4EBF-BBD7-8A7EF7E32778}.Release|x86.Build.0 = Release|Any CPU {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Debug|x64.ActiveCfg = Debug|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Debug|x64.Build.0 = Debug|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Debug|x86.ActiveCfg = Debug|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Debug|x86.Build.0 = Debug|Any CPU {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Release|Any CPU.Build.0 = Release|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Release|x64.ActiveCfg = Release|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Release|x64.Build.0 = Release|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Release|x86.ActiveCfg = Release|Any CPU + {1EC15DBC-47F1-4268-99AF-E8CD46ECC7FB}.Release|x86.Build.0 = Release|Any CPU {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Debug|x64.Build.0 = Debug|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Debug|x86.Build.0 = Debug|Any CPU {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Release|Any CPU.Build.0 = Release|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Release|x64.ActiveCfg = Release|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Release|x64.Build.0 = Release|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Release|x86.ActiveCfg = Release|Any CPU + {A8EF5884-AD1D-4A72-9FBB-87677F4F22A5}.Release|x86.Build.0 = Release|Any CPU {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Debug|x64.ActiveCfg = Debug|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Debug|x64.Build.0 = Debug|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Debug|x86.ActiveCfg = Debug|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Debug|x86.Build.0 = Debug|Any CPU {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Release|Any CPU.Build.0 = Release|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Release|x64.ActiveCfg = Release|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Release|x64.Build.0 = Release|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Release|x86.ActiveCfg = Release|Any CPU + {3C09ADED-DB10-4E3D-AC4E-D0E314638E1F}.Release|x86.Build.0 = Release|Any CPU {CBE80569-113E-4FFF-A00C-230CBB120934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CBE80569-113E-4FFF-A00C-230CBB120934}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Debug|x64.ActiveCfg = Debug|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Debug|x64.Build.0 = Debug|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Debug|x86.ActiveCfg = Debug|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Debug|x86.Build.0 = Debug|Any CPU {CBE80569-113E-4FFF-A00C-230CBB120934}.Release|Any CPU.ActiveCfg = Release|Any CPU {CBE80569-113E-4FFF-A00C-230CBB120934}.Release|Any CPU.Build.0 = Release|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Release|x64.ActiveCfg = Release|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Release|x64.Build.0 = Release|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Release|x86.ActiveCfg = Release|Any CPU + {CBE80569-113E-4FFF-A00C-230CBB120934}.Release|x86.Build.0 = Release|Any CPU {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Debug|x64.ActiveCfg = Debug|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Debug|x64.Build.0 = Debug|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Debug|x86.Build.0 = Debug|Any CPU {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Release|Any CPU.Build.0 = Release|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Release|x64.ActiveCfg = Release|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Release|x64.Build.0 = Release|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Release|x86.ActiveCfg = Release|Any CPU + {9A36CBEB-BDAF-4FE8-B4A9-604C71110A8E}.Release|x86.Build.0 = Release|Any CPU {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Debug|x64.Build.0 = Debug|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Debug|x86.ActiveCfg = Debug|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Debug|x86.Build.0 = Debug|Any CPU {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Release|Any CPU.Build.0 = Release|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Release|x64.ActiveCfg = Release|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Release|x64.Build.0 = Release|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Release|x86.ActiveCfg = Release|Any CPU + {BE9DA1B8-3DD8-4A87-8ED8-4DF0940796FC}.Release|x86.Build.0 = Release|Any CPU {305696C7-1982-47BF-96F5-972AE87FFD17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {305696C7-1982-47BF-96F5-972AE87FFD17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Debug|x64.ActiveCfg = Debug|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Debug|x64.Build.0 = Debug|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Debug|x86.ActiveCfg = Debug|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Debug|x86.Build.0 = Debug|Any CPU {305696C7-1982-47BF-96F5-972AE87FFD17}.Release|Any CPU.ActiveCfg = Release|Any CPU {305696C7-1982-47BF-96F5-972AE87FFD17}.Release|Any CPU.Build.0 = Release|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Release|x64.ActiveCfg = Release|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Release|x64.Build.0 = Release|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Release|x86.ActiveCfg = Release|Any CPU + {305696C7-1982-47BF-96F5-972AE87FFD17}.Release|x86.Build.0 = Release|Any CPU {9BF13892-7211-42C7-ACD7-C09935B8312C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9BF13892-7211-42C7-ACD7-C09935B8312C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Debug|x64.ActiveCfg = Debug|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Debug|x64.Build.0 = Debug|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Debug|x86.ActiveCfg = Debug|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Debug|x86.Build.0 = Debug|Any CPU {9BF13892-7211-42C7-ACD7-C09935B8312C}.Release|Any CPU.ActiveCfg = Release|Any CPU {9BF13892-7211-42C7-ACD7-C09935B8312C}.Release|Any CPU.Build.0 = Release|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Release|x64.ActiveCfg = Release|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Release|x64.Build.0 = Release|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Release|x86.ActiveCfg = Release|Any CPU + {9BF13892-7211-42C7-ACD7-C09935B8312C}.Release|x86.Build.0 = Release|Any CPU {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Debug|x64.ActiveCfg = Debug|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Debug|x64.Build.0 = Debug|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Debug|x86.ActiveCfg = Debug|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Debug|x86.Build.0 = Debug|Any CPU {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Release|Any CPU.Build.0 = Release|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Release|x64.ActiveCfg = Release|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Release|x64.Build.0 = Release|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Release|x86.ActiveCfg = Release|Any CPU + {7C8A171D-3BF7-4F01-8724-1118D2E9FAFD}.Release|x86.Build.0 = Release|Any CPU {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Debug|x64.ActiveCfg = Debug|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Debug|x64.Build.0 = Debug|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Debug|x86.ActiveCfg = Debug|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Debug|x86.Build.0 = Debug|Any CPU {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Release|Any CPU.ActiveCfg = Release|Any CPU {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Release|Any CPU.Build.0 = Release|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Release|x64.ActiveCfg = Release|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Release|x64.Build.0 = Release|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Release|x86.ActiveCfg = Release|Any CPU + {F53F1115-0D15-4B79-9722-CA71DD2E43EB}.Release|x86.Build.0 = Release|Any CPU {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Debug|x64.ActiveCfg = Debug|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Debug|x64.Build.0 = Debug|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Debug|x86.ActiveCfg = Debug|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Debug|x86.Build.0 = Debug|Any CPU {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Release|Any CPU.Build.0 = Release|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Release|x64.ActiveCfg = Release|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Release|x64.Build.0 = Release|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Release|x86.ActiveCfg = Release|Any CPU + {EA6952FA-31F7-4112-851C-CECDFB7E1857}.Release|x86.Build.0 = Release|Any CPU {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Debug|x64.Build.0 = Debug|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Debug|x86.Build.0 = Debug|Any CPU {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Release|Any CPU.Build.0 = Release|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Release|x64.ActiveCfg = Release|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Release|x64.Build.0 = Release|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Release|x86.ActiveCfg = Release|Any CPU + {9C23F0AB-C5AF-4179-9D42-52B195E7F8A4}.Release|x86.Build.0 = Release|Any CPU {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Debug|x64.ActiveCfg = Debug|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Debug|x64.Build.0 = Debug|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Debug|x86.ActiveCfg = Debug|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Debug|x86.Build.0 = Debug|Any CPU {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Release|Any CPU.ActiveCfg = Release|Any CPU {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Release|Any CPU.Build.0 = Release|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Release|x64.ActiveCfg = Release|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Release|x64.Build.0 = Release|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Release|x86.ActiveCfg = Release|Any CPU + {5DBE8E36-A918-4820-91AA-8D81B9BB672C}.Release|x86.Build.0 = Release|Any CPU {1652863C-5971-42D9-80B4-4A1304249B06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1652863C-5971-42D9-80B4-4A1304249B06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Debug|x64.ActiveCfg = Debug|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Debug|x64.Build.0 = Debug|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Debug|x86.ActiveCfg = Debug|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Debug|x86.Build.0 = Debug|Any CPU {1652863C-5971-42D9-80B4-4A1304249B06}.Release|Any CPU.ActiveCfg = Release|Any CPU {1652863C-5971-42D9-80B4-4A1304249B06}.Release|Any CPU.Build.0 = Release|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Release|x64.ActiveCfg = Release|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Release|x64.Build.0 = Release|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Release|x86.ActiveCfg = Release|Any CPU + {1652863C-5971-42D9-80B4-4A1304249B06}.Release|x86.Build.0 = Release|Any CPU {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Debug|x64.ActiveCfg = Debug|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Debug|x64.Build.0 = Debug|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Debug|x86.ActiveCfg = Debug|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Debug|x86.Build.0 = Debug|Any CPU {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Release|Any CPU.Build.0 = Release|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Release|x64.ActiveCfg = Release|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Release|x64.Build.0 = Release|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Release|x86.ActiveCfg = Release|Any CPU + {C8FFB08D-A763-467E-ABCB-FCF7EFDDC54A}.Release|x86.Build.0 = Release|Any CPU {BD61CECD-C220-4743-BE06-F5E864878644}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD61CECD-C220-4743-BE06-F5E864878644}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Debug|x64.ActiveCfg = Debug|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Debug|x64.Build.0 = Debug|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Debug|x86.ActiveCfg = Debug|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Debug|x86.Build.0 = Debug|Any CPU {BD61CECD-C220-4743-BE06-F5E864878644}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD61CECD-C220-4743-BE06-F5E864878644}.Release|Any CPU.Build.0 = Release|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Release|x64.ActiveCfg = Release|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Release|x64.Build.0 = Release|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Release|x86.ActiveCfg = Release|Any CPU + {BD61CECD-C220-4743-BE06-F5E864878644}.Release|x86.Build.0 = Release|Any CPU {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Debug|x64.ActiveCfg = Debug|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Debug|x64.Build.0 = Debug|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Debug|x86.ActiveCfg = Debug|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Debug|x86.Build.0 = Debug|Any CPU {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Release|Any CPU.Build.0 = Release|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Release|x64.ActiveCfg = Release|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Release|x64.Build.0 = Release|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Release|x86.ActiveCfg = Release|Any CPU + {E0344ED7-E92C-4EF0-BF33-D72C47536AFA}.Release|x86.Build.0 = Release|Any CPU {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Debug|x64.ActiveCfg = Debug|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Debug|x64.Build.0 = Debug|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Debug|x86.ActiveCfg = Debug|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Debug|x86.Build.0 = Debug|Any CPU {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Release|Any CPU.ActiveCfg = Release|Any CPU {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Release|Any CPU.Build.0 = Release|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Release|x64.ActiveCfg = Release|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Release|x64.Build.0 = Release|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Release|x86.ActiveCfg = Release|Any CPU + {0D2CBEEF-92E9-4150-8F62-003397757AD3}.Release|x86.Build.0 = Release|Any CPU {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Debug|x64.ActiveCfg = Debug|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Debug|x64.Build.0 = Debug|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Debug|x86.ActiveCfg = Debug|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Debug|x86.Build.0 = Debug|Any CPU {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Release|Any CPU.Build.0 = Release|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Release|x64.ActiveCfg = Release|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Release|x64.Build.0 = Release|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Release|x86.ActiveCfg = Release|Any CPU + {75646623-EE05-4B2B-BF1B-63D9A2ACDF3E}.Release|x86.Build.0 = Release|Any CPU {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Debug|x64.Build.0 = Debug|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Debug|x86.Build.0 = Debug|Any CPU {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Release|Any CPU.Build.0 = Release|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Release|x64.ActiveCfg = Release|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Release|x64.Build.0 = Release|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Release|x86.ActiveCfg = Release|Any CPU + {6B78EB3B-7A0A-45E1-9DEE-8E96BF31290C}.Release|x86.Build.0 = Release|Any CPU {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Debug|x64.ActiveCfg = Debug|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Debug|x64.Build.0 = Debug|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Debug|x86.ActiveCfg = Debug|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Debug|x86.Build.0 = Debug|Any CPU {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Release|Any CPU.ActiveCfg = Release|Any CPU {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Release|Any CPU.Build.0 = Release|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Release|x64.ActiveCfg = Release|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Release|x64.Build.0 = Release|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Release|x86.ActiveCfg = Release|Any CPU + {3B41B91C-28F1-46B7-9739-0A125221C7DB}.Release|x86.Build.0 = Release|Any CPU {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Debug|x64.ActiveCfg = Debug|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Debug|x64.Build.0 = Debug|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Debug|x86.ActiveCfg = Debug|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Debug|x86.Build.0 = Debug|Any CPU {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Release|Any CPU.ActiveCfg = Release|Any CPU {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Release|Any CPU.Build.0 = Release|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Release|x64.ActiveCfg = Release|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Release|x64.Build.0 = Release|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Release|x86.ActiveCfg = Release|Any CPU + {37FD19C9-2F73-4369-AF39-16EA4B2BDE2A}.Release|x86.Build.0 = Release|Any CPU {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Debug|x64.ActiveCfg = Debug|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Debug|x64.Build.0 = Debug|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Debug|x86.ActiveCfg = Debug|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Debug|x86.Build.0 = Debug|Any CPU {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Release|Any CPU.ActiveCfg = Release|Any CPU {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Release|Any CPU.Build.0 = Release|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Release|x64.ActiveCfg = Release|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Release|x64.Build.0 = Release|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Release|x86.ActiveCfg = Release|Any CPU + {6705D5D9-994E-44F8-A016-824DFEC7ACC2}.Release|x86.Build.0 = Release|Any CPU {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Debug|x64.Build.0 = Debug|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Debug|x86.ActiveCfg = Debug|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Debug|x86.Build.0 = Debug|Any CPU {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Release|Any CPU.Build.0 = Release|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Release|x64.ActiveCfg = Release|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Release|x64.Build.0 = Release|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Release|x86.ActiveCfg = Release|Any CPU + {2E79F7C1-392F-4C68-9E94-8C6ABA79BC19}.Release|x86.Build.0 = Release|Any CPU {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Debug|Any CPU.Build.0 = Debug|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Debug|x64.ActiveCfg = Debug|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Debug|x64.Build.0 = Debug|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Debug|x86.ActiveCfg = Debug|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Debug|x86.Build.0 = Debug|Any CPU {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Release|Any CPU.ActiveCfg = Release|Any CPU {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Release|Any CPU.Build.0 = Release|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Release|x64.ActiveCfg = Release|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Release|x64.Build.0 = Release|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Release|x86.ActiveCfg = Release|Any CPU + {827926F3-D8F8-42F4-AD66-C44AAFD9EB35}.Release|x86.Build.0 = Release|Any CPU {C988DF88-A4A1-4145-A684-C8063E159560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C988DF88-A4A1-4145-A684-C8063E159560}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Debug|x64.ActiveCfg = Debug|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Debug|x64.Build.0 = Debug|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Debug|x86.ActiveCfg = Debug|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Debug|x86.Build.0 = Debug|Any CPU {C988DF88-A4A1-4145-A684-C8063E159560}.Release|Any CPU.ActiveCfg = Release|Any CPU {C988DF88-A4A1-4145-A684-C8063E159560}.Release|Any CPU.Build.0 = Release|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Release|x64.ActiveCfg = Release|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Release|x64.Build.0 = Release|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Release|x86.ActiveCfg = Release|Any CPU + {C988DF88-A4A1-4145-A684-C8063E159560}.Release|x86.Build.0 = Release|Any CPU {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Debug|x64.ActiveCfg = Debug|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Debug|x64.Build.0 = Debug|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Debug|x86.ActiveCfg = Debug|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Debug|x86.Build.0 = Debug|Any CPU {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Release|Any CPU.Build.0 = Release|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Release|x64.ActiveCfg = Release|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Release|x64.Build.0 = Release|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Release|x86.ActiveCfg = Release|Any CPU + {560192D6-F622-4219-A5BB-442BA1D9A7C5}.Release|x86.Build.0 = Release|Any CPU {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Debug|x64.Build.0 = Debug|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Debug|x86.Build.0 = Debug|Any CPU {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Release|Any CPU.ActiveCfg = Release|Any CPU {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Release|Any CPU.Build.0 = Release|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Release|x64.ActiveCfg = Release|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Release|x64.Build.0 = Release|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Release|x86.ActiveCfg = Release|Any CPU + {9DF2B72E-31A4-4D7F-9DFB-B6A574496C3A}.Release|x86.Build.0 = Release|Any CPU {070DBB3C-DC63-4407-B037-70DD9180F381}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {070DBB3C-DC63-4407-B037-70DD9180F381}.Debug|Any CPU.Build.0 = Debug|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Debug|x64.ActiveCfg = Debug|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Debug|x64.Build.0 = Debug|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Debug|x86.ActiveCfg = Debug|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Debug|x86.Build.0 = Debug|Any CPU {070DBB3C-DC63-4407-B037-70DD9180F381}.Release|Any CPU.ActiveCfg = Release|Any CPU {070DBB3C-DC63-4407-B037-70DD9180F381}.Release|Any CPU.Build.0 = Release|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Release|x64.ActiveCfg = Release|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Release|x64.Build.0 = Release|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Release|x86.ActiveCfg = Release|Any CPU + {070DBB3C-DC63-4407-B037-70DD9180F381}.Release|x86.Build.0 = Release|Any CPU {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Debug|x64.ActiveCfg = Debug|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Debug|x64.Build.0 = Debug|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Debug|x86.ActiveCfg = Debug|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Debug|x86.Build.0 = Debug|Any CPU {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Release|Any CPU.ActiveCfg = Release|Any CPU {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Release|Any CPU.Build.0 = Release|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Release|x64.ActiveCfg = Release|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Release|x64.Build.0 = Release|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Release|x86.ActiveCfg = Release|Any CPU + {1D7A80BD-0444-430D-A242-AF6FA579E48E}.Release|x86.Build.0 = Release|Any CPU {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Debug|x64.Build.0 = Debug|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Debug|x86.ActiveCfg = Debug|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Debug|x86.Build.0 = Debug|Any CPU {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Release|Any CPU.Build.0 = Release|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Release|x64.ActiveCfg = Release|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Release|x64.Build.0 = Release|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Release|x86.ActiveCfg = Release|Any CPU + {B4F3602C-8278-464B-A315-D9D2C42B49F7}.Release|x86.Build.0 = Release|Any CPU {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Debug|x64.ActiveCfg = Debug|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Debug|x64.Build.0 = Debug|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Debug|x86.ActiveCfg = Debug|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Debug|x86.Build.0 = Debug|Any CPU {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Release|Any CPU.ActiveCfg = Release|Any CPU {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Release|Any CPU.Build.0 = Release|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Release|x64.ActiveCfg = Release|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Release|x64.Build.0 = Release|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Release|x86.ActiveCfg = Release|Any CPU + {336E0AC8-6CC7-4437-B22D-03A7A836AAFE}.Release|x86.Build.0 = Release|Any CPU {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Debug|x64.ActiveCfg = Debug|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Debug|x64.Build.0 = Debug|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Debug|x86.ActiveCfg = Debug|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Debug|x86.Build.0 = Debug|Any CPU {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Release|Any CPU.ActiveCfg = Release|Any CPU {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Release|Any CPU.Build.0 = Release|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Release|x64.ActiveCfg = Release|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Release|x64.Build.0 = Release|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Release|x86.ActiveCfg = Release|Any CPU + {76267660-AA79-4FBA-8AF9-4FB6808CDF35}.Release|x86.Build.0 = Release|Any CPU {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Debug|x64.ActiveCfg = Debug|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Debug|x64.Build.0 = Debug|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Debug|x86.ActiveCfg = Debug|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Debug|x86.Build.0 = Debug|Any CPU {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Release|Any CPU.ActiveCfg = Release|Any CPU {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Release|Any CPU.Build.0 = Release|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Release|x64.ActiveCfg = Release|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Release|x64.Build.0 = Release|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Release|x86.ActiveCfg = Release|Any CPU + {21103739-7784-4C4F-BA8A-F03D0B295DE3}.Release|x86.Build.0 = Release|Any CPU {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Debug|x64.ActiveCfg = Debug|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Debug|x64.Build.0 = Debug|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Debug|x86.Build.0 = Debug|Any CPU {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Release|Any CPU.Build.0 = Release|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Release|x64.ActiveCfg = Release|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Release|x64.Build.0 = Release|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Release|x86.ActiveCfg = Release|Any CPU + {3A0D6E61-D11A-499D-8921-702D3DA72A7D}.Release|x86.Build.0 = Release|Any CPU {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Debug|x64.ActiveCfg = Debug|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Debug|x64.Build.0 = Debug|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Debug|x86.ActiveCfg = Debug|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Debug|x86.Build.0 = Debug|Any CPU {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Release|Any CPU.ActiveCfg = Release|Any CPU {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Release|Any CPU.Build.0 = Release|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Release|x64.ActiveCfg = Release|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Release|x64.Build.0 = Release|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Release|x86.ActiveCfg = Release|Any CPU + {5BD85F99-D217-4A81-A7E6-C4EAAC3A0F46}.Release|x86.Build.0 = Release|Any CPU {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Debug|x64.Build.0 = Debug|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Debug|x86.ActiveCfg = Debug|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Debug|x86.Build.0 = Debug|Any CPU {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Release|Any CPU.ActiveCfg = Release|Any CPU {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Release|Any CPU.Build.0 = Release|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Release|x64.ActiveCfg = Release|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Release|x64.Build.0 = Release|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Release|x86.ActiveCfg = Release|Any CPU + {10ABD6B8-9FD6-4736-920C-5256DD1E8FD0}.Release|x86.Build.0 = Release|Any CPU {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Debug|x64.Build.0 = Debug|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Debug|x86.ActiveCfg = Debug|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Debug|x86.Build.0 = Debug|Any CPU {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Release|Any CPU.Build.0 = Release|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Release|x64.ActiveCfg = Release|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Release|x64.Build.0 = Release|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Release|x86.ActiveCfg = Release|Any CPU + {D0F20831-9B60-450F-B9B2-43C1A3341C1B}.Release|x86.Build.0 = Release|Any CPU {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Debug|x64.ActiveCfg = Debug|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Debug|x64.Build.0 = Debug|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Debug|x86.ActiveCfg = Debug|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Debug|x86.Build.0 = Debug|Any CPU {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Release|Any CPU.ActiveCfg = Release|Any CPU {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Release|Any CPU.Build.0 = Release|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Release|x64.ActiveCfg = Release|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Release|x64.Build.0 = Release|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Release|x86.ActiveCfg = Release|Any CPU + {FF30A0F2-1C32-4A56-9233-307CA31EB43B}.Release|x86.Build.0 = Release|Any CPU {5A727EC9-D754-4976-92BC-FB8769780647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5A727EC9-D754-4976-92BC-FB8769780647}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Debug|x64.ActiveCfg = Debug|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Debug|x64.Build.0 = Debug|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Debug|x86.ActiveCfg = Debug|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Debug|x86.Build.0 = Debug|Any CPU {5A727EC9-D754-4976-92BC-FB8769780647}.Release|Any CPU.ActiveCfg = Release|Any CPU {5A727EC9-D754-4976-92BC-FB8769780647}.Release|Any CPU.Build.0 = Release|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Release|x64.ActiveCfg = Release|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Release|x64.Build.0 = Release|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Release|x86.ActiveCfg = Release|Any CPU + {5A727EC9-D754-4976-92BC-FB8769780647}.Release|x86.Build.0 = Release|Any CPU {947B4A72-108A-4215-A76B-F11F66253B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {947B4A72-108A-4215-A76B-F11F66253B73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Debug|x64.ActiveCfg = Debug|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Debug|x64.Build.0 = Debug|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Debug|x86.ActiveCfg = Debug|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Debug|x86.Build.0 = Debug|Any CPU {947B4A72-108A-4215-A76B-F11F66253B73}.Release|Any CPU.ActiveCfg = Release|Any CPU {947B4A72-108A-4215-A76B-F11F66253B73}.Release|Any CPU.Build.0 = Release|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Release|x64.ActiveCfg = Release|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Release|x64.Build.0 = Release|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Release|x86.ActiveCfg = Release|Any CPU + {947B4A72-108A-4215-A76B-F11F66253B73}.Release|x86.Build.0 = Release|Any CPU {168E7151-AE15-4210-A979-E1347AD8288B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {168E7151-AE15-4210-A979-E1347AD8288B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Debug|x64.ActiveCfg = Debug|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Debug|x64.Build.0 = Debug|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Debug|x86.ActiveCfg = Debug|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Debug|x86.Build.0 = Debug|Any CPU {168E7151-AE15-4210-A979-E1347AD8288B}.Release|Any CPU.ActiveCfg = Release|Any CPU {168E7151-AE15-4210-A979-E1347AD8288B}.Release|Any CPU.Build.0 = Release|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Release|x64.ActiveCfg = Release|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Release|x64.Build.0 = Release|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Release|x86.ActiveCfg = Release|Any CPU + {168E7151-AE15-4210-A979-E1347AD8288B}.Release|x86.Build.0 = Release|Any CPU {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Debug|x64.ActiveCfg = Debug|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Debug|x64.Build.0 = Debug|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Debug|x86.ActiveCfg = Debug|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Debug|x86.Build.0 = Debug|Any CPU {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Release|Any CPU.Build.0 = Release|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Release|x64.ActiveCfg = Release|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Release|x64.Build.0 = Release|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Release|x86.ActiveCfg = Release|Any CPU + {D91DA55B-2DAD-4D18-8130-629BD143A7C7}.Release|x86.Build.0 = Release|Any CPU {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Debug|x64.ActiveCfg = Debug|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Debug|x64.Build.0 = Debug|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Debug|x86.ActiveCfg = Debug|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Debug|x86.Build.0 = Debug|Any CPU {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Release|Any CPU.Build.0 = Release|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Release|x64.ActiveCfg = Release|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Release|x64.Build.0 = Release|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Release|x86.ActiveCfg = Release|Any CPU + {860CB348-BD36-4A45-A8E5-5F0E0751C4A9}.Release|x86.Build.0 = Release|Any CPU {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Debug|x64.ActiveCfg = Debug|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Debug|x64.Build.0 = Debug|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Debug|x86.ActiveCfg = Debug|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Debug|x86.Build.0 = Debug|Any CPU {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Release|Any CPU.ActiveCfg = Release|Any CPU {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Release|Any CPU.Build.0 = Release|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Release|x64.ActiveCfg = Release|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Release|x64.Build.0 = Release|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Release|x86.ActiveCfg = Release|Any CPU + {9625C308-5B63-436D-B1F7-B37BE7E3541B}.Release|x86.Build.0 = Release|Any CPU {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Debug|x64.ActiveCfg = Debug|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Debug|x64.Build.0 = Debug|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Debug|x86.ActiveCfg = Debug|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Debug|x86.Build.0 = Debug|Any CPU {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Release|Any CPU.ActiveCfg = Release|Any CPU {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Release|Any CPU.Build.0 = Release|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Release|x64.ActiveCfg = Release|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Release|x64.Build.0 = Release|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Release|x86.ActiveCfg = Release|Any CPU + {D7867DE5-6ECB-406D-BCED-DEB377F4FB55}.Release|x86.Build.0 = Release|Any CPU {FE288996-8C94-4B75-8BF1-16977C98241A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FE288996-8C94-4B75-8BF1-16977C98241A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Debug|x64.ActiveCfg = Debug|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Debug|x64.Build.0 = Debug|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Debug|x86.ActiveCfg = Debug|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Debug|x86.Build.0 = Debug|Any CPU {FE288996-8C94-4B75-8BF1-16977C98241A}.Release|Any CPU.ActiveCfg = Release|Any CPU {FE288996-8C94-4B75-8BF1-16977C98241A}.Release|Any CPU.Build.0 = Release|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Release|x64.ActiveCfg = Release|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Release|x64.Build.0 = Release|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Release|x86.ActiveCfg = Release|Any CPU + {FE288996-8C94-4B75-8BF1-16977C98241A}.Release|x86.Build.0 = Release|Any CPU {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Debug|x64.ActiveCfg = Debug|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Debug|x64.Build.0 = Debug|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Debug|x86.ActiveCfg = Debug|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Debug|x86.Build.0 = Debug|Any CPU {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Release|Any CPU.ActiveCfg = Release|Any CPU {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Release|Any CPU.Build.0 = Release|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Release|x64.ActiveCfg = Release|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Release|x64.Build.0 = Release|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Release|x86.ActiveCfg = Release|Any CPU + {4BD2505B-8426-48F2-86C2-4FFE3D416ED8}.Release|x86.Build.0 = Release|Any CPU {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Debug|x64.ActiveCfg = Debug|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Debug|x64.Build.0 = Debug|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Debug|x86.ActiveCfg = Debug|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Debug|x86.Build.0 = Debug|Any CPU {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Release|Any CPU.ActiveCfg = Release|Any CPU {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Release|Any CPU.Build.0 = Release|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Release|x64.ActiveCfg = Release|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Release|x64.Build.0 = Release|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Release|x86.ActiveCfg = Release|Any CPU + {A69CDCAB-A96B-4CD5-AE95-562A74DBEF11}.Release|x86.Build.0 = Release|Any CPU {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Debug|x64.ActiveCfg = Debug|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Debug|x64.Build.0 = Debug|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Debug|x86.ActiveCfg = Debug|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Debug|x86.Build.0 = Debug|Any CPU {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Release|Any CPU.ActiveCfg = Release|Any CPU {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Release|Any CPU.Build.0 = Release|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Release|x64.ActiveCfg = Release|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Release|x64.Build.0 = Release|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Release|x86.ActiveCfg = Release|Any CPU + {50BA28CD-5BFC-4C5E-B702-77A9B1543A04}.Release|x86.Build.0 = Release|Any CPU {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Debug|x64.ActiveCfg = Debug|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Debug|x64.Build.0 = Debug|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Debug|x86.ActiveCfg = Debug|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Debug|x86.Build.0 = Debug|Any CPU {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Release|Any CPU.Build.0 = Release|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Release|x64.ActiveCfg = Release|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Release|x64.Build.0 = Release|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Release|x86.ActiveCfg = Release|Any CPU + {D2130F2D-B4A1-41AD-BFFA-17AA74888987}.Release|x86.Build.0 = Release|Any CPU {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Debug|x64.ActiveCfg = Debug|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Debug|x64.Build.0 = Debug|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Debug|x86.ActiveCfg = Debug|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Debug|x86.Build.0 = Debug|Any CPU {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Release|Any CPU.Build.0 = Release|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Release|x64.ActiveCfg = Release|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Release|x64.Build.0 = Release|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Release|x86.ActiveCfg = Release|Any CPU + {36EF5A3D-2101-46F5-9CC9-47ACCCEC94C4}.Release|x86.Build.0 = Release|Any CPU {F2D026CA-B596-48EB-9F20-D03029FE852A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F2D026CA-B596-48EB-9F20-D03029FE852A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Debug|x64.ActiveCfg = Debug|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Debug|x64.Build.0 = Debug|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Debug|x86.ActiveCfg = Debug|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Debug|x86.Build.0 = Debug|Any CPU {F2D026CA-B596-48EB-9F20-D03029FE852A}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2D026CA-B596-48EB-9F20-D03029FE852A}.Release|Any CPU.Build.0 = Release|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Release|x64.ActiveCfg = Release|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Release|x64.Build.0 = Release|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Release|x86.ActiveCfg = Release|Any CPU + {F2D026CA-B596-48EB-9F20-D03029FE852A}.Release|x86.Build.0 = Release|Any CPU {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Debug|x64.ActiveCfg = Debug|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Debug|x64.Build.0 = Debug|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Debug|x86.ActiveCfg = Debug|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Debug|x86.Build.0 = Debug|Any CPU {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Release|Any CPU.ActiveCfg = Release|Any CPU {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Release|Any CPU.Build.0 = Release|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Release|x64.ActiveCfg = Release|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Release|x64.Build.0 = Release|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Release|x86.ActiveCfg = Release|Any CPU + {7A1F9EDE-D619-4B73-9914-137DDE2044E4}.Release|x86.Build.0 = Release|Any CPU {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Debug|x64.ActiveCfg = Debug|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Debug|x64.Build.0 = Debug|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Debug|x86.ActiveCfg = Debug|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Debug|x86.Build.0 = Debug|Any CPU {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Release|Any CPU.ActiveCfg = Release|Any CPU {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Release|Any CPU.Build.0 = Release|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Release|x64.ActiveCfg = Release|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Release|x64.Build.0 = Release|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Release|x86.ActiveCfg = Release|Any CPU + {70AD3FCB-F529-4E08-BE39-E56C940EA114}.Release|x86.Build.0 = Release|Any CPU {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Debug|x64.ActiveCfg = Debug|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Debug|x64.Build.0 = Debug|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Debug|x86.ActiveCfg = Debug|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Debug|x86.Build.0 = Debug|Any CPU {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Release|Any CPU.Build.0 = Release|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Release|x64.ActiveCfg = Release|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Release|x64.Build.0 = Release|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Release|x86.ActiveCfg = Release|Any CPU + {CDC8B1F7-3C94-4686-9EE0-6841231E6144}.Release|x86.Build.0 = Release|Any CPU {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Debug|x64.ActiveCfg = Debug|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Debug|x64.Build.0 = Debug|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Debug|x86.ActiveCfg = Debug|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Debug|x86.Build.0 = Debug|Any CPU {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Release|Any CPU.ActiveCfg = Release|Any CPU {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Release|Any CPU.Build.0 = Release|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Release|x64.ActiveCfg = Release|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Release|x64.Build.0 = Release|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Release|x86.ActiveCfg = Release|Any CPU + {E2586A8F-F16C-4532-BDED-8DBF8B47A392}.Release|x86.Build.0 = Release|Any CPU {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Debug|x64.ActiveCfg = Debug|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Debug|x64.Build.0 = Debug|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Debug|x86.ActiveCfg = Debug|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Debug|x86.Build.0 = Debug|Any CPU {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Release|Any CPU.ActiveCfg = Release|Any CPU {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Release|Any CPU.Build.0 = Release|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Release|x64.ActiveCfg = Release|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Release|x64.Build.0 = Release|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Release|x86.ActiveCfg = Release|Any CPU + {B11B8CA5-A1DF-4D23-BC65-C53DE68D3094}.Release|x86.Build.0 = Release|Any CPU {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Debug|x64.ActiveCfg = Debug|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Debug|x64.Build.0 = Debug|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Debug|x86.ActiveCfg = Debug|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Debug|x86.Build.0 = Debug|Any CPU {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Release|Any CPU.Build.0 = Release|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Release|x64.ActiveCfg = Release|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Release|x64.Build.0 = Release|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Release|x86.ActiveCfg = Release|Any CPU + {5D298F4A-5A33-4489-8F9D-78FA0A04AC3C}.Release|x86.Build.0 = Release|Any CPU {30FCB2D0-9353-4218-A5C9-1807661D2656}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {30FCB2D0-9353-4218-A5C9-1807661D2656}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Debug|x64.ActiveCfg = Debug|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Debug|x64.Build.0 = Debug|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Debug|x86.ActiveCfg = Debug|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Debug|x86.Build.0 = Debug|Any CPU {30FCB2D0-9353-4218-A5C9-1807661D2656}.Release|Any CPU.ActiveCfg = Release|Any CPU {30FCB2D0-9353-4218-A5C9-1807661D2656}.Release|Any CPU.Build.0 = Release|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Release|x64.ActiveCfg = Release|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Release|x64.Build.0 = Release|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Release|x86.ActiveCfg = Release|Any CPU + {30FCB2D0-9353-4218-A5C9-1807661D2656}.Release|x86.Build.0 = Release|Any CPU {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Debug|x64.ActiveCfg = Debug|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Debug|x64.Build.0 = Debug|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Debug|x86.ActiveCfg = Debug|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Debug|x86.Build.0 = Debug|Any CPU {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Release|Any CPU.Build.0 = Release|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Release|x64.ActiveCfg = Release|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Release|x64.Build.0 = Release|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Release|x86.ActiveCfg = Release|Any CPU + {D73CF550-4CC3-47A9-864E-F7FC46736DBF}.Release|x86.Build.0 = Release|Any CPU {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Debug|x64.ActiveCfg = Debug|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Debug|x64.Build.0 = Debug|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Debug|x86.ActiveCfg = Debug|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Debug|x86.Build.0 = Debug|Any CPU {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Release|Any CPU.ActiveCfg = Release|Any CPU {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Release|Any CPU.Build.0 = Release|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Release|x64.ActiveCfg = Release|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Release|x64.Build.0 = Release|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Release|x86.ActiveCfg = Release|Any CPU + {A5532EED-72CC-4C3A-A81C-5BE3172F0FDF}.Release|x86.Build.0 = Release|Any CPU {48352710-3D49-43A9-89D6-3836A4D49F71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {48352710-3D49-43A9-89D6-3836A4D49F71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Debug|x64.ActiveCfg = Debug|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Debug|x64.Build.0 = Debug|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Debug|x86.ActiveCfg = Debug|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Debug|x86.Build.0 = Debug|Any CPU {48352710-3D49-43A9-89D6-3836A4D49F71}.Release|Any CPU.ActiveCfg = Release|Any CPU {48352710-3D49-43A9-89D6-3836A4D49F71}.Release|Any CPU.Build.0 = Release|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Release|x64.ActiveCfg = Release|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Release|x64.Build.0 = Release|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Release|x86.ActiveCfg = Release|Any CPU + {48352710-3D49-43A9-89D6-3836A4D49F71}.Release|x86.Build.0 = Release|Any CPU {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Debug|x64.Build.0 = Debug|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Debug|x86.ActiveCfg = Debug|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Debug|x86.Build.0 = Debug|Any CPU {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Release|Any CPU.Build.0 = Release|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Release|x64.ActiveCfg = Release|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Release|x64.Build.0 = Release|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Release|x86.ActiveCfg = Release|Any CPU + {CE01EBEF-6E86-4778-B49F-F65081082F3C}.Release|x86.Build.0 = Release|Any CPU {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Debug|x64.ActiveCfg = Debug|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Debug|x64.Build.0 = Debug|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Debug|x86.ActiveCfg = Debug|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Debug|x86.Build.0 = Debug|Any CPU {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Release|Any CPU.Build.0 = Release|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Release|x64.ActiveCfg = Release|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Release|x64.Build.0 = Release|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Release|x86.ActiveCfg = Release|Any CPU + {4445A10E-DF6C-461A-9F1B-B4D03F5322E1}.Release|x86.Build.0 = Release|Any CPU {67482071-FBD5-4D12-A571-C37EDD517365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {67482071-FBD5-4D12-A571-C37EDD517365}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Debug|x64.ActiveCfg = Debug|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Debug|x64.Build.0 = Debug|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Debug|x86.ActiveCfg = Debug|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Debug|x86.Build.0 = Debug|Any CPU {67482071-FBD5-4D12-A571-C37EDD517365}.Release|Any CPU.ActiveCfg = Release|Any CPU {67482071-FBD5-4D12-A571-C37EDD517365}.Release|Any CPU.Build.0 = Release|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Release|x64.ActiveCfg = Release|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Release|x64.Build.0 = Release|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Release|x86.ActiveCfg = Release|Any CPU + {67482071-FBD5-4D12-A571-C37EDD517365}.Release|x86.Build.0 = Release|Any CPU {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Debug|x64.ActiveCfg = Debug|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Debug|x64.Build.0 = Debug|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Debug|x86.ActiveCfg = Debug|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Debug|x86.Build.0 = Debug|Any CPU {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Release|Any CPU.Build.0 = Release|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Release|x64.ActiveCfg = Release|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Release|x64.Build.0 = Release|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Release|x86.ActiveCfg = Release|Any CPU + {E8A207D8-5920-419C-8CAE-92B5D34D28E1}.Release|x86.Build.0 = Release|Any CPU {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Debug|x64.ActiveCfg = Debug|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Debug|x64.Build.0 = Debug|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Debug|x86.ActiveCfg = Debug|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Debug|x86.Build.0 = Debug|Any CPU {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Release|Any CPU.ActiveCfg = Release|Any CPU {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Release|Any CPU.Build.0 = Release|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Release|x64.ActiveCfg = Release|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Release|x64.Build.0 = Release|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Release|x86.ActiveCfg = Release|Any CPU + {50AF2EFB-FF15-4058-ABA4-C720E044FD29}.Release|x86.Build.0 = Release|Any CPU {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Debug|x64.ActiveCfg = Debug|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Debug|x64.Build.0 = Debug|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Debug|x86.ActiveCfg = Debug|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Debug|x86.Build.0 = Debug|Any CPU {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Release|Any CPU.ActiveCfg = Release|Any CPU {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Release|Any CPU.Build.0 = Release|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Release|x64.ActiveCfg = Release|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Release|x64.Build.0 = Release|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Release|x86.ActiveCfg = Release|Any CPU + {86737A35-BCF5-44D8-A383-9C1E26D8CA54}.Release|x86.Build.0 = Release|Any CPU {CF20036E-A856-47E4-8F04-918FB151ECFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF20036E-A856-47E4-8F04-918FB151ECFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Debug|x64.ActiveCfg = Debug|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Debug|x64.Build.0 = Debug|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Debug|x86.ActiveCfg = Debug|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Debug|x86.Build.0 = Debug|Any CPU {CF20036E-A856-47E4-8F04-918FB151ECFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF20036E-A856-47E4-8F04-918FB151ECFD}.Release|Any CPU.Build.0 = Release|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Release|x64.ActiveCfg = Release|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Release|x64.Build.0 = Release|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Release|x86.ActiveCfg = Release|Any CPU + {CF20036E-A856-47E4-8F04-918FB151ECFD}.Release|x86.Build.0 = Release|Any CPU {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Debug|x64.ActiveCfg = Debug|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Debug|x64.Build.0 = Debug|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Debug|x86.ActiveCfg = Debug|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Debug|x86.Build.0 = Debug|Any CPU {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Release|Any CPU.Build.0 = Release|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Release|x64.ActiveCfg = Release|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Release|x64.Build.0 = Release|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Release|x86.ActiveCfg = Release|Any CPU + {70C2F91D-0C9C-4865-A98F-F0125D4FF0C4}.Release|x86.Build.0 = Release|Any CPU {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Debug|x64.ActiveCfg = Debug|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Debug|x64.Build.0 = Debug|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Debug|x86.ActiveCfg = Debug|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Debug|x86.Build.0 = Debug|Any CPU {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Release|Any CPU.ActiveCfg = Release|Any CPU {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Release|Any CPU.Build.0 = Release|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Release|x64.ActiveCfg = Release|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Release|x64.Build.0 = Release|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Release|x86.ActiveCfg = Release|Any CPU + {12AB67E2-8F23-4463-8460-4DE0BABCEE1A}.Release|x86.Build.0 = Release|Any CPU {1417F6CC-4924-490A-8D73-C230B24507DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1417F6CC-4924-490A-8D73-C230B24507DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Debug|x64.ActiveCfg = Debug|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Debug|x64.Build.0 = Debug|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Debug|x86.ActiveCfg = Debug|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Debug|x86.Build.0 = Debug|Any CPU {1417F6CC-4924-490A-8D73-C230B24507DC}.Release|Any CPU.ActiveCfg = Release|Any CPU {1417F6CC-4924-490A-8D73-C230B24507DC}.Release|Any CPU.Build.0 = Release|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Release|x64.ActiveCfg = Release|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Release|x64.Build.0 = Release|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Release|x86.ActiveCfg = Release|Any CPU + {1417F6CC-4924-490A-8D73-C230B24507DC}.Release|x86.Build.0 = Release|Any CPU {6274CE2E-241E-4048-9B06-5804952A90B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6274CE2E-241E-4048-9B06-5804952A90B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Debug|x64.ActiveCfg = Debug|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Debug|x64.Build.0 = Debug|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Debug|x86.Build.0 = Debug|Any CPU {6274CE2E-241E-4048-9B06-5804952A90B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {6274CE2E-241E-4048-9B06-5804952A90B2}.Release|Any CPU.Build.0 = Release|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Release|x64.ActiveCfg = Release|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Release|x64.Build.0 = Release|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Release|x86.ActiveCfg = Release|Any CPU + {6274CE2E-241E-4048-9B06-5804952A90B2}.Release|x86.Build.0 = Release|Any CPU {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Debug|x64.ActiveCfg = Debug|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Debug|x64.Build.0 = Debug|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Debug|x86.ActiveCfg = Debug|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Debug|x86.Build.0 = Debug|Any CPU {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Release|Any CPU.ActiveCfg = Release|Any CPU {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Release|Any CPU.Build.0 = Release|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Release|x64.ActiveCfg = Release|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Release|x64.Build.0 = Release|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Release|x86.ActiveCfg = Release|Any CPU + {C1C5F7E2-AF90-4DC5-8E6D-B74225E422BF}.Release|x86.Build.0 = Release|Any CPU {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Debug|x64.Build.0 = Debug|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Debug|x86.ActiveCfg = Debug|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Debug|x86.Build.0 = Debug|Any CPU {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Release|Any CPU.Build.0 = Release|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Release|x64.ActiveCfg = Release|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Release|x64.Build.0 = Release|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Release|x86.ActiveCfg = Release|Any CPU + {73144DF6-CFD2-40DB-AA23-9961CB0419F7}.Release|x86.Build.0 = Release|Any CPU {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Debug|x64.ActiveCfg = Debug|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Debug|x64.Build.0 = Debug|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Debug|x86.ActiveCfg = Debug|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Debug|x86.Build.0 = Debug|Any CPU {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Release|Any CPU.ActiveCfg = Release|Any CPU {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Release|Any CPU.Build.0 = Release|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Release|x64.ActiveCfg = Release|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Release|x64.Build.0 = Release|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Release|x86.ActiveCfg = Release|Any CPU + {15FCEB5D-C3BB-42AC-BCBC-C44C86FAC1B3}.Release|x86.Build.0 = Release|Any CPU {D1C70A41-9467-4CC9-961C-2192F7189349}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1C70A41-9467-4CC9-961C-2192F7189349}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Debug|x64.ActiveCfg = Debug|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Debug|x64.Build.0 = Debug|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Debug|x86.ActiveCfg = Debug|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Debug|x86.Build.0 = Debug|Any CPU {D1C70A41-9467-4CC9-961C-2192F7189349}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1C70A41-9467-4CC9-961C-2192F7189349}.Release|Any CPU.Build.0 = Release|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Release|x64.ActiveCfg = Release|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Release|x64.Build.0 = Release|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Release|x86.ActiveCfg = Release|Any CPU + {D1C70A41-9467-4CC9-961C-2192F7189349}.Release|x86.Build.0 = Release|Any CPU {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Debug|x64.Build.0 = Debug|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Debug|x86.Build.0 = Debug|Any CPU {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Release|Any CPU.Build.0 = Release|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Release|x64.ActiveCfg = Release|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Release|x64.Build.0 = Release|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Release|x86.ActiveCfg = Release|Any CPU + {7F4B9EAC-F272-4E2F-A2A4-965CCC2C4EA6}.Release|x86.Build.0 = Release|Any CPU {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Debug|x64.Build.0 = Debug|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Debug|x86.Build.0 = Debug|Any CPU {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Release|Any CPU.Build.0 = Release|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Release|x64.ActiveCfg = Release|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Release|x64.Build.0 = Release|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Release|x86.ActiveCfg = Release|Any CPU + {7D3B107B-61AA-4D1C-B052-D349CC360BE6}.Release|x86.Build.0 = Release|Any CPU {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Debug|x64.Build.0 = Debug|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Debug|x86.Build.0 = Debug|Any CPU {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Release|Any CPU.Build.0 = Release|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Release|x64.ActiveCfg = Release|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Release|x64.Build.0 = Release|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Release|x86.ActiveCfg = Release|Any CPU + {5B313241-C556-497B-98CB-8BA86DFEA3F7}.Release|x86.Build.0 = Release|Any CPU {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Debug|x64.ActiveCfg = Debug|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Debug|x64.Build.0 = Debug|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Debug|x86.ActiveCfg = Debug|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Debug|x86.Build.0 = Debug|Any CPU {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Release|Any CPU.ActiveCfg = Release|Any CPU {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Release|Any CPU.Build.0 = Release|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Release|x64.ActiveCfg = Release|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Release|x64.Build.0 = Release|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Release|x86.ActiveCfg = Release|Any CPU + {67C0EDBF-B64D-4D42-B4D6-87BC9B6A45A4}.Release|x86.Build.0 = Release|Any CPU {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Debug|x64.ActiveCfg = Debug|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Debug|x64.Build.0 = Debug|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Debug|x86.ActiveCfg = Debug|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Debug|x86.Build.0 = Debug|Any CPU {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Release|Any CPU.ActiveCfg = Release|Any CPU {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Release|Any CPU.Build.0 = Release|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Release|x64.ActiveCfg = Release|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Release|x64.Build.0 = Release|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Release|x86.ActiveCfg = Release|Any CPU + {58B40D67-81A4-478F-AF1C-67CFA2975B95}.Release|x86.Build.0 = Release|Any CPU {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Debug|x64.ActiveCfg = Debug|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Debug|x64.Build.0 = Debug|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Debug|x86.ActiveCfg = Debug|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Debug|x86.Build.0 = Debug|Any CPU {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Release|Any CPU.ActiveCfg = Release|Any CPU {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Release|Any CPU.Build.0 = Release|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Release|x64.ActiveCfg = Release|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Release|x64.Build.0 = Release|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Release|x86.ActiveCfg = Release|Any CPU + {9FD0E881-4F74-4B63-9B77-ECED8589EC79}.Release|x86.Build.0 = Release|Any CPU {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Debug|x64.ActiveCfg = Debug|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Debug|x64.Build.0 = Debug|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Debug|x86.ActiveCfg = Debug|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Debug|x86.Build.0 = Debug|Any CPU {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Release|Any CPU.Build.0 = Release|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Release|x64.ActiveCfg = Release|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Release|x64.Build.0 = Release|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Release|x86.ActiveCfg = Release|Any CPU + {5E8D625C-F9BD-47F3-A3B9-4769F895FB97}.Release|x86.Build.0 = Release|Any CPU {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Debug|x64.ActiveCfg = Debug|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Debug|x64.Build.0 = Debug|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Debug|x86.ActiveCfg = Debug|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Debug|x86.Build.0 = Debug|Any CPU {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Release|Any CPU.ActiveCfg = Release|Any CPU {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Release|Any CPU.Build.0 = Release|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Release|x64.ActiveCfg = Release|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Release|x64.Build.0 = Release|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Release|x86.ActiveCfg = Release|Any CPU + {97F9546F-D70B-45E8-9EA2-0383CF2F6C53}.Release|x86.Build.0 = Release|Any CPU {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Debug|x64.ActiveCfg = Debug|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Debug|x64.Build.0 = Debug|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Debug|x86.ActiveCfg = Debug|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Debug|x86.Build.0 = Debug|Any CPU {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Release|Any CPU.ActiveCfg = Release|Any CPU {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Release|Any CPU.Build.0 = Release|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Release|x64.ActiveCfg = Release|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Release|x64.Build.0 = Release|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Release|x86.ActiveCfg = Release|Any CPU + {FCD72C56-8DE4-46BC-B9B9-F870EE2D26E0}.Release|x86.Build.0 = Release|Any CPU {931E6436-3793-4732-A3DF-473BA5878534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {931E6436-3793-4732-A3DF-473BA5878534}.Debug|Any CPU.Build.0 = Debug|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Debug|x64.ActiveCfg = Debug|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Debug|x64.Build.0 = Debug|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Debug|x86.ActiveCfg = Debug|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Debug|x86.Build.0 = Debug|Any CPU {931E6436-3793-4732-A3DF-473BA5878534}.Release|Any CPU.ActiveCfg = Release|Any CPU {931E6436-3793-4732-A3DF-473BA5878534}.Release|Any CPU.Build.0 = Release|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Release|x64.ActiveCfg = Release|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Release|x64.Build.0 = Release|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Release|x86.ActiveCfg = Release|Any CPU + {931E6436-3793-4732-A3DF-473BA5878534}.Release|x86.Build.0 = Release|Any CPU {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Debug|x64.ActiveCfg = Debug|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Debug|x64.Build.0 = Debug|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Debug|x86.ActiveCfg = Debug|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Debug|x86.Build.0 = Debug|Any CPU {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Release|Any CPU.ActiveCfg = Release|Any CPU {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Release|Any CPU.Build.0 = Release|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Release|x64.ActiveCfg = Release|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Release|x64.Build.0 = Release|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Release|x86.ActiveCfg = Release|Any CPU + {544A9C70-FE8C-4606-A3EF-74230BF18D45}.Release|x86.Build.0 = Release|Any CPU {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Debug|x64.ActiveCfg = Debug|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Debug|x64.Build.0 = Debug|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Debug|x86.ActiveCfg = Debug|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Debug|x86.Build.0 = Debug|Any CPU {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Release|Any CPU.ActiveCfg = Release|Any CPU {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Release|Any CPU.Build.0 = Release|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Release|x64.ActiveCfg = Release|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Release|x64.Build.0 = Release|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Release|x86.ActiveCfg = Release|Any CPU + {E54A6230-93F7-4A0F-925E-FE658B8DF425}.Release|x86.Build.0 = Release|Any CPU {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Debug|x64.ActiveCfg = Debug|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Debug|x64.Build.0 = Debug|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Debug|x86.ActiveCfg = Debug|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Debug|x86.Build.0 = Debug|Any CPU {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Release|Any CPU.ActiveCfg = Release|Any CPU {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Release|Any CPU.Build.0 = Release|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Release|x64.ActiveCfg = Release|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Release|x64.Build.0 = Release|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Release|x86.ActiveCfg = Release|Any CPU + {C1605309-ABD1-4D6E-A119-9F8213F67A83}.Release|x86.Build.0 = Release|Any CPU {B6D67C30-8132-4FB7-909B-DAC73731971B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B6D67C30-8132-4FB7-909B-DAC73731971B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Debug|x64.ActiveCfg = Debug|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Debug|x64.Build.0 = Debug|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Debug|x86.ActiveCfg = Debug|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Debug|x86.Build.0 = Debug|Any CPU {B6D67C30-8132-4FB7-909B-DAC73731971B}.Release|Any CPU.ActiveCfg = Release|Any CPU {B6D67C30-8132-4FB7-909B-DAC73731971B}.Release|Any CPU.Build.0 = Release|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Release|x64.ActiveCfg = Release|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Release|x64.Build.0 = Release|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Release|x86.ActiveCfg = Release|Any CPU + {B6D67C30-8132-4FB7-909B-DAC73731971B}.Release|x86.Build.0 = Release|Any CPU {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Debug|x64.Build.0 = Debug|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Debug|x86.Build.0 = Debug|Any CPU {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Release|Any CPU.Build.0 = Release|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Release|x64.ActiveCfg = Release|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Release|x64.Build.0 = Release|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Release|x86.ActiveCfg = Release|Any CPU + {B9B7EE61-1751-4152-ACC8-717C0D5E34C5}.Release|x86.Build.0 = Release|Any CPU {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Debug|x64.ActiveCfg = Debug|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Debug|x64.Build.0 = Debug|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Debug|x86.ActiveCfg = Debug|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Debug|x86.Build.0 = Debug|Any CPU {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Release|Any CPU.ActiveCfg = Release|Any CPU {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Release|Any CPU.Build.0 = Release|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Release|x64.ActiveCfg = Release|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Release|x64.Build.0 = Release|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Release|x86.ActiveCfg = Release|Any CPU + {47143DEF-2CB1-47A3-8E8D-D7AF1190D593}.Release|x86.Build.0 = Release|Any CPU {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Debug|x64.ActiveCfg = Debug|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Debug|x64.Build.0 = Debug|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Debug|x86.ActiveCfg = Debug|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Debug|x86.Build.0 = Debug|Any CPU {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Release|Any CPU.Build.0 = Release|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Release|x64.ActiveCfg = Release|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Release|x64.Build.0 = Release|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Release|x86.ActiveCfg = Release|Any CPU + {5D6133D4-E4A3-441F-B8E1-AD141FA8AED4}.Release|x86.Build.0 = Release|Any CPU {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Debug|x64.ActiveCfg = Debug|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Debug|x64.Build.0 = Debug|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Debug|x86.ActiveCfg = Debug|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Debug|x86.Build.0 = Debug|Any CPU {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Release|Any CPU.Build.0 = Release|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Release|x64.ActiveCfg = Release|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Release|x64.Build.0 = Release|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Release|x86.ActiveCfg = Release|Any CPU + {2DD54079-CCAE-42BE-9053-DA06591B1D22}.Release|x86.Build.0 = Release|Any CPU {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Debug|x64.ActiveCfg = Debug|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Debug|x64.Build.0 = Debug|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Debug|x86.ActiveCfg = Debug|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Debug|x86.Build.0 = Debug|Any CPU {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Release|Any CPU.Build.0 = Release|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Release|x64.ActiveCfg = Release|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Release|x64.Build.0 = Release|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Release|x86.ActiveCfg = Release|Any CPU + {403AF513-EA11-4EA5-B719-46257E5FF0F8}.Release|x86.Build.0 = Release|Any CPU {7C74F87E-B979-48FE-BF82-374A477B359C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7C74F87E-B979-48FE-BF82-374A477B359C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Debug|x64.ActiveCfg = Debug|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Debug|x64.Build.0 = Debug|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Debug|x86.ActiveCfg = Debug|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Debug|x86.Build.0 = Debug|Any CPU {7C74F87E-B979-48FE-BF82-374A477B359C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C74F87E-B979-48FE-BF82-374A477B359C}.Release|Any CPU.Build.0 = Release|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Release|x64.ActiveCfg = Release|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Release|x64.Build.0 = Release|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Release|x86.ActiveCfg = Release|Any CPU + {7C74F87E-B979-48FE-BF82-374A477B359C}.Release|x86.Build.0 = Release|Any CPU {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Debug|x64.ActiveCfg = Debug|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Debug|x64.Build.0 = Debug|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Debug|x86.ActiveCfg = Debug|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Debug|x86.Build.0 = Debug|Any CPU {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Release|Any CPU.Build.0 = Release|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Release|x64.ActiveCfg = Release|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Release|x64.Build.0 = Release|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Release|x86.ActiveCfg = Release|Any CPU + {4468E0D6-CBB0-4D41-952A-0B91A28C558F}.Release|x86.Build.0 = Release|Any CPU {034E4160-50F0-4944-9D12-5F11CB82C915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {034E4160-50F0-4944-9D12-5F11CB82C915}.Debug|Any CPU.Build.0 = Debug|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Debug|x64.ActiveCfg = Debug|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Debug|x64.Build.0 = Debug|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Debug|x86.ActiveCfg = Debug|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Debug|x86.Build.0 = Debug|Any CPU {034E4160-50F0-4944-9D12-5F11CB82C915}.Release|Any CPU.ActiveCfg = Release|Any CPU {034E4160-50F0-4944-9D12-5F11CB82C915}.Release|Any CPU.Build.0 = Release|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Release|x64.ActiveCfg = Release|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Release|x64.Build.0 = Release|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Release|x86.ActiveCfg = Release|Any CPU + {034E4160-50F0-4944-9D12-5F11CB82C915}.Release|x86.Build.0 = Release|Any CPU {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Debug|x64.ActiveCfg = Debug|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Debug|x64.Build.0 = Debug|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Debug|x86.ActiveCfg = Debug|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Debug|x86.Build.0 = Debug|Any CPU {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Release|Any CPU.ActiveCfg = Release|Any CPU {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Release|Any CPU.Build.0 = Release|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Release|x64.ActiveCfg = Release|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Release|x64.Build.0 = Release|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Release|x86.ActiveCfg = Release|Any CPU + {FCB04CDF-4507-470F-A2F5-D02541D10DDC}.Release|x86.Build.0 = Release|Any CPU {9F960971-F7C9-4978-8843-28FEA1A4662F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9F960971-F7C9-4978-8843-28FEA1A4662F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Debug|x64.ActiveCfg = Debug|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Debug|x64.Build.0 = Debug|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Debug|x86.ActiveCfg = Debug|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Debug|x86.Build.0 = Debug|Any CPU {9F960971-F7C9-4978-8843-28FEA1A4662F}.Release|Any CPU.ActiveCfg = Release|Any CPU {9F960971-F7C9-4978-8843-28FEA1A4662F}.Release|Any CPU.Build.0 = Release|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Release|x64.ActiveCfg = Release|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Release|x64.Build.0 = Release|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Release|x86.ActiveCfg = Release|Any CPU + {9F960971-F7C9-4978-8843-28FEA1A4662F}.Release|x86.Build.0 = Release|Any CPU {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Debug|x64.ActiveCfg = Debug|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Debug|x64.Build.0 = Debug|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Debug|x86.Build.0 = Debug|Any CPU {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Release|Any CPU.Build.0 = Release|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Release|x64.ActiveCfg = Release|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Release|x64.Build.0 = Release|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Release|x86.ActiveCfg = Release|Any CPU + {6B028F0A-7484-407E-A7E8-312CFAB53B18}.Release|x86.Build.0 = Release|Any CPU {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Debug|x64.Build.0 = Debug|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Debug|x86.Build.0 = Debug|Any CPU {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Release|Any CPU.ActiveCfg = Release|Any CPU {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Release|Any CPU.Build.0 = Release|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Release|x64.ActiveCfg = Release|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Release|x64.Build.0 = Release|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Release|x86.ActiveCfg = Release|Any CPU + {6CB3FF5D-96FE-4765-8C15-69B3664F296C}.Release|x86.Build.0 = Release|Any CPU {3E21F611-8039-46F5-85B5-92AC892A3521}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E21F611-8039-46F5-85B5-92AC892A3521}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Debug|x64.ActiveCfg = Debug|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Debug|x64.Build.0 = Debug|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Debug|x86.ActiveCfg = Debug|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Debug|x86.Build.0 = Debug|Any CPU {3E21F611-8039-46F5-85B5-92AC892A3521}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E21F611-8039-46F5-85B5-92AC892A3521}.Release|Any CPU.Build.0 = Release|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Release|x64.ActiveCfg = Release|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Release|x64.Build.0 = Release|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Release|x86.ActiveCfg = Release|Any CPU + {3E21F611-8039-46F5-85B5-92AC892A3521}.Release|x86.Build.0 = Release|Any CPU {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Debug|x64.ActiveCfg = Debug|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Debug|x64.Build.0 = Debug|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Debug|x86.ActiveCfg = Debug|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Debug|x86.Build.0 = Debug|Any CPU {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Release|Any CPU.ActiveCfg = Release|Any CPU {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Release|Any CPU.Build.0 = Release|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Release|x64.ActiveCfg = Release|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Release|x64.Build.0 = Release|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Release|x86.ActiveCfg = Release|Any CPU + {507B6692-06C5-4EA2-98B5-BDE2D5A55B51}.Release|x86.Build.0 = Release|Any CPU {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Debug|x64.ActiveCfg = Debug|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Debug|x64.Build.0 = Debug|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Debug|x86.ActiveCfg = Debug|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Debug|x86.Build.0 = Debug|Any CPU {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Release|Any CPU.Build.0 = Release|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Release|x64.ActiveCfg = Release|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Release|x64.Build.0 = Release|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Release|x86.ActiveCfg = Release|Any CPU + {C7BAC762-25F8-4D1F-B3FF-94ECA9199BE6}.Release|x86.Build.0 = Release|Any CPU {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Debug|x64.ActiveCfg = Debug|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Debug|x64.Build.0 = Debug|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Debug|x86.ActiveCfg = Debug|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Debug|x86.Build.0 = Debug|Any CPU {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Release|Any CPU.ActiveCfg = Release|Any CPU {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Release|Any CPU.Build.0 = Release|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Release|x64.ActiveCfg = Release|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Release|x64.Build.0 = Release|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Release|x86.ActiveCfg = Release|Any CPU + {5ADB16FD-B2A7-4605-A954-6F4A183519DA}.Release|x86.Build.0 = Release|Any CPU {856DF852-7271-480F-9A12-F49DFE086263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {856DF852-7271-480F-9A12-F49DFE086263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Debug|x64.ActiveCfg = Debug|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Debug|x64.Build.0 = Debug|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Debug|x86.ActiveCfg = Debug|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Debug|x86.Build.0 = Debug|Any CPU {856DF852-7271-480F-9A12-F49DFE086263}.Release|Any CPU.ActiveCfg = Release|Any CPU {856DF852-7271-480F-9A12-F49DFE086263}.Release|Any CPU.Build.0 = Release|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Release|x64.ActiveCfg = Release|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Release|x64.Build.0 = Release|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Release|x86.ActiveCfg = Release|Any CPU + {856DF852-7271-480F-9A12-F49DFE086263}.Release|x86.Build.0 = Release|Any CPU {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Debug|x64.ActiveCfg = Debug|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Debug|x64.Build.0 = Debug|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Debug|x86.ActiveCfg = Debug|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Debug|x86.Build.0 = Debug|Any CPU {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Release|Any CPU.Build.0 = Release|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Release|x64.ActiveCfg = Release|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Release|x64.Build.0 = Release|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Release|x86.ActiveCfg = Release|Any CPU + {0A933D61-5F46-4754-A0D8-ADB1F2DEA0E6}.Release|x86.Build.0 = Release|Any CPU {28368089-C065-4279-A3C4-6D2815789327}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {28368089-C065-4279-A3C4-6D2815789327}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Debug|x64.ActiveCfg = Debug|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Debug|x64.Build.0 = Debug|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Debug|x86.ActiveCfg = Debug|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Debug|x86.Build.0 = Debug|Any CPU {28368089-C065-4279-A3C4-6D2815789327}.Release|Any CPU.ActiveCfg = Release|Any CPU {28368089-C065-4279-A3C4-6D2815789327}.Release|Any CPU.Build.0 = Release|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Release|x64.ActiveCfg = Release|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Release|x64.Build.0 = Release|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Release|x86.ActiveCfg = Release|Any CPU + {28368089-C065-4279-A3C4-6D2815789327}.Release|x86.Build.0 = Release|Any CPU {006C67F2-61CB-4FF2-9343-982E6404583F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {006C67F2-61CB-4FF2-9343-982E6404583F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Debug|x64.ActiveCfg = Debug|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Debug|x64.Build.0 = Debug|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Debug|x86.ActiveCfg = Debug|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Debug|x86.Build.0 = Debug|Any CPU {006C67F2-61CB-4FF2-9343-982E6404583F}.Release|Any CPU.ActiveCfg = Release|Any CPU {006C67F2-61CB-4FF2-9343-982E6404583F}.Release|Any CPU.Build.0 = Release|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Release|x64.ActiveCfg = Release|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Release|x64.Build.0 = Release|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Release|x86.ActiveCfg = Release|Any CPU + {006C67F2-61CB-4FF2-9343-982E6404583F}.Release|x86.Build.0 = Release|Any CPU {63E084C3-C741-4285-8094-7BF2AA063C6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {63E084C3-C741-4285-8094-7BF2AA063C6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Debug|x64.ActiveCfg = Debug|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Debug|x64.Build.0 = Debug|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Debug|x86.ActiveCfg = Debug|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Debug|x86.Build.0 = Debug|Any CPU {63E084C3-C741-4285-8094-7BF2AA063C6E}.Release|Any CPU.ActiveCfg = Release|Any CPU {63E084C3-C741-4285-8094-7BF2AA063C6E}.Release|Any CPU.Build.0 = Release|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Release|x64.ActiveCfg = Release|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Release|x64.Build.0 = Release|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Release|x86.ActiveCfg = Release|Any CPU + {63E084C3-C741-4285-8094-7BF2AA063C6E}.Release|x86.Build.0 = Release|Any CPU {0FEBB470-2752-4E4D-B212-462253E5AF86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0FEBB470-2752-4E4D-B212-462253E5AF86}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Debug|x64.ActiveCfg = Debug|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Debug|x64.Build.0 = Debug|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Debug|x86.ActiveCfg = Debug|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Debug|x86.Build.0 = Debug|Any CPU {0FEBB470-2752-4E4D-B212-462253E5AF86}.Release|Any CPU.ActiveCfg = Release|Any CPU {0FEBB470-2752-4E4D-B212-462253E5AF86}.Release|Any CPU.Build.0 = Release|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Release|x64.ActiveCfg = Release|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Release|x64.Build.0 = Release|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Release|x86.ActiveCfg = Release|Any CPU + {0FEBB470-2752-4E4D-B212-462253E5AF86}.Release|x86.Build.0 = Release|Any CPU {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Debug|x64.ActiveCfg = Debug|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Debug|x64.Build.0 = Debug|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Debug|x86.ActiveCfg = Debug|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Debug|x86.Build.0 = Debug|Any CPU {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Release|Any CPU.Build.0 = Release|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Release|x64.ActiveCfg = Release|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Release|x64.Build.0 = Release|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Release|x86.ActiveCfg = Release|Any CPU + {45AFC9A6-C949-4939-B6FC-0BCE2ED599CF}.Release|x86.Build.0 = Release|Any CPU {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Debug|x64.ActiveCfg = Debug|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Debug|x64.Build.0 = Debug|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Debug|x86.ActiveCfg = Debug|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Debug|x86.Build.0 = Debug|Any CPU {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Release|Any CPU.ActiveCfg = Release|Any CPU {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Release|Any CPU.Build.0 = Release|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Release|x64.ActiveCfg = Release|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Release|x64.Build.0 = Release|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Release|x86.ActiveCfg = Release|Any CPU + {4A4841BC-9AC5-4581-AC50-6AAE6B43E6E7}.Release|x86.Build.0 = Release|Any CPU {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Debug|x64.ActiveCfg = Debug|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Debug|x64.Build.0 = Debug|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Debug|x86.ActiveCfg = Debug|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Debug|x86.Build.0 = Debug|Any CPU {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Release|Any CPU.Build.0 = Release|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Release|x64.ActiveCfg = Release|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Release|x64.Build.0 = Release|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Release|x86.ActiveCfg = Release|Any CPU + {A3FFA5B4-F3CE-4FBB-82D9-45D85526AB47}.Release|x86.Build.0 = Release|Any CPU {94E4C64B-919C-48ED-A728-AE95403480FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {94E4C64B-919C-48ED-A728-AE95403480FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Debug|x64.Build.0 = Debug|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Debug|x86.Build.0 = Debug|Any CPU {94E4C64B-919C-48ED-A728-AE95403480FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {94E4C64B-919C-48ED-A728-AE95403480FA}.Release|Any CPU.Build.0 = Release|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Release|x64.ActiveCfg = Release|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Release|x64.Build.0 = Release|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Release|x86.ActiveCfg = Release|Any CPU + {94E4C64B-919C-48ED-A728-AE95403480FA}.Release|x86.Build.0 = Release|Any CPU {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Debug|x64.ActiveCfg = Debug|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Debug|x64.Build.0 = Debug|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Debug|x86.ActiveCfg = Debug|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Debug|x86.Build.0 = Debug|Any CPU {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Release|Any CPU.ActiveCfg = Release|Any CPU {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Release|Any CPU.Build.0 = Release|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Release|x64.ActiveCfg = Release|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Release|x64.Build.0 = Release|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Release|x86.ActiveCfg = Release|Any CPU + {DBAE5B73-152A-45BF-B5BA-5D598C899A57}.Release|x86.Build.0 = Release|Any CPU {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Debug|x64.Build.0 = Debug|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Debug|x86.Build.0 = Debug|Any CPU {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Release|Any CPU.Build.0 = Release|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Release|x64.ActiveCfg = Release|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Release|x64.Build.0 = Release|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Release|x86.ActiveCfg = Release|Any CPU + {7D29BC5B-683C-4F7E-A87D-746C7FB76732}.Release|x86.Build.0 = Release|Any CPU {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Debug|x64.ActiveCfg = Debug|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Debug|x64.Build.0 = Debug|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Debug|x86.ActiveCfg = Debug|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Debug|x86.Build.0 = Debug|Any CPU {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Release|Any CPU.ActiveCfg = Release|Any CPU {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Release|Any CPU.Build.0 = Release|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Release|x64.ActiveCfg = Release|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Release|x64.Build.0 = Release|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Release|x86.ActiveCfg = Release|Any CPU + {44CD23AC-18B0-4E1A-ADA7-3FF883DA8D03}.Release|x86.Build.0 = Release|Any CPU {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Debug|x64.Build.0 = Debug|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Debug|x86.Build.0 = Debug|Any CPU {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Release|Any CPU.Build.0 = Release|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Release|x64.ActiveCfg = Release|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Release|x64.Build.0 = Release|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Release|x86.ActiveCfg = Release|Any CPU + {8BFD4EFE-A009-429B-9AFB-2C77F802F2BC}.Release|x86.Build.0 = Release|Any CPU {FACD7646-718F-4148-A172-A482063A161E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FACD7646-718F-4148-A172-A482063A161E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Debug|x64.ActiveCfg = Debug|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Debug|x64.Build.0 = Debug|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Debug|x86.ActiveCfg = Debug|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Debug|x86.Build.0 = Debug|Any CPU {FACD7646-718F-4148-A172-A482063A161E}.Release|Any CPU.ActiveCfg = Release|Any CPU {FACD7646-718F-4148-A172-A482063A161E}.Release|Any CPU.Build.0 = Release|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Release|x64.ActiveCfg = Release|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Release|x64.Build.0 = Release|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Release|x86.ActiveCfg = Release|Any CPU + {FACD7646-718F-4148-A172-A482063A161E}.Release|x86.Build.0 = Release|Any CPU {E14F294D-1179-4559-BCEB-0511506AEFA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E14F294D-1179-4559-BCEB-0511506AEFA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Debug|x64.ActiveCfg = Debug|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Debug|x64.Build.0 = Debug|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Debug|x86.Build.0 = Debug|Any CPU {E14F294D-1179-4559-BCEB-0511506AEFA6}.Release|Any CPU.ActiveCfg = Release|Any CPU {E14F294D-1179-4559-BCEB-0511506AEFA6}.Release|Any CPU.Build.0 = Release|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Release|x64.ActiveCfg = Release|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Release|x64.Build.0 = Release|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Release|x86.ActiveCfg = Release|Any CPU + {E14F294D-1179-4559-BCEB-0511506AEFA6}.Release|x86.Build.0 = Release|Any CPU {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Debug|x64.ActiveCfg = Debug|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Debug|x64.Build.0 = Debug|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Debug|x86.ActiveCfg = Debug|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Debug|x86.Build.0 = Debug|Any CPU {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Release|Any CPU.Build.0 = Release|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Release|x64.ActiveCfg = Release|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Release|x64.Build.0 = Release|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Release|x86.ActiveCfg = Release|Any CPU + {5F028E11-1671-461F-87A1-7B27FD6CD01E}.Release|x86.Build.0 = Release|Any CPU {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Debug|x64.ActiveCfg = Debug|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Debug|x64.Build.0 = Debug|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Debug|x86.Build.0 = Debug|Any CPU {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Release|Any CPU.ActiveCfg = Release|Any CPU {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Release|Any CPU.Build.0 = Release|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Release|x64.ActiveCfg = Release|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Release|x64.Build.0 = Release|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Release|x86.ActiveCfg = Release|Any CPU + {8B5A7D22-2F96-4934-A204-C192E7E502BE}.Release|x86.Build.0 = Release|Any CPU {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Debug|x64.Build.0 = Debug|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Debug|x86.Build.0 = Debug|Any CPU {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Release|Any CPU.ActiveCfg = Release|Any CPU {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Release|Any CPU.Build.0 = Release|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Release|x64.ActiveCfg = Release|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Release|x64.Build.0 = Release|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Release|x86.ActiveCfg = Release|Any CPU + {D67910D1-2B62-4FB1-A095-A96B1F80C1B9}.Release|x86.Build.0 = Release|Any CPU {BB247DCA-0566-41B3-9A69-B041019B36D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB247DCA-0566-41B3-9A69-B041019B36D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Debug|x64.ActiveCfg = Debug|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Debug|x64.Build.0 = Debug|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Debug|x86.ActiveCfg = Debug|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Debug|x86.Build.0 = Debug|Any CPU {BB247DCA-0566-41B3-9A69-B041019B36D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB247DCA-0566-41B3-9A69-B041019B36D8}.Release|Any CPU.Build.0 = Release|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Release|x64.ActiveCfg = Release|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Release|x64.Build.0 = Release|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Release|x86.ActiveCfg = Release|Any CPU + {BB247DCA-0566-41B3-9A69-B041019B36D8}.Release|x86.Build.0 = Release|Any CPU {2260C062-8317-40EC-BA6B-F1260790CE7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2260C062-8317-40EC-BA6B-F1260790CE7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Debug|x64.ActiveCfg = Debug|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Debug|x64.Build.0 = Debug|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Debug|x86.ActiveCfg = Debug|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Debug|x86.Build.0 = Debug|Any CPU {2260C062-8317-40EC-BA6B-F1260790CE7D}.Release|Any CPU.ActiveCfg = Release|Any CPU {2260C062-8317-40EC-BA6B-F1260790CE7D}.Release|Any CPU.Build.0 = Release|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Release|x64.ActiveCfg = Release|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Release|x64.Build.0 = Release|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Release|x86.ActiveCfg = Release|Any CPU + {2260C062-8317-40EC-BA6B-F1260790CE7D}.Release|x86.Build.0 = Release|Any CPU {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Debug|x64.ActiveCfg = Debug|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Debug|x64.Build.0 = Debug|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Debug|x86.Build.0 = Debug|Any CPU {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Release|Any CPU.ActiveCfg = Release|Any CPU {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Release|Any CPU.Build.0 = Release|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Release|x64.ActiveCfg = Release|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Release|x64.Build.0 = Release|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Release|x86.ActiveCfg = Release|Any CPU + {D69A6305-12A9-4190-BDE6-185258D4E8B6}.Release|x86.Build.0 = Release|Any CPU {3E5832F0-1869-4833-8680-7C6952E5D917}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E5832F0-1869-4833-8680-7C6952E5D917}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Debug|x64.ActiveCfg = Debug|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Debug|x64.Build.0 = Debug|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Debug|x86.ActiveCfg = Debug|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Debug|x86.Build.0 = Debug|Any CPU {3E5832F0-1869-4833-8680-7C6952E5D917}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E5832F0-1869-4833-8680-7C6952E5D917}.Release|Any CPU.Build.0 = Release|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Release|x64.ActiveCfg = Release|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Release|x64.Build.0 = Release|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Release|x86.ActiveCfg = Release|Any CPU + {3E5832F0-1869-4833-8680-7C6952E5D917}.Release|x86.Build.0 = Release|Any CPU {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Debug|x64.ActiveCfg = Debug|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Debug|x64.Build.0 = Debug|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Debug|x86.ActiveCfg = Debug|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Debug|x86.Build.0 = Debug|Any CPU {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Release|Any CPU.ActiveCfg = Release|Any CPU {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Release|Any CPU.Build.0 = Release|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Release|x64.ActiveCfg = Release|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Release|x64.Build.0 = Release|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Release|x86.ActiveCfg = Release|Any CPU + {E7F8BD74-F3EB-4A4D-AF2B-B8492CC6355F}.Release|x86.Build.0 = Release|Any CPU {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Debug|x64.Build.0 = Debug|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Debug|x86.Build.0 = Debug|Any CPU {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Release|Any CPU.Build.0 = Release|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Release|x64.ActiveCfg = Release|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Release|x64.Build.0 = Release|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Release|x86.ActiveCfg = Release|Any CPU + {F3128138-A2B7-4C09-9D0A-A93DD4F855A5}.Release|x86.Build.0 = Release|Any CPU {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Debug|x64.ActiveCfg = Debug|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Debug|x64.Build.0 = Debug|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Debug|x86.ActiveCfg = Debug|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Debug|x86.Build.0 = Debug|Any CPU {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Release|Any CPU.Build.0 = Release|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Release|x64.ActiveCfg = Release|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Release|x64.Build.0 = Release|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Release|x86.ActiveCfg = Release|Any CPU + {4C4A49FF-E89F-4108-A4BD-551634A3C4CE}.Release|x86.Build.0 = Release|Any CPU {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Debug|x64.ActiveCfg = Debug|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Debug|x64.Build.0 = Debug|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Debug|x86.ActiveCfg = Debug|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Debug|x86.Build.0 = Debug|Any CPU {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Release|Any CPU.Build.0 = Release|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Release|x64.ActiveCfg = Release|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Release|x64.Build.0 = Release|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Release|x86.ActiveCfg = Release|Any CPU + {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A}.Release|x86.Build.0 = Release|Any CPU {F29AAF44-60FE-4189-81C4-FE3A60161394}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F29AAF44-60FE-4189-81C4-FE3A60161394}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Debug|x64.ActiveCfg = Debug|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Debug|x64.Build.0 = Debug|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Debug|x86.ActiveCfg = Debug|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Debug|x86.Build.0 = Debug|Any CPU {F29AAF44-60FE-4189-81C4-FE3A60161394}.Release|Any CPU.ActiveCfg = Release|Any CPU {F29AAF44-60FE-4189-81C4-FE3A60161394}.Release|Any CPU.Build.0 = Release|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Release|x64.ActiveCfg = Release|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Release|x64.Build.0 = Release|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Release|x86.ActiveCfg = Release|Any CPU + {F29AAF44-60FE-4189-81C4-FE3A60161394}.Release|x86.Build.0 = Release|Any CPU {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Debug|x64.ActiveCfg = Debug|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Debug|x64.Build.0 = Debug|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Debug|x86.ActiveCfg = Debug|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Debug|x86.Build.0 = Debug|Any CPU {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Release|Any CPU.ActiveCfg = Release|Any CPU {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Release|Any CPU.Build.0 = Release|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Release|x64.ActiveCfg = Release|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Release|x64.Build.0 = Release|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Release|x86.ActiveCfg = Release|Any CPU + {1CF4EBB0-6BBB-456A-9258-83F62D026530}.Release|x86.Build.0 = Release|Any CPU {200CCE0D-1796-4570-8EDD-7093F0072678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {200CCE0D-1796-4570-8EDD-7093F0072678}.Debug|Any CPU.Build.0 = Debug|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Debug|x64.ActiveCfg = Debug|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Debug|x64.Build.0 = Debug|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Debug|x86.ActiveCfg = Debug|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Debug|x86.Build.0 = Debug|Any CPU {200CCE0D-1796-4570-8EDD-7093F0072678}.Release|Any CPU.ActiveCfg = Release|Any CPU {200CCE0D-1796-4570-8EDD-7093F0072678}.Release|Any CPU.Build.0 = Release|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Release|x64.ActiveCfg = Release|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Release|x64.Build.0 = Release|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Release|x86.ActiveCfg = Release|Any CPU + {200CCE0D-1796-4570-8EDD-7093F0072678}.Release|x86.Build.0 = Release|Any CPU {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Debug|x64.ActiveCfg = Debug|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Debug|x64.Build.0 = Debug|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Debug|x86.ActiveCfg = Debug|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Debug|x86.Build.0 = Debug|Any CPU {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Release|Any CPU.Build.0 = Release|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Release|x64.ActiveCfg = Release|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Release|x64.Build.0 = Release|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Release|x86.ActiveCfg = Release|Any CPU + {AFA889B1-B728-4E16-96B7-9733376B0EA4}.Release|x86.Build.0 = Release|Any CPU {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Debug|x64.ActiveCfg = Debug|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Debug|x64.Build.0 = Debug|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Debug|x86.ActiveCfg = Debug|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Debug|x86.Build.0 = Debug|Any CPU {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Release|Any CPU.ActiveCfg = Release|Any CPU {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Release|Any CPU.Build.0 = Release|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Release|x64.ActiveCfg = Release|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Release|x64.Build.0 = Release|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Release|x86.ActiveCfg = Release|Any CPU + {B8F06FF4-1C87-4483-9B0A-CEC862622BDA}.Release|x86.Build.0 = Release|Any CPU {16C31B01-EC91-41E5-8290-EBB887E75F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {16C31B01-EC91-41E5-8290-EBB887E75F23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Debug|x64.ActiveCfg = Debug|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Debug|x64.Build.0 = Debug|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Debug|x86.ActiveCfg = Debug|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Debug|x86.Build.0 = Debug|Any CPU {16C31B01-EC91-41E5-8290-EBB887E75F23}.Release|Any CPU.ActiveCfg = Release|Any CPU {16C31B01-EC91-41E5-8290-EBB887E75F23}.Release|Any CPU.Build.0 = Release|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Release|x64.ActiveCfg = Release|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Release|x64.Build.0 = Release|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Release|x86.ActiveCfg = Release|Any CPU + {16C31B01-EC91-41E5-8290-EBB887E75F23}.Release|x86.Build.0 = Release|Any CPU {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Debug|x64.ActiveCfg = Debug|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Debug|x64.Build.0 = Debug|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Debug|x86.ActiveCfg = Debug|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Debug|x86.Build.0 = Debug|Any CPU {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Release|Any CPU.Build.0 = Release|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Release|x64.ActiveCfg = Release|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Release|x64.Build.0 = Release|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Release|x86.ActiveCfg = Release|Any CPU + {0D10C533-F687-40E9-AF63-B06345EAB5DF}.Release|x86.Build.0 = Release|Any CPU {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Debug|x64.Build.0 = Debug|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Debug|x86.ActiveCfg = Debug|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Debug|x86.Build.0 = Debug|Any CPU {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Release|Any CPU.Build.0 = Release|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Release|x64.ActiveCfg = Release|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Release|x64.Build.0 = Release|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Release|x86.ActiveCfg = Release|Any CPU + {83BCDD80-28B3-488A-9F65-27D2637F82F7}.Release|x86.Build.0 = Release|Any CPU {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Debug|x64.ActiveCfg = Debug|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Debug|x64.Build.0 = Debug|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Debug|x86.ActiveCfg = Debug|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Debug|x86.Build.0 = Debug|Any CPU {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Release|Any CPU.Build.0 = Release|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Release|x64.ActiveCfg = Release|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Release|x64.Build.0 = Release|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Release|x86.ActiveCfg = Release|Any CPU + {16EC4035-F8CA-47CB-9F18-4B151EAC28CD}.Release|x86.Build.0 = Release|Any CPU {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Debug|x64.ActiveCfg = Debug|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Debug|x64.Build.0 = Debug|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Debug|x86.ActiveCfg = Debug|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Debug|x86.Build.0 = Debug|Any CPU {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Release|Any CPU.ActiveCfg = Release|Any CPU {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Release|Any CPU.Build.0 = Release|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Release|x64.ActiveCfg = Release|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Release|x64.Build.0 = Release|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Release|x86.ActiveCfg = Release|Any CPU + {279A92D4-1017-4401-90B2-CDE013D6B2ED}.Release|x86.Build.0 = Release|Any CPU {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Debug|x64.ActiveCfg = Debug|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Debug|x64.Build.0 = Debug|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Debug|x86.ActiveCfg = Debug|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Debug|x86.Build.0 = Debug|Any CPU {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Release|Any CPU.Build.0 = Release|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Release|x64.ActiveCfg = Release|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Release|x64.Build.0 = Release|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Release|x86.ActiveCfg = Release|Any CPU + {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF}.Release|x86.Build.0 = Release|Any CPU {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Debug|x64.Build.0 = Debug|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Debug|x86.Build.0 = Debug|Any CPU {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Release|Any CPU.ActiveCfg = Release|Any CPU {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Release|Any CPU.Build.0 = Release|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Release|x64.ActiveCfg = Release|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Release|x64.Build.0 = Release|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Release|x86.ActiveCfg = Release|Any CPU + {97C10721-C4FC-49A0-902D-B28B30BA99B9}.Release|x86.Build.0 = Release|Any CPU {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Debug|x64.Build.0 = Debug|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Debug|x86.ActiveCfg = Debug|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Debug|x86.Build.0 = Debug|Any CPU {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Release|Any CPU.Build.0 = Release|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Release|x64.ActiveCfg = Release|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Release|x64.Build.0 = Release|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Release|x86.ActiveCfg = Release|Any CPU + {CE791170-2CF8-45BC-B69C-7E0AB29E9FEC}.Release|x86.Build.0 = Release|Any CPU {3C433895-A214-46AB-9603-4BBF398658AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3C433895-A214-46AB-9603-4BBF398658AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Debug|x64.Build.0 = Debug|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Debug|x86.Build.0 = Debug|Any CPU {3C433895-A214-46AB-9603-4BBF398658AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {3C433895-A214-46AB-9603-4BBF398658AC}.Release|Any CPU.Build.0 = Release|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Release|x64.ActiveCfg = Release|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Release|x64.Build.0 = Release|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Release|x86.ActiveCfg = Release|Any CPU + {3C433895-A214-46AB-9603-4BBF398658AC}.Release|x86.Build.0 = Release|Any CPU {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Debug|x64.ActiveCfg = Debug|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Debug|x64.Build.0 = Debug|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Debug|x86.ActiveCfg = Debug|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Debug|x86.Build.0 = Debug|Any CPU {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Release|Any CPU.ActiveCfg = Release|Any CPU {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Release|Any CPU.Build.0 = Release|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Release|x64.ActiveCfg = Release|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Release|x64.Build.0 = Release|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Release|x86.ActiveCfg = Release|Any CPU + {B5579A89-D734-4C8B-B81C-E0CAA45AB769}.Release|x86.Build.0 = Release|Any CPU {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Debug|x64.ActiveCfg = Debug|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Debug|x64.Build.0 = Debug|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Debug|x86.ActiveCfg = Debug|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Debug|x86.Build.0 = Debug|Any CPU {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Release|Any CPU.ActiveCfg = Release|Any CPU {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Release|Any CPU.Build.0 = Release|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Release|x64.ActiveCfg = Release|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Release|x64.Build.0 = Release|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Release|x86.ActiveCfg = Release|Any CPU + {F73FDB0F-D5A5-481C-9ED7-CC4BCD52AD45}.Release|x86.Build.0 = Release|Any CPU {1ABA4692-2B45-487C-AF97-578C289B4D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1ABA4692-2B45-487C-AF97-578C289B4D83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Debug|x64.ActiveCfg = Debug|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Debug|x64.Build.0 = Debug|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Debug|x86.ActiveCfg = Debug|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Debug|x86.Build.0 = Debug|Any CPU {1ABA4692-2B45-487C-AF97-578C289B4D83}.Release|Any CPU.ActiveCfg = Release|Any CPU {1ABA4692-2B45-487C-AF97-578C289B4D83}.Release|Any CPU.Build.0 = Release|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Release|x64.ActiveCfg = Release|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Release|x64.Build.0 = Release|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Release|x86.ActiveCfg = Release|Any CPU + {1ABA4692-2B45-487C-AF97-578C289B4D83}.Release|x86.Build.0 = Release|Any CPU {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Debug|x64.ActiveCfg = Debug|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Debug|x64.Build.0 = Debug|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Debug|x86.ActiveCfg = Debug|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Debug|x86.Build.0 = Debug|Any CPU {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Release|Any CPU.Build.0 = Release|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Release|x64.ActiveCfg = Release|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Release|x64.Build.0 = Release|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Release|x86.ActiveCfg = Release|Any CPU + {43873E03-3D5E-4467-BD34-BFA0F3C62E3E}.Release|x86.Build.0 = Release|Any CPU {FCFF821D-C176-4F36-972F-0159792DC800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FCFF821D-C176-4F36-972F-0159792DC800}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Debug|x64.ActiveCfg = Debug|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Debug|x64.Build.0 = Debug|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Debug|x86.ActiveCfg = Debug|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Debug|x86.Build.0 = Debug|Any CPU {FCFF821D-C176-4F36-972F-0159792DC800}.Release|Any CPU.ActiveCfg = Release|Any CPU {FCFF821D-C176-4F36-972F-0159792DC800}.Release|Any CPU.Build.0 = Release|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Release|x64.ActiveCfg = Release|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Release|x64.Build.0 = Release|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Release|x86.ActiveCfg = Release|Any CPU + {FCFF821D-C176-4F36-972F-0159792DC800}.Release|x86.Build.0 = Release|Any CPU {38CE2218-BAD5-4061-8B68-E266DA86C628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {38CE2218-BAD5-4061-8B68-E266DA86C628}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Debug|x64.ActiveCfg = Debug|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Debug|x64.Build.0 = Debug|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Debug|x86.ActiveCfg = Debug|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Debug|x86.Build.0 = Debug|Any CPU {38CE2218-BAD5-4061-8B68-E266DA86C628}.Release|Any CPU.ActiveCfg = Release|Any CPU {38CE2218-BAD5-4061-8B68-E266DA86C628}.Release|Any CPU.Build.0 = Release|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Release|x64.ActiveCfg = Release|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Release|x64.Build.0 = Release|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Release|x86.ActiveCfg = Release|Any CPU + {38CE2218-BAD5-4061-8B68-E266DA86C628}.Release|x86.Build.0 = Release|Any CPU {8D57DECA-7D62-4673-A443-A39265AB925F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8D57DECA-7D62-4673-A443-A39265AB925F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Debug|x64.ActiveCfg = Debug|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Debug|x64.Build.0 = Debug|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Debug|x86.ActiveCfg = Debug|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Debug|x86.Build.0 = Debug|Any CPU {8D57DECA-7D62-4673-A443-A39265AB925F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8D57DECA-7D62-4673-A443-A39265AB925F}.Release|Any CPU.Build.0 = Release|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Release|x64.ActiveCfg = Release|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Release|x64.Build.0 = Release|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Release|x86.ActiveCfg = Release|Any CPU + {8D57DECA-7D62-4673-A443-A39265AB925F}.Release|x86.Build.0 = Release|Any CPU {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Debug|x64.ActiveCfg = Debug|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Debug|x64.Build.0 = Debug|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Debug|x86.ActiveCfg = Debug|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Debug|x86.Build.0 = Debug|Any CPU {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Release|Any CPU.ActiveCfg = Release|Any CPU {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Release|Any CPU.Build.0 = Release|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Release|x64.ActiveCfg = Release|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Release|x64.Build.0 = Release|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Release|x86.ActiveCfg = Release|Any CPU + {4F21019C-CC57-4A5F-9A97-AE62D9AE3543}.Release|x86.Build.0 = Release|Any CPU {C77FF650-6789-44F4-93AC-7A00674D5E04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C77FF650-6789-44F4-93AC-7A00674D5E04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Debug|x64.ActiveCfg = Debug|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Debug|x64.Build.0 = Debug|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Debug|x86.ActiveCfg = Debug|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Debug|x86.Build.0 = Debug|Any CPU {C77FF650-6789-44F4-93AC-7A00674D5E04}.Release|Any CPU.ActiveCfg = Release|Any CPU {C77FF650-6789-44F4-93AC-7A00674D5E04}.Release|Any CPU.Build.0 = Release|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Release|x64.ActiveCfg = Release|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Release|x64.Build.0 = Release|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Release|x86.ActiveCfg = Release|Any CPU + {C77FF650-6789-44F4-93AC-7A00674D5E04}.Release|x86.Build.0 = Release|Any CPU {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Debug|x64.ActiveCfg = Debug|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Debug|x64.Build.0 = Debug|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Debug|x86.ActiveCfg = Debug|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Debug|x86.Build.0 = Debug|Any CPU {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Release|Any CPU.Build.0 = Release|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Release|x64.ActiveCfg = Release|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Release|x64.Build.0 = Release|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Release|x86.ActiveCfg = Release|Any CPU + {E926AC18-7F96-4FF1-9D32-F857DDA35EB0}.Release|x86.Build.0 = Release|Any CPU {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Debug|x64.ActiveCfg = Debug|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Debug|x64.Build.0 = Debug|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Debug|x86.ActiveCfg = Debug|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Debug|x86.Build.0 = Debug|Any CPU {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Release|Any CPU.ActiveCfg = Release|Any CPU {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Release|Any CPU.Build.0 = Release|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Release|x64.ActiveCfg = Release|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Release|x64.Build.0 = Release|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Release|x86.ActiveCfg = Release|Any CPU + {E470E285-3A1C-40AA-B3AA-A9EEB9065358}.Release|x86.Build.0 = Release|Any CPU {2617DFDC-2935-40D3-9301-2C09C0311145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2617DFDC-2935-40D3-9301-2C09C0311145}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Debug|x64.ActiveCfg = Debug|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Debug|x64.Build.0 = Debug|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Debug|x86.ActiveCfg = Debug|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Debug|x86.Build.0 = Debug|Any CPU {2617DFDC-2935-40D3-9301-2C09C0311145}.Release|Any CPU.ActiveCfg = Release|Any CPU {2617DFDC-2935-40D3-9301-2C09C0311145}.Release|Any CPU.Build.0 = Release|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Release|x64.ActiveCfg = Release|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Release|x64.Build.0 = Release|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Release|x86.ActiveCfg = Release|Any CPU + {2617DFDC-2935-40D3-9301-2C09C0311145}.Release|x86.Build.0 = Release|Any CPU {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Debug|x64.ActiveCfg = Debug|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Debug|x64.Build.0 = Debug|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Debug|x86.ActiveCfg = Debug|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Debug|x86.Build.0 = Debug|Any CPU {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Release|Any CPU.ActiveCfg = Release|Any CPU {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Release|Any CPU.Build.0 = Release|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Release|x64.ActiveCfg = Release|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Release|x64.Build.0 = Release|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Release|x86.ActiveCfg = Release|Any CPU + {F60F7E39-DF2C-4312-B716-32AB33F9FDC5}.Release|x86.Build.0 = Release|Any CPU {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Debug|x64.ActiveCfg = Debug|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Debug|x64.Build.0 = Debug|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Debug|x86.Build.0 = Debug|Any CPU {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Release|Any CPU.ActiveCfg = Release|Any CPU {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Release|Any CPU.Build.0 = Release|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Release|x64.ActiveCfg = Release|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Release|x64.Build.0 = Release|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Release|x86.ActiveCfg = Release|Any CPU + {AF5E30DE-3A4C-4F92-94AE-BA7A7AE80D90}.Release|x86.Build.0 = Release|Any CPU {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Debug|x64.ActiveCfg = Debug|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Debug|x64.Build.0 = Debug|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Debug|x86.ActiveCfg = Debug|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Debug|x86.Build.0 = Debug|Any CPU {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Release|Any CPU.ActiveCfg = Release|Any CPU {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Release|Any CPU.Build.0 = Release|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Release|x64.ActiveCfg = Release|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Release|x64.Build.0 = Release|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Release|x86.ActiveCfg = Release|Any CPU + {39951A36-F719-4B6F-AF12-FE9FCCE7B9D3}.Release|x86.Build.0 = Release|Any CPU {73FEA730-2607-47DA-B719-08CDB81D310B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {73FEA730-2607-47DA-B719-08CDB81D310B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Debug|x64.ActiveCfg = Debug|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Debug|x64.Build.0 = Debug|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Debug|x86.ActiveCfg = Debug|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Debug|x86.Build.0 = Debug|Any CPU {73FEA730-2607-47DA-B719-08CDB81D310B}.Release|Any CPU.ActiveCfg = Release|Any CPU {73FEA730-2607-47DA-B719-08CDB81D310B}.Release|Any CPU.Build.0 = Release|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Release|x64.ActiveCfg = Release|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Release|x64.Build.0 = Release|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Release|x86.ActiveCfg = Release|Any CPU + {73FEA730-2607-47DA-B719-08CDB81D310B}.Release|x86.Build.0 = Release|Any CPU {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Debug|x64.ActiveCfg = Debug|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Debug|x64.Build.0 = Debug|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Debug|x86.ActiveCfg = Debug|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Debug|x86.Build.0 = Debug|Any CPU {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Release|Any CPU.ActiveCfg = Release|Any CPU {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Release|Any CPU.Build.0 = Release|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Release|x64.ActiveCfg = Release|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Release|x64.Build.0 = Release|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Release|x86.ActiveCfg = Release|Any CPU + {E7855CDF-09F7-4323-BDB7-37B8A1307D69}.Release|x86.Build.0 = Release|Any CPU {8342C992-C2E6-4161-B0E7-1F94469DE733}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8342C992-C2E6-4161-B0E7-1F94469DE733}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Debug|x64.ActiveCfg = Debug|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Debug|x64.Build.0 = Debug|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Debug|x86.ActiveCfg = Debug|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Debug|x86.Build.0 = Debug|Any CPU {8342C992-C2E6-4161-B0E7-1F94469DE733}.Release|Any CPU.ActiveCfg = Release|Any CPU {8342C992-C2E6-4161-B0E7-1F94469DE733}.Release|Any CPU.Build.0 = Release|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Release|x64.ActiveCfg = Release|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Release|x64.Build.0 = Release|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Release|x86.ActiveCfg = Release|Any CPU + {8342C992-C2E6-4161-B0E7-1F94469DE733}.Release|x86.Build.0 = Release|Any CPU {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Debug|x64.Build.0 = Debug|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Debug|x86.ActiveCfg = Debug|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Debug|x86.Build.0 = Debug|Any CPU {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Release|x64.ActiveCfg = Release|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Release|x64.Build.0 = Release|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Release|x86.ActiveCfg = Release|Any CPU + {2E1E4F8B-875E-4AF1-95F4-2A7D1B1EA3D5}.Release|x86.Build.0 = Release|Any CPU {601063A2-AA25-405D-82D6-978C25E71D0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {601063A2-AA25-405D-82D6-978C25E71D0F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Debug|x64.ActiveCfg = Debug|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Debug|x64.Build.0 = Debug|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Debug|x86.ActiveCfg = Debug|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Debug|x86.Build.0 = Debug|Any CPU {601063A2-AA25-405D-82D6-978C25E71D0F}.Release|Any CPU.ActiveCfg = Release|Any CPU {601063A2-AA25-405D-82D6-978C25E71D0F}.Release|Any CPU.Build.0 = Release|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Release|x64.ActiveCfg = Release|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Release|x64.Build.0 = Release|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Release|x86.ActiveCfg = Release|Any CPU + {601063A2-AA25-405D-82D6-978C25E71D0F}.Release|x86.Build.0 = Release|Any CPU {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Debug|x64.ActiveCfg = Debug|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Debug|x64.Build.0 = Debug|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Debug|x86.ActiveCfg = Debug|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Debug|x86.Build.0 = Debug|Any CPU {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Release|Any CPU.ActiveCfg = Release|Any CPU {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Release|Any CPU.Build.0 = Release|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Release|x64.ActiveCfg = Release|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Release|x64.Build.0 = Release|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Release|x86.ActiveCfg = Release|Any CPU + {F9B66D4E-DD37-4B50-B704-9FBC1EFC3E7F}.Release|x86.Build.0 = Release|Any CPU {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Debug|x64.ActiveCfg = Debug|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Debug|x64.Build.0 = Debug|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Debug|x86.ActiveCfg = Debug|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Debug|x86.Build.0 = Debug|Any CPU {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Release|Any CPU.ActiveCfg = Release|Any CPU {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Release|Any CPU.Build.0 = Release|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Release|x64.ActiveCfg = Release|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Release|x64.Build.0 = Release|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Release|x86.ActiveCfg = Release|Any CPU + {539C39B0-2A0F-4218-ADB9-7C4D73C26C24}.Release|x86.Build.0 = Release|Any CPU {D63C4162-1D47-4E0B-947B-4104F5601812}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D63C4162-1D47-4E0B-947B-4104F5601812}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Debug|x64.ActiveCfg = Debug|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Debug|x64.Build.0 = Debug|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Debug|x86.ActiveCfg = Debug|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Debug|x86.Build.0 = Debug|Any CPU {D63C4162-1D47-4E0B-947B-4104F5601812}.Release|Any CPU.ActiveCfg = Release|Any CPU {D63C4162-1D47-4E0B-947B-4104F5601812}.Release|Any CPU.Build.0 = Release|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Release|x64.ActiveCfg = Release|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Release|x64.Build.0 = Release|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Release|x86.ActiveCfg = Release|Any CPU + {D63C4162-1D47-4E0B-947B-4104F5601812}.Release|x86.Build.0 = Release|Any CPU {439F5255-5ABB-4097-A718-9D47615FBB0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {439F5255-5ABB-4097-A718-9D47615FBB0C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Debug|x64.ActiveCfg = Debug|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Debug|x64.Build.0 = Debug|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Debug|x86.ActiveCfg = Debug|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Debug|x86.Build.0 = Debug|Any CPU {439F5255-5ABB-4097-A718-9D47615FBB0C}.Release|Any CPU.ActiveCfg = Release|Any CPU {439F5255-5ABB-4097-A718-9D47615FBB0C}.Release|Any CPU.Build.0 = Release|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Release|x64.ActiveCfg = Release|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Release|x64.Build.0 = Release|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Release|x86.ActiveCfg = Release|Any CPU + {439F5255-5ABB-4097-A718-9D47615FBB0C}.Release|x86.Build.0 = Release|Any CPU {9A889644-C632-4CC0-AB47-FF8D14932188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9A889644-C632-4CC0-AB47-FF8D14932188}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Debug|x64.ActiveCfg = Debug|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Debug|x64.Build.0 = Debug|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Debug|x86.Build.0 = Debug|Any CPU {9A889644-C632-4CC0-AB47-FF8D14932188}.Release|Any CPU.ActiveCfg = Release|Any CPU {9A889644-C632-4CC0-AB47-FF8D14932188}.Release|Any CPU.Build.0 = Release|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Release|x64.ActiveCfg = Release|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Release|x64.Build.0 = Release|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Release|x86.ActiveCfg = Release|Any CPU + {9A889644-C632-4CC0-AB47-FF8D14932188}.Release|x86.Build.0 = Release|Any CPU {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Debug|x64.ActiveCfg = Debug|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Debug|x64.Build.0 = Debug|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Debug|x86.ActiveCfg = Debug|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Debug|x86.Build.0 = Debug|Any CPU {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Release|Any CPU.ActiveCfg = Release|Any CPU {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Release|Any CPU.Build.0 = Release|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Release|x64.ActiveCfg = Release|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Release|x64.Build.0 = Release|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Release|x86.ActiveCfg = Release|Any CPU + {F83B6A40-B596-4A5E-81A3-92565F06BD94}.Release|x86.Build.0 = Release|Any CPU {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Debug|x64.ActiveCfg = Debug|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Debug|x64.Build.0 = Debug|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Debug|x86.ActiveCfg = Debug|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Debug|x86.Build.0 = Debug|Any CPU {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Release|Any CPU.Build.0 = Release|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Release|x64.ActiveCfg = Release|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Release|x64.Build.0 = Release|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Release|x86.ActiveCfg = Release|Any CPU + {90DBF676-6543-4845-8A05-2CB5C9425E3F}.Release|x86.Build.0 = Release|Any CPU {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Debug|x64.ActiveCfg = Debug|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Debug|x64.Build.0 = Debug|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Debug|x86.ActiveCfg = Debug|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Debug|x86.Build.0 = Debug|Any CPU {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Release|Any CPU.Build.0 = Release|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Release|x64.ActiveCfg = Release|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Release|x64.Build.0 = Release|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Release|x86.ActiveCfg = Release|Any CPU + {82D37BD6-A8B7-439A-9998-1D38FF8F08BA}.Release|x86.Build.0 = Release|Any CPU {94375706-915F-42D8-B013-0B888F4DD4B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {94375706-915F-42D8-B013-0B888F4DD4B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Debug|x64.ActiveCfg = Debug|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Debug|x64.Build.0 = Debug|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Debug|x86.ActiveCfg = Debug|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Debug|x86.Build.0 = Debug|Any CPU {94375706-915F-42D8-B013-0B888F4DD4B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {94375706-915F-42D8-B013-0B888F4DD4B0}.Release|Any CPU.Build.0 = Release|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Release|x64.ActiveCfg = Release|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Release|x64.Build.0 = Release|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Release|x86.ActiveCfg = Release|Any CPU + {94375706-915F-42D8-B013-0B888F4DD4B0}.Release|x86.Build.0 = Release|Any CPU {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Debug|x64.Build.0 = Debug|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Debug|x86.Build.0 = Debug|Any CPU {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Release|Any CPU.Build.0 = Release|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Release|x64.ActiveCfg = Release|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Release|x64.Build.0 = Release|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Release|x86.ActiveCfg = Release|Any CPU + {5B3B245A-5916-4DE7-AF6D-C71C703E0E6E}.Release|x86.Build.0 = Release|Any CPU {90814AD6-B387-49A7-9657-020FB917BE1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90814AD6-B387-49A7-9657-020FB917BE1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Debug|x64.ActiveCfg = Debug|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Debug|x64.Build.0 = Debug|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Debug|x86.ActiveCfg = Debug|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Debug|x86.Build.0 = Debug|Any CPU {90814AD6-B387-49A7-9657-020FB917BE1A}.Release|Any CPU.ActiveCfg = Release|Any CPU {90814AD6-B387-49A7-9657-020FB917BE1A}.Release|Any CPU.Build.0 = Release|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Release|x64.ActiveCfg = Release|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Release|x64.Build.0 = Release|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Release|x86.ActiveCfg = Release|Any CPU + {90814AD6-B387-49A7-9657-020FB917BE1A}.Release|x86.Build.0 = Release|Any CPU {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Debug|x64.Build.0 = Debug|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Debug|x86.ActiveCfg = Debug|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Debug|x86.Build.0 = Debug|Any CPU {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Release|Any CPU.Build.0 = Release|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Release|x64.ActiveCfg = Release|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Release|x64.Build.0 = Release|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Release|x86.ActiveCfg = Release|Any CPU + {265F2A9D-E12A-4664-B5C8-C338566DD0FC}.Release|x86.Build.0 = Release|Any CPU {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Debug|x64.ActiveCfg = Debug|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Debug|x64.Build.0 = Debug|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Debug|x86.ActiveCfg = Debug|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Debug|x86.Build.0 = Debug|Any CPU {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Release|Any CPU.Build.0 = Release|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Release|x64.ActiveCfg = Release|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Release|x64.Build.0 = Release|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Release|x86.ActiveCfg = Release|Any CPU + {66171F39-F3B1-4714-BFDB-2040551D3D2E}.Release|x86.Build.0 = Release|Any CPU {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Debug|x64.ActiveCfg = Debug|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Debug|x64.Build.0 = Debug|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Debug|x86.Build.0 = Debug|Any CPU {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Release|Any CPU.Build.0 = Release|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Release|x64.ActiveCfg = Release|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Release|x64.Build.0 = Release|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Release|x86.ActiveCfg = Release|Any CPU + {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7}.Release|x86.Build.0 = Release|Any CPU {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Debug|x64.ActiveCfg = Debug|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Debug|x64.Build.0 = Debug|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Debug|x86.ActiveCfg = Debug|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Debug|x86.Build.0 = Debug|Any CPU {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Release|Any CPU.Build.0 = Release|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Release|x64.ActiveCfg = Release|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Release|x64.Build.0 = Release|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Release|x86.ActiveCfg = Release|Any CPU + {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF}.Release|x86.Build.0 = Release|Any CPU {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Debug|x64.ActiveCfg = Debug|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Debug|x64.Build.0 = Debug|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Debug|x86.Build.0 = Debug|Any CPU {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Release|Any CPU.ActiveCfg = Release|Any CPU {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Release|Any CPU.Build.0 = Release|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Release|x64.ActiveCfg = Release|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Release|x64.Build.0 = Release|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Release|x86.ActiveCfg = Release|Any CPU + {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3}.Release|x86.Build.0 = Release|Any CPU {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Debug|x64.Build.0 = Debug|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Debug|x86.ActiveCfg = Debug|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Debug|x86.Build.0 = Debug|Any CPU {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Release|Any CPU.Build.0 = Release|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Release|x64.ActiveCfg = Release|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Release|x64.Build.0 = Release|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Release|x86.ActiveCfg = Release|Any CPU + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205}.Release|x86.Build.0 = Release|Any CPU {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Debug|x64.ActiveCfg = Debug|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Debug|x64.Build.0 = Debug|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Debug|x86.ActiveCfg = Debug|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Debug|x86.Build.0 = Debug|Any CPU {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Release|Any CPU.ActiveCfg = Release|Any CPU {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Release|Any CPU.Build.0 = Release|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Release|x64.ActiveCfg = Release|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Release|x64.Build.0 = Release|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Release|x86.ActiveCfg = Release|Any CPU + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837}.Release|x86.Build.0 = Release|Any CPU {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Debug|x64.ActiveCfg = Debug|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Debug|x64.Build.0 = Debug|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Debug|x86.ActiveCfg = Debug|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Debug|x86.Build.0 = Debug|Any CPU {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Release|Any CPU.Build.0 = Release|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Release|x64.ActiveCfg = Release|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Release|x64.Build.0 = Release|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Release|x86.ActiveCfg = Release|Any CPU + {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2}.Release|x86.Build.0 = Release|Any CPU {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Debug|x64.ActiveCfg = Debug|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Debug|x64.Build.0 = Debug|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Debug|x86.ActiveCfg = Debug|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Debug|x86.Build.0 = Debug|Any CPU {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Release|Any CPU.Build.0 = Release|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Release|x64.ActiveCfg = Release|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Release|x64.Build.0 = Release|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Release|x86.ActiveCfg = Release|Any CPU + {F1F988EC-6C2D-4B69-BF67-663D2E051100}.Release|x86.Build.0 = Release|Any CPU {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Debug|x64.ActiveCfg = Debug|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Debug|x64.Build.0 = Debug|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Debug|x86.ActiveCfg = Debug|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Debug|x86.Build.0 = Debug|Any CPU {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Release|Any CPU.ActiveCfg = Release|Any CPU {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Release|Any CPU.Build.0 = Release|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Release|x64.ActiveCfg = Release|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Release|x64.Build.0 = Release|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Release|x86.ActiveCfg = Release|Any CPU + {1FC80B87-BC1B-416F-9D3A-47BE111C075D}.Release|x86.Build.0 = Release|Any CPU {94933E00-C975-4C62-A596-EE9582030BD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {94933E00-C975-4C62-A596-EE9582030BD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Debug|x64.Build.0 = Debug|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Debug|x86.ActiveCfg = Debug|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Debug|x86.Build.0 = Debug|Any CPU {94933E00-C975-4C62-A596-EE9582030BD0}.Release|Any CPU.ActiveCfg = Release|Any CPU {94933E00-C975-4C62-A596-EE9582030BD0}.Release|Any CPU.Build.0 = Release|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Release|x64.ActiveCfg = Release|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Release|x64.Build.0 = Release|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Release|x86.ActiveCfg = Release|Any CPU + {94933E00-C975-4C62-A596-EE9582030BD0}.Release|x86.Build.0 = Release|Any CPU {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Debug|x64.ActiveCfg = Debug|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Debug|x64.Build.0 = Debug|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Debug|x86.ActiveCfg = Debug|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Debug|x86.Build.0 = Debug|Any CPU {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Release|Any CPU.Build.0 = Release|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Release|x64.ActiveCfg = Release|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Release|x64.Build.0 = Release|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Release|x86.ActiveCfg = Release|Any CPU + {0F8B0D00-BC20-4FFC-A7C5-88017A3C09A9}.Release|x86.Build.0 = Release|Any CPU {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Debug|x64.ActiveCfg = Debug|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Debug|x64.Build.0 = Debug|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Debug|x86.ActiveCfg = Debug|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Debug|x86.Build.0 = Debug|Any CPU {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Release|Any CPU.ActiveCfg = Release|Any CPU {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Release|Any CPU.Build.0 = Release|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Release|x64.ActiveCfg = Release|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Release|x64.Build.0 = Release|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Release|x86.ActiveCfg = Release|Any CPU + {6780EF15-C7DF-4D44-82F6-1B98A05B82B7}.Release|x86.Build.0 = Release|Any CPU {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Debug|x64.ActiveCfg = Debug|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Debug|x64.Build.0 = Debug|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Debug|x86.ActiveCfg = Debug|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Debug|x86.Build.0 = Debug|Any CPU {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Release|Any CPU.Build.0 = Release|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Release|x64.ActiveCfg = Release|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Release|x64.Build.0 = Release|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Release|x86.ActiveCfg = Release|Any CPU + {A58518A6-7E40-4482-AFD4-4DB7E21FF27C}.Release|x86.Build.0 = Release|Any CPU {080201E0-7712-4A50-A193-98A562030938}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {080201E0-7712-4A50-A193-98A562030938}.Debug|Any CPU.Build.0 = Debug|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Debug|x64.ActiveCfg = Debug|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Debug|x64.Build.0 = Debug|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Debug|x86.ActiveCfg = Debug|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Debug|x86.Build.0 = Debug|Any CPU {080201E0-7712-4A50-A193-98A562030938}.Release|Any CPU.ActiveCfg = Release|Any CPU {080201E0-7712-4A50-A193-98A562030938}.Release|Any CPU.Build.0 = Release|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Release|x64.ActiveCfg = Release|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Release|x64.Build.0 = Release|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Release|x86.ActiveCfg = Release|Any CPU + {080201E0-7712-4A50-A193-98A562030938}.Release|x86.Build.0 = Release|Any CPU {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Debug|x64.ActiveCfg = Debug|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Debug|x64.Build.0 = Debug|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Debug|x86.ActiveCfg = Debug|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Debug|x86.Build.0 = Debug|Any CPU {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Release|Any CPU.ActiveCfg = Release|Any CPU {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Release|Any CPU.Build.0 = Release|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Release|x64.ActiveCfg = Release|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Release|x64.Build.0 = Release|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Release|x86.ActiveCfg = Release|Any CPU + {4F746914-FBD4-4AE8-A22F-C1745E21515B}.Release|x86.Build.0 = Release|Any CPU {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Debug|x64.ActiveCfg = Debug|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Debug|x64.Build.0 = Debug|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Debug|x86.ActiveCfg = Debug|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Debug|x86.Build.0 = Debug|Any CPU {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Release|Any CPU.Build.0 = Release|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Release|x64.ActiveCfg = Release|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Release|x64.Build.0 = Release|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Release|x86.ActiveCfg = Release|Any CPU + {9AF5B0F0-DA63-4694-98B0-5496A78EB8CB}.Release|x86.Build.0 = Release|Any CPU {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Debug|x64.ActiveCfg = Debug|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Debug|x64.Build.0 = Debug|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Debug|x86.ActiveCfg = Debug|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Debug|x86.Build.0 = Debug|Any CPU {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Release|Any CPU.ActiveCfg = Release|Any CPU {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Release|Any CPU.Build.0 = Release|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Release|x64.ActiveCfg = Release|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Release|x64.Build.0 = Release|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Release|x86.ActiveCfg = Release|Any CPU + {DFBA72E3-FB45-4D7C-A1DE-993D984E7034}.Release|x86.Build.0 = Release|Any CPU {2691FC24-086E-417A-84EE-11C481308D4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2691FC24-086E-417A-84EE-11C481308D4C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Debug|x64.ActiveCfg = Debug|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Debug|x64.Build.0 = Debug|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Debug|x86.ActiveCfg = Debug|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Debug|x86.Build.0 = Debug|Any CPU {2691FC24-086E-417A-84EE-11C481308D4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {2691FC24-086E-417A-84EE-11C481308D4C}.Release|Any CPU.Build.0 = Release|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Release|x64.ActiveCfg = Release|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Release|x64.Build.0 = Release|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Release|x86.ActiveCfg = Release|Any CPU + {2691FC24-086E-417A-84EE-11C481308D4C}.Release|x86.Build.0 = Release|Any CPU {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Debug|x64.ActiveCfg = Debug|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Debug|x64.Build.0 = Debug|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Debug|x86.ActiveCfg = Debug|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Debug|x86.Build.0 = Debug|Any CPU {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Release|Any CPU.ActiveCfg = Release|Any CPU {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Release|Any CPU.Build.0 = Release|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Release|x64.ActiveCfg = Release|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Release|x64.Build.0 = Release|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Release|x86.ActiveCfg = Release|Any CPU + {9539BC5F-7B48-4E69-8603-703EA84CFE87}.Release|x86.Build.0 = Release|Any CPU {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Debug|x64.ActiveCfg = Debug|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Debug|x64.Build.0 = Debug|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Debug|x86.ActiveCfg = Debug|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Debug|x86.Build.0 = Debug|Any CPU {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Release|Any CPU.Build.0 = Release|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Release|x64.ActiveCfg = Release|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Release|x64.Build.0 = Release|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Release|x86.ActiveCfg = Release|Any CPU + {697BA3B9-7180-4CE7-98BA-A480770D58AF}.Release|x86.Build.0 = Release|Any CPU {0EB38D32-4706-4C70-8685-4A770322346B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0EB38D32-4706-4C70-8685-4A770322346B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Debug|x64.ActiveCfg = Debug|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Debug|x64.Build.0 = Debug|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Debug|x86.ActiveCfg = Debug|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Debug|x86.Build.0 = Debug|Any CPU {0EB38D32-4706-4C70-8685-4A770322346B}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EB38D32-4706-4C70-8685-4A770322346B}.Release|Any CPU.Build.0 = Release|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Release|x64.ActiveCfg = Release|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Release|x64.Build.0 = Release|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Release|x86.ActiveCfg = Release|Any CPU + {0EB38D32-4706-4C70-8685-4A770322346B}.Release|x86.Build.0 = Release|Any CPU {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Debug|x64.ActiveCfg = Debug|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Debug|x64.Build.0 = Debug|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Debug|x86.ActiveCfg = Debug|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Debug|x86.Build.0 = Debug|Any CPU {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Release|Any CPU.Build.0 = Release|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Release|x64.ActiveCfg = Release|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Release|x64.Build.0 = Release|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Release|x86.ActiveCfg = Release|Any CPU + {3C3B3D15-789A-40C4-AEC0-0B149194BDFA}.Release|x86.Build.0 = Release|Any CPU {A01D6EFA-196F-4790-AE91-0976D747282C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A01D6EFA-196F-4790-AE91-0976D747282C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Debug|x64.ActiveCfg = Debug|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Debug|x64.Build.0 = Debug|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Debug|x86.ActiveCfg = Debug|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Debug|x86.Build.0 = Debug|Any CPU {A01D6EFA-196F-4790-AE91-0976D747282C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A01D6EFA-196F-4790-AE91-0976D747282C}.Release|Any CPU.Build.0 = Release|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Release|x64.ActiveCfg = Release|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Release|x64.Build.0 = Release|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Release|x86.ActiveCfg = Release|Any CPU + {A01D6EFA-196F-4790-AE91-0976D747282C}.Release|x86.Build.0 = Release|Any CPU {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Debug|x64.ActiveCfg = Debug|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Debug|x64.Build.0 = Debug|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Debug|x86.ActiveCfg = Debug|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Debug|x86.Build.0 = Debug|Any CPU {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Release|Any CPU.ActiveCfg = Release|Any CPU {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Release|Any CPU.Build.0 = Release|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Release|x64.ActiveCfg = Release|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Release|x64.Build.0 = Release|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Release|x86.ActiveCfg = Release|Any CPU + {4E5EC963-1D95-4962-8201-F4D84EA26ED2}.Release|x86.Build.0 = Release|Any CPU {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Debug|x64.ActiveCfg = Debug|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Debug|x64.Build.0 = Debug|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Debug|x86.ActiveCfg = Debug|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Debug|x86.Build.0 = Debug|Any CPU {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Release|Any CPU.Build.0 = Release|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Release|x64.ActiveCfg = Release|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Release|x64.Build.0 = Release|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Release|x86.ActiveCfg = Release|Any CPU + {DD2F361F-94AB-4494-A8D1-E69AB68F2FD6}.Release|x86.Build.0 = Release|Any CPU {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Debug|x64.ActiveCfg = Debug|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Debug|x64.Build.0 = Debug|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Debug|x86.ActiveCfg = Debug|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Debug|x86.Build.0 = Debug|Any CPU {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Release|Any CPU.ActiveCfg = Release|Any CPU {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Release|Any CPU.Build.0 = Release|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Release|x64.ActiveCfg = Release|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Release|x64.Build.0 = Release|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Release|x86.ActiveCfg = Release|Any CPU + {B096AA61-812C-429B-92FF-0C3C7F66F05E}.Release|x86.Build.0 = Release|Any CPU {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Debug|x64.ActiveCfg = Debug|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Debug|x64.Build.0 = Debug|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Debug|x86.ActiveCfg = Debug|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Debug|x86.Build.0 = Debug|Any CPU {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Release|Any CPU.ActiveCfg = Release|Any CPU {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Release|Any CPU.Build.0 = Release|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Release|x64.ActiveCfg = Release|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Release|x64.Build.0 = Release|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Release|x86.ActiveCfg = Release|Any CPU + {B3315091-13D9-4A5C-B4B0-CAF2AF74F371}.Release|x86.Build.0 = Release|Any CPU {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Debug|x64.ActiveCfg = Debug|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Debug|x64.Build.0 = Debug|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Debug|x86.ActiveCfg = Debug|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Debug|x86.Build.0 = Debug|Any CPU {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Release|Any CPU.ActiveCfg = Release|Any CPU {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Release|Any CPU.Build.0 = Release|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Release|x64.ActiveCfg = Release|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Release|x64.Build.0 = Release|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Release|x86.ActiveCfg = Release|Any CPU + {EC1576F4-261B-4040-95D2-9BED62AD48EF}.Release|x86.Build.0 = Release|Any CPU {A3768550-A438-4E87-9547-FBA625FB8353}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A3768550-A438-4E87-9547-FBA625FB8353}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Debug|x64.ActiveCfg = Debug|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Debug|x64.Build.0 = Debug|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Debug|x86.ActiveCfg = Debug|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Debug|x86.Build.0 = Debug|Any CPU {A3768550-A438-4E87-9547-FBA625FB8353}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3768550-A438-4E87-9547-FBA625FB8353}.Release|Any CPU.Build.0 = Release|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Release|x64.ActiveCfg = Release|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Release|x64.Build.0 = Release|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Release|x86.ActiveCfg = Release|Any CPU + {A3768550-A438-4E87-9547-FBA625FB8353}.Release|x86.Build.0 = Release|Any CPU {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Debug|x64.ActiveCfg = Debug|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Debug|x64.Build.0 = Debug|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Debug|x86.ActiveCfg = Debug|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Debug|x86.Build.0 = Debug|Any CPU {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Release|Any CPU.ActiveCfg = Release|Any CPU {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Release|Any CPU.Build.0 = Release|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Release|x64.ActiveCfg = Release|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Release|x64.Build.0 = Release|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Release|x86.ActiveCfg = Release|Any CPU + {088072CE-7129-4A2B-8A69-E4A2CFB39EDF}.Release|x86.Build.0 = Release|Any CPU {9E283327-123E-4495-9142-6A27F55282D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9E283327-123E-4495-9142-6A27F55282D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Debug|x64.ActiveCfg = Debug|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Debug|x64.Build.0 = Debug|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Debug|x86.ActiveCfg = Debug|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Debug|x86.Build.0 = Debug|Any CPU {9E283327-123E-4495-9142-6A27F55282D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {9E283327-123E-4495-9142-6A27F55282D5}.Release|Any CPU.Build.0 = Release|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Release|x64.ActiveCfg = Release|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Release|x64.Build.0 = Release|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Release|x86.ActiveCfg = Release|Any CPU + {9E283327-123E-4495-9142-6A27F55282D5}.Release|x86.Build.0 = Release|Any CPU {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Debug|x64.ActiveCfg = Debug|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Debug|x64.Build.0 = Debug|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Debug|x86.ActiveCfg = Debug|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Debug|x86.Build.0 = Debug|Any CPU {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Release|Any CPU.ActiveCfg = Release|Any CPU {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Release|Any CPU.Build.0 = Release|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Release|x64.ActiveCfg = Release|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Release|x64.Build.0 = Release|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Release|x86.ActiveCfg = Release|Any CPU + {5FD51DF6-E318-4A52-BECE-B95AFF9AF762}.Release|x86.Build.0 = Release|Any CPU {58207E90-49F7-4241-BA38-B4997E04E667}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58207E90-49F7-4241-BA38-B4997E04E667}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Debug|x64.ActiveCfg = Debug|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Debug|x64.Build.0 = Debug|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Debug|x86.ActiveCfg = Debug|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Debug|x86.Build.0 = Debug|Any CPU {58207E90-49F7-4241-BA38-B4997E04E667}.Release|Any CPU.ActiveCfg = Release|Any CPU {58207E90-49F7-4241-BA38-B4997E04E667}.Release|Any CPU.Build.0 = Release|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Release|x64.ActiveCfg = Release|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Release|x64.Build.0 = Release|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Release|x86.ActiveCfg = Release|Any CPU + {58207E90-49F7-4241-BA38-B4997E04E667}.Release|x86.Build.0 = Release|Any CPU {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Debug|x64.ActiveCfg = Debug|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Debug|x64.Build.0 = Debug|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Debug|x86.Build.0 = Debug|Any CPU {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Release|Any CPU.ActiveCfg = Release|Any CPU {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Release|Any CPU.Build.0 = Release|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Release|x64.ActiveCfg = Release|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Release|x64.Build.0 = Release|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Release|x86.ActiveCfg = Release|Any CPU + {9B7A791A-725E-40E4-A885-F1FFAFE88612}.Release|x86.Build.0 = Release|Any CPU {6C2391E4-15F3-40CF-8C16-787066E8017C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6C2391E4-15F3-40CF-8C16-787066E8017C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Debug|x64.Build.0 = Debug|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Debug|x86.Build.0 = Debug|Any CPU {6C2391E4-15F3-40CF-8C16-787066E8017C}.Release|Any CPU.ActiveCfg = Release|Any CPU {6C2391E4-15F3-40CF-8C16-787066E8017C}.Release|Any CPU.Build.0 = Release|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Release|x64.ActiveCfg = Release|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Release|x64.Build.0 = Release|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Release|x86.ActiveCfg = Release|Any CPU + {6C2391E4-15F3-40CF-8C16-787066E8017C}.Release|x86.Build.0 = Release|Any CPU {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Debug|x64.ActiveCfg = Debug|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Debug|x64.Build.0 = Debug|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Debug|x86.ActiveCfg = Debug|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Debug|x86.Build.0 = Debug|Any CPU {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Release|Any CPU.ActiveCfg = Release|Any CPU {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Release|Any CPU.Build.0 = Release|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Release|x64.ActiveCfg = Release|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Release|x64.Build.0 = Release|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Release|x86.ActiveCfg = Release|Any CPU + {930FEF59-7A4C-49DA-B522-1D7C8D56F58E}.Release|x86.Build.0 = Release|Any CPU {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Debug|x64.ActiveCfg = Debug|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Debug|x64.Build.0 = Debug|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Debug|x86.ActiveCfg = Debug|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Debug|x86.Build.0 = Debug|Any CPU {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Release|Any CPU.ActiveCfg = Release|Any CPU {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Release|Any CPU.Build.0 = Release|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Release|x64.ActiveCfg = Release|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Release|x64.Build.0 = Release|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Release|x86.ActiveCfg = Release|Any CPU + {4DC2FB97-A1C0-4085-932B-7D87D1C2CCDE}.Release|x86.Build.0 = Release|Any CPU {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Debug|Any CPU.Build.0 = Debug|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Debug|x64.ActiveCfg = Debug|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Debug|x64.Build.0 = Debug|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Debug|x86.ActiveCfg = Debug|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Debug|x86.Build.0 = Debug|Any CPU {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Release|Any CPU.ActiveCfg = Release|Any CPU {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Release|Any CPU.Build.0 = Release|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Release|x64.ActiveCfg = Release|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Release|x64.Build.0 = Release|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Release|x86.ActiveCfg = Release|Any CPU + {060BF9A0-030F-4C50-91F8-76DAC3F43636}.Release|x86.Build.0 = Release|Any CPU {F15A392F-762C-4CFB-92BF-E76572E332CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F15A392F-762C-4CFB-92BF-E76572E332CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Debug|x64.ActiveCfg = Debug|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Debug|x64.Build.0 = Debug|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Debug|x86.ActiveCfg = Debug|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Debug|x86.Build.0 = Debug|Any CPU {F15A392F-762C-4CFB-92BF-E76572E332CD}.Release|Any CPU.ActiveCfg = Release|Any CPU {F15A392F-762C-4CFB-92BF-E76572E332CD}.Release|Any CPU.Build.0 = Release|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Release|x64.ActiveCfg = Release|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Release|x64.Build.0 = Release|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Release|x86.ActiveCfg = Release|Any CPU + {F15A392F-762C-4CFB-92BF-E76572E332CD}.Release|x86.Build.0 = Release|Any CPU {E1F3468D-208F-49B8-966B-76C807CE01AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E1F3468D-208F-49B8-966B-76C807CE01AD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Debug|x64.ActiveCfg = Debug|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Debug|x64.Build.0 = Debug|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Debug|x86.ActiveCfg = Debug|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Debug|x86.Build.0 = Debug|Any CPU {E1F3468D-208F-49B8-966B-76C807CE01AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {E1F3468D-208F-49B8-966B-76C807CE01AD}.Release|Any CPU.Build.0 = Release|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Release|x64.ActiveCfg = Release|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Release|x64.Build.0 = Release|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Release|x86.ActiveCfg = Release|Any CPU + {E1F3468D-208F-49B8-966B-76C807CE01AD}.Release|x86.Build.0 = Release|Any CPU {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Debug|x64.ActiveCfg = Debug|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Debug|x64.Build.0 = Debug|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Debug|x86.ActiveCfg = Debug|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Debug|x86.Build.0 = Debug|Any CPU {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Release|Any CPU.Build.0 = Release|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Release|x64.ActiveCfg = Release|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Release|x64.Build.0 = Release|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Release|x86.ActiveCfg = Release|Any CPU + {89E47DE5-D2EA-4666-8E1F-CEE8C80303C3}.Release|x86.Build.0 = Release|Any CPU {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Debug|x64.ActiveCfg = Debug|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Debug|x64.Build.0 = Debug|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Debug|x86.ActiveCfg = Debug|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Debug|x86.Build.0 = Debug|Any CPU {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Release|Any CPU.Build.0 = Release|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Release|x64.ActiveCfg = Release|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Release|x64.Build.0 = Release|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Release|x86.ActiveCfg = Release|Any CPU + {0EAD75CE-B86D-4F52-8B8B-D49F4F4CED29}.Release|x86.Build.0 = Release|Any CPU {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Debug|x64.ActiveCfg = Debug|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Debug|x64.Build.0 = Debug|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Debug|x86.ActiveCfg = Debug|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Debug|x86.Build.0 = Debug|Any CPU {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Release|Any CPU.ActiveCfg = Release|Any CPU {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Release|Any CPU.Build.0 = Release|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Release|x64.ActiveCfg = Release|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Release|x64.Build.0 = Release|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Release|x86.ActiveCfg = Release|Any CPU + {58271805-C59E-45FB-9D7B-CBAFC7BDF66C}.Release|x86.Build.0 = Release|Any CPU {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Debug|x64.ActiveCfg = Debug|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Debug|x64.Build.0 = Debug|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Debug|x86.ActiveCfg = Debug|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Debug|x86.Build.0 = Debug|Any CPU {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Release|Any CPU.Build.0 = Release|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Release|x64.ActiveCfg = Release|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Release|x64.Build.0 = Release|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Release|x86.ActiveCfg = Release|Any CPU + {DE5EC147-0305-459E-9FDF-CCE514A239D1}.Release|x86.Build.0 = Release|Any CPU {DD8A60AD-D7A9-438F-985E-083132466AC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD8A60AD-D7A9-438F-985E-083132466AC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Debug|x64.ActiveCfg = Debug|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Debug|x64.Build.0 = Debug|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Debug|x86.ActiveCfg = Debug|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Debug|x86.Build.0 = Debug|Any CPU {DD8A60AD-D7A9-438F-985E-083132466AC6}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD8A60AD-D7A9-438F-985E-083132466AC6}.Release|Any CPU.Build.0 = Release|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Release|x64.ActiveCfg = Release|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Release|x64.Build.0 = Release|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Release|x86.ActiveCfg = Release|Any CPU + {DD8A60AD-D7A9-438F-985E-083132466AC6}.Release|x86.Build.0 = Release|Any CPU {2F665879-8865-4765-A03C-FFE2D0D6E734}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2F665879-8865-4765-A03C-FFE2D0D6E734}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Debug|x64.ActiveCfg = Debug|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Debug|x64.Build.0 = Debug|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Debug|x86.ActiveCfg = Debug|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Debug|x86.Build.0 = Debug|Any CPU {2F665879-8865-4765-A03C-FFE2D0D6E734}.Release|Any CPU.ActiveCfg = Release|Any CPU {2F665879-8865-4765-A03C-FFE2D0D6E734}.Release|Any CPU.Build.0 = Release|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Release|x64.ActiveCfg = Release|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Release|x64.Build.0 = Release|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Release|x86.ActiveCfg = Release|Any CPU + {2F665879-8865-4765-A03C-FFE2D0D6E734}.Release|x86.Build.0 = Release|Any CPU {37896C82-24DF-4FED-8A44-537910360A40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {37896C82-24DF-4FED-8A44-537910360A40}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Debug|x64.ActiveCfg = Debug|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Debug|x64.Build.0 = Debug|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Debug|x86.ActiveCfg = Debug|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Debug|x86.Build.0 = Debug|Any CPU {37896C82-24DF-4FED-8A44-537910360A40}.Release|Any CPU.ActiveCfg = Release|Any CPU {37896C82-24DF-4FED-8A44-537910360A40}.Release|Any CPU.Build.0 = Release|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Release|x64.ActiveCfg = Release|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Release|x64.Build.0 = Release|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Release|x86.ActiveCfg = Release|Any CPU + {37896C82-24DF-4FED-8A44-537910360A40}.Release|x86.Build.0 = Release|Any CPU {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Debug|x64.ActiveCfg = Debug|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Debug|x64.Build.0 = Debug|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Debug|x86.ActiveCfg = Debug|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Debug|x86.Build.0 = Debug|Any CPU {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Release|Any CPU.Build.0 = Release|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Release|x64.ActiveCfg = Release|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Release|x64.Build.0 = Release|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Release|x86.ActiveCfg = Release|Any CPU + {B4533FEF-E9CF-4E3B-AAB6-DC72C5EB90DD}.Release|x86.Build.0 = Release|Any CPU {6878680C-37EA-4715-BDF0-7E1143ED0998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6878680C-37EA-4715-BDF0-7E1143ED0998}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Debug|x64.ActiveCfg = Debug|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Debug|x64.Build.0 = Debug|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Debug|x86.ActiveCfg = Debug|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Debug|x86.Build.0 = Debug|Any CPU {6878680C-37EA-4715-BDF0-7E1143ED0998}.Release|Any CPU.ActiveCfg = Release|Any CPU {6878680C-37EA-4715-BDF0-7E1143ED0998}.Release|Any CPU.Build.0 = Release|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Release|x64.ActiveCfg = Release|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Release|x64.Build.0 = Release|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Release|x86.ActiveCfg = Release|Any CPU + {6878680C-37EA-4715-BDF0-7E1143ED0998}.Release|x86.Build.0 = Release|Any CPU {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Debug|x64.ActiveCfg = Debug|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Debug|x64.Build.0 = Debug|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Debug|x86.ActiveCfg = Debug|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Debug|x86.Build.0 = Debug|Any CPU {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Release|Any CPU.ActiveCfg = Release|Any CPU {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Release|Any CPU.Build.0 = Release|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Release|x64.ActiveCfg = Release|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Release|x64.Build.0 = Release|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Release|x86.ActiveCfg = Release|Any CPU + {B9817971-4FA0-4B25-9482-77B5A3A971DC}.Release|x86.Build.0 = Release|Any CPU {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Debug|x64.ActiveCfg = Debug|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Debug|x64.Build.0 = Debug|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Debug|x86.ActiveCfg = Debug|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Debug|x86.Build.0 = Debug|Any CPU {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Release|Any CPU.ActiveCfg = Release|Any CPU {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Release|Any CPU.Build.0 = Release|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Release|x64.ActiveCfg = Release|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Release|x64.Build.0 = Release|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Release|x86.ActiveCfg = Release|Any CPU + {8F1382A8-7B0F-4A8D-AC0A-1F6C293C6847}.Release|x86.Build.0 = Release|Any CPU {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Debug|x64.ActiveCfg = Debug|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Debug|x64.Build.0 = Debug|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Debug|x86.ActiveCfg = Debug|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Debug|x86.Build.0 = Debug|Any CPU {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Release|Any CPU.Build.0 = Release|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Release|x64.ActiveCfg = Release|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Release|x64.Build.0 = Release|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Release|x86.ActiveCfg = Release|Any CPU + {B0D0BAA9-B6B2-49A4-B08C-F16D7EE65570}.Release|x86.Build.0 = Release|Any CPU {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Debug|x64.Build.0 = Debug|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Debug|x86.Build.0 = Debug|Any CPU {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Release|Any CPU.Build.0 = Release|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Release|x64.ActiveCfg = Release|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Release|x64.Build.0 = Release|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Release|x86.ActiveCfg = Release|Any CPU + {9DABFD9F-EC4C-42A1-B744-00F3E0AFF2B8}.Release|x86.Build.0 = Release|Any CPU {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Debug|x64.ActiveCfg = Debug|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Debug|x64.Build.0 = Debug|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Debug|x86.ActiveCfg = Debug|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Debug|x86.Build.0 = Debug|Any CPU {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Release|Any CPU.Build.0 = Release|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Release|x64.ActiveCfg = Release|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Release|x64.Build.0 = Release|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Release|x86.ActiveCfg = Release|Any CPU + {FB5ABFC7-A493-4F10-B4C9-3E7E44EFC9B9}.Release|x86.Build.0 = Release|Any CPU {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Debug|x64.ActiveCfg = Debug|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Debug|x64.Build.0 = Debug|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Debug|x86.ActiveCfg = Debug|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Debug|x86.Build.0 = Debug|Any CPU {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Release|Any CPU.ActiveCfg = Release|Any CPU {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Release|Any CPU.Build.0 = Release|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Release|x64.ActiveCfg = Release|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Release|x64.Build.0 = Release|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Release|x86.ActiveCfg = Release|Any CPU + {E56B344E-3F12-4FF8-B46C-9D87A5512E72}.Release|x86.Build.0 = Release|Any CPU {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Debug|x64.ActiveCfg = Debug|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Debug|x64.Build.0 = Debug|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Debug|x86.ActiveCfg = Debug|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Debug|x86.Build.0 = Debug|Any CPU {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Release|Any CPU.ActiveCfg = Release|Any CPU {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Release|Any CPU.Build.0 = Release|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Release|x64.ActiveCfg = Release|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Release|x64.Build.0 = Release|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Release|x86.ActiveCfg = Release|Any CPU + {EC0C2649-5F1C-4AF6-BC4C-53D1FF9A1BD7}.Release|x86.Build.0 = Release|Any CPU {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Debug|x64.ActiveCfg = Debug|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Debug|x64.Build.0 = Debug|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Debug|x86.ActiveCfg = Debug|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Debug|x86.Build.0 = Debug|Any CPU {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Release|Any CPU.ActiveCfg = Release|Any CPU {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Release|Any CPU.Build.0 = Release|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Release|x64.ActiveCfg = Release|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Release|x64.Build.0 = Release|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Release|x86.ActiveCfg = Release|Any CPU + {C5C81D9D-27CD-4F23-B660-903AFDDD7B71}.Release|x86.Build.0 = Release|Any CPU {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Debug|x64.ActiveCfg = Debug|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Debug|x64.Build.0 = Debug|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Debug|x86.ActiveCfg = Debug|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Debug|x86.Build.0 = Debug|Any CPU {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Release|Any CPU.Build.0 = Release|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Release|x64.ActiveCfg = Release|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Release|x64.Build.0 = Release|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Release|x86.ActiveCfg = Release|Any CPU + {C3309B6A-0512-4C93-B472-CF6A10ED8682}.Release|x86.Build.0 = Release|Any CPU {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Debug|Any CPU.Build.0 = Debug|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Debug|x64.ActiveCfg = Debug|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Debug|x64.Build.0 = Debug|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Debug|x86.ActiveCfg = Debug|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Debug|x86.Build.0 = Debug|Any CPU {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Release|Any CPU.ActiveCfg = Release|Any CPU {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Release|Any CPU.Build.0 = Release|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Release|x64.ActiveCfg = Release|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Release|x64.Build.0 = Release|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Release|x86.ActiveCfg = Release|Any CPU + {629A1C79-7DE4-4EFC-8D34-ED1809AD5888}.Release|x86.Build.0 = Release|Any CPU {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Debug|x64.ActiveCfg = Debug|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Debug|x64.Build.0 = Debug|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Debug|x86.ActiveCfg = Debug|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Debug|x86.Build.0 = Debug|Any CPU {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Release|Any CPU.Build.0 = Release|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Release|x64.ActiveCfg = Release|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Release|x64.Build.0 = Release|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Release|x86.ActiveCfg = Release|Any CPU + {40145A2C-6E76-4069-99D8-FFF3CF0CF3BC}.Release|x86.Build.0 = Release|Any CPU {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Debug|x64.ActiveCfg = Debug|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Debug|x64.Build.0 = Debug|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Debug|x86.ActiveCfg = Debug|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Debug|x86.Build.0 = Debug|Any CPU {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Release|Any CPU.Build.0 = Release|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Release|x64.ActiveCfg = Release|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Release|x64.Build.0 = Release|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Release|x86.ActiveCfg = Release|Any CPU + {0E72DA6A-5D09-45F5-AD77-39A92B00A9CF}.Release|x86.Build.0 = Release|Any CPU {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Debug|x64.ActiveCfg = Debug|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Debug|x64.Build.0 = Debug|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Debug|x86.ActiveCfg = Debug|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Debug|x86.Build.0 = Debug|Any CPU {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Release|Any CPU.ActiveCfg = Release|Any CPU {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Release|Any CPU.Build.0 = Release|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Release|x64.ActiveCfg = Release|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Release|x64.Build.0 = Release|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Release|x86.ActiveCfg = Release|Any CPU + {98A129AB-0FF8-4B07-8516-DA23AB5C8735}.Release|x86.Build.0 = Release|Any CPU {B8972679-FDC1-4998-A18D-E501EFFA467D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B8972679-FDC1-4998-A18D-E501EFFA467D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Debug|x64.ActiveCfg = Debug|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Debug|x64.Build.0 = Debug|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Debug|x86.ActiveCfg = Debug|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Debug|x86.Build.0 = Debug|Any CPU {B8972679-FDC1-4998-A18D-E501EFFA467D}.Release|Any CPU.ActiveCfg = Release|Any CPU {B8972679-FDC1-4998-A18D-E501EFFA467D}.Release|Any CPU.Build.0 = Release|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Release|x64.ActiveCfg = Release|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Release|x64.Build.0 = Release|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Release|x86.ActiveCfg = Release|Any CPU + {B8972679-FDC1-4998-A18D-E501EFFA467D}.Release|x86.Build.0 = Release|Any CPU {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Debug|x64.ActiveCfg = Debug|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Debug|x64.Build.0 = Debug|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Debug|x86.ActiveCfg = Debug|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Debug|x86.Build.0 = Debug|Any CPU {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Release|Any CPU.Build.0 = Release|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Release|x64.ActiveCfg = Release|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Release|x64.Build.0 = Release|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Release|x86.ActiveCfg = Release|Any CPU + {6CDA732B-10A8-441E-A243-F83BA89ED1F6}.Release|x86.Build.0 = Release|Any CPU {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Debug|x64.Build.0 = Debug|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Debug|x86.ActiveCfg = Debug|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Debug|x86.Build.0 = Debug|Any CPU {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Release|Any CPU.Build.0 = Release|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Release|x64.ActiveCfg = Release|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Release|x64.Build.0 = Release|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Release|x86.ActiveCfg = Release|Any CPU + {D8C0C69F-EF4F-4883-972E-C2E6B6A9566E}.Release|x86.Build.0 = Release|Any CPU {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Debug|x64.Build.0 = Debug|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Debug|x86.ActiveCfg = Debug|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Debug|x86.Build.0 = Debug|Any CPU {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Release|Any CPU.Build.0 = Release|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Release|x64.ActiveCfg = Release|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Release|x64.Build.0 = Release|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Release|x86.ActiveCfg = Release|Any CPU + {90AA75BA-134C-4E62-B3A5-E7DB05DF12FC}.Release|x86.Build.0 = Release|Any CPU {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Debug|x64.ActiveCfg = Debug|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Debug|x64.Build.0 = Debug|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Debug|x86.ActiveCfg = Debug|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Debug|x86.Build.0 = Debug|Any CPU {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Release|Any CPU.Build.0 = Release|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Release|x64.ActiveCfg = Release|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Release|x64.Build.0 = Release|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Release|x86.ActiveCfg = Release|Any CPU + {2BF08C83-C802-45A8-8219-FC77B3B9CB06}.Release|x86.Build.0 = Release|Any CPU {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Debug|x64.ActiveCfg = Debug|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Debug|x64.Build.0 = Debug|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Debug|x86.ActiveCfg = Debug|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Debug|x86.Build.0 = Debug|Any CPU {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Release|Any CPU.ActiveCfg = Release|Any CPU {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Release|Any CPU.Build.0 = Release|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Release|x64.ActiveCfg = Release|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Release|x64.Build.0 = Release|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Release|x86.ActiveCfg = Release|Any CPU + {81CB1F26-4C07-4B9F-A695-AB810B38E15B}.Release|x86.Build.0 = Release|Any CPU {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Debug|x64.ActiveCfg = Debug|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Debug|x64.Build.0 = Debug|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Debug|x86.ActiveCfg = Debug|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Debug|x86.Build.0 = Debug|Any CPU {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Release|Any CPU.ActiveCfg = Release|Any CPU {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Release|Any CPU.Build.0 = Release|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Release|x64.ActiveCfg = Release|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Release|x64.Build.0 = Release|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Release|x86.ActiveCfg = Release|Any CPU + {47A2307D-717C-4ABA-8FBD-9717B0C4CC8C}.Release|x86.Build.0 = Release|Any CPU {7DE4615E-0E42-4C72-8B63-AFE151321024}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7DE4615E-0E42-4C72-8B63-AFE151321024}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Debug|x64.ActiveCfg = Debug|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Debug|x64.Build.0 = Debug|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Debug|x86.ActiveCfg = Debug|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Debug|x86.Build.0 = Debug|Any CPU {7DE4615E-0E42-4C72-8B63-AFE151321024}.Release|Any CPU.ActiveCfg = Release|Any CPU {7DE4615E-0E42-4C72-8B63-AFE151321024}.Release|Any CPU.Build.0 = Release|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Release|x64.ActiveCfg = Release|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Release|x64.Build.0 = Release|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Release|x86.ActiveCfg = Release|Any CPU + {7DE4615E-0E42-4C72-8B63-AFE151321024}.Release|x86.Build.0 = Release|Any CPU {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Debug|x64.ActiveCfg = Debug|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Debug|x64.Build.0 = Debug|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Debug|x86.ActiveCfg = Debug|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Debug|x86.Build.0 = Debug|Any CPU {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Release|Any CPU.Build.0 = Release|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Release|x64.ActiveCfg = Release|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Release|x64.Build.0 = Release|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Release|x86.ActiveCfg = Release|Any CPU + {42EA49AE-5C87-4C75-83EF-964D4B24E9E9}.Release|x86.Build.0 = Release|Any CPU {75423717-B64A-4EAC-9762-CD17A2F60857}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {75423717-B64A-4EAC-9762-CD17A2F60857}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Debug|x64.ActiveCfg = Debug|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Debug|x64.Build.0 = Debug|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Debug|x86.ActiveCfg = Debug|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Debug|x86.Build.0 = Debug|Any CPU {75423717-B64A-4EAC-9762-CD17A2F60857}.Release|Any CPU.ActiveCfg = Release|Any CPU {75423717-B64A-4EAC-9762-CD17A2F60857}.Release|Any CPU.Build.0 = Release|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Release|x64.ActiveCfg = Release|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Release|x64.Build.0 = Release|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Release|x86.ActiveCfg = Release|Any CPU + {75423717-B64A-4EAC-9762-CD17A2F60857}.Release|x86.Build.0 = Release|Any CPU {687EFF77-3468-444D-A410-1B76E41E74FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {687EFF77-3468-444D-A410-1B76E41E74FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Debug|x64.Build.0 = Debug|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Debug|x86.ActiveCfg = Debug|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Debug|x86.Build.0 = Debug|Any CPU {687EFF77-3468-444D-A410-1B76E41E74FC}.Release|Any CPU.ActiveCfg = Release|Any CPU {687EFF77-3468-444D-A410-1B76E41E74FC}.Release|Any CPU.Build.0 = Release|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Release|x64.ActiveCfg = Release|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Release|x64.Build.0 = Release|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Release|x86.ActiveCfg = Release|Any CPU + {687EFF77-3468-444D-A410-1B76E41E74FC}.Release|x86.Build.0 = Release|Any CPU {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Debug|x64.ActiveCfg = Debug|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Debug|x64.Build.0 = Debug|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Debug|x86.ActiveCfg = Debug|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Debug|x86.Build.0 = Debug|Any CPU {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Release|Any CPU.ActiveCfg = Release|Any CPU {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Release|Any CPU.Build.0 = Release|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Release|x64.ActiveCfg = Release|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Release|x64.Build.0 = Release|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Release|x86.ActiveCfg = Release|Any CPU + {CC31DD38-B57D-4A71-9681-E9D7DDFB8909}.Release|x86.Build.0 = Release|Any CPU {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Debug|x64.ActiveCfg = Debug|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Debug|x64.Build.0 = Debug|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Debug|x86.ActiveCfg = Debug|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Debug|x86.Build.0 = Debug|Any CPU {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Release|Any CPU.ActiveCfg = Release|Any CPU {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Release|Any CPU.Build.0 = Release|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Release|x64.ActiveCfg = Release|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Release|x64.Build.0 = Release|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Release|x86.ActiveCfg = Release|Any CPU + {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF}.Release|x86.Build.0 = Release|Any CPU {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Debug|x64.ActiveCfg = Debug|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Debug|x64.Build.0 = Debug|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Debug|x86.ActiveCfg = Debug|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Debug|x86.Build.0 = Debug|Any CPU {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Release|Any CPU.ActiveCfg = Release|Any CPU {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Release|Any CPU.Build.0 = Release|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Release|x64.ActiveCfg = Release|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Release|x64.Build.0 = Release|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Release|x86.ActiveCfg = Release|Any CPU + {4879406D-8F0C-4EDF-A7EB-CB549E510E03}.Release|x86.Build.0 = Release|Any CPU {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Debug|x64.ActiveCfg = Debug|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Debug|x64.Build.0 = Debug|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Debug|x86.ActiveCfg = Debug|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Debug|x86.Build.0 = Debug|Any CPU {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Release|Any CPU.Build.0 = Release|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Release|x64.ActiveCfg = Release|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Release|x64.Build.0 = Release|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Release|x86.ActiveCfg = Release|Any CPU + {DE121B38-5563-463D-B4B0-0817E75F4DDB}.Release|x86.Build.0 = Release|Any CPU {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Debug|x64.ActiveCfg = Debug|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Debug|x64.Build.0 = Debug|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Debug|x86.ActiveCfg = Debug|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Debug|x86.Build.0 = Debug|Any CPU {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Release|Any CPU.Build.0 = Release|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Release|x64.ActiveCfg = Release|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Release|x64.Build.0 = Release|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Release|x86.ActiveCfg = Release|Any CPU + {391D26F2-FAFB-4113-9C80-4DA54BCE5D4A}.Release|x86.Build.0 = Release|Any CPU {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Debug|x64.ActiveCfg = Debug|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Debug|x64.Build.0 = Debug|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Debug|x86.ActiveCfg = Debug|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Debug|x86.Build.0 = Debug|Any CPU {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Release|Any CPU.ActiveCfg = Release|Any CPU {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Release|Any CPU.Build.0 = Release|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Release|x64.ActiveCfg = Release|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Release|x64.Build.0 = Release|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Release|x86.ActiveCfg = Release|Any CPU + {4E1FFFE6-8379-4029-BBD1-D5BF07155B53}.Release|x86.Build.0 = Release|Any CPU {8367766D-033A-4555-96CC-008097F45322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8367766D-033A-4555-96CC-008097F45322}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Debug|x64.ActiveCfg = Debug|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Debug|x64.Build.0 = Debug|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Debug|x86.ActiveCfg = Debug|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Debug|x86.Build.0 = Debug|Any CPU {8367766D-033A-4555-96CC-008097F45322}.Release|Any CPU.ActiveCfg = Release|Any CPU {8367766D-033A-4555-96CC-008097F45322}.Release|Any CPU.Build.0 = Release|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Release|x64.ActiveCfg = Release|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Release|x64.Build.0 = Release|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Release|x86.ActiveCfg = Release|Any CPU + {8367766D-033A-4555-96CC-008097F45322}.Release|x86.Build.0 = Release|Any CPU {478F2C43-61F7-4839-8300-7E42F902BE24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {478F2C43-61F7-4839-8300-7E42F902BE24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Debug|x64.ActiveCfg = Debug|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Debug|x64.Build.0 = Debug|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Debug|x86.ActiveCfg = Debug|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Debug|x86.Build.0 = Debug|Any CPU {478F2C43-61F7-4839-8300-7E42F902BE24}.Release|Any CPU.ActiveCfg = Release|Any CPU {478F2C43-61F7-4839-8300-7E42F902BE24}.Release|Any CPU.Build.0 = Release|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Release|x64.ActiveCfg = Release|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Release|x64.Build.0 = Release|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Release|x86.ActiveCfg = Release|Any CPU + {478F2C43-61F7-4839-8300-7E42F902BE24}.Release|x86.Build.0 = Release|Any CPU {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Debug|x64.ActiveCfg = Debug|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Debug|x64.Build.0 = Debug|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Debug|x86.ActiveCfg = Debug|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Debug|x86.Build.0 = Debug|Any CPU {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Release|Any CPU.ActiveCfg = Release|Any CPU {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Release|Any CPU.Build.0 = Release|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Release|x64.ActiveCfg = Release|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Release|x64.Build.0 = Release|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Release|x86.ActiveCfg = Release|Any CPU + {57702A90-DD4A-491E-9899-AAC9CBFEDB19}.Release|x86.Build.0 = Release|Any CPU {099012D1-51F4-4FD7-927B-53D3E5269576}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {099012D1-51F4-4FD7-927B-53D3E5269576}.Debug|Any CPU.Build.0 = Debug|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Debug|x64.ActiveCfg = Debug|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Debug|x64.Build.0 = Debug|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Debug|x86.ActiveCfg = Debug|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Debug|x86.Build.0 = Debug|Any CPU {099012D1-51F4-4FD7-927B-53D3E5269576}.Release|Any CPU.ActiveCfg = Release|Any CPU {099012D1-51F4-4FD7-927B-53D3E5269576}.Release|Any CPU.Build.0 = Release|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Release|x64.ActiveCfg = Release|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Release|x64.Build.0 = Release|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Release|x86.ActiveCfg = Release|Any CPU + {099012D1-51F4-4FD7-927B-53D3E5269576}.Release|x86.Build.0 = Release|Any CPU {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Debug|x64.ActiveCfg = Debug|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Debug|x64.Build.0 = Debug|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Debug|x86.ActiveCfg = Debug|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Debug|x86.Build.0 = Debug|Any CPU {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Release|Any CPU.ActiveCfg = Release|Any CPU {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Release|Any CPU.Build.0 = Release|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Release|x64.ActiveCfg = Release|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Release|x64.Build.0 = Release|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Release|x86.ActiveCfg = Release|Any CPU + {E3CDDC1A-54FA-40F2-B468-9BB11DAB3306}.Release|x86.Build.0 = Release|Any CPU {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Debug|x64.ActiveCfg = Debug|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Debug|x64.Build.0 = Debug|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Debug|x86.ActiveCfg = Debug|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Debug|x86.Build.0 = Debug|Any CPU {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Release|Any CPU.Build.0 = Release|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Release|x64.ActiveCfg = Release|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Release|x64.Build.0 = Release|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Release|x86.ActiveCfg = Release|Any CPU + {CDF0A42D-F719-433A-BFE1-F1AFAF666C14}.Release|x86.Build.0 = Release|Any CPU {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Debug|x64.ActiveCfg = Debug|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Debug|x64.Build.0 = Debug|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Debug|x86.ActiveCfg = Debug|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Debug|x86.Build.0 = Debug|Any CPU {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Release|Any CPU.Build.0 = Release|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Release|x64.ActiveCfg = Release|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Release|x64.Build.0 = Release|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Release|x86.ActiveCfg = Release|Any CPU + {6F0971DF-51B3-4469-AD54-2F442B0FB00E}.Release|x86.Build.0 = Release|Any CPU {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Debug|x64.ActiveCfg = Debug|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Debug|x64.Build.0 = Debug|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Debug|x86.ActiveCfg = Debug|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Debug|x86.Build.0 = Debug|Any CPU {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Release|Any CPU.Build.0 = Release|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Release|x64.ActiveCfg = Release|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Release|x64.Build.0 = Release|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Release|x86.ActiveCfg = Release|Any CPU + {C58BDB0C-EB28-4557-8EE2-395BD77942C1}.Release|x86.Build.0 = Release|Any CPU {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Debug|x64.ActiveCfg = Debug|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Debug|x64.Build.0 = Debug|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Debug|x86.ActiveCfg = Debug|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Debug|x86.Build.0 = Debug|Any CPU {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Release|Any CPU.ActiveCfg = Release|Any CPU {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Release|Any CPU.Build.0 = Release|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Release|x64.ActiveCfg = Release|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Release|x64.Build.0 = Release|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Release|x86.ActiveCfg = Release|Any CPU + {38A0DA4D-D22F-4048-B5E8-342BDF854B54}.Release|x86.Build.0 = Release|Any CPU {E4CAC766-8074-4B42-9B16-184D932F3408}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E4CAC766-8074-4B42-9B16-184D932F3408}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Debug|x64.ActiveCfg = Debug|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Debug|x64.Build.0 = Debug|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Debug|x86.ActiveCfg = Debug|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Debug|x86.Build.0 = Debug|Any CPU {E4CAC766-8074-4B42-9B16-184D932F3408}.Release|Any CPU.ActiveCfg = Release|Any CPU {E4CAC766-8074-4B42-9B16-184D932F3408}.Release|Any CPU.Build.0 = Release|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Release|x64.ActiveCfg = Release|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Release|x64.Build.0 = Release|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Release|x86.ActiveCfg = Release|Any CPU + {E4CAC766-8074-4B42-9B16-184D932F3408}.Release|x86.Build.0 = Release|Any CPU {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Debug|x64.ActiveCfg = Debug|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Debug|x64.Build.0 = Debug|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Debug|x86.ActiveCfg = Debug|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Debug|x86.Build.0 = Debug|Any CPU {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Release|Any CPU.ActiveCfg = Release|Any CPU {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Release|Any CPU.Build.0 = Release|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Release|x64.ActiveCfg = Release|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Release|x64.Build.0 = Release|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Release|x86.ActiveCfg = Release|Any CPU + {17B00D17-B20D-4F71-AB1C-C67626FA4D0C}.Release|x86.Build.0 = Release|Any CPU {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Debug|x64.ActiveCfg = Debug|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Debug|x64.Build.0 = Debug|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Debug|x86.ActiveCfg = Debug|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Debug|x86.Build.0 = Debug|Any CPU {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Release|Any CPU.ActiveCfg = Release|Any CPU {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Release|Any CPU.Build.0 = Release|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Release|x64.ActiveCfg = Release|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Release|x64.Build.0 = Release|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Release|x86.ActiveCfg = Release|Any CPU + {19BC952C-53F6-4B84-AD7F-6F9E28F97554}.Release|x86.Build.0 = Release|Any CPU {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Debug|x64.ActiveCfg = Debug|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Debug|x64.Build.0 = Debug|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Debug|x86.Build.0 = Debug|Any CPU {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Release|Any CPU.ActiveCfg = Release|Any CPU {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Release|Any CPU.Build.0 = Release|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Release|x64.ActiveCfg = Release|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Release|x64.Build.0 = Release|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Release|x86.ActiveCfg = Release|Any CPU + {D66363A1-E012-4AE2-9013-5F1E6403FCA6}.Release|x86.Build.0 = Release|Any CPU {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Debug|x64.ActiveCfg = Debug|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Debug|x64.Build.0 = Debug|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Debug|x86.ActiveCfg = Debug|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Debug|x86.Build.0 = Debug|Any CPU {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Release|Any CPU.ActiveCfg = Release|Any CPU {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Release|Any CPU.Build.0 = Release|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Release|x64.ActiveCfg = Release|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Release|x64.Build.0 = Release|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Release|x86.ActiveCfg = Release|Any CPU + {1FFC4F00-BC1E-4BDE-8EDE-556242FBD9DE}.Release|x86.Build.0 = Release|Any CPU {A552D855-105F-417A-B67F-2BD706DD4B35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A552D855-105F-417A-B67F-2BD706DD4B35}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Debug|x64.ActiveCfg = Debug|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Debug|x64.Build.0 = Debug|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Debug|x86.ActiveCfg = Debug|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Debug|x86.Build.0 = Debug|Any CPU {A552D855-105F-417A-B67F-2BD706DD4B35}.Release|Any CPU.ActiveCfg = Release|Any CPU {A552D855-105F-417A-B67F-2BD706DD4B35}.Release|Any CPU.Build.0 = Release|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Release|x64.ActiveCfg = Release|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Release|x64.Build.0 = Release|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Release|x86.ActiveCfg = Release|Any CPU + {A552D855-105F-417A-B67F-2BD706DD4B35}.Release|x86.Build.0 = Release|Any CPU {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Debug|x64.Build.0 = Debug|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Debug|x86.Build.0 = Debug|Any CPU {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Release|Any CPU.Build.0 = Release|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Release|x64.ActiveCfg = Release|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Release|x64.Build.0 = Release|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Release|x86.ActiveCfg = Release|Any CPU + {6DBAA1BB-CADC-41DC-A031-7D04998A3C3C}.Release|x86.Build.0 = Release|Any CPU {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Debug|x64.ActiveCfg = Debug|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Debug|x64.Build.0 = Debug|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Debug|x86.ActiveCfg = Debug|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Debug|x86.Build.0 = Debug|Any CPU {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Release|Any CPU.ActiveCfg = Release|Any CPU {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Release|Any CPU.Build.0 = Release|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Release|x64.ActiveCfg = Release|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Release|x64.Build.0 = Release|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Release|x86.ActiveCfg = Release|Any CPU + {7FA0EBBC-BCD4-4BA5-B41E-20C3F5AEDC22}.Release|x86.Build.0 = Release|Any CPU {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Debug|x64.ActiveCfg = Debug|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Debug|x64.Build.0 = Debug|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Debug|x86.ActiveCfg = Debug|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Debug|x86.Build.0 = Debug|Any CPU {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Release|Any CPU.Build.0 = Release|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Release|x64.ActiveCfg = Release|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Release|x64.Build.0 = Release|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Release|x86.ActiveCfg = Release|Any CPU + {2B4A587F-EC45-4AA3-9AED-1DA68DF99A76}.Release|x86.Build.0 = Release|Any CPU {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Debug|x64.ActiveCfg = Debug|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Debug|x64.Build.0 = Debug|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Debug|x86.ActiveCfg = Debug|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Debug|x86.Build.0 = Debug|Any CPU {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Release|Any CPU.Build.0 = Release|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Release|x64.ActiveCfg = Release|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Release|x64.Build.0 = Release|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Release|x86.ActiveCfg = Release|Any CPU + {32B2D17F-E82C-4D69-9B1B-68F959ED08C3}.Release|x86.Build.0 = Release|Any CPU {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Debug|x64.Build.0 = Debug|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Debug|x86.ActiveCfg = Debug|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Debug|x86.Build.0 = Debug|Any CPU {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Release|Any CPU.Build.0 = Release|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Release|x64.ActiveCfg = Release|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Release|x64.Build.0 = Release|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Release|x86.ActiveCfg = Release|Any CPU + {40C44475-D7F3-4213-AB55-3457B9E73AF6}.Release|x86.Build.0 = Release|Any CPU {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Debug|x64.ActiveCfg = Debug|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Debug|x64.Build.0 = Debug|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Debug|x86.ActiveCfg = Debug|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Debug|x86.Build.0 = Debug|Any CPU {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Release|Any CPU.Build.0 = Release|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Release|x64.ActiveCfg = Release|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Release|x64.Build.0 = Release|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Release|x86.ActiveCfg = Release|Any CPU + {269BEB2E-4039-47CF-9D17-3205FAFBFA1B}.Release|x86.Build.0 = Release|Any CPU {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Debug|x64.ActiveCfg = Debug|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Debug|x64.Build.0 = Debug|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Debug|x86.ActiveCfg = Debug|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Debug|x86.Build.0 = Debug|Any CPU {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Release|Any CPU.Build.0 = Release|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Release|x64.ActiveCfg = Release|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Release|x64.Build.0 = Release|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Release|x86.ActiveCfg = Release|Any CPU + {2B7C81F3-DB44-4C2F-BA0C-C2EFDEF10DBC}.Release|x86.Build.0 = Release|Any CPU {86C55577-0C7D-4111-8C58-7243E198A485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {86C55577-0C7D-4111-8C58-7243E198A485}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Debug|x64.ActiveCfg = Debug|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Debug|x64.Build.0 = Debug|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Debug|x86.ActiveCfg = Debug|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Debug|x86.Build.0 = Debug|Any CPU {86C55577-0C7D-4111-8C58-7243E198A485}.Release|Any CPU.ActiveCfg = Release|Any CPU {86C55577-0C7D-4111-8C58-7243E198A485}.Release|Any CPU.Build.0 = Release|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Release|x64.ActiveCfg = Release|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Release|x64.Build.0 = Release|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Release|x86.ActiveCfg = Release|Any CPU + {86C55577-0C7D-4111-8C58-7243E198A485}.Release|x86.Build.0 = Release|Any CPU {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Debug|x64.ActiveCfg = Debug|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Debug|x64.Build.0 = Debug|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Debug|x86.ActiveCfg = Debug|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Debug|x86.Build.0 = Debug|Any CPU {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Release|Any CPU.Build.0 = Release|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Release|x64.ActiveCfg = Release|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Release|x64.Build.0 = Release|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Release|x86.ActiveCfg = Release|Any CPU + {2BE7DBA4-0FF3-47B8-B0A4-DD6B3ED6817A}.Release|x86.Build.0 = Release|Any CPU {FB785377-9D97-4827-B9CA-683387546932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB785377-9D97-4827-B9CA-683387546932}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Debug|x64.ActiveCfg = Debug|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Debug|x64.Build.0 = Debug|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Debug|x86.ActiveCfg = Debug|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Debug|x86.Build.0 = Debug|Any CPU {FB785377-9D97-4827-B9CA-683387546932}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB785377-9D97-4827-B9CA-683387546932}.Release|Any CPU.Build.0 = Release|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Release|x64.ActiveCfg = Release|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Release|x64.Build.0 = Release|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Release|x86.ActiveCfg = Release|Any CPU + {FB785377-9D97-4827-B9CA-683387546932}.Release|x86.Build.0 = Release|Any CPU {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Debug|x64.ActiveCfg = Debug|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Debug|x64.Build.0 = Debug|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Debug|x86.Build.0 = Debug|Any CPU {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Release|Any CPU.Build.0 = Release|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Release|x64.ActiveCfg = Release|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Release|x64.Build.0 = Release|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Release|x86.ActiveCfg = Release|Any CPU + {1F06EADA-A052-4EB9-AED7-0A90B37101C4}.Release|x86.Build.0 = Release|Any CPU {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Debug|x64.ActiveCfg = Debug|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Debug|x64.Build.0 = Debug|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Debug|x86.ActiveCfg = Debug|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Debug|x86.Build.0 = Debug|Any CPU {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Release|Any CPU.ActiveCfg = Release|Any CPU {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Release|Any CPU.Build.0 = Release|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Release|x64.ActiveCfg = Release|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Release|x64.Build.0 = Release|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Release|x86.ActiveCfg = Release|Any CPU + {0E4A2F12-3CCC-4DA6-8238-77C65CA28F8B}.Release|x86.Build.0 = Release|Any CPU {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Debug|x64.ActiveCfg = Debug|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Debug|x64.Build.0 = Debug|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Debug|x86.ActiveCfg = Debug|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Debug|x86.Build.0 = Debug|Any CPU {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Release|Any CPU.Build.0 = Release|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Release|x64.ActiveCfg = Release|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Release|x64.Build.0 = Release|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Release|x86.ActiveCfg = Release|Any CPU + {0A788F08-4455-4D23-BFAB-C090E3A7E2A0}.Release|x86.Build.0 = Release|Any CPU {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Debug|x64.ActiveCfg = Debug|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Debug|x64.Build.0 = Debug|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Debug|x86.ActiveCfg = Debug|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Debug|x86.Build.0 = Debug|Any CPU {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Release|Any CPU.ActiveCfg = Release|Any CPU {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Release|Any CPU.Build.0 = Release|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Release|x64.ActiveCfg = Release|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Release|x64.Build.0 = Release|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Release|x86.ActiveCfg = Release|Any CPU + {F4EEFFF0-B23F-469D-AC76-7E177BEBC5EA}.Release|x86.Build.0 = Release|Any CPU {878163F4-66EA-46E2-8E8D-C27C78263646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {878163F4-66EA-46E2-8E8D-C27C78263646}.Debug|Any CPU.Build.0 = Debug|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Debug|x64.ActiveCfg = Debug|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Debug|x64.Build.0 = Debug|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Debug|x86.ActiveCfg = Debug|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Debug|x86.Build.0 = Debug|Any CPU {878163F4-66EA-46E2-8E8D-C27C78263646}.Release|Any CPU.ActiveCfg = Release|Any CPU {878163F4-66EA-46E2-8E8D-C27C78263646}.Release|Any CPU.Build.0 = Release|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Release|x64.ActiveCfg = Release|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Release|x64.Build.0 = Release|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Release|x86.ActiveCfg = Release|Any CPU + {878163F4-66EA-46E2-8E8D-C27C78263646}.Release|x86.Build.0 = Release|Any CPU {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Debug|x64.ActiveCfg = Debug|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Debug|x64.Build.0 = Debug|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Debug|x86.ActiveCfg = Debug|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Debug|x86.Build.0 = Debug|Any CPU {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Release|Any CPU.ActiveCfg = Release|Any CPU {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Release|Any CPU.Build.0 = Release|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Release|x64.ActiveCfg = Release|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Release|x64.Build.0 = Release|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Release|x86.ActiveCfg = Release|Any CPU + {52849341-E18B-49ED-BDD9-48F8ECE74C01}.Release|x86.Build.0 = Release|Any CPU {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Debug|x64.Build.0 = Debug|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Debug|x86.Build.0 = Debug|Any CPU {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Release|Any CPU.Build.0 = Release|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Release|x64.ActiveCfg = Release|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Release|x64.Build.0 = Release|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Release|x86.ActiveCfg = Release|Any CPU + {25DDCBE1-6F72-4F34-8EF9-62520D3001EC}.Release|x86.Build.0 = Release|Any CPU {6C12AC56-C401-4194-8F45-991EF49B575C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6C12AC56-C401-4194-8F45-991EF49B575C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Debug|x64.Build.0 = Debug|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Debug|x86.Build.0 = Debug|Any CPU {6C12AC56-C401-4194-8F45-991EF49B575C}.Release|Any CPU.ActiveCfg = Release|Any CPU {6C12AC56-C401-4194-8F45-991EF49B575C}.Release|Any CPU.Build.0 = Release|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Release|x64.ActiveCfg = Release|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Release|x64.Build.0 = Release|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Release|x86.ActiveCfg = Release|Any CPU + {6C12AC56-C401-4194-8F45-991EF49B575C}.Release|x86.Build.0 = Release|Any CPU {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Debug|x64.Build.0 = Debug|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Debug|x86.Build.0 = Debug|Any CPU {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Release|Any CPU.Build.0 = Release|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Release|x64.ActiveCfg = Release|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Release|x64.Build.0 = Release|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Release|x86.ActiveCfg = Release|Any CPU + {5B8FCA4C-7CEE-4376-A760-67B387BE3589}.Release|x86.Build.0 = Release|Any CPU {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Debug|x64.ActiveCfg = Debug|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Debug|x64.Build.0 = Debug|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Debug|x86.ActiveCfg = Debug|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Debug|x86.Build.0 = Debug|Any CPU {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Release|Any CPU.Build.0 = Release|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Release|x64.ActiveCfg = Release|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Release|x64.Build.0 = Release|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Release|x86.ActiveCfg = Release|Any CPU + {BEE6C172-A184-4BFB-9591-3C0675A1AF96}.Release|x86.Build.0 = Release|Any CPU {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Debug|x64.ActiveCfg = Debug|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Debug|x64.Build.0 = Debug|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Debug|x86.ActiveCfg = Debug|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Debug|x86.Build.0 = Debug|Any CPU {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Release|Any CPU.ActiveCfg = Release|Any CPU {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Release|Any CPU.Build.0 = Release|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Release|x64.ActiveCfg = Release|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Release|x64.Build.0 = Release|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Release|x86.ActiveCfg = Release|Any CPU + {E072D6A6-758E-4ABD-9B45-6A1FD8C35BAF}.Release|x86.Build.0 = Release|Any CPU {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Debug|x64.ActiveCfg = Debug|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Debug|x64.Build.0 = Debug|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Debug|x86.ActiveCfg = Debug|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Debug|x86.Build.0 = Debug|Any CPU {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Release|Any CPU.Build.0 = Release|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Release|x64.ActiveCfg = Release|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Release|x64.Build.0 = Release|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Release|x86.ActiveCfg = Release|Any CPU + {C4C9533A-06C5-48CD-88DC-A1E7A81228E0}.Release|x86.Build.0 = Release|Any CPU {75BC162C-D512-4027-8665-FD5420ACB863}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {75BC162C-D512-4027-8665-FD5420ACB863}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Debug|x64.ActiveCfg = Debug|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Debug|x64.Build.0 = Debug|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Debug|x86.ActiveCfg = Debug|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Debug|x86.Build.0 = Debug|Any CPU {75BC162C-D512-4027-8665-FD5420ACB863}.Release|Any CPU.ActiveCfg = Release|Any CPU {75BC162C-D512-4027-8665-FD5420ACB863}.Release|Any CPU.Build.0 = Release|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Release|x64.ActiveCfg = Release|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Release|x64.Build.0 = Release|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Release|x86.ActiveCfg = Release|Any CPU + {75BC162C-D512-4027-8665-FD5420ACB863}.Release|x86.Build.0 = Release|Any CPU {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Debug|x64.ActiveCfg = Debug|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Debug|x64.Build.0 = Debug|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Debug|x86.ActiveCfg = Debug|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Debug|x86.Build.0 = Debug|Any CPU {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Release|Any CPU.Build.0 = Release|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Release|x64.ActiveCfg = Release|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Release|x64.Build.0 = Release|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Release|x86.ActiveCfg = Release|Any CPU + {0C5621AB-5BE2-49E2-85B1-2C3A17C2DCFA}.Release|x86.Build.0 = Release|Any CPU {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Debug|x64.ActiveCfg = Debug|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Debug|x64.Build.0 = Debug|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Debug|x86.ActiveCfg = Debug|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Debug|x86.Build.0 = Debug|Any CPU {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Release|Any CPU.ActiveCfg = Release|Any CPU {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Release|Any CPU.Build.0 = Release|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Release|x64.ActiveCfg = Release|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Release|x64.Build.0 = Release|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Release|x86.ActiveCfg = Release|Any CPU + {2BBFDE44-4C04-4D27-9B69-42C29A0EAB73}.Release|x86.Build.0 = Release|Any CPU {03295528-1232-4F7B-AA42-81892547F2D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {03295528-1232-4F7B-AA42-81892547F2D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Debug|x64.ActiveCfg = Debug|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Debug|x64.Build.0 = Debug|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Debug|x86.ActiveCfg = Debug|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Debug|x86.Build.0 = Debug|Any CPU {03295528-1232-4F7B-AA42-81892547F2D7}.Release|Any CPU.ActiveCfg = Release|Any CPU {03295528-1232-4F7B-AA42-81892547F2D7}.Release|Any CPU.Build.0 = Release|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Release|x64.ActiveCfg = Release|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Release|x64.Build.0 = Release|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Release|x86.ActiveCfg = Release|Any CPU + {03295528-1232-4F7B-AA42-81892547F2D7}.Release|x86.Build.0 = Release|Any CPU {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Debug|x64.ActiveCfg = Debug|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Debug|x64.Build.0 = Debug|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Debug|x86.ActiveCfg = Debug|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Debug|x86.Build.0 = Debug|Any CPU {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Release|Any CPU.ActiveCfg = Release|Any CPU {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Release|Any CPU.Build.0 = Release|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Release|x64.ActiveCfg = Release|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Release|x64.Build.0 = Release|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Release|x86.ActiveCfg = Release|Any CPU + {44BB5A3B-81B8-4888-B71B-F399FE66A0A3}.Release|x86.Build.0 = Release|Any CPU {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Debug|x64.ActiveCfg = Debug|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Debug|x64.Build.0 = Debug|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Debug|x86.ActiveCfg = Debug|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Debug|x86.Build.0 = Debug|Any CPU {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Release|Any CPU.Build.0 = Release|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Release|x64.ActiveCfg = Release|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Release|x64.Build.0 = Release|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Release|x86.ActiveCfg = Release|Any CPU + {5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C}.Release|x86.Build.0 = Release|Any CPU {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|Any CPU.ActiveCfg = Debug|x64 {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|Any CPU.Build.0 = Debug|x64 {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|Any CPU.Deploy.0 = Debug|x64 + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|x64.Build.0 = Debug|Any CPU + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|x86.ActiveCfg = Debug|Any CPU + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Debug|x86.Build.0 = Debug|Any CPU {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|Any CPU.ActiveCfg = Release|x64 {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|Any CPU.Build.0 = Release|x64 {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|Any CPU.Deploy.0 = Release|x64 + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|x64.ActiveCfg = Release|Any CPU + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|x64.Build.0 = Release|Any CPU + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|x86.ActiveCfg = Release|Any CPU + {CE9E0C11-AACD-4F57-8C1B-7210AFABCA19}.Release|x86.Build.0 = Release|Any CPU {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Debug|x64.ActiveCfg = Debug|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Debug|x64.Build.0 = Debug|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Debug|x86.ActiveCfg = Debug|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Debug|x86.Build.0 = Debug|Any CPU {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Release|Any CPU.ActiveCfg = Release|Any CPU {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Release|Any CPU.Build.0 = Release|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Release|x64.ActiveCfg = Release|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Release|x64.Build.0 = Release|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Release|x86.ActiveCfg = Release|Any CPU + {7EE327D2-B598-4F77-A889-04EB6949A6BB}.Release|x86.Build.0 = Release|Any CPU {2399EFC7-01EC-4574-9552-1A84857B076E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2399EFC7-01EC-4574-9552-1A84857B076E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Debug|x64.ActiveCfg = Debug|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Debug|x64.Build.0 = Debug|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Debug|x86.ActiveCfg = Debug|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Debug|x86.Build.0 = Debug|Any CPU {2399EFC7-01EC-4574-9552-1A84857B076E}.Release|Any CPU.ActiveCfg = Release|Any CPU {2399EFC7-01EC-4574-9552-1A84857B076E}.Release|Any CPU.Build.0 = Release|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Release|x64.ActiveCfg = Release|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Release|x64.Build.0 = Release|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Release|x86.ActiveCfg = Release|Any CPU + {2399EFC7-01EC-4574-9552-1A84857B076E}.Release|x86.Build.0 = Release|Any CPU {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Debug|x64.ActiveCfg = Debug|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Debug|x64.Build.0 = Debug|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Debug|x86.ActiveCfg = Debug|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Debug|x86.Build.0 = Debug|Any CPU {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Release|Any CPU.Build.0 = Release|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Release|x64.ActiveCfg = Release|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Release|x64.Build.0 = Release|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Release|x86.ActiveCfg = Release|Any CPU + {69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD}.Release|x86.Build.0 = Release|Any CPU {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Debug|x64.ActiveCfg = Debug|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Debug|x64.Build.0 = Debug|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Debug|x86.ActiveCfg = Debug|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Debug|x86.Build.0 = Debug|Any CPU {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Release|Any CPU.ActiveCfg = Release|Any CPU {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Release|Any CPU.Build.0 = Release|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Release|x64.ActiveCfg = Release|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Release|x64.Build.0 = Release|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Release|x86.ActiveCfg = Release|Any CPU + {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4}.Release|x86.Build.0 = Release|Any CPU {61C05286-8FE5-077F-4E36-039C79BF3443}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {61C05286-8FE5-077F-4E36-039C79BF3443}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Debug|x64.ActiveCfg = Debug|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Debug|x64.Build.0 = Debug|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Debug|x86.ActiveCfg = Debug|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Debug|x86.Build.0 = Debug|Any CPU {61C05286-8FE5-077F-4E36-039C79BF3443}.Release|Any CPU.ActiveCfg = Release|Any CPU {61C05286-8FE5-077F-4E36-039C79BF3443}.Release|Any CPU.Build.0 = Release|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Release|x64.ActiveCfg = Release|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Release|x64.Build.0 = Release|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Release|x86.ActiveCfg = Release|Any CPU + {61C05286-8FE5-077F-4E36-039C79BF3443}.Release|x86.Build.0 = Release|Any CPU {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Debug|Any CPU.Build.0 = Debug|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Debug|x64.ActiveCfg = Debug|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Debug|x64.Build.0 = Debug|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Debug|x86.ActiveCfg = Debug|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Debug|x86.Build.0 = Debug|Any CPU {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Release|Any CPU.ActiveCfg = Release|Any CPU {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Release|Any CPU.Build.0 = Release|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Release|x64.ActiveCfg = Release|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Release|x64.Build.0 = Release|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Release|x86.ActiveCfg = Release|Any CPU + {501893AF-503A-30CC-ECDA-DFAC435E6D10}.Release|x86.Build.0 = Release|Any CPU {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Debug|x64.Build.0 = Debug|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Debug|x86.Build.0 = Debug|Any CPU {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Release|Any CPU.Build.0 = Release|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Release|x64.ActiveCfg = Release|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Release|x64.Build.0 = Release|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Release|x86.ActiveCfg = Release|Any CPU + {D3656A8A-2504-4537-8C34-F2B93D8E53EC}.Release|x86.Build.0 = Release|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Debug|x64.ActiveCfg = Debug|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Debug|x64.Build.0 = Debug|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Debug|x86.ActiveCfg = Debug|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Debug|x86.Build.0 = Debug|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Release|Any CPU.Build.0 = Release|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Release|x64.ActiveCfg = Release|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Release|x64.Build.0 = Release|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Release|x86.ActiveCfg = Release|Any CPU + {24788952-DCC6-4D42-8D1C-B3B6D3130A63}.Release|x86.Build.0 = Release|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Debug|x64.ActiveCfg = Debug|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Debug|x64.Build.0 = Debug|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Debug|x86.ActiveCfg = Debug|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Debug|x86.Build.0 = Debug|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Release|Any CPU.Build.0 = Release|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Release|x64.ActiveCfg = Release|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Release|x64.Build.0 = Release|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Release|x86.ActiveCfg = Release|Any CPU + {3E75CC72-F514-405F-947D-CFE690DF5947}.Release|x86.Build.0 = Release|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Debug|x64.ActiveCfg = Debug|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Debug|x64.Build.0 = Debug|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Debug|x86.ActiveCfg = Debug|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Debug|x86.Build.0 = Debug|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Release|Any CPU.Build.0 = Release|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Release|x64.ActiveCfg = Release|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Release|x64.Build.0 = Release|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Release|x86.ActiveCfg = Release|Any CPU + {5532F188-437D-423B-B883-1ECF3BFAF7C1}.Release|x86.Build.0 = Release|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Debug|x64.ActiveCfg = Debug|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Debug|x64.Build.0 = Debug|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Debug|x86.ActiveCfg = Debug|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Debug|x86.Build.0 = Debug|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Release|Any CPU.Build.0 = Release|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Release|x64.ActiveCfg = Release|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Release|x64.Build.0 = Release|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Release|x86.ActiveCfg = Release|Any CPU + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F}.Release|x86.Build.0 = Release|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Debug|Any CPU.Build.0 = Debug|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Debug|x64.ActiveCfg = Debug|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Debug|x64.Build.0 = Debug|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Debug|x86.ActiveCfg = Debug|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Debug|x86.Build.0 = Debug|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Release|Any CPU.ActiveCfg = Release|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Release|Any CPU.Build.0 = Release|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Release|x64.ActiveCfg = Release|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Release|x64.Build.0 = Release|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Release|x86.ActiveCfg = Release|Any CPU + {879AE820-20CC-46CA-9009-64D32502B902}.Release|x86.Build.0 = Release|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Debug|x64.ActiveCfg = Debug|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Debug|x64.Build.0 = Debug|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Debug|x86.ActiveCfg = Debug|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Debug|x86.Build.0 = Debug|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Release|Any CPU.Build.0 = Release|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Release|x64.ActiveCfg = Release|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Release|x64.Build.0 = Release|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Release|x86.ActiveCfg = Release|Any CPU + {0D69001C-8230-494F-8CE8-0ECB56EE879E}.Release|x86.Build.0 = Release|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Debug|x64.ActiveCfg = Debug|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Debug|x64.Build.0 = Debug|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Debug|x86.ActiveCfg = Debug|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Debug|x86.Build.0 = Debug|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Release|Any CPU.Build.0 = Release|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Release|x64.ActiveCfg = Release|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Release|x64.Build.0 = Release|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Release|x86.ActiveCfg = Release|Any CPU + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C}.Release|x86.Build.0 = Release|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Debug|x64.Build.0 = Debug|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Debug|x86.ActiveCfg = Debug|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Debug|x86.Build.0 = Debug|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Release|Any CPU.Build.0 = Release|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Release|x64.ActiveCfg = Release|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Release|x64.Build.0 = Release|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Release|x86.ActiveCfg = Release|Any CPU + {D330949C-D1F0-4ACB-875A-31103D037C8E}.Release|x86.Build.0 = Release|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Debug|x64.ActiveCfg = Debug|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Debug|x64.Build.0 = Debug|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Debug|x86.Build.0 = Debug|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Release|Any CPU.Build.0 = Release|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Release|x64.ActiveCfg = Release|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Release|x64.Build.0 = Release|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Release|x86.ActiveCfg = Release|Any CPU + {12AFF030-3076-4AA8-9455-376135FEE8B2}.Release|x86.Build.0 = Release|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Debug|x64.ActiveCfg = Debug|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Debug|x64.Build.0 = Debug|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Debug|x86.ActiveCfg = Debug|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Debug|x86.Build.0 = Debug|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Release|Any CPU.Build.0 = Release|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Release|x64.ActiveCfg = Release|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Release|x64.Build.0 = Release|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Release|x86.ActiveCfg = Release|Any CPU + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004}.Release|x86.Build.0 = Release|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Debug|Any CPU.Build.0 = Debug|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Debug|x64.ActiveCfg = Debug|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Debug|x64.Build.0 = Debug|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Debug|x86.ActiveCfg = Debug|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Debug|x86.Build.0 = Debug|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Release|Any CPU.ActiveCfg = Release|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Release|Any CPU.Build.0 = Release|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Release|x64.ActiveCfg = Release|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Release|x64.Build.0 = Release|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Release|x86.ActiveCfg = Release|Any CPU + {144D3191-A382-4F2E-A66E-93D4ADDBF772}.Release|x86.Build.0 = Release|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Debug|x64.ActiveCfg = Debug|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Debug|x64.Build.0 = Debug|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Debug|x86.ActiveCfg = Debug|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Debug|x86.Build.0 = Debug|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Release|Any CPU.Build.0 = Release|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Release|x64.ActiveCfg = Release|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Release|x64.Build.0 = Release|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Release|x86.ActiveCfg = Release|Any CPU + {953FC22C-C991-4592-A79C-7B47F0643DD9}.Release|x86.Build.0 = Release|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Debug|x64.ActiveCfg = Debug|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Debug|x64.Build.0 = Debug|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Debug|x86.ActiveCfg = Debug|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Debug|x86.Build.0 = Debug|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Release|Any CPU.Build.0 = Release|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Release|x64.ActiveCfg = Release|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Release|x64.Build.0 = Release|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Release|x86.ActiveCfg = Release|Any CPU + {413C9216-A248-4561-9051-47D8CB7D5E03}.Release|x86.Build.0 = Release|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Debug|x64.ActiveCfg = Debug|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Debug|x64.Build.0 = Debug|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Debug|x86.ActiveCfg = Debug|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Debug|x86.Build.0 = Debug|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Release|Any CPU.Build.0 = Release|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Release|x64.ActiveCfg = Release|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Release|x64.Build.0 = Release|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Release|x86.ActiveCfg = Release|Any CPU + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275}.Release|x86.Build.0 = Release|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Debug|x64.ActiveCfg = Debug|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Debug|x64.Build.0 = Debug|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Debug|x86.ActiveCfg = Debug|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Debug|x86.Build.0 = Debug|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Release|Any CPU.Build.0 = Release|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Release|x64.ActiveCfg = Release|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Release|x64.Build.0 = Release|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Release|x86.ActiveCfg = Release|Any CPU + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1}.Release|x86.Build.0 = Release|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Debug|x64.ActiveCfg = Debug|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Debug|x64.Build.0 = Debug|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Debug|x86.ActiveCfg = Debug|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Debug|x86.Build.0 = Debug|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Release|Any CPU.Build.0 = Release|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Release|x64.ActiveCfg = Release|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Release|x64.Build.0 = Release|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Release|x86.ActiveCfg = Release|Any CPU + {40195C95-70C5-46D9-B315-8C4853D61BB8}.Release|x86.Build.0 = Release|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Debug|x64.ActiveCfg = Debug|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Debug|x64.Build.0 = Debug|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Debug|x86.ActiveCfg = Debug|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Debug|x86.Build.0 = Debug|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Release|Any CPU.Build.0 = Release|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Release|x64.ActiveCfg = Release|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Release|x64.Build.0 = Release|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Release|x86.ActiveCfg = Release|Any CPU + {5AB47124-984B-4FBA-9091-906E92C21051}.Release|x86.Build.0 = Release|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Debug|Any CPU.Build.0 = Debug|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Debug|x64.ActiveCfg = Debug|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Debug|x64.Build.0 = Debug|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Debug|x86.ActiveCfg = Debug|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Debug|x86.Build.0 = Debug|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Release|Any CPU.ActiveCfg = Release|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Release|Any CPU.Build.0 = Release|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Release|x64.ActiveCfg = Release|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Release|x64.Build.0 = Release|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Release|x86.ActiveCfg = Release|Any CPU + {422830F2-BA7F-4352-B1FA-9FEFE05A6473}.Release|x86.Build.0 = Release|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Debug|x64.Build.0 = Debug|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Debug|x86.Build.0 = Debug|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Release|Any CPU.Build.0 = Release|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Release|x64.ActiveCfg = Release|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Release|x64.Build.0 = Release|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Release|x86.ActiveCfg = Release|Any CPU + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2}.Release|x86.Build.0 = Release|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Debug|x64.Build.0 = Debug|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Debug|x86.ActiveCfg = Debug|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Debug|x86.Build.0 = Debug|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Release|Any CPU.Build.0 = Release|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Release|x64.ActiveCfg = Release|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Release|x64.Build.0 = Release|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Release|x86.ActiveCfg = Release|Any CPU + {533DA3F1-0980-49AD-9671-79B67708D5B8}.Release|x86.Build.0 = Release|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Debug|x64.ActiveCfg = Debug|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Debug|x64.Build.0 = Debug|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Debug|x86.ActiveCfg = Debug|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Debug|x86.Build.0 = Debug|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Release|Any CPU.Build.0 = Release|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Release|x64.ActiveCfg = Release|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Release|x64.Build.0 = Release|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Release|x86.ActiveCfg = Release|Any CPU + {E76F260F-2C64-4AAA-968A-0897A53B3CC4}.Release|x86.Build.0 = Release|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Debug|x64.ActiveCfg = Debug|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Debug|x64.Build.0 = Debug|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Debug|x86.ActiveCfg = Debug|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Debug|x86.Build.0 = Debug|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Release|Any CPU.Build.0 = Release|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Release|x64.ActiveCfg = Release|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Release|x64.Build.0 = Release|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Release|x86.ActiveCfg = Release|Any CPU + {537B871D-3F5B-4B3D-8802-C51EF3B74C56}.Release|x86.Build.0 = Release|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Debug|x64.ActiveCfg = Debug|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Debug|x64.Build.0 = Debug|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Debug|x86.ActiveCfg = Debug|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Debug|x86.Build.0 = Debug|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Release|Any CPU.Build.0 = Release|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Release|x64.ActiveCfg = Release|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Release|x64.Build.0 = Release|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Release|x86.ActiveCfg = Release|Any CPU + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F}.Release|x86.Build.0 = Release|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Debug|x64.ActiveCfg = Debug|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Debug|x64.Build.0 = Debug|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Debug|x86.ActiveCfg = Debug|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Debug|x86.Build.0 = Debug|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Release|Any CPU.Build.0 = Release|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Release|x64.ActiveCfg = Release|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Release|x64.Build.0 = Release|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Release|x86.ActiveCfg = Release|Any CPU + {B63048B4-A819-4055-8F5D-298234C1B370}.Release|x86.Build.0 = Release|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Debug|x64.Build.0 = Debug|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Debug|x86.Build.0 = Debug|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Release|Any CPU.Build.0 = Release|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Release|x64.ActiveCfg = Release|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Release|x64.Build.0 = Release|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Release|x86.ActiveCfg = Release|Any CPU + {2536C0B3-710C-4E64-8902-4087B02850A5}.Release|x86.Build.0 = Release|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Debug|x64.ActiveCfg = Debug|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Debug|x64.Build.0 = Debug|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Debug|x86.ActiveCfg = Debug|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Debug|x86.Build.0 = Debug|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Release|Any CPU.Build.0 = Release|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Release|x64.ActiveCfg = Release|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Release|x64.Build.0 = Release|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Release|x86.ActiveCfg = Release|Any CPU + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75}.Release|x86.Build.0 = Release|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Debug|Any CPU.Build.0 = Debug|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Debug|x64.ActiveCfg = Debug|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Debug|x64.Build.0 = Debug|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Debug|x86.ActiveCfg = Debug|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Debug|x86.Build.0 = Debug|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Release|Any CPU.ActiveCfg = Release|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Release|Any CPU.Build.0 = Release|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Release|x64.ActiveCfg = Release|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Release|x64.Build.0 = Release|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Release|x86.ActiveCfg = Release|Any CPU + {286835C4-3512-4B7D-954C-68730467D873}.Release|x86.Build.0 = Release|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Debug|x64.ActiveCfg = Debug|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Debug|x64.Build.0 = Debug|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Debug|x86.ActiveCfg = Debug|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Debug|x86.Build.0 = Debug|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Release|Any CPU.Build.0 = Release|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Release|x64.ActiveCfg = Release|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Release|x64.Build.0 = Release|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Release|x86.ActiveCfg = Release|Any CPU + {A8CDC6DB-7162-40D0-847A-B315EAE6362A}.Release|x86.Build.0 = Release|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Debug|x64.ActiveCfg = Debug|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Debug|x64.Build.0 = Debug|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Debug|x86.ActiveCfg = Debug|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Debug|x86.Build.0 = Debug|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Release|Any CPU.Build.0 = Release|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Release|x64.ActiveCfg = Release|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Release|x64.Build.0 = Release|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Release|x86.ActiveCfg = Release|Any CPU + {76AA26DD-63AA-4F75-9D82-783C5F153D1F}.Release|x86.Build.0 = Release|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Debug|x64.ActiveCfg = Debug|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Debug|x64.Build.0 = Debug|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Debug|x86.ActiveCfg = Debug|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Debug|x86.Build.0 = Debug|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Release|Any CPU.Build.0 = Release|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Release|x64.ActiveCfg = Release|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Release|x64.Build.0 = Release|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Release|x86.ActiveCfg = Release|Any CPU + {1B102E23-1FAE-426B-8A4F-640E8C41F23E}.Release|x86.Build.0 = Release|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Debug|x64.ActiveCfg = Debug|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Debug|x64.Build.0 = Debug|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Debug|x86.ActiveCfg = Debug|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Debug|x86.Build.0 = Debug|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Release|Any CPU.Build.0 = Release|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Release|x64.ActiveCfg = Release|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Release|x64.Build.0 = Release|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Release|x86.ActiveCfg = Release|Any CPU + {CA54E8DB-2D43-408B-9F32-202993926BDA}.Release|x86.Build.0 = Release|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Debug|x64.ActiveCfg = Debug|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Debug|x64.Build.0 = Debug|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Debug|x86.ActiveCfg = Debug|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Debug|x86.Build.0 = Debug|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Release|Any CPU.Build.0 = Release|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Release|x64.ActiveCfg = Release|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Release|x64.Build.0 = Release|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Release|x86.ActiveCfg = Release|Any CPU + {69FECC01-0962-4016-9C28-9D67E394E93D}.Release|x86.Build.0 = Release|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Debug|x64.ActiveCfg = Debug|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Debug|x64.Build.0 = Debug|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Debug|x86.ActiveCfg = Debug|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Debug|x86.Build.0 = Debug|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Release|Any CPU.Build.0 = Release|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Release|x64.ActiveCfg = Release|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Release|x64.Build.0 = Release|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Release|x86.ActiveCfg = Release|Any CPU + {7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}.Release|x86.Build.0 = Release|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Debug|x64.ActiveCfg = Debug|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Debug|x64.Build.0 = Debug|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Debug|x86.ActiveCfg = Debug|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Debug|x86.Build.0 = Debug|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Release|Any CPU.ActiveCfg = Release|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Release|Any CPU.Build.0 = Release|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Release|x64.ActiveCfg = Release|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Release|x64.Build.0 = Release|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Release|x86.ActiveCfg = Release|Any CPU + {986DC63A-ED03-4510-A8DB-032ED01D0D13}.Release|x86.Build.0 = Release|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Debug|x64.ActiveCfg = Debug|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Debug|x64.Build.0 = Debug|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Debug|x86.Build.0 = Debug|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Release|Any CPU.Build.0 = Release|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Release|x64.ActiveCfg = Release|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Release|x64.Build.0 = Release|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Release|x86.ActiveCfg = Release|Any CPU + {7D643587-61D1-4276-92E6-C633F1C71AA4}.Release|x86.Build.0 = Release|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Debug|x64.ActiveCfg = Debug|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Debug|x64.Build.0 = Debug|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Debug|x86.ActiveCfg = Debug|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Debug|x86.Build.0 = Debug|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Release|Any CPU.Build.0 = Release|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Release|x64.ActiveCfg = Release|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Release|x64.Build.0 = Release|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Release|x86.ActiveCfg = Release|Any CPU + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3}.Release|x86.Build.0 = Release|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Debug|x64.Build.0 = Debug|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Debug|x86.ActiveCfg = Debug|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Debug|x86.Build.0 = Debug|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Release|Any CPU.Build.0 = Release|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Release|x64.ActiveCfg = Release|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Release|x64.Build.0 = Release|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Release|x86.ActiveCfg = Release|Any CPU + {807913E3-95A1-4293-80F8-D1FEDEDA94B8}.Release|x86.Build.0 = Release|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Debug|x64.ActiveCfg = Debug|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Debug|x64.Build.0 = Debug|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Debug|x86.ActiveCfg = Debug|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Debug|x86.Build.0 = Debug|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Release|Any CPU.Build.0 = Release|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Release|x64.ActiveCfg = Release|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Release|x64.Build.0 = Release|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Release|x86.ActiveCfg = Release|Any CPU + {AB1F8FC9-8726-48F2-B034-727BE5297B7F}.Release|x86.Build.0 = Release|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Debug|x64.ActiveCfg = Debug|x64 + {46D66569-3E63-470C-9469-289B5A0D12D4}.Debug|x64.Build.0 = Debug|x64 + {46D66569-3E63-470C-9469-289B5A0D12D4}.Debug|x86.ActiveCfg = Debug|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Debug|x86.Build.0 = Debug|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Release|Any CPU.Build.0 = Release|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Release|x64.ActiveCfg = Release|x64 + {46D66569-3E63-470C-9469-289B5A0D12D4}.Release|x64.Build.0 = Release|x64 + {46D66569-3E63-470C-9469-289B5A0D12D4}.Release|x86.ActiveCfg = Release|Any CPU + {46D66569-3E63-470C-9469-289B5A0D12D4}.Release|x86.Build.0 = Release|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Debug|x64.ActiveCfg = Debug|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Debug|x64.Build.0 = Debug|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Debug|x86.ActiveCfg = Debug|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Debug|x86.Build.0 = Debug|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Release|Any CPU.Build.0 = Release|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Release|x64.ActiveCfg = Release|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Release|x64.Build.0 = Release|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Release|x86.ActiveCfg = Release|Any CPU + {431A0845-C890-411B-82D3-DD2CECC36ACF}.Release|x86.Build.0 = Release|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Debug|x64.ActiveCfg = Debug|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Debug|x64.Build.0 = Debug|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Debug|x86.ActiveCfg = Debug|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Debug|x86.Build.0 = Debug|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Release|Any CPU.Build.0 = Release|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Release|x64.ActiveCfg = Release|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Release|x64.Build.0 = Release|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Release|x86.ActiveCfg = Release|Any CPU + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019}.Release|x86.Build.0 = Release|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Debug|x64.ActiveCfg = Debug|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Debug|x64.Build.0 = Debug|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Debug|x86.ActiveCfg = Debug|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Debug|x86.Build.0 = Debug|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Release|Any CPU.Build.0 = Release|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Release|x64.ActiveCfg = Release|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Release|x64.Build.0 = Release|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Release|x86.ActiveCfg = Release|Any CPU + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899}.Release|x86.Build.0 = Release|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Debug|x64.ActiveCfg = Debug|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Debug|x64.Build.0 = Debug|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Debug|x86.Build.0 = Debug|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Release|Any CPU.Build.0 = Release|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Release|x64.ActiveCfg = Release|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Release|x64.Build.0 = Release|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Release|x86.ActiveCfg = Release|Any CPU + {9A0D825F-45FB-439C-A57D-E206B4918C95}.Release|x86.Build.0 = Release|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Debug|x64.ActiveCfg = Debug|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Debug|x64.Build.0 = Debug|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Debug|x86.Build.0 = Debug|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Release|Any CPU.Build.0 = Release|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Release|x64.ActiveCfg = Release|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Release|x64.Build.0 = Release|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Release|x86.ActiveCfg = Release|Any CPU + {C9707878-5739-498B-A982-BEC90E63B458}.Release|x86.Build.0 = Release|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Debug|x64.ActiveCfg = Debug|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Debug|x64.Build.0 = Debug|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Debug|x86.ActiveCfg = Debug|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Debug|x86.Build.0 = Debug|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Release|Any CPU.Build.0 = Release|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Release|x64.ActiveCfg = Release|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Release|x64.Build.0 = Release|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Release|x86.ActiveCfg = Release|Any CPU + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC}.Release|x86.Build.0 = Release|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Debug|x64.Build.0 = Debug|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Debug|x86.Build.0 = Debug|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Release|Any CPU.Build.0 = Release|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Release|x64.ActiveCfg = Release|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Release|x64.Build.0 = Release|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Release|x86.ActiveCfg = Release|Any CPU + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3130,6 +7426,159 @@ Global {D8A95DA6-F62B-3E10-BC72-FABE1D9146F4} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} {501893AF-503A-30CC-ECDA-DFAC435E6D10} = {71DD55F8-E61A-49E8-B841-72984B85D38B} {D3656A8A-2504-4537-8C34-F2B93D8E53EC} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {27CA988F-D0B1-44A3-C522-7B0FE34AC26B} = {278CFF7F-D799-45EE-BADB-8C8380F05716} + {3FBFCD30-512F-5378-410A-570AC4EA4596} = {278CFF7F-D799-45EE-BADB-8C8380F05716} + {4A11C420-A2D1-C3D6-782C-68D0E71D3A02} = {278CFF7F-D799-45EE-BADB-8C8380F05716} + {24788952-DCC6-4D42-8D1C-B3B6D3130A63} = {4A11C420-A2D1-C3D6-782C-68D0E71D3A02} + {95E26BD5-1687-298F-F8B4-FABD41602EDB} = {278CFF7F-D799-45EE-BADB-8C8380F05716} + {3E75CC72-F514-405F-947D-CFE690DF5947} = {278CFF7F-D799-45EE-BADB-8C8380F05716} + {6D8B63C3-DD1E-8A5C-B171-6D20D3F89E60} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} + {5532F188-437D-423B-B883-1ECF3BFAF7C1} = {278CFF7F-D799-45EE-BADB-8C8380F05716} + {7CCAAAAC-B84A-93BB-8156-EAF8E95D8524} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} + {35478F32-2633-43E7-BFC2-CE7A9BFBA05F} = {7CCAAAAC-B84A-93BB-8156-EAF8E95D8524} + {879AE820-20CC-46CA-9009-64D32502B902} = {7CCAAAAC-B84A-93BB-8156-EAF8E95D8524} + {0D69001C-8230-494F-8CE8-0ECB56EE879E} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} + {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} = {050F69CA-1EB1-4D46-B52C-018637E6D525} + {B414F146-CBB6-4B0A-B431-0E5C3EB03B3C} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {D330949C-D1F0-4ACB-875A-31103D037C8E} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {12AFF030-3076-4AA8-9455-376135FEE8B2} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {CEAC9DDF-09B5-4458-868C-5C55AF2D1004} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {3E67E7E7-E882-9F59-D079-FC5B21A859BB} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {144D3191-A382-4F2E-A66E-93D4ADDBF772} = {3E67E7E7-E882-9F59-D079-FC5B21A859BB} + {953FC22C-C991-4592-A79C-7B47F0643DD9} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {413C9216-A248-4561-9051-47D8CB7D5E03} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {1A5C4376-871E-474B-8EE2-EBCF1FDCD275} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341} + {B62A835C-7EAF-465C-97C5-CD7D33A80DC1} = {050F69CA-1EB1-4D46-B52C-018637E6D525} + {B1288289-8E4E-6C15-7A35-26F58963379A} = {050F69CA-1EB1-4D46-B52C-018637E6D525} + {40195C95-70C5-46D9-B315-8C4853D61BB8} = {B1288289-8E4E-6C15-7A35-26F58963379A} + {5AB47124-984B-4FBA-9091-906E92C21051} = {B1288289-8E4E-6C15-7A35-26F58963379A} + {422830F2-BA7F-4352-B1FA-9FEFE05A6473} = {B1288289-8E4E-6C15-7A35-26F58963379A} + {E6E030C1-2EED-4AB0-B01E-FBAD304D54D2} = {B1288289-8E4E-6C15-7A35-26F58963379A} + {533DA3F1-0980-49AD-9671-79B67708D5B8} = {B1288289-8E4E-6C15-7A35-26F58963379A} + {E76F260F-2C64-4AAA-968A-0897A53B3CC4} = {B1288289-8E4E-6C15-7A35-26F58963379A} + {93599B04-1843-177F-5584-7EF3F0570CA1} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {537B871D-3F5B-4B3D-8802-C51EF3B74C56} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {B63048B4-A819-4055-8F5D-298234C1B370} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {2536C0B3-710C-4E64-8902-4087B02850A5} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {9BDBE4AE-2C2F-407C-B505-111DF20E4B75} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {C0BAF5C2-A612-C75B-506C-C44F4931DFAF} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {76AA26DD-63AA-4F75-9D82-783C5F153D1F} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {2912AFB9-D603-3E64-AD11-26DE507B708A} = {E1D77C39-936E-4ADB-8350-74B5A4401280} + {1B102E23-1FAE-426B-8A4F-640E8C41F23E} = {E1D77C39-936E-4ADB-8350-74B5A4401280} + {45205C9A-D287-40D4-A591-FBF46BE1EE8B} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} + {2B5109A9-60F0-FA4F-248A-32AEA1B9E3E7} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} + {A9C8AE41-49E9-B0D1-B9C2-3707A36590C0} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} + {7647491A-E6D3-3A0A-FAC9-B20F025B9228} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} + {11C1845A-12CF-43AD-D569-D94A7B64BA41} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} + {CA54E8DB-2D43-408B-9F32-202993926BDA} = {6D8B63C3-DD1E-8A5C-B171-6D20D3F89E60} + {35B67E21-F95C-A128-AAC7-98ECD309BB08} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {81B5ADF0-0FE7-38B6-BB1F-258668F73A55} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {937B2B28-C6F9-F736-CA84-6F41EC001F72} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {89E47D2D-0FED-252E-89BF-3867D1F3EA7C} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {F4C0F0A1-8F1E-2F16-0055-3BD455FB79A8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {356B940A-B913-2682-98C3-C3E57573DC3A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {3D234EAB-5375-DFC1-C54A-EFE9FA9110CF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {094E084C-39C6-61F1-3E88-AEB60E3E12BB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {B364655D-B626-F63D-0168-22FFCA099451} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {5F9756D8-F7B6-5C70-7839-41F6CD4BC35E} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {52B8A00A-66D5-4CCC-1708-B7B12877476A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {A90BEEB2-CAD6-15E1-5481-4E795477880B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {A0E0B6B2-E393-4084-0D2F-7CE532D8EBC6} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {6ED1FE0C-F08F-A029-DA61-649ECC4EFE89} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {2030957B-7247-3074-4A89-293EB0AA1680} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {44F409E5-506A-6C09-9445-559D8EA13438} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {73789618-605D-5565-3CE1-9A1F53A92FAC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {12BA5DEA-6543-39F3-EAA8-E90F4D4C6AA9} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {D34E636E-4C6A-4267-8BB3-134B93CAAA5E} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {B9A6DAF3-39E7-DE94-2DB0-CD0B4116E99B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {68939C6E-528E-0D37-2DD0-E823FED9435B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {B76C70D4-3F9B-3E2A-F379-0332B15D8EBB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {B9D4101C-6AAC-42C1-B954-FB7DB4DB8E3A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {2EC51B34-C119-621A-0014-760CE5F0B491} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {65A02EAC-D630-FFDA-CE85-0857516332BE} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {101F2412-D5EA-8970-B026-1C6453AA08C4} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {5F7FBF59-C0D3-84AA-9D5B-3B7DBEFAFF10} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {B8DC2BA7-8B7D-40E2-E137-05BBC8882581} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {16366B21-4A73-288D-918C-33B83FB95333} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {DB8C5291-84BA-FBFE-87F8-38445F59A0EB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {A0EA3843-5486-7EBB-8046-F2617B0EAAC0} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {24DA9CFA-5161-32A2-BB8F-85042131ECD8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {9CB38DED-C950-B157-51E5-03C2171518D8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {E801F37E-5B4C-8F17-D435-586F70A5FB6B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C05949C5-7FE3-3C35-8FFE-8420853C236C} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {05F10A2E-FF30-C377-9643-B16AFC4A5677} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {A469D233-B14F-E271-A58C-FAC4DF0CF0AF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {0EC0B80D-0095-BDF1-9D48-C12A680C09F8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {ED7C9B4D-1423-7F30-6663-1AAD3C143790} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {50A61679-4740-2BAD-E513-0405933795B2} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {CD032C5F-71AD-CC26-983F-EE04FB047671} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C38244D1-6253-FE83-6B5E-EB2C940F784A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {49C2D696-8323-D094-7735-8036B36BE94E} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {FD3DF346-45EC-03A8-83EC-320E87CAAF03} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {72DA18D6-3E2E-8405-9995-C3F637953FDC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {9A1E1AF6-5A6B-7572-69BE-CDD853571ABA} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {FE782471-E276-11AF-680D-2172C1366A5A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {9EC985B7-BD0C-2B4E-25B2-CD76C2C7D3BF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {9890F303-1C13-1F9C-925B-6E34EE635A8F} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {37671097-DCFA-02DB-E294-91170F0317C8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {08D3AE13-DF83-0365-7A9C-E1FC46B15049} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {8B265EE8-F993-AAA1-8531-1130A87A6715} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {0A8E0E66-6661-8F93-21B7-CB46A1935836} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {F338708A-E76C-01F2-53B8-0EFDD8EAA9A2} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C9DED555-89F1-EFF5-12D7-836E6F0E284F} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {AB4D81C8-3EE1-1F12-4731-2B94DEFBE435} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {43000BE9-143A-01E4-1469-C86029693138} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {8D539B1E-2EB3-BA6B-47CB-99B99C1F8FC5} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C8A30850-71AD-845B-BF71-D71B9A8FE5CC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {504F48A4-1C70-D701-C8E4-D05413E5B131} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C443EA80-01A0-A500-772B-D0EA14C483EB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {D81C36AE-DD33-8906-6171-06ECF33BCB7D} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C2443422-306D-6070-EBFF-7C045B094B59} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {07B5DDA6-B3C0-F6B4-A0FC-9BABD19573FE} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {175217BC-7F9A-AC50-3E93-C1738A692DF5} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {EA11F743-E9FF-B9BB-C9C1-0ABAE76A3257} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {56BC7864-C3E0-5F88-F2F8-5AD1B237E0AF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {2A1E82CB-98C6-234F-80E1-C46801FEC588} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {D248FAC1-E2FD-AD1A-B0E4-4929469A6C50} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C545B622-0BBA-9C9E-17D1-6B85C13C8DC4} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {0A5BCC31-A229-6A1D-80EB-26AD3AE77047} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {0583A2B5-9DCB-1DAC-C305-ED8DB17630F4} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {3F356281-7030-86EB-F242-63BC789659DB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {1D457442-2A0A-9092-8BFB-3C89D773A0C7} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {441E5896-6300-C5B7-9CFA-732CBB1515C9} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {80EA4566-9782-6860-B55F-7CE0C95FB8B7} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {FC00484A-3F54-AC5D-EEFD-11A1386C8D58} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {6F175F33-D423-8E9A-D6D0-3685DB455477} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {FB14C50C-71E2-7AF8-503C-5ADBD4B5FEFF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {130BF9BF-7CEA-64B4-18C0-4BDE1D2802AB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {2F4EDBF9-0A6F-323C-BEA3-C8E90D39AC36} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {3B2EE9B3-8456-D155-0FA8-8094CD356F05} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C6829286-01AD-CC04-88DA-2C3C921778C1} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {26C8CA75-C75C-76DA-4A12-995AFE8124D7} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {F814C598-1DAB-DACC-B4EB-A85066D3599A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {EF2EE4FB-D5C9-A64E-C754-755C13A8C438} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {C45EDC7F-0CB4-40E8-F931-DE1CBDE52126} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {69FECC01-0962-4016-9C28-9D67E394E93D} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {986DC63A-ED03-4510-A8DB-032ED01D0D13} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {99FF9800-36D6-579C-4E45-F30735702E83} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {4344981E-87E8-4FAA-BCC3-09147FD3CBB3} = {37C1201C-8936-4BAC-9BA1-7B8CAB87BD60} + {AD6C8ADC-03EE-A995-3861-1C8B097D1EEF} = {827CB9D9-EE91-47E1-BCF3-3DAC2C45EE57} + {DADEAE32-375E-1DCB-51F7-15E49EB31C27} = {827CB9D9-EE91-47E1-BCF3-3DAC2C45EE57} + {C327BA3D-AE71-5BB1-A358-58367EA08EC5} = {827CB9D9-EE91-47E1-BCF3-3DAC2C45EE57} + {8FED1CC7-9896-C818-5CAF-1325280483F8} = {37C1201C-8936-4BAC-9BA1-7B8CAB87BD60} + {807913E3-95A1-4293-80F8-D1FEDEDA94B8} = {8FED1CC7-9896-C818-5CAF-1325280483F8} + {03339228-3758-A62D-24B8-FD6F2401F4A9} = {8FED1CC7-9896-C818-5CAF-1325280483F8} + {AB1F8FC9-8726-48F2-B034-727BE5297B7F} = {03339228-3758-A62D-24B8-FD6F2401F4A9} + {00C67240-0466-0445-BAE9-824583C685F4} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} + {46D66569-3E63-470C-9469-289B5A0D12D4} = {00C67240-0466-0445-BAE9-824583C685F4} + {431A0845-C890-411B-82D3-DD2CECC36ACF} = {00C67240-0466-0445-BAE9-824583C685F4} + {E30A1BE4-EB9C-466A-861A-C71BA8D5B019} = {00C67240-0466-0445-BAE9-824583C685F4} + {EC2A7EB9-1F25-4534-83EB-3E7A072E5899} = {00C67240-0466-0445-BAE9-824583C685F4} + {9A0D825F-45FB-439C-A57D-E206B4918C95} = {00C67240-0466-0445-BAE9-824583C685F4} + {C9707878-5739-498B-A982-BEC90E63B458} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} + {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} + {DA21C175-58F7-4701-B0B1-E0AA5EB624FA} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DAF8B3ED-D51A-4CDA-8BF1-1E032CF0AC4F} diff --git a/CSharpBible/Calc/Directory.Packages.props b/CSharpBible/Calc/Directory.Packages.props index 914e7544b..eb8e34da8 100644 --- a/CSharpBible/Calc/Directory.Packages.props +++ b/CSharpBible/Calc/Directory.Packages.props @@ -18,13 +18,13 @@ - + - - + + From 0d099bd59166eee41c9e9ae4deee4c0fc8c9e108 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:15:26 +0200 Subject: [PATCH 141/569] AboutEx --- CSharpBible/Data/Directory.Build.props | 13 + .../Document.Pdf/Document.Pdf.csproj | 13 + .../Document.Pdf/Model/PdfContentBase.cs | 75 ++++++ .../Document.Pdf/Model/PdfHeadline.cs | 10 + .../Document.Pdf/Model/PdfNodeBase.cs | 46 ++++ .../Document.Pdf/Model/PdfParagraph.cs | 13 + .../Document.Pdf/Model/PdfSection.cs | 41 +++ .../Document.Pdf/Model/PdfSpan.cs | 44 +++ .../Document.Pdf/Model/PdfStyle.cs | 26 ++ .../DocumentUtils/Document.Pdf/PdfDocument.cs | 90 +++++++ .../Document.Pdf/Render/IPdfEngine.cs | 13 + .../Document.Pdf/Render/PdfRenderer.cs | 41 +++ .../Document.Pdf/Render/PdfSharpEngine.cs | 108 ++++++++ .../PdfExample/PdfExample.csproj | 15 ++ .../Data/DocumentUtils/PdfExample/Program.cs | 17 ++ CSharpBible/Data/NebelEbook/Choice.cs | 31 +++ CSharpBible/Data/NebelEbook/NebelEbook.csproj | 16 ++ CSharpBible/Data/NebelEbook/Program.cs | 251 ++++++++++++++++++ CSharpBible/Data/NebelEbook/StoryNode.cs | 48 ++++ .../Models/Interfaces/IProductionSystem.cs | 5 + .../Interfaces/Genealogic/IGenSource.cs | 46 ++++ 21 files changed, 962 insertions(+) create mode 100644 CSharpBible/Data/Directory.Build.props create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Document.Pdf.csproj create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs create mode 100644 CSharpBible/Data/DocumentUtils/PdfExample/PdfExample.csproj create mode 100644 CSharpBible/Data/DocumentUtils/PdfExample/Program.cs create mode 100644 CSharpBible/Data/NebelEbook/Choice.cs create mode 100644 CSharpBible/Data/NebelEbook/NebelEbook.csproj create mode 100644 CSharpBible/Data/NebelEbook/Program.cs create mode 100644 CSharpBible/Data/NebelEbook/StoryNode.cs create mode 100644 CSharpBible/Games/Galaxia_Base/Models/Interfaces/IProductionSystem.cs create mode 100644 CSharpBible/Libraries/GenInterfaces/Interfaces/Genealogic/IGenSource.cs diff --git a/CSharpBible/Data/Directory.Build.props b/CSharpBible/Data/Directory.Build.props new file mode 100644 index 000000000..ff7671820 --- /dev/null +++ b/CSharpBible/Data/Directory.Build.props @@ -0,0 +1,13 @@ + + + ..\..\..\bin\$(MSBuildProjectName)\ + ..\..\..\obj.net\$(MSBuildProjectName)\ + $(MSBuildProjectName.Replace(".","_").Replace("_net","")) + preview + enable + disable + JC-Soft + Joe Care + Copyright © JC-Soft 2025 + + diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Document.Pdf.csproj b/CSharpBible/Data/DocumentUtils/Document.Pdf/Document.Pdf.csproj new file mode 100644 index 000000000..4ced4593e --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Document.Pdf.csproj @@ -0,0 +1,13 @@ + + + net9.0 + enable + enable + + + + + + + + \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs new file mode 100644 index 000000000..395b05b07 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs @@ -0,0 +1,75 @@ +using System.Text; +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public abstract class PdfContentBase : PdfNodeBase, IDocContent +{ + private readonly StringBuilder _text = new(); + + public virtual string TextContent + { + get => _text.ToString(); + set + { + _text.Clear(); + if (!string.IsNullOrEmpty(value)) _text.Append(value); + } + } + + public void AppendText(string text) + { + if (!string.IsNullOrEmpty(text)) _text.Append(text); + } + + public virtual IDocContent AddLineBreak() + { + _text.AppendLine(); + return this; + } + + public virtual IDocContent AddNBSpace(IDocFontStyle docFontStyle) + { + _text.Append('\u00A0'); + return this; + } + + public virtual IDocContent AddTab(IDocFontStyle docFontStyle) + { + _text.Append('\t'); + return this; + } + + public virtual IDocSpan AddSpan(IDocFontStyle docFontStyle) + => AddChild(new PdfSpan(docFontStyle)); + + public virtual IDocSpan AddSpan(string text, IList docFontStyle) + { + var span = new PdfSpan(PdfFontStyle.Default) { TextContent = text }; + return AddChild(span); + } + + public virtual IDocSpan AddSpan(string text, IDocFontStyle docFontStyle) + { + var span = new PdfSpan(docFontStyle) { TextContent = text }; + return AddChild(span); + } + + public virtual IDocSpan AddLink(IDocFontStyle docFontStyle) + { + var span = new PdfSpan(docFontStyle) { IsLink = true }; + return AddChild(span); + } + + public abstract IDocStyleStyle GetStyle(); + + public virtual string GetTextContent(bool xRecursive = true) + { + if (!xRecursive) return TextContent; + var sb = new StringBuilder(); + sb.Append(TextContent); + foreach (var c in _children) + if (c is IDocContent ic) sb.Append(ic.GetTextContent(true)); + return sb.ToString(); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs new file mode 100644 index 000000000..9e0dd8b17 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs @@ -0,0 +1,10 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public sealed class PdfHeadline : PdfContentBase +{ + public int Level { get; } + public PdfHeadline(int level) => Level = Math.Clamp(level, 1, 6); + public override IDocStyleStyle GetStyle() => new PdfStyle($"H{Level}"); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs new file mode 100644 index 000000000..c111bbba2 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs @@ -0,0 +1,46 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public abstract class PdfNodeBase : IDocElement +{ + protected readonly List _children = new(); + public IReadOnlyList Children => _children; + public PdfNodeBase? Parent { get; private set; } + + public IDictionary Attributes => throw new NotImplementedException(); + + public IList Nodes => throw new NotImplementedException(); + + protected T AddChild(T element) where T : IDocElement + { + if (element is PdfNodeBase p) p.Parent = this; + _children.Add(element); + return element; + } + + public virtual IDocElement AppendDocElement(Enum aType) => throw new NotSupportedException(); + public virtual IDocElement AppendDocElement(Enum aType, Type aClass) => AppendDocElement(aType); + public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type aClass) => AppendDocElement(aType); + + public IEnumerable Enumerate() + { + yield return this; + foreach (var child in _children) + { + foreach (var desc in child.Enumerate()) + { + yield return desc; + } + } + } + + public string? GetAttribute(string name) + => Attributes.TryGetValue(name, out string? value) ? value : null; + + public IDOMElement AddChild(IDOMElement element) + { + Nodes.Add(element); + return element; + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs new file mode 100644 index 000000000..d44e761a1 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs @@ -0,0 +1,13 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public sealed class PdfParagraph : PdfContentBase, IDocParagraph +{ + public string? StyleName { get; } + public PdfParagraph(string? styleName = null) => StyleName = styleName; + + public IDocSpan AddBookmark(IDocFontStyle docFontStyle) => AddSpan(docFontStyle); + + public override IDocStyleStyle GetStyle() => new PdfStyle(StyleName); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs new file mode 100644 index 000000000..5567370d3 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs @@ -0,0 +1,41 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public sealed class PdfSection : PdfNodeBase, IDocSection +{ + public IDocParagraph AddParagraph(string ATextStyleName) + { + var p = new PdfParagraph(ATextStyleName); + return AddChild(p); + } + + public IDocContent AddHeadline(int aLevel) + { + var h = new PdfHeadline(aLevel); + return AddChild(h); + } + + public IDocContent AddTOC(string aName, int aLevel) + { + var p = new PdfParagraph("TOC"); + p.AppendText($"{aName} (bis H{aLevel})"); + return AddChild(p); + } + + public IEnumerable Enumerate() + { + var stack = new Stack(); + stack.Push(this); + while (stack.Count > 0) + { + var cur = stack.Pop(); + yield return cur; + if (cur is PdfNodeBase b) + { + for (int i = b.Children.Count - 1; i >= 0; i--) + stack.Push(b.Children[i]); + } + } + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs new file mode 100644 index 000000000..65e560657 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs @@ -0,0 +1,44 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public sealed class PdfSpan : PdfContentBase, IDocSpan +{ + public IDictionary Attributes { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + public IDocFontStyle FontStyle { get; private set; } + public bool IsLink { get; set; } + public string? Href + { + get => Attributes.TryGetValue("href", out var v) ? v : null; + set { if (value is null) Attributes.Remove("href"); else Attributes["href"] = value; IsLink = value != null; } + } + + public PdfSpan(IDocFontStyle style) => FontStyle = style; + + public override IDocStyleStyle GetStyle() => new PdfStyle(FontStyle.Name); + + public void SetStyle(object fs) + { + throw new NotImplementedException(); + } + + public void SetStyle(IDocFontStyle fs) + { + FontStyle = fs; + } + + public void SetStyle(IUserDocument doc, object aFont) + { + throw new NotImplementedException(); + } + + public void SetStyle(IUserDocument doc, IDocFontStyle aFont) + { + FontStyle = aFont; + } + + public void SetStyle(string aStyleName) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs new file mode 100644 index 000000000..f2f8e8652 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs @@ -0,0 +1,26 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Pdf.Model; + +public sealed class PdfStyle : IDocStyleStyle +{ + public string? Name { get; } + public IDictionary Properties { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + public PdfStyle(string? name = null, IDictionary? props = null) + { + Name = name; + if (props != null) foreach (var kv in props) Properties[kv.Key] = kv.Value; + } +} + +public sealed class PdfFontStyle : IDocFontStyle +{ + public string? Name { get; init; } = "Arial"; + public bool Bold { get; init; } + public bool Italic { get; init; } + public bool Underline { get; init; } + public string? Color { get; init; } + public string? FontFamily { get; init; } = "Arial"; + public double? FontSizePt { get; init; } = 12; + public static readonly PdfFontStyle Default = new(); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs new file mode 100644 index 000000000..fba7c47ef --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs @@ -0,0 +1,90 @@ +using Document.Base.Models.Interfaces; +using Document.Pdf.Model; +using Document.Pdf.Render; + +namespace Document.Pdf; + +public sealed class PdfDocument : IUserDocument +{ + private bool _isModified; + public IDocElement Root { get; private set; } + + public PdfDocument() + { + Root = new PdfSection(); + } + + public PdfDocument(IDocElement root) + { + Root = root is PdfSection + ? root + : throw new ArgumentException("Root muss vom Typ PdfSection sein.", nameof(root)); + } + + public bool IsModified => _isModified; + + public IDocParagraph AddParagraph(string cStylename) + { + _isModified = true; + return EnsureRoot().AddParagraph(cStylename); + } + + public IDocContent AddHeadline(int nLevel) + { + _isModified = true; + return EnsureRoot().AddHeadline(nLevel); + } + + public IDocContent AddTOC(string cName, int nLevel) + { + _isModified = true; + return EnsureRoot().AddTOC(cName, nLevel); + } + + public IEnumerable Enumerate() + => EnsureRoot().Enumerate(); + + public bool SaveTo(string cOutputPath) + { + try + { + using var engine = new PdfSharpEngine(); + PdfRenderer.Render(EnsureRoot(), engine); + engine.SaveToFile(cOutputPath); + _isModified = false; + return true; + } + catch + { + return false; + } + } + + public bool SaveTo(Stream sOutputStream, object? options = null) + { + try + { + using var engine = new PdfSharpEngine(); + PdfRenderer.Render(EnsureRoot(), engine); + engine.SaveToStream(sOutputStream); + _isModified = false; + return true; + } + catch + { + return false; + } + } + + public bool LoadFrom(string cInputPath) => false; // PDF Laden nicht unterstützt (Minimal) + public bool LoadFrom(Stream sInputStream, object? options = null) => false; + + private PdfSection EnsureRoot() + { + if (Root is PdfSection sec) return sec; + sec = new PdfSection(); + Root = sec; + _isModified = true; + return sec; + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs new file mode 100644 index 000000000..02d7928cb --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs @@ -0,0 +1,13 @@ +namespace Document.Pdf.Render; + +public interface IPdfEngine : IDisposable +{ + void BeginDocument(); + void AddPage(); + void SetFont(string family, bool bold, bool italic, double sizePt); + void WriteText(string text); + void WriteLine(string text); + void AddHeadline(int level, string text); + void SaveToFile(string path); + void SaveToStream(Stream stream); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs new file mode 100644 index 000000000..2213241a7 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs @@ -0,0 +1,41 @@ +using Document.Base.Models.Interfaces; +using Document.Pdf.Model; + +namespace Document.Pdf.Render; + +public static class PdfRenderer +{ + public static void Render(PdfSection root, IPdfEngine engine) + { + engine.BeginDocument(); + foreach (var node in root.Children) + WriteNode(node, engine); + } + + private static void WriteNode(IDocElement node, IPdfEngine engine) + { + switch (node) + { + case PdfHeadline h: + engine.AddHeadline(h.Level, h.GetTextContent(true)); + break; + + case PdfParagraph p: + var text = p.GetTextContent(true); + if (!string.IsNullOrWhiteSpace(text)) + engine.WriteText(text); + break; + + case PdfSection s: + foreach (var c in s.Children) + WriteNode(c, engine); + break; + + case PdfContentBase c: + var inline = c.GetTextContent(true); + if (!string.IsNullOrWhiteSpace(inline)) + engine.WriteLine(inline); + break; + } + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs new file mode 100644 index 000000000..18e799a62 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs @@ -0,0 +1,108 @@ +using PdfSharp.Drawing; +using PdfSharp.Fonts; +using PdfSharp.Pdf; +namespace Document.Pdf.Render; + +public sealed class PdfSharpEngine : IPdfEngine +{ + private PdfSharp.Pdf.PdfDocument? _doc; + private PdfPage? _page; + private XGraphics? _gfx; + private XFont _font; + private readonly XSolidBrush _brush = XBrushes.Black; + private double _y; + private double _left = 40; + private double _top = 40; + private double _right = 40; + + public PdfSharpEngine() + { + GlobalFontSettings.UseWindowsFontsUnderWindows = true; + _font = new("Arial", 12, XFontStyleEx.Regular); + } + + private double ContentWidth => (_page?.Width ?? 595) - _left - _right; + private double LineHeight => _font.GetHeight(); + + public void BeginDocument() + { + + _doc = new PdfSharp.Pdf.PdfDocument(); + AddPage(); + SetFont("Arial", bold: false, italic: false, sizePt: 12); + } + + public void AddPage() + { + _page = (_doc ?? throw new InvalidOperationException()).AddPage(); + _gfx?.Dispose(); + _gfx = XGraphics.FromPdfPage(_page); + _y = _top; + } + + public void SetFont(string family, bool bold, bool italic, double sizePt) + { + var style = XFontStyleEx.Regular; + if (bold) style |= XFontStyleEx.Bold; + if (italic) style |= XFontStyleEx.Italic; + _font = new XFont(string.IsNullOrWhiteSpace(family) ? "Arial" : family, sizePt <= 0 ? 12 : sizePt, style); + } + + public void WriteText(string text) + { + if (string.IsNullOrEmpty(text)) return; + var lines = text.Replace("\r\n", "\n").Replace('\r', '\n').Split('\n'); + foreach (var line in lines) + { + EnsurePageSpace(); + _gfx!.DrawString(line, _font, _brush, new XRect(_left, _y, ContentWidth, LineHeight), XStringFormats.TopLeft); + _y += LineHeight; + } + } + + public void WriteLine(string text) + { + WriteText(text); + } + + public void AddHeadline(int level, string text) + { + var size = level switch + { + 1 => 20, + 2 => 18, + 3 => 16, + 4 => 14, + 5 => 12, + _ => 11 + }; + var prev = _font; + SetFont(prev.Name2, bold: true, italic: false, sizePt: size); + WriteText(text); + _y += LineHeight * 0.5; + _font = prev; + } + + public void SaveToFile(string path) + { + _doc?.Save(path); + } + + public void SaveToStream(Stream stream) + { + _doc?.Save(stream, closeStream: false); + } + + private void EnsurePageSpace() + { + if (_page is null || _gfx is null) return; + if (_y + LineHeight > _page.Height - _top) + AddPage(); + } + + public void Dispose() + { + _gfx?.Dispose(); + _doc?.Dispose(); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/PdfExample/PdfExample.csproj b/CSharpBible/Data/DocumentUtils/PdfExample/PdfExample.csproj new file mode 100644 index 000000000..53294d2ac --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/PdfExample/PdfExample.csproj @@ -0,0 +1,15 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + + diff --git a/CSharpBible/Data/DocumentUtils/PdfExample/Program.cs b/CSharpBible/Data/DocumentUtils/PdfExample/Program.cs new file mode 100644 index 000000000..51127345f --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/PdfExample/Program.cs @@ -0,0 +1,17 @@ +using Document.Base.Models.Interfaces; +using System.Reflection.Metadata; + +namespace PdfExample; + +internal class Program +{ + static void Main(string[] args) + { + IUserDocument pdf = new Document.Pdf.PdfDocument(); + var h1 = pdf.AddHeadline(1); + h1.TextContent = "PDF Titel"; + var p = pdf.AddParagraph("Body"); + p.AppendText("Hallo PDF-Welt!"); + pdf.SaveTo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "example.pdf")); + } +} diff --git a/CSharpBible/Data/NebelEbook/Choice.cs b/CSharpBible/Data/NebelEbook/Choice.cs new file mode 100644 index 000000000..bbbe1347c --- /dev/null +++ b/CSharpBible/Data/NebelEbook/Choice.cs @@ -0,0 +1,31 @@ +namespace NebelEbook; + +/// +/// Repräsentiert eine auswählbare Option innerhalb des E-Books, +/// die zu einem Zielabschnitt mit der angegebenen Kennung verweist. +/// +public class Choice +{ + /// + /// Der anzuzeigende Text der Auswahl (z. B. Button- oder Link-Beschriftung). + /// + public string Label { get; } + + /// + /// Die Zielkennung (ID), auf die diese Auswahl verweist + /// (z. B. Kapitel-/Abschnitts- oder Knoten-ID). + /// + public string TargetId { get; } + + /// + /// Erstellt eine neue Auswahl mit Anzeigetext und Zielkennung. + /// + /// Der anzuzeigende Text der Auswahl. + /// Die Kennung des Zielabschnitts, zu dem navigiert werden soll. + public Choice(string label, string targetId) + { + Label = label; + TargetId = targetId; + } +} + diff --git a/CSharpBible/Data/NebelEbook/NebelEbook.csproj b/CSharpBible/Data/NebelEbook/NebelEbook.csproj new file mode 100644 index 000000000..3c13f6e71 --- /dev/null +++ b/CSharpBible/Data/NebelEbook/NebelEbook.csproj @@ -0,0 +1,16 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + + + diff --git a/CSharpBible/Data/NebelEbook/Program.cs b/CSharpBible/Data/NebelEbook/Program.cs new file mode 100644 index 000000000..4d7f183c2 --- /dev/null +++ b/CSharpBible/Data/NebelEbook/Program.cs @@ -0,0 +1,251 @@ +using MigraDoc.DocumentObjectModel; +using PdfSharp.Drawing; +using PdfSharp.Drawing.Layout; +using PdfSharp.Fonts; +using PdfSharp.Pdf; +using PdfSharp.Pdf.Annotations; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using SkiaSharp; + +namespace NebelEbook; + +class Program +{ + static void Main() + { + GlobalFontSettings.UseWindowsFontsUnderWindows = true; + + var nodes = BuildStoryNodes(); + + PdfDocument doc = new PdfDocument(); + doc.Info.Title = "Nebel über Bretten – Interaktives eBook"; + + var fontTitle = new XFont("Arial", 18, XFontStyleEx.Bold); + var fontBody = new XFont("Arial", 12, XFontStyleEx.Regular); + var fontLink = new XFont("Arial", 12, XFontStyleEx.Underline); + + // Inhaltsverzeichnis + var tocPage = doc.AddPage(); + var gfxToc = XGraphics.FromPdfPage(tocPage); + gfxToc.DrawString("Inhaltsverzeichnis", fontTitle, XBrushes.Black, new XRect(0, 40, tocPage.Width, 20), XStringFormats.TopCenter); + + double tocY = 80; + foreach (var node in nodes) + { + gfxToc.DrawString(node.Title, fontBody, XBrushes.Black, 40, tocY); + var rect = new XRect(300, tocY - 12, 200, 20); + gfxToc.DrawString("Gehe zu Kapitel", fontLink, XBrushes.Blue, rect, XStringFormats.TopLeft); + + var link = new PdfLinkAnnotation() + { + Rectangle = rect.ToPdfRect(), + }; + tocPage.Annotations.Add(link); + + tocY += 25; + } + + // Kapitel-Seiten + var pageIndexMap = new Dictionary(); + foreach (var node in nodes) + { + var page = doc.AddPage(); + pageIndexMap[node.Id] = page; + var gfx = XGraphics.FromPdfPage(page); + + double y = 40; + gfx.DrawString(node.Title, fontTitle, XBrushes.Black, 40, y); + y += 30; + + foreach (var para in node.Paragraphs) + { + var tf = new XTextFormatter(gfx); + tf.DrawString(para, fontBody, XBrushes.Black, new XRect(40, y, page.Width - 80, 100), XStringFormats.TopLeft); + y += 60; + } + + if (node.Choices != null && node.Choices.Count > 0) + { + y += 20; + gfx.DrawString("Deine Wahl:", fontBody, XBrushes.Black, 40, y); + y += 20; + + foreach (var choice in node.Choices) + { + var rect = new XRect(60, y - 12, 400, 20); + gfx.DrawString("→ " + choice.Label, fontLink, XBrushes.Blue, rect, XStringFormats.TopLeft); + + var link = new PdfLinkAnnotation() + { + Rectangle = rect.ToPdfRect(), + }; + page.Annotations.Add(link); + + y += 20; + } + } + } + + // Links aktualisieren + int tocIndex = 0; + foreach (var node in nodes) + { + var tocLink = tocPage.Annotations[tocIndex] as PdfLinkAnnotation; + tocIndex++; + } + + // Kapitel-Links aktualisieren + foreach (var node in nodes) + { + var page = pageIndexMap[node.Id]; + int choiceIndex = 0; + foreach (var choice in node.Choices) + { + var link = page.Annotations[choiceIndex] as PdfLinkAnnotation; + choiceIndex++; + } + } + + AddFlowchartPage(doc, nodes); + + doc.Save("Nebel_ueber_Bretten_Interaktiv.pdf"); + Console.WriteLine("PDF erstellt: Nebel_ueber_Bretten_Interaktiv.pdf"); + } + static void AddFlowchartPage(PdfDocument pdf, List nodes) + { + int width = 1200; + int height = 1600; + using var bitmap = new SKBitmap(width, height); + using var canvas = new SKCanvas(bitmap); + canvas.Clear(SKColors.White); + + var paintText = new SKPaint + { + Color = SKColors.Black, + TextSize = 20, + IsAntialias = true + }; + var paintRect = new SKPaint + { + Color = SKColors.LightGray, + IsAntialias = true, + Style = SKPaintStyle.Fill + }; + var paintLine = new SKPaint + { + Color = SKColors.DarkSlateGray, + StrokeWidth = 2, + IsAntialias = true + }; + + // Einfache Layout-Logik: Knoten untereinander + int x = 100; + int y = 80; + int boxW = 300; + int boxH = 60; + int vSpacing = 100; + + var positions = new Dictionary(); + + foreach (var node in nodes) + { + var rect = new SKRect(x, y, x + boxW, y + boxH); + canvas.DrawRect(rect, paintRect); + canvas.DrawText(node.Title, x + 10, y + 35, paintText); + positions[node.Id] = new SKPoint(x + boxW / 2, y + boxH); + + y += boxH + vSpacing; + } + + // Pfeile zeichnen + foreach (var node in nodes) + { + if (node.Choices == null) continue; + foreach (var choice in node.Choices) + { + if (positions.ContainsKey(node.Id) && positions.ContainsKey(choice.TargetId)) + { + var start = positions[node.Id]; + var end = positions[choice.TargetId]; + canvas.DrawLine(start.X, start.Y, end.X, end.Y - boxH, paintLine); + } + } + } + + // In MemoryStream speichern + using var imgStream = new MemoryStream(); + using (var image = SKImage.FromBitmap(bitmap)) + using (var data = image.Encode(SKEncodedImageFormat.Png, 100)) + { + data.SaveTo(imgStream); + } + + var page= pdf.AddPage(); + + } + + static List BuildStoryNodes() + { + var nodes = new List(); + + nodes.Add(new StoryNode( + "kap1", + "Kapitel 1 – Fund im Nebel", + new[] + { + "Der Nebel hing schwer über der Melanchthonstraße...", + "Im Salon: Friedrich von Hohenberg, tot im Sessel..." + }, + new List + { + new Choice("Clara sofort befragen", "kap2_clara"), + new Choice("Tatort gründlich untersuchen", "kap2_tatort") + } + )); + + nodes.Add(new StoryNode( + "kap2_clara", + "Kapitel 2 – Gespräch mit Clara", + new[] + { + "Clara öffnete die Tür mit verweinten Augen...", + "»Wir haben gestritten«, sagte sie leise..." + }, + new List + { + new Choice("Nach Alibi fragen", "kap3_alibi"), + new Choice("Skizzenblock untersuchen", "kap3_skizzen") + } + )); + + nodes.Add(new StoryNode( + "kap2_tatort", + "Kapitel 2 – Stille im Salon", + new[] + { + "Der Salon roch nach kaltem Kaminrauch...", + "Kein Kampf, keine umgestürzten Möbel..." + }, + new List + { + new Choice("Rotwein ins Labor", "kap3_labor"), + new Choice("Fenster prüfen", "kap3_fenster") + } + )); + + // Weitere Kapitel hier ergänzen... + + return nodes; + } +} + +static class PdfExtensions +{ + public static PdfRectangle ToPdfRect(this XRect rect) + { + return new PdfRectangle(rect.TopLeft, rect.Size); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/StoryNode.cs b/CSharpBible/Data/NebelEbook/StoryNode.cs new file mode 100644 index 000000000..eed9afa3b --- /dev/null +++ b/CSharpBible/Data/NebelEbook/StoryNode.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; + +namespace NebelEbook; + +/// +/// Repräsentiert einen Knoten einer interaktiven Geschichte mit Titel, Absätzen und auswählbaren Optionen. +/// +/// +/// Die übergebenen -Arrays und -Instanzen werden ohne Kopie übernommen. +/// +public class StoryNode +{ + /// + /// Eindeutige Kennung des Knotens. + /// + public string Id { get; } + + /// + /// Titel des Story-Knotens. + /// + public string Title { get; } + + /// + /// Sammlung der Textabsätze in der vorgesehenen Anzeige-Reihenfolge. + /// + public string[] Paragraphs { get; } + + /// + /// Liste der möglichen Entscheidungen, die von diesem Knoten aus getroffen werden können. + /// + /// + public List Choices { get; } + + /// + /// Initialisiert eine neue Instanz der -Klasse. + /// + /// Die eindeutige Id des Knotens. + /// Der Titel des Knotens. + /// Die Absätze, die zu diesem Knoten gehören. + /// Die verfügbaren Entscheidungen ab diesem Knoten. + public StoryNode(string id, string title, string[] paragraphs, List choices) + { + Id = id; + Title = title; + Paragraphs = paragraphs; + Choices = choices; + } +} diff --git a/CSharpBible/Games/Galaxia_Base/Models/Interfaces/IProductionSystem.cs b/CSharpBible/Games/Galaxia_Base/Models/Interfaces/IProductionSystem.cs new file mode 100644 index 000000000..0621c6034 --- /dev/null +++ b/CSharpBible/Games/Galaxia_Base/Models/Interfaces/IProductionSystem.cs @@ -0,0 +1,5 @@ +namespace Galaxia.Models.Interfaces; + +public interface IProductionSystem +{ +} \ No newline at end of file diff --git a/CSharpBible/Libraries/GenInterfaces/Interfaces/Genealogic/IGenSource.cs b/CSharpBible/Libraries/GenInterfaces/Interfaces/Genealogic/IGenSource.cs new file mode 100644 index 000000000..63de8681e --- /dev/null +++ b/CSharpBible/Libraries/GenInterfaces/Interfaces/Genealogic/IGenSource.cs @@ -0,0 +1,46 @@ +// *********************************************************************** +// Assembly : GenInterfaces +// Author : Mir +// Created : 01-28-2025 +// +// Last Modified By : Mir +// Last Modified On : 01-10-2025 +// *********************************************************************** +// +// Copyright © JC-Soft 2025 +// +// +// *********************************************************************** +using System; +using System.Collections.Generic; + +/// +/// The Genealogic namespace. +/// +namespace GenInterfaces.Interfaces.Genealogic; + +/// +/// Interface IGenSource +/// Extends the +/// +/// +public interface IGenSource : IGenObject, IHasOwner +{ + /// Gets or sets the description. + /// a short description of the source. + string Description { get; set; } + + /// Gets or sets the URL. + /// The URL of the source. + Uri? Url { get; set; } + + /// Gets or sets the data. + /// The data/text of the source. + string Data { get; set; } + + /// Gets the medias. + /// The list of media of this source. + IList Medias { get; init; } + + +} \ No newline at end of file From a8c37d06f43cb03d44034f1e60cc6f414e3f693f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:16:52 +0200 Subject: [PATCH 142/569] WaveFuncColFrm --- CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj b/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj index b71b7a74c..6288fb18d 100644 --- a/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj +++ b/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj @@ -25,7 +25,7 @@ - + \ No newline at end of file From efca30f90ccb8a82a901dd0b57205a286f688300 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:17:56 +0200 Subject: [PATCH 143/569] BaseLib --- Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj b/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj index 96096133c..025caeb95 100644 --- a/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj +++ b/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj @@ -24,6 +24,6 @@ - + \ No newline at end of file From 1db448ce26fc67134371b4e4a62c866deb3adb2b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:17:56 +0200 Subject: [PATCH 144/569] BaseLibTests --- Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj b/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj index c6f905387..d8c775eb4 100644 --- a/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj +++ b/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From a45d52f38ef60ea6c2b372ef06f634c773f1b383 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:18:07 +0200 Subject: [PATCH 145/569] Galaxia_BaseTests --- CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj b/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj index 869e7b551..6bb040158 100644 --- a/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj +++ b/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj @@ -10,7 +10,7 @@ - + From 0d06b0a4fa1389f027acac4131a339a13f641188 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:18:07 +0200 Subject: [PATCH 146/569] Galaxia_UI --- CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj b/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj index 8f8963e24..3638a6689 100644 --- a/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj +++ b/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj @@ -15,7 +15,7 @@ - + From 60add05700506e3561ce893ad04945bee93052c3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:18:16 +0200 Subject: [PATCH 147/569] HexaBan_Console --- CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj | 2 +- CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj | 2 +- CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj b/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj index 57e806afb..edfd9705e 100644 --- a/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj +++ b/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj @@ -18,6 +18,6 @@ - + diff --git a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj index 8b518195d..94f2dbaf3 100644 --- a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj +++ b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj @@ -12,7 +12,7 @@ - + diff --git a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj index 750436d6e..650b4bf70 100644 --- a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj +++ b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj @@ -12,7 +12,7 @@ - + From 6ef0284707d6edbb359dedf7b9eb229907c515c7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:20:16 +0200 Subject: [PATCH 148/569] MVVM_99_SomeIssueTests --- .../MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj | 4 ++-- .../MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj index 027292a97..742340336 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj @@ -12,8 +12,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj index 353b72dfc..676814938 100644 --- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj +++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj @@ -9,8 +9,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 297cd3eb9ab5baf7fe8a4d642ece2a55ad798d45 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 18 Sep 2025 07:22:33 +0200 Subject: [PATCH 149/569] CSharpBible --- CSharpBible/CSharpBible.sln | 323 ++---------------- .../Werner_Flaschbier_BaseTests.csproj | 2 +- 2 files changed, 26 insertions(+), 299 deletions(-) diff --git a/CSharpBible/CSharpBible.sln b/CSharpBible/CSharpBible.sln index 60f666379..91cc678aa 100644 --- a/CSharpBible/CSharpBible.sln +++ b/CSharpBible/CSharpBible.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 18 -VisualStudioVersion = 18.0.11012.119 d18.0 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36511.14 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{2507ABCC-C0AD-4108-BB22-29D26F0E58B9}" ProjectSection(SolutionItems) = preProject @@ -989,14 +989,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calc32WPF", "Calc32WPF", "{ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc32_net.WPF", "Calc\Calc32WPF\Calc32_net.WPF.csproj", "{24788952-DCC6-4D42-8D1C-B3B6D3130A63}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{F2E35B3E-9711-EDEC-6202-DB40BDEED14A}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calc32WPFTests", "Calc32WPFTests", "{95E26BD5-1687-298F-F8B4-FABD41602EDB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc64WF", "Calc\Calc64WF\Calc64WF.csproj", "{3E75CC72-F514-405F-947D-CFE690DF5947}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WFSystem.Data", "WFSystem.Data", "{6D8B63C3-DD1E-8A5C-B171-6D20D3F89E60}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calc64WFTests", "Calc\Calc64WFTests\Calc64WFTests.csproj", "{5532F188-437D-423B-B883-1ECF3BFAF7C1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WaveFuncCol", "WaveFuncCol", "{7CCAAAAC-B84A-93BB-8156-EAF8E95D8524}" @@ -1067,192 +1063,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "All_Graphics", "All_Graphic EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeDisc", "Graphics\PrimeDisc\PrimeDisc.csproj", "{1B102E23-1FAE-426B-8A4F-640E8C41F23E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CommonDialogs", "CommonDialogs", "{45205C9A-D287-40D4-A591-FBF46BE1EE8B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConsoleLib", "ConsoleLib", "{2B5109A9-60F0-FA4F-248A-32AEA1B9E3E7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSFreeVision_", "CSFreeVision_", "{A9C8AE41-49E9-B0D1-B9C2-3707A36590C0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MathLIbrary", "MathLIbrary", "{7647491A-E6D3-3A0A-FAC9-B20F025B9228}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MathLibraryTests", "MathLibraryTests", "{11C1845A-12CF-43AD-D569-D94A7B64BA41}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WFSystem.Windows.Data_net", "Libraries\WFSystem.Data\WFSystem.Windows.Data_net.csproj", "{CA54E8DB-2D43-408B-9F32-202993926BDA}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00a_CTTemplate", "MVVM_00a_CTTemplate", "{35B67E21-F95C-A128-AAC7-98ECD309BB08}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00a_CTTemplateTests", "MVVM_00a_CTTemplateTests", "{81B5ADF0-0FE7-38B6-BB1F-258668F73A55}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_IoCTemplate", "MVVM_00_IoCTemplate", "{937B2B28-C6F9-F736-CA84-6F41EC001F72}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_IoCTemplateTests", "MVVM_00_IoCTemplateTests", "{89E47D2D-0FED-252E-89BF-3867D1F3EA7C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_Template", "MVVM_00_Template", "{F4C0F0A1-8F1E-2F16-0055-3BD455FB79A8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_00_TemplateTests", "MVVM_00_TemplateTests", "{356B940A-B913-2682-98C3-C3E57573DC3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03a_CTNotifyChange", "MVVM_03a_CTNotifyChange", "{3D234EAB-5375-DFC1-C54A-EFE9FA9110CF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03a_CTNotifyChangeTests", "MVVM_03a_CTNotifyChangeTests", "{094E084C-39C6-61F1-3E88-AEB60E3E12BB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03_NotifyChange", "MVVM_03_NotifyChange", "{B364655D-B626-F63D-0168-22FFCA099451}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_03_NotifyChangeTests", "MVVM_03_NotifyChangeTests", "{5F9756D8-F7B6-5C70-7839-41F6CD4BC35E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04a_CTRelayCommand", "MVVM_04a_CTRelayCommand", "{52B8A00A-66D5-4CCC-1708-B7B12877476A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04a_CTRelayCommandTests", "MVVM_04a_CTRelayCommandTests", "{A90BEEB2-CAD6-15E1-5481-4E795477880B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04_DelegateCommand", "MVVM_04_DelegateCommand", "{A0E0B6B2-E393-4084-0D2F-7CE532D8EBC6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_04_DelegateCommandTests", "MVVM_04_DelegateCommandTests", "{6ED1FE0C-F08F-A029-DA61-649ECC4EFE89}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05a_CTCommandParCalc", "MVVM_05a_CTCommandParCalc", "{2030957B-7247-3074-4A89-293EB0AA1680}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05a_CTCommandParCalcTests", "MVVM_05a_CTCommandParCalcTests", "{44F409E5-506A-6C09-9445-559D8EA13438}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05_CommandParCalculator", "MVVM_05_CommandParCalculator", "{73789618-605D-5565-3CE1-9A1F53A92FAC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_05_CommandParCalculatorTests", "MVVM_05_CommandParCalculatorTests", "{12BA5DEA-6543-39F3-EAA8-E90F4D4C6AA9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters", "MVVM_06_Converters", "{D34E636E-4C6A-4267-8BB3-134B93CAAA5E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_2", "MVVM_06_Converters_2", "{B9A6DAF3-39E7-DE94-2DB0-CD0B4116E99B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_3", "MVVM_06_Converters_3", "{68939C6E-528E-0D37-2DD0-E823FED9435B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_3Tests", "MVVM_06_Converters_3Tests", "{B76C70D4-3F9B-3E2A-F379-0332B15D8EBB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_4", "MVVM_06_Converters_4", "{B9D4101C-6AAC-42C1-B954-FB7DB4DB8E3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_06_Converters_4Tests", "MVVM_06_Converters_4Tests", "{2EC51B34-C119-621A-0014-760CE5F0B491}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09a_CTDialogBoxes", "MVVM_09a_CTDialogBoxes", "{65A02EAC-D630-FFDA-CE85-0857516332BE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09a_CTDialogBoxesTests", "MVVM_09a_CTDialogBoxesTests", "{101F2412-D5EA-8970-B026-1C6453AA08C4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09_DialogBoxes", "MVVM_09_DialogBoxes", "{5F7FBF59-C0D3-84AA-9D5B-3B7DBEFAFF10}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_09_DialogBoxesTest", "MVVM_09_DialogBoxesTest", "{B8DC2BA7-8B7D-40E2-E137-05BBC8882581}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_16_Usercontrol1", "MVVM_16_Usercontrol1", "{16366B21-4A73-288D-918C-33B83FB95333}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_16_UserControl1Tests", "MVVM_16_UserControl1Tests", "{DB8C5291-84BA-FBFE-87F8-38445F59A0EB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_16_Usercontrol2", "MVVM_16_Usercontrol2", "{A0EA3843-5486-7EBB-8046-F2617B0EAAC0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_17_1_CSV_Laden", "MVVM_17_1_CSV_Laden", "{24DA9CFA-5161-32A2-BB8F-85042131ECD8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_18_MultiConverters", "MVVM_18_MultiConverters", "{9CB38DED-C950-B157-51E5-03C2171518D8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_19_FilterLists", "MVVM_19_FilterLists", "{E801F37E-5B4C-8F17-D435-586F70A5FB6B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_19_FilterListsTests", "MVVM_19_FilterListsTests", "{C05949C5-7FE3-3C35-8FFE-8420853C236C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20a_CTSysdialogs", "MVVM_20a_CTSysdialogs", "{05F10A2E-FF30-C377-9643-B16AFC4A5677}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20a_CTSysdialogsTests", "MVVM_20a_CTSysdialogsTests", "{A469D233-B14F-E271-A58C-FAC4DF0CF0AF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20_Sysdialogs", "MVVM_20_Sysdialogs", "{0EC0B80D-0095-BDF1-9D48-C12A680C09F8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_20_SysdialogsTests", "MVVM_20_SysdialogsTests", "{ED7C9B4D-1423-7F30-6663-1AAD3C143790}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_21_Buttons", "MVVM_21_Buttons", "{50A61679-4740-2BAD-E513-0405933795B2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_22_WpfCap", "MVVM_22_WpfCap", "{CD032C5F-71AD-CC26-983F-EE04FB047671}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_22_WpfCapTests", "MVVM_22_WpfCapTests", "{C38244D1-6253-FE83-6B5E-EB2C940F784A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24a_CTUserControl", "MVVM_24a_CTUserControl", "{49C2D696-8323-D094-7735-8036B36BE94E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24a_CTUserControlTests", "MVVM_24a_CTUserControlTests", "{FD3DF346-45EC-03A8-83EC-320E87CAAF03}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24b_UserControl", "MVVM_24b_UserControl", "{72DA18D6-3E2E-8405-9995-C3F637953FDC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24b_UserControlTests", "MVVM_24b_UserControlTests", "{9A1E1AF6-5A6B-7572-69BE-CDD853571ABA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24c_CTUserControl", "MVVM_24c_CTUserControl", "{FE782471-E276-11AF-680D-2172C1366A5A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24c_CTUserControlTests", "MVVM_24c_CTUserControlTests", "{9EC985B7-BD0C-2B4E-25B2-CD76C2C7D3BF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24_UserControl", "MVVM_24_UserControl", "{9890F303-1C13-1F9C-925B-6E34EE635A8F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_24_UserControlTests", "MVVM_24_UserControlTests", "{37671097-DCFA-02DB-E294-91170F0317C8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_26_BindingGroupExp", "MVVM_26_BindingGroupExp", "{08D3AE13-DF83-0365-7A9C-E1FC46B15049}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_26_CTBindingGroupExp", "MVVM_26_CTBindingGroupExp", "{8B265EE8-F993-AAA1-8531-1130A87A6715}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_27_DataGrid", "MVVM_27_DataGrid", "{0A8E0E66-6661-8F93-21B7-CB46A1935836}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_27_DataGridTests", "MVVM_27_DataGridTests", "{F338708A-E76C-01F2-53B8-0EFDD8EAA9A2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_CTDataGridExt", "MVVM_28_1_CTDataGridExt", "{C9DED555-89F1-EFF5-12D7-836E6F0E284F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_CTDataGridExtTests", "MVVM_28_1_CTDataGridExtTests", "{AB4D81C8-3EE1-1F12-4731-2B94DEFBE435}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_DataGridExt", "MVVM_28_1_DataGridExt", "{43000BE9-143A-01E4-1469-C86029693138}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_1_DataGridExtTests", "MVVM_28_1_DataGridExtTests", "{8D539B1E-2EB3-BA6B-47CB-99B99C1F8FC5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_DataGrid", "MVVM_28_DataGrid", "{C8A30850-71AD-845B-BF71-D71B9A8FE5CC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_28_DataGridTests", "MVVM_28_DataGridTests", "{504F48A4-1C70-D701-C8E4-D05413E5B131}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation1", "MVVM_31a_CTValidation1", "{C443EA80-01A0-A500-772B-D0EA14C483EB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation2", "MVVM_31a_CTValidation2", "{D81C36AE-DD33-8906-6171-06ECF33BCB7D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation2Tests", "MVVM_31a_CTValidation2Tests", "{C2443422-306D-6070-EBFF-7C045B094B59}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation3", "MVVM_31a_CTValidation3", "{07B5DDA6-B3C0-F6B4-A0FC-9BABD19573FE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31a_CTValidation3Tests", "MVVM_31a_CTValidation3Tests", "{175217BC-7F9A-AC50-3E93-C1738A692DF5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation1", "MVVM_31_Validation1", "{EA11F743-E9FF-B9BB-C9C1-0ABAE76A3257}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation1Tests", "MVVM_31_Validation1Tests", "{56BC7864-C3E0-5F88-F2F8-5AD1B237E0AF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation2", "MVVM_31_Validation2", "{2A1E82CB-98C6-234F-80E1-C46801FEC588}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_31_Validation2Tests", "MVVM_31_Validation2Tests", "{D248FAC1-E2FD-AD1A-B0E4-4929469A6C50}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33a_CTEvents_To_Commands", "MVVM_33a_CTEvents_To_Commands", "{C545B622-0BBA-9C9E-17D1-6B85C13C8DC4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33a_CTEvents_To_CommandsTests", "MVVM_33a_CTEvents_To_CommandsTests", "{0A5BCC31-A229-6A1D-80EB-26AD3AE77047}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33_Events_to_Commands", "MVVM_33_Events_to_Commands", "{0583A2B5-9DCB-1DAC-C305-ED8DB17630F4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_33_Events_to_CommandsTests", "MVVM_33_Events_to_CommandsTests", "{3F356281-7030-86EB-F242-63BC789659DB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34a_CTBindingEventArgs", "MVVM_34a_CTBindingEventArgs", "{1D457442-2A0A-9092-8BFB-3C89D773A0C7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34a_CTBindingEventArgsTests", "MVVM_34a_CTBindingEventArgsTests", "{441E5896-6300-C5B7-9CFA-732CBB1515C9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34_BindingEventArgs", "MVVM_34_BindingEventArgs", "{80EA4566-9782-6860-B55F-7CE0C95FB8B7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_34_BindingEventArgsTests", "MVVM_34_BindingEventArgsTests", "{FC00484A-3F54-AC5D-EEFD-11A1386C8D58}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_35_CommunityToolkit", "MVVM_35_CommunityToolkit", "{6F175F33-D423-8E9A-D6D0-3685DB455477}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_35_CommunityToolkitTests", "MVVM_35_CommunityToolkitTests", "{FB14C50C-71E2-7AF8-503C-5ADBD4B5FEFF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_36_ComToolKtSavesWork", "MVVM_36_ComToolKtSavesWork", "{130BF9BF-7CEA-64B4-18C0-4BDE1D2802AB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_36_ComToolKtSavesWorkTests", "MVVM_36_ComToolKtSavesWorkTests", "{2F4EDBF9-0A6F-323C-BEA3-C8E90D39AC36}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_37_TreeView", "MVVM_37_TreeView", "{3B2EE9B3-8456-D155-0FA8-8094CD356F05}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_37_TreeViewTests", "MVVM_37_TreeViewTests", "{C6829286-01AD-CC04-88DA-2C3C921778C1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_38_CTDependencyInjection", "MVVM_38_CTDependencyInjection", "{26C8CA75-C75C-76DA-4A12-995AFE8124D7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_38_CTDependencyInjectionTests", "MVVM_38_CTDependencyInjectionTests", "{F814C598-1DAB-DACC-B4EB-A85066D3599A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_39_MultiModelTest", "MVVM_39_MultiModelTest", "{EF2EE4FB-D5C9-A64E-C754-755C13A8C438}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MVVM_39_MultiModelTestTests", "MVVM_39_MultiModelTestTests", "{C45EDC7F-0CB4-40E8-F931-DE1CBDE52126}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_99_SomeIssue", "MVVM_Tutorial\MVVM_99_SomeIssue\MVVM_99_SomeIssue.csproj", "{69FECC01-0962-4016-9C28-9D67E394E93D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_99_SomeIssue_net", "MVVM_Tutorial\MVVM_99_SomeIssue\MVVM_99_SomeIssue_net.csproj", "{7AABA1BB-FF1B-4B1E-A4F5-E047C83A545C}" @@ -1297,6 +1109,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_Geometry", "WPFSamples_ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPF_ImageView", "WPFSamples_2\WPF_ImageView\WPF_ImageView.csproj", "{DA21C175-58F7-4701-B0B1-E0AA5EB624FA}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Galaxia", "Galaxia", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SokoBan_", "SokoBan_", "{BA4D9322-1AE1-4186-8AFA-5BCCBCA0A468}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -7051,12 +6867,12 @@ Global {8A930C1B-86BB-4E19-9E11-3D857113C48F} = {E1D77C39-936E-4ADB-8350-74B5A4401280} {2FDB68BC-3D1C-45EA-BAFE-A3A5BD7437D5} = {E1D77C39-936E-4ADB-8350-74B5A4401280} {B94BA22F-CDEF-4EB5-83EA-D87D3C2E4483} = {E1D77C39-936E-4ADB-8350-74B5A4401280} - {13662848-3BDB-4119-BF5D-D58EA0F8026E} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {13662848-3BDB-4119-BF5D-D58EA0F8026E} = {BA4D9322-1AE1-4186-8AFA-5BCCBCA0A468} + {CFD81363-B1EC-46C6-9B43-8DE2CFBF0628} = {BA4D9322-1AE1-4186-8AFA-5BCCBCA0A468} {48DB524E-13DC-412B-A6BF-E8912F5682EA} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} {301D7802-4F87-4FB9-90E6-9FAA71D6DCA6} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {FA9F3597-4C9F-48FA-A507-54BF6825C637} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {A5D73D86-9D5C-45E1-AE27-DDF8A5EE52E5} = {C0BAF5C2-A612-C75B-506C-C44F4931DFAF} + {FA9F3597-4C9F-48FA-A507-54BF6825C637} = {C0BAF5C2-A612-C75B-506C-C44F4931DFAF} {90DDFE5D-E27B-449C-8C1B-6275C8E4BD67} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} {A29E68D2-E956-4C72-898A-7445C09C4AEB} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} {29598C75-C195-4159-A235-B4843820BB2D} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} @@ -7250,12 +7066,12 @@ Global {A4A4C6CA-FF07-43FD-B1DB-EC9B5E01D11A} = {ABF85DD5-B281-4889-9A8E-5DB3185A8DD5} {F29AAF44-60FE-4189-81C4-FE3A60161394} = {ABF85DD5-B281-4889-9A8E-5DB3185A8DD5} {1CF4EBB0-6BBB-456A-9258-83F62D026530} = {ABF85DD5-B281-4889-9A8E-5DB3185A8DD5} - {200CCE0D-1796-4570-8EDD-7093F0072678} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {AFA889B1-B728-4E16-96B7-9733376B0EA4} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {200CCE0D-1796-4570-8EDD-7093F0072678} = {C0BAF5C2-A612-C75B-506C-C44F4931DFAF} + {AFA889B1-B728-4E16-96B7-9733376B0EA4} = {BA4D9322-1AE1-4186-8AFA-5BCCBCA0A468} {B8F06FF4-1C87-4483-9B0A-CEC862622BDA} = {FCA75665-06E8-45DB-94A0-756B79925C54} {16C31B01-EC91-41E5-8290-EBB887E75F23} = {6A18D579-BB15-42D9-ACB1-F7201C790CE8} {0D10C533-F687-40E9-AF63-B06345EAB5DF} = {6A18D579-BB15-42D9-ACB1-F7201C790CE8} - {83BCDD80-28B3-488A-9F65-27D2637F82F7} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {83BCDD80-28B3-488A-9F65-27D2637F82F7} = {BA4D9322-1AE1-4186-8AFA-5BCCBCA0A468} {16EC4035-F8CA-47CB-9F18-4B151EAC28CD} = {BA409E0A-C840-4305-83C7-2934BEFE9E5E} {279A92D4-1017-4401-90B2-CDE013D6B2ED} = {BA409E0A-C840-4305-83C7-2934BEFE9E5E} {EF6DF7FF-BDE4-40BE-852F-FC7E49C51BFF} = {465E6B8C-A028-4C99-86E7-2710FFC62901} @@ -7298,8 +7114,8 @@ Global {7E33210D-6A0F-4DB8-951D-B981BE3CB0C7} = {FA8A64D6-C0D5-4AD2-92BB-D2718B9D7D36} {10AEE6DD-C38F-4CCA-BCFE-AC4B74C75EBF} = {FA8A64D6-C0D5-4AD2-92BB-D2718B9D7D36} {21DEBE3D-3302-4CDA-B06A-DB25778CB9E3} = {71DD55F8-E61A-49E8-B841-72984B85D38B} - {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {B67C74E4-CA8C-4278-A5E5-C1006A9E6837} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {7F4E5B8E-0C7A-4B3B-B23E-E4360DCE6205} = {93599B04-1843-177F-5584-7EF3F0570CA1} + {B67C74E4-CA8C-4278-A5E5-C1006A9E6837} = {93599B04-1843-177F-5584-7EF3F0570CA1} {1A106E37-21A6-48CC-A2E9-AF3FEDCAD7E2} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} {F1F988EC-6C2D-4B69-BF67-663D2E051100} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} {1FC80B87-BC1B-416F-9D3A-47BE111C075D} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} @@ -7432,7 +7248,6 @@ Global {24788952-DCC6-4D42-8D1C-B3B6D3130A63} = {4A11C420-A2D1-C3D6-782C-68D0E71D3A02} {95E26BD5-1687-298F-F8B4-FABD41602EDB} = {278CFF7F-D799-45EE-BADB-8C8380F05716} {3E75CC72-F514-405F-947D-CFE690DF5947} = {278CFF7F-D799-45EE-BADB-8C8380F05716} - {6D8B63C3-DD1E-8A5C-B171-6D20D3F89E60} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} {5532F188-437D-423B-B883-1ECF3BFAF7C1} = {278CFF7F-D799-45EE-BADB-8C8380F05716} {7CCAAAAC-B84A-93BB-8156-EAF8E95D8524} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031} {35478F32-2633-43E7-BFC2-CE7A9BFBA05F} = {7CCAAAAC-B84A-93BB-8156-EAF8E95D8524} @@ -7457,108 +7272,18 @@ Global {533DA3F1-0980-49AD-9671-79B67708D5B8} = {B1288289-8E4E-6C15-7A35-26F58963379A} {E76F260F-2C64-4AAA-968A-0897A53B3CC4} = {B1288289-8E4E-6C15-7A35-26F58963379A} {93599B04-1843-177F-5584-7EF3F0570CA1} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {537B871D-3F5B-4B3D-8802-C51EF3B74C56} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {B63048B4-A819-4055-8F5D-298234C1B370} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {2536C0B3-710C-4E64-8902-4087B02850A5} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {537B871D-3F5B-4B3D-8802-C51EF3B74C56} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {09205AC6-10E7-4AA6-8635-9CEF7F3CE71F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {B63048B4-A819-4055-8F5D-298234C1B370} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {2536C0B3-710C-4E64-8902-4087B02850A5} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {9BDBE4AE-2C2F-407C-B505-111DF20E4B75} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {286835C4-3512-4B7D-954C-68730467D873} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {A8CDC6DB-7162-40D0-847A-B315EAE6362A} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} {C0BAF5C2-A612-C75B-506C-C44F4931DFAF} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} - {76AA26DD-63AA-4F75-9D82-783C5F153D1F} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {76AA26DD-63AA-4F75-9D82-783C5F153D1F} = {C0BAF5C2-A612-C75B-506C-C44F4931DFAF} {2912AFB9-D603-3E64-AD11-26DE507B708A} = {E1D77C39-936E-4ADB-8350-74B5A4401280} {1B102E23-1FAE-426B-8A4F-640E8C41F23E} = {E1D77C39-936E-4ADB-8350-74B5A4401280} - {45205C9A-D287-40D4-A591-FBF46BE1EE8B} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} - {2B5109A9-60F0-FA4F-248A-32AEA1B9E3E7} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} - {A9C8AE41-49E9-B0D1-B9C2-3707A36590C0} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} - {7647491A-E6D3-3A0A-FAC9-B20F025B9228} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} - {11C1845A-12CF-43AD-D569-D94A7B64BA41} = {F2E35B3E-9711-EDEC-6202-DB40BDEED14A} - {CA54E8DB-2D43-408B-9F32-202993926BDA} = {6D8B63C3-DD1E-8A5C-B171-6D20D3F89E60} - {35B67E21-F95C-A128-AAC7-98ECD309BB08} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {81B5ADF0-0FE7-38B6-BB1F-258668F73A55} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {937B2B28-C6F9-F736-CA84-6F41EC001F72} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {89E47D2D-0FED-252E-89BF-3867D1F3EA7C} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {F4C0F0A1-8F1E-2F16-0055-3BD455FB79A8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {356B940A-B913-2682-98C3-C3E57573DC3A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {3D234EAB-5375-DFC1-C54A-EFE9FA9110CF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {094E084C-39C6-61F1-3E88-AEB60E3E12BB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {B364655D-B626-F63D-0168-22FFCA099451} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {5F9756D8-F7B6-5C70-7839-41F6CD4BC35E} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {52B8A00A-66D5-4CCC-1708-B7B12877476A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {A90BEEB2-CAD6-15E1-5481-4E795477880B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {A0E0B6B2-E393-4084-0D2F-7CE532D8EBC6} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {6ED1FE0C-F08F-A029-DA61-649ECC4EFE89} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {2030957B-7247-3074-4A89-293EB0AA1680} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {44F409E5-506A-6C09-9445-559D8EA13438} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {73789618-605D-5565-3CE1-9A1F53A92FAC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {12BA5DEA-6543-39F3-EAA8-E90F4D4C6AA9} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {D34E636E-4C6A-4267-8BB3-134B93CAAA5E} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {B9A6DAF3-39E7-DE94-2DB0-CD0B4116E99B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {68939C6E-528E-0D37-2DD0-E823FED9435B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {B76C70D4-3F9B-3E2A-F379-0332B15D8EBB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {B9D4101C-6AAC-42C1-B954-FB7DB4DB8E3A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {2EC51B34-C119-621A-0014-760CE5F0B491} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {65A02EAC-D630-FFDA-CE85-0857516332BE} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {101F2412-D5EA-8970-B026-1C6453AA08C4} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {5F7FBF59-C0D3-84AA-9D5B-3B7DBEFAFF10} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {B8DC2BA7-8B7D-40E2-E137-05BBC8882581} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {16366B21-4A73-288D-918C-33B83FB95333} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {DB8C5291-84BA-FBFE-87F8-38445F59A0EB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {A0EA3843-5486-7EBB-8046-F2617B0EAAC0} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {24DA9CFA-5161-32A2-BB8F-85042131ECD8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {9CB38DED-C950-B157-51E5-03C2171518D8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {E801F37E-5B4C-8F17-D435-586F70A5FB6B} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C05949C5-7FE3-3C35-8FFE-8420853C236C} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {05F10A2E-FF30-C377-9643-B16AFC4A5677} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {A469D233-B14F-E271-A58C-FAC4DF0CF0AF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {0EC0B80D-0095-BDF1-9D48-C12A680C09F8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {ED7C9B4D-1423-7F30-6663-1AAD3C143790} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {50A61679-4740-2BAD-E513-0405933795B2} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {CD032C5F-71AD-CC26-983F-EE04FB047671} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C38244D1-6253-FE83-6B5E-EB2C940F784A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {49C2D696-8323-D094-7735-8036B36BE94E} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {FD3DF346-45EC-03A8-83EC-320E87CAAF03} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {72DA18D6-3E2E-8405-9995-C3F637953FDC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {9A1E1AF6-5A6B-7572-69BE-CDD853571ABA} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {FE782471-E276-11AF-680D-2172C1366A5A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {9EC985B7-BD0C-2B4E-25B2-CD76C2C7D3BF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {9890F303-1C13-1F9C-925B-6E34EE635A8F} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {37671097-DCFA-02DB-E294-91170F0317C8} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {08D3AE13-DF83-0365-7A9C-E1FC46B15049} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {8B265EE8-F993-AAA1-8531-1130A87A6715} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {0A8E0E66-6661-8F93-21B7-CB46A1935836} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {F338708A-E76C-01F2-53B8-0EFDD8EAA9A2} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C9DED555-89F1-EFF5-12D7-836E6F0E284F} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {AB4D81C8-3EE1-1F12-4731-2B94DEFBE435} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {43000BE9-143A-01E4-1469-C86029693138} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {8D539B1E-2EB3-BA6B-47CB-99B99C1F8FC5} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C8A30850-71AD-845B-BF71-D71B9A8FE5CC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {504F48A4-1C70-D701-C8E4-D05413E5B131} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C443EA80-01A0-A500-772B-D0EA14C483EB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {D81C36AE-DD33-8906-6171-06ECF33BCB7D} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C2443422-306D-6070-EBFF-7C045B094B59} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {07B5DDA6-B3C0-F6B4-A0FC-9BABD19573FE} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {175217BC-7F9A-AC50-3E93-C1738A692DF5} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {EA11F743-E9FF-B9BB-C9C1-0ABAE76A3257} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {56BC7864-C3E0-5F88-F2F8-5AD1B237E0AF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {2A1E82CB-98C6-234F-80E1-C46801FEC588} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {D248FAC1-E2FD-AD1A-B0E4-4929469A6C50} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C545B622-0BBA-9C9E-17D1-6B85C13C8DC4} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {0A5BCC31-A229-6A1D-80EB-26AD3AE77047} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {0583A2B5-9DCB-1DAC-C305-ED8DB17630F4} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {3F356281-7030-86EB-F242-63BC789659DB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {1D457442-2A0A-9092-8BFB-3C89D773A0C7} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {441E5896-6300-C5B7-9CFA-732CBB1515C9} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {80EA4566-9782-6860-B55F-7CE0C95FB8B7} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {FC00484A-3F54-AC5D-EEFD-11A1386C8D58} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {6F175F33-D423-8E9A-D6D0-3685DB455477} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {FB14C50C-71E2-7AF8-503C-5ADBD4B5FEFF} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {130BF9BF-7CEA-64B4-18C0-4BDE1D2802AB} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {2F4EDBF9-0A6F-323C-BEA3-C8E90D39AC36} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {3B2EE9B3-8456-D155-0FA8-8094CD356F05} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C6829286-01AD-CC04-88DA-2C3C921778C1} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {26C8CA75-C75C-76DA-4A12-995AFE8124D7} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {F814C598-1DAB-DACC-B4EB-A85066D3599A} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {EF2EE4FB-D5C9-A64E-C754-755C13A8C438} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} - {C45EDC7F-0CB4-40E8-F931-DE1CBDE52126} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} + {CA54E8DB-2D43-408B-9F32-202993926BDA} = {7BA535EF-38FA-47A6-A6BD-5D6333D5DB10} {69FECC01-0962-4016-9C28-9D67E394E93D} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} {986DC63A-ED03-4510-A8DB-032ED01D0D13} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} {99FF9800-36D6-579C-4E45-F30735702E83} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9} @@ -7579,6 +7304,8 @@ Global {C9707878-5739-498B-A982-BEC90E63B458} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} {B4D693A6-63AF-48A9-89CC-55BE89AE8FCC} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} {DA21C175-58F7-4701-B0B1-E0AA5EB624FA} = {174E6CB9-42E1-4C99-B8EF-A2C1F426758D} + {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} + {BA4D9322-1AE1-4186-8AFA-5BCCBCA0A468} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DAF8B3ED-D51A-4CDA-8BF1-1E032CF0AC4F} diff --git a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj index 62d060808..27bdb9d78 100644 --- a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj +++ b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj @@ -14,7 +14,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 64fa7218de059fe8c95fd5da104240295a495edd Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:16:17 +0200 Subject: [PATCH 150/569] AboutEx --- .../Factories/UserDocumentFactory.cs | 223 ++++++ .../Document.Base/Models/EFontStyle.cs | 20 + .../Models/Interfaces/IDocHeadline.cs | 6 + .../Models/Interfaces/IDocTOC.cs | 6 + .../UserDocumentProviderAttribute.cs | 32 + .../Document.Pdf/Model/PdfTOC.cs | 56 ++ CSharpBible/Data/NebelEbook/BasicFontStyle.cs | 17 + .../NebelEbook/Properties/launchSettings.json | 15 + CSharpBible/Data/NebelEbook/Story.cs | 9 + CSharpBible/Data/NebelEbook/TextTemplate.cs | 19 + CSharpBible/Data/NebelEbook/story.json | 718 ++++++++++++++++++ CSharpBible/Data/StoryNode.cs | 15 + 12 files changed, 1136 insertions(+) create mode 100644 CSharpBible/Data/DocumentUtils/Document.Base/Factories/UserDocumentFactory.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Base/Models/EFontStyle.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocTOC.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Base/Registration/UserDocumentProviderAttribute.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfTOC.cs create mode 100644 CSharpBible/Data/NebelEbook/BasicFontStyle.cs create mode 100644 CSharpBible/Data/NebelEbook/Properties/launchSettings.json create mode 100644 CSharpBible/Data/NebelEbook/Story.cs create mode 100644 CSharpBible/Data/NebelEbook/TextTemplate.cs create mode 100644 CSharpBible/Data/NebelEbook/story.json create mode 100644 CSharpBible/Data/StoryNode.cs diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Factories/UserDocumentFactory.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Factories/UserDocumentFactory.cs new file mode 100644 index 000000000..b85b6e138 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Factories/UserDocumentFactory.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using Document.Base.Models.Interfaces; +using Document.Base.Registration; + +namespace Document.Base.Factories; + +public static class UserDocumentFactory +{ + private static readonly ConcurrentDictionary> _byKey = + new(StringComparer.OrdinalIgnoreCase); + + private static readonly ConcurrentDictionary _extToKey = + new(StringComparer.OrdinalIgnoreCase); + + private static readonly ConcurrentDictionary _ctToKey = + new(StringComparer.OrdinalIgnoreCase); + + private static volatile bool _scanned; + public static bool AutoScanOnFirstUse { get; set; } = true; + + // Registrierung per Code + public static void Register(string key, Func creator, + IEnumerable? extensions = null, string? contentType = null, bool overwrite = false) + { + if (string.IsNullOrWhiteSpace(key)) throw new ArgumentException("Key darf nicht leer sein.", nameof(key)); + if (creator is null) throw new ArgumentNullException(nameof(creator)); + + if (!overwrite && _byKey.ContainsKey(key)) + throw new InvalidOperationException($"Key '{key}' ist bereits registriert."); + + _byKey[key] = creator; + + if (extensions != null) + { + foreach (var ext in extensions.Select(NormalizeExtension)) + { + if (string.IsNullOrEmpty(ext)) continue; + _extToKey[ext] = key; + } + } + + if (!string.IsNullOrWhiteSpace(contentType)) + { + _ctToKey[contentType!] = key; + } + } + + public static void Register(string key, + IEnumerable? extensions = null, string? contentType = null, bool overwrite = false) + where T : IUserDocument, new() + => Register(key, static () => new T(), extensions, contentType, overwrite); + + public static bool Unregister(string key) + { + var removed = _byKey.TryRemove(key, out _); + // Entfernungen aus ext/ct Maps (best-effort) + foreach (var kv in _extToKey.Where(kv => string.Equals(kv.Value, key, StringComparison.OrdinalIgnoreCase)).ToList()) + _extToKey.TryRemove(kv.Key, out _); + foreach (var kv in _ctToKey.Where(kv => string.Equals(kv.Value, key, StringComparison.OrdinalIgnoreCase)).ToList()) + _ctToKey.TryRemove(kv.Key, out _); + return removed; + } + + public static IReadOnlyCollection RegisteredKeys + => _byKey.Keys.ToArray(); + + // Erzeugung + public static IUserDocument Create(string keyOrExtOrContentTypeOrPath) + { + if (string.IsNullOrWhiteSpace(keyOrExtOrContentTypeOrPath)) + throw new ArgumentException("Eingabe darf nicht leer sein.", nameof(keyOrExtOrContentTypeOrPath)); + + EnsureScanned(); + + // Pfad? + if (LooksLikePath(keyOrExtOrContentTypeOrPath)) + { + var doc = CreateForPath(keyOrExtOrContentTypeOrPath); + if (doc is not null) return doc; + } + + // Content-Type? + if (keyOrExtOrContentTypeOrPath.Contains('/')) + { + var doc = CreateForContentType(keyOrExtOrContentTypeOrPath); + if (doc is not null) return doc; + } + + // Extension? + if (keyOrExtOrContentTypeOrPath.StartsWith('.')) + { + var doc = CreateForExtension(keyOrExtOrContentTypeOrPath); + if (doc is not null) return doc; + } + + // Key + if (_byKey.TryGetValue(keyOrExtOrContentTypeOrPath, out var factory)) + return factory(); + + throw new KeyNotFoundException($"Kein Dokument für '{keyOrExtOrContentTypeOrPath}' registriert."); + } + + public static bool TryCreate(string keyOrExtOrContentTypeOrPath, out IUserDocument? doc) + { + try + { + doc = Create(keyOrExtOrContentTypeOrPath); + return true; + } + catch + { + doc = null; + return false; + } + } + + public static IUserDocument? CreateForExtension(string extension) + { + EnsureScanned(); + var ext = NormalizeExtension(extension); + if (string.IsNullOrEmpty(ext)) return null; + return _extToKey.TryGetValue(ext, out var key) && _byKey.TryGetValue(key, out var factory) + ? factory() + : null; + } + + public static IUserDocument? CreateForContentType(string contentType) + { + EnsureScanned(); + if (string.IsNullOrWhiteSpace(contentType)) return null; + return _ctToKey.TryGetValue(contentType, out var key) && _byKey.TryGetValue(key, out var factory) + ? factory() + : null; + } + + public static IUserDocument? CreateForPath(string path) + { + EnsureScanned(); + var ext = Path.GetExtension(path); + return string.IsNullOrEmpty(ext) ? null : CreateForExtension(ext); + } + + // Assembly-Scan (Attribute) + public static void ScanAssemblies(IEnumerable? assemblies = null) + { + assemblies ??= AppDomain.CurrentDomain.GetAssemblies(); + + foreach (var asm in assemblies) + { + Type[] types; + try { types = asm.GetTypes(); } + catch { continue; } + + foreach (var t in types) + { + if (!typeof(IUserDocument).IsAssignableFrom(t) || t.IsAbstract || t.IsInterface) + continue; + + var attrs = t.GetCustomAttributes(inherit: false).ToArray(); + if (attrs.Length == 0) continue; + + // Erzeuge Creator + Func creator = () => (IUserDocument)Activator.CreateInstance(t)!; + + foreach (var a in attrs) + { + var keys = (a.Keys?.Length ?? 0) > 0 ? a.Keys! : Array.Empty(); + foreach (var key in keys) + { + if (string.IsNullOrWhiteSpace(key)) continue; + // Mehrere Attribute können denselben Key definieren – letztes gewinnt. + _byKey[key] = creator; + } + + if (a.Extensions is { Length: > 0 }) + { + foreach (var ext in a.Extensions) + { + var n = NormalizeExtension(ext); + if (!string.IsNullOrEmpty(n) && keys.FirstOrDefault() is { } firstKey) + _extToKey[n] = firstKey; + } + } + + if (!string.IsNullOrWhiteSpace(a.ContentType) && keys.FirstOrDefault() is { } k) + { + _ctToKey[a.ContentType!] = k; + } + } + } + } + } + + private static void EnsureScanned() + { + if (_scanned) return; + if (AutoScanOnFirstUse) + { + ScanAssemblies(); + } + _scanned = true; + } + + private static string NormalizeExtension(string extension) + { + if (string.IsNullOrWhiteSpace(extension)) return string.Empty; + var ext = extension.Trim(); + if (!ext.StartsWith('.')) ext = "." + ext; + return ext.ToLowerInvariant(); + } + + private static bool LooksLikePath(string input) + { + // Einfache Heuristik: enthält Verzeichnungs-Trenner oder Punkt mit möglicher Endung + return input.Contains('\\') || input.Contains('/') || input.EndsWith(".html", StringComparison.OrdinalIgnoreCase) + || input.EndsWith(".htm", StringComparison.OrdinalIgnoreCase) || input.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/EFontStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/EFontStyle.cs new file mode 100644 index 000000000..84319c4c4 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/EFontStyle.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Document.Base.Models; + +public enum EFontStyle +{ + Default =0, + Bold =1, + Italic =2, + BoldItalic=3, + Underline=4, + UnderlineItalic=6, + UnderlineBold=5, + UnderlineBoldItalic=7, + Strikeout=8 +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs new file mode 100644 index 000000000..e39f67885 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs @@ -0,0 +1,6 @@ +namespace Document.Base.Models.Interfaces; + +public interface IDocHeadline: IDocContent +{ + int Level { get; } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocTOC.cs new file mode 100644 index 000000000..1fabf7743 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocTOC.cs @@ -0,0 +1,6 @@ +namespace Document.Base.Models.Interfaces; + +public interface IDocTOC: IDocContent +{ + void RebuildFrom(IDocSection root); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Registration/UserDocumentProviderAttribute.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Registration/UserDocumentProviderAttribute.cs new file mode 100644 index 000000000..d667ccf72 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Registration/UserDocumentProviderAttribute.cs @@ -0,0 +1,32 @@ +using System; + +namespace Document.Base.Registration; + +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)] +public sealed class UserDocumentProviderAttribute : Attribute +{ + /// + /// Primäre Schlüssel (z. B. "html", "pdf", "odf"), unter denen das Dokument ansprechbar ist. + /// + public string[] Keys { get; } + + /// + /// Unterstützte Dateiendungen inkl. Punkt (z. B. ".html", ".htm"). + /// + public string[] Extensions { get; init; } = Array.Empty(); + + /// + /// Optionaler MIME-Content-Type (z. B. "text/html"). + /// + public string? ContentType { get; init; } + + /// + /// Anzeigename (optional). + /// + public string? DisplayName { get; init; } + + public UserDocumentProviderAttribute(params string[] keys) + { + Keys = keys ?? Array.Empty(); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfTOC.cs new file mode 100644 index 000000000..22c2bb916 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfTOC.cs @@ -0,0 +1,56 @@ +using Document.Base.Models; +using Document.Base.Models.Interfaces; +using PdfSharp.Pdf.Advanced; +using System.Globalization; + +namespace Document.Pdf.Model; + +public class PdfTOC : PdfContentBase, IDocTOC +{ + public string Name { get; } + public int Level { get; } + public PdfTOC(string name, int level) + { + Name = name; + Level = Math.Clamp(level, 1, 6); + } + public override IDocStyleStyle GetStyle() => new PdfStyle("TOC"); + + /// + /// Rebuilds the table of contents by extracting headings from the specified document section. + /// + /// This method clears any existing content and child elements before rebuilding the table of + /// contents. Only headings with a level less than or equal to the current level are included. + /// The root document section from which headings are collected to generate the table of contents. Cannot be null. + /// Thrown if is null. + public void RebuildFrom(IDocSection root) + { + if (root is null) throw new ArgumentNullException(nameof(root)); + + // Inhalt zurücksetzen (Kinder und Text) + _children.Clear(); + TextContent = string.Empty; + + // Alle Überschriften einsammeln, bevor etwas zur TOC hinzugefügt wird (vermeidet Rekursion) + var headings = root.Enumerate().OfType() + .Where(h => h.Level <= Level) + .ToList(); + + AddSpan(Name,EFontStyle.Bold); + AddLineBreak(); + + // Einfache Ausgabe: Einzug per Spaces, Text, dann Zeilenumbruch .. als Platzhalter + foreach (var h in headings) + { + if (h.Level > 1) + { + var indent = new string(' ', (h.Level - 1) * 2); + AddSpan(indent, EFontStyle.Default); + } + + AddSpan(h.GetTextContent(), EFontStyle.Default); + + AddLineBreak(); + } + } +} diff --git a/CSharpBible/Data/NebelEbook/BasicFontStyle.cs b/CSharpBible/Data/NebelEbook/BasicFontStyle.cs new file mode 100644 index 000000000..0c87f8f9b --- /dev/null +++ b/CSharpBible/Data/NebelEbook/BasicFontStyle.cs @@ -0,0 +1,17 @@ +using Document.Base.Models.Interfaces; + +namespace NebelEbook; + +internal sealed class BasicFontStyle : IDocFontStyle +{ + public static readonly BasicFontStyle Instance = new(); + + public string? Name => null; + public bool Bold => false; + public bool Italic => false; + public bool Underline => false; + public string? Color => null; + public string? FontFamily => null; + public double? FontSizePt => null; + public bool Strikeout => false; +} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/Properties/launchSettings.json b/CSharpBible/Data/NebelEbook/Properties/launchSettings.json new file mode 100644 index 000000000..5bb6a445b --- /dev/null +++ b/CSharpBible/Data/NebelEbook/Properties/launchSettings.json @@ -0,0 +1,15 @@ +{ + "profiles": { + "NebelEbook": { + "commandName": "Project" + }, + "Profil \"1\"": { + "commandName": "Project", + "commandLineArgs": "html" + }, + "Profil \"2\"": { + "commandName": "Project", + "commandLineArgs": "pdf" + } + } +} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/Story.cs b/CSharpBible/Data/NebelEbook/Story.cs new file mode 100644 index 000000000..e49950206 --- /dev/null +++ b/CSharpBible/Data/NebelEbook/Story.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace NebelEbook; + +public sealed class Story +{ + public Dictionary Variables { get; set; } = new(StringComparer.OrdinalIgnoreCase); + public List Nodes { get; set; } = new(); +} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/TextTemplate.cs b/CSharpBible/Data/NebelEbook/TextTemplate.cs new file mode 100644 index 000000000..4ee5ae783 --- /dev/null +++ b/CSharpBible/Data/NebelEbook/TextTemplate.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Text.RegularExpressions; + +namespace NebelEbook; + +public static class TextTemplate +{ + private static readonly Regex Token = new(@"\{\{(?[^}]+)\}\}", RegexOptions.Compiled); + + public static string Render(string template, IDictionary vars) + { + if (string.IsNullOrEmpty(template) || vars.Count == 0) return template; + return Token.Replace(template, m => + { + var k = m.Groups["k"].Value.Trim(); + return vars.TryGetValue(k, out var v) ? v ?? string.Empty : m.Value; + }); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/story.json b/CSharpBible/Data/NebelEbook/story.json new file mode 100644 index 000000000..b76f15983 --- /dev/null +++ b/CSharpBible/Data/NebelEbook/story.json @@ -0,0 +1,718 @@ +{ + "variables": { + "strasse": "Melanchthonstraße", + "opfer": "Friedrich von Hohenberg", + "detektiv": "Kommissar Keller", + "stadt": "Bretten" + }, + "nodes": [ + { + "id": "kap1", + "title": "Kapitel 1 – Fund im Nebel", + "paragraphs": [ + "Der Nebel hing schwer über der {{strasse}}. Gelbe Laternenkelche zeichneten milchige Inseln ins Grau, als {{detektiv}} vor der Villa Hohenberg anhielt. Der Kies knirschte, irgendwo tropfte Regen von einer Markise.", + "Im Salon: {{opfer}}, tot im Sessel – der Rotwein noch warm. Die Standuhr tickte, das Feuer im Kamin war längst verglommen, und durch eine Spalte im Vorhang drang ein matter Schimmer vom Garten her.", + "Auf dem Beistelltisch: zwei Gläser, eines nur benetzt, das andere tiefrot. Der Korken lag sauber daneben. Keine Kampfspuren – aber eine unsichtbare Unruhe füllte den Raum." + ], + "choices": [ + { "label": "Clara sofort befragen", "targetId": "kap2_clara" }, + { "label": "Tatort gründlich untersuchen", "targetId": "kap2_tatort" } + ] + }, + { + "id": "kap2_clara", + "title": "Kapitel 2 – Gespräch mit Clara", + "paragraphs": [ + "Clara Hohenberg öffnete die Tür ihres Zimmers mit verweinten Augen. Der Duft von Terpentin und Kreide lag in der Luft – die Wände voller Skizzen, ein halbfertiges Porträt auf der Staffelei.", + "„Wir haben gestritten“, sagte sie leise, „über Geld, über seine Geschäfte. Aber ich habe ihn nicht getötet.“ Ihre Hände zitterten, als sie nach einem Taschentuch griff.", + "Im Flur vor dem Zimmer stand ein Schirmständer. Ein Spazierstock lehnte darin – schwer, mit einem silbernen Knauf. Nicht Claras Stil." + ], + "choices": [ + { "label": "Nach Alibi fragen", "targetId": "kap3_alibi" }, + { "label": "Skizzenblock untersuchen", "targetId": "kap3_skizzen" } + ] + }, + { + "id": "kap2_tatort", + "title": "Kapitel 2 – Stille im Salon", + "paragraphs": [ + "Der Salon roch nach kaltem Kaminrauch und teurem Bordeaux. Kein Kampf, keine umgestürzten Möbel – nur eine ordentliche, fast inszeniert wirkende Szenerie.", + "Ein Fenster stand spaltbreit offen. Auf der Fensterbank: feine Glasstaubpartikel, als hätte jemand die Verriegelung manipuliert – oder nur so getan.", + "Das Teppichmuster verriet subtile Verschiebungen. Eine Spur in Richtung Weinkeller-Tür, kaum sichtbar, als hätte jemand eine Flasche geholt – und etwas zurückgelassen." + ], + "choices": [ + { "label": "Rotwein ins Labor geben", "targetId": "kap3_labor" }, + { "label": "Fenster und Garten prüfen", "targetId": "kap3_fenster" } + ] + }, + { + "id": "kap3_alibi", + "title": "Kapitel 3 – Claras Alibi", + "paragraphs": [ + "Clara atmete tief ein. „Ich war im Theater“, sagte sie. „Premiere im Kleinen Haus, ich habe Freunde getroffen. Danach… bin ich allein nach Hause.“", + "Eine eingerissene Eintrittskarte lag auf dem Schreibtisch. Daneben ein Programmheft mit der Zeitangabe der Vorstellung. Wenn das stimmte, blieb ein enger Zeitkorridor.", + "„Er war schon tot, als ich kam“, flüsterte sie. „Der Nebel war so dicht, ich habe kaum den Gartenweg gesehen.“" + ], + "choices": [ + { "label": "Theaterbesuch verifizieren", "targetId": "kap4_theater" }, + { "label": "Claras Handy prüfen", "targetId": "kap4_phone" } + ] + }, + { + "id": "kap3_skizzen", + "title": "Kapitel 3 – Skizzenblock", + "paragraphs": [ + "Der Skizzenblock war neu, die oberen Seiten voller Studien mit schnellen Linien. Zwischen Porträtfragmenten fand sich eine überraschend exakte Perspektive auf den Salon – von außen, durch das Fenster.", + "Eine kleine Notiz am Rand: „Standpunkt: Nordhecke, 3 m“. Daneben ein Datum, gestern Abend.", + "Clara blickte weg. „Ich zeichne oft bei Nacht. Es beruhigt mich…“" + ], + "choices": [ + { "label": "Zum Atelier gehen", "targetId": "kap4_atelier" }, + { "label": "Skizzen mit Tatort abgleichen", "targetId": "kap4_compare" } + ] + }, + { + "id": "kap3_labor", + "title": "Kapitel 3 – Laborauftrag", + "paragraphs": [ + "Die Probe des Weins wanderte in ein beschriftetes Röhrchen. „Wir geben Gaschromatographie“, versprach die Laborantin. „Melden uns, sobald wir ein Ergebnis haben.“", + "Zurück im Salon schnürte sich die Zeit zusammen. Der Bordeaux in Glas zwei roch minimal bitter – Einbildung oder Anflug von Mandel? Der Kamin reflektierte stumm.", + "Ein Blick zur Kellertür. Wer hatte welche Flasche geholt – und warum diese?" + ], + "choices": [ + { "label": "Auf Laborergebnis warten", "targetId": "kap4_lab_result" }, + { "label": "Weinkeller durchsuchen", "targetId": "kap4_cellar" } + ] + }, + { + "id": "kap3_fenster", + "title": "Kapitel 3 – Spuren am Fenster", + "paragraphs": [ + "Die Verriegelung zeigte feine Kratzer, jedoch ohne eindeutige Hebelspuren. Auf der Außenseite haftete feuchter Lehm – frisch, mit sandigen Einschlüssen.", + "Im Beet darunter: Fußabdrücke der Größe 44, deutlich vor dem Regen gesetzt. Der Weg führte zur Seitenpforte und verlor sich am Eisenzaun.", + "Die Luft roch nach feuchter Erde und kaltem Blattwerk. Irgendwo knarrte ein Gartentor – oder nur der Nebel, der die Geräusche verzog." + ], + "choices": [ + { "label": "Spuren im Garten sichern", "targetId": "kap4_garden" }, + { "label": "Nachbar befragen", "targetId": "kap4_neighbor" } + ] + }, + { + "id": "kap4_theater", + "title": "Kapitel 4 – Theaterkassen und Zeugen", + "paragraphs": [ + "An der Theaterkasse blätterte die Kassiererin durch Listen. „Clara Hohenberg, zwei Tickets auf ihren Namen – abgeholt um 19:42 Uhr.“", + "Ein Bühnenarbeiter nickte. „Ich habe sie in der Pause im Foyer gesehen. Danach… weiß ich nicht.“ Die Premiere endete gegen 21:50 Uhr.", + "Die Zeiten ließen Claras Rückweg knapp, aber möglich. Ein Name tauchte in Gesprächen auf: Kurt Baumann, Geschäftspartner des Opfers – vor Ort nicht gesehen, aber häufig Thema." + ], + "choices": [ + { "label": "Geschäftspartner Baumann aufsuchen", "targetId": "kap5_partner" }, + { "label": "Zu Clara zurückkehren", "targetId": "kap5_return_clara" } + ] + }, + { + "id": "kap4_phone", + "title": "Kapitel 4 – Das Telefon", + "paragraphs": [ + "Claras Handy zeigte eine gelöschte Nachricht, die sich teilweise rekonstruieren ließ: „…Schlüssel im Globus… heute Nacht…“. Die Nummer war unterdrückt.", + "Der Verlauf wies mehrere kurze Anrufe von einer Prepaid-Nummer aus. Die Funkzelle lag in der Nähe des Dienstbotentrakts der Villa.", + "Jemand spielte mit Hinweisen – oder wollte ablenken." + ], + "choices": [ + { "label": "Nummer rückverfolgen", "targetId": "kap5_phone_trace" }, + { "label": "SMS-Inhalt rekonstruieren", "targetId": "kap5_sms" } + ] + }, + { + "id": "kap4_atelier", + "title": "Kapitel 4 – Claras Atelier", + "paragraphs": [ + "Im Atelier mischten sich Ölfarbe, Terpentin und Kaffee zu einem scharfen, lebendigen Geruch. Auf einem Tisch standen verschmierte Lappen, daneben eine Schale mit verblassten Farbresten.", + "Ein Kalender an der Wand: Markierungen, rote Kreise, ein kryptisches „E.“ an mehreren Tagen. Die jüngste Notiz: „E. – 21:00 Garten“.", + "Clara biss sich auf die Lippe. „Ich wollte reden. Über Geld. Über Freiheit.“" + ], + "choices": [ + { "label": "Chemische Probe nehmen", "targetId": "kap5_chem" }, + { "label": "Kalenderhinweise prüfen", "targetId": "kap5_calendar" } + ] + }, + { + "id": "kap4_compare", + "title": "Kapitel 4 – Perspektive prüfen", + "paragraphs": [ + "Die Skizzenperspektive passte exakt zu einem Punkt an der Nordhecke. Von dort aus sah man in den Salon, wenn der Vorhang offenstand.", + "Im Gras glänzte Tau. Zurück blieb ein schwacher Abdruck eines Stativs – oder nur ein Zufall? Ein Zigarettenstummel lag nearby: Filterlos, selten.", + "Wer hier stand, beobachtete. Aber hat er auch getötet?" + ], + "choices": [ + { "label": "Standpunkt aufsuchen", "targetId": "kap5_vantage" }, + { "label": "Fensterverriegelung erneut prüfen", "targetId": "kap5_window_recheck" } + ] + }, + { + "id": "kap4_lab_result", + "title": "Kapitel 4 – Laborergebnis", + "paragraphs": [ + "Der Rückruf kam früher als erwartet. „Digitalis-Glykoside im Wein“, sagte die Laborantin. „Keine natürliche Kontamination. Jemand hat nachgeholfen.“", + "Das Gift schmeckt bitter, aber im schweren Bordeaux fast verborgen. Die Dosis: tödlich. Das tat jemand mit Wissen – oder mit Skrupellosigkeit." + ], + "choices": [ + { "label": "Apotheke/Arzt nach Digitalis-Bezug prüfen", "targetId": "kap5_pharma" }, + { "label": "Hausapotheke durchsuchen", "targetId": "kap5_medicine_cabinet" } + ] + }, + { + "id": "kap4_cellar", + "title": "Kapitel 4 – Weinkeller", + "paragraphs": [ + "Die Luft war kühl und feucht. Reihenweise ruhende Flaschen, feinsäuberlich katalogisiert. Doch eine Reihe wirkte verstört: Kärtchen vertauscht, Staub verwischt.", + "Auf dem Boden: ein kaum wahrnehmbarer Tropfen Bordeaux, daneben ein hauchdünner Rand von dunkler Flüssigkeit – verschüttet und weggewischt.", + "Jemand kannte sich aus. Oder hatte Hilfe." + ], + "choices": [ + { "label": "Weinkarteikarten prüfen", "targetId": "kap5_cards" }, + { "label": "Kameralog (falls vorhanden) sichten", "targetId": "kap5_cctv" } + ] + }, + { + "id": "kap4_garden", + "title": "Kapitel 4 – Gartenpfade", + "paragraphs": [ + "Die Abdrücke führten an einem Gartenhaus vorbei. An der Tür klebte feuchter Lehm – als habe jemand mit schmutzigen Stiefeln angestoßen.", + "Im Gras lagen zwei dünne Fasern, dunkelblau – Textil? Ein Mantelfaden? Sie klebten am Tau und schimmerten im Laternenlicht.", + "Ein Rabe hockte auf dem Zaun und krächzte, als wolle er warnen." + ], + "choices": [ + { "label": "Gartenhaus durchsuchen", "targetId": "kap5_shed" }, + { "label": "Spuren zur Seitenpforte folgen", "targetId": "kap5_gate" } + ] + }, + { + "id": "kap4_neighbor", + "title": "Kapitel 4 – Der Nachbar", + "paragraphs": [ + "Egon Reiter, der Nachbar, öffnete misstrauisch. „Nebel macht die Leute seltsam“, brummte er. „Ich sah eine Gestalt mit Stock, spät. Konnte das Gesicht nicht erkennen.“", + "Auf seinem Tisch lag eine alte Zeitung, die vom Börsenrückgang sprach. „Hohenberg“, murmelte er, „immer zu laut, zu stolz.“", + "Reiter rauchte filterlose Zigaretten. Ein überquellender Aschenbecher bestätigte die Spur vom Garten." + ], + "choices": [ + { "label": "Butler Johann befragen", "targetId": "kap5_butler" }, + { "label": "Geschäftspartner Baumann befragen", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap5_partner", + "title": "Kapitel 5 – Kurt Baumann", + "paragraphs": [ + "Kurt Baumann empfing in einem gläsernen Büro, zu glatt, zu aufgeräumt. „Furchtbar, was passiert ist“, sagte er, die Hände zu fest auf der Tischplatte.", + "Sein Blick flackerte, als das Wort „Versicherung“ fiel. Gerüchte über Investitionen, die ins Wanken geraten waren, verdichteten sich zu Schatten an der Wand.", + "„Ich war zu Hause“, behauptete er. „Fragen Sie… keinen.“ Ein dünnes Lächeln. Lügen riechen im Nebel süß." + ], + "choices": [ + { "label": "Konten und Verträge prüfen", "targetId": "kap6_accounts" }, + { "label": "Baumann konfrontieren", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap5_return_clara", + "title": "Kapitel 5 – Zurück zu Clara", + "paragraphs": [ + "Clara saß mit einem Becher kalten Tees am Fenster. „Ich habe ihn geliebt“, sagte sie. „Aber er hat uns alle wie Figuren behandelt.“", + "Sie reichte eine Skizze, die Hohenberg lachend zeigte, selbstgefällig. „Er war nicht nur Opfer.“", + "Ihre Stimme gewann an Ruhe, als sie von ihren Plänen sprach – wegzugehen, neu zu beginnen." + ], + "choices": [ + { "label": "Clara vorläufig entlasten", "targetId": "kap6_clearing_clara" }, + { "label": "Weitere Spuren im Haus suchen", "targetId": "kap6_continue" } + ] + }, + { + "id": "kap5_phone_trace", + "title": "Kapitel 5 – Prepaid-Spur", + "paragraphs": [ + "Die Nummer führte zu einem Automatenshop, keine Auskunft. Die Funkzellenanalyse ergab Bewegungen rund um den Dienstbotentrakt und den nördlichen Park.", + "Ein Datensatz schnitt sich mit den Zeiten des Butlerschichtplans – und mit dem Auto von Baumann, das in der Nähe geparkt gewesen sein musste.", + "Zwei Welten trafen sich im Schatten: Pflicht und Profit." + ], + "choices": [ + { "label": "Butlers Route prüfen", "targetId": "kap6_butler_route" }, + { "label": "„E.“ identifizieren (Erpresser?)", "targetId": "kap6_blackmailer" } + ] + }, + { + "id": "kap5_sms", + "title": "Kapitel 5 – Der Globus", + "paragraphs": [ + "Der schwere Globus im Salon ließ sich öffnen. Im Hohlraum: ein kleiner Messingschlüssel, alt, mit eingraviertem Wappen – H für Hohenberg.", + "Anhaftungen rochen nach Wein und etwas Bitterem. Wer den Schlüssel kannte, kannte das Haus.", + "Eine eingeritzte Markierung im Holz: „G2“. Kellerreihe?" + ], + "choices": [ + { "label": "Globus-Hinweis im Keller prüfen", "targetId": "kap4_cellar" }, + { "label": "Fingerabdrücke sichern", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_chem", + "title": "Kapitel 5 – Chemische Spuren", + "paragraphs": [ + "Die Lappen rochen stark nach Terpentin, doch auch nach etwas Pflanzlichem. Ein Abgleich mit dem Labor: Keine Digitalis-Spuren im Atelier.", + "Die Farbe an Claras Händen war frisch – aber Farbreste erzählen keine Morde." + ], + "choices": [ + { "label": "Digitalis-Bezug über Apotheken prüfen", "targetId": "kap6_pharma" }, + { "label": "Turpentinspuren weiterverfolgen", "targetId": "kap6_turpentine" } + ] + }, + { + "id": "kap5_calendar", + "title": "Kapitel 5 – Der Kalender", + "paragraphs": [ + "„E.“ tauchte mehrfach in Claras Kalender auf, zuletzt am Tatabend. Egon Reiter? Oder jemand anderes?", + "Daneben eine Summe, grob überschlagen – Schulden? Schweigegeld? Liebe ist selten sauber." + ], + "choices": [ + { "label": "„E.“ identifizieren", "targetId": "kap6_blackmailer" }, + { "label": "Zeitleiste präzisieren", "targetId": "kap6_timeline" } + ] + }, + { + "id": "kap5_vantage", + "title": "Kapitel 5 – Standpunkt im Garten", + "paragraphs": [ + "Der Punkt an der Hecke gab den Blick frei. Zigarettenstummel mit Lippenabdruck, filterlos. Egon Reiter bevorzugte diese Marke.", + "Ein zerdrücktes Bonbonpapier lag daneben – Hustenbonbons. Der Nebel kratzte in der Kehle aller, die hier warteten." + ], + "choices": [ + { "label": "Egon Reiter erneut befragen", "targetId": "kap6_neighbor_egon" }, + { "label": "Observation einrichten", "targetId": "kap6_stakeout" } + ] + }, + { + "id": "kap5_window_recheck", + "title": "Kapitel 5 – Verriegelung, zweiter Blick", + "paragraphs": [ + "Die Kratzer an der Verriegelung wirkten gesetzt. Kein Hebeln, eher eine gespielte Spur – jemand wollte den Einbruch vortäuschen.", + "Im Innenrahmen klebte ein Hauch von Hautschuppen – von innen berührt." + ], + "choices": [ + { "label": "Innen-Täter annehmen", "targetId": "kap6_inside_job" }, + { "label": "Schlüsselverwaltung prüfen", "targetId": "kap6_keys" } + ] + }, + { + "id": "kap5_pharma", + "title": "Kapitel 5 – Apothekenrundgang", + "paragraphs": [ + "Zwei Apotheken bestätigten jüngste Digitalis-Verkäufe – auf Rezept. Ein Name fiel: Kurt Baumann, im Auftrag für einen „kranken Onkel“.", + "Die Rezeptkopie zeigte einen Arztstempel, echt, aber alt. Jemand nutzte Schlupflöcher." + ], + "choices": [ + { "label": "Durchsuchungsbefehl für Baumann beantragen", "targetId": "kap6_search_partner" }, + { "label": "Baumann konfrontieren", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap5_medicine_cabinet", + "title": "Kapitel 5 – Hausapotheke", + "paragraphs": [ + "Im Schrank fehlte ein Fläschchen. Der Eindruck im Staub verriet es. Auf der Innenseite: ein fettiger Fingerabdruck, nicht Claras.", + "Ein Etikettenrest klebte an der Schranktür: Digitalis – abgerissen." + ], + "choices": [ + { "label": "Butler Johann konfrontieren", "targetId": "kap6_confront_butler" }, + { "label": "Fingerabdrücke vergleichen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_cards", + "title": "Kapitel 5 – Karteikarten", + "paragraphs": [ + "Die Weinkartei zeigte eine seltsame Umbuchung am Vortag. Eine besonders gelobte Flasche war gegen eine gleich aussehende getauscht.", + "Die Handschrift passte nicht zu Clara. Eher eckig, gedrungen – männlich, geübt." + ], + "choices": [ + { "label": "Sommelier/Weinhändler befragen", "targetId": "kap6_sommelier" }, + { "label": "Fingerabdrücke im Keller vergleichen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_cctv", + "title": "Kapitel 5 – Kamerasicht", + "paragraphs": [ + "Eine alte Kamera im Seitengang zeichnete in schlechter Qualität. Um 21:22 Uhr huschte eine Gestalt vorbei – dunkler Mantel, breite Schultern.", + "Eine auffällige Ziernaht am linken Ärmel war erkennbar. Luxusmarke. Baumann trug etwas Ähnliches." + ], + "choices": [ + { "label": "Mantel sicherstellen", "targetId": "kap6_coat" }, + { "label": "Fahrzeugdaten prüfen", "targetId": "kap6_car" } + ] + }, + { + "id": "kap5_shed", + "title": "Kapitel 5 – Gartenhaus", + "paragraphs": [ + "Im Schrank standen Stiefel, Größe 44, frisch verschlammt. Daneben ein alter Eimer mit Lehm, der die gleichen Einschlüsse wie am Fenster zeigte.", + "Ein Lappen roch nach Rotwein, als hätte jemand Spritzer abgewischt." + ], + "choices": [ + { "label": "Butler konfrontieren", "targetId": "kap6_confront_butler" }, + { "label": "Spurenabgleich durchführen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_gate", + "title": "Kapitel 5 – Seitenpforte", + "paragraphs": [ + "Die Kamera an der Pforte erfasste Nummernschilder. Um 21:31 Uhr fuhr ein Wagen vor – Kennzeichen teilverdeckt, aber eindeutig die Serie eines Mietwagens.", + "Die Mietdaten führten zu einer Buchung auf einen Strohmann – mit Kreditkarte, die Baumann öfter verwendete." + ], + "choices": [ + { "label": "Baumann verhaften", "targetId": "kap6_arrest_partner" }, + { "label": "Noch Beweise bündeln (Konten)", "targetId": "kap6_accounts" } + ] + }, + { + "id": "kap5_butler", + "title": "Kapitel 5 – Butler Johann", + "paragraphs": [ + "Johann, der Butler, war ein Mann ohne Schnickschnack. Der Stock im Flur gehörte ihm – seit einer Knieverletzung.", + "„Ich diene dem Haus“, sagte er. „Und ich diene der Wahrheit.“ Sein Blick wich nicht aus, aber er mochte Clara.", + "Ein Schlüsselbund klirrte an seiner Hüfte. Einer fehlte – der mit dem Wappen?" + ], + "choices": [ + { "label": "Alibi von Johann prüfen", "targetId": "kap6_butler_alibi" }, + { "label": "Dienerquartier durchsuchen", "targetId": "kap6_search_quarters" } + ] + }, + { + "id": "kap6_accounts", + "title": "Kapitel 6 – Konten und Verträge", + "paragraphs": [ + "Die Konten offenbarten Risse: riskante Papiere, die ins Minus kippten. Baumann stand mit dem Rücken zur Wand.", + "Eine Lebensversicherung auf {{opfer}} – Begünstigter: die Firma, vertreten durch Baumann. Die Summe: genug, um Löcher zu stopfen." + ], + "choices": [ + { "label": "Durchsuchungsbefehl beantragen", "targetId": "kap6_search_partner" }, + { "label": "Baumann erneut konfrontieren", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap6_confront_partner", + "title": "Kapitel 6 – Konfrontation", + "paragraphs": [ + "„Sie haben nichts“, lächelte Baumann dünn. „Nur Vermutungen.“ Doch sein Blick huschte, als die Apotheke, das Rezept und die Kamera zur Sprache kamen.", + "Schweiß perlte, als der Globusschlüssel erwähnt wurde. „Das ist absurd“, presste er hervor." + ], + "choices": [ + { "label": "Festnehmen", "targetId": "kap_end_partner_guilty" }, + { "label": "Weitere Beweise sammeln", "targetId": "kap6_accounts" } + ] + }, + { + "id": "kap6_clearing_clara", + "title": "Kapitel 6 – Clara entlastet", + "paragraphs": [ + "Zeugen vom Theater, Uhrzeiten, Wege – die Zeitleiste entlastete Clara weitgehend. Nichts sprach für Gift in ihren Händen.", + "Sie weinte, aber da war auch Wut. Auf ein System, das sie klein hielt. Keine Mörderin – eine Gefangene." + ], + "choices": [ + { "label": "Fokus auf Baumann", "targetId": "kap5_partner" }, + { "label": "Butler erneut sprechen", "targetId": "kap5_butler" } + ] + }, + { + "id": "kap6_continue", + "title": "Kapitel 6 – Weitere Spuren", + "paragraphs": [ + "Das Haus atmete Geschichten. Jeder Raum flüsterte eine Spur, doch nicht jede führte ans Ziel.", + "Manchmal liegt die Wahrheit im Keller – oder beim Nachbar, der zu viel sieht." + ], + "choices": [ + { "label": "Weinkeller erneut prüfen", "targetId": "kap4_cellar" }, + { "label": "Nachbar erneut befragen", "targetId": "kap4_neighbor" }, + { "label": "Fall an Kollegen abgeben (Ende offen)", "targetId": "kap_end_case_unsolved" } + ] + }, + { + "id": "kap6_butler_route", + "title": "Kapitel 6 – Johanns Wege", + "paragraphs": [ + "Die Zeiterfassung zeigte Johann zur Tatzeit in der Küche und beim Gästezimmer – mehrere Zeugen, darunter die Köchin.", + "Die Funkzellendaten seines alten Telefons passten: kein Abweichen. Der Stock war alt, nicht die Spur." + ], + "choices": [ + { "label": "Butler entlasten", "targetId": "kap6_clearing_butler" }, + { "label": "Baumann verfolgen", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap6_blackmailer", + "title": "Kapitel 6 – „E.“ der Erpresser", + "paragraphs": [ + "„E.“ war Egon Reiter – der Nachbar. Er hatte Hohenberg und Clara beobachtet, um Geld zu erpressen. Aber Gift? Nein. Er mochte Drohungen, keine Endgültigkeit.", + "Seine Aussage brachte das Puzzle voran: Er sah Baumann am Zaun – nervös, hastig, als der Nebel dichter wurde." + ], + "choices": [ + { "label": "Egon streng verhören", "targetId": "kap6_neighbor_egon" }, + { "label": "Innen-Täter-Spur stärken", "targetId": "kap6_inside_job" } + ] + }, + { + "id": "kap6_globe", + "title": "Kapitel 6 – Der Schlüsselhinweis", + "paragraphs": [ + "Der Globus-Schlüssel öffnete ein spezifisches Fach im Kellerregal – G2. Dort lag eine identische Flasche wie am Tatort, leer.", + "Damit war klar: Jemand hatte bewusst vertauscht." + ], + "choices": [ + { "label": "Keller nochmals sichern", "targetId": "kap4_cellar" }, + { "label": "Fingerabdrücke vergleichen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap6_servant", + "title": "Kapitel 6 – Dienerflur", + "paragraphs": [ + "Im Dienerflur roch es nach Bohnerwachs und altem Kaffee. Ein Spind stand offen – sauber, ordentlich, ohne Hinweise.", + "Ein Zettel an der Pinnwand: Lieferdienst für den Abend abgesagt – Unterschrift unleserlich." + ], + "choices": [ + { "label": "Quartier systematisch durchsuchen", "targetId": "kap6_search_quarters" }, + { "label": "Johann erneut sprechen", "targetId": "kap6_butler_alibi" } + ] + }, + { + "id": "kap6_pharma", + "title": "Kapitel 6 – Apothekenabgleich", + "paragraphs": [ + "Die Apothekerin erinnerte sich: „Der Herr war nervös, sagte, sein Onkel brauche das. Er hatte feine Manschettenknöpfe.“", + "Das passte zu Baumann. Ein Mosaikstein mehr." + ], + "choices": [ + { "label": "Durchsuchung bei Baumann", "targetId": "kap6_search_partner" }, + { "label": "Konfrontation vorbereiten", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap6_turpentine", + "title": "Kapitel 6 – Spur im Atelier", + "paragraphs": [ + "Turpentin ist scharf, aber kein Gift wie Digitalis. Claras Atelier war ein Ort der Flucht – nicht des Mordes.", + "Die Spur verlor an Kraft. Zeit, den Blick zu heben." + ], + "choices": [ + { "label": "Zum Laborergebnis zurück", "targetId": "kap4_lab_result" }, + { "label": "Baumann prüfen", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap6_neighbor_egon", + "title": "Kapitel 6 – Egons Aussage", + "paragraphs": [ + "Egon gab nach. „Ja, ich hab' geguckt. Ich hab' gedacht, ich krieg' was raus. Aber der mit dem Mantel – das war nicht die Frau.“", + "„Breite Schultern. Hat was fallen lassen am Zaun.“ Ein Metallklang, ein Schlüssel?" + ], + "choices": [ + { "label": "Aussage protokollieren", "targetId": "kap6_accounts" }, + { "label": "Observation verstärken", "targetId": "kap6_stakeout" } + ] + }, + { + "id": "kap6_stakeout", + "title": "Kapitel 6 – Observation", + "paragraphs": [ + "Die Nacht atmete Nebel. Gegen Mitternacht bewegte sich eine Gestalt im Garten – dunkler Mantel, gleiche Ziernaht.", + "Er hob eine Bodenplatte, holte ein Kuvert. Dokumente. Gier hat einen Rhythmus." + ], + "choices": [ + { "label": "Zugreifen", "targetId": "kap_end_partner_guilty" }, + { "label": "Weiter beobachten", "targetId": "kap6_car" } + ] + }, + { + "id": "kap6_inside_job", + "title": "Kapitel 6 – Der Innentäter", + "paragraphs": [ + "Keine echten Einbruchsspuren, Schlüssel im Spiel, bewusst vertauschte Flaschen. Der Täter kannte das Haus.", + "Wer profitierte – und wer hatte Zugang? Butler? Clara? Oder Baumann mit Hilfe?" + ], + "choices": [ + { "label": "Schlüsselverwaltung prüfen", "targetId": "kap6_keys" }, + { "label": "Personalakten durchsuchen", "targetId": "kap6_search_quarters" } + ] + }, + { + "id": "kap6_keys", + "title": "Kapitel 6 – Schlüsselprotokoll", + "paragraphs": [ + "Ein Hauptschlüssel fehlte kurzzeitig in der Liste – vermerkt mit einer unsauberen Signatur. Am nächsten Morgen wieder aufgeführt.", + "Später fand sich ein identischer Schlüssel in einem Mantel – nicht im Dienertrakt." + ], + "choices": [ + { "label": "Durchsuchung bei Baumann", "targetId": "kap6_search_partner" }, + { "label": "Butler befragen", "targetId": "kap6_confront_butler" } + ] + }, + { + "id": "kap6_search_partner", + "title": "Kapitel 6 – Durchsuchung bei Baumann", + "paragraphs": [ + "In seinem Schrank: ein Mantel mit der gleichen Ziernaht. In der Innentasche: ein Fläschchen mit Digitalis-Resten.", + "In einer Schublade: Weinkarteikarten der Villa – fotografiert, markiert. Und ein Schlüssel mit dem Hohenberg-Wappen." + ], + "choices": [ + { "label": "Festnehmen", "targetId": "kap_end_partner_guilty" }, + { "label": "Presse informieren (trotzdem Festnahme)", "targetId": "kap_end_partner_guilty" } + ] + }, + { + "id": "kap6_confront_butler", + "title": "Kapitel 6 – Gespräch mit Johann", + "paragraphs": [ + "Johann stand aufrecht. „Ich habe den Schlüssel verliehen, ja. An Herrn Baumann. Er sagte, es ginge um eine Überraschung für den Herrn.“", + "Scham und Zorn rangen in seiner Stimme. „Ich habe Fehler gemacht. Aber ich töte nicht.“" + ], + "choices": [ + { "label": "Johann festnehmen (falsches Ende)", "targetId": "kap_end_butler_guilty" }, + { "label": "Aussage sichern und Baumann stellen", "targetId": "kap6_search_partner" } + ] + }, + { + "id": "kap6_compare_prints", + "title": "Kapitel 6 – Spurensicherung", + "paragraphs": [ + "Die Abdrücke vom Globus und von der Flasche ergaben ein klares Bild: Baumanns Finger – dazu Textilfasern seines Mantels am Gartenzaun.", + "Claras Spuren fanden sich nur dort, wo sie sein mussten. Johann blieb in den Rändern." + ], + "choices": [ + { "label": "Baumann festnehmen", "targetId": "kap_end_partner_guilty" }, + { "label": "Zeitleiste mit Clara final prüfen", "targetId": "kap6_timeline" } + ] + }, + { + "id": "kap6_sommelier", + "title": "Kapitel 6 – Weinhändler", + "paragraphs": [ + "Der Händler erinnerte sich: „Ein Mann bestellte zwei identische Etiketten, wollte eine Flasche ‚aufhübschen‘. Teure Spielchen.“", + "Die Beschreibung passte erneut auf Baumann. Fingerzeige wurden Fingerabdrücke." + ], + "choices": [ + { "label": "Aussage protokollieren", "targetId": "kap6_accounts" }, + { "label": "Kellerkameras erneut prüfen", "targetId": "kap5_cctv" } + ] + }, + { + "id": "kap6_coat", + "title": "Kapitel 6 – Der Mantel", + "paragraphs": [ + "Im Stoffsaum: Bordeauxspritzer, im Futter: eine feine Staubspur vom Keller. In der Innentasche: der fehlende Schlüssel.", + "Der Mantel erzählte alles, was sein Träger verschwieg." + ], + "choices": [ + { "label": "Spurensicherung/DNA", "targetId": "kap6_compare_prints" }, + { "label": "Sofortige Festnahme", "targetId": "kap_end_partner_guilty" } + ] + }, + { + "id": "kap6_car", + "title": "Kapitel 6 – Fahrzeugspur", + "paragraphs": [ + "Maut- und Kameradaten ergaben eine Linie durch die Nacht. Der Mietwagen kreiste um die Villa wie ein hungriger Wolf.", + "Am Ende stand er dort, wo der Nebel am dicksten war." + ], + "choices": [ + { "label": "Zugreifen", "targetId": "kap_end_partner_guilty" }, + { "label": "Noch einmal observieren", "targetId": "kap6_stakeout" } + ] + }, + { + "id": "kap6_butler_alibi", + "title": "Kapitel 6 – Johanns Alibi", + "paragraphs": [ + "Die Köchin bestätigte: „Er war hier, hat Holz gebracht, Tee gekocht. Der Mann ist pünktlich wie die Uhr.“", + "Johanns Augen wurden weich, als der Name Clara fiel. Loyalität ist kein Verbrechen." + ], + "choices": [ + { "label": "Butler entlasten", "targetId": "kap6_clearing_butler" }, + { "label": "Blick auf Baumann richten", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap6_search_quarters", + "title": "Kapitel 6 – Dienerquartier", + "paragraphs": [ + "Die Zimmer waren schlicht. In einem Schrank: Stiefel mit Lehm – aber älterer Schmutz, getrocknet, nicht von heute.", + "Kein Gift, keine Karten, keine Schlüssel. Nur das Leben hinter den Kulissen." + ], + "choices": [ + { "label": "Spuren mit Schuhgröße abgleichen", "targetId": "kap6_compare_prints" }, + { "label": "Butler erneut vernehmen", "targetId": "kap6_confront_butler" } + ] + }, + { + "id": "kap6_clearing_butler", + "title": "Kapitel 6 – Johann entlastet", + "paragraphs": [ + "Die Spuren entlasteten Johann. Seine Fehler waren menschlich, nicht mörderisch.", + "Bleibt, wer vom Tod profitierte – und Zugang hatte." + ], + "choices": [ + { "label": "Auf Baumann konzentrieren", "targetId": "kap5_partner" }, + { "label": "Egon Reiter erneut anhören", "targetId": "kap6_neighbor_egon" } + ] + }, + { + "id": "kap6_arrest_partner", + "title": "Kapitel 6 – Zugriff", + "paragraphs": [ + "Als die Handschellen klickten, blickte Baumann lange in den Nebel. „Er hätte mich ruiniert“, sagte er tonlos.", + "Gier ist ein stiller Lehrmeister. Und tödlich, wenn sie Wein trinkt." + ], + "choices": [ + { "label": "Fall abschließen", "targetId": "kap_end_partner_guilty" } + ] + }, + { + "id": "kap6_timeline", + "title": "Kapitel 6 – Zeitleiste", + "paragraphs": [ + "Minuten wurden zu Markierungen. Claras Zeiten hielten, Baumanns bröckelten. Der Wein wurde gegen 21:15 manipuliert.", + "Um 21:22 die Kameragestalt, um 21:31 der Wagen. Der Tod trat leise um 21:45 ein." + ], + "choices": [ + { "label": "Festnahme bei Baumann", "targetId": "kap_end_partner_guilty" }, + { "label": "Clara endgültig entlasten", "targetId": "kap6_clearing_clara" } + ] + }, + { + "id": "kap_end_partner_guilty", + "title": "Epilog – Der Mantel des Nebels", + "paragraphs": [ + "Kurt Baumann gestand in Stücken, dann im Ganzen: Er hatte die Flaschen getauscht, das Gift dosiert, den Einbruch inszeniert. Schulden, Versicherung, kalte Logik.", + "Clara verließ die Villa Wochen später. Johann blieb und hütete die leisen Räume, in denen wieder Holz knisterte und Tee duftete.", + "In {{stadt}} blieb der Nebel – aber die Geschichten fanden ihren Weg. {{detektiv}} schrieb einen knappen Bericht: „Der Wein war schwer. Die Wahrheit nicht.“" + ], + "choices": [] + }, + { + "id": "kap_end_butler_guilty", + "title": "Epilog – Der falsche Schluss", + "paragraphs": [ + "Johann wurde abgeführt. Die Presse liebte das Bild vom Diener, der zu weit ging. Wochen später brachen die Indizien gegen ihn zusammen.", + "Die Wahrheit wartete im Mantel eines anderen. Doch manche Fehler lassen sich nicht rückgängig machen.", + "Im Nebel verlieren sich nicht nur Schritte – auch Geister der Gerechtigkeit." + ], + "choices": [] + }, + { + "id": "kap_end_case_unsolved", + "title": "Epilog – Offenes Ende", + "paragraphs": [ + "Der Fall wanderte in eine Mappe. Die Mappe in ein Regal. Die Nacht in {{stadt}} blieb feucht, und der Nebel schwieg.", + "Manchmal ist Schweigen die grausamste aller Antworten. Doch Geschichten enden selten – sie warten nur." + ], + "choices": [] + } + ] +} \ No newline at end of file diff --git a/CSharpBible/Data/StoryNode.cs b/CSharpBible/Data/StoryNode.cs new file mode 100644 index 000000000..4ceac3b3a --- /dev/null +++ b/CSharpBible/Data/StoryNode.cs @@ -0,0 +1,15 @@ +public class StoryNode +{ + public string Id { get; } + public string Title { get; set; } // <--- set hinzugefügt + public string[] Paragraphs { get; set; } // <--- set hinzugefügt + public List Choices { get; set; } // <--- set hinzugefügt + + public StoryNode(string id, string title, string[] paragraphs, List choices) + { + Id = id; + Title = title; + Paragraphs = paragraphs; + Choices = choices; + } +} \ No newline at end of file From 30ba2debeea9c9b76f0f887650f0b764423d522e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:17:52 +0200 Subject: [PATCH 151/569] Document.Base --- .../Document.Base/Models/Interfaces/IDocContent.cs | 1 + .../Document.Base/Models/Interfaces/IDocFontStyle.cs | 1 + .../Document.Base/Models/Interfaces/IDocSection.cs | 4 ++-- .../Document.Base/Models/Interfaces/IUserDocument.cs | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs index e4478a981..cd447eced 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs @@ -29,6 +29,7 @@ public interface IDocContent : IDocElement IDocSpan AddSpan(IDocFontStyle docFontStyle); IDocSpan AddSpan(string text,IList docFontStyle); IDocSpan AddSpan(string text,IDocFontStyle docFontStyle); + IDocSpan AddSpan(string text, EFontStyle eFontStyle); IDocSpan AddLink(IDocFontStyle docFontStyle); IDocStyleStyle GetStyle(); diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocFontStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocFontStyle.cs index 6fdf1c5bc..154259935 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocFontStyle.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocFontStyle.cs @@ -6,6 +6,7 @@ public interface IDocFontStyle bool Bold { get; } bool Italic { get; } bool Underline { get; } + bool Strikeout { get; } string? Color { get; } string? FontFamily { get; } double? FontSizePt { get; } diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs index 8fac3b13a..6169b1c09 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs @@ -9,6 +9,6 @@ public interface IDocSection : IDocElement { IDocParagraph AddParagraph(string ATextStyleName); - IDocContent AddHeadline(int aLevel); - IDocContent AddTOC(string aName, int aLevel); + IDocHeadline AddHeadline(int aLevel); + IDocTOC AddTOC(string aName, int aLevel); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs index 1dc05f027..65cefc711 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs @@ -3,8 +3,8 @@ public interface IUserDocument { IDocParagraph AddParagraph(string cStylename); - IDocContent AddHeadline(int nLevel); - IDocContent AddTOC(string cName, int nLevel); + IDocHeadline AddHeadline(int nLevel); + IDocTOC AddTOC(string cName, int nLevel); IDocElement Root { get; } IEnumerable Enumerate(); bool IsModified { get; } From 19b679d68ce7625eabc8c7945477df88f11a1c64 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:17:53 +0200 Subject: [PATCH 152/569] Document.Html --- .../Document.Html/HtmlDocument.cs | 8 +++++--- .../Document.Html/Model/HtmlContentBase.cs | 18 ++++++++++++++++++ .../Document.Html/Model/HtmlHeadline.cs | 2 +- .../Document.Html/Model/HtmlSection.cs | 6 +++--- .../Document.Html/Model/HtmlStyle.cs | 4 +++- .../Document.Html/Model/HtmlTOC.cs | 9 +++++++-- 6 files changed, 37 insertions(+), 10 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs index 690ca4316..91554386e 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs @@ -1,11 +1,13 @@ -using System.Text; using Document.Base.Models.Interfaces; +using Document.Base.Registration; using Document.Html.IO; using Document.Html.Model; using Document.Html.Serialization; +using System.Text; namespace Document.Html; +[UserDocumentProvider("html", Extensions = new[] { ".html", ".htm" }, ContentType = "text/html", DisplayName = "HTML Document")] public sealed class HtmlDocument : IUserDocument { private bool _isModified; @@ -33,14 +35,14 @@ public IDocParagraph AddParagraph(string cStylename) return section.AddParagraph(cStylename); } - public IDocContent AddHeadline(int nLevel) + public IDocHeadline AddHeadline(int nLevel) { var section = EnsureRoot(); _isModified = true; return section.AddHeadline(nLevel); } - public IDocContent AddTOC(string cName, int nLevel) + public IDocTOC AddTOC(string cName, int nLevel) { var section = EnsureRoot(); _isModified = true; diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs index 862c77075..e7551d0a3 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs @@ -1,4 +1,5 @@ using System.Text; +using Document.Base.Models; using Document.Base.Models.Interfaces; namespace Document.Html.Model; @@ -79,4 +80,21 @@ public virtual string GetTextContent(bool xRecursive = true) } return sb.ToString(); } + + public IDocSpan AddSpan(string text, EFontStyle eFontStyle) + { + switch (eFontStyle) + { + case EFontStyle.Bold: + return AddSpan(text, HtmlFontStyle.BoldStyle); + case EFontStyle.Italic: + return AddSpan(text, HtmlFontStyle.ItalicStyle); + case EFontStyle.Underline: + return AddSpan(text, HtmlFontStyle.UnderlineStyle); + case EFontStyle.Strikeout: + return AddSpan(text, HtmlFontStyle.StrikeoutStyle); + default: + return AddSpan(text, HtmlFontStyle.Default); + } + } } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs index 943af1190..fd864626d 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs @@ -2,7 +2,7 @@ namespace Document.Html.Model; -public sealed class HtmlHeadline : HtmlContentBase +public sealed class HtmlHeadline : HtmlContentBase, IDocHeadline { public int Level { get; } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs index 747776b1b..b65d5f5a4 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs @@ -10,13 +10,13 @@ public IDocParagraph AddParagraph(string ATextStyleName) return (IDocParagraph)AddChild(p); } - public IDocContent AddHeadline(int aLevel) + public IDocHeadline AddHeadline(int aLevel) { var h = new HtmlHeadline(aLevel); - return (IDocContent)AddChild(h); + return (IDocHeadline)AddChild(h); } - public IDocContent AddTOC(string aName, int aLevel) + public IDocTOC AddTOC(string aName, int aLevel) { var toc = new HtmlTOC(aName, aLevel); AddChild(toc); diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlStyle.cs index e1454a9ee..d356f696f 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlStyle.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlStyle.cs @@ -23,6 +23,7 @@ public sealed class HtmlFontStyle : IDocFontStyle public bool Bold { get; init; } public bool Italic { get; init; } public bool Underline { get; init; } + public bool Strikeout { get; init; } public string? Color { get; init; } public string? FontFamily { get; init; } public double? FontSizePt { get; init; } @@ -30,5 +31,6 @@ public sealed class HtmlFontStyle : IDocFontStyle public static readonly HtmlFontStyle Default = new(); public static readonly HtmlFontStyle BoldStyle = new() { Name = "Bold", Bold = true }; public static readonly HtmlFontStyle ItalicStyle = new() { Name = "Italic", Italic = true }; - + public static readonly HtmlFontStyle UnderlineStyle = new() { Name = "Underline", Underline = true }; + public static readonly HtmlFontStyle StrikeoutStyle = new() { Name = "Strikeout", Strikeout= true }; } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs index 0675a7b21..7ef0714ab 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs @@ -3,7 +3,7 @@ namespace Document.Html.Model; -public sealed class HtmlTOC : HtmlContentBase +public sealed class HtmlTOC : HtmlContentBase, IDocTOC { public string Name { get; } public int Level { get; } @@ -22,7 +22,7 @@ public void RebuildFrom(IDocSection root) TextContent = string.Empty; Nodes.Clear(); - foreach (var h in root.Enumerate().OfType().Where(h => h.Level <= Level)) + foreach (var h in root.Enumerate().OfType().Where(h => h.Level <= Level)) { var p = new HtmlParagraph("TOCEntry"); var anchorText = h.GetTextContent(true); @@ -41,4 +41,9 @@ public void RebuildFrom(IDocSection root) AddChild(p); } } + + public void RebuildFrom(IDocElement root) + { + throw new NotImplementedException(); + } } From 60641c422f57b9814cf61c103f47ae3cc29ddf9f Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:17:55 +0200 Subject: [PATCH 153/569] Document.Pdf --- .../Document.Pdf/Model/PdfContentBase.cs | 22 +++++ .../Document.Pdf/Model/PdfHeadline.cs | 4 +- .../Document.Pdf/Model/PdfSection.cs | 6 +- .../Document.Pdf/Model/PdfStyle.cs | 7 ++ .../DocumentUtils/Document.Pdf/PdfDocument.cs | 6 +- .../Document.Pdf/Render/IPdfEngine.cs | 2 + .../Document.Pdf/Render/PdfRenderer.cs | 41 +++++++++ .../Document.Pdf/Render/PdfSharpEngine.cs | 85 +++++++++++++++++++ 8 files changed, 167 insertions(+), 6 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs index 395b05b07..11ccb1768 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs @@ -1,4 +1,5 @@ using System.Text; +using Document.Base.Models; using Document.Base.Models.Interfaces; namespace Document.Pdf.Model; @@ -72,4 +73,25 @@ public virtual string GetTextContent(bool xRecursive = true) if (c is IDocContent ic) sb.Append(ic.GetTextContent(true)); return sb.ToString(); } + + public IDocSpan AddSpan(string text, EFontStyle eFontStyle) + { + switch (eFontStyle) + { + case EFontStyle.Default: + return AddSpan(text, PdfFontStyle.Default); + case EFontStyle.Bold: + return AddSpan(text, PdfFontStyle.BoldStyle); + case EFontStyle.Italic: + return AddSpan(text, PdfFontStyle.ItalicStyle); + case EFontStyle.BoldItalic: + return AddSpan(text, PdfFontStyle.BoldItalic); + case EFontStyle.Underline: + return AddSpan(text, PdfFontStyle.UnderlineStyle); + case EFontStyle.Strikeout: + return AddSpan(text, PdfFontStyle.StrikeoutStyle); + default: + return AddSpan(text, PdfFontStyle.Default); + } + } } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs index 9e0dd8b17..852b5b06e 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs @@ -2,9 +2,11 @@ namespace Document.Pdf.Model; -public sealed class PdfHeadline : PdfContentBase +public sealed class PdfHeadline : PdfContentBase, IDocHeadline { public int Level { get; } + public object Page { get; internal set; } + public PdfHeadline(int level) => Level = Math.Clamp(level, 1, 6); public override IDocStyleStyle GetStyle() => new PdfStyle($"H{Level}"); } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs index 5567370d3..da61ae892 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs @@ -10,15 +10,15 @@ public IDocParagraph AddParagraph(string ATextStyleName) return AddChild(p); } - public IDocContent AddHeadline(int aLevel) + public IDocHeadline AddHeadline(int aLevel) { var h = new PdfHeadline(aLevel); return AddChild(h); } - public IDocContent AddTOC(string aName, int aLevel) + public IDocTOC AddTOC(string aName, int aLevel) { - var p = new PdfParagraph("TOC"); + var p = new PdfTOC(aName,aLevel); p.AppendText($"{aName} (bis H{aLevel})"); return AddChild(p); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs index f2f8e8652..99e0c68f2 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfStyle.cs @@ -22,5 +22,12 @@ public sealed class PdfFontStyle : IDocFontStyle public string? Color { get; init; } public string? FontFamily { get; init; } = "Arial"; public double? FontSizePt { get; init; } = 12; + public bool Strikeout { get; init; } + public static readonly PdfFontStyle Default = new(); + public static readonly PdfFontStyle BoldStyle = new() { Name = "Bold", Bold = true }; + public static readonly PdfFontStyle ItalicStyle = new() { Name = "Italic", Italic = true }; + public static readonly PdfFontStyle BoldItalic = new() { Name = "BoldItalic", Bold = true, Italic = true }; + public static readonly PdfFontStyle UnderlineStyle = new() { Name = "Underline", Underline = true }; + public static readonly PdfFontStyle StrikeoutStyle = new() { Name = "Strikeout", Strikeout = true }; } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs index fba7c47ef..aa3b83d53 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs @@ -1,9 +1,11 @@ using Document.Base.Models.Interfaces; +using Document.Base.Registration; using Document.Pdf.Model; using Document.Pdf.Render; namespace Document.Pdf; +[UserDocumentProvider("pdf", Extensions = new[] { ".pdf" }, ContentType = "application/pdf", DisplayName = "PDF Document")] public sealed class PdfDocument : IUserDocument { private bool _isModified; @@ -29,13 +31,13 @@ public IDocParagraph AddParagraph(string cStylename) return EnsureRoot().AddParagraph(cStylename); } - public IDocContent AddHeadline(int nLevel) + public IDocHeadline AddHeadline(int nLevel) { _isModified = true; return EnsureRoot().AddHeadline(nLevel); } - public IDocContent AddTOC(string cName, int nLevel) + public IDocTOC AddTOC(string cName, int nLevel) { _isModified = true; return EnsureRoot().AddTOC(cName, nLevel); diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs index 02d7928cb..87f08254d 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/IPdfEngine.cs @@ -2,6 +2,8 @@ namespace Document.Pdf.Render; public interface IPdfEngine : IDisposable { + object CurrentPageNumber { get; } + void BeginDocument(); void AddPage(); void SetFont(string family, bool bold, bool italic, double sizePt); diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs index 2213241a7..7d80f9e33 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfRenderer.cs @@ -5,6 +5,24 @@ namespace Document.Pdf.Render; public static class PdfRenderer { + /* + Pseudocode (DE): + - Ziel: Rendering eines Inhaltsverzeichnisses (PdfTOC) implementieren. + - Vorgehen: + 1) Beim Treffen auf einen PdfTOC: + - Ermittele die Wurzel-Sektion (oberste IDocSection) durch Hochlaufen über Parent. + - Falls Wurzel vorhanden: t.RebuildFrom(rootSection) aufrufen, um das TOC zu generieren. + 2) Überschrift für das TOC ausgeben: + - Wenn t.Name nicht leer/whitespace ist: engine.AddHeadline(t.Level, t.Name). + 3) Inhalt des TOC ausgeben: + - text = t.GetTextContent(true) + - Wenn text nicht leer/whitespace: engine.WriteText(text). + 4) break. + - Hilfsfunktion: + - FindRootSection(IDocElement node): Läuft über PdfNodeBase.Parent bis zum obersten Knoten + und gibt diesen als IDocSection zurück, wenn möglich. + */ + public static void Render(PdfSection root, IPdfEngine engine) { engine.BeginDocument(); @@ -18,6 +36,7 @@ private static void WriteNode(IDocElement node, IPdfEngine engine) { case PdfHeadline h: engine.AddHeadline(h.Level, h.GetTextContent(true)); + h.Page = engine.CurrentPageNumber; break; case PdfParagraph p: @@ -26,6 +45,19 @@ private static void WriteNode(IDocElement node, IPdfEngine engine) engine.WriteText(text); break; + case PdfTOC t: + var rootSection = FindRootSection(t); + if (rootSection is not null) + t.RebuildFrom(rootSection); + + if (!string.IsNullOrWhiteSpace(t.Name)) + engine.AddHeadline(t.Level, t.Name); + + var tocText = t.GetTextContent(true); + if (!string.IsNullOrWhiteSpace(tocText)) + engine.WriteText(tocText); + break; + case PdfSection s: foreach (var c in s.Children) WriteNode(c, engine); @@ -38,4 +70,13 @@ private static void WriteNode(IDocElement node, IPdfEngine engine) break; } } + + private static IDocSection? FindRootSection(IDocElement node) + { + var current = node as PdfNodeBase; + while (current?.Parent is PdfNodeBase parent) + current = parent; + + return current as IDocSection; + } } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs index 18e799a62..37a2ea474 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Render/PdfSharpEngine.cs @@ -1,6 +1,12 @@ +using System; +using System.Collections.Generic; +using System.IO; using PdfSharp.Drawing; using PdfSharp.Fonts; using PdfSharp.Pdf; +using PdfSharp.Pdf.Annotations; +using PdfSharp.Pdf.Advanced; + namespace Document.Pdf.Render; public sealed class PdfSharpEngine : IPdfEngine @@ -15,6 +21,9 @@ public sealed class PdfSharpEngine : IPdfEngine private double _top = 40; private double _right = 40; + // Bookmark-Speicher + private readonly Dictionary _bookmarks = new(StringComparer.OrdinalIgnoreCase); + public PdfSharpEngine() { GlobalFontSettings.UseWindowsFontsUnderWindows = true; @@ -24,6 +33,8 @@ public PdfSharpEngine() private double ContentWidth => (_page?.Width ?? 595) - _left - _right; private double LineHeight => _font.GetHeight(); + public object CurrentPageNumber => throw new NotImplementedException(); + public void BeginDocument() { @@ -105,4 +116,78 @@ public void Dispose() _gfx?.Dispose(); _doc?.Dispose(); } + + // --- Bookmark-API --- + + // Fügt an der aktuellen Position ein Bookmark ein (optional mit Outline-Eintrag im PDF-Navigationsbaum). + public void AddBookmark(string name, bool addOutline = true) + { + if (string.IsNullOrWhiteSpace(name) || _doc is null || _page is null) return; + + var top = new XUnit(_y); + var info = new BookmarkInfo(_page, top); + + if (addOutline) + { + var outline = _doc.Outlines.Add(name, _page, true); + try + { + var dest = new PdfDestination(_page) + { + Mode = PdfDestinationMode.FitH, + Top = top + }; + outline.Destination = dest; + } + catch + { + // Fallback: Wenn Destination nicht gesetzt werden kann, bleibt Outline seitenbasiert. + } + + info.Outline = outline; + } + + _bookmarks[name] = info; + } + + // Schreibt klickbaren Text, der zu einem zuvor definierten Bookmark springt. + public void WriteLinkToBookmark(string text, string bookmarkName) + { + if (string.IsNullOrEmpty(text) || string.IsNullOrEmpty(bookmarkName)) return; + if (_page is null || _gfx is null) return; + if (!_bookmarks.TryGetValue(bookmarkName, out var bm)) return; + + EnsurePageSpace(); + + var size = _gfx.MeasureString(text, _font); + var rect = new XRect(_left, _y, size.Width, LineHeight); + + // Link-Text (optional farbig) + _gfx.DrawString(text, _font, XBrushes.Blue, rect, XStringFormats.TopLeft); + + // Annotation mit Ziel + var linkRect = new PdfRectangle(rect); + var link = _page.AddDocumentLink(linkRect, _doc!.Pages.IndexOf(bm.Page)); + + _page.Annotations.Add(link); + + _y += LineHeight; + } + + // Prüft, ob ein Bookmark existiert. + public bool HasBookmark(string name) => !string.IsNullOrWhiteSpace(name) && _bookmarks.ContainsKey(name); + + // Interner Container für Bookmark-Zielinformationen + private sealed class BookmarkInfo + { + public BookmarkInfo(PdfPage page, XUnit top) + { + Page = page; + Top = top; + } + + public PdfPage Page { get; } + public XUnit Top { get; } + public PdfOutline? Outline { get; set; } + } } \ No newline at end of file From ba7a2beb3ee08a8256a31c2df7b35d069fe6b45b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:17:57 +0200 Subject: [PATCH 154/569] HtmlExample --- .../Data/DocumentUtils/HtmlExample/Program.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs b/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs index 28ec889ad..82c59dd01 100644 --- a/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs +++ b/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs @@ -1,9 +1,7 @@ using Document.Base.Models.Interfaces; using System.Diagnostics; -using System.Reflection.Metadata; -using System; -using System.IO; -using Document.Html; +using Document.Base.Factories; +using Document.Base.Models; using Document.Html.Model; namespace HtmlExample; @@ -19,7 +17,7 @@ static void Main(string[] args) private static void CreateHtmlDocument2() { - var doc = new HtmlDocument(); + var doc = UserDocumentFactory.Create("html"); // Überschrift IDocContent h1 = doc.AddHeadline(1); @@ -32,7 +30,7 @@ private static void CreateHtmlDocument2() // Optional: weitere Elemente p.AddLineBreak(); - p.AddSpan("Fetter Text", HtmlFontStyle.BoldStyle); +// p.AddSpan("Fetter Text"); // Dokument speichern var outputPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "example.html"); @@ -46,14 +44,14 @@ private static void CreateHtmlDocument2() private static void CreateSampleDocument() { // Beispiel: Dokument erstellen, schreiben und wieder lesen - IDocSection root = new HtmlSection(); - HtmlHeadline h1 = (Document.Html.Model.HtmlHeadline)root.AddHeadline(1); + var root = UserDocumentFactory.Create("html").Root as IDocSection; + var h1 = root.AddHeadline(1); h1.TextContent = "Titel"; var p = root.AddParagraph("Body"); p.AppendText("Hallo "); - p.AddSpan("Welt", HtmlFontStyle.Default); + p.AddSpan("Welt", EFontStyle.Default); p.AddLineBreak(); - var toc = (HtmlTOC)root.AddTOC("Inhalt", 2); + var toc = root.AddTOC("Inhalt", 2); toc.RebuildFrom(root); var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test.html"); From 9554b2bc445225c0128f2b8630e61021b1beb049 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:18:00 +0200 Subject: [PATCH 155/569] NebelEbook --- CSharpBible/Data/NebelEbook/Choice.cs | 2 +- CSharpBible/Data/NebelEbook/NebelEbook.csproj | 18 +- CSharpBible/Data/NebelEbook/Program.cs | 331 +++++++----------- CSharpBible/Data/NebelEbook/StoryNode.cs | 2 +- 4 files changed, 140 insertions(+), 213 deletions(-) diff --git a/CSharpBible/Data/NebelEbook/Choice.cs b/CSharpBible/Data/NebelEbook/Choice.cs index bbbe1347c..4f86ab590 100644 --- a/CSharpBible/Data/NebelEbook/Choice.cs +++ b/CSharpBible/Data/NebelEbook/Choice.cs @@ -9,7 +9,7 @@ public class Choice /// /// Der anzuzeigende Text der Auswahl (z. B. Button- oder Link-Beschriftung). /// - public string Label { get; } + public string Label { get; set; } /// /// Die Zielkennung (ID), auf die diese Auswahl verweist diff --git a/CSharpBible/Data/NebelEbook/NebelEbook.csproj b/CSharpBible/Data/NebelEbook/NebelEbook.csproj index 3c13f6e71..e26e3e299 100644 --- a/CSharpBible/Data/NebelEbook/NebelEbook.csproj +++ b/CSharpBible/Data/NebelEbook/NebelEbook.csproj @@ -1,16 +1,24 @@ - + Exe - net6.0 + net9.0 enable enable + - - - + + PreserveNewest + + + + + + + + diff --git a/CSharpBible/Data/NebelEbook/Program.cs b/CSharpBible/Data/NebelEbook/Program.cs index 4d7f183c2..710dd0ffe 100644 --- a/CSharpBible/Data/NebelEbook/Program.cs +++ b/CSharpBible/Data/NebelEbook/Program.cs @@ -1,251 +1,170 @@ -using MigraDoc.DocumentObjectModel; -using PdfSharp.Drawing; -using PdfSharp.Drawing.Layout; -using PdfSharp.Fonts; -using PdfSharp.Pdf; -using PdfSharp.Pdf.Annotations; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using SkiaSharp; +using System.Text; +using System.Text.Json; +using Document.Base.Factories; +using Document.Base.Models.Interfaces; +using Document.Html; namespace NebelEbook; class Program { - static void Main() + static int Main(string[] args) { - GlobalFontSettings.UseWindowsFontsUnderWindows = true; + var t= typeof(HtmlDocument); - var nodes = BuildStoryNodes(); - PdfDocument doc = new PdfDocument(); - doc.Info.Title = "Nebel über Bretten – Interaktives eBook"; - - var fontTitle = new XFont("Arial", 18, XFontStyleEx.Bold); - var fontBody = new XFont("Arial", 12, XFontStyleEx.Regular); - var fontLink = new XFont("Arial", 12, XFontStyleEx.Underline); - - // Inhaltsverzeichnis - var tocPage = doc.AddPage(); - var gfxToc = XGraphics.FromPdfPage(tocPage); - gfxToc.DrawString("Inhaltsverzeichnis", fontTitle, XBrushes.Black, new XRect(0, 40, tocPage.Width, 20), XStringFormats.TopCenter); - - double tocY = 80; - foreach (var node in nodes) - { - gfxToc.DrawString(node.Title, fontBody, XBrushes.Black, 40, tocY); - var rect = new XRect(300, tocY - 12, 200, 20); - gfxToc.DrawString("Gehe zu Kapitel", fontLink, XBrushes.Blue, rect, XStringFormats.TopLeft); - - var link = new PdfLinkAnnotation() - { - Rectangle = rect.ToPdfRect(), - }; - tocPage.Annotations.Add(link); - - tocY += 25; - } - - // Kapitel-Seiten - var pageIndexMap = new Dictionary(); - foreach (var node in nodes) + try { - var page = doc.AddPage(); - pageIndexMap[node.Id] = page; - var gfx = XGraphics.FromPdfPage(page); + var key = (args.Length > 0 ? args[0] : "html").Trim().ToLowerInvariant(); + var storyPath = Path.Combine(AppContext.BaseDirectory, "story.json"); + + // Ausgabedatei bestimmen + var output = args.Length > 1 + ? args[1] + : Path.Combine( + AppContext.BaseDirectory, + key switch + { + "html" => "Nebel_ueber_Bretten_Interaktiv.html", + "pdf" => "Nebel_ueber_Bretten_Interaktiv.pdf", + _ when key.EndsWith(".html", StringComparison.OrdinalIgnoreCase) => Path.GetFileName(key), + _ when key.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) => Path.GetFileName(key), + _ => $"Nebel_ueber_Bretten_Interaktiv.{(key.Contains('/') ? "out" : key)}" + }); - double y = 40; - gfx.DrawString(node.Title, fontTitle, XBrushes.Black, 40, y); - y += 30; + // Dokument über Factory erstellen (per Key 'pdf'/'html' oder per Dateiendung) + IUserDocument doc = UserDocumentFactory.Create(key); - foreach (var para in node.Paragraphs) - { - var tf = new XTextFormatter(gfx); - tf.DrawString(para, fontBody, XBrushes.Black, new XRect(40, y, page.Width - 80, 100), XStringFormats.TopLeft); - y += 60; - } + var story = LoadOrCreateSampleStory(storyPath); + BuildDocument(doc, story); - if (node.Choices != null && node.Choices.Count > 0) + if (!doc.SaveTo(output)) { - y += 20; - gfx.DrawString("Deine Wahl:", fontBody, XBrushes.Black, 40, y); - y += 20; - - foreach (var choice in node.Choices) - { - var rect = new XRect(60, y - 12, 400, 20); - gfx.DrawString("→ " + choice.Label, fontLink, XBrushes.Blue, rect, XStringFormats.TopLeft); - - var link = new PdfLinkAnnotation() - { - Rectangle = rect.ToPdfRect(), - }; - page.Annotations.Add(link); - - y += 20; - } + Console.Error.WriteLine($"Speichern fehlgeschlagen: {output}"); + return 2; } - } - // Links aktualisieren - int tocIndex = 0; - foreach (var node in nodes) - { - var tocLink = tocPage.Annotations[tocIndex] as PdfLinkAnnotation; - tocIndex++; + Console.WriteLine($"Erstellt: {Path.GetFullPath(output)}"); + return 0; } - - // Kapitel-Links aktualisieren - foreach (var node in nodes) + catch (Exception ex) { - var page = pageIndexMap[node.Id]; - int choiceIndex = 0; - foreach (var choice in node.Choices) - { - var link = page.Annotations[choiceIndex] as PdfLinkAnnotation; - choiceIndex++; - } + Console.Error.WriteLine(ex); + return 1; } - - AddFlowchartPage(doc, nodes); - - doc.Save("Nebel_ueber_Bretten_Interaktiv.pdf"); - Console.WriteLine("PDF erstellt: Nebel_ueber_Bretten_Interaktiv.pdf"); } - static void AddFlowchartPage(PdfDocument pdf, List nodes) + + private static IUserDocument CreateUserDocument(string key, string output) { - int width = 1200; - int height = 1600; - using var bitmap = new SKBitmap(width, height); - using var canvas = new SKCanvas(bitmap); - canvas.Clear(SKColors.White); + // Versuch nach Key/MIME/Extension/Pfad + if (UserDocumentFactory.TryCreate(key, out var byKey) && byKey is not null) + return byKey; - var paintText = new SKPaint - { - Color = SKColors.Black, - TextSize = 20, - IsAntialias = true - }; - var paintRect = new SKPaint - { - Color = SKColors.LightGray, - IsAntialias = true, - Style = SKPaintStyle.Fill - }; - var paintLine = new SKPaint - { - Color = SKColors.DarkSlateGray, - StrokeWidth = 2, - IsAntialias = true - }; + var byExt = UserDocumentFactory.CreateForPath(output) + ?? UserDocumentFactory.CreateForExtension(Path.GetExtension(output)); + if (byExt is not null) + return byExt; - // Einfache Layout-Logik: Knoten untereinander - int x = 100; - int y = 80; - int boxW = 300; - int boxH = 60; - int vSpacing = 100; + // Fallback: pdf + return UserDocumentFactory.Create("html"); + } - var positions = new Dictionary(); + private static void BuildDocument(IUserDocument doc, Story story) + { + var font = BasicFontStyle.Instance; - foreach (var node in nodes) + // Inhaltsverzeichnis { - var rect = new SKRect(x, y, x + boxW, y + boxH); - canvas.DrawRect(rect, paintRect); - canvas.DrawText(node.Title, x + 10, y + 35, paintText); - positions[node.Id] = new SKPoint(x + boxW / 2, y + boxH); - - y += boxH + vSpacing; - } + var hToc = doc.AddHeadline(1); + hToc.TextContent = "Inhaltsverzeichnis"; - // Pfeile zeichnen - foreach (var node in nodes) - { - if (node.Choices == null) continue; - foreach (var choice in node.Choices) + foreach (var n in story.Nodes) { - if (positions.ContainsKey(node.Id) && positions.ContainsKey(choice.TargetId)) - { - var start = positions[node.Id]; - var end = positions[choice.TargetId]; - canvas.DrawLine(start.X, start.Y, end.X, end.Y - boxH, paintLine); - } + var p = doc.AddParagraph("TOCEntry"); + var link = p.AddLink(font); + link.TextContent = TextTemplate.Render(n.Title, story.Variables); + // Formatneutrale Link-Zielangabe + link.SetStyle(doc, font); // optional, falls Engines Styles nutzen + // über IDOMElement.Attributes: + // href für HTML; PDF-Engine kann diese Information interpretieren + (link as IDOMElement).Attributes["href"] = $"#{n.Id}"; } } - // In MemoryStream speichern - using var imgStream = new MemoryStream(); - using (var image = SKImage.FromBitmap(bitmap)) - using (var data = image.Encode(SKEncodedImageFormat.Png, 100)) + // Kapitel + foreach (var node in story.Nodes) { - data.SaveTo(imgStream); - } + var h = doc.AddHeadline(1); + h.TextContent = TextTemplate.Render(node.Title, story.Variables); - var page= pdf.AddPage(); - - } - - static List BuildStoryNodes() - { - var nodes = new List(); + // Anker-Span mit id = node.Id + var anchor = h.AddSpan(font); + (anchor as IDOMElement).Attributes["id"] = node.Id; - nodes.Add(new StoryNode( - "kap1", - "Kapitel 1 – Fund im Nebel", - new[] - { - "Der Nebel hing schwer über der Melanchthonstraße...", - "Im Salon: Friedrich von Hohenberg, tot im Sessel..." - }, - new List + foreach (var para in node.Paragraphs) { - new Choice("Clara sofort befragen", "kap2_clara"), - new Choice("Tatort gründlich untersuchen", "kap2_tatort") + var p = doc.AddParagraph("Body"); + p.TextContent = TextTemplate.Render(para, story.Variables); } - )); - nodes.Add(new StoryNode( - "kap2_clara", - "Kapitel 2 – Gespräch mit Clara", - new[] - { - "Clara öffnete die Tür mit verweinten Augen...", - "»Wir haben gestritten«, sagte sie leise..." - }, - new List + if (node.Choices is { Count: > 0 }) { - new Choice("Nach Alibi fragen", "kap3_alibi"), - new Choice("Skizzenblock untersuchen", "kap3_skizzen") - } - )); + var ph = doc.AddParagraph("ChoiceHeader"); + ph.TextContent = "Deine Wahl:"; - nodes.Add(new StoryNode( - "kap2_tatort", - "Kapitel 2 – Stille im Salon", - new[] - { - "Der Salon roch nach kaltem Kaminrauch...", - "Kein Kampf, keine umgestürzten Möbel..." - }, - new List - { - new Choice("Rotwein ins Labor", "kap3_labor"), - new Choice("Fenster prüfen", "kap3_fenster") + foreach (var c in node.Choices) + { + var cp = doc.AddParagraph("Choice"); + var l = cp.AddLink(font); + l.TextContent = "→ " + TextTemplate.Render(c.Label, story.Variables); + (l as IDOMElement).Attributes["href"] = $"#{c.TargetId}"; + } } - )); + } + } - // Weitere Kapitel hier ergänzen... + static Story LoadOrCreateSampleStory(string path) + { + if (File.Exists(path)) + { + using var fs = File.OpenRead(path); + return JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }) ?? new Story(); + } - return nodes; + var sample = CreateSampleStory(); + var json = JsonSerializer.Serialize(sample, new JsonSerializerOptions { WriteIndented = true }); + File.WriteAllText(path, json, new UTF8Encoding(false)); + return sample; } -} -static class PdfExtensions -{ - public static PdfRectangle ToPdfRect(this XRect rect) + // Minimaler Fallback – vollständige story.json wird bereits mitkopiert. + static Story CreateSampleStory() => new Story { - return new PdfRectangle(rect.TopLeft, rect.Size); - } + Variables = new Dictionary + { + ["strasse"] = "Melanchthonstraße", + ["opfer"] = "Friedrich von Hohenberg", + ["detektiv"] = "Kommissar Keller", + ["stadt"] = "Bretten" + }, + Nodes = new() + { + new StoryNode( + "kap1", + "Kapitel 1 – Fund im Nebel", + new[] + { + "Der Nebel hing schwer über der {{strasse}}.", + "Im Salon: {{opfer}}, tot im Sessel – der Rotwein noch warm." + }, + new List + { + new("Clara sofort befragen", "kap2_clara"), + new("Tatort gründlich untersuchen", "kap2_tatort") + }) + } + }; } \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/StoryNode.cs b/CSharpBible/Data/NebelEbook/StoryNode.cs index eed9afa3b..62ad5103c 100644 --- a/CSharpBible/Data/NebelEbook/StoryNode.cs +++ b/CSharpBible/Data/NebelEbook/StoryNode.cs @@ -18,7 +18,7 @@ public class StoryNode /// /// Titel des Story-Knotens. /// - public string Title { get; } + public string Title { get; set; } /// /// Sammlung der Textabsätze in der vorgesehenen Anzeige-Reihenfolge. From f025932e3533ef314bc2483ce3326e007f0390a8 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:18:11 +0200 Subject: [PATCH 156/569] TraceCsv2realCsv --- CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj b/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj index d5a57c396..bda95742d 100644 --- a/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj +++ b/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj @@ -2,7 +2,7 @@ Exe - net462;net472;net48;net481;net6.0;net7.0;net8.0 + net462;net472;net48;net481;net6.0;net7.0;net8.0;net9.0 From 278e20826b2c22884f45ca8b8d0bd738a9167d54 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 19 Sep 2025 22:18:11 +0200 Subject: [PATCH 157/569] TraceCsv2realCsvTests --- .../Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj b/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj index 3c660d867..eab80ce05 100644 --- a/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj +++ b/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj @@ -1,7 +1,7 @@  - net462;net472;net48;net481;net6.0;net7.0;net8.0 + net462;net472;net48;net481;net6.0;net7.0;net8.0;net9.0 true From 7cb2a5e6ef54642faa0d6305bfa2331390b5467e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:02:07 +0200 Subject: [PATCH 158/569] AboutEx --- .../Data/DocumentUtils/Directory.Build.props | 13 + .../Document.Xaml/Document.Xaml.csproj | 12 + .../Document.Xaml/IO/XamlDocumentIO.cs | 18 + .../Document.Xaml/Model/XamlContentBase.cs | 94 ++ .../Document.Xaml/Model/XamlHeadline.cs | 18 + .../Document.Xaml/Model/XamlInlineElements.cs | 5 + .../Document.Xaml/Model/XamlNodeBase.cs | 83 ++ .../Document.Xaml/Model/XamlParagraph.cs | 27 + .../Document.Xaml/Model/XamlSection.cs | 25 + .../Document.Xaml/Model/XamlSpan.cs | 44 + .../Document.Xaml/Model/XamlStyle.cs | 36 + .../Document.Xaml/Model/XamlTOC.cs | 38 + .../Serialization/XamlDocumentSerializer.cs | 219 +++ .../Document.Xaml/XamlDocument.cs | 97 ++ .../BuildOutputFileNameBenchmark.cs | 56 + .../Data/RepoMigrator/Directory.Build.props | 13 + CSharpBible/Data/Story.Base/Data/Choice.cs | 31 + CSharpBible/Data/Story.Base/Data/Story.cs | 10 + CSharpBible/Data/Story.Base/Data/StoryNode.cs | 46 + .../Data/Story.Base/Resources/story.json | 719 ++++++++++ .../Data/Story.Base/Resources/story2.json | 345 +++++ .../Data/Story.Base/Resources/story3.json | 1 + CSharpBible/Data/Story.Base/Story.Base.csproj | 15 + CSharpBible/Help/AboutEx.xml | 171 --- CSharpBible/Help/AboutExTests.xml | 48 - CSharpBible/Help/ActionTest.xml | 92 -- CSharpBible/Help/ActionTestWPF.xml | 35 - CSharpBible/Help/AddPage.xml | 92 -- CSharpBible/Help/AddPageWPF.xml | 30 - CSharpBible/Help/BaseLib.xml | 172 --- CSharpBible/Help/BaseLibTests.xml | 13 - CSharpBible/Help/BindingGroupExp.xml | 91 -- CSharpBible/Help/CSFreeVision.xml | 319 ----- CSharpBible/Help/CSV_Viewer.xml | 143 -- CSharpBible/Help/CSV_ViewerTest.xml | 73 - CSharpBible/Help/CSharpBibleTest.xml | 18 - CSharpBible/Help/Calc32.xml | 174 --- CSharpBible/Help/Calc32Cons.xml | 97 -- CSharpBible/Help/Calc32Tests.xml | 85 -- CSharpBible/Help/Calc32WPF.xml | 156 --- CSharpBible/Help/Calc32WPFTests.xml | 41 - CSharpBible/Help/Calc64Base.xml | 491 ------- CSharpBible/Help/Calc64BaseTests.xml | 309 ----- CSharpBible/Help/Calc64WF.xml | 296 ---- CSharpBible/Help/Calc64WFTests.xml | 41 - CSharpBible/Help/CanvasWPF.xml | 128 -- .../Help/CanvasWPF2_ItemTemplateSelector.xml | 234 ---- CSharpBible/Help/CharGrid.xml | 63 - CSharpBible/Help/CommonDialogs.xml | 184 --- CSharpBible/Help/ConsoleDisplay.xml | 530 ------- CSharpBible/Help/ConsoleLib.xml | 1212 ----------------- CSharpBible/Help/ConsoleMouseApp.xml | 24 - CSharpBible/Help/DataGridEx.xml | 129 -- CSharpBible/Help/DataGridExWPF.xml | 121 -- CSharpBible/Help/DemoLibrary.xml | 162 --- CSharpBible/Help/DemoLibraryTests.xml | 48 - CSharpBible/Help/DialogBoxes.xml | 168 --- CSharpBible/Help/Display_Test.xml | 25 - CSharpBible/Help/DynamicShapeWPF.xml | 24 - CSharpBible/Help/ItemsControlTut1.xml | 19 - CSharpBible/Help/ItemsControlTut2.xml | 36 - CSharpBible/Help/ItemsControlTut3_net.xml | 87 -- .../Help/ItemsControlTut3_netTests.xml | 8 - CSharpBible/Help/ItemsControlTut4_net.xml | 85 -- .../Help/ItemsControlTut4_netTests.xml | 154 --- CSharpBible/Help/ListBinding.xml | 193 --- CSharpBible/Help/ListBindingTests.xml | 103 -- CSharpBible/Help/MVVM_16_Usercontrol_1.xml | 23 - CSharpBible/Help/MVVM_16_Usercontrol_2.xml | 17 - CSharpBible/Help/MVVM_17_1_CSV_Laden.xml | 99 -- CSharpBible/Help/MVVM_18_MultiConverters.xml | 118 -- CSharpBible/Help/MVVM_20_Sysdialogs.xml | 213 --- CSharpBible/Help/MVVM_20_SysdialogsTests.xml | 75 - CSharpBible/Help/MVVM_21_Buttons.xml | 151 -- CSharpBible/Help/MVVM_22_WpfCap.xml | 279 ---- CSharpBible/Help/MVVM_6_Converters.xml | 96 -- CSharpBible/Help/MVVM_6_Converters_2.xml | 70 - CSharpBible/Help/MVVM_6_Converters_3.xml | 103 -- CSharpBible/Help/MVVM_BaseLib.xml | 377 ----- CSharpBible/Help/MVVM_BaseLibTests.xml | 94 -- CSharpBible/Help/MVVM_Converter_DrawGrid.xml | 226 --- CSharpBible/Help/MVVM_Converter_DrawGrid2.xml | 263 ---- .../Help/MVVM_Converter_DrawGrid3_NonLin.xml | 263 ---- CSharpBible/Help/MVVM_Converter_Grid.xml | 140 -- CSharpBible/Help/MVVM_Converter_Grid2.xml | 140 -- .../Help/MVVM_Converter_Grid3_NonLin.xml | 17 - CSharpBible/Help/MVVM_Converter_ImgGrid.xml | 38 - CSharpBible/Help/MVVM_Converter_ImgGrid2.xml | 263 ---- CSharpBible/Help/MVVM_Lines_on_Grid.xml | 169 --- CSharpBible/Help/MVVM_TiledDisplay_net.xml | 214 --- CSharpBible/Help/MathLibrary.xml | 223 --- CSharpBible/Help/MathLibraryTests.xml | 159 --- CSharpBible/Help/Permutation.xml | 38 - CSharpBible/Help/PermutationTests.xml | 8 - CSharpBible/Help/PlotgraphWPF.xml | 93 -- CSharpBible/Help/Polyline.xml | 128 -- CSharpBible/Help/Snake_Base.xml | 772 ----------- CSharpBible/Help/Snake_BaseTests.xml | 414 ------ CSharpBible/Help/Snake_Console_net.xml | 70 - CSharpBible/Help/Sokoban_Base.xml | 951 ------------- CSharpBible/Help/Sokoban_BaseTests.xml | 38 - CSharpBible/Help/SomeThing2.xml | 8 - CSharpBible/Help/SyncAsyncParallel.xml | 110 -- CSharpBible/Help/TestConsole.xml | 228 ---- CSharpBible/Help/TestConsoleDemo.xml | 28 - CSharpBible/Help/TestConsoleTests.xml | 53 - CSharpBible/Help/TestDirectives.xml | 13 - CSharpBible/Help/Tetris_Base.xml | 551 -------- CSharpBible/Help/Tetris_BaseTests.xml | 98 -- CSharpBible/Help/TitleGen.xml | 29 - CSharpBible/Help/VTileEdit.xml | 13 - CSharpBible/Help/WFSystem.Windows.Data.xml | 33 - CSharpBible/Help/Werner_Flaschbier_Base.xml | 942 ------------- .../Help/Werner_Flaschbier_BaseTests.xml | 28 - CSharpBible/Help/WpfApp.xml | 46 - CSharpBible/Help/WpfApp_net.xml | 46 - CSharpBible/Help/WpfDemoUI.xml | 54 - CSharpBible/Help/WpfDemoUI1.xml | 54 - CSharpBible/Help/WpfDemoUI2.xml | 59 - 119 files changed, 1965 insertions(+), 15459 deletions(-) create mode 100644 CSharpBible/Data/DocumentUtils/Directory.Build.props create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Document.Xaml.csproj create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/IO/XamlDocumentIO.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlContentBase.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlHeadline.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlInlineElements.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlNodeBase.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlParagraph.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSection.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSpan.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlStyle.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlTOC.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/Serialization/XamlDocumentSerializer.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Xaml/XamlDocument.cs create mode 100644 CSharpBible/Data/NebelEbook/Benchmarks/BuildOutputFileNameBenchmark.cs create mode 100644 CSharpBible/Data/RepoMigrator/Directory.Build.props create mode 100644 CSharpBible/Data/Story.Base/Data/Choice.cs create mode 100644 CSharpBible/Data/Story.Base/Data/Story.cs create mode 100644 CSharpBible/Data/Story.Base/Data/StoryNode.cs create mode 100644 CSharpBible/Data/Story.Base/Resources/story.json create mode 100644 CSharpBible/Data/Story.Base/Resources/story2.json create mode 100644 CSharpBible/Data/Story.Base/Resources/story3.json create mode 100644 CSharpBible/Data/Story.Base/Story.Base.csproj delete mode 100644 CSharpBible/Help/AboutEx.xml delete mode 100644 CSharpBible/Help/AboutExTests.xml delete mode 100644 CSharpBible/Help/ActionTest.xml delete mode 100644 CSharpBible/Help/ActionTestWPF.xml delete mode 100644 CSharpBible/Help/AddPage.xml delete mode 100644 CSharpBible/Help/AddPageWPF.xml delete mode 100644 CSharpBible/Help/BaseLib.xml delete mode 100644 CSharpBible/Help/BaseLibTests.xml delete mode 100644 CSharpBible/Help/BindingGroupExp.xml delete mode 100644 CSharpBible/Help/CSFreeVision.xml delete mode 100644 CSharpBible/Help/CSV_Viewer.xml delete mode 100644 CSharpBible/Help/CSV_ViewerTest.xml delete mode 100644 CSharpBible/Help/CSharpBibleTest.xml delete mode 100644 CSharpBible/Help/Calc32.xml delete mode 100644 CSharpBible/Help/Calc32Cons.xml delete mode 100644 CSharpBible/Help/Calc32Tests.xml delete mode 100644 CSharpBible/Help/Calc32WPF.xml delete mode 100644 CSharpBible/Help/Calc32WPFTests.xml delete mode 100644 CSharpBible/Help/Calc64Base.xml delete mode 100644 CSharpBible/Help/Calc64BaseTests.xml delete mode 100644 CSharpBible/Help/Calc64WF.xml delete mode 100644 CSharpBible/Help/Calc64WFTests.xml delete mode 100644 CSharpBible/Help/CanvasWPF.xml delete mode 100644 CSharpBible/Help/CanvasWPF2_ItemTemplateSelector.xml delete mode 100644 CSharpBible/Help/CharGrid.xml delete mode 100644 CSharpBible/Help/CommonDialogs.xml delete mode 100644 CSharpBible/Help/ConsoleDisplay.xml delete mode 100644 CSharpBible/Help/ConsoleLib.xml delete mode 100644 CSharpBible/Help/ConsoleMouseApp.xml delete mode 100644 CSharpBible/Help/DataGridEx.xml delete mode 100644 CSharpBible/Help/DataGridExWPF.xml delete mode 100644 CSharpBible/Help/DemoLibrary.xml delete mode 100644 CSharpBible/Help/DemoLibraryTests.xml delete mode 100644 CSharpBible/Help/DialogBoxes.xml delete mode 100644 CSharpBible/Help/Display_Test.xml delete mode 100644 CSharpBible/Help/DynamicShapeWPF.xml delete mode 100644 CSharpBible/Help/ItemsControlTut1.xml delete mode 100644 CSharpBible/Help/ItemsControlTut2.xml delete mode 100644 CSharpBible/Help/ItemsControlTut3_net.xml delete mode 100644 CSharpBible/Help/ItemsControlTut3_netTests.xml delete mode 100644 CSharpBible/Help/ItemsControlTut4_net.xml delete mode 100644 CSharpBible/Help/ItemsControlTut4_netTests.xml delete mode 100644 CSharpBible/Help/ListBinding.xml delete mode 100644 CSharpBible/Help/ListBindingTests.xml delete mode 100644 CSharpBible/Help/MVVM_16_Usercontrol_1.xml delete mode 100644 CSharpBible/Help/MVVM_16_Usercontrol_2.xml delete mode 100644 CSharpBible/Help/MVVM_17_1_CSV_Laden.xml delete mode 100644 CSharpBible/Help/MVVM_18_MultiConverters.xml delete mode 100644 CSharpBible/Help/MVVM_20_Sysdialogs.xml delete mode 100644 CSharpBible/Help/MVVM_20_SysdialogsTests.xml delete mode 100644 CSharpBible/Help/MVVM_21_Buttons.xml delete mode 100644 CSharpBible/Help/MVVM_22_WpfCap.xml delete mode 100644 CSharpBible/Help/MVVM_6_Converters.xml delete mode 100644 CSharpBible/Help/MVVM_6_Converters_2.xml delete mode 100644 CSharpBible/Help/MVVM_6_Converters_3.xml delete mode 100644 CSharpBible/Help/MVVM_BaseLib.xml delete mode 100644 CSharpBible/Help/MVVM_BaseLibTests.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_DrawGrid.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_DrawGrid2.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_DrawGrid3_NonLin.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_Grid.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_Grid2.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_Grid3_NonLin.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_ImgGrid.xml delete mode 100644 CSharpBible/Help/MVVM_Converter_ImgGrid2.xml delete mode 100644 CSharpBible/Help/MVVM_Lines_on_Grid.xml delete mode 100644 CSharpBible/Help/MVVM_TiledDisplay_net.xml delete mode 100644 CSharpBible/Help/MathLibrary.xml delete mode 100644 CSharpBible/Help/MathLibraryTests.xml delete mode 100644 CSharpBible/Help/Permutation.xml delete mode 100644 CSharpBible/Help/PermutationTests.xml delete mode 100644 CSharpBible/Help/PlotgraphWPF.xml delete mode 100644 CSharpBible/Help/Polyline.xml delete mode 100644 CSharpBible/Help/Snake_Base.xml delete mode 100644 CSharpBible/Help/Snake_BaseTests.xml delete mode 100644 CSharpBible/Help/Snake_Console_net.xml delete mode 100644 CSharpBible/Help/Sokoban_Base.xml delete mode 100644 CSharpBible/Help/Sokoban_BaseTests.xml delete mode 100644 CSharpBible/Help/SomeThing2.xml delete mode 100644 CSharpBible/Help/SyncAsyncParallel.xml delete mode 100644 CSharpBible/Help/TestConsole.xml delete mode 100644 CSharpBible/Help/TestConsoleDemo.xml delete mode 100644 CSharpBible/Help/TestConsoleTests.xml delete mode 100644 CSharpBible/Help/TestDirectives.xml delete mode 100644 CSharpBible/Help/Tetris_Base.xml delete mode 100644 CSharpBible/Help/Tetris_BaseTests.xml delete mode 100644 CSharpBible/Help/TitleGen.xml delete mode 100644 CSharpBible/Help/VTileEdit.xml delete mode 100644 CSharpBible/Help/WFSystem.Windows.Data.xml delete mode 100644 CSharpBible/Help/Werner_Flaschbier_Base.xml delete mode 100644 CSharpBible/Help/Werner_Flaschbier_BaseTests.xml delete mode 100644 CSharpBible/Help/WpfApp.xml delete mode 100644 CSharpBible/Help/WpfApp_net.xml delete mode 100644 CSharpBible/Help/WpfDemoUI.xml delete mode 100644 CSharpBible/Help/WpfDemoUI1.xml delete mode 100644 CSharpBible/Help/WpfDemoUI2.xml diff --git a/CSharpBible/Data/DocumentUtils/Directory.Build.props b/CSharpBible/Data/DocumentUtils/Directory.Build.props new file mode 100644 index 000000000..f5a3e07ac --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Directory.Build.props @@ -0,0 +1,13 @@ + + + ..\..\..\..\bin\$(MSBuildProjectName)\ + ..\..\..\..\obj.net\$(MSBuildProjectName)\ + $(MSBuildProjectName.Replace(".","_").Replace("_net","")) + preview + enable + disable + JC-Soft + Joe Care + Copyright © JC-Soft 2025 + + diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Document.Xaml.csproj b/CSharpBible/Data/DocumentUtils/Document.Xaml/Document.Xaml.csproj new file mode 100644 index 000000000..4bf606b16 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Document.Xaml.csproj @@ -0,0 +1,12 @@ + + + net9.0 + enable + enable + preview + + + + + + \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/IO/XamlDocumentIO.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/IO/XamlDocumentIO.cs new file mode 100644 index 000000000..2499880e1 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/IO/XamlDocumentIO.cs @@ -0,0 +1,18 @@ +using System.Text; +using Document.Xaml.Model; +using Document.Xaml.Serialization; + +namespace Document.Xaml.IO; + +public static class XamlDocumentIO +{ + public static async Task SaveAsync(XamlSection root, string path, CancellationToken ct = default) + { + var xaml = XamlDocumentSerializer.ToXamlString(root); + await File.WriteAllTextAsync(path, xaml, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false), ct); + } + + // Platzhalter für künftiges Laden + public static Task LoadAsync(string path, CancellationToken ct = default) + => Task.FromResult(new XamlSection()); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlContentBase.cs new file mode 100644 index 000000000..ed82f2185 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlContentBase.cs @@ -0,0 +1,94 @@ +using System.Text; +using Document.Base.Models; +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public abstract class XamlContentBase : XamlNodeBase, IDocContent +{ + private readonly StringBuilder _text = new(); + + public virtual string TextContent + { + get => _text.ToString(); + set + { + _text.Clear(); + if (!string.IsNullOrEmpty(value)) _text.Append(value); + } + } + + public void AppendText(string text) + { + if (!string.IsNullOrEmpty(text)) _text.Append(text); + } + + public virtual IDocContent AddLineBreak() + { + AddChild(new XamlLineBreak()); + return this; + } + + public virtual IDocContent AddNBSpace(IDocFontStyle docFontStyle) + { + AddChild(new XamlNbSpace()); + return this; + } + + public virtual IDocContent AddTab(IDocFontStyle docFontStyle) + { + AddChild(new XamlTab()); + return this; + } + + public virtual IDocSpan AddSpan(IDocFontStyle docFontStyle) + => (IDocSpan)AddChild(new XamlSpan(docFontStyle)); + + public virtual IDocSpan AddSpan(string text, IList docFontStyle) + { + var span = new XamlSpan(XamlFontStyle.Default) { TextContent = text }; + return (IDocSpan)AddChild(span); + } + + public virtual IDocSpan AddSpan(string text, IDocFontStyle docFontStyle) + { + var span = new XamlSpan(docFontStyle) { TextContent = text }; + return (IDocSpan)AddChild(span); + } + + public virtual IDocSpan AddLink(string Href,IDocFontStyle docFontStyle) + { + var link = new XamlSpan(docFontStyle) { IsLink = true, Href = Href }; + return (IDocSpan)AddChild(link); + } + + public abstract IDocStyleStyle GetStyle(); + + public virtual string GetTextContent(bool xRecursive = true) + { + if (!xRecursive) return TextContent; + + var sb = new StringBuilder(); + sb.Append(TextContent); + foreach (var c in Nodes) + { + if (c is IDocContent dc) + { + sb.Append(dc.GetTextContent(true)); + } + } + return sb.ToString(); + } + + public IDocSpan AddSpan(string text, EFontStyle eFontStyle) + { + return eFontStyle switch + { + EFontStyle.Bold => AddSpan(text, XamlFontStyle.BoldStyle), + EFontStyle.Italic => AddSpan(text, XamlFontStyle.ItalicStyle), + EFontStyle.Underline => AddSpan(text, XamlFontStyle.UnderlineStyle), + EFontStyle.Strikeout => AddSpan(text, XamlFontStyle.StrikeoutStyle), + _ => AddSpan(text, XamlFontStyle.Default) + }; + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlHeadline.cs new file mode 100644 index 000000000..c31bc99cb --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlHeadline.cs @@ -0,0 +1,18 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public sealed class XamlHeadline : XamlContentBase, IDocHeadline +{ + public int Level { get; } + + public string Id { get; } + + public XamlHeadline(int level, string id) + { + Level = Math.Clamp(level, 1, 6); + Id = id; + } + + public override IDocStyleStyle GetStyle() => new XamlStyle($"H{Level}"); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlInlineElements.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlInlineElements.cs new file mode 100644 index 000000000..6ddb1e0af --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlInlineElements.cs @@ -0,0 +1,5 @@ +namespace Document.Xaml.Model; + +public sealed class XamlLineBreak : XamlNodeBase { } +public sealed class XamlNbSpace : XamlNodeBase { } +public sealed class XamlTab : XamlNodeBase { } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlNodeBase.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlNodeBase.cs new file mode 100644 index 000000000..96580ce26 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlNodeBase.cs @@ -0,0 +1,83 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public abstract class XamlNodeBase : IDocElement +{ + public IList Nodes { get; } = new List(); + public IDictionary Attributes { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + + public XamlNodeBase? Parent { get; private set; } + + public IDOMElement AddChild(IDOMElement element) + { + if (element is XamlNodeBase x) x.Parent = this; + Nodes.Add(element); + return element; + } + + public string? GetAttribute(string name) + => Attributes.TryGetValue(name, out var v) ? v : null; + + public virtual IDocElement AppendDocElement(Enum aType) + => AppendDocElement(aType, aClass: null); + + public virtual IDocElement AppendDocElement(Enum aType, Type? aClass) + => AppendDocElement(aType, aAttribute: default!, value: string.Empty, aClass, null); + + public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type? aClass, string? Id) + { + if (aType is not XamlElementType type) + throw new NotSupportedException($"Element type '{aType}' wird nicht unterstützt."); + + return type switch + { + XamlElementType.Section => (IDocElement)AddChild(new XamlSection()), + XamlElementType.Paragraph => (IDocElement)AddChild(new XamlParagraph(styleName: value)), + XamlElementType.Headline => (IDocElement)AddChild(new XamlHeadline(level: TryParseInt(value, 1),id: Id)), + XamlElementType.TOC => (IDocElement)AddChild(new XamlTOC(name: value, level: TryParseInt(value, 2))), + XamlElementType.Span => (IDocElement)AddChild(new XamlSpan(XamlFontStyle.Default)), + XamlElementType.Link => (IDocElement)AddChild(new XamlSpan(XamlFontStyle.Default) { Href = value }), + XamlElementType.LineBreak => (IDocElement)AddChild(new XamlLineBreak()), + XamlElementType.NbSpace => (IDocElement)AddChild(new XamlNbSpace()), + XamlElementType.Tab => (IDocElement)AddChild(new XamlTab()), + XamlElementType.Bookmark => (IDocElement)AddChild(new XamlSpan(XamlFontStyle.Default) { Id = Id }), + _ => throw new NotSupportedException($"Element type '{aType}' wird nicht unterstützt.") + }; + } + + protected static int TryParseInt(string? s, int fallback) + => int.TryParse(s, out var v) ? v : fallback; + + public IEnumerable Enumerate() + { + var stack = new Stack(); + stack.Push(this); + while (stack.Count > 0) + { + var cur = stack.Pop(); + yield return cur; + if (cur is XamlNodeBase b) + { + for (int i = b.Nodes.Count - 1; i >= 0; i--) + { + stack.Push((IDocElement)b.Nodes[i]); + } + } + } + } +} + +public enum XamlElementType +{ + Section, + Paragraph, + Headline, + TOC, + Span, + Link, + LineBreak, + NbSpace, + Tab, + Bookmark +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlParagraph.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlParagraph.cs new file mode 100644 index 000000000..030604e7e --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlParagraph.cs @@ -0,0 +1,27 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public sealed class XamlParagraph : XamlContentBase, IDocParagraph +{ + public string? StyleName { get; } + + public XamlParagraph(string? styleName = null) + { + StyleName = styleName; + } + + public IDocSpan AddBookmark(IDocFontStyle docFontStyle) + { + var span = new XamlSpan(docFontStyle) { Id = Guid.NewGuid().ToString("N") }; + return (IDocSpan)AddChild(span); + } + + public override IDocStyleStyle GetStyle() => new XamlStyle(StyleName); + + public IDocSpan AddBookmark(string Id, IDocFontStyle docFontStyle) + { + var span = new XamlSpan(docFontStyle) { Id = Id }; + return (IDocSpan)AddChild(span); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSection.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSection.cs new file mode 100644 index 000000000..c2242494d --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSection.cs @@ -0,0 +1,25 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public sealed class XamlSection : XamlNodeBase, IDocSection +{ + public IDocParagraph AddParagraph(string ATextStyleName) + { + var p = new XamlParagraph(ATextStyleName); + return (IDocParagraph)AddChild(p); + } + + public IDocHeadline AddHeadline(int aLevel, string Id) + { + var h = new XamlHeadline(aLevel,Id); + return (IDocHeadline)AddChild(h); + } + + public IDocTOC AddTOC(string aName, int aLevel) + { + var toc = new XamlTOC(aName, aLevel); + AddChild(toc); + return toc; + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSpan.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSpan.cs new file mode 100644 index 000000000..0b65662b0 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlSpan.cs @@ -0,0 +1,44 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public sealed class XamlSpan : XamlContentBase, IDocSpan +{ + public IDictionary Attributes { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + public IDocFontStyle FontStyle { get; private set; } + public bool IsLink { get; set; } + + public string? Href + { + get => Attributes.TryGetValue("NavigateUri", out var v) ? v : null; + set + { + if (value is null) Attributes.Remove("NavigateUri"); + else Attributes["NavigateUri"] = value; + IsLink = value != null; + } + } + + public string? Id + { + get => Attributes.TryGetValue("Id", out var v) ? v : null; + set + { + if (value is null) Attributes.Remove("Id"); + else Attributes["Id"] = value; + } + } + + public XamlSpan(IDocFontStyle style) + { + FontStyle = style; + } + + public override IDocStyleStyle GetStyle() => new XamlStyle(FontStyle?.Name); + + public void SetStyle(object fs) => throw new NotImplementedException(); + public void SetStyle(IDocFontStyle fs) => FontStyle = fs; + public void SetStyle(IUserDocument doc, object aFont) => throw new NotImplementedException(); + public void SetStyle(IUserDocument doc, IDocFontStyle aFont) => FontStyle = aFont; + public void SetStyle(string aStyleName) => throw new NotImplementedException(); +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlStyle.cs new file mode 100644 index 000000000..e493dbf29 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlStyle.cs @@ -0,0 +1,36 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public sealed class XamlStyle : IDocStyleStyle +{ + public string? Name { get; } + public IDictionary Properties { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + + public XamlStyle(string? name = null, IDictionary? properties = null) + { + Name = name; + if (properties != null) + { + foreach (var kv in properties) Properties[kv.Key] = kv.Value; + } + } +} + +public sealed class XamlFontStyle : IDocFontStyle +{ + public string? Name { get; init; } + public bool Bold { get; init; } + public bool Italic { get; init; } + public bool Underline { get; init; } + public bool Strikeout { get; init; } + public string? Color { get; init; } + public string? FontFamily { get; init; } + public double? FontSizePt { get; init; } + + public static readonly XamlFontStyle Default = new(); + public static readonly XamlFontStyle BoldStyle = new() { Name = "Bold", Bold = true }; + public static readonly XamlFontStyle ItalicStyle = new() { Name = "Italic", Italic = true }; + public static readonly XamlFontStyle UnderlineStyle = new() { Name = "Underline", Underline = true }; + public static readonly XamlFontStyle StrikeoutStyle = new() { Name = "Strikeout", Strikeout = true }; +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlTOC.cs new file mode 100644 index 000000000..20f5ae3a0 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Model/XamlTOC.cs @@ -0,0 +1,38 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Xaml.Model; + +public sealed class XamlTOC : XamlContentBase, IDocTOC +{ + public string Name { get; } + public int Level { get; } + + public XamlTOC(string name, int level) + { + Name = name; + Level = Math.Clamp(level, 1, 6); + } + + public override IDocStyleStyle GetStyle() => new XamlStyle("TOC"); + + public void RebuildFrom(IDocSection root) + { + TextContent = string.Empty; + Nodes.Clear(); + + // Headline-IDs sicherstellen und Links anlegen + foreach (var h in root.Enumerate().OfType().Where(h => h.Level <= Level)) + { + var p = new XamlParagraph("TOCEntry"); + var anchorText = h.GetTextContent(true); + + // Anker-ID an Headline vorhanden? + var id = h.Id; + + var link = (XamlSpan)p.AddLink(id,XamlFontStyle.Default); + link.TextContent = anchorText; + + AddChild(p); + } + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/Serialization/XamlDocumentSerializer.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/Serialization/XamlDocumentSerializer.cs new file mode 100644 index 000000000..c3c1989ed --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/Serialization/XamlDocumentSerializer.cs @@ -0,0 +1,219 @@ +using System.Text; +using Document.Base.Models.Interfaces; +using Document.Xaml.Model; + +namespace Document.Xaml.Serialization; + +public static class XamlDocumentSerializer +{ + private const string NsPresentation = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"; + private const string NsX = "http://schemas.microsoft.com/winfx/2006/xaml"; + + public static string ToXamlString(XamlSection root) + { + var sb = new StringBuilder(); + sb.Append(""); + + foreach (var child in root.Nodes) + { + WriteElement(sb, child); + } + + sb.AppendLine(""); + return sb.ToString(); + } + + private static void WriteElement(StringBuilder sb, IDOMElement el) + { + switch (el) + { + case XamlParagraph p: + WriteParagraph(sb, p); + break; + case XamlHeadline h: + WriteHeadline(sb, h); + break; + case XamlTOC toc: + WriteTOC(sb, toc); + break; + case XamlSpan s: + WriteSpanInline(sb, s); + break; + case XamlLineBreak: + sb.AppendLine(""); + break; + case XamlNbSpace: + sb.Append("").Append(" ").AppendLine(""); + break; + case XamlTab: + sb.Append("").Append("\t").AppendLine(""); + break; + case XamlSection sec: + foreach (var n in sec.Nodes) WriteElement(sb, n); + break; + } + } + + private static void WriteParagraph(StringBuilder sb, XamlContentBase p, string? extraAttributes = null) + { + sb.Append("'); + + WriteContent(sb, p); + + sb.AppendLine(""); + } + + private static void WriteParagraph(StringBuilder sb, XamlParagraph p) + => WriteParagraph(sb, p, null); + + private static void WriteHeadline(StringBuilder sb, XamlHeadline h) + { + // Einfache Headline-Darstellung als Paragraph mit Attributen + var attrs = new StringBuilder(); + attrs.Append("Tag=\"H").Append(h.Level).Append('"'); + // leichte Formatierung + attrs.Append(" FontWeight=\"Bold\""); + attrs.Append(" FontSize=\"").Append(28 - (h.Level - 1) * 3).Append('"'); + + WriteParagraph(sb, h, attrs.ToString()); + } + + private static void WriteTOC(StringBuilder sb, XamlTOC toc) + { + // Ganz simpel: jede TOC-Zeile als Paragraph mit Hyperlink + foreach (var line in toc.Nodes.OfType()) + { + WriteParagraph(sb, line); + } + } + + private static void WriteContent(StringBuilder sb, XamlContentBase node) + { + // eigener Text + if (!string.IsNullOrEmpty(node.TextContent)) + { + sb.Append(""); + AppendEscaped(sb, node.TextContent); + sb.Append(""); + } + + foreach (var c in node.Nodes) + { + switch (c) + { + case XamlSpan s: + WriteSpanInline(sb, s); + break; + case XamlLineBreak: + sb.Append(""); + break; + case XamlNbSpace: + sb.Append(" "); + break; + case XamlTab: + sb.Append("\t"); + break; + case XamlContentBase nested: + // falls verschachtelte Inhalte vorkommen + WriteContent(sb, nested); + break; + } + } + } + + private static void WriteSpanInline(StringBuilder sb, XamlSpan s) + { + // ggf. Anker (x:Name) erzeugen, wenn Id vorhanden ist + var hasAnchor = !string.IsNullOrEmpty(s.Id); + var text = s.TextContent ?? string.Empty; + var runOpenWritten = false; + + void OpenStyledRun() + { + sb.Append("'); + runOpenWritten = true; + } + + if (hasAnchor) + { + sb.Append(""); + } + + if (s.IsLink || !string.IsNullOrEmpty(s.Href)) + { + sb.Append("'); + + OpenStyledRun(); + AppendEscaped(sb, text); + sb.Append(""); + sb.Append(""); + } + else + { + OpenStyledRun(); + AppendEscaped(sb, text); + sb.Append(""); + } + + if (hasAnchor) + { + sb.Append(""); + } + } + + private static string BuildRunAttributes(XamlSpan s) + { + var parts = new List(); + if (s.FontStyle is { } fs) + { + if (!string.IsNullOrEmpty(fs.Color)) parts.Add($"Foreground=\"{EscapeAttribute(fs.Color!)}\""); + if (!string.IsNullOrEmpty(fs.FontFamily)) parts.Add($"FontFamily=\"{EscapeAttribute(fs.FontFamily!)}\""); + if (fs.FontSizePt is double sizePt) + { + // WPF nutzt Device Independent Pixels (1/96 inch). 1pt = 1/72 inch => px = pt * 96/72 = pt * 1.333... + var dip = sizePt * 96.0 / 72.0; + parts.Add($"FontSize=\"{dip:0.#}\""); + } + if (fs.Strikeout) parts.Add("TextDecorations=\"Strikethrough\""); + } + // Fett/Kursiv/Underline als Container-Tags sind möglich, aber hier per Run-Attribute einfacher: + if (s.FontStyle.Bold) parts.Add("FontWeight=\"Bold\""); + if (s.FontStyle.Italic) parts.Add("FontStyle=\"Italic\""); + if (s.FontStyle.Underline) parts.Add("TextDecorations=\"Underline\""); + return string.Join(' ', parts); + } + + private static void AppendEscaped(StringBuilder sb, string text) + { + foreach (var ch in text) + { + sb.Append(ch switch + { + '&' => "&", + '<' => "<", + '>' => ">", + '"' => """, + '\'' => "'", + _ => ch + }); + } + } + + private static string EscapeAttribute(string s) + { + var sb = new StringBuilder(s.Length + 8); + AppendEscaped(sb, s); + return sb.ToString(); + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Xaml/XamlDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Xaml/XamlDocument.cs new file mode 100644 index 000000000..dc94b3134 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Xaml/XamlDocument.cs @@ -0,0 +1,97 @@ +using System.Text; +using Document.Base.Models.Interfaces; +using Document.Base.Registration; +using Document.Xaml.IO; +using Document.Xaml.Model; +using Document.Xaml.Serialization; + +namespace Document.Xaml; + +[UserDocumentProvider("xaml", "flowdoc", Extensions = new[] { ".xaml" }, ContentType = "application/xaml+xml", DisplayName = "FlowDocument XAML")] +public sealed class XamlDocument : IUserDocument +{ + private bool _isModified; + public IDocElement Root { get; private set; } + + public XamlDocument() + { + Root = new XamlSection(); + } + + public XamlDocument(IDocElement root) + { + Root = root is XamlSection + ? root + : throw new ArgumentException("Root muss vom Typ XamlSection sein.", nameof(root)); + } + + public bool IsModified => _isModified; + + public IDocParagraph AddParagraph(string cStylename) + { + _isModified = true; + return EnsureRoot().AddParagraph(cStylename); + } + + public IDocHeadline AddHeadline(int nLevel, string? Id= null) + { + _isModified = true; + return EnsureRoot().AddHeadline(nLevel, Id); + } + + public IDocTOC AddTOC(string cName, int nLevel) + { + _isModified = true; + return EnsureRoot().AddTOC(cName, nLevel); + } + + public IEnumerable Enumerate() + => EnsureRoot().Enumerate(); + + public bool SaveTo(string cOutputPath) + { + try + { + var section = EnsureRoot(); + XamlDocumentIO.SaveAsync(section, cOutputPath).GetAwaiter().GetResult(); + _isModified = false; + return true; + } + catch + { + return false; + } + } + + public bool SaveTo(Stream sOutputStream, object? options = null) + { + try + { + var section = EnsureRoot(); + var xaml = XamlDocumentSerializer.ToXamlString(section); + using var writer = new StreamWriter(sOutputStream, new UTF8Encoding(false), leaveOpen: true); + writer.Write(xaml); + writer.Flush(); + _isModified = false; + return true; + } + catch + { + return false; + } + } + + // Optional: Einfache Loader könnten später ergänzt werden + public bool LoadFrom(string cInputPath) => false; + public bool LoadFrom(Stream sInputStream, object? options = null) => false; + + private XamlSection EnsureRoot() + { + if (Root is XamlSection sec) return sec; + sec = new XamlSection(); + Root = sec; + _isModified = true; + return sec; + } + +} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/Benchmarks/BuildOutputFileNameBenchmark.cs b/CSharpBible/Data/NebelEbook/Benchmarks/BuildOutputFileNameBenchmark.cs new file mode 100644 index 000000000..2912507b6 --- /dev/null +++ b/CSharpBible/Data/NebelEbook/Benchmarks/BuildOutputFileNameBenchmark.cs @@ -0,0 +1,56 @@ +using System; +using System.Reflection; +using BenchmarkDotNet.Attributes; + +namespace NebelEbook.Benchmarks +{ + [MemoryDiagnoser] + public class BuildOutputFileNameBenchmark + { + private Func? _build; + private string[] _titles = Array.Empty(); + private string _key = "html"; + + [GlobalSetup] + public void Setup() + { + var mi = typeof(Program).GetMethod("BuildOutputFileNameFromTitle", BindingFlags.Static | BindingFlags.NonPublic); + if (mi == null) + throw new InvalidOperationException("Methode BuildOutputFileNameFromTitle nicht gefunden."); + + _build = (Func)mi.CreateDelegate(typeof(Func)); + + _titles = new[] + { + "Nebel über Bretten", + " A very..long___title -- with invalid:chars*?<>| and dots... ", + "CON", + "LPT1", + new string('ä', 200), + "Résumé de l'été à São Paulo", + "?? ?? ??", + }; + + _key = "html"; + } + + [Benchmark] + public string Run_AllSamples() + { + string last = string.Empty; + foreach (var t in _titles) + { + last = _build!(t, _key); + } + return last; + } + + [Benchmark] + public string Run_ShortAscii() + => _build!("Hello World", _key); + + [Benchmark] + public string Run_LongDiacritics() + => _build!(new string('ä', 500), _key); + } +} diff --git a/CSharpBible/Data/RepoMigrator/Directory.Build.props b/CSharpBible/Data/RepoMigrator/Directory.Build.props new file mode 100644 index 000000000..f5a3e07ac --- /dev/null +++ b/CSharpBible/Data/RepoMigrator/Directory.Build.props @@ -0,0 +1,13 @@ + + + ..\..\..\..\bin\$(MSBuildProjectName)\ + ..\..\..\..\obj.net\$(MSBuildProjectName)\ + $(MSBuildProjectName.Replace(".","_").Replace("_net","")) + preview + enable + disable + JC-Soft + Joe Care + Copyright © JC-Soft 2025 + + diff --git a/CSharpBible/Data/Story.Base/Data/Choice.cs b/CSharpBible/Data/Story.Base/Data/Choice.cs new file mode 100644 index 000000000..58b86c105 --- /dev/null +++ b/CSharpBible/Data/Story.Base/Data/Choice.cs @@ -0,0 +1,31 @@ +namespace Story_Base.Data; + +/// +/// Repräsentiert eine auswählbare Option innerhalb des E-Books, +/// die zu einem Zielabschnitt mit der angegebenen Kennung verweist. +/// +public class Choice +{ + /// + /// Der anzuzeigende Text der Auswahl (z. B. Button- oder Link-Beschriftung). + /// + public string Label { get; set; } + + /// + /// Die Zielkennung (ID), auf die diese Auswahl verweist + /// (z. B. Kapitel-/Abschnitts- oder Knoten-ID). + /// + public string TargetId { get; } + + /// + /// Erstellt eine neue Auswahl mit Anzeigetext und Zielkennung. + /// + /// Der anzuzeigende Text der Auswahl. + /// Die Kennung des Zielabschnitts, zu dem navigiert werden soll. + public Choice(string label, string targetId) + { + Label = label; + TargetId = targetId; + } +} + diff --git a/CSharpBible/Data/Story.Base/Data/Story.cs b/CSharpBible/Data/Story.Base/Data/Story.cs new file mode 100644 index 000000000..8869a3ec4 --- /dev/null +++ b/CSharpBible/Data/Story.Base/Data/Story.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace Story_Base.Data; + +public sealed class Story +{ + public string Title { get; set; } = string.Empty; + public Dictionary Variables { get; set; } = new(StringComparer.OrdinalIgnoreCase); + public List Nodes { get; set; } = new(); +} \ No newline at end of file diff --git a/CSharpBible/Data/Story.Base/Data/StoryNode.cs b/CSharpBible/Data/Story.Base/Data/StoryNode.cs new file mode 100644 index 000000000..d13e00967 --- /dev/null +++ b/CSharpBible/Data/Story.Base/Data/StoryNode.cs @@ -0,0 +1,46 @@ +namespace Story_Base.Data; + +/// +/// Repräsentiert einen Knoten einer interaktiven Geschichte mit Titel, Absätzen und auswählbaren Optionen. +/// +/// +/// Die übergebenen -Arrays und -Instanzen werden ohne Kopie übernommen. +/// +public class StoryNode +{ + /// + /// Eindeutige Kennung des Knotens. + /// + public string Id { get; } + + /// + /// Titel des Story-Knotens. + /// + public string Title { get; set; } + + /// + /// Sammlung der Textabsätze in der vorgesehenen Anzeige-Reihenfolge. + /// + public string[] Paragraphs { get; } + + /// + /// Liste der möglichen Entscheidungen, die von diesem Knoten aus getroffen werden können. + /// + /// + public List Choices { get; } + + /// + /// Initialisiert eine neue Instanz der -Klasse. + /// + /// Die eindeutige Id des Knotens. + /// Der Titel des Knotens. + /// Die Absätze, die zu diesem Knoten gehören. + /// Die verfügbaren Entscheidungen ab diesem Knoten. + public StoryNode(string id, string title, string[] paragraphs, List choices) + { + Id = id; + Title = title; + Paragraphs = paragraphs; + Choices = choices; + } +} diff --git a/CSharpBible/Data/Story.Base/Resources/story.json b/CSharpBible/Data/Story.Base/Resources/story.json new file mode 100644 index 000000000..df3efe987 --- /dev/null +++ b/CSharpBible/Data/Story.Base/Resources/story.json @@ -0,0 +1,719 @@ +{ + "title": "Nebel über Bretten", + "variables": { + "strasse": "Melanchthonstraße", + "opfer": "Friedrich von Hohenberg", + "detektiv": "Kommissar Keller", + "stadt": "Bretten" + }, + "nodes": [ + { + "id": "kap1", + "title": "Kapitel 1 – Fund im Nebel", + "paragraphs": [ + "Der Nebel hing schwer über der {{strasse}}. Gelbe Laternenkelche zeichneten milchige Inseln ins Grau, als {{detektiv}} vor der Villa Hohenberg anhielt. Der Kies knirschte, irgendwo tropfte Regen von einer Markise.", + "Im Salon: {{opfer}}, tot im Sessel – der Rotwein noch warm. Die Standuhr tickte, das Feuer im Kamin war längst verglommen, und durch eine Spalte im Vorhang drang ein matter Schimmer vom Garten her.", + "Auf dem Beistelltisch: zwei Gläser, eines nur benetzt, das andere tiefrot. Der Korken lag sauber daneben. Keine Kampfspuren – aber eine unsichtbare Unruhe füllte den Raum." + ], + "choices": [ + { "label": "Clara sofort befragen", "targetId": "kap2_clara" }, + { "label": "Tatort gründlich untersuchen", "targetId": "kap2_tatort" } + ] + }, + { + "id": "kap2_clara", + "title": "Kapitel 2 – Gespräch mit Clara", + "paragraphs": [ + "Clara Hohenberg öffnete die Tür ihres Zimmers mit verweinten Augen. Der Duft von Terpentin und Kreide lag in der Luft – die Wände voller Skizzen, ein halbfertiges Porträt auf der Staffelei.", + "„Wir haben gestritten“, sagte sie leise, „über Geld, über seine Geschäfte. Aber ich habe ihn nicht getötet.“ Ihre Hände zitterten, als sie nach einem Taschentuch griff.", + "Im Flur vor dem Zimmer stand ein Schirmständer. Ein Spazierstock lehnte darin – schwer, mit einem silbernen Knauf. Nicht Claras Stil." + ], + "choices": [ + { "label": "Nach Alibi fragen", "targetId": "kap3_alibi" }, + { "label": "Skizzenblock untersuchen", "targetId": "kap3_skizzen" } + ] + }, + { + "id": "kap2_tatort", + "title": "Kapitel 2 – Stille im Salon", + "paragraphs": [ + "Der Salon roch nach kaltem Kaminrauch und teurem Bordeaux. Kein Kampf, keine umgestürzten Möbel – nur eine ordentliche, fast inszeniert wirkende Szenerie.", + "Ein Fenster stand spaltbreit offen. Auf der Fensterbank: feine Glasstaubpartikel, als hätte jemand die Verriegelung manipuliert – oder nur so getan.", + "Das Teppichmuster verriet subtile Verschiebungen. Eine Spur in Richtung Weinkeller-Tür, kaum sichtbar, als hätte jemand eine Flasche geholt – und etwas zurückgelassen." + ], + "choices": [ + { "label": "Rotwein ins Labor geben", "targetId": "kap3_labor" }, + { "label": "Fenster und Garten prüfen", "targetId": "kap3_fenster" } + ] + }, + { + "id": "kap3_alibi", + "title": "Kapitel 3 – Claras Alibi", + "paragraphs": [ + "Clara atmete tief ein. „Ich war im Theater“, sagte sie. „Premiere im Kleinen Haus, ich habe Freunde getroffen. Danach… bin ich allein nach Hause.“", + "Eine eingerissene Eintrittskarte lag auf dem Schreibtisch. Daneben ein Programmheft mit der Zeitangabe der Vorstellung. Wenn das stimmte, blieb ein enger Zeitkorridor.", + "„Er war schon tot, als ich kam“, flüsterte sie. „Der Nebel war so dicht, ich habe kaum den Gartenweg gesehen.“" + ], + "choices": [ + { "label": "Theaterbesuch verifizieren", "targetId": "kap4_theater" }, + { "label": "Claras Handy prüfen", "targetId": "kap4_phone" } + ] + }, + { + "id": "kap3_skizzen", + "title": "Kapitel 3 – Skizzenblock", + "paragraphs": [ + "Der Skizzenblock war neu, die oberen Seiten voller Studien mit schnellen Linien. Zwischen Porträtfragmenten fand sich eine überraschend exakte Perspektive auf den Salon – von außen, durch das Fenster.", + "Eine kleine Notiz am Rand: „Standpunkt: Nordhecke, 3 m“. Daneben ein Datum, gestern Abend.", + "Clara blickte weg. „Ich zeichne oft bei Nacht. Es beruhigt mich…“" + ], + "choices": [ + { "label": "Zum Atelier gehen", "targetId": "kap4_atelier" }, + { "label": "Skizzen mit Tatort abgleichen", "targetId": "kap4_compare" } + ] + }, + { + "id": "kap3_labor", + "title": "Kapitel 3 – Laborauftrag", + "paragraphs": [ + "Die Probe des Weins wanderte in ein beschriftetes Röhrchen. „Wir geben Gaschromatographie“, versprach die Laborantin. „Melden uns, sobald wir ein Ergebnis haben.“", + "Zurück im Salon schnürte sich die Zeit zusammen. Der Bordeaux in Glas zwei roch minimal bitter – Einbildung oder Anflug von Mandel? Der Kamin reflektierte stumm.", + "Ein Blick zur Kellertür. Wer hatte welche Flasche geholt – und warum diese?" + ], + "choices": [ + { "label": "Auf Laborergebnis warten", "targetId": "kap4_lab_result" }, + { "label": "Weinkeller durchsuchen", "targetId": "kap4_cellar" } + ] + }, + { + "id": "kap3_fenster", + "title": "Kapitel 3 – Spuren am Fenster", + "paragraphs": [ + "Die Verriegelung zeigte feine Kratzer, jedoch ohne eindeutige Hebelspuren. Auf der Außenseite haftete feuchter Lehm – frisch, mit sandigen Einschlüssen.", + "Im Beet darunter: Fußabdrücke der Größe 44, deutlich vor dem Regen gesetzt. Der Weg führte zur Seitenpforte und verlor sich am Eisenzaun.", + "Die Luft roch nach feuchter Erde und kaltem Blattwerk. Irgendwo knarrte ein Gartentor – oder nur der Nebel, der die Geräusche verzog." + ], + "choices": [ + { "label": "Spuren im Garten sichern", "targetId": "kap4_garden" }, + { "label": "Nachbar befragen", "targetId": "kap4_neighbor" } + ] + }, + { + "id": "kap4_theater", + "title": "Kapitel 4 – Theaterkassen und Zeugen", + "paragraphs": [ + "An der Theaterkasse blätterte die Kassiererin durch Listen. „Clara Hohenberg, zwei Tickets auf ihren Namen – abgeholt um 19:42 Uhr.“", + "Ein Bühnenarbeiter nickte. „Ich habe sie in der Pause im Foyer gesehen. Danach… weiß ich nicht.“ Die Premiere endete gegen 21:50 Uhr.", + "Die Zeiten ließen Claras Rückweg knapp, aber möglich. Ein Name tauchte in Gesprächen auf: Kurt Baumann, Geschäftspartner des Opfers – vor Ort nicht gesehen, aber häufig Thema." + ], + "choices": [ + { "label": "Geschäftspartner Baumann aufsuchen", "targetId": "kap5_partner" }, + { "label": "Zu Clara zurückkehren", "targetId": "kap5_return_clara" } + ] + }, + { + "id": "kap4_phone", + "title": "Kapitel 4 – Das Telefon", + "paragraphs": [ + "Claras Handy zeigte eine gelöschte Nachricht, die sich teilweise rekonstruieren ließ: „…Schlüssel im Globus… heute Nacht…“. Die Nummer war unterdrückt.", + "Der Verlauf wies mehrere kurze Anrufe von einer Prepaid-Nummer aus. Die Funkzelle lag in der Nähe des Dienstbotentrakts der Villa.", + "Jemand spielte mit Hinweisen – oder wollte ablenken." + ], + "choices": [ + { "label": "Nummer rückverfolgen", "targetId": "kap5_phone_trace" }, + { "label": "SMS-Inhalt rekonstruieren", "targetId": "kap5_sms" } + ] + }, + { + "id": "kap4_atelier", + "title": "Kapitel 4 – Claras Atelier", + "paragraphs": [ + "Im Atelier mischten sich Ölfarbe, Terpentin und Kaffee zu einem scharfen, lebendigen Geruch. Auf einem Tisch standen verschmierte Lappen, daneben eine Schale mit verblassten Farbresten.", + "Ein Kalender an der Wand: Markierungen, rote Kreise, ein kryptisches „E.“ an mehreren Tagen. Die jüngste Notiz: „E. – 21:00 Garten“.", + "Clara biss sich auf die Lippe. „Ich wollte reden. Über Geld. Über Freiheit.“" + ], + "choices": [ + { "label": "Chemische Probe nehmen", "targetId": "kap5_chem" }, + { "label": "Kalenderhinweise prüfen", "targetId": "kap5_calendar" } + ] + }, + { + "id": "kap4_compare", + "title": "Kapitel 4 – Perspektive prüfen", + "paragraphs": [ + "Die Skizzenperspektive passte exakt zu einem Punkt an der Nordhecke. Von dort aus sah man in den Salon, wenn der Vorhang offenstand.", + "Im Gras glänzte Tau. Zurück blieb ein schwacher Abdruck eines Stativs – oder nur ein Zufall? Ein Zigarettenstummel lag nearby: Filterlos, selten.", + "Wer hier stand, beobachtete. Aber hat er auch getötet?" + ], + "choices": [ + { "label": "Standpunkt aufsuchen", "targetId": "kap5_vantage" }, + { "label": "Fensterverriegelung erneut prüfen", "targetId": "kap5_window_recheck" } + ] + }, + { + "id": "kap4_lab_result", + "title": "Kapitel 4 – Laborergebnis", + "paragraphs": [ + "Der Rückruf kam früher als erwartet. „Digitalis-Glykoside im Wein“, sagte die Laborantin. „Keine natürliche Kontamination. Jemand hat nachgeholfen.“", + "Das Gift schmeckt bitter, aber im schweren Bordeaux fast verborgen. Die Dosis: tödlich. Das tat jemand mit Wissen – oder mit Skrupellosigkeit." + ], + "choices": [ + { "label": "Apotheke/Arzt nach Digitalis-Bezug prüfen", "targetId": "kap5_pharma" }, + { "label": "Hausapotheke durchsuchen", "targetId": "kap5_medicine_cabinet" } + ] + }, + { + "id": "kap4_cellar", + "title": "Kapitel 4 – Weinkeller", + "paragraphs": [ + "Die Luft war kühl und feucht. Reihenweise ruhende Flaschen, feinsäuberlich katalogisiert. Doch eine Reihe wirkte verstört: Kärtchen vertauscht, Staub verwischt.", + "Auf dem Boden: ein kaum wahrnehmbarer Tropfen Bordeaux, daneben ein hauchdünner Rand von dunkler Flüssigkeit – verschüttet und weggewischt.", + "Jemand kannte sich aus. Oder hatte Hilfe." + ], + "choices": [ + { "label": "Weinkarteikarten prüfen", "targetId": "kap5_cards" }, + { "label": "Kameralog (falls vorhanden) sichten", "targetId": "kap5_cctv" } + ] + }, + { + "id": "kap4_garden", + "title": "Kapitel 4 – Gartenpfade", + "paragraphs": [ + "Die Abdrücke führten an einem Gartenhaus vorbei. An der Tür klebte feuchter Lehm – als habe jemand mit schmutzigen Stiefeln angestoßen.", + "Im Gras lagen zwei dünne Fasern, dunkelblau – Textil? Ein Mantelfaden? Sie klebten am Tau und schimmerten im Laternenlicht.", + "Ein Rabe hockte auf dem Zaun und krächzte, als wolle er warnen." + ], + "choices": [ + { "label": "Gartenhaus durchsuchen", "targetId": "kap5_shed" }, + { "label": "Spuren zur Seitenpforte folgen", "targetId": "kap5_gate" } + ] + }, + { + "id": "kap4_neighbor", + "title": "Kapitel 4 – Der Nachbar", + "paragraphs": [ + "Egon Reiter, der Nachbar, öffnete misstrauisch. „Nebel macht die Leute seltsam“, brummte er. „Ich sah eine Gestalt mit Stock, spät. Konnte das Gesicht nicht erkennen.“", + "Auf seinem Tisch lag eine alte Zeitung, die vom Börsenrückgang sprach. „Hohenberg“, murmelte er, „immer zu laut, zu stolz.“", + "Reiter rauchte filterlose Zigaretten. Ein überquellender Aschenbecher bestätigte die Spur vom Garten." + ], + "choices": [ + { "label": "Butler Johann befragen", "targetId": "kap5_butler" }, + { "label": "Geschäftspartner Baumann befragen", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap5_partner", + "title": "Kapitel 5 – Kurt Baumann", + "paragraphs": [ + "Kurt Baumann empfing in einem gläsernen Büro, zu glatt, zu aufgeräumt. „Furchtbar, was passiert ist“, sagte er, die Hände zu fest auf der Tischplatte.", + "Sein Blick flackerte, als das Wort „Versicherung“ fiel. Gerüchte über Investitionen, die ins Wanken geraten waren, verdichteten sich zu Schatten an der Wand.", + "„Ich war zu Hause“, behauptete er. „Fragen Sie… keinen.“ Ein dünnes Lächeln. Lügen riechen im Nebel süß." + ], + "choices": [ + { "label": "Konten und Verträge prüfen", "targetId": "kap6_accounts" }, + { "label": "Baumann konfrontieren", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap5_return_clara", + "title": "Kapitel 5 – Zurück zu Clara", + "paragraphs": [ + "Clara saß mit einem Becher kalten Tees am Fenster. „Ich habe ihn geliebt“, sagte sie. „Aber er hat uns alle wie Figuren behandelt.“", + "Sie reichte eine Skizze, die Hohenberg lachend zeigte, selbstgefällig. „Er war nicht nur Opfer.“", + "Ihre Stimme gewann an Ruhe, als sie von ihren Plänen sprach – wegzugehen, neu zu beginnen." + ], + "choices": [ + { "label": "Clara vorläufig entlasten", "targetId": "kap6_clearing_clara" }, + { "label": "Weitere Spuren im Haus suchen", "targetId": "kap6_continue" } + ] + }, + { + "id": "kap5_phone_trace", + "title": "Kapitel 5 – Prepaid-Spur", + "paragraphs": [ + "Die Nummer führte zu einem Automatenshop, keine Auskunft. Die Funkzellenanalyse ergab Bewegungen rund um den Dienstbotentrakt und den nördlichen Park.", + "Ein Datensatz schnitt sich mit den Zeiten des Butlerschichtplans – und mit dem Auto von Baumann, das in der Nähe geparkt gewesen sein musste.", + "Zwei Welten trafen sich im Schatten: Pflicht und Profit." + ], + "choices": [ + { "label": "Butlers Route prüfen", "targetId": "kap6_butler_route" }, + { "label": "„E.“ identifizieren (Erpresser?)", "targetId": "kap6_blackmailer" } + ] + }, + { + "id": "kap5_sms", + "title": "Kapitel 5 – Der Globus", + "paragraphs": [ + "Der schwere Globus im Salon ließ sich öffnen. Im Hohlraum: ein kleiner Messingschlüssel, alt, mit eingraviertem Wappen – H für Hohenberg.", + "Anhaftungen rochen nach Wein und etwas Bitterem. Wer den Schlüssel kannte, kannte das Haus.", + "Eine eingeritzte Markierung im Holz: „G2“. Kellerreihe?" + ], + "choices": [ + { "label": "Globus-Hinweis im Keller prüfen", "targetId": "kap4_cellar" }, + { "label": "Fingerabdrücke sichern", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_chem", + "title": "Kapitel 5 – Chemische Spuren", + "paragraphs": [ + "Die Lappen rochen stark nach Terpentin, doch auch nach etwas Pflanzlichem. Ein Abgleich mit dem Labor: Keine Digitalis-Spuren im Atelier.", + "Die Farbe an Claras Händen war frisch – aber Farbreste erzählen keine Morde." + ], + "choices": [ + { "label": "Digitalis-Bezug über Apotheken prüfen", "targetId": "kap6_pharma" }, + { "label": "Turpentinspuren weiterverfolgen", "targetId": "kap6_turpentine" } + ] + }, + { + "id": "kap5_calendar", + "title": "Kapitel 5 – Der Kalender", + "paragraphs": [ + "„E.“ tauchte mehrfach in Claras Kalender auf, zuletzt am Tatabend. Egon Reiter? Oder jemand anderes?", + "Daneben eine Summe, grob überschlagen – Schulden? Schweigegeld? Liebe ist selten sauber." + ], + "choices": [ + { "label": "„E.“ identifizieren", "targetId": "kap6_blackmailer" }, + { "label": "Zeitleiste präzisieren", "targetId": "kap6_timeline" } + ] + }, + { + "id": "kap5_vantage", + "title": "Kapitel 5 – Standpunkt im Garten", + "paragraphs": [ + "Der Punkt an der Hecke gab den Blick frei. Zigarettenstummel mit Lippenabdruck, filterlos. Egon Reiter bevorzugte diese Marke.", + "Ein zerdrücktes Bonbonpapier lag daneben – Hustenbonbons. Der Nebel kratzte in der Kehle aller, die hier warteten." + ], + "choices": [ + { "label": "Egon Reiter erneut befragen", "targetId": "kap6_neighbor_egon" }, + { "label": "Observation einrichten", "targetId": "kap6_stakeout" } + ] + }, + { + "id": "kap5_window_recheck", + "title": "Kapitel 5 – Verriegelung, zweiter Blick", + "paragraphs": [ + "Die Kratzer an der Verriegelung wirkten gesetzt. Kein Hebeln, eher eine gespielte Spur – jemand wollte den Einbruch vortäuschen.", + "Im Innenrahmen klebte ein Hauch von Hautschuppen – von innen berührt." + ], + "choices": [ + { "label": "Innen-Täter annehmen", "targetId": "kap6_inside_job" }, + { "label": "Schlüsselverwaltung prüfen", "targetId": "kap6_keys" } + ] + }, + { + "id": "kap5_pharma", + "title": "Kapitel 5 – Apothekenrundgang", + "paragraphs": [ + "Zwei Apotheken bestätigten jüngste Digitalis-Verkäufe – auf Rezept. Ein Name fiel: Kurt Baumann, im Auftrag für einen „kranken Onkel“.", + "Die Rezeptkopie zeigte einen Arztstempel, echt, aber alt. Jemand nutzte Schlupflöcher." + ], + "choices": [ + { "label": "Durchsuchungsbefehl für Baumann beantragen", "targetId": "kap6_search_partner" }, + { "label": "Baumann konfrontieren", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap5_medicine_cabinet", + "title": "Kapitel 5 – Hausapotheke", + "paragraphs": [ + "Im Schrank fehlte ein Fläschchen. Der Eindruck im Staub verriet es. Auf der Innenseite: ein fettiger Fingerabdruck, nicht Claras.", + "Ein Etikettenrest klebte an der Schranktür: Digitalis – abgerissen." + ], + "choices": [ + { "label": "Butler Johann konfrontieren", "targetId": "kap6_confront_butler" }, + { "label": "Fingerabdrücke vergleichen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_cards", + "title": "Kapitel 5 – Karteikarten", + "paragraphs": [ + "Die Weinkartei zeigte eine seltsame Umbuchung am Vortag. Eine besonders gelobte Flasche war gegen eine gleich aussehende getauscht.", + "Die Handschrift passte nicht zu Clara. Eher eckig, gedrungen – männlich, geübt." + ], + "choices": [ + { "label": "Sommelier/Weinhändler befragen", "targetId": "kap6_sommelier" }, + { "label": "Fingerabdrücke im Keller vergleichen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_cctv", + "title": "Kapitel 5 – Kamerasicht", + "paragraphs": [ + "Eine alte Kamera im Seitengang zeichnete in schlechter Qualität. Um 21:22 Uhr huschte eine Gestalt vorbei – dunkler Mantel, breite Schultern.", + "Eine auffällige Ziernaht am linken Ärmel war erkennbar. Luxusmarke. Baumann trug etwas Ähnliches." + ], + "choices": [ + { "label": "Mantel sicherstellen", "targetId": "kap6_coat" }, + { "label": "Fahrzeugdaten prüfen", "targetId": "kap6_car" } + ] + }, + { + "id": "kap5_shed", + "title": "Kapitel 5 – Gartenhaus", + "paragraphs": [ + "Im Schrank standen Stiefel, Größe 44, frisch verschlammt. Daneben ein alter Eimer mit Lehm, der die gleichen Einschlüsse wie am Fenster zeigte.", + "Ein Lappen roch nach Rotwein, als hätte jemand Spritzer abgewischt." + ], + "choices": [ + { "label": "Butler konfrontieren", "targetId": "kap6_confront_butler" }, + { "label": "Spurenabgleich durchführen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap5_gate", + "title": "Kapitel 5 – Seitenpforte", + "paragraphs": [ + "Die Kamera an der Pforte erfasste Nummernschilder. Um 21:31 Uhr fuhr ein Wagen vor – Kennzeichen teilverdeckt, aber eindeutig die Serie eines Mietwagens.", + "Die Mietdaten führten zu einer Buchung auf einen Strohmann – mit Kreditkarte, die Baumann öfter verwendete." + ], + "choices": [ + { "label": "Baumann verhaften", "targetId": "kap6_arrest_partner" }, + { "label": "Noch Beweise bündeln (Konten)", "targetId": "kap6_accounts" } + ] + }, + { + "id": "kap5_butler", + "title": "Kapitel 5 – Butler Johann", + "paragraphs": [ + "Johann, der Butler, war ein Mann ohne Schnickschnack. Der Stock im Flur gehörte ihm – seit einer Knieverletzung.", + "„Ich diene dem Haus“, sagte er. „Und ich diene der Wahrheit.“ Sein Blick wich nicht aus, aber er mochte Clara.", + "Ein Schlüsselbund klirrte an seiner Hüfte. Einer fehlte – der mit dem Wappen?" + ], + "choices": [ + { "label": "Alibi von Johann prüfen", "targetId": "kap6_butler_alibi" }, + { "label": "Dienerquartier durchsuchen", "targetId": "kap6_search_quarters" } + ] + }, + { + "id": "kap6_accounts", + "title": "Kapitel 6 – Konten und Verträge", + "paragraphs": [ + "Die Konten offenbarten Risse: riskante Papiere, die ins Minus kippten. Baumann stand mit dem Rücken zur Wand.", + "Eine Lebensversicherung auf {{opfer}} – Begünstigter: die Firma, vertreten durch Baumann. Die Summe: genug, um Löcher zu stopfen." + ], + "choices": [ + { "label": "Durchsuchungsbefehl beantragen", "targetId": "kap6_search_partner" }, + { "label": "Baumann erneut konfrontieren", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap6_confront_partner", + "title": "Kapitel 6 – Konfrontation", + "paragraphs": [ + "„Sie haben nichts“, lächelte Baumann dünn. „Nur Vermutungen.“ Doch sein Blick huschte, als die Apotheke, das Rezept und die Kamera zur Sprache kamen.", + "Schweiß perlte, als der Globusschlüssel erwähnt wurde. „Das ist absurd“, presste er hervor." + ], + "choices": [ + { "label": "Festnehmen", "targetId": "kap_end_partner_guilty" }, + { "label": "Weitere Beweise sammeln", "targetId": "kap6_accounts" } + ] + }, + { + "id": "kap6_clearing_clara", + "title": "Kapitel 6 – Clara entlastet", + "paragraphs": [ + "Zeugen vom Theater, Uhrzeiten, Wege – die Zeitleiste entlastete Clara weitgehend. Nichts sprach für Gift in ihren Händen.", + "Sie weinte, aber da war auch Wut. Auf ein System, das sie klein hielt. Keine Mörderin – eine Gefangene." + ], + "choices": [ + { "label": "Fokus auf Baumann", "targetId": "kap5_partner" }, + { "label": "Butler erneut sprechen", "targetId": "kap5_butler" } + ] + }, + { + "id": "kap6_continue", + "title": "Kapitel 6 – Weitere Spuren", + "paragraphs": [ + "Das Haus atmete Geschichten. Jeder Raum flüsterte eine Spur, doch nicht jede führte ans Ziel.", + "Manchmal liegt die Wahrheit im Keller – oder beim Nachbar, der zu viel sieht." + ], + "choices": [ + { "label": "Weinkeller erneut prüfen", "targetId": "kap4_cellar" }, + { "label": "Nachbar erneut befragen", "targetId": "kap4_neighbor" }, + { "label": "Fall an Kollegen abgeben (Ende offen)", "targetId": "kap_end_case_unsolved" } + ] + }, + { + "id": "kap6_butler_route", + "title": "Kapitel 6 – Johanns Wege", + "paragraphs": [ + "Die Zeiterfassung zeigte Johann zur Tatzeit in der Küche und beim Gästezimmer – mehrere Zeugen, darunter die Köchin.", + "Die Funkzellendaten seines alten Telefons passten: kein Abweichen. Der Stock war alt, nicht die Spur." + ], + "choices": [ + { "label": "Butler entlasten", "targetId": "kap6_clearing_butler" }, + { "label": "Baumann verfolgen", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap6_blackmailer", + "title": "Kapitel 6 – „E.“ der Erpresser", + "paragraphs": [ + "„E.“ war Egon Reiter – der Nachbar. Er hatte Hohenberg und Clara beobachtet, um Geld zu erpressen. Aber Gift? Nein. Er mochte Drohungen, keine Endgültigkeit.", + "Seine Aussage brachte das Puzzle voran: Er sah Baumann am Zaun – nervös, hastig, als der Nebel dichter wurde." + ], + "choices": [ + { "label": "Egon streng verhören", "targetId": "kap6_neighbor_egon" }, + { "label": "Innen-Täter-Spur stärken", "targetId": "kap6_inside_job" } + ] + }, + { + "id": "kap6_globe", + "title": "Kapitel 6 – Der Schlüsselhinweis", + "paragraphs": [ + "Der Globus-Schlüssel öffnete ein spezifisches Fach im Kellerregal – G2. Dort lag eine identische Flasche wie am Tatort, leer.", + "Damit war klar: Jemand hatte bewusst vertauscht." + ], + "choices": [ + { "label": "Keller nochmals sichern", "targetId": "kap4_cellar" }, + { "label": "Fingerabdrücke vergleichen", "targetId": "kap6_compare_prints" } + ] + }, + { + "id": "kap6_servant", + "title": "Kapitel 6 – Dienerflur", + "paragraphs": [ + "Im Dienerflur roch es nach Bohnerwachs und altem Kaffee. Ein Spind stand offen – sauber, ordentlich, ohne Hinweise.", + "Ein Zettel an der Pinnwand: Lieferdienst für den Abend abgesagt – Unterschrift unleserlich." + ], + "choices": [ + { "label": "Quartier systematisch durchsuchen", "targetId": "kap6_search_quarters" }, + { "label": "Johann erneut sprechen", "targetId": "kap6_butler_alibi" } + ] + }, + { + "id": "kap6_pharma", + "title": "Kapitel 6 – Apothekenabgleich", + "paragraphs": [ + "Die Apothekerin erinnerte sich: „Der Herr war nervös, sagte, sein Onkel brauche das. Er hatte feine Manschettenknöpfe.“", + "Das passte zu Baumann. Ein Mosaikstein mehr." + ], + "choices": [ + { "label": "Durchsuchung bei Baumann", "targetId": "kap6_search_partner" }, + { "label": "Konfrontation vorbereiten", "targetId": "kap6_confront_partner" } + ] + }, + { + "id": "kap6_turpentine", + "title": "Kapitel 6 – Spur im Atelier", + "paragraphs": [ + "Turpentin ist scharf, aber kein Gift wie Digitalis. Claras Atelier war ein Ort der Flucht – nicht des Mordes.", + "Die Spur verlor an Kraft. Zeit, den Blick zu heben." + ], + "choices": [ + { "label": "Zum Laborergebnis zurück", "targetId": "kap4_lab_result" }, + { "label": "Baumann prüfen", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap6_neighbor_egon", + "title": "Kapitel 6 – Egons Aussage", + "paragraphs": [ + "Egon gab nach. „Ja, ich hab' geguckt. Ich hab' gedacht, ich krieg' was raus. Aber der mit dem Mantel – das war nicht die Frau.“", + "„Breite Schultern. Hat was fallen lassen am Zaun.“ Ein Metallklang, ein Schlüssel?" + ], + "choices": [ + { "label": "Aussage protokollieren", "targetId": "kap6_accounts" }, + { "label": "Observation verstärken", "targetId": "kap6_stakeout" } + ] + }, + { + "id": "kap6_stakeout", + "title": "Kapitel 6 – Observation", + "paragraphs": [ + "Die Nacht atmete Nebel. Gegen Mitternacht bewegte sich eine Gestalt im Garten – dunkler Mantel, gleiche Ziernaht.", + "Er hob eine Bodenplatte, holte ein Kuvert. Dokumente. Gier hat einen Rhythmus." + ], + "choices": [ + { "label": "Zugreifen", "targetId": "kap_end_partner_guilty" }, + { "label": "Weiter beobachten", "targetId": "kap6_car" } + ] + }, + { + "id": "kap6_inside_job", + "title": "Kapitel 6 – Der Innentäter", + "paragraphs": [ + "Keine echten Einbruchsspuren, Schlüssel im Spiel, bewusst vertauschte Flaschen. Der Täter kannte das Haus.", + "Wer profitierte – und wer hatte Zugang? Butler? Clara? Oder Baumann mit Hilfe?" + ], + "choices": [ + { "label": "Schlüsselverwaltung prüfen", "targetId": "kap6_keys" }, + { "label": "Personalakten durchsuchen", "targetId": "kap6_search_quarters" } + ] + }, + { + "id": "kap6_keys", + "title": "Kapitel 6 – Schlüsselprotokoll", + "paragraphs": [ + "Ein Hauptschlüssel fehlte kurzzeitig in der Liste – vermerkt mit einer unsauberen Signatur. Am nächsten Morgen wieder aufgeführt.", + "Später fand sich ein identischer Schlüssel in einem Mantel – nicht im Dienertrakt." + ], + "choices": [ + { "label": "Durchsuchung bei Baumann", "targetId": "kap6_search_partner" }, + { "label": "Butler befragen", "targetId": "kap6_confront_butler" } + ] + }, + { + "id": "kap6_search_partner", + "title": "Kapitel 6 – Durchsuchung bei Baumann", + "paragraphs": [ + "In seinem Schrank: ein Mantel mit der gleichen Ziernaht. In der Innentasche: ein Fläschchen mit Digitalis-Resten.", + "In einer Schublade: Weinkarteikarten der Villa – fotografiert, markiert. Und ein Schlüssel mit dem Hohenberg-Wappen." + ], + "choices": [ + { "label": "Festnehmen", "targetId": "kap_end_partner_guilty" }, + { "label": "Presse informieren (trotzdem Festnahme)", "targetId": "kap_end_partner_guilty" } + ] + }, + { + "id": "kap6_confront_butler", + "title": "Kapitel 6 – Gespräch mit Johann", + "paragraphs": [ + "Johann stand aufrecht. „Ich habe den Schlüssel verliehen, ja. An Herrn Baumann. Er sagte, es ginge um eine Überraschung für den Herrn.“", + "Scham und Zorn rangen in seiner Stimme. „Ich habe Fehler gemacht. Aber ich töte nicht.“" + ], + "choices": [ + { "label": "Johann festnehmen (falsches Ende)", "targetId": "kap_end_butler_guilty" }, + { "label": "Aussage sichern und Baumann stellen", "targetId": "kap6_search_partner" } + ] + }, + { + "id": "kap6_compare_prints", + "title": "Kapitel 6 – Spurensicherung", + "paragraphs": [ + "Die Abdrücke vom Globus und von der Flasche ergaben ein klares Bild: Baumanns Finger – dazu Textilfasern seines Mantels am Gartenzaun.", + "Claras Spuren fanden sich nur dort, wo sie sein mussten. Johann blieb in den Rändern." + ], + "choices": [ + { "label": "Baumann festnehmen", "targetId": "kap_end_partner_guilty" }, + { "label": "Zeitleiste mit Clara final prüfen", "targetId": "kap6_timeline" } + ] + }, + { + "id": "kap6_sommelier", + "title": "Kapitel 6 – Weinhändler", + "paragraphs": [ + "Der Händler erinnerte sich: „Ein Mann bestellte zwei identische Etiketten, wollte eine Flasche ‚aufhübschen‘. Teure Spielchen.“", + "Die Beschreibung passte erneut auf Baumann. Fingerzeige wurden Fingerabdrücke." + ], + "choices": [ + { "label": "Aussage protokollieren", "targetId": "kap6_accounts" }, + { "label": "Kellerkameras erneut prüfen", "targetId": "kap5_cctv" } + ] + }, + { + "id": "kap6_coat", + "title": "Kapitel 6 – Der Mantel", + "paragraphs": [ + "Im Stoffsaum: Bordeauxspritzer, im Futter: eine feine Staubspur vom Keller. In der Innentasche: der fehlende Schlüssel.", + "Der Mantel erzählte alles, was sein Träger verschwieg." + ], + "choices": [ + { "label": "Spurensicherung/DNA", "targetId": "kap6_compare_prints" }, + { "label": "Sofortige Festnahme", "targetId": "kap_end_partner_guilty" } + ] + }, + { + "id": "kap6_car", + "title": "Kapitel 6 – Fahrzeugspur", + "paragraphs": [ + "Maut- und Kameradaten ergaben eine Linie durch die Nacht. Der Mietwagen kreiste um die Villa wie ein hungriger Wolf.", + "Am Ende stand er dort, wo der Nebel am dicksten war." + ], + "choices": [ + { "label": "Zugreifen", "targetId": "kap_end_partner_guilty" }, + { "label": "Noch einmal observieren", "targetId": "kap6_stakeout" } + ] + }, + { + "id": "kap6_butler_alibi", + "title": "Kapitel 6 – Johanns Alibi", + "paragraphs": [ + "Die Köchin bestätigte: „Er war hier, hat Holz gebracht, Tee gekocht. Der Mann ist pünktlich wie die Uhr.“", + "Johanns Augen wurden weich, als der Name Clara fiel. Loyalität ist kein Verbrechen." + ], + "choices": [ + { "label": "Butler entlasten", "targetId": "kap6_clearing_butler" }, + { "label": "Blick auf Baumann richten", "targetId": "kap5_partner" } + ] + }, + { + "id": "kap6_search_quarters", + "title": "Kapitel 6 – Dienerquartier", + "paragraphs": [ + "Die Zimmer waren schlicht. In einem Schrank: Stiefel mit Lehm – aber älterer Schmutz, getrocknet, nicht von heute.", + "Kein Gift, keine Karten, keine Schlüssel. Nur das Leben hinter den Kulissen." + ], + "choices": [ + { "label": "Spuren mit Schuhgröße abgleichen", "targetId": "kap6_compare_prints" }, + { "label": "Butler erneut vernehmen", "targetId": "kap6_confront_butler" } + ] + }, + { + "id": "kap6_clearing_butler", + "title": "Kapitel 6 – Johann entlastet", + "paragraphs": [ + "Die Spuren entlasteten Johann. Seine Fehler waren menschlich, nicht mörderisch.", + "Bleibt, wer vom Tod profitierte – und Zugang hatte." + ], + "choices": [ + { "label": "Auf Baumann konzentrieren", "targetId": "kap5_partner" }, + { "label": "Egon Reiter erneut anhören", "targetId": "kap6_neighbor_egon" } + ] + }, + { + "id": "kap6_arrest_partner", + "title": "Kapitel 6 – Zugriff", + "paragraphs": [ + "Als die Handschellen klickten, blickte Baumann lange in den Nebel. „Er hätte mich ruiniert“, sagte er tonlos.", + "Gier ist ein stiller Lehrmeister. Und tödlich, wenn sie Wein trinkt." + ], + "choices": [ + { "label": "Fall abschließen", "targetId": "kap_end_partner_guilty" } + ] + }, + { + "id": "kap6_timeline", + "title": "Kapitel 6 – Zeitleiste", + "paragraphs": [ + "Minuten wurden zu Markierungen. Claras Zeiten hielten, Baumanns bröckelten. Der Wein wurde gegen 21:15 manipuliert.", + "Um 21:22 die Kameragestalt, um 21:31 der Wagen. Der Tod trat leise um 21:45 ein." + ], + "choices": [ + { "label": "Festnahme bei Baumann", "targetId": "kap_end_partner_guilty" }, + { "label": "Clara endgültig entlasten", "targetId": "kap6_clearing_clara" } + ] + }, + { + "id": "kap_end_partner_guilty", + "title": "Epilog – Der Mantel des Nebels", + "paragraphs": [ + "Kurt Baumann gestand in Stücken, dann im Ganzen: Er hatte die Flaschen getauscht, das Gift dosiert, den Einbruch inszeniert. Schulden, Versicherung, kalte Logik.", + "Clara verließ die Villa Wochen später. Johann blieb und hütete die leisen Räume, in denen wieder Holz knisterte und Tee duftete.", + "In {{stadt}} blieb der Nebel – aber die Geschichten fanden ihren Weg. {{detektiv}} schrieb einen knappen Bericht: „Der Wein war schwer. Die Wahrheit nicht.“" + ], + "choices": [] + }, + { + "id": "kap_end_butler_guilty", + "title": "Epilog – Der falsche Schluss", + "paragraphs": [ + "Johann wurde abgeführt. Die Presse liebte das Bild vom Diener, der zu weit ging. Wochen später brachen die Indizien gegen ihn zusammen.", + "Die Wahrheit wartete im Mantel eines anderen. Doch manche Fehler lassen sich nicht rückgängig machen.", + "Im Nebel verlieren sich nicht nur Schritte – auch Geister der Gerechtigkeit." + ], + "choices": [] + }, + { + "id": "kap_end_case_unsolved", + "title": "Epilog – Offenes Ende", + "paragraphs": [ + "Der Fall wanderte in eine Mappe. Die Mappe in ein Regal. Die Nacht in {{stadt}} blieb feucht, und der Nebel schwieg.", + "Manchmal ist Schweigen die grausamste aller Antworten. Doch Geschichten enden selten – sie warten nur." + ], + "choices": [] + } + ] +} \ No newline at end of file diff --git a/CSharpBible/Data/Story.Base/Resources/story2.json b/CSharpBible/Data/Story.Base/Resources/story2.json new file mode 100644 index 000000000..076fc18ec --- /dev/null +++ b/CSharpBible/Data/Story.Base/Resources/story2.json @@ -0,0 +1,345 @@ +{ + "Title": "Kalter Grund – Mord an der Mühlenbrücke", + "Variables": { + "protagonist": "Lea Bertram", + "detektiv": "Kommissar Keller", + "stadt": "Bretten", + "wetter": "kalter Niesel", + "uhrzeit": "05:16", + "ort": "Mühlenbrücke", + "geruch1": "feuchtes Holz", + "geruch2": "Maschinenöl", + "geraesch": "fernes Rumpeln" + }, + "Nodes": [ + { + "Id": "kap0", + "Title": "Prolog – Fund an der {{ort}}", + "Paragraphs": [ + "Nebelschwaden kleben am Geländer der {{ort}} von {{stadt}}; im {{wetter}} glimmt eine Absperrleuchte.", + "Auf den Bohlen ein Mensch, reglos, die Kleidung vom Sprühregen dunkel.", + "Es riecht nach {{geruch1}} und Kälte; irgendwo schlägt Wasser an Holz, Takt gegen Takt.", + "{{protagonist}} kniet neben dem Körper, tastet nach Puls – zu spät.", + "In der Jackentasche ein Handy, feucht, der Bildschirm gesprungen." + ], + "Choices": [ + { "Label": "Tatort sichern", "TargetId": "kap1_tatort" }, + { "Label": "Zeugen in der Nähe befragen", "TargetId": "kap1_zeugen" } + ] + }, + { + "Id": "kap1_tatort", + "Title": "Kapitel 1 – Spurensuche", + "Paragraphs": [ + "Kreidespuren begrenzen den Fundort; der Niesel verwischt, was er kriegen kann.", + "Zwischen den Brettern steckt Faserrest – kein Wollfilz, eher technisches Gewebe.", + "Neben der Brücke ein Abrutsch im Ufergras, Fußspuren in zwei Größen.", + "Das Handy vibriert einmal, dann erlischt es; Feuchtigkeit im Gehäuse." + ], + "Choices": [ + { "Label": "Spur zum Wasser verfolgen", "TargetId": "kap2_wasser" }, + { "Label": "Handy sichern und auslesen", "TargetId": "kap2_handy" }, + { "Label": "Schuhabdrücke dokumentieren", "TargetId": "kap2_spuren" } + ] + }, + { + "Id": "kap1_zeugen", + "Title": "Kapitel 1 – Stimmen im Morgengrau", + "Paragraphs": [ + "Ein Bäcker liefert, Mehlstaub am Ärmel; der Atem steht weiß in der Luft.", + "Im Wirtshaus gegenüber brennt eine einzelne Lampe; Stühle stehen kopfüber auf Tischen.", + "Von der Rathausseite blinzelt eine Kamera in Richtung {{ort}}.", + "Ein Mann behauptet, er habe kurz vor {{uhrzeit}} laute Worte gehört." + ], + "Choices": [ + { "Label": "Bäcker befragen", "TargetId": "kap2_baecker" }, + { "Label": "CCTV-Material anfordern", "TargetId": "kap2_cctv" }, + { "Label": "Im Wirtshaus umhören", "TargetId": "kap2_wirt" } + ] + }, + { + "Id": "kap2_wasser", + "Title": "Kapitel 2 – Am Ufer", + "Paragraphs": [ + "Feuchte Erde, Gräser mit Wassertropfen; die Spur knickt zweimal abrupt.", + "Zwischen Steinen glänzt ein kleiner Metallspan, riecht nach {{geruch2}}.", + "Ein Sohlabdruck zeigt eine Kerbe in der Ferse – wiederkehrendes Muster.", + "Das {{geraesch}} rollt von der Bundesstraße herüber, gedämpft durch den Nebel." + ], + "Choices": [ + { "Label": "Dem Pfad am Ufer folgen", "TargetId": "kap3_ufer" }, + { "Label": "Wasserstand und Strömung prüfen", "TargetId": "kap3_muster" } + ] + }, + { + "Id": "kap2_handy", + "Title": "Kapitel 2 – Kalte Daten", + "Paragraphs": [ + "Im Trocknungsbeutel erwacht das Display kurz; Notrufe: keine.", + "Letzte Anrufe an eine Nummer ohne Namen; die IMEI ist notiert.", + "Eine Chat-App zeigt entwürfeweise: \"Brücke\" und \"Beweis\".", + "Die SIM ist leicht verschoben – jemand hat sie kurz gezogen." + ], + "Choices": [ + { "Label": "Letzte Anrufe rückverfolgen", "TargetId": "kap3_daten" }, + { "Label": "SIM wechseln und Nummer testweise anrufen", "TargetId": "kap3_streit" } + ] + }, + { + "Id": "kap2_spuren", + "Title": "Kapitel 2 – Muster im Schlamm", + "Paragraphs": [ + "Der größere Abdruck trägt ein industrielles Profil, kleine Steinchen in den Rillen.", + "Die kleinere Spur knickt nach innen – unsicherer Gang, vielleicht verletzt.", + "Eine Faser hängt an einem Schraubenkopf im Brückengeländer, grau-blau.", + "Am Rand der Spur eine Rillung, wie sie Ladeflächen oft hinterlassen." + ], + "Choices": [ + { "Label": "Sohlenprofil mit Datenbank abgleichen", "TargetId": "kap3_muster" }, + { "Label": "Spurensicherung ans Ufer koordinieren", "TargetId": "kap3_ufer" } + ] + }, + { + "Id": "kap2_baecker", + "Title": "Kapitel 2 – Backstube", + "Paragraphs": [ + "Warme Luft schlägt entgegen; es riecht nach Teig und Blech.", + "\"Zwischen vier und fünf kam ein weißer Transporter\", sagt der Bäcker.", + "Der Fahrer trug Handschuhe ohne Fingerkuppen; am Ärmel dunkle Flecken.", + "Die Lieferliste zeigt eine Abweichung bei einer Route Richtung Gewerbegebiet." + ], + "Choices": [ + { "Label": "Lieferzeiten abgleichen", "TargetId": "kap3_backstube" }, + { "Label": "Fahrerlisten anfordern", "TargetId": "kap3_muster" } + ] + }, + { + "Id": "kap2_cctv", + "Title": "Kapitel 2 – Bilder vom Rathaus", + "Paragraphs": [ + "Die Kamera rauscht im {{wetter}}; Zeitstempel springen gelegentlich.", + "Kurz nach {{uhrzeit}} hält ein Van an der {{ort}}, Licht aus.", + "Eine Gestalt mit Kapuze, daneben eine zweite, kleiner, blickt sich um.", + "Der Van fährt an, Stop-and-Go, als ob er Last ausbalanciert." + ], + "Choices": [ + { "Label": "Kennzeichen identifizieren", "TargetId": "kap3_kamera" }, + { "Label": "Tankstellenkamera entlang der Route prüfen", "TargetId": "kap3_kamera2" } + ] + }, + { + "Id": "kap2_wirt", + "Title": "Kapitel 2 – Wirtshausdunst", + "Paragraphs": [ + "Der Wirt poliert Gläser, die Lampe summt leise.", + "\"Streit gab’s draußen – 'Beweisen? Hier? Spinnst du?'\"", + "Am Stammtisch: \"Riedel vom Amt war gestern spät unterwegs\", murmelt jemand.", + "An der Garderobe hängt eine Jacke mit Fettspur und einem Faden grau-blau." + ], + "Choices": [ + { "Label": "Wirt intensiver befragen", "TargetId": "kap3_streit" }, + { "Label": "Stammtischnotiz aufnehmen", "TargetId": "kap3_backstube" } + ] + }, + { + "Id": "kap3_ufer", + "Title": "Kapitel 3 – Kalte Fährte", + "Paragraphs": [ + "Die Spur führt zu einem alten Schuppen an der Böschung.", + "Zwischen Brettern glänzt ein Vorhängeschloss, frisch, kaum Flugrost.", + "Am Türrahmen Fußabrieb, dunkler als die Umgebung.", + "Hinter der Hütte verlaufen Reifenspuren parallel zur Straße." + ], + "Choices": [ + { "Label": "Zum alten Schuppen vorrücken", "TargetId": "kap4_schuppen" }, + { "Label": "Spur markieren und zum Muster zurück", "TargetId": "kap3_muster" } + ] + }, + { + "Id": "kap3_daten", + "Title": "Kapitel 3 – Nummern und Namen", + "Paragraphs": [ + "Die letzte Nummer führt zu einer Prepaid-Karte.", + "Zwei weitere Anrufe stammen aus einer Behörde mit Durchwahlblock.", + "Die IMEI taucht am Rande eines Funkzellenausdrucks nahe dem Gewerbegebiet auf.", + "In den Kontakten: ein Eintrag \"Riegel\" – Tippfehler oder Name?" + ], + "Choices": [ + { "Label": "IMEI-Ortung über Amtswege", "TargetId": "kap4_amt" }, + { "Label": "Van-Route mit Funkzellen abgleichen", "TargetId": "kap4_lager" } + ] + }, + { + "Id": "kap3_muster", + "Title": "Kapitel 3 – Das Bild fügt sich", + "Paragraphs": [ + "Sohlenprofil passt zu Arbeitsschuhen einer regionalen Spedition.", + "Die Faser ist Polyester-Mix, genutzt in robusten Arbeitsjacken.", + "Lieferlisten zeigen eine ungemeldete Fahrt kurz vor {{uhrzeit}}.", + "Die Karte von {{stadt}} zeichnet eine Linie vom Gewerbegebiet zur {{ort}}." + ], + "Choices": [ + { "Label": "Verbindung zur Spedition prüfen", "TargetId": "kap4_lager" }, + { "Label": "Akte im Amt zu Riedel prüfen", "TargetId": "kap4_amt" } + ] + }, + { + "Id": "kap3_backstube", + "Title": "Kapitel 3 – Weiße Kante", + "Paragraphs": [ + "Der Bäcker nennt eine Teiglieferung, die nie kam.", + "Ein weißer Transporter bog in eine Seitenstraße zur alten Lagerhalle.", + "Auf dem Asphalt eine Spur von Öl und Mehlstaub – seltene Kombination.", + "Jemand hat die Kennzeichenleuchte mit Klebeband abgeklebt." + ], + "Choices": [ + { "Label": "Transporter zur Lagerhalle verfolgen", "TargetId": "kap4_lager" }, + { "Label": "Quittungen im Amt gegenprüfen", "TargetId": "kap4_amt" } + ] + }, + { + "Id": "kap3_kamera", + "Title": "Kapitel 3 – Kennzeichen und Kälte", + "Paragraphs": [ + "Das Kennzeichen ist teilweise verdeckt, doch ein Aufkleber verrät die Flotte.", + "Der Fahrer trägt Fingerling-Handschuhe; am Ärmel ein graublauer Faden.", + "Im Hintergrund eine Person, die sich bewusst vom Blickfeld hält.", + "Ein Lichtreflex an einer Kante – vielleicht eine Werksplombe." + ], + "Choices": [ + { "Label": "Flottenfirma ansteuern (Lager)", "TargetId": "kap4_lager" }, + { "Label": "Schattenperson über Datenabgleich ermitteln (Amt)", "TargetId": "kap4_amt" } + ] + }, + { + "Id": "kap3_kamera2", + "Title": "Kapitel 3 – Zapfsäulenblicke", + "Paragraphs": [ + "Die Tankstellenkamera zeigt den Van ohne Hintertürgriff – Sondermodell.", + "Zeitstempel weichen exakt drei Minuten ab – bekannte Manipulation.", + "Im Spiegel der Kasse spiegelt sich der Beifahrer, Kinnnarbe, Kapuze.", + "Der Kassenbon vermerkt {{uhrzeit}} minus drei – Tippfehler oder Absicht." + ], + "Choices": [ + { "Label": "Route rekonstruieren und Lager zuordnen", "TargetId": "kap4_lager" }, + { "Label": "Zeiten mit Behördenlog prüfen", "TargetId": "kap4_amt" } + ] + }, + { + "Id": "kap3_streit", + "Title": "Kapitel 3 – Worte wie Klingen", + "Paragraphs": [ + "Der Testanruf wird sofort weggedrückt.", + "Kurze Nachricht: \"Zu spät. Lass es.\"", + "Der Name Riedel fällt erneut – Bauamt, Zuständigkeit Brücken.", + "Ein Informant bietet ein Treffen am alten Schuppen an." + ], + "Choices": [ + { "Label": "Riedel konfrontieren (Amt)", "TargetId": "kap4_amt" }, + { "Label": "Informanten am Schuppen treffen", "TargetId": "kap4_schuppen" } + ] + }, + { + "Id": "kap4_lager", + "Title": "Kapitel 4 – Alte Lagerhalle", + "Paragraphs": [ + "Wellblech knarzt, Lichtstreifen zittern über Beton.", + "Ein Van steht halb im Dunkeln; auf der Ladefläche Spanngurte, feucht.", + "An der Wand hängt eine Jacke mit Polyester-Mix – grau-blau.", + "Unter einer Palette klebt eine Werksplombe, frisch gebrochen." + ], + "Choices": [ + { "Label": "Zugang erzwingen – sofort handeln", "TargetId": "kap5_ende_jagd" }, + { "Label": "Observation und Zugriff planen", "TargetId": "kap5_ende_aufklaerung" } + ] + }, + { + "Id": "kap4_amt", + "Title": "Kapitel 4 – Flure des Amts", + "Paragraphs": [ + "Neonlicht, Aktenwagen, Kaffeeduft; Türen mit Namensschildern.", + "Riedels Termine sind voller Baustellenabnahmen nahe der {{ort}}.", + "E-Mails zeigen außergewöhnliche Ausnahmegenehmigungen für Nachtlieferungen.", + "Ein unterschriebener Zettel: \"Brücke – Beweis – neutralisieren\"." + ], + "Choices": [ + { "Label": "Durchsuchungsbeschluss erwirken", "TargetId": "kap5_ende_korruption" }, + { "Label": "Beweise anonym leaken", "TargetId": "kap5_ende_offen" } + ] + }, + { + "Id": "kap4_schuppen", + "Title": "Kapitel 4 – Der Schuppen", + "Paragraphs": [ + "Das Schloss gibt nach einem kurzen Druck nach – schlecht geschlossen.", + "Drinnen: Spanngurt, ein nasser Mantel, Sand mit Metallspänen.", + "Ein Umschlag: Fotos von der {{ort}}, Datumsmuster, Pfeile.", + "Eine frische Spur führt zur Rückseite und verliert sich im Gestrüpp." + ], + "Choices": [ + { "Label": "Versteck öffnen und sichern", "TargetId": "kap5_ende_aufklaerung" }, + { "Label": "Spur falsch interpretiert? Rückzug", "TargetId": "kap5_ende_irrtum" } + ] + }, + { + "Id": "kap5_ende_aufklaerung", + "Title": "Epilog – Aufklärung", + "Paragraphs": [ + "Zugriff im Lager gelingt; im Van liegen Sicherungen, Fotos, Chatprotokolle.", + "Die Verbindung zwischen Spedition und Amt wird belastbar – Riedel tritt zurück.", + "Die Faser, der Abdruck, die Zeiten: das Bild ist vollständig.", + "{{protagonist}} und {{detektiv}} stehen an der {{ort}}, der {{wetter}} lässt nach.", + "In {{stadt}} spricht man von gründlicher Arbeit – und von einer Brücke, die wieder trägt." + ], + "Choices": [] + }, + { + "Id": "kap5_ende_korruption", + "Title": "Epilog – Tiefer Schnitt", + "Paragraphs": [ + "Die Durchsuchung legt ein Netzwerk offen: Freigaben gegen Gefälligkeiten.", + "Riedel wird verhaftet; mehrere Firmen geraten unter Druck.", + "Der Mord an der {{ort}} war Schweigen erzwingen – und ist nun laut.", + "Zeitungen titeln, Bürger fragen, Zeugen reden.", + "{{protagonist}} schließt die Akte, doch der nächste Termin liegt schon bereit." + ], + "Choices": [] + }, + { + "Id": "kap5_ende_jagd", + "Title": "Epilog – Jagd durchs Blech", + "Paragraphs": [ + "Die Halle bebt, Schritte hallen; ein Motor heult auf.", + "Zwischen Paletten jagt ein Schatten; ein Sprung, ein Sturz.", + "Handschellen klicken, die Jacke reißt – graublauer Faden bleibt an der Kante.", + "Draußen fällt {{wetter}} leiser; Sirenen kommen näher.", + "{{protagonist}} lehnt am Van, atmet aus – Ende einer kalten Nacht." + ], + "Choices": [] + }, + { + "Id": "kap5_ende_offen", + "Title": "Epilog – Offene Stadt", + "Paragraphs": [ + "Die Leaks schlagen Wellen; Transparenz wird verlangt.", + "Die Spur ist offen genug, dass sie nicht mehr verschwindet.", + "Manches bleibt im Halbdunkel, doch die Richtung stimmt.", + "{{protagonist}} geht die {{ort}} entlang; Wasser schlägt ruhig an Holz.", + "Ein Fall ist gelöst, ein System in Bewegung." + ], + "Choices": [] + }, + { + "Id": "kap5_ende_irrtum", + "Title": "Epilog – Falscher Pfad", + "Paragraphs": [ + "Der Schuppen birgt nur Nebenspuren; die Hauptlinie lief anders.", + "Doch auch Irrtümer markieren Wege, die man nicht noch einmal geht.", + "Neue Hinweise führen zurück zur Halle, zur Uhrzeit, zum Van.", + "In {{stadt}} schweigt der {{wetter}}; morgen spricht man weiter.", + "{{protagonist}} klappt das Notizbuch zu – Fall noch offen." + ], + "Choices": [] + } + ] +} \ No newline at end of file diff --git a/CSharpBible/Data/Story.Base/Resources/story3.json b/CSharpBible/Data/Story.Base/Resources/story3.json new file mode 100644 index 000000000..ffbc3eba3 --- /dev/null +++ b/CSharpBible/Data/Story.Base/Resources/story3.json @@ -0,0 +1 @@ + { "Title": "Nebelprotokolle – Archiv der Schatten", "Variables": { "protagonist": "Mara", "stadt": "Bretten", "ort": "Stadtarchiv", "uhrzeit": "23:47", "wetter": "kalter Nebel", "geruch1": "altes Papier", "geruch2": "Wachs und Metall", "geraesch": "leises Klicken", "farbeLicht": "bernsteinfarben" }, "Nodes": [ { "Id": "kap0", "Title": "Prolog – Nächtliches Archiv", "Paragraphs": [ "{{protagonist}} steht allein im {{ort}} von {{stadt}}; draußen liegt {{wetter}} in den Gassen.", "Draußen schlägt die Turmuhr {{uhrzeit}}, ihr Echo perlt durch die Regalreihen.", "Die Luft riecht nach {{geruch1}}, durchzogen von einer Spur kalter Luft, die unter der schweren Tür hindurchstreicht.", "Zwischen Karteikästen glimmt eine Sicherheits-LED – ein roter Punkt, der wie ein Auge wacht.", "Jeder Schritt lässt das Holz des Bodens seufzen; Atem kondensiert kurz im Schein der LED." ], "Choices": [ { "Label": "Dem flackernden Licht folgen", "TargetId": "kap1_licht" }, { "Label": "Die staubigen Spuren prüfen", "TargetId": "kap1_spuren" } ] }, { "Id": "kap1_licht", "Title": "Kapitel 1 – Das flackernde Licht", "Paragraphs": [ "Ein alter Projektor wirft {{farbeLicht}}e Schlieren an die Wand; das Bild ist leer, doch das Surren wirkt ungeduldig.", "Staub tanzt wie Schneeflocken im Kegel; jedes Korn zeichnet eine kurze Bahn, bevor es wieder verschwindet.", "Auf dem Tisch daneben liegt ein Filmstreifen, eingerissen am Rand, als hätte jemand hastig abgebrochen.", "Ein Stromkabel führt hinter Kisten entlang, dort, wo der Schatten dichter wird.", "Der Raum atmet warmen Metallgeruch – und da ist noch etwas: {{geruch2}}." ], "Choices": [ { "Label": "Über die Treppe nach oben", "TargetId": "kap2_treppe" }, { "Label": "Den versiegelten Raum untersuchen", "TargetId": "kap2_raum" }, { "Label": "Filmstreifen einlegen", "TargetId": "kap2_film" } ] }, { "Id": "kap1_spuren", "Title": "Kapitel 1 – Spuren im Staub", "Paragraphs": [ "Die Spuren im Staub sind frisch, klar begrenzt und unterschiedlich tief – eine eilige und eine zögerliche Person?", "Sie führen zu einem umgestürzten Regal; unter den Papieren lugt ein Ledereinband hervor.", "Das Notizbuch trägt ein geprägtes Wappen: eine Feder, ein Schlüssel und ein Turm – sorgfältig miteinander verflochten.", "Zwischen den Seiten steckt ein herausgerissenes Registerblatt, dessen Kante gezackte Zähne zeigt.", "Auf dem Holz daneben eine Kerbe, als hätte jemand in Panik nach Halt gesucht." ], "Choices": [ { "Label": "Über die Treppe nach oben", "TargetId": "kap2_treppe" }, { "Label": "Den versiegelten Raum untersuchen", "TargetId": "kap2_raum" }, { "Label": "Notizbuch lesen", "TargetId": "kap2_notiz" } ] }, { "Id": "kap2_treppe", "Title": "Kapitel 2 – Knarrende Treppe", "Paragraphs": [ "Die Stufen sind schmal, die Kanten blankgetreten; das Geländer fühlt sich kälter an als die Luft.", "Jede Bewegung entlockt der Treppe ein langgezogenes Knarren, als würde Holz Erinnerungen flüstern.", "Oben wechselt der Geruch: weniger Staub, mehr Stein – und das {{geraesch}} kehrt zurück, näher jetzt.", "Im Zwielicht zeichnet sich ein langer Flur ab; eine Glastür am Ende spiegelt schemenhaft {{protagonist}}s Silhouette.", "Hinter der Glastür huscht ein Schatten an die Wand, doch als sie erreicht wird, ist der Flur wieder leer." ], "Choices": [ { "Label": "Aufs Dach gehen", "TargetId": "kap3_dach" }, { "Label": "Zurück ins Archiv", "TargetId": "kap3_zurueck" } ] }, { "Id": "kap2_raum", "Title": "Kapitel 2 – Der versiegelte Raum", "Paragraphs": [ "Das Siegel ist frisch, der Wachsrand glatt und glänzend; die Schnur schneidet sich tief in die Holzfasern.", "Ein kaum spürbarer Luftzug streicht durch den Türspalt und trägt Kälte in den Flur.", "Am Türrahmen sind feine Kratzer – nicht von einem Schlüssel, eher vom schnellen Ansetzen eines Drahtes.", "Hinter der Tür wirkt es still, doch die Stille ist nicht leer; sie vibriert wie eine gespannte Saite.", "Ein Aufkleber mit Inventarnummer ist halb abgezogen – darunter blitzt unlackiertes Holz." ], "Choices": [ { "Label": "Durch den schmalen Spalt schlüpfen", "TargetId": "kap3_geheim" }, { "Label": "Sicherheitsdienst rufen", "TargetId": "kap3_ende" } ] }, { "Id": "kap3_dach", "Title": "Kapitel 3 – Auf dem Dach", "Paragraphs": [ "Die Tür zum Dach gibt widerwillig nach; kalte Luft schlägt entgegen, der {{wetter}} hängt schwer über {{stadt}}.", "Unter den Schuhen glänzen feuchte Ziegel; jeder Schritt verlangt Bedacht.", "Zwischen den Nebelbänken reißt der Himmel kurz auf, und ferne Sterne glimmen wie Nadeln.", "Vom gegenüberliegenden Turm blinkt ein Lasersignal: kurz, kurz, lang – dann Pause.", "Ein improvisiertes Stativ steht hinter einem Schornstein; die kleine Linse ist noch warm." ], "Choices": [ { "Label": "Signal erwidern", "TargetId": "kap3_ende_gut" }, { "Label": "Ungesehen abtauchen", "TargetId": "kap3_ende" } ] }, { "Id": "kap3_geheim", "Title": "Kapitel 3 – Der geheime Gang", "Paragraphs": [ "Hinter dem gelösten Paneel öffnet sich ein schmaler Tunnel; Mörtelstaub rieselt leise auf die Schultern.", "Die Wände sind roh, mit Kohlezahlen markiert: 7 | 12 | 3 – vielleicht Bauabschnitte.", "Am Ende hängt ein Schlüsselkasten, in den Stein eingelassen, überraschend sauber und gepflegt.", "Drei Symbole sind eingelassen: eine Feder (Wissen), ein Schwert (Macht), ein Zahnrad (Ordnung).", "Unter der Feder klebt ein kaum sichtbarer Fingerabdruck, frisch genug, um noch zu schimmern." ], "Choices": [ { "Label": "Symbol der Feder wählen", "TargetId": "kap3_ende_gut" }, { "Label": "Symbol des Schwerts wählen", "TargetId": "kap3_ende" } ] }, { "Id": "kap3_zurueck", "Title": "Kapitel 3 – Zurück im Archiv", "Paragraphs": [ "{{protagonist}} tritt wieder in die Schatten der Regale, wo das Surren des Projektors dünner klingt.", "Frische Fußabdrücke kreuzen die alten Spuren und verlieren sich am Hinterausgang.", "Die Linse einer Deckenkamera ist minimal verdreht – gerade so, dass der tote Winkel größer geworden ist.", "Draußen bewegt der Wind eine Kette, die an die Nebentür schlägt; im Inneren antwortet eine Vibration im Metall.", "Ein Blatt vom Notizbuch liegt nun mitten im Gang – jemand war hier, in den letzten Minuten." ], "Choices": [ { "Label": "Draußen nachsehen", "TargetId": "kap3_ende" }, { "Label": "Doch wieder nach oben", "TargetId": "kap2_treppe" } ] }, { "Id": "kap3_ende_gut", "Title": "Epilog – Der verborgene Verbündete", "Paragraphs": [ "Das erwiderte Signal ruft eine Gestalt aus dem Nebel: Kapuze, ruhige Hände, ein Blick, der Ziele kennt.", "Die Person reicht einen Umschlag: Kopien von Akten, ein Zeitplan, Markierungen am Stadtplan von {{stadt}}.", "Zusammen rekonstruieren sie die letzten Stunden – der Projektor war ein Lockmittel, das Siegel ein Täuschungsmanöver.", "Als der Morgen anbricht, liegt eine Spur offen, die in eine verlassene Druckerei führt – und zu Antworten.", "Für {{protagonist}} ist es kein Ende, sondern der Beginn einer Allianz." ], "Choices": [] }, { "Id": "kap3_ende", "Title": "Epilog – Nebel bleibt", "Paragraphs": [ "Der Sicherheitsdienst nimmt den Bericht auf, doch mit jedem Protokollpunkt wird die Nacht gewöhnlicher.", "Das Siegel bleibt zu, der Projektor verstummt; der Nebel schluckt Kanten und Absichten.", "Auf dem Heimweg klingen die Schritte hohl; in einer Scheibe spiegelt sich kurz das Turmwappen.", "Morgen wird {{protagonist}} zurückkehren – mit Zeit, Werkzeugen und neuen Fragen.", "Der Nebel über {{stadt}} weicht nie ganz; manche Geschichten wollen im Dazwischen erzählt werden." ], "Choices": [] }, { "Id": "kap2_film", "Title": "Kapitel 2 – Der stumme Film", "Paragraphs": [ "Der Film läuft ruckelnd an; die Bilder zeigen nur Schatten von Regalgängen und kurze Nummernfolgen.", "Jede zweite Zahl ist verkehrt herum; die Projektion flackert und wirft {{farbeLicht}}e Schlieren auf den Boden.", "Zwischen zwei Schnitten erscheint eine Hand, die eine Karte hochhält – dann ein Sprung, als hätte jemand die Szene entfernt.", "Das {{geraesch}} pulst im Takt des Projektors, jedoch leicht versetzt, als stamme es aus der Wand.", "Auf dem Rahmen sind Kerben eingeritzt: 3-7-12 – dieselben Zahlen wie im Staub am Boden." ], "Choices": [ { "Label": "Codes mit Regalgängen abgleichen", "TargetId": "kap3_codes" }, { "Label": "Kabelverlauf prüfen", "TargetId": "kap2_treppe" } ] }, { "Id": "kap2_notiz", "Title": "Kapitel 2 – Das Wappen-Notizbuch", "Paragraphs": [ "Das Leder knarzt; die ersten Seiten sind Kassenposten, dann wechseln die Einträge zu verschlüsselten Initialen.", "Ein Stundenplan vermerkt {{uhrzeit}} mit einem Kreis und der Notiz: \"Turm – Sichtlinie\".", "Zwischen den Blättern steckt eine trockene Wachsschuppe, am Rand mit feinen Ritzungen.", "Auf einer Doppelseite ein Ablauf: Projektor – Siegel – Ablenkung – Abtransport.", "Am Umschlag klebt ein Faden, der nach {{geruch2}} riecht und im Licht matt glänzt." ], "Choices": [ { "Label": "Register rekonstruieren", "TargetId": "kap3_register" }, { "Label": "Siegel mit Notiz vergleichen", "TargetId": "kap2_raum" } ] }, { "Id": "kap3_codes", "Title": "Kapitel 3 – Zahlen im Staub", "Paragraphs": [ "Die Regale an Position 3, 7 und 12 bilden eine unauffällige Linie; zwischen ihnen knackt eine verborgene Leiste.", "Ein Druck löst ein Panel; dahinter sitzt ein kleines Schaltwerk, das sachte {{geraesch}} verstärkt.", "Pappkarten mit Lochmustern liegen in einem Fach, manche mit einem Stempel: Feder, Schwert, Zahnrad.", "Staub zeichnet feine Luftströme nach, die von einer Fuge im Mauerwerk kommen.", "Ein roter Draht verläuft unter der Leiste entlang und verschwindet im Sockel." ], "Choices": [ { "Label": "Lochkarten entziffern", "TargetId": "kap4_kodex" }, { "Label": "Schaltwerk testen", "TargetId": "kap3_mechanismus" } ] }, { "Id": "kap3_mechanismus", "Title": "Kapitel 3 – Das verborgene Schaltwerk", "Paragraphs": [ "Ein vorsichtiger Dreh, dann ein sattes Einrasten; irgendwo bewegt sich Metall hinter Stein.", "Die Regalwand vibriert und schiebt sich millimeterweise zur Seite – atmet das Gebäude?", "Ein schmaler Schacht wird sichtbar, mit Eisenstufen und kühler Luft aus der Tiefe.", "Oben an der Schachtwand klebt eine Linse, milchig und minimal verdreht wie die Deckenkamera zuvor.", "Ein Pfeil aus Kreide zeigt sowohl nach unten als auch nach oben – Entscheidung in zwei Richtungen." ], "Choices": [ { "Label": "Abwärts in die Tiefe", "TargetId": "kap4_katakomben" }, { "Label": "Aufwärts zum Dachlabor", "TargetId": "kap4_dachlabor" } ] }, { "Id": "kap3_register", "Title": "Kapitel 3 – Verlorenes Register", "Paragraphs": [ "Die gezackte Blattkante passt zu einer Lücke im Alphabet; Namen erscheinen, viele mit demselben Zeichen markiert.", "Inventarnummern verweisen auf Kisten, die nie offiziell erfasst wurden.", "Zwischen den Zeilen ein winziger Punktabdruck, als sei hier geprüft und wieder weggepackt worden.", "Ein Seitenumbruch verrät eine neue Ordnung nach Symbolen statt nach Buchstaben.", "Das Muster führt zu einem Raum, in dem die Luft kälter ist und die Neonröhren tiefer summen." ], "Choices": [ { "Label": "Inventarraum öffnen", "TargetId": "kap4_aktenraum" }, { "Label": "Den Spuren zum Hinterausgang folgen", "TargetId": "kap3_zurueck" } ] }, { "Id": "kap4_katakomben", "Title": "Kapitel 4 – Unter dem Archiv", "Paragraphs": [ "Die Treppe mündet in einen Gang aus Ziegeln; Kondenswasser perlt und sammelt sich in Rinnen.", "Die Luft schmeckt nach Metall; das {{geraesch}} klingt hier wie ein entferntes Metronom.", "An den Wänden Kreidesymbole, wieder die Triade: Feder, Schwert, Zahnrad, jedoch übermalt mit Pfeilen.", "Ein Raum öffnet sich, in dessen Mitte Wachsreste einen Kreis bilden, schwarz angebrannt am Rand.", "Über dem Kreis hängt eine Mechanik, deren Zahnräder staubfrei sind." ], "Choices": [ { "Label": "Den Kreis untersuchen", "TargetId": "kap5_ritual" }, { "Label": "Dem Wasserlauf folgen", "TargetId": "kap5_flucht" } ] }, { "Id": "kap4_dachlabor", "Title": "Kapitel 4 – Das Dachlabor", "Paragraphs": [ "Hinter einer niedrigen Tür kauert ein improvisierter Arbeitsplatz aus Kisten, Kabeln und Glas.", "Eine Linse ist auf das Fenster des versiegelten Raumes gerichtet; Spiegel sind im Winkel verteilt.", "Ein Notizzettel: \"Sichtlinie Turm – 3-7-12 – Entsperrfenster\".", "Die Luft trägt den Hauch von erhitztem Metall; der {{wetter}} kriecht durch Ritzen und kühlt die Finger.", "Ein kleines Messgerät blinkt im Rhythmus des Lasersignals vom Turm." ], "Choices": [ { "Label": "Laser auf Fenster justieren", "TargetId": "kap5_spiegelcode" }, { "Label": "Gerät sabotieren", "TargetId": "kap5_sabotage" } ] }, { "Id": "kap4_aktenraum", "Title": "Kapitel 4 – Der klimatisierte Raum", "Paragraphs": [ "Automatische Türen fahren auf; trockene, kalte Luft schlägt entgegen und riecht entfernt nach {{geruch1}}.", "In Reihung stehen Kisten mit genagelten Deckeln; manche tragen das Wappen von Feder, Schlüssel, Turm.", "Ein Terminal blinkt eine stille Warnung: Zugriff protokolliert.", "Auf einem Tisch liegen Wechselrahmen und Siegelwachs, daneben feine Drähte und Zangen.", "Hinter einer Scheibe ruht eine große Karte von {{stadt}}, mit Markierungen entlang der alten Druckereien." ], "Choices": [ { "Label": "Kiste mit Wappen öffnen", "TargetId": "kap5_druckerei_spur" }, { "Label": "Stillen Alarm setzen", "TargetId": "kap5_alarm" } ] }, { "Id": "kap4_kodex", "Title": "Kapitel 4 – Die Triade", "Paragraphs": [ "Die Lochkarten ergeben in bestimmter Reihenfolge eine Sequenz; Feder, Schwert, Zahnrad wiederholen sich.", "Licht durch die Löcher wirft ein rasterartiges Muster an die Wand, das wie Schrift wirkt.", "Zwischen den Spalten blitzen Zahlen auf, gespiegelt wie im Film zuvor.", "Ein Schieber erlaubt es, die Reihenfolge zu ändern; jede Variante verschiebt den Schatten.", "Drei klare Pfade zeichnen sich ab – Wissen, Macht, Ordnung – jede mit eigener Konsequenz." ], "Choices": [ { "Label": "Pfad Wissen (Feder)", "TargetId": "kap5_verbund" }, { "Label": "Pfad Macht (Schwert)", "TargetId": "kap5_falle" }, { "Label": "Pfad Ordnung (Zahnrad)", "TargetId": "kap5_ordnungsplan" } ] }, { "Id": "kap5_ritual", "Title": "Kapitel 5 – Kreis aus Wachs", "Paragraphs": [ "Im Kreis liegen Reste von Papierbändchen, in die kleinste Ziffern geprägt sind.", "Ein feiner Rußfilm überzieht den Rand; die Mechanik darüber wirkt bereit, etwas abzusenken.", "In einer Nische stehen drei Kerzenstummel, einer davon riecht noch nach {{geruch2}}.", "In der Ferne hallt ein Schritt, dann wieder nur das gleichmäßige {{geraesch}}.", "Der Wachsrand zeigt Unterbrechungen – Stellen, an denen jemand die Linie bewusst gebrochen hat." ], "Choices": [ { "Label": "Ritual unterbrechen", "TargetId": "kap6_ende_aufdeckung" }, { "Label": "Nichts berühren und zurück", "TargetId": "kap3_ende" } ] }, { "Id": "kap5_flucht", "Title": "Kapitel 5 – Der Seitenschacht", "Paragraphs": [ "Eine schmale Öffnung führt in einen Servicekanal; kalte Luft streicht über die Hände.", "Rohrleitungen bündeln sich und vibrieren leise, als spräche das Gebäude in Rohren.", "Ein Gitter zeigt schwaches Straßenlicht: {{stadt}} schläft, der {{wetter}} hängt tief.", "Hinter dem Gitter ein Hof, in dem eine Kette gegen Metall schlägt – derselbe Rhythmus wie zuvor.", "Ein Schatten huscht über die Mauer, zu schnell für einen Wachmann." ], "Choices": [ { "Label": "In die Stadt fliehen", "TargetId": "kap6_ende_offen" }, { "Label": "Zurück in die Katakomben", "TargetId": "kap4_katakomben" } ] }, { "Id": "kap5_spiegelcode", "Title": "Kapitel 5 – Spiegelcode", "Paragraphs": [ "Der Laser trifft den ersten Spiegel, dann den zweiten; ein dünner Lichtfaden kriecht über das Fenster.", "Ein leises Klicken, als eine Verriegelung in der Tür zum versiegelten Raum nachgibt.", "Auf einem Zettel: \"Fenster = Schlüssel\" – jemand hat die Sicherheit ins Licht verlegt.", "Ein Windstoß verschiebt einen Spiegel minimal; das Muster flackert.", "Die Linse auf dem Stativ erwärmt sich merklich, der Kunststoff riecht schwach nach Metall." ], "Choices": [ { "Label": "Verriegelung nutzen und hinab", "TargetId": "kap4_aktenraum" }, { "Label": "Code stören und Spur legen", "TargetId": "kap6_ende_jagd" } ] }, { "Id": "kap5_sabotage", "Title": "Kapitel 5 – Kurzschluss", "Paragraphs": [ "Ein gezogener Stecker, ein verdrehter Spiegel – die Sequenz bricht, das Messgerät piept schrill.", "Vom Turm verstummt das Signal abrupt; die Stille breitet sich wie Wasser aus.", "Im Schacht darunter schnappt eine Sicherung; der Strom wechselt hörbar die Wege.", "Im Hof leuchtet kurz eine Taschenlampe auf, dann erlischt sie.", "Ein Schauer läuft über den Nacken: Die Gegenseite hat den Ausfall bemerkt." ], "Choices": [ { "Label": "Rückzug durch den Schacht", "TargetId": "kap6_ende_jagd" }, { "Label": "Noch einmal justieren", "TargetId": "kap4_dachlabor" } ] }, { "Id": "kap5_druckerei_spur", "Title": "Kapitel 5 – Spur zur Druckerei", "Paragraphs": [ "Die geöffnete Kiste enthält Bleilettern, fein sortiert, und Quittungen einer stillgelegten Druckerei.", "Zwischen Zeitungsausschnitten klebt ein Plan: Lieferwege, versteckte Zugänge, Uhrzeiten.", "Ein Randvermerk: \"Morgen – Umlenkung via Turm\".", "Die Markierung auf {{stadt}}s Karte führt in ein Viertel, in dem der {{wetter}} besonders dicht steht.", "Ein Karton mit Filmrollen trägt dieselben Kerben wie der Projektor." ], "Choices": [ { "Label": "Zur Druckerei aufbrechen", "TargetId": "kap6_druckerei" }, { "Label": "Spuren sichern und abwarten", "TargetId": "kap3_ende" } ] }, { "Id": "kap5_alarm", "Title": "Kapitel 5 – Stiller Alarm", "Paragraphs": [ "Ein unscheinbarer Schalter unter dem Terminal aktiviert eine stille Meldung; kein Ton, nur ein Blinken.", "Die Kamera in der Ecke dreht sich minimal zurück – der tote Winkel schrumpft.", "Auf dem Display laufen Protokollzeilen, doch bestimmte Einträge werden maskiert.", "Ein zweites Fenster poppt auf: \"Beobachter aktiv\".", "Der {{wetter}} legt sich dichter vor die Scheiben, als wolle er das Gebäude einhüllen." ], "Choices": [ { "Label": "Verbündete hineinlotsen", "TargetId": "kap6_ende_buendnisweit" }, { "Label": "Alle Spuren verwischen", "TargetId": "kap3_ende_gut" } ] }, { "Id": "kap5_verbund", "Title": "Kapitel 5 – Der Verbund", "Paragraphs": [ "Die Sequenz \"Feder\" öffnet ein Fach mit Umschlägen: Kopien, Skizzen, ein Verzeichnis von Treffpunkten.", "Ein Hinweis beschreibt Beobachterlinien über Dächer und Spiegel – der Turm als Verteiler.", "Eine Karte markiert sichere Wege durch das Archiv, versteckt zwischen Inventarlisten.", "Die Luft ist still, als würde das Gebäude den Atem anhalten.", "Ein Blatt trägt nur ein Wort: \"Weiter\"." ], "Choices": [ { "Label": "Kontakt aufnehmen", "TargetId": "kap6_netwerk" }, { "Label": "Signal wie am Turm senden", "TargetId": "kap3_ende_gut" } ] }, { "Id": "kap5_falle", "Title": "Kapitel 5 – Der falsche Weg", "Paragraphs": [ "Die Sequenz \"Schwert\" lässt einen Riegel springen; ein Gitter schnellt aus der Wand.", "Das Licht kippt ins Düstere; Schatten wirken kantig, als hätten sie Zähne.", "Ein automatischer Schreibarm kritzelt eine Nummer, die an den Film erinnert.", "Der Boden neigt sich kaum merklich – genug, um Unaufmerksame zu führen.", "Ein kalter Zug streicht durch den Raum, als werde jemand erwartet." ], "Choices": [ { "Label": "Aus der Falle entkommen", "TargetId": "kap6_ende_falle" }, { "Label": "Reihenfolge neu setzen", "TargetId": "kap4_kodex" } ] }, { "Id": "kap5_ordnungsplan", "Title": "Kapitel 5 – Ordnungsplan", "Paragraphs": [ "Die Sequenz \"Zahnrad\" beleuchtet eine Wandkarte; Verbindungen zwischen Archiven, Türmen und Druckereien.", "Markierungen folgen Sichtlinien und Zeitfenstern, als ob die Stadt selbst getaktet wäre.", "Ein Raster aus Nummern und Symbolen legt sich über Straßen und Innenhöfe.", "Das {{geraesch}} synchronisiert sich für einen Moment mit dem eigenen Herzschlag.", "Im unteren Rand eine Legende: Übertragungen nur sichtbar im {{wetter}}." ], "Choices": [ { "Label": "Muster auf {{stadt}} anwenden", "TargetId": "kap6_muster" }, { "Label": "Plan zerstören", "TargetId": "kap3_ende" } ] }, { "Id": "kap6_ende_aufdeckung", "Title": "Epilog – Aufgedeckte Verschwörung", "Paragraphs": [ "Der Kreis bricht, die Mechanik stoppt; die Zahnräder erstarren mit einem letzten Klacken.", "Unter den Kisten finden sich Lieferlisten, die das Netzwerk offenlegen.", "Berichte und Karten fügen sich zu einem Bild, das sich nicht mehr zerreden lässt.", "Mit dem Morgengrauen verflüchtigt sich der {{wetter}} etwas; Konturen der Stadt treten klarer hervor.", "{{protagonist}} verlässt das Archiv mit Belegen – und mit Verbündeten, die sich zeigen." ], "Choices": [] }, { "Id": "kap6_ende_offen", "Title": "Epilog – Offene Flucht", "Paragraphs": [ "Der Hof bleibt leer, nur die Kette schlägt im Takt gegen das Metall.", "Hinter {{protagonist}} schließt sich das Gitter; die Stadt nimmt die Gestalt auf, geräuschlos.", "Im Nebel verwischt die Spur, doch die Karte im Kopf bleibt scharf.", "Fern blinkt der Turm – kein Signal mehr, nur ein Auge im Grau.", "Die Nacht endet ohne Antworten, aber mit Wegen, die noch offenstehen." ], "Choices": [] }, { "Id": "kap6_ende_jagd", "Title": "Epilog – Jagd im Nebel", "Paragraphs": [ "Schritte kreuzen Schritte; der {{wetter}} verschluckt Richtungen und schenkt sie wieder her.", "Ein Lichtkegel schneidet durch den Hof, zu spät, immer eine Sekunde hinterher.", "Eine Seitentür knarrt; das {{geraesch}} wird von hastigem Atmen überlagert.", "Auf der Straße verwischen Lichter zu Linien, das Archiv liegt hinter Schatten.", "Die Stadt bleibt stumm, doch irgendwo klickt es weiter." ], "Choices": [] }, { "Id": "kap6_druckerei", "Title": "Kapitel 6 – Die verlassene Druckerei", "Paragraphs": [ "Die Halle riecht nach Öl und {{geruch1}}; Walzen ruhen wie Tiere im Schlaf.", "Auf einem Tisch liegen Satzschablonen mit winzigen Abweichungen – versteckte Botschaften zwischen Zeilen.", "Ein Zeitungsbogen trägt Markierungen, die den Plan aus dem Archiv ergänzen.", "Hinter der Maschine ein Schaltkasten, dessen Kabel zum Dach führen – Sichtlinie zum Turm.", "In einer Ecke liegt ein Umschlag: \"Für den Morgen\"." ], "Choices": [ { "Label": "Maschine starten", "TargetId": "kap7_ende_manifest" }, { "Label": "Verbündete herbeirufen", "TargetId": "kap6_ende_buendnisweit" } ] }, { "Id": "kap7_ende_manifest", "Title": "Epilog – Das Manifest", "Paragraphs": [ "Die Walzen setzen sich in Bewegung; die erste Seite läuft an, dicke Tinte auf grobem Papier.", "Zwischen Nachrichtenspalten erscheinen die Triaden, lesbar für jene, die sie suchen.", "Ein neues Muster legt sich über {{stadt}} – nicht im Verborgenen, sondern auf der Straße.", "Der {{wetter}} hält die Blätter fest, bevor er sie freigibt wie Vögel.", "{{protagonist}} faltet ein Exemplar und verschwindet, bevor die Maschinen wieder schweigen." ], "Choices": [] }, { "Id": "kap6_ende_buendnisweit", "Title": "Epilog – Offenes Bündnis", "Paragraphs": [ "Zwei, dann drei Gestalten treten aus dem Nebel; eine Handbewegung, kein Wort zu viel.", "Karten werden übereinandergelegt, Lücken gefüllt, Wege verbunden.", "Das Archiv ist nicht mehr nur Ort, sondern Werkzeug; Spiegel und Linien werden neu gesetzt.", "Mit dem Morgen werden Türen geöffnet, die seit Jahren zu waren.", "Der Nebel bleibt, doch die Richtung gehört nun {{protagonist}}." ], "Choices": [] }, { "Id": "kap6_netwerk", "Title": "Epilog – Netzwerk im Nebel", "Paragraphs": [ "Aus der Ferne blinken Antworten; kurze, lange Takte wandern über Dächer und Höfe.", "Umschläge wechseln leise die Besitzer, zu Fuß, per Rad, über schmale Treppen.", "Die Stadt beginnt, ihre eigene Legende zu erzählen – in Schatten, in Licht, in {{geruch1}}.", "Das {{geraesch}} wird zum Herzschlag einer Sache, die größer ist als ein Gebäude.", "{{protagonist}} hört zu und zeichnet nach, was sich fügen will." ], "Choices": [] }, { "Id": "kap6_muster", "Title": "Epilog – Das Muster im Stadtplan", "Paragraphs": [ "Die Linien auf der Karte verbinden sich zu einer Spirale, die um den Turm kreist.", "An Knotenpunkten stehen Druckereien, Archive, Dachluken – jeder Ort ein Spiegel.", "Das Netz ist alt, doch jemand hat es erneuert, still und sorgfältig.", "Im ersten Sonnenlicht hebt sich der {{wetter}} ein wenig; Konturen verraten, wo sich Blicke treffen.", "{{protagonist}} setzt den letzten Stiftpunkt und weiß, wohin der nächste Schritt führt." ], "Choices": [] }, { "Id": "kap6_ende_falle", "Title": "Epilog – In der Falle", "Paragraphs": [ "Das Gitter fällt, aber nur halb; genug Zeit für einen Sprung, zu wenig für Stolz.", "Ein Kratzer am Arm, der Geruch von Staub und {{geruch2}} in der Nase.", "Auf der anderen Seite sind die Schritte schon weiter; niemand wartet hier auf Helden.", "Ein Atemzug, dann ein zweiter – die Stadt atmet mit.", "Nichts ist verloren, aber vieles wird schwerer." ], "Choices": [] } ] } \ No newline at end of file diff --git a/CSharpBible/Data/Story.Base/Story.Base.csproj b/CSharpBible/Data/Story.Base/Story.Base.csproj new file mode 100644 index 000000000..dc5b6a159 --- /dev/null +++ b/CSharpBible/Data/Story.Base/Story.Base.csproj @@ -0,0 +1,15 @@ + + + + net9.0 + enable + enable + + + + + PreserveNewest + + + + diff --git a/CSharpBible/Help/AboutEx.xml b/CSharpBible/Help/AboutEx.xml deleted file mode 100644 index 4e81616f8..000000000 --- a/CSharpBible/Help/AboutEx.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - AboutEx - - - - - Class Program. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Class AboutBox1. Implements the - - Class AboutBox1. Implements the - - - - - Initializes a new instance of the class. - - - - - Gets the assembly title. - - The assembly title. - - - - Gets the assembly version. - - The assembly version. - - - - Gets the assembly description. - - The assembly description. - - - - Gets the assembly product. - - The assembly product. - - - - The Copyright of this Assembly - - - - - The Company of the assembly - - Füllt das Company-Feld des Info/About-Dialogs - <Name of Company> - - - - Verwendete Ressourcen bereinigen. - - - - Class FrmAbout. Implements the - - Class FrmAbout. Implements the - - - - - Initializes a new instance of the class. - - - - - Gets or sets the name of the product. - - The name of the product. - - - - Gets or sets the version. - - The version. - - - - Gets or sets the copyright. - - The copyright. - - - - Gets or sets the comments. - - The comments. - - - - Handles the Click event of the btnOK control. - - The source of the event. - The instance containing the event data. - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - Class FrmAboutExMain. Implements the - - Class FrmAboutExMain. Implements the - - - - - Initializes a new instance of the class. - - - - - Verwendete Ressourcen bereinigen. - - True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - - - \ No newline at end of file diff --git a/CSharpBible/Help/AboutExTests.xml b/CSharpBible/Help/AboutExTests.xml deleted file mode 100644 index d6d220092..000000000 --- a/CSharpBible/Help/AboutExTests.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - AboutExTests - - - - - Defines test class FrmAboutTests. - - - - - Initializes this instance. - - - - - Defines the test method TestSetup. - - - - - Defines the test method FrmAboutTest. - - - - - Defines the test method ProductNameTest. - - - - - Defines the test method VersionTest. - - - - - Defines the test method CopyrightTest. - - - - - Defines the test method BtnOKTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/ActionTest.xml b/CSharpBible/Help/ActionTest.xml deleted file mode 100644 index 0c7787dcc..000000000 --- a/CSharpBible/Help/ActionTest.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - ActionTest - - - - - The ActionTest namespace. - - - - - - Class Program. - - - - - - The Properties namespace. - - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - The exit. - - - Class Settings. This class cannot be inherited. Implements the - - - - - - Gets the default. - - The default. - - - - - The Visual namespace. - - - - - Class FrmActionMain. Implements the - - Class FrmActionMain. Implements the - - - - - - Initializes a new instance of the class. - - - - - Verwendete Ressourcen bereinigen. - - True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - - - \ No newline at end of file diff --git a/CSharpBible/Help/ActionTestWPF.xml b/CSharpBible/Help/ActionTestWPF.xml deleted file mode 100644 index a369bfbb0..000000000 --- a/CSharpBible/Help/ActionTestWPF.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - ActionTestWPF - - - - Interaktionslogik für "App.xaml" - - - Interaktionslogik für MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/AddPage.xml b/CSharpBible/Help/AddPage.xml deleted file mode 100644 index cd126a5a6..000000000 --- a/CSharpBible/Help/AddPage.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - AddPage - - - - - The AddPage namespace. - - - - - - Class Program. - - - - - - The Properties namespace. - - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - The exit. - - - Class Settings. This class cannot be inherited. Implements the - - - - - - Gets the default. - - The default. - - - - - The Visual namespace. - - - - - Class FrmAddPageMain. Implements the - - Class FrmAddPageMain. Implements the - - - - - - Initializes a new instance of the class. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - \ No newline at end of file diff --git a/CSharpBible/Help/AddPageWPF.xml b/CSharpBible/Help/AddPageWPF.xml deleted file mode 100644 index bf6187519..000000000 --- a/CSharpBible/Help/AddPageWPF.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - AddPageWPF - - - - Interaktionslogik für "App.xaml" - - - Interaktionslogik für MainWindow.xaml - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/BaseLib.xml b/CSharpBible/Help/BaseLib.xml deleted file mode 100644 index 19f07a19c..000000000 --- a/CSharpBible/Help/BaseLib.xml +++ /dev/null @@ -1,172 +0,0 @@ - - - - BaseLib - - - - - Class Property. - - - - - Helper for setting properties - - - - The data. - The value. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Interface IHasChildren - - - - - - - Interface IHasChildren - - - - - Adds the item. - - The value. - - true if XXXX, false otherwise. - - - - Removes the item. - - The value. - - true if XXXX, false otherwise. - - - - Gets the items. - - IEnumerable<T>. - - - - Notifies the child change. - - The child object. - The old value. - The new value. - The property. - - - - Interface IParentedObject - - - - - - - Interface IParentedObject - - - - - Sets the parent. - - The value. - The caller member. - - - - Gets the parent. - - T. - - - - Class NotificationObject. - Implements the - - - - - Tritt ein, wenn sich ein Eigenschaftswert ändert. - - - - - Raises the [property changed] event. - - Name of the property. - If this field is not set, the [CallerMemberName] will automatically provided - - - - Calls RaisePropertyChanged for each name in the array - - RaisePropertyChanged will be called for every element - - - - Helper for setting properties - - - - The data. - The value. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Helper for setting properties - - - - The data. - The value. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Helper for setting properties - - - - The data. - The value. - The property names. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Helper for setting properties - - - - The data. - The value. - The property names. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - \ No newline at end of file diff --git a/CSharpBible/Help/BaseLibTests.xml b/CSharpBible/Help/BaseLibTests.xml deleted file mode 100644 index 323e405c9..000000000 --- a/CSharpBible/Help/BaseLibTests.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - BaseLibTests - - - - - Defines test class PropertyTests. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/BindingGroupExp.xml b/CSharpBible/Help/BindingGroupExp.xml deleted file mode 100644 index c8f0c95a4..000000000 --- a/CSharpBible/Help/BindingGroupExp.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - BindingGroupExp - - - - Interaktionslogik für "App.xaml" - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - Interaktionslogik für MainWindow.xaml - - - - The ViewModel namespace. - - - - - - Class MainWindowViewModel. - Implements the - - - - - - Gets or sets the data binding. - - The data binding. - - - - - Gets or sets the description. - - The description. - - - - - Gets or sets the price. - - The price. - - - - - Gets or sets the offer expires. - - The offer expires. - - - - - Gets or sets the submit command. - - The submit command. - - - - - Gets or sets the cancel command. - - The cancel command. - - - - - Initializes a new instance of the class. - - - - - \ No newline at end of file diff --git a/CSharpBible/Help/CSFreeVision.xml b/CSharpBible/Help/CSFreeVision.xml deleted file mode 100644 index 4c97f4459..000000000 --- a/CSharpBible/Help/CSFreeVision.xml +++ /dev/null @@ -1,319 +0,0 @@ - - - - CSFreeVision - - - - - The Base namespace. - - - - - - Class CustomBrush. - - - - - - Class CustomFont. - - - - - - Class CustomPen. - - - - - Class Group. Implements the Implements the - - - - Class Group. Implements the Implements the - - - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class. - - The container. - - - - - Ruft alle Komponenten der . - - The components. - - - - - Fügt das angegebene auf die am Ende der Liste. - - Das hinzuzufügende . - - - - - Fügt das angegebene auf die am Ende der Liste aus, und weist einen Namen für die Komponente. - - Das hinzuzufügende . - Der eindeutige, Groß-/Kleinschreibung der Name der Komponente zuweisen. - - oder - - die bewirkt, dass die Komponente nicht benannt ist. - - - - - Entfernt eine Komponente aus der . - - Das zu entfernende -Element. - - - - - Verwendete Ressourcen bereinigen. - - True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - - - - Interface IHasCanvas - - - - - Class TCanvas. - - - - - Class _Index2. - - The type of the t value. - - - - Gets the canvas. - - The canvas. - - - - Initializes a new instance of the class. - - The parent. - - - - Gets or sets the with the specified x. - - The x. - The y. - TValue. - - - - The pixels - - - - - The colors - - - - - Enum TColor - - - - - - The black - - - - - - The dark blue - - - - - - The dark green - - - - - - The dark cyan - - - - - - The dark red - - - - - - The dark magenta - - - - - - The dark yellow - - - - - - The gray - - - - - - The dark gray - - - - - - The blue - - - - - - The green - - - - - - The cyan - - - - - - The red - - - - - - The magenta - - - - - - The yellow - - - - - - The white - - - - - - Class VideoCell. - - - - - - Class View. - Implements the - Implements the - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The container. - - - - Gets or sets the top. - - The top. - - - - Gets or sets the left. - - The left. - - - - Gets or sets the width. - - The width. - - - - Gets or sets the height. - - The height. - - - - Gets or sets the origin. - - The origin. - - - - Gets or sets the parent. - - The parent. - - - - Gets the canvas. - - The canvas. - - - - The CSFreeVision namespace. - - - - - - Class Class1. - - - - - \ No newline at end of file diff --git a/CSharpBible/Help/CSV_Viewer.xml b/CSharpBible/Help/CSV_Viewer.xml deleted file mode 100644 index 67839a34e..000000000 --- a/CSharpBible/Help/CSV_Viewer.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - - CSV_Viewer - - - - - Class TFieldDef. - Implements the - - - - - The f owner - - - - - Initializes a new instance of the class. - - a name. - a type. - - - - Gets the name of the field. - - The name of the field. - - - - Gets or sets the type of the field. - - The type of the field. - - - - Determines whether the specified is equal to this instance. - - Das Objekt, das mit dem aktuellen Objekt verglichen werden soll. - - true if the specified is equal to this instance; otherwise, false. - - - - Gibt an, ob das aktuelle Objekt gleich einem anderen Objekt des gleichen Typs ist. - - Ein Objekt, das mit diesem Objekt verglichen werden soll. - - , wenn das aktuelle Objekt gleich dem -Parameter ist, andernfalls . - - - - Returns a hash code for this instance. - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - Implements the == operator. - - The left. - The right. - The result of the operator. - - - - Implements the != operator. - - The left. - The right. - The result of the operator. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Class TFieldDefs. - Implements the - - - - - Class Program. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Class FrmCSVViewerMain. Implements the - - Class FrmCSVViewerMain. Implements the - - - - - Initializes a new instance of the class. - - - - - Verwendete Ressourcen bereinigen. - - True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - - - \ No newline at end of file diff --git a/CSharpBible/Help/CSV_ViewerTest.xml b/CSharpBible/Help/CSV_ViewerTest.xml deleted file mode 100644 index 930632032..000000000 --- a/CSharpBible/Help/CSV_ViewerTest.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - CSV_ViewerTest - - - - - Defines test class TFieldDefsTest. - - - - - Initializes the test. - - - - - Creates the test data. - - - - - Defines the test method TestSetup. - - - - - Defines the test method TestCreateData. - - - - - Defines the test method TestFind. - - - - - Defines test class TFieldDefTest. - - - - - Initializes the test. - - - - - Defines the test method TestSetup. - - - - - Defines the test method TestFieldDef1. - - - - - Defines the test method TestFieldDef2. - - - - - Defines test class UnitTest1. - - - - - Defines the test method TestMethod1. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/CSharpBibleTest.xml b/CSharpBible/Help/CSharpBibleTest.xml deleted file mode 100644 index ddb42f408..000000000 --- a/CSharpBible/Help/CSharpBibleTest.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - CSharpBibleTest - - - - - Defines test class UnitTest1. - - - - - Defines the test method TestMethod1. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc32.xml b/CSharpBible/Help/Calc32.xml deleted file mode 100644 index 7d7048a3c..000000000 --- a/CSharpBible/Help/Calc32.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - Calc32 - - - - - The NonVisual namespace. - - - - - Class CalculatorClass. - Implements the - - - - The mode-string - - - - - Occurs when a change happens. - - - - - Gets or sets the akkumulator. - - The akkumulator. - - - - Gets or sets the memory. - - The memory. - - - - Gets the operation text. - - The operation text. - - - - Initializes a new instance of the class. - - - - - Button of Numbers. - - a number. - - - - Executes the specified Operation. - - The operation. - - - - Backs the space. - - - - - The Calc32 namespace. - - - - - - Class Program. - - - - - The Properties namespace. - - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). - - The calculate 32. - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - The calculator 64. - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - The exit. - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - The glow white. - - - Class Settings. This class cannot be inherited. Implements the - - - - - - Gets the default. - - The default. - - - - - The Visual namespace. - - - - - Class FrmCalc32Main. Implements the - - Class FrmCalc32Main. Implements the - - - - - Gets the data context. - - The data context. - - - - Initializes a new instance of the class. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc32Cons.xml b/CSharpBible/Help/Calc32Cons.xml deleted file mode 100644 index 421b5528d..000000000 --- a/CSharpBible/Help/Calc32Cons.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - Calc32Cons - - - - - The NonVisual namespace. - - - - - Class CalculatorClass. - Implements the - - - - The mode-string - - - - - Occurs when a change happens. - - - - - Gets or sets the akkumulator. - - The akkumulator. - - - - Gets or sets the memory. - - The memory. - - - - Gets the operation text. - - The operation text. - - - - Initializes a new instance of the class. - - - - - Button of Numbers. - - a number. - - - - Executes the specified Operation. - - The operation. - - - - Backs the space. - - - - - The Calc32Cons namespace. - - - - - - Class Program. - - - - - The Visual namespace. - - - - - - Class ConsoleCalcView. - Implements the - - - - - Initializes a new instance of the class. - - The application. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc32Tests.xml b/CSharpBible/Help/Calc32Tests.xml deleted file mode 100644 index 981ee9c46..000000000 --- a/CSharpBible/Help/Calc32Tests.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - Calc32Tests - - - - - The Tests namespace. - - - - - - Defines test class CalculatorClassTests. - - - - - Initializes this instance. - - - - - Defines the test method TestSetup. - - - - - Defines the test method CalculatorClassTest. - - - - - Defines the test method AkkumulatorTest. - - - - - Defines the test method OnChangeTest1. - - - - - Defines the test method OnChangeTest2. - - - - - Defines the test method ButtonTest. - - - - - Defines the test method ButtonBack. - - - - - The Tests namespace. - - - - - - Defines test class FrmCalc32MainTests. - - - - - Initializes this instance. - - - - - Defines the test method FrmCalc32MainTest. - - - - - Defines the test method FrmCalc32MainTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc32WPF.xml b/CSharpBible/Help/Calc32WPF.xml deleted file mode 100644 index 7349b33b6..000000000 --- a/CSharpBible/Help/Calc32WPF.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - Calc32WPF - - - - - The Calc32WPF namespace. - - - - Interaktionslogik für "App.xaml" - - - - The NonVisual namespace. - - - - - Class CalculatorClass. - Implements the - - - - The mode-string - - - - - Occurs when a change happens. - - - - - Gets or sets the akkumulator. - - The akkumulator. - - - - Gets or sets the memory. - - The memory. - - - - Gets the operation text. - - The operation text. - - - - Initializes a new instance of the class. - - - - - Button of Numbers. - - a number. - - - - Executes the specified Operation. - - The operation. - - - - Backs the space. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - The ViewModel namespace. - - - - - Class MainWindowViewModel. - Implements the - - - - Gets or sets the akkumulator. - - The akkumulator. - - - - Gets or sets the memory. - - The memory. - - - - Gets the operation text. - - The operation text. - - - - Gets or sets the number-button - delegate. - - The BTN number. - - - - Gets or sets the Delegate for the operation command. - - The BTN operation. - - - - Gets or sets the BTN backspace. - - The BTN backspace. - - - - Initializes a new instance of the class. - - - - Interaktionslogik für MainWindow.xaml - - - - The time - - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc32WPFTests.xml b/CSharpBible/Help/Calc32WPFTests.xml deleted file mode 100644 index ed094aa1b..000000000 --- a/CSharpBible/Help/Calc32WPFTests.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Calc32WPFTests - - - - - The Tests namespace. - - - - - - Defines test class MainWindowViewModelTests. - - - - - - Tests the initialize. - - - - - - Defines the test method MainWindowViewModelTestSetup. - - - - - - Mains the window vm number button. - - The s buttons. - The i pc count. - The s akk. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc64Base.xml b/CSharpBible/Help/Calc64Base.xml deleted file mode 100644 index ba8ce371f..000000000 --- a/CSharpBible/Help/Calc64Base.xml +++ /dev/null @@ -1,491 +0,0 @@ - - - - Calc64Base - - - - - The Calc64Base namespace. - - - - - - a 64 bit calculator-class - - - - - Gets the short desciptions. - - The short desciptions. - - - - Gets the i ds. - - The i ds. - - - - Gets the operations. - - The operations. - - - - Gets or sets the accumulator. - - The accumulator. - - - - Gets or sets the memory. - - The memory. - - - - Gets or sets the register. - - The register. - - - - Gets or sets the last error. - - The last error. - - - - Occurs when [calculate operation changed]. - - - - - Occurs when [calculate operation error]. - - - - - Registers the operation. - - The calculate operation. - - - - Determines whether the specified CalcOperation co is a register operation (uses the register). - - The co. - - true if [is register operation] [the specified co]; otherwise, false. - - - - Determines whether [is register opeation] [the specified short desc]. - - The short desc. - - true if [is register opeation] [the specified short desc]; otherwise, false. - - - - Determines whether [is register opeation] [the specified identifier]. - - The identifier. - - true if [is register opeation] [the specified identifier]; otherwise, false. - - - - Converts to calcoperation. - - The short desc. - CalcOperation. - - - - Converts to calcoperation. - - The identifier. - CalcOperation. - - - - Properties the change. - - - - The property. - The old value. - The new value. - - - - Does the opeation. - - The co. - - true if XXXX, false otherwise. - - - - Does the opeation. - - The short desc. - - true if XXXX, false otherwise. - - - - Does the opeation. - - The identifier. - - true if XXXX, false otherwise. - - - - Class Calc64Model. - Implements the - - - - - Enum Exceptions - - - - - No mode - - - - - Calculate result - - - - - The divide - - - - - - The none - - - - - The e div by zero ex - - - - - The nand - - - - - The memory retreive - - - - - Gets or sets the operation mode. - - The operation mode. - - - - Initializes a new instance of the class. - - - - - Gets the short desc. - - The e. - System.String. - - - - - Buttons the specified a number. - - a number. - The n base. - - - - Operations the specified v. - - The v. - - - - Backs the space. - - The n base. - - - - Class CalcOperation. - - - - - Struct ClcOpSetting - - - - - Class UnaryOperation. - Implements the - - - - - Class BinaryOperation. - Implements the - - - - - Class FromMemOperation. - Implements the - - - - - Class ToMemOperation. - Implements the - - - - - The need accumulator - - - - - The need register - - - - - The need memory - - - - - Initializes a new instance of the struct. - - if set to true [a]. - if set to true [r]. - if set to true [m]. - - - - Gets the argument count. - - The argument count. - - - - Gets or sets a value indicating whether [need accumulator]. - - - true if [need accumulator]; otherwise, false. - - - - Gets or sets a value indicating whether [need register]. - - - true if [need register]; otherwise, false. - - - - Gets or sets a value indicating whether [need memory]. - - - true if [need memory]; otherwise, false. - - - - Gets the setting. - - The setting. - - - - Gets the short description. - - The short description. - - - - Gets the identifier. - - The identifier. - - - - Gets the long description. - - The long description. - - - - Initializes a new instance of the class. - - The short description. - The long description. - The identifier. - - - - Executes the specified o. - - The o. - - true if XXXX, false otherwise. - - - - Creates the arguments. - - The co. - System.Object[]. - - - - Sets the identifier. - - The v. - - - - Gets or sets the function. - - The function. - - - - Initializes a new instance of the class. - - The short description. - The identifier. - The long description. - The function. - - - - Initializes a new instance of the class. - - The short description. - The long description. - The function. - - - - Executes the specified o. - - The o. - - true if XXXX, false otherwise. - - - - The function - - - - - Gets or sets the function. - - The function. - - - - Initializes a new instance of the class. - - The short description. - The identifier. - The long description. - The function. - - - - Initializes a new instance of the class. - - The short description. - The long description. - The function. - - - - Executes the specified o. - - The o. - - true if XXXX, false otherwise. - - - - Initializes a new instance of the class. - - The short description. - The long description. - The function. - - - - Initializes a new instance of the class. - - The short description. - The identifier. - The long description. - The function. - - - - Initializes a new instance of the class. - - The short description. - The long description. - The function. - - - - Initializes a new instance of the class. - - The short description. - The identifier. - The long description. - The function. - - - - Executes the specified o. - - The o. - - true if XXXX, false otherwise. - - - - Class StandardOperations. - - - - - Gets all. - - IEnumerable<CalcOperation>. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc64BaseTests.xml b/CSharpBible/Help/Calc64BaseTests.xml deleted file mode 100644 index 5b74d35dd..000000000 --- a/CSharpBible/Help/Calc64BaseTests.xml +++ /dev/null @@ -1,309 +0,0 @@ - - - - Calc64BaseTests - - - - - The Tests namespace. - - - - - - Defines test class BinaryOperationTests. - - - - - - Defines the test method BinaryOperationTest. - - - - - - Defines the test method ExecuteTest. - - - - - - Defines test class Calc64Tests. - - - - - - Initializes this instance. - - - - - - Defines the test method RegisterOperationTest. - - - - - - Does the opeation test. - - The name. - The i exp argument count. - The o in data. - The o out data. - if set to true [x exp result]. - - - - - Does the opeation test1. - - The name. - The op. - The i exp argument count. - The o in data. - The o out data. - if set to true [x exp result]. - - - - - Does the opeation test1. - - The name. - The op. - The i exp argument count. - The o in data. - The o out data. - if set to true [x exp result]. - - - - - Determines whether [is register opeation test] [the specified name]. - - The name. - The i op. - The s op. - if set to true [x exp result]. - - - - - Determines whether [is register opeation test1] [the specified name]. - - The name. - The i op. - The s op. - if set to true [x exp result]. - - - - - Determines whether [is register opeation test2] [the specified name]. - - The name. - The i op. - The s op. - if set to true [x exp result]. - - - - - Converts to calcoperationtest. - - The name. - The i op. - The s op. - - - - - Converts to calcoperationtest1. - - The name. - The i op. - The s op. - - - - - Defines test class CalcOperationTests. - - - - - - Defines the test method CalcOpDefautTest. - - - - - - Executes the test. - - The name. - The i exp argument count. - The o in data. - The o out data. - if set to true [x exp result]. - - - - - Defines the test method CreateArgumentsTest. - - - - - - Defines test class FromMemOperationTests. - - - - - - Defines the test method FromMemOperationTest. - - - - - - Defines the test method ExecuteTest. - - - - - - Defines test class StandardOperationsTests. - - - - - - Gets all test1. - - The s op. - The s. - The argument l. - if set to true [x result]. - The erg. - The e. - - - - - Class TestCalcOp. - Implements the - - - - - - Gets or sets the length of the i exp. - - The length of the i exp. - - - - - Gets or sets the o exp data. - - The o exp data. - - - - - Gets or sets the o set data. - - The o set data. - - - - - Gets or sets a value indicating whether [x set result]. - - - true if [x set result]; otherwise, false. - - - - - Sets a value indicating whether [set need accumulator]. - - - true if [set need accumulator]; otherwise, false. - - - - - Sets a value indicating whether [set need register]. - - - true if [set need register]; otherwise, false. - - - - - Sets a value indicating whether [set need memory]. - - - true if [set need memory]; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - - Executes the specified o. - - The o. - - true if XXXX, false otherwise. - - - - - Defines test class ToMemOperationTests. - - - - - - Defines the test method ToMemOperationTest. - - - - - - Defines the test method ExecuteTest. - - - - - - Defines test class UnaryOperationTests. - - - - - - Defines the test method UnaryOperationTest. - - - - - - Defines the test method ExecuteTest. - - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc64WF.xml b/CSharpBible/Help/Calc64WF.xml deleted file mode 100644 index b1e2e1e7e..000000000 --- a/CSharpBible/Help/Calc64WF.xml +++ /dev/null @@ -1,296 +0,0 @@ - - - - Calc64WF - - - - - Class Program. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - - - - Sucht eine lokalisierte Zeichenfolge, die /\ ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die == ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die ! ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die \/ ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die X ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die = ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die / ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die M+ ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die MC ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die MR ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die MS ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die M- ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die - ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die Mod ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die * ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die !/\ ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die +/- ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die !/\ ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die + ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die ^ ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die !X ähnelt. - - - - - Class FrmCalc64MainViewModel. - Implements the - - - - - Occurs when [on data changed]. - - - - - Occurs when [close form]. - - - - - Occurs when [press number key]. - - - - Gets or sets the accumulator. - The accumulator. - - - - Gets or sets the memory. - The accumulator. - - - - Gets or sets the register. - The accumulator. - - - - Gets the operation text. - The accumulator. - - - - - Initializes a new instance of the class. - - - - - BTNs the close click. - - The sender. - The tag. - The instance containing the event data. - - - - BTNs the nummber click. - - The sender. - The tag. - The instance containing the event data. - - - - BTNs the operator click. - - The sender. - The tag. - The instance containing the event data. - - - - FRMs the key down. - - The sender. - The tag. - The instance containing the event data. - - - - BTNs the back click. - - The sender. - The tag. - The instance containing the event data. - - - - Class OperationModeToShortString. - Implements the - - - - - Converts the specified value. - - The value. - Type of the target. - The parameter. - The culture. - System.Object. - - - - Converts the back. - - The value. - Type of the target. - The parameter. - The culture. - System.Object. - - - - - Class FrmCalc64Main. Implements the - - Class FrmCalc64Main. Implements the - - - - - Gets the data context. - - The data context. - - - - Initializes a new instance of the class. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Calc64WFTests.xml b/CSharpBible/Help/Calc64WFTests.xml deleted file mode 100644 index fcc07677c..000000000 --- a/CSharpBible/Help/Calc64WFTests.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Calc64WFTests - - - - - Tests the initialize. - - - - - - Mains the window vm number button. - - The s buttons. - The i pc count. - The s akk. - - - - - The Tests namespace. - - - - - - Defines test class OperationModeToShortStringTests. - - - - - - Defines the test method ConvertTest. - - - - - \ No newline at end of file diff --git a/CSharpBible/Help/CanvasWPF.xml b/CSharpBible/Help/CanvasWPF.xml deleted file mode 100644 index ddb184414..000000000 --- a/CSharpBible/Help/CanvasWPF.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - CanvasWPF - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class MainWindowViewModel. - Implements the - - - - - Occurs when [missing data]. - - - - - Gets or sets the rectangles. - - The rectangles. - - - - Gets or sets the circles. - - The circles. - - - - Gets or sets the dc select shape. - - The dc select shape. - - - - Gets or sets the dc create shape. - - The dc create shape. - - - - Gets or sets the dc delete shape. - - The dc delete shape. - - - - Initializes a new instance of the class. - - - - - Class ObservablePoint. - Implements the - - - - - Gets or sets the dx. - - The dx. - - - - Gets or sets the dy. - - The dy. - - - - The maximum x - - - - - The maximum y - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The x. - The y. - - - - Initializes a new instance of the class. - - The p. - - - - Gets or sets the x. - - The x. - - - - Gets or sets the y. - - The y. - - - - Steps this instance. - - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/CanvasWPF2_ItemTemplateSelector.xml b/CSharpBible/Help/CanvasWPF2_ItemTemplateSelector.xml deleted file mode 100644 index c3d2ee570..000000000 --- a/CSharpBible/Help/CanvasWPF2_ItemTemplateSelector.xml +++ /dev/null @@ -1,234 +0,0 @@ - - - - CanvasWPF2_ItemTemplateSelector - - - - - Class ItemTemplateSelector. - Implements the - - - - - Class KeyString. - - - - - Class RessourceSelector. - Implements the - - - - - Gets or sets the item templates. - - The item templates. - - - - When overridden in a derived class, returns a based on custom logic. - - The data object for which to select the template. - The data-bound object. - Returns a or . The default value is . - - - - Gets or sets the key. - - The key. - - - - Gets or sets the item keys. - - The item keys. - - - - When overridden in a derived class, returns a based on custom logic. - - The data object for which to select the template. - The data-bound object. - Returns a or . The default value is . - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class ItemBehavior. - Implements the - - - - - Called after the behavior is attached to an AssociatedObject. - - Override this to hook up functionality to the AssociatedObject. - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the data text. - - The data text. - - - - Gets or sets the shapes. - - The shapes. - - - - Gets or sets the dc select shape. - - The dc select shape. - - - - Gets or sets the dc create shape. - - The dc create shape. - - - - Gets or sets the dc delete shape. - - The dc delete shape. - - - - Gets or sets the dc key down. - - The dc key down. - - - - Gets or sets the dc key up. - - The dc key up. - - - - Initializes a new instance of the class. - - - - - Class ObservablePoint. - Implements the - - - - - Gets the this. - - The this. - - - - Gets or sets the x. - - The x. - - - - Gets or sets the y. - - The y. - - - - Gets or sets the dx. - - The dx. - - - - Gets or sets the dy. - - The dy. - - - - The maximum x - - - - - The maximum y - - - - - Gets or sets the type of the s. - - The type of the s. - - - - Gets or sets the maximum size. - - The maximum size. - - - - Gets or sets the point. - - The point. - - - - Gets or sets the mouse left button down. - - The mouse left button down. - - - - Gets or sets the mouse hover. - - The mouse hover. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The p. - - - - Initializes a new instance of the class. - - The x. - The y. - - - - Steps this instance. - - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/CharGrid.xml b/CSharpBible/Help/CharGrid.xml deleted file mode 100644 index 1620788d1..000000000 --- a/CSharpBible/Help/CharGrid.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - CharGrid - - - - - Class Program. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Class FrmCharGridMain. Implements the - - Class FrmCharGridMain. Implements the - - - - - Initializes a new instance of the class. - - - - - Verwendete Ressourcen bereinigen. - - True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - - - \ No newline at end of file diff --git a/CSharpBible/Help/CommonDialogs.xml b/CSharpBible/Help/CommonDialogs.xml deleted file mode 100644 index 2131ad97f..000000000 --- a/CSharpBible/Help/CommonDialogs.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - CommonDialogs - - - - Class ColorDialog. Implements the - - - - - Initializes a new instance of the class. - - - - - Ruft einen Wert ab, der angibt, ob im Dialogfeld benutzerdefinierte Farben definiert werden können, oder legt diesen fest. - - - true if [allow full open]; otherwise, false. - - - - Ruft einen Wert ab, der angibt, ob im Dialogfeld bei den Grundfarben alle verfügbaren Farben angezeigt werden, oder legt diesen fest. - - - true if [any color]; otherwise, false. - - - - Ruft die von den Benutzern ausgewählte Farbe ab oder legt diese fest. - - The color. - - - - Ruft den im Dialogfeld angezeigten Satz benutzerdefinierter Farben ab oder legt diesen fest. - - The custom colors. - - - - Ruft einen Wert ab, der angibt, ob die Steuerelemente für das Erstellen benutzerdefinierter Farben beim Öffnen des Dialogfelds angezeigt werden, oder legt diesen fest. - - - true if [full open]; otherwise, false. - - - - Ruft einen Wert ab, der angibt, ob im Farbendialogfeld eine Hilfeschaltfläche angezeigt wird, oder legt diesen Wert fest. - - - true if [show help]; otherwise, false. - - - - Ruft einen Wert ab, der angibt, ob Benutzer im Dialogfeld ausschließlich Volltonfarben auswählen können, oder legt diesen fest. - - - true if [solid color only]; otherwise, false. - - - - Setzt alle Optionen auf die Standardwerte zurück, die zuletzt ausgewählte Farbe auf Schwarz und die benutzerdefinierten Farben auf die Standardwerte. - - - - - Gibt eine Zeichenfolge zurück, die den darstellt. - - Ein , der den aktuellen darstellt. - - - - Ruft ein Objekt ab, das Daten bezüglich des Steuerelements enthält, oder legt dieses Objekt fest. - - The tag. - - - - Führt ein Standarddialogfeld mit einem Standardbesitzer aus. - - - , wenn der Benutzer im Dialogfeld auf OK klickt, andernfalls . - - - - Führt ein Standarddialogfeld mit dem angegebenen Besitzer aus. - - Ein beliebiges Objekt, das implementiert, das das Fenster der obersten Ebene und damit den Besitzer des modalen Dialogfelds darstellt. - - , wenn der Benutzer im Dialogfeld auf OK klickt, andernfalls . - - - - Fordert den Benutzer auf, einen Ordner auszuwählen. Diese Klasse kann nicht vererbt werden. - - - - - Gets or sets a value indicating whether [show new folder button]. - - - true if [show new folder button]; otherwise, false. - - - - Ruft den von den Benutzern ausgewählten Pfad ab oder legt diesen fest. - - The selected path. - - - - Ruft den Stammordner ab, von dem aus eine Suche gestartet wird, oder legt diesen fest. - - The root folder. - Der zugewiesene Wert ist keiner der -Werte. - - - - Ruft den beschreibenden Text ab, der im Dialogfeld über dem Strukturansichts-Steuerelement angezeigt wird, oder legt diesen fest. - - The description. - - - - Tritt ein, wenn der Benutzer im Dialogfeld auf die Schaltfläche Hilfe klickt. - - - - - Initialisiert eine neue Instanz der -Klasse. - - - - - Setzt Eigenschaften auf die Standardwerte zurück. - - - - - Ruft ein Objekt ab, das Daten bezüglich des Steuerelements enthält, oder legt dieses Objekt fest. - - The tag. - - - - Führt ein Standarddialogfeld mit einem Standardbesitzer aus. - - - , wenn der Benutzer im Dialogfeld auf OK klickt, andernfalls . - - - - Führt ein Standarddialogfeld mit dem angegebenen Besitzer aus. - - Ein beliebiges Objekt, das implementiert, das das Fenster der obersten Ebene und damit den Besitzer des modalen Dialogfelds darstellt. - - , wenn der Benutzer im Dialogfeld auf OK klickt, andernfalls . - - - - Class FontDialog. - Implements the - - - - - Führt ein Standarddialogfeld mit einem Standardbesitzer aus. - - - , wenn der Benutzer im Dialogfeld auf OK klickt, andernfalls . - - - - Führt ein Standarddialogfeld mit dem angegebenen Besitzer aus. - - Ein beliebiges Objekt, das implementiert, das das Fenster der obersten Ebene und damit den Besitzer des modalen Dialogfelds darstellt. - - , wenn der Benutzer im Dialogfeld auf OK klickt, andernfalls . - - - \ No newline at end of file diff --git a/CSharpBible/Help/ConsoleDisplay.xml b/CSharpBible/Help/ConsoleDisplay.xml deleted file mode 100644 index 56e0fb703..000000000 --- a/CSharpBible/Help/ConsoleDisplay.xml +++ /dev/null @@ -1,530 +0,0 @@ - - - - ConsoleDisplay - - - - - Class Display. - To use the console as an graphic display, Graphic is done with half-blocks and setting the fore- and background color. - - - - - My console - - - - - Initializes a new instance of the class. - - The x. - The y. - The width. - The height. - - - - Gets the origin of the display. - - The origin. - - - - Clears this instance of the display. - - - - - Gets the size of the display. - - The size of the d. - - - - Gets the screen buffer. - - The screen buffer. - - - - Gets or sets the default color of the outside. - - The default color of the outside. - - - - Updates this instance of the display. - - - - - Puts the pixel. - - The x. - The y. - The r. - The g. - The b. - - - - Puts the pixel on the display. - - The x. - The y. - The c. - - - - Puts the line on the display. - - The x1. - The y1. - The x2. - The y2. - The c. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Gets the pixel. - - The x. - The y. - ConsoleColor. - - - - Class MyConsole. - Implements the - - - - - Gets or sets the color of the foreground. - - The color of the foreground. - - - - Gets or sets the color of the background. - - The color of the background. - - - - Gets or sets the key available. - - The key available. - - - - Gets or sets the height of the window. - - The height of the window. - - - - Gets or sets the width of the window. - - The width of the window. - - - - Gets or sets the height of the largest window. - - The height of the largest window. - - - - Gets or sets the title of the window. - - The height of the largest window. - - - - Gets or sets the clear. - - The clear. - - - - Gets or sets the read key. - - The read key. - - - - Gets or sets the write ch. - - The write ch. - - - - Gets or sets the write st. - - The write st. - - - - Gets or sets the set cursor position. - - The set cursor position. - - - - Gets or sets the beep int. - - The beep int. - - - - Gets or sets the get cursor position. - - The get cursor position. - - - - The instance - - - - - Gets or sets the color of the foreground. - - The color of the foreground. - - - - Gets or sets the color of the background. - - The color of the background. - - - - Gets or sets the height of the window. - - The height of the window. - - - - Gets a value indicating whether [key available]. - - - true if [key available]; otherwise, false. - - - - Gets the height of the largest window. - - The height of the largest window. - - - - Gets or sets the width of the window. - - The width of the window. - - - - Gets or sets the title of the window. - - The width of the window. - - - - Clears this instance. - - - - - Writes the specified ch. - - The ch. - - - - Writes the specified st. - - The st. - - - - Writes the line. - - The st. - - - - Sets the cursor position. - - The left. - The top. - - - - Reads the key. - - System.Nullable<ConsoleKeyInfo>. - - - - Gets the cursor position. - - System.ValueTuple<System.Int32, System.Int32>. - - - - Beeps the specified freq. - - The freq. - The dur. - - - - Class MyConsoleBase. - - - - - Gets or sets the color of the foreground. - - The color of the foreground. - - - - Gets or sets the color of the background. - - The color of the background. - - - - Gets or sets the height of the window. - - The height of the window. - - - - Gets or sets the width of the window. - - The width of the window. - - - - Gets a value indicating whether [key available]. - - - true if [key available]; otherwise, false. - - - - Gets the height of the largest window. - - The height of the largest window. - - - - Gets or sets the title of the window. - - The width of the window. - - - - Clears this instance. - - - - - Reads the key. - - System.Nullable<ConsoleKeyInfo>. - - - - Sets the cursor position. - - The left. - The top. - - - - Gets the cursor position. - - System.ValueTuple<System.Int32, System.Int32>. - - - - Writes the specified ch. - - The ch. - - - - Writes the specified st. - - The st. - - - - Writes the line. - - The st. - - - - Beeps the specified freq. - - The freq. - The length. - - - - Class TileDef. - - The type of the enum. - - - - Class TileDisplay. - - The type of the enum. - - - - Gets the tile definition. - - The tile. - The visual defintion of the tile - - - - Converts a Byte to 2 Console-colors (fore- and background). - - The (Console-)color definition. - The Tuple of Forground- and background-color - - - - Gets the array element. - - - - The array. - The tile. - T. - - - - Tile2s the int. - - The tile. - System.Int32. - - - - The default tile - - - - - The default tile definition - - - - - Gets or sets the with the specified index. - - The index. - Enum. - - - - Gets the position. - - The position. - - - - Gets the size of the disp. - - The size of the disp. - - - - Gets the size of the tile. - - The size of the tile. - - - - My console - - - - - Gets or sets the tile definition. - it returns the default-tileDef when the local tileDef isn't set. - - The tile definition. - - - - Writes the tile. - - The offset. - The p. - The tile. - - - - Writes the tile. - - The offset. - The p. - The tile. - The ts. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The position. - The size. - - - - Initializes a new instance of the class. - - The position. - The size. - The tile-definition. - - - - Initializes a new instance of the class. - - The position. - The size. - Size of the tile. - - - - Writes the tile. - - The p. - The tile. - - - \ No newline at end of file diff --git a/CSharpBible/Help/ConsoleLib.xml b/CSharpBible/Help/ConsoleLib.xml deleted file mode 100644 index 871defee8..000000000 --- a/CSharpBible/Help/ConsoleLib.xml +++ /dev/null @@ -1,1212 +0,0 @@ - - - - ConsoleLib - - - - - Class Application. - Implements the - - - - - Gets the mouse position. - - The mouse position. - - - - Gets a value indicating whether this is running. - - - true if running; otherwise, false. - - - - Occurs when [on canvas resize]. - - - - - Initializes a new instance of the class. - - - - - Initializes this instance. - - - - - Runs this instance. - - - - - Stops this instance. - - - - - Class Button. - Implements the - - - - - Presseds the specified m. - - The m. - - true if XXXX, false otherwise. - - - - Sets the specified x. - - The x. - The y. - The text. - Color of the back. - - - - Mouses the enter. - - The m. - - - - Mouses the leave. - - The m. - - - - Sets the text. - - The value. - - - - Class Label. - Implements the - - - - - Gets or sets a value indicating whether [parent background]. - - - true if [parent background]; otherwise, false. - - - - Draws this instance. - - - - - Class Panel. - Implements the - - - - - The boarder - - - - - The boarder color - - - - - Draws this instance. - - - - - Res the draw. - - The dimension. - - - - Class Pixel. - Implements the - - - - - Initializes a new instance of the class. - - - - - Sets the specified x. - - The x. - The y. - The text. - - - - Sets the specified position. - - The position. - The text. - - - - Draws this instance. - - - - - Class ConsoleFramework. - - - - - The chars - - - - - The single boarder - - - - - The double boarder - - - - - The simple boarder - - - - - Gets the mouse position. - - The mouse position. - - - - Gets a value indicating whether [mouse button left]. - - - true if [mouse button left]; otherwise, false. - - - - Gets a value indicating whether [mouse button right]. - - - true if [mouse button right]; otherwise, false. - - - - Gets a value indicating whether [mouse button middle]. - - - true if [mouse button middle]; otherwise, false. - - - - The canvas - - - - - Sets the pixel. - - The x. - The y. - The color. - - - - This is the basic class of all TextControls - - - - - The dimension - - - - - Gets or sets the message queue. - - The message queue. - - - - Gets or sets the dimension. - - The dimension. - - - - Gets or sets the position. - - The position. - - - - Gets or sets the size. - - The size. - - - - Gets the real dim. - - The real dim. - - - - Reals the dim of. - - a dim. - Rectangle. - - - - Locals the dim of. - - a dim. - The ancestor. - Rectangle. - - - - Res the draw. - - The dimension. - - - - Overs the specified m. - - The m. - - true if XXXX, false otherwise. - - - - Gets or sets a value indicating whether this is active. - - - true if active; otherwise, false. - - - - Gets or sets a value indicating whether this is visible. - - - true if visible; otherwise, false. - - - - Gets a value indicating whether this instance is visible. - - - true if this instance is visible; otherwise, false. - - - - Gets or sets a value indicating whether this is shaddow. - - - true if shaddow; otherwise, false. - - - - Gets or sets a value indicating whether this is valid. - - - true if valid; otherwise, false. - - - - Invalidates this instance. - - - - - Occurs when [on click]. - - - - - Occurs when [on move]. - - - - - Occurs when [on resize]. - - - - - Occurs when [on change]. - - - - - Occurs when [on activate]. - - - - - Occurs when [on mouse enter]. - - - - - Occurs when [on mouse leave]. - - - - - Occurs when [on mouse move]. - - - - - Occurs when [on key pressed]. - - - - - The back color - - - - - The fore color - - - - - Gets or sets the text. - - The text. - - - - Sets the text. - - The value. - - - - The children - - - - - The active control - - - - - Gets or sets the parent. - - The parent. - - - - Adds the specified control. - - The control. - Control. - - - - Removes the specified control. - - The control. - Control. - - - - Draws this instance. - - - - - Clicks this instance. - - - - - Mouses the enter. - - The m. - - - - Mouses the leave. - - The m. - - - - Mouses the move. - - The instance containing the event data. - The last mouse position. - - - - Mouses the click. - - The instance containing the event data. - - - - Handles the press key events. - - The instance containing the event data. - - - - Does the update. - - - - - Gets or sets the tag. - - The tag. - - - - Gets or sets the accellerator. - - The accellerator. - - - - Class ExtendedConsole. - - - - - Native Input and Output -Methods - - - - - Interface structure for coordinates - - - - - Structure to represent a small rectangle with 'short'-values - - - - - EventType
A handle to the type of (Console)-input event and the event record stored in the Event member. -
- - For an example, see Reading Input Buffer Events. - - - -
- - - State of the mouse-buttons - - - - - The state of the control keys. This member can be one or more of the following values. - - - - - The type of mouse event. If this value is zero, it indicates a mouse button being pressed or released. Otherwise, this member is one of the following values. - - - - - Describes an input event in the console input buffer. These records can be read from the input buffer by using the ReadConsoleInput or PeekConsoleInput function, or written to the input buffer by using the WriteConsoleInput function. - - - - - Enum DateDifFormat - - - - - Struct CHAR_INFO - - - - - Struct MOUSE_EVENT_RECORD - - - - - Struct KEY_EVENT_RECORD - - - - - Struct WINDOW_BUFFER_SIZE_RECORD - - - - - The input or output mode to be set. If the hConsoleHandle - parameter is an input handle, the mode can be one or more of the - following values. When a console is created, all input modes except ENABLE_WINDOW_INPUT are enabled by default. - - SetConsoleMode function - GetConsoleMode function - - Enum TestEnum - - - - - Stops this instance. - - - - - Occurs when a mouse event happend. - - - - - Occurs when a key event happend. - - - - - Occurs when a window buffer size change event happend. - - - - - The x - - - - - The y - - - - - Initializes a new instance of the struct with 2 values as coordinates. - - The x coordinate. - The y coordinate. - - - - Gets the value as a 'Point'. - - As point. - - Gets the value as a 'Point'. - - As point. - - - - The left - - - - - The top - - - - - The right - - - - - The bottom - - - - - Initializes a new instance of the struct with 4 values as coordinates for the upper left and lower right corner. - - The x1. - The y1. - The x2. - The y2. - - - - Initializes a new instance of the struct with 2 values. - - The top left corner. - The bottom right corner. - - Initializes a new instance of the struct with 2 values. - - The top left corner. - The bottom right corner. - - - - Converts the to a . - - As . - - - - Gets or sets the top left. - - The top left. - - - - Gets or sets the bottom right. - - The bottom right. - - - - The Event member contains a FOCUS_EVENT_RECORD structure. These events are used internally and should be ignored. - - - - - The Event member contains a KEY_EVENT_RECORD structure with information about a keyboard event. - - - - - The Event member contains a MENU_EVENT_RECORD structure. These events are used internally and should be ignored. - - - - - The Event member contains a MOUSE_EVENT_RECORD structure with information about a mouse movement or button press event. - - - - - The Event member contains a WINDOW_BUFFER_SIZE_RECORD structure with information about the new size of the console screen buffer - - - - - The 1st button from left is pressed - - - - - The 2nd button from left is pressed - - - - - The 3rd button from left is pressed - - - - - The 4th button from left is pressed - - - - - The rightmost button is pressed - - - - The CAPS LOCK light is on. - - - - The key is enhanced. - - - - - The left ALT key is pressed. - - - - - The left CTRL key is pressed. - - - - - The NUM LOCK light is on. - - - - - The right ALT key is pressed. - - - - - The right CTRL key is pressed. - - - - - Scroll-Lock is on. - - - - - The SHIFT key is pressed. - - - - - The second click (button press) of a double-click occurred. The first click is returned as a regular button-press event. - - - - - The horizontal mouse wheel was moved. - If the high word of the dwButtonState member contains a positive value, the wheel was rotated to the right. Otherwise, the wheel was rotated to the left. - - - - A change in mouse position occurred. - - - - - The vertical mouse wheel was moved. - If the high word of the dwButtonState member - contains a positive value, the wheel was rotated forward, away from the - user. Otherwise, the wheel was rotated backward, toward the user. - - - - The us event type - - - - - The key event - - - - - The mouse event - - - - - The window buffer size event - - - - - The foreground blue - - - - - The foreground green - - - - - The foreground red - - - - - The foreground intensity - - - - - The background blue - - - - - The background green - - - - - The background red - - - - - The background intensity - - - - - The common LVB leading byte - - - - - The common LVB trailing byte - - - - - The common LVB grid horizontal - - - - - The common LVB grid lvertical - - - - - The common LVB grid rvertical - - - - - The common LVB reverse video - - - - - The common LVB underscore - - - - - The unicode character - - - - - The ASCII character - - - - - The us attributes - - - - - The dw mouse position - - - - - The dw button state - - - - - The dw control key state - - - - - The dw event flags - - - - - Gets as mouse event arguments. - - As mouse event arguments. - - - - If the key is pressed, this member is TRUE. Otherwise, this member is FALSE (the key is released). - - - - - The repeat count, which indicates that a key is being held down. For - example, when a key is held down, you might get five events with this - member equal to 1, one event with this member equal to 5, or multiple - events with this member greater than or equal to 1. - - - - - A virtual-key code that identifies the given key in a device-independent manner. - - - - - The virtual scan code of the given key that represents the device-dependent value generated by the keyboard hardware. - - - - - Translated Unicode character. - - - - - Translated ASCII character. - - - - - The state of the control keys. This member can be one or more of the following values. - - - - - The dw size - - - - - The standard input handle - - - - - Gets the standard handle. - - The n standard handle. - IntPtr. - - - - If the mouse pointer is within the borders of the console window and the - window has the keyboard focus, mouse events generated by mouse movement - and button presses are placed in the input buffer. These events are - discarded by ReadFile or ReadConsole, even when this mode is enabled. - - - - - This flag enables the user to use the mouse to select and edit text. - To enable this mode, use ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS. To disable this mode, use ENABLE_EXTENDED_FLAGS without this flag. - - - - Required to enable or disable extended flags. See ENABLE_INSERT_MODE and ENABLE_QUICK_EDIT_MODE. - - - - - Characters read by the ReadFile or ReadConsole function are written to the active screen buffer as they are read. This mode can be used only if the ENABLE_LINE_INPUT mode is also enabled. - - - - - User interactions that change the size of the console screen - buffer are reported in the console's input buffer. Information about - these events can be read from the input buffer by applications using the - ReadConsoleInput - function, but not by those using - ReadFile - or - ReadConsole - - - - Retrieves the current input mode of a console's input buffer or the current output mode of a console screen buffer. - - A handle to the console input buffer or the console screen buffer. The handle must have the GENERIC_READ access right. For more information, see Console Buffer Security and Access Rights. - A pointer to a variable that receives the current mode of the specified buffer. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - For an example, see Reading Input Buffer Events. - GetConsoleMode Console API - Console Functions - - - - Sets the input mode of a console's input buffer or the output mode of a console screen buffer. - - A handle to the console input buffer or a console screen buffer. The handle must have the GENERIC_READ access right. For more information, see Console Buffer Security and Access Rights. - The input or output mode to be set. If the hConsoleHandle parameter is an input handle, the mode can be one or more of the following values. When a console is created, all input modes except ENABLE_WINDOW_INPUT are enabled by default. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - For an example, see Reading Input Buffer Events. - - SetConsoleMode MS API-documentation - A console consists of an input buffer and one or more screen buffers. - The mode of a console buffer determines how the console behaves during - input and output (I/O) operations. One set of flag constants is used - with input handles, and another set is used with screen buffer (output) - handles. Setting the output modes of one screen buffer does not affect - the output modes of other screen buffers. - - - - Reads the console input. - - A handle to the console input buffer. The handle must have the GENERIC_READ access right. For more information, see Console Buffer Security and Access Rights. - A pointer to an array of INPUT_RECORD structures that receives the input buffer data. - The size of the array pointed to by the lpBuffer parameter, in array elements. - Variable that receives the number of input records read. - - If the function succeeds, the return value is nonzero. - If the function fails, the return value is zero. To get extended error information, call GetLastError. - - - For an example, see Reading Input Buffer Events. - - - - If the number of records requested in the nLength parameter - exceeds the number of records available in the buffer, the number - available is read. The function does not return until at least one input - record has been read. - A process can specify a console input buffer handle in one of the wait functions - to determine when there is unread console input. When the input buffer - is not empty, the state of a console input buffer handle is signaled. - To determine the number of unread input records in a console's input buffer, use the GetNumberOfConsoleInputEvents function. To read input records from a console input buffer without affecting the number of unread records, use the PeekConsoleInput function. To discard all unread records in a console's input buffer, use the FlushConsoleInputBuffer function. - This function uses either Unicode characters or 8-bit characters from - the console's current code page. The console's code page defaults - initially to the system's OEM code page. To change the console's code - page, use the SetConsoleCP or SetConsoleOutputCP functions, or use the chcp or mode con cp select= commands. - - - - - Writes the console input. - - The h console input. - The lp buffer. - Length of the n. - The lp number of events written. - - true if XXXX, false otherwise. - - - - Writes to the console output. - - The console input. - The buffer. - Size of the buffer. - The buffer coord. - The write region. - If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call . - - - - Reads from the console output. - - The console input. - The buffer. - Size of the buffer. - The buffer coord. - The write region. - If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call . - - - - Class TextCanvas. - - - - - The dimension - - - - - Initializes a new instance of the class. - - The dimension. - - - - Gets the color of the background. - - The color of the background. - - - - Gets the clip rect. - - The clip rect. - - - - Gets the color of the foreground. - - The color of the foreground. - - - - Fills the rect. - - The dimension. - The frcolor. - The bkcolor. - The c. - - - - Draws the rect. - - The dimension. - The frcolor. - The bkcolor. - The boarder. - - - - Outs the text xy. - - The place. - The s. - - - - Outs the text xy. - - The place. - The c. - - - - Outs the text xy. - - The x. - The y. - The s. - - - - Outs the text xy. - - The x. - The y. - The c. - -
-
\ No newline at end of file diff --git a/CSharpBible/Help/ConsoleMouseApp.xml b/CSharpBible/Help/ConsoleMouseApp.xml deleted file mode 100644 index 3acff59a5..000000000 --- a/CSharpBible/Help/ConsoleMouseApp.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - ConsoleMouseApp - - - - - Class Program. - - - - - Class ConsoleMouseView. - Implements the - - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/DataGridEx.xml b/CSharpBible/Help/DataGridEx.xml deleted file mode 100644 index 217efcfe7..000000000 --- a/CSharpBible/Help/DataGridEx.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - DataGridEx - - - - - Class Program. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Class Form1. Implements the - - Class Form1. Implements the - - - - - Initializes a new instance of the class. - - - - - Verwendete Ressourcen bereinigen. - - True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - - - - Class Customer. - - - - - Gets or sets the first name. - - The first name. - - - - Gets or sets the last name. - - The last name. - - - - Gets or sets the email. - - The email. - - - - Gets or sets a value indicating whether this instance is member. - - - true if this instance is member; otherwise, false. - - - - Gets or sets the status. - - The status. - - - - Class EmailConverter. - - - - - Converts the specified value. - - The value. - Type of the target. - The parameter. - The culture. - System.Object. - - - - Converts the back. - - The value. - Type of the target. - The parameter. - The culture. - System.Object. - - - - Enum UserAction - - - - \ No newline at end of file diff --git a/CSharpBible/Help/DataGridExWPF.xml b/CSharpBible/Help/DataGridExWPF.xml deleted file mode 100644 index 2f8ca8cba..000000000 --- a/CSharpBible/Help/DataGridExWPF.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - DataGridExWPF - - - - Interaktionslogik für "App.xaml" - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Interaktionslogik für MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class Customer. - - - - - Gets or sets the first name. - - The first name. - - - - Gets or sets the last name. - - The last name. - - - - Gets or sets the email. - - The email. - - - - Gets or sets a value indicating whether this instance is member. - - - true if this instance is member; otherwise, false. - - - - Gets or sets the status. - - The status. - - - - Class EmailConverter. - Implements the - - - - - Konvertiert einen Wert. - - Der von der Bindungsquelle erzeugte Wert. - Der Typ der Bindungsziel-Eigenschaft. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - Konvertiert einen Wert. - - Der Wert, der vom Bindungsziel erzeugt wird. - Der Typ, in den konvertiert werden soll. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - Enum OrderStatus - - - - \ No newline at end of file diff --git a/CSharpBible/Help/DemoLibrary.xml b/CSharpBible/Help/DemoLibrary.xml deleted file mode 100644 index 951dfc1a0..000000000 --- a/CSharpBible/Help/DemoLibrary.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - DemoLibrary - - - - - Class AddressModel. - - - - - Gets or sets the adress identifier. - - The adress identifier. - - - - Gets or sets the additional line. - - The additional line. - - - - Gets or sets the street address. - - The street address. - - - - Gets or sets the city. - - The city. - - - - Gets or sets the state. - - The state. - - - - Gets or sets the zip code. - - The zip code. - - - - Gets or sets the country. - - The country. - - - - Gets the full address. - - The full address. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Class PersonModel. - - - - - Gets or sets the person identifier. - - The person identifier. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the first names. - - The first names. - - - - Gets or sets the last name. - - The last name. - - - - Gets or sets the age. - - The age. - - - - Gets or sets the date of birth. - - The date of birth. - - - - Gets or sets a value indicating whether this instance is alive. - - - true if this instance is alive; otherwise, false. - - - - Gets or sets the account balance. - - The account balance. - - - - The addresses - - - - - Gets or sets the primary address. - - The primary address. - - - - Gets the full name. - - The full name. - - - - Class DataAccess. - - - - - The random - - - - - Gets the people. - - The total. - List<PersonModel>. - - - - Gets the person. - - The identifier. - PersonModel. - - - \ No newline at end of file diff --git a/CSharpBible/Help/DemoLibraryTests.xml b/CSharpBible/Help/DemoLibraryTests.xml deleted file mode 100644 index 5a6cf1964..000000000 --- a/CSharpBible/Help/DemoLibraryTests.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - DemoLibraryTests - - - - - Defines test class AddressModelTests. - - - - - Converts to stringtest. - - a street. - a city. - a state. - a zip. - a. - The exp to string. - - - - Defines the test method ToStringTest1. - - - - - Defines test class PersonModelTests. - - - - - Defines the test method TestPerson. - - - - - Tests the person fullname. - - a first names. - a last name. - a title. - The exp fullname. - - - \ No newline at end of file diff --git a/CSharpBible/Help/DialogBoxes.xml b/CSharpBible/Help/DialogBoxes.xml deleted file mode 100644 index 574dfd35c..000000000 --- a/CSharpBible/Help/DialogBoxes.xml +++ /dev/null @@ -1,168 +0,0 @@ - - - - DialogBoxes - - - - Interaktionslogik für "App.xaml" - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Interaktionslogik für DialogWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaktionslogik für MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class DialogWindowViewModel. - Implements the - - - - - Occurs when [ok]. - - - - - Occurs when [cancel]. - - - - - Gets or sets the ok command. - - The ok command. - - - - Gets or sets the cancel command. - - The cancel command. - - - - Initializes a new instance of the class. - - - - - Gets or sets the name. - - The name. - - - - Gets or sets the email. - - The email. - - - - Class MainWindowViewModel. - Implements the - - - - - Delegate OpenDialogHandler - - The name. - The email. - System.ValueTuple<System.String, System.String>. - - - - Delegate OpenMessageBoxHandler - - The title. - The name. - MessageBoxResult. - - - - Gets or sets the open dialog. - - The open dialog. - - - - Gets or sets the open message box. - - The open message box. - - - - Gets or sets the name. - - The name. - - - - Gets or sets the email. - - The email. - - - - Initializes a new instance of the class. - - - - - Gets or sets the open dialog command. - - The open dialog command. - - - - Gets or sets the open MSG command. - - The open MSG command. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Display_Test.xml b/CSharpBible/Help/Display_Test.xml deleted file mode 100644 index 9dea4effc..000000000 --- a/CSharpBible/Help/Display_Test.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - Display_Test - - - - - The Display_Test namespace. - - - - - - Class Program. - - - - - Defines the entry point of the application. - - The arguments. - - - \ No newline at end of file diff --git a/CSharpBible/Help/DynamicShapeWPF.xml b/CSharpBible/Help/DynamicShapeWPF.xml deleted file mode 100644 index 3aac2cf9b..000000000 --- a/CSharpBible/Help/DynamicShapeWPF.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - DynamicShapeWPF - - - - - The Dynamic Shape - View namespace. - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/ItemsControlTut1.xml b/CSharpBible/Help/ItemsControlTut1.xml deleted file mode 100644 index 1800b819c..000000000 --- a/CSharpBible/Help/ItemsControlTut1.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - ItemsControlTut1 - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/ItemsControlTut2.xml b/CSharpBible/Help/ItemsControlTut2.xml deleted file mode 100644 index 34beaffe9..000000000 --- a/CSharpBible/Help/ItemsControlTut2.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - ItemsControlTut2 - - - - Interaction logic for MainWindow.xaml - - - - Class TodoItem. - - - - - Initializes a new instance of the class. - - - - - Gets or sets the title. - - The title. - - - - Gets or sets the completion. - - The completion. - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/ItemsControlTut3_net.xml b/CSharpBible/Help/ItemsControlTut3_net.xml deleted file mode 100644 index 0114bdb4b..000000000 --- a/CSharpBible/Help/ItemsControlTut3_net.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - ItemsControlTut3_net - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class TodoItem. - Extends the - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the title. - - The title of the task. - - - - Gets or sets the completion [%]. - - The completion of the task [%]. - - - - Gets or sets the do-Command. - - The do. - - - - Gets or sets the Step-Command. - - The do. - - - - Gets the this. - - The this. - - - - Gets or sets the todo list. - - The todo list. - - - - Gets or sets the add item command. - - The add item command. - - - Title of the new item. - The title of the new item. - - - - Initializes a new instance of the class. - - - - Adds an item to the the todo-List. - The title. - The completion-percentage. - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/ItemsControlTut3_netTests.xml b/CSharpBible/Help/ItemsControlTut3_netTests.xml deleted file mode 100644 index c54bab558..000000000 --- a/CSharpBible/Help/ItemsControlTut3_netTests.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - ItemsControlTut3_netTests - - - - \ No newline at end of file diff --git a/CSharpBible/Help/ItemsControlTut4_net.xml b/CSharpBible/Help/ItemsControlTut4_net.xml deleted file mode 100644 index 6ac03ba88..000000000 --- a/CSharpBible/Help/ItemsControlTut4_net.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - ItemsControlTut4_net - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class TodoItem. - Extends the - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the title. - - The title of the task. - - - - Gets or sets the completion. - - The completion of the task [%]. - - - - Gets or sets the do-Command. - - The commang-delegate for "Do". - - - - Gets or sets the Step-Command. - - The command-delegate for the "Step". - - - - Gets the this. - - The this. - - - - Gets or sets the todo list. - - The todo list. - - - Gets or sets the add command. - The add command. - - - Title of the new item. - The title of the new item. - - - - Initializes a new instance of the class. - - - - Adds an item to the the todo-List. - The title. - The completion-percentage. - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/ItemsControlTut4_netTests.xml b/CSharpBible/Help/ItemsControlTut4_netTests.xml deleted file mode 100644 index 43705efb5..000000000 --- a/CSharpBible/Help/ItemsControlTut4_netTests.xml +++ /dev/null @@ -1,154 +0,0 @@ - - - - ItemsControlTut4_netTests - - - - - The Tests namespace. - - - - - - Class BaseTest. - - - - - - Enum ETestAction - - - - - - Defines test class TodoItemTests. - Implements the - - - - - - Defines test class MainWindowViewModelTests. - Implements the - - - - - - The debug result - - - - - - Tests to do items. - - The enum test. - The object. - The test to do item. - - - - - Handles the event. - - The sender. - The instance containing the event data. - - - - - The set title - - - - - - The set completion - - - - - - The do step - - - - - - The do step2 - - - - - - The do do - - - - - - Initializes this instance. - - - - - - Defines the test method SetupTest. - - - - - - Todoes the item test. - - The name. - The e test. - The o. - The s exp. - - - - - Todoes the item test2. - - The name. - The e test. - The o. - The s exp. - - - - - Initializes this instance. - - - - - - Defines the test method SetupTest. - - - - - - Todoes the item test. - - The name. - The i el. - The e test. - The o. - The s exp. - - - - - Defines the test method MainWindowViewModelTest. - - - - - \ No newline at end of file diff --git a/CSharpBible/Help/ListBinding.xml b/CSharpBible/Help/ListBinding.xml deleted file mode 100644 index 5c290e0f7..000000000 --- a/CSharpBible/Help/ListBinding.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - - ListBinding - - - - Interaktionslogik für "App.xaml" - - - - Class Person. - Implements the - Implements the - - - - - - Gets or sets the identifier. - - The identifier. - - - - Gets or sets the first name. - - The first name. - - - - Gets or sets the last name. - - The last name. - - - - Gets or sets the title. - - The title. - - - - Gets the full name. - - The full name. - - - - Gets a value indicating whether this instance is empty. - - - true if this instance is empty; otherwise, false. - - - - Badly formed XML comment. - - - - - Initializes a new instance of the class. - - The full name. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The information. - The context. - - - - Badly formed XML comment. - - - - - Gets the object data. - - The information. - The context. - - - - Diese Methode wird aufgerufen, wenn die Instanz deserialisiert wird. - - Ein Objekt, das den gespeicherten Zustand der Instanz enthält. - - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Interaktionslogik für MainWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaktionslogik für PersonView.xaml - - - - Initializes a new instance of the class. - - - - - Shows the error. - - - - - Class MainWindowViewModel. - Implements the - - - - - Class PersonViewViewModel. - Implements the - - - - - Occurs when [missing data]. - - - - - Creates new person. - - The new person. - - - - Gets or sets the persons. - - The persons. - - - - Gets or sets the BTN add person. - - The BTN add person. - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/ListBindingTests.xml b/CSharpBible/Help/ListBindingTests.xml deleted file mode 100644 index 205a33d96..000000000 --- a/CSharpBible/Help/ListBindingTests.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - ListBindingTests - - - - - Defines test class PersonTests. - - - - - Defines the test method SetupTest. - - - - - Defines the test method PersonTest. - - - - - Persons the test2. - - a identifier. - a firstname. - a lastname. - a title. - The exp fullname. - - - - Persons the test3. - - a identifier. - The exp firstname. - The exp lastname. - The exp title. - a fullname. - - - - Persons the full name. - - a identifier. - a firstname. - a lastname. - a title. - The exp fullname. - - - - Gets the object data test. - - a identifier. - a firstname. - a lastname. - a title. - The exp fullname. - - - - Converts to stringtest. - - a identifier. - a firstname. - a lastname. - a title. - The exp fullname. - - - - Gets the object data test. - - a identifier. - a firstname. - a lastname. - a title. - The exp fullname. - - - - test. - - a identifier. - a firstname. - a lastname. - a title. - The exp fullname. - - - - Defines test class PersonViewViewModelTests. - - - - - Defines the test method PersonViewViewModelTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_16_Usercontrol_1.xml b/CSharpBible/Help/MVVM_16_Usercontrol_1.xml deleted file mode 100644 index f6bead309..000000000 --- a/CSharpBible/Help/MVVM_16_Usercontrol_1.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - MVVM_16_Usercontrol_1 - - - - Interaktionslogik für CurrencyView.xaml - - - Interaktionslogik für LabeldMaxLengthTextbox.xaml - - - Interaktionslogik für UserControlView.xaml - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_16_Usercontrol_2.xml b/CSharpBible/Help/MVVM_16_Usercontrol_2.xml deleted file mode 100644 index 57efef797..000000000 --- a/CSharpBible/Help/MVVM_16_Usercontrol_2.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - MVVM_16_Usercontrol_2 - - - - Interaktionslogik für UserControlView.xaml - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_17_1_CSV_Laden.xml b/CSharpBible/Help/MVVM_17_1_CSV_Laden.xml deleted file mode 100644 index 0298dbeb3..000000000 --- a/CSharpBible/Help/MVVM_17_1_CSV_Laden.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - MVVM_17_1_CSV_Laden - - - - - Class CsvService. - Implements the - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Initializes a new instance of the class. - - The filename. - - - - Reads the CSV. - - IAsyncEnumerable<DataPoint>. - - - - Class DataPoint. - - - - - Gets or sets the time stamp. - - The time stamp. - - - - Gets or sets the x. - - The x. - - - - Gets or sets the y. - - The y. - - - - Gets the dt. - - The dt. - - - Interaktionslogik für DataPoints.xaml - - - - Class DataPointsViewModel. - Implements the - - - - - Initializes a new instance of the class. - - - - - Gets or sets the data points. - - The data points. - - - - Gets or sets a value indicating whether this instance is loading. - - - true if this instance is loading; otherwise, false. - - - - Gets or sets the load cs v. - - The load cs v. - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_18_MultiConverters.xml b/CSharpBible/Help/MVVM_18_MultiConverters.xml deleted file mode 100644 index 6bfc45512..000000000 --- a/CSharpBible/Help/MVVM_18_MultiConverters.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - MVVM_18_MultiConverters - - - - - Enum DateDifFormat - - - - - The days - - - - - The hours - - - - - The minutes - - - - - The seconds - - - - - Class TimeSpanConverter. - Implements the - - - - - Converts source values to a value for the binding target. The data binding engine calls this method when it propagates the values from source bindings to the binding target. - - The array of values that the source bindings in the produces. The value indicates that the source binding has no value to provide for conversion. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. - If the method returns , the valid value is used. - A return value of . indicates that the converter did not produce a value, and that the binding will use the if it is available, or else will use the default value. - A return value of . indicates that the binding does not transfer the value or use the or the default value. - - - - Converts a binding target value to the source binding values. - - The value that the binding target produces. - The array of types to convert to. The array length indicates the number and types of values that are suggested for the method to return. - The converter parameter to use. - The culture to use in the converter. - An array of values that have been converted from the target value back to the source values. - - - - - Interaktionslogik für DateDifView.xaml - - - - Initializes a new instance of the class. - - - - - Class DateDifViewModel. - Implements the - - - - - Gets or sets the start date. - - The start date. - - - - Gets or sets the end date. - - The end date. - - - - Gets or sets the format. - - The format. - - - - Gets the date dif. - - The date dif. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_20_Sysdialogs.xml b/CSharpBible/Help/MVVM_20_Sysdialogs.xml deleted file mode 100644 index f390c9172..000000000 --- a/CSharpBible/Help/MVVM_20_Sysdialogs.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - MVVM_20_Sysdialogs - - - - - Class ColorConverter. - Implements the - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für SysDialogs.xaml - - - - Initializes a new instance of the class. - - - - - Class SysDialogsViewModel. - Implements the - - - - - Delegate FileDialogHandler - - The filename. - The par. - The on accept. - - true if XXXX, false otherwise. - - - - Delegate ColorDialogHandler - - The color. - The par. - The on accept. - - true if XXXX, false otherwise. - - - - Delegate FontDialogHandler - - The font. - The par. - The on accept. - - true if XXXX, false otherwise. - - - - Delegate PrintDialogHandler - - The par. - The on print. - - true if XXXX, false otherwise. - - - - Gets or sets the name of the file open. - - The name of the file open. - - - - Gets or sets the name of the file save. - - The name of the file save. - - - - Gets or sets the name of the path. - - The name of the path. - - - - Gets or sets the ext. - - The ext. - - - - Gets or sets my color. - - My color. - - - - Gets or sets my font. - - My font. - - - - Gets or sets the file open dialog. - - The file open dialog. - - - - Gets or sets the file save as dialog. - - The file save as dialog. - - - - Gets or sets the directory browse dialog. - - The directory browse dialog. - - - - Gets or sets the d color dialog. - - The d color dialog. - - - - Gets or sets the d font dialog. - - The d font dialog. - - - - Gets or sets the d print dialog. - - The d print dialog. - - - - Gets or sets the open file open dialog command. - - The open file open dialog command. - - - - Gets or sets the open directory browse dialog command. - - The open directory browse dialog command. - - - - Gets or sets the open file save as dialog command. - - The open file save as dialog command. - - - - Gets or sets the open color dialog command. - - The open color dialog command. - - - - Gets or sets the open font dialog command. - - The open font dialog command. - - - - Gets or sets the open print dialog command. - - The open print dialog command. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_20_SysdialogsTests.xml b/CSharpBible/Help/MVVM_20_SysdialogsTests.xml deleted file mode 100644 index f06efc1f6..000000000 --- a/CSharpBible/Help/MVVM_20_SysdialogsTests.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - MVVM_20_SysdialogsTests - - - - - Defines test class SysDialogsViewModelTests. - - - - - The test new value - - - - - Initializes this instance. - - - - - Defines the test method SysDialogsViewModelTest. - - - - - Defines the test method SysDialogsViewModelTest_SetFileOpenName. - - - - - Defines the test method SysDialogsViewModelTest_SetFileSaveName. - - - - - Defines the test method SysDialogsViewModelTest_SetPathName. - - - - - Defines the test method SysDialogsViewModelTest_SetExt. - - - - - Defines the test method SysDialogsViewModelTest_SetMyFont. - - - - - Defines the test method SysDialogsViewModelTest_SetMyColor. - - - - - Systems the dialogs view model test set property. - - Name of the property. - The value. - The exp. - - - - Systems the dialogs view model test command. - - The command. - if set to true [tr]. - The value. - The exp. - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_21_Buttons.xml b/CSharpBible/Help/MVVM_21_Buttons.xml deleted file mode 100644 index 82acd1cea..000000000 --- a/CSharpBible/Help/MVVM_21_Buttons.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - - MVVM_21_Buttons - - - - Interaction logic for App.xaml - - - - Class BoolToColorStringConverter. - Implements the - - - - - The true color - - - - - The false color - - - - - Konvertiert einen Wert. - - Der von der Bindungsquelle erzeugte Wert. - Der Typ der Bindungsziel-Eigenschaft. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - Konvertiert einen Wert. - - Der Wert, der vom Bindungsziel erzeugt wird. - Der Typ, in den konvertiert werden soll. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Interaktionslogik für ButtonsView.xaml - - - - Initializes a new instance of the class. - - - - - Class ButtonsViewViewModel. - Implements the - - - - - Initializes a new instance of the class. - - - - - Gets or sets the play button. - - The play button. - - - - Gets or sets the reset button. - - The reset button. - - - - Gets or sets the last para. - - The last para. - - - - Gets or sets the flip. - - The flip. - - - - Determines whether this instance can play the specified object. - - The object. - - true if this instance can play the specified object; otherwise, false. - - - - Does the play. - - - - The object. - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_22_WpfCap.xml b/CSharpBible/Help/MVVM_22_WpfCap.xml deleted file mode 100644 index 69d1e8b1c..000000000 --- a/CSharpBible/Help/MVVM_22_WpfCap.xml +++ /dev/null @@ -1,279 +0,0 @@ - - - - MVVM_22_WpfCap - - - - Interaktionslogik für "App.xaml" - - - - Class EnumToColorStringConverter. - Implements the - - - - - The zero color - - - - - The true color - - - - - The false color - - - - - The three color - - - - - The four color - - - - - Konvertiert einen Wert. - - Der von der Bindungsquelle erzeugte Wert. - Der Typ der Bindungsziel-Eigenschaft. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - Konvertiert einen Wert. - - Der Wert, der vom Bindungsziel erzeugt wird. - Der Typ, in den konvertiert werden soll. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - - - Class IntToStringConverter. - Implements the - - - - - Konvertiert einen Wert. - - Der von der Bindungsquelle erzeugte Wert. - Der Typ der Bindungsziel-Eigenschaft. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - Konvertiert einen Wert. - - Der Wert, der vom Bindungsziel erzeugt wird. - Der Typ, in den konvertiert werden soll. - Der zu verwendende Konverterparameter. - Die im Konverter zu verwendende Kultur. - Ein konvertierter Wert. - Wenn die Methode zurückgibt, wird der gültige NULL-Wert verwendet. - - - - - Interaktionslogik für MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Interaktionslogik für WpfCapView.xaml - - - - Initializes a new instance of the class. - - - - - Class RowData. - Implements the - - - - - Class ColData. - Implements the - - - - - Class WpfCapViewModel. - Implements the - - - - - Gets or sets the row identifier. - - The row identifier. - - - - Gets or sets the move left. - - The move left. - - - - Gets or sets the move right. - - The move right. - - - - Gets or sets the color of the tile. - - The color of the tile. - - - - Gets the this. - - The this. - - - - Tritt ein, wenn sich ein Eigenschaftswert ändert. - - - - - Notifies the property changed. - - The name. - - - - Gets or sets the col identifier. - - The col identifier. - - - - Gets or sets the move up. - - The move up. - - - - Gets or sets the move down. - - The move down. - - - - Gets or sets the with the specified ix. - - The ix. - System.Int32. - - - - Gets the this. - - The this. - - - - The parent - - - - - Tritt ein, wenn sich ein Eigenschaftswert ändert. - - - - - The length - - - - - Notifies the property changed. - - The name. - - - - Initializes a new instance of the class. - - - - - Gets or sets the shuffle command. - - The shuffle command. - - - - Gets or sets the rows. - - The rows. - - - - Gets or sets the cols. - - The cols. - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_6_Converters.xml b/CSharpBible/Help/MVVM_6_Converters.xml deleted file mode 100644 index 7741e9474..000000000 --- a/CSharpBible/Help/MVVM_6_Converters.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - MVVM_6_Converters - - - - - Class CurrencyValueConverter. - Implements the - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - - Class KeyboardExtensions. - - - - - The enter key command property - - - - - Gets the enter key command. - - The element. - ICommand. - - - - Sets the enter key command. - - The element. - The value. - - - Interaktionslogik für CurrencyView.xaml - - - - Initializes a new instance of the class. - - - - - Class CurrencyViewViewModel. - Implements the - - - - - Gets or sets the value. - - The value. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_6_Converters_2.xml b/CSharpBible/Help/MVVM_6_Converters_2.xml deleted file mode 100644 index 77d600614..000000000 --- a/CSharpBible/Help/MVVM_6_Converters_2.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - MVVM_6_Converters_2 - - - - - Class CurrencyValueConverter. - Implements the - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - Interaktionslogik für CurrencyView.xaml - - - - Initializes a new instance of the class. - - - - - Class CurrencyViewViewModel. - Implements the - - - - - Gets or sets the value. - - The value. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_6_Converters_3.xml b/CSharpBible/Help/MVVM_6_Converters_3.xml deleted file mode 100644 index 932c436f2..000000000 --- a/CSharpBible/Help/MVVM_6_Converters_3.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - MVVM_6_Converters_3 - - - - - Class Bool2VisibilityConverter. - Implements the - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Class CurrencyValueConverter. - Implements the - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - Interaktionslogik für CurrencyView.xaml - - - - Initializes a new instance of the class. - - - - - Class CurrencyViewViewModel. - Implements the - - - - - Gets or sets the value. - - The value. - - - - Initializes a new instance of the class. - - - - - Gets a value indicating whether [value is not zero]. - - - true if [value is not zero]; otherwise, false. - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_BaseLib.xml b/CSharpBible/Help/MVVM_BaseLib.xml deleted file mode 100644 index 88f93c726..000000000 --- a/CSharpBible/Help/MVVM_BaseLib.xml +++ /dev/null @@ -1,377 +0,0 @@ - - - - MVVM_BaseLib - - - - - Class Property. - - - - - Helper for setting properties - - - - The data. - The value. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Class BaseViewModel. - Implements the - - - - - The known parameters - - - - - The command can execute binding - - - - - Initializes a new instance of the class. - - - - - Appends the known parameters. - - The parameter. - Name of the property. - - - - A base collection class that supports automatic UI thread marshalling. - - The type of elements contained in the collection. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The collection from which the elements are copied. - - - - Enables/Disables property change notification. - - - true if this instance is notifying; otherwise, false. - - - - Gets a value indicating whether [property change notifications on UI thread]. - - - true if [property change notifications on UI thread]; otherwise, false. - - - - Notifies subscribers of the property change. - - Name of the property. - - - - Raises a change notification indicating that all bindings should be refreshed. - - - - - Inserts the item to the specified position. - - The index to insert at. - The item to be inserted. - - - - Exposes the base implementation of the function. - - The index. - The item. - Used to avoid compiler warning regarding unverifiable code. - - - - Sets the item at the specified position. - - The index to set the item at. - The item to set. - - - - Exposes the base implementation of the function. - - The index. - The item. - Used to avoid compiler warning regarding unverifiable code. - - - - Removes the item at the specified position. - - The position used to identify the item to remove. - - - - Exposes the base implementation of the function. - - The index. - Used to avoid compiler warning regarding unverifiable code. - - - - Clears the items contained by the collection. - - - - - Exposes the base implementation of the function. - - Used to avoid compiler warning regarding unverifiable code. - - - - Raises the event with the provided arguments. - - Arguments of the event being raised. - - - - Raises the PropertyChanged event with the provided arguments. - - The event data to report in the event. - - - - Adds the range. - - The items. - - - - Removes the range. - - The items. - - - - Executes the given action on the UI thread - - The action. - An extension point for subclasses to customise how property change notifications are handled. - - - - Class DelegateCommand. - Implements the - Implements the - - - - - - Class DelegateCommand. - Implements the - Implements the - - - - - - - - Initializes a new instance of the class. - - The execute. - The can execute. - - - - Initializes a new instance of the class. - - The execute. - - Initializes a new instance of the class. - - The execute. - - - - Tritt ein, wenn Änderungen auftreten, die sich auf die Ausführung des Befehls auswirken. - - - - - Definiert die Methode, die bestimmt, ob der Befehl im aktuellen Zustand ausgeführt werden kann. - - Vom Befehl verwendete Daten. Wenn der Befehl keine Datenübergabe erfordert, kann das Objekt auf festgelegt werden. - - , wenn der Befehl ausgeführt werden kann, andernfalls . - - - - Definiert die Methode, die aufgerufen wird, wenn der Befehl aufgerufen wird. - - Vom Befehl verwendete Daten. Wenn der Befehl keine Datenübergabe erfordert, kann das Objekt auf festgelegt werden. - - - - Notifies that the property has changed. - - - - - Initializes a new instance of the class. - - The execute. - The can execute. - - - - Initializes a new instance of the class. - - The execute. - - Initializes a new instance of the class. - - The execute. - - - - Tritt ein, wenn Änderungen auftreten, die sich auf die Ausführung des Befehls auswirken. - - - - - Definiert die Methode, die bestimmt, ob der Befehl im aktuellen Zustand ausgeführt werden kann. - - Vom Befehl verwendete Daten. Wenn der Befehl keine Datenübergabe erfordert, kann das Objekt auf festgelegt werden. - - , wenn der Befehl ausgeführt werden kann, andernfalls . - - - - Definiert die Methode, die aufgerufen wird, wenn der Befehl aufgerufen wird. - - Vom Befehl verwendete Daten. Wenn der Befehl keine Datenübergabe erfordert, kann das Objekt auf festgelegt werden. - - - - Notifies that the property has changed. - - - - - Represents a collection that is observable. - - The type of elements contained in the collection. - - - - Adds the range. - - The items. - - - - Removes the range. - - The items. - - - - Class NotificationObject. - Implements the - - - - - Tritt ein, wenn sich ein Eigenschaftswert ändert. - - - - - Raises the [property changed] event. - - Name of the property. - If this field is not set, the [CallerMemberName] will automatically provided - - - - Calls RaisePropertyChanged for each name in the array - - RaisePropertyChanged will be called for every element - - - - Helper for setting properties - - - - The data. - The value. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Helper for setting properties - - - - The data. - The value. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Helper for setting properties - - - - The data. - The value. - The property names. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - - Helper for setting properties - - - - The data. - The value. - The property names. - The action. - Name of the property. - - true if XXXX, false otherwise. - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_BaseLibTests.xml b/CSharpBible/Help/MVVM_BaseLibTests.xml deleted file mode 100644 index aa458758e..000000000 --- a/CSharpBible/Help/MVVM_BaseLibTests.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - MVVM_BaseLibTests - - - - - Struct TestStruct - - - - - Enum GameSound - - - - - Defines test class PropertyTests. - - - - - The test int - - - - - The test string - - - - - Parses the specified s. - - The s. - TestStruct. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Determines whether the specified is equal to this instance. - - Das Objekt, das mit der aktuellen Instanz verglichen werden soll. - - true if the specified is equal to this instance; otherwise, false. - - - - The te apple - - - - - The te pear - - - - - The te cherry - - - - - The te rasberry - - - - - Initializes this instance. - - - - - Sets the property test. - - The name. - The tt. - The value. - if set to true [b exp]. - The exp result. - - - - Defines test class PropertyTests. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_DrawGrid.xml b/CSharpBible/Help/MVVM_Converter_DrawGrid.xml deleted file mode 100644 index 617ff9252..000000000 --- a/CSharpBible/Help/MVVM_Converter_DrawGrid.xml +++ /dev/null @@ -1,226 +0,0 @@ - - - - MVVM_Converter_DrawGrid - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Class Model. - - - - - Gets or sets the level data. - - The level data. - - - - Gets or sets the act level. - - The act level. - - - - Gets or sets the property changed. - - The property changed. - - - - Loads the level. - - - - - Nexts the level. - - - - - Previouses the level. - - - - - Class WindowPortToTileDisplay. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - Gets or sets the brushes. - - The brushes. - - - - Gets or sets the background. - - The background. - - - - Gets or sets the size of the tile. - - The size of the tile. - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the show client. - - The show client. - - - - Gets or sets the load level command. - - The load level command. - - - - Gets or sets the next level command. - - The next level command. - - - - Gets or sets the previous level command. - - The previous level command. - - - - Initializes a new instance of the class. - - - - - Class PlotFrameViewModel. - Implements the - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the tiles. - - The tiles. - - - - Initializes a new instance of the class. - - - - - Struct SWindowPort - - - - - The tiles - - - - - Struct TileData - - - - - The index - - - - - The position - - - - - The destination - - - - - The tile type - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_DrawGrid2.xml b/CSharpBible/Help/MVVM_Converter_DrawGrid2.xml deleted file mode 100644 index 359289fcd..000000000 --- a/CSharpBible/Help/MVVM_Converter_DrawGrid2.xml +++ /dev/null @@ -1,263 +0,0 @@ - - - - MVVM_Converter_DrawGrid2 - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - - - - - Struct LabDefData - - - - - Class Model. - - - - - The fields - - - - - The l size - - - - - Initializes a new instance of the struct. - - The par. - - - - Gets or sets the level data. - - The level data. - - - - Gets or sets the act level. - - The act level. - - - - Gets or sets the property changed. - - The property changed. - - - - Loads the level. - - - - - Nexts the level. - - - - - Previouses the level. - - - - - Class WindowPortToTileDisplay. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - Gets or sets the brushes. - - The brushes. - - - - Gets or sets the background. - - The background. - - - - Gets or sets the size of the tile. - - The size of the tile. - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the show client. - - The show client. - - - - Gets or sets the load level command. - - The load level command. - - - - Gets or sets the next level command. - - The next level command. - - - - Gets or sets the previous level command. - - The previous level command. - - - - Initializes a new instance of the class. - - - - - Struct TileData - - - - - Struct SWindowPort - - - - - Class PlotFrameViewModel. - Implements the - - - - - The index - - - - - The position - - - - - The destination - - - - - The tile type - - - - - The tiles - - - - - The window size - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the tiles. - - The tiles. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_DrawGrid3_NonLin.xml b/CSharpBible/Help/MVVM_Converter_DrawGrid3_NonLin.xml deleted file mode 100644 index 5ba721f2a..000000000 --- a/CSharpBible/Help/MVVM_Converter_DrawGrid3_NonLin.xml +++ /dev/null @@ -1,263 +0,0 @@ - - - - MVVM_Converter_DrawGrid3_NonLin - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - - - - - Struct LabDefData - - - - - Class Model. - - - - - The fields - - - - - The l size - - - - - Initializes a new instance of the struct. - - The par. - - - - Gets or sets the level data. - - The level data. - - - - Gets or sets the act level. - - The act level. - - - - Gets or sets the property changed. - - The property changed. - - - - Loads the level. - - - - - Nexts the level. - - - - - Previouses the level. - - - - - Class WindowPortToTileDisplay. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - Gets or sets the brushes. - - The brushes. - - - - Gets or sets the background. - - The background. - - - - Gets or sets the size of the tile. - - The size of the tile. - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the show client. - - The show client. - - - - Gets or sets the load level command. - - The load level command. - - - - Gets or sets the next level command. - - The next level command. - - - - Gets or sets the previous level command. - - The previous level command. - - - - Initializes a new instance of the class. - - - - - Struct TileData - - - - - Struct SWindowPort - - - - - Class PlotFrameViewModel. - Implements the - - - - - The index - - - - - The position - - - - - The destination - - - - - The tile type - - - - - The tiles - - - - - The window size - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the tiles. - - The tiles. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_Grid.xml b/CSharpBible/Help/MVVM_Converter_Grid.xml deleted file mode 100644 index 9b4fa829b..000000000 --- a/CSharpBible/Help/MVVM_Converter_Grid.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - MVVM_Converter_Grid - - - - - Class WindowPortToGridLines. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - The real2 vis p - - - - - Initializes a new instance of the class. - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Struct SWindowPort - - - - - Struct DataSet - - - - - Class PlotFrameViewModel. - Implements the - - - - - The port - - - - - The window size - - - - - The datapoints - - - - - The name - - - - - The description - - - - - The pen - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the vp window. - - The vp window. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_Grid2.xml b/CSharpBible/Help/MVVM_Converter_Grid2.xml deleted file mode 100644 index 9487b6124..000000000 --- a/CSharpBible/Help/MVVM_Converter_Grid2.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - MVVM_Converter_Grid2 - - - - - Class WindowPortToGridLines. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - The real2 vis p - - - - - Initializes a new instance of the class. - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Struct SWindowPort - - - - - Struct DataSet - - - - - Class PlotFrameViewModel. - Implements the - - - - - The port - - - - - The window size - - - - - The datapoints - - - - - The name - - - - - The description - - - - - The pen - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the vp window. - - The vp window. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_Grid3_NonLin.xml b/CSharpBible/Help/MVVM_Converter_Grid3_NonLin.xml deleted file mode 100644 index abbb9c82d..000000000 --- a/CSharpBible/Help/MVVM_Converter_Grid3_NonLin.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - MVVM_Converter_Grid3_NonLin - - - - Interaktionslogik für PlotFrame.xaml - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_ImgGrid.xml b/CSharpBible/Help/MVVM_Converter_ImgGrid.xml deleted file mode 100644 index 11f16df00..000000000 --- a/CSharpBible/Help/MVVM_Converter_ImgGrid.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - MVVM_Converter_ImgGrid - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - - - - Interaktionslogik für PlotFrame.xaml - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Converter_ImgGrid2.xml b/CSharpBible/Help/MVVM_Converter_ImgGrid2.xml deleted file mode 100644 index 1061c37f2..000000000 --- a/CSharpBible/Help/MVVM_Converter_ImgGrid2.xml +++ /dev/null @@ -1,263 +0,0 @@ - - - - MVVM_Converter_ImgGrid2 - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - - - - - Struct LabDefData - - - - - Class Model. - - - - - The fields - - - - - The l size - - - - - Initializes a new instance of the struct. - - The par. - - - - Gets or sets the level data. - - The level data. - - - - Gets or sets the act level. - - The act level. - - - - Gets or sets the property changed. - - The property changed. - - - - Loads the level. - - - - - Nexts the level. - - - - - Previouses the level. - - - - - Class WindowPortToTileDisplay. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - Gets or sets the brushes. - - The brushes. - - - - Gets or sets the background. - - The background. - - - - Gets or sets the size of the tile. - - The size of the tile. - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the show client. - - The show client. - - - - Gets or sets the load level command. - - The load level command. - - - - Gets or sets the next level command. - - The next level command. - - - - Gets or sets the previous level command. - - The previous level command. - - - - Initializes a new instance of the class. - - - - - Struct TileData - - - - - Struct SWindowPort - - - - - Class PlotFrameViewModel. - Implements the - - - - - The index - - - - - The position - - - - - The destination - - - - - The tile type - - - - - The tiles - - - - - The window size - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the tiles. - - The tiles. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_Lines_on_Grid.xml b/CSharpBible/Help/MVVM_Lines_on_Grid.xml deleted file mode 100644 index 33bd5d1eb..000000000 --- a/CSharpBible/Help/MVVM_Lines_on_Grid.xml +++ /dev/null @@ -1,169 +0,0 @@ - - - - MVVM_Lines_on_Grid - - - - - Class WindowPortToGridLines. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - The real2 vis p - - - - - The vis2 real p - - - - - Initializes a new instance of the class. - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Gets the adjusted rect. - - The c. - RectangleF. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für PlotFrame.xaml - - - - Initializes a new instance of the class. - - - - - Class CanvasBehavior. - Implements the - - - - - Called after the behavior is attached to an AssociatedObject. - - Override this to hook up functionality to the AssociatedObject. - - - - Struct SWindowPort - - - - - Struct DataSet - - - - - Class PlotFrameViewModel. - Implements the - - - - - The port - - - - - The window size - - - - - The parent - - - - - The datapoints - - - - - The name - - - - - The description - - - - - The pen - - - - - Gets or sets the window port. - - The window port. - - - - Gets or sets the vp window. - - The vp window. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MVVM_TiledDisplay_net.xml b/CSharpBible/Help/MVVM_TiledDisplay_net.xml deleted file mode 100644 index 7560e79d3..000000000 --- a/CSharpBible/Help/MVVM_TiledDisplay_net.xml +++ /dev/null @@ -1,214 +0,0 @@ - - - - MVVM_TiledDisplay_net - - - - - Class PositionConverter. - Implements the - - - - - Gets or sets a value indicating whether this instance is row converter. - - - true if this instance is row converter; otherwise, false. - - - - Gets or sets the row. - - The row. - - - - Gets or sets the col. - - The col. - - - - Gets or sets the size of the window. - - The size of the window. - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - - Class TileDataArrToTileDisplay. - Implements the - - - - - Gets or sets the size of the window. - - The size of the window. - - - - Gets or sets the brushes. - - The brushes. - - - - Gets or sets the background. - - The background. - - - - Gets or sets the size of the tile. - - The size of the tile. - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - Interaktionslogik für MainView.xaml - - - - Initializes a new instance of the class. - - - - Interaktionslogik für TileView.xaml - - - - Initializes a new instance of the class. - - - - - Class MainViewViewModel. - Implements the - - - - - Badly formed XML comment. - - - - - Class TileBehavior. - Implements the - - - - - Called after the behavior is attached to an AssociatedObject. - - Override this to hook up functionality to the AssociatedObject. - - - - Struct TileData - - - - - The index - - - - - The position - - - - - The destination - - - - - The tile type - - - - - Class TileViewViewModel. - Implements the - - - - - Gets or sets the tiles. - - The tiles. - - - - Initializes a new instance of the class. - - - - - Handles the Completed event of the Storyboard control. - - The source of the event. - The instance containing the event data. - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/MathLibrary.xml b/CSharpBible/Help/MathLibrary.xml deleted file mode 100644 index ea7d7fa1f..000000000 --- a/CSharpBible/Help/MathLibrary.xml +++ /dev/null @@ -1,223 +0,0 @@ - - - - MathLibrary - - - - - Class AGVHandling. - - - - - Stetic function of Sine(x)/x. - - The x value. - Value of the stetic function - - - - Computes the (new) position and angle (in AGV-coordinates) in the given time. - - The velocity of the AGV (in AGV-coordinates). - The rotation of the AGV [rad/s]. - The time [s]. - The new position (in AGV-coordinates). - The new angle [rad] (in AGV-coordinates). - - - - Agvs the steering. - - The velocity. - The rotation. - The steerpos. - The strvelocity. - - - - Class Math2d. - - - - - Class Vector. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The x parameter. - The y parameter. - - - - Gets or sets the x. - - The x. - - - - Gets or sets the y. - - The y. - - - - Gets or sets the vector as a complex number. - - As complex. - - - - Calculates the (carthesian) length of the vector. - - The (carthesian) length of the vector - - - - Converts the vector to a string. - - Eine Zeichenfolge, die das aktuelle Objekt darstellt. - - - - Determines whether the specified is equal to this instance. - - The object to compare with the current object. - - true if the specified is equal to this instance; otherwise, false. - - - - Returns a hash code for this instance. - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - Gets the Vector with the length of 0. - - (0,0) - - - - Gets the Vector with the length of 1 in x-Direction. - - (1,0) - - - - Gets the Vector with the length of 1 in y-Direction. - - (0,1) - - - - Adds the specified v1 to v2. - - The v1. - The v2. - (v1 + v2) - - - - Subtracts the specified v2 from v1 . - - The v1. - The v2. - the value of v1 - v2 - - - - The constant value pi (3.1415...) - - - - - Tries to compute the length and angle of the vector. - - The vector. - The length of the vector. - The angle of the vector [rad]. - [True]: if the length and angle can be computed
[False]: otherwise
-
- - - Rotates the specified vector v1 90° counter-clock-wise. - - The vector. - (-v1.y,v1.x) the vector rotated 90° ccw. - - - - Negates the v. Or rotates the specified vector v1 by 180°. - - The vector. - (-v1.x,-v1.y) the negative vector or rotated by 180°. - - - - Gives the specified vector by length and angle - - The length of the vector. - The angle of the vector[rad]. - The specified vector. - - - - "Normalizes" the <angle> around <middle> - - The angle [rad]. - The middle value. - if no middle is given the result will be 0 <= <result> < 2 * pi
otherwise the result will be <middle> - pi <= <result> < <middle> + pi
-
- - - Multiplies the specified vector by the specified scalar. - - The vector. - The scalar. - The result vector - - - - Multiplies the specified vectors fak1 and fak2. - - The vector fak1. - The vector fak2. - The vector-product - - - - Multiplies the specified vectors, if they were complex numbers. - - The vector fak1. - The vector fak2. - The complex product as vector - - - - Divides the specified vector by the scalar (divisor) - - The vector. - The scalar. - The quotient as a vector - - - - Rotates the specified vector. - - The vector. - The angle [rad]. - The rotated vector - -
-
\ No newline at end of file diff --git a/CSharpBible/Help/MathLibraryTests.xml b/CSharpBible/Help/MathLibraryTests.xml deleted file mode 100644 index a2143debe..000000000 --- a/CSharpBible/Help/MathLibraryTests.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - - MathLibraryTests - - - - - Defines test class Math2dTests. - - - - - Defines the test method ToStringTest1. - - - - - Converts to stringtest2. - - The x. - The y. - The exp. - - - - Defines the test method NullTest. - - - - - Defines the test method eXTest. - - - - - Defines the test method eYTest. - - - - - Adds the test. - - The V1X. - The v1y. - The V2X. - The v2y. - The expx. - The expy. - - - - Subtracts the test. - - The V1X. - The v1y. - The V2X. - The v2y. - The expx. - The expy. - - - - Winkels the norm test. - - The angle. - The middle. - The exp. - - - - Rot90s the test. - - The v x. - The v y. - The exp x. - The exp y. - - - - Negates the test. - - The v x. - The v y. - The exp x. - The exp y. - - - - Tries the length angle test. - - The v x. - The v y. - if set to true [exp]. - The exlength. - The exangle. - - - - Bies the length angle test. - - The exp x. - The exv y. - The length. - The angle. - - - - Defines the test method MultTest. - - The v x. - The v y. - The s. - The exp x. - The exp y. - - - - Mults the test1. - - The v1 x. - The v1 y. - The v2 x. - The v2 y. - The exp. - - - - cs the mult test. - - The v1 x. - The v1 y. - The v2 x. - The v2 y. - The exp x. - The exp y. - - - - Divs the test. - - The exp x. - The exp y. - The s. - The v x. - The v y. - - - - Rotates the test. - - The v x. - The v y. - The w. - The exp x. - The exp y. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Permutation.xml b/CSharpBible/Help/Permutation.xml deleted file mode 100644 index 36f86d355..000000000 --- a/CSharpBible/Help/Permutation.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - Permutation - - - - - Class PermutatedRange. - - - - - Initializes a new instance of the class. - - The size. - The pp. - - - - Initializes a new instance of the class. - - The size. - - - - Gets the with the specified ix. - - The ix. - System.Int32. - - - - Class Program. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/PermutationTests.xml b/CSharpBible/Help/PermutationTests.xml deleted file mode 100644 index f37102bc1..000000000 --- a/CSharpBible/Help/PermutationTests.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - PermutationTests - - - - \ No newline at end of file diff --git a/CSharpBible/Help/PlotgraphWPF.xml b/CSharpBible/Help/PlotgraphWPF.xml deleted file mode 100644 index 0044e4e0a..000000000 --- a/CSharpBible/Help/PlotgraphWPF.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - PlotgraphWPF - - - - - Class MyModel. - - - - - Gets or sets the points. - - The points. - - - - Gets or sets the color of the plot. - - The color of the plot. - - - - Class ColorValueConverter. - Implements the - - - - - Converts a value. - - The value produced by the binding source. - The type of the binding target property. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - Converts a value. - - The value that is produced by the binding target. - The type to convert to. - The converter parameter to use. - The culture to use in the converter. - A converted value. If the method returns , the valid null value is used. - - - - - - Class Page1ViewModel. - - - - - The current second - - - - - The lt point - - - - - Gets or sets my model. - - My model. - - - Interaktionslogik für Page1.xaml - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Polyline.xml b/CSharpBible/Help/Polyline.xml deleted file mode 100644 index 342e40599..000000000 --- a/CSharpBible/Help/Polyline.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - Polyline - - - - Interaction logic for App.xaml - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Class ControlPointBehavior. - Implements the - - - - - Called after the behavior is attached to an AssociatedObject. - - Override this to hook up functionality to the AssociatedObject. - - - - Class Coordinate. - Implements the - - - - - Gets or sets the x. - - The x. - - - - Gets or sets the y. - - The y. - - - - Gets or sets the point. - - The point. - - - - Class MainWindowViewModel. - - - - - Gets or sets the pl collection. - - The pl collection. - - - - Initializes a new instance of the class. - - - - - Class Polyline. - Implements the - - - - - Class PolylineCollection. - Implements the - - - - - Gets the segments. - - The segments. - - - - Gets the control points. - - The control points. - - - - Class Segment. - - - - - Gets or sets the start. - - The start. - - - - Gets or sets the end. - - The end. - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Snake_Base.xml b/CSharpBible/Help/Snake_Base.xml deleted file mode 100644 index 398c10d74..000000000 --- a/CSharpBible/Help/Snake_Base.xml +++ /dev/null @@ -1,772 +0,0 @@ - - - - Snake_Base - - - - - The Model namespace. - - - - - - Class Apple. - Implements the - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The point. - The PLF. - - - - Enum Direction - - - - - Class Offsets. - - - - - The north - - - - - The west - - - - - The south - - - - - The east - - - - - Dirs the offset. - - The d. - Point. - - - - Dirs the offset. - - The dir. - The position. - Point. - - - - Class Field. - Implements the - Implements the - Implements the - - - - - - - - - Gets or sets the place. - - The place. - - - - Gets or sets the parent. - - The parent. - - - - Gets or sets the items. - - The items. - - - - Occurs when [data change event]. - - - - - Occurs when [on place change]. - - - - - Gets the place. - - Point. - - - - Sets the place. - - The value. - The name. - - - - Gets the old place. - - Point. - - - - Adds the item. - - The value. - - true if XXXX, false otherwise. - - - - Removes the item. - - The value. - - true if XXXX, false otherwise. - - - - Gets the items. - - IEnumerable<T>. - - - - Sets the parent. - - The value. - The caller member. - - - - Gets the parent. - - System.Nullable<System.Object>. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The place. - The parent. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Notifies the child change. - - The child object. - The old value. - The new value. - The property. - - - - Interface IPlacedObject - - - - - Occurs when [on place change]. - - - - - Sets the place. - - The value. - The name. - - - - Gets the place. - - Point. - - - - Gets the old place. - - Point. - - - - Class Playfield2D. - Implements the - - - - - - - Class Playfield2D. - Implements the - - - - - Gets or sets the size of the pf. - - The size of the pf. - - - - Gets the rect. - - The rect. - - - - Gets the items. - - The items. - - - - Occurs when [on data changed]. - - - - - Gets or sets the default size. - - The default size. - - - - Gets or sets the with the specified p. - - The p. - System.Nullable<T>. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The size. - - - Determines whether the specified point p is inside the Playfield. - The point. - - true if the specified point p is inside; otherwise, false. - - - - - Adds the item. - - The value. - - true if XXXX, false otherwise. - - - - Removes the item. - - The value. - - true if XXXX, false otherwise. - - - - Gets the items. - - IEnumerable<T>. - - - - Notifies the child change. - - The child object. - The old value. - The new value. - The property. - - - - Class SnakeBodyPart. - Implements the - Implements the - - - - - - Class SnakeHead. - Implements the - - - - - Class SnakeTail. - Implements the - - - - - Class Snake. - - - - - Gets or sets the snake. - - The snake. - - - - Sets the parent. - - The value. - The caller member. - - - - Gets or sets the next part. - - The next part. - - - - Gets or sets the previous part. - - The next part. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The snake. - - - - Initializes a new instance of the class. - - The place. - The snake. - The playfield. - - - - Initializes a new instance of the class. - - The snake. - - - - Initializes a new instance of the class. - - The place. - The snake. - The playfield. - - - - Initializes a new instance of the class. - - The snake. - - - - Initializes a new instance of the class. - - The place. - The snake. - The playfield. - - - - The alive - - - - - Gets the length. - - The length. - - - - Gets the head position. - - The head position. - - - - Initializes a new instance of the class. - - The start. - The playfield. - - - - Snakes the move. - - The dir. - - - - Class SnakeGameObject. - Implements the - Implements the - - - - - - Gets or sets the default parent. - - The default parent. - - - - Occurs when [data change event]. - - - - - Occurs when [on place change]. - - - - - Gets the old place. - - The old place. - - - - Gets or sets the place. - - The place. - - - - Gets or sets the parent. - - The parent. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The place. - The parent. - - - - Gets the old place. - - Point. - - - - Gets the place. - - Point. - - - - Sets the place. - - The value. - The name. - - - - Gets the parent. - - System.Nullable<Playfield2D<SnakeGameObject>>. - - - - Sets the parent. - - The value. - The caller member. - - - - Ntfies the parent change. - - The arg1. - The arg2. - The arg3. - - - - - Ntfies the place change. - - The arg1. - The arg2. - The arg3. - - - - - The ViewModel namespace. - - - - - - Class Game. - - - - - Gets or sets the playfield. - - The playfield. - - - - Gets or sets the snake. - - The snake. - - - - The get next random - - - - - Gets the with the specified p. - - The p. - Tiles. - - - - Gets a value indicating whether this instance is running. - - - true if this instance is running; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Games the step. - - System.Int32. - - - - Gets the tile. - - The p. - Tiles. - - - - Enum Tiles - - - - - The empty field - - - - - The wall - - - - - The apple - - - - - The snake head north - - - - - The snake tail north - - - - - The snake body north-south - - - - - The snake head west - - - - - The snake head south - - - - - The snake head east - - - - - The snake tail west - - - - - The snake tail south - - - - - The snake tail east - - - - - The snake body north-west - - - - - The snake body south-west - - - - - The snake body south-east - - - - - The snake body north-east - - - - - The snake body west-east - - - - - Enum UserAction - - - - - Enum GameSound - - - - - The go up - - - - - The go west - - - - - The go down - - - - - The go east - - - - - The quit - - - - - The help - - - - - The restart - - - - - The nop - - - - - The no sound - - - - - The deep boom - - - - - The tick - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Snake_BaseTests.xml b/CSharpBible/Help/Snake_BaseTests.xml deleted file mode 100644 index a026a4fb8..000000000 --- a/CSharpBible/Help/Snake_BaseTests.xml +++ /dev/null @@ -1,414 +0,0 @@ - - - - Snake_BaseTests - - - - - The Tests namespace. - - - - - - Defines test class AppleTests. - - - - - The PLF - - - - - Initializes this instance. - - - - - Defines the test method AppleTest2. - - - - - Defines the test method AppleTest1. - - - - - Defines the test method AppleTest0. - - - - - Defines the test method AppleTest4. - - - - - Defines the test method AppleMoveTest. - - - - - Class TestItem. - Implements the - Implements the - Implements the - - - - - - - Class TestParent. - Implements the - Implements the - - - - - - Defines test class FieldTests. - - - - - The parent - - - - - The place - - - - - The name - - - - - Occurs when [log operation]. - - - - - Occurs when [on place change]. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - if the current object is equal to the parameter; otherwise, . - - - - Gets the parent. - - System.Nullable<System.Object>. - - - - Sets the parent. - - The value. - The caller member. - - - - Gets the place. - - Point. - - - - Sets the place. - - The value. - The name. - - - - Gets the old place. - - Point. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - The place - - - - - The items - - - - - The log operation - - - - - The name - - - - - Occurs when [on place change]. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The name. - The place. - - - - Adds the item. - - The value. - - true if XXXX, false otherwise. - - - - Gets the items. - - IEnumerable<Field<TestItem>>. - - - - Removes the item. - - The value. - - true if XXXX, false otherwise. - - - - Gets the old place. - - Point. - - - - Gets the place. - - Point. - - - - Sets the place. - - The value. - The name. - - - - Returns a that represents this instance. - - A that represents this instance. - - - - Notifies the child change. - - The child object. - The old value. - The new value. - The property. - - - - Tests the initialize. - - - - - Defines the test method AddItemTest. - - - - - Adds the item test2. - - The s items. - The c expr. - The s exp result. - - - - Dummies the data test. - - The s data. - The i exp count. - The s exp result. - - - - Removes the item test. - - The s data. - The s remove. - The ax exp suc. - The i exp count. - The s exp result. - - - - Gets the place test. - - The name. - The p. - - - - Sets the place test1. - - The s data. - The p. - The s exp result. - - - - Gets the items test. - - The s data. - The i exp count. - The o. - - - - Sets the parent test. - - The name. - The s data. - The p. - The s exp result. - - - - Gets the parent test. - - The name. - The s data. - The p. - - - - Defines test class Playfield2DTests. - - - - - Gets the test playfield. - - The test playfield. - - - - Initializes this instance. - - - - - Defines the test method Playfield2DTest. - - - - - Defines the test method AddItemTest. - - - - - Defines the test method AddItemTest. - - - - - Defines the test method RemoveItemTest. - - - - - Defines the test method GetItemsTest. - - - - - Defines test class SnakeTests. - - - - - Initializes this instance. - - - - - Defines the test method TestSetup. - - - - - Defines the test method SnakeTest. - - - - - Snakes the move test. - - Name of the test. - The start. - The dir. - The i exp count. - if set to true [x exp alive]. - The exp position. - The s exp snake test. - - - - The Tests namespace. - - - - - - Defines test class GameTests. - - - - - - Defines the test method GameTest. - - - - - - Defines the test method GameStepTest. - - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Snake_Console_net.xml b/CSharpBible/Help/Snake_Console_net.xml deleted file mode 100644 index 0d0143eee..000000000 --- a/CSharpBible/Help/Snake_Console_net.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - Snake_Console_net - - - - -The View namespace. - - - - - -Class TileDef. -Implements the - - - - -Gets the tile definition. - - The tile. - (string[] lines, (System.ConsoleColor fgr, System.ConsoleColor bgr)[] colors). - - - - - Class Visual. - - - - - My console - - - - - The key action - - - - - Sets the game. - - The g. - - - - Fulls the redraw. - - The sender. - The instance containing the event data. - - - - Sounds the specified gs. - - The gs. - - - - Checks the user action. - - The action. - - true if XXXX, false otherwise. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Sokoban_Base.xml b/CSharpBible/Help/Sokoban_Base.xml deleted file mode 100644 index f63276c5e..000000000 --- a/CSharpBible/Help/Sokoban_Base.xml +++ /dev/null @@ -1,951 +0,0 @@ - - - - Sokoban_Base - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Zeichenfolge, die Cannot move to direction {0} ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die , (<Enter>) to continue ... ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die You left the game ! ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die You solved the puzzle ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die ##### ### ### - ### ### ### ## ### ##### ##### ##### - ### ### ## ### ## ### ## ### ## ### ## ### ## - ### ### ## ##### ### ## ### ## ### ## ### ## - ##### ### ### ## ### ##### ##### ### ## - - In this game, you have to put all {0}s into the target-places. - Your can move the player in 4 directions: {1}, but only if you are not hitting a wall. - The {0}s can be moved, by pushing them into the de [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die OK ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die Possible moves: ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die Level will be restarted ... ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die Please select an action : (Q)uit ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die stone ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die {0} stones are in target-area ähnelt. - - - - - Sucht eine lokalisierte Zeichenfolge, die [6]Repository UUID: 885f4a47-7d4f-460f-85f6-059ca52e3f0c - [7]Revision: 395 - [8]Node Kind: directory - [9]Schedule: normal - [10]Last Changed Author: jc99 - [11]Last Changed Rev: 240 - [12]Last Changed Date: 2022-09-17 12:15:49 +0200 (Sa, 17 Sep 2022) - [13] - ähnelt. - - - - - Enum Direction - - - - - Class Offsets. - - - - - The north - - - - - The west - - - - - The south - - - - - The east - - - - - Dirs the offset. - - The d. - Point. - - - - Dirs the offset. - - The dir. - The position. - Point. - - - - Class Field. - - - - - Class Wall. - Implements the - - - - - Class Floor. - Implements the - - - - - Class Destination. - Implements the - - - - - The item - - - - - Gets the position. - - The position. - - - - Gets or sets the item. - - The item. - - - - Gets the parent. - - The parent. - - - - Gets the field definition. - - The field definition. - - - - Gets the field definition. - - FieldDef. - - - - Sets the item. - - The value. - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Gets the field definition. - - FieldDef. - - - - Sets the item. - - The value. - - - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Gets the field definition. - - FieldDef. - Illegal Item - - - - Sets the item. - - The value. - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Gets the field definition. - - FieldDef. - Illegal Item - - - - Enum FieldDef - - - - - Class FieldDefs. - - - - - The empty - - - - - The wall - - - - - The floor - - - - - The destination - - - - - The player - - - - - The player over dest - - - - - The stone - - - - - The stone in dest - - - - - The s definition - - - - - Class LabDefs. - - - - - The s levels - - - - - Gets the count. - - The count. - - - - Gets the level. - - The level. - System.ValueTuple<FieldDef[], Size>. - - - - Class Player. - Implements the - - - - - Gets or sets the last dir. - - The last dir. - - - - Initializes a new instance of the class. - - a field. - - - - Goes the specified a dir. - - a dir. - - true if XXXX, false otherwise. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - Moveables the dirs. - - IEnumerable<Direction>. - - - - Struct MoveField - - - - - Struct Move - - - - - Class Playfield. - - - - - The p - - - - - The n definition - - - - - The d - - - - - The mf - - - - - Gets or sets the with the specified p. - - The p. - System.Nullable<Field>. - - - - vs the field. - - The p. - The moves. - FieldDef. - - - - The field size - - - - - The stones - - - - - The player - - - - - Gets the stones in dest. - - The stones in dest. - - - - Gets a value indicating whether [game solved]. - - - true if [game solved]; otherwise, false. - - - - Setups the specified sf definition. - - The sf definition. - - - - Setups the specified sf definition. - - The sf definition. - - - - Clears this instance. - - - - - Class PlayObject. - - - - - Gets or sets the position. - - The position of the player on the playfield - - - - Gets or sets the old position. - - The old position. - - - - Gets or sets the field. - - The field as reference. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - Initializes a new instance of the class. - - a field. - - - - Class Stone. - Implements the - - - - - Initializes a new instance of the class. - - a field. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - The class that handles the UI - - - - - My console - is a Console-Proxy for debugging & Testing - - - - - The key action - - - - - Gets or sets the message. - - The message. - - - - Shows the specified u action. - - The u action. - - - - Updates this instance. - - - - - Waitfors the user. - - The u action. - System.Nullable<UserAction>. - - - - Writes the tile. - - The p. - The td. - - - - Marks the first. - - The v. - System.String. - - - - Class VisualsDef. - - - - - Gets the tile string. - - The tile definition. - System.String[]. - - - - Gets the tile colors. - - The tile definition. - ConsoleColor[]. - - - - Class Game. - - - - - The vis update - - - - - The vis get user action - - - - - The vis set message - - - - - Gets or sets the vis show. - - The vis show. - - - - The playfield - - - - - Gets the player. - - The player. - - - - Gets the size of the pf. - - The size of the pf. - - - - Gets the stones in dest. - - The stones in dest. - - - - Gets the stones. - - The stones. - - - - Gets a value indicating whether [game solved]. - - - true if [game solved]; otherwise, false. - - - - Gets the level. - - The level. - - - - Initializes this instance. - - - - - Runs this instance. - - System.Nullable<UserAction>. - - - - Cleanups this instance. - - - - - Gets the tile. - - The p. - TileDef. - - - - Gets the old position. - - The p. - Point. - - - - Enum TileDef - - - - - The empty - - - - - The wall - - - - - The floor - - - - - The destination - - - - - The player - - - - - The player over dest - - - - - The stone - - - - - The stone in dest - - - - - The floor marked - - - - - The wall n - - - - - The wall w - - - - - The wall nw - - - - - The wall s - - - - - The wall ns - - - - - The wall ws - - - - - The wall NWS - - - - - The wall e - - - - - The wall ne - - - - - The wall we - - - - - The wall nwe - - - - - The wall se - - - - - The wall nse - - - - - The wall wse - - - - - The wall nwse - - - - - The player w - - - - - The player over dest w - - - - - The player s - - - - - The player over dest s - - - - - The player e - - - - - The player over dest e - - - - - Enum UserAction - - - - - The go north - - - - - The none - - - - - The move left - - - - - The move right - - - - - The move down - - - - - The rotate left - - - - - The rotate right - - - - - Class Program. - - - - - Defines the entry point of the application. - - The arguments. - - - - Cleanups this instance. - - - - - Runs this instance. - - - - - Initializes this instance. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Sokoban_BaseTests.xml b/CSharpBible/Help/Sokoban_BaseTests.xml deleted file mode 100644 index cef41637a..000000000 --- a/CSharpBible/Help/Sokoban_BaseTests.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - Sokoban_BaseTests - - - - - Defines test class OffsetsTests. - - - - - Dirs the offset test. - - The dir. - The koor. - - - - Dirs the offset test1. - - The dir. - The koor. - The PNKT. - - - - Defines test class WallTests. - - - - - Defines the test method WallTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/SomeThing2.xml b/CSharpBible/Help/SomeThing2.xml deleted file mode 100644 index aac466010..000000000 --- a/CSharpBible/Help/SomeThing2.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - SomeThing2 - - - - \ No newline at end of file diff --git a/CSharpBible/Help/SyncAsyncParallel.xml b/CSharpBible/Help/SyncAsyncParallel.xml deleted file mode 100644 index 47f4a3418..000000000 --- a/CSharpBible/Help/SyncAsyncParallel.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - SyncAsyncParallel - - - - Interaktionslogik für "App.xaml" - - - - Class DownloadResult. - - - - - Gets or sets the URL. - - The URL. - - - - Gets or sets the HTML. - - The HTML. - - - - Gets the contentlength. - - The contentlength. - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Initializes a new instance of the class. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - The resource manager. - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - The culture. - - - Class Settings. This class cannot be inherited. Implements the - - - - - Gets the default. - - The default. - - - Interaktionslogik für MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Class MainWindowViewModel. - Implements the - - - - - Gets or sets the information text. - - The information text. - - - - Gets the download synchronize command. - - The download synchronize command. - - - - Gets the download asynchronous command. - - The download asynchronous command. - - - - Gets the download asynchronous para command. - - The download asynchronous para command. - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/TestConsole.xml b/CSharpBible/Help/TestConsole.xml deleted file mode 100644 index cca2798eb..000000000 --- a/CSharpBible/Help/TestConsole.xml +++ /dev/null @@ -1,228 +0,0 @@ - - - - TestConsole - - - - - Struct ConsoleCharInfo - - - - Class TestConsoleForm. Implements the - - Class TestConsoleForm. Implements the - - - - - The ch - - - - - The FGR - - - - - The BGR - - - - - Initializes a new instance of the struct. - - - - - Initializes a new instance of the class. - - - - - Reads the key. - - ConsoleKeyInfo. - - - - Gets the cursor position. - - System.ValueTuple<System.Int32, System.Int32>. - - - - Clears this instance. - - - - - Writes the specified ch. - - The ch. - - - - Writes the specified st. - - The st. - - - - The foreground color - - - - - The background color - - - - - Gets or sets the width of the window. - - The width of the window. - - - - Gets or sets the height of the window. - - The height of the window. - - - - Gets a value indicating whether [key available]. - - - true if [key available]; otherwise, false. - - - - Gets the content. - - The content. - - - - Sets the cursor position. - - The left. - The top. - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Class TstConsole. - Implements the - - - - - Gets or sets the color of the foreground. - - The color of the foreground. - - - - Gets or sets the color of the background. - - The color of the background. - - - - Gets or sets the height of the window. - - The height of the window. - - - - Gets or sets the width of the window. - - The width of the window. - - - - Gets a value indicating whether [key available]. - - - true if [key available]; otherwise, false. - - - - Gets the height of the largest window. - - The height of the largest window. - - - - - - Clears this instance. - - - - - Reads the key. - - System.Nullable<ConsoleKeyInfo>. - - - - Sets the cursor position. - - The left. - The top. - - - - Writes the specified ch. - - The ch. - - - - Writes the specified st. - - The st. - - - - Writes the line. - - The st. - - - - Initializes a new instance of the class. - - - - - Gets the cursor position. - - System.ValueTuple<System.Int32, System.Int32>. - - - - Beeps the specified freq. - - The freq. - The length. - - - - - - Gets the content. - - The content. - - - \ No newline at end of file diff --git a/CSharpBible/Help/TestConsoleDemo.xml b/CSharpBible/Help/TestConsoleDemo.xml deleted file mode 100644 index 2fc359000..000000000 --- a/CSharpBible/Help/TestConsoleDemo.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - TestConsoleDemo - - - - Class TextConsoleDemoForm. Implements the - - - - - Initializes a new instance of the class. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Class Program. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/TestConsoleTests.xml b/CSharpBible/Help/TestConsoleTests.xml deleted file mode 100644 index 70c622dfc..000000000 --- a/CSharpBible/Help/TestConsoleTests.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - TestConsoleTests - - - - - Defines test class TestConsoleTests. - - - - - Initializes this instance. - - - - - Defines the test method ClearTest. - - - - - Defines the test method ReadKeyTest. - - - - - Defines the test method SetCursorPositionTest. - - - - - Defines the test method WriteTest. - - - - - Defines the test method WriteTest1. - - - - - Defines the test method WriteLineTest. - - - - - Defines the test method TestConsoleTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/TestDirectives.xml b/CSharpBible/Help/TestDirectives.xml deleted file mode 100644 index 5a7b96df3..000000000 --- a/CSharpBible/Help/TestDirectives.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - TestDirectives - - - - - Class Program. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/Tetris_Base.xml b/CSharpBible/Help/Tetris_Base.xml deleted file mode 100644 index 19087fcd5..000000000 --- a/CSharpBible/Help/Tetris_Base.xml +++ /dev/null @@ -1,551 +0,0 @@ - - - - Tetris_Base - - - - - Class PropertyClass. - - - - - Helper for setting properties - - Generic type of the method - the data-field that is about to be changed - the new data-value - the action is executed right after data is changed - the action is executed right before data is changed - - - - - - Helper for setting properties - - Generic type of the method - the data-field that is about to be changed - the new data-value - the action is executed right before data is changed - - - - - - Class Block. - - - - Initializes a new instance of the class. - The type of the block. - The angle of the block. - - - - - Initializes a new instance of the class. - The starting position of the block. - The type of the block. - The angle of the block. - - - - - - The predicate to test pixels - - - - - The action to paint a pixel - - - - - - - - Gets or sets the position of the block. - The (center-) position. - - - - Gets or sets the actual type of the block. - The actual type of the block. - - - - Gets or sets the actual block angle. - The actual block angle. - - - - Gets a value indicating whether this is visible. - - true if visible; otherwise, false. - - - - - Shows this instance. - - - - Hides this instance. - - - - Moves the block by specified offset, and to specified angle. - The offset. - The new angle. - - - - - Tests the block for collision with specified offset and angle. - The offset. - The new angle. - - true if collision was detected; otherwise false - - - - - - - Enum BlockAngle - - - - - The degr0 - - - - - The degr90 - - - - - The degr180 - - - - - The degr270 - - - - - Enum BlockType - - - - - The i - - - - - The j - - - - - The l - - - - - The x - - - - - The z - - - - - The s - - - - - The t - - - - - Struct BlockDef - - - - - Class Defines. - - - - - The b type - - - - - The angle - - - - - The b color - - - - - The b koor - - - - - The block defines - - - - - Enum UserAction - - - - - Enum GameSound - - - - - Class Game. - - - - - The none - - - - - The move left - - - - - The move right - - - - - The move down - - - - - The rotate left - - - - - The rotate right - - - - - The drop - - - - - The quit - - - - - The help - - - - - The restart - - - - - The no sound - - - - - The deep boom - - - - - The tick - - - - - Gets or sets the random int. - - The random int. - - - - The play field - - - - - Gets the score. - - The score. - - - - Gets a value indicating whether [not ended]. - - - true if [not ended]; otherwise, false. - - - - Gets the level. - - The level. - - - - Gets or sets the sound. - - The sound. - - - - Occurs when [v update]. - - - - - Occurs when [update score]. - - - - - Initializes a new instance of the class. - - - - - Games the step. - - The wait. - - - - Does the user action. - - The u action. - - true if XXXX, false otherwise. - - - - Class PlayField. - - - - - Gets or sets the next block. - - The next block. - - - - Gets or sets the actual block. - - The actual block. - - - - Gets or sets the play ground. - - The play ground. - - - - Gets or sets the previous paint. - - The previous paint. - - - - Tests the remove line. - - System.Int32. - - - - Clears this instance. - - - - - Class PlayGround. - - - - - Gets the size of the field. - - The size of the field. - - - - Gets or sets a value indicating whether this is dirty. - - - true if dirty; otherwise, false. - - - - Initializes a new instance of the class. - - - - - Removes the line. - - The y. - - - - Clears this instance. - - - - - Gets or sets the with the specified PNT. - - The PNT. - ConsoleColor. - - - - Class Visual. - - - - - The ZFFRN - - - - - The display1 - - - - - The display2 - - - - - Gets or sets the console. - - The console. - - - - Gets or sets the play ground. - - The play ground. - - - - Gets or sets the user action. - - The user action. - - - - The key action - - - - - Initializes this instance. - - - - - Previouses the paint. - - The p. - The c. - - - - Updates this instance. - - - - - Updates the score. - - The e. - - - - Sounds the specified gs. - - The gs. - - - - Checks the user action. - - - true if XXXX, false otherwise. - - - - Class Program. - - - - - The tetris - - - - - Gets a value indicating whether [game not ended]. - - - true if [game not ended]; otherwise, false. - - - - Gets the play field. - - The play field. - - - - Defines the entry point of the application. - - The arguments. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Tetris_BaseTests.xml b/CSharpBible/Help/Tetris_BaseTests.xml deleted file mode 100644 index 2fc3f33fb..000000000 --- a/CSharpBible/Help/Tetris_BaseTests.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - Tetris_BaseTests - - - - - Defines test class PropertyClassTests. - - - - - Sets the property test. - - The name. - The o exp. - if set to true [x exp]. - The value. - The data. - - - - Sets the property p test. - - The name. - The o exp. - if set to true [x exp]. - The value. - The data. - - - - Defines test class BlockTests. - - - - - Initializes this instance. - - - - - Defines the test method ShowTest. - - - - - Defines the test method HideTest. - - - - - Defines the test method RotateTest. - - - - - Defines the test method MoveTest. - - - - - Defines the test method CollisionTestTest. - - - - - Defines the test method CollisionTestTest2. - - - - - Defines test class DisplayTests. - - - - - Initializes this instance. - - - - - Defines the test method DisplayTest. - - - - - Defines the test method DisplayPixelTest2. - - - - - Defines the test method DisplayLineTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/TitleGen.xml b/CSharpBible/Help/TitleGen.xml deleted file mode 100644 index fb3ab66ac..000000000 --- a/CSharpBible/Help/TitleGen.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - TitleGen - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/VTileEdit.xml b/CSharpBible/Help/VTileEdit.xml deleted file mode 100644 index 4de963605..000000000 --- a/CSharpBible/Help/VTileEdit.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - VTileEdit - - - - - Class Program. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/WFSystem.Windows.Data.xml b/CSharpBible/Help/WFSystem.Windows.Data.xml deleted file mode 100644 index 787e764c3..000000000 --- a/CSharpBible/Help/WFSystem.Windows.Data.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - WFSystem.Windows.Data - - - - - Interface IValueConverter - - - - - Converts the specified value. - - The value. - Type of the target. - The parameter. - The culture. - System.Object. - - - - Converts the back. - - The value. - Type of the target. - The parameter. - The culture. - System.Object. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Werner_Flaschbier_Base.xml b/CSharpBible/Help/Werner_Flaschbier_Base.xml deleted file mode 100644 index 80a0ff3d5..000000000 --- a/CSharpBible/Help/Werner_Flaschbier_Base.xml +++ /dev/null @@ -1,942 +0,0 @@ - - - - Werner_Flaschbier_Base - - - - - Enum Direction - - - - - Class Offsets. - - - - - Up - - - - - The west - - - - - Down - - - - - The east - - - - - The west down - - - - - The east down - - - - - Dirs the offset. - - The d. - Point. - - - - Dirs the offset. - - The dir. - The position. - Point. - - - - Class Dirt. - Implements the - - - - - Initializes a new instance of the class. - - a field. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - Class Enemy. - Implements the - - - - - Gets the direction. - - The direction. - - - - Initializes a new instance of the class. - - a field. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - Class Field. - - - - - Class Destination. - Implements the - - - - - The item - - - - - Gets the position. - - The position. - - - - Gets or sets the item. - - The item. - - - - Gets the parent. - - The parent. - - - - Gets the field definition. - - The field definition. - - - - Gets the field definition. - - FieldDef. - - - - Sets the item. - - The value. - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Gets the field definition. - - FieldDef. - Illegal Item - - - - Enum FieldDef - - - - - Class FieldDefs. - - - - - The empty - - - - - The dirt - - - - - The wall - - - - - The destination - - - - - The player - - - - - The stone - - - - - The enemy - - - - - The s definition - - - - - Class LevelDefs. - - - - - Gets the count. - - The count. - - - - Gets the level. - - The level. - System.Nullable<FieldDef>[]. - - - - Class Player. - Implements the - - - - - Gets or sets a value indicating whether this instance is alive. - - - true if this instance is alive; otherwise, false. - - - - Initializes a new instance of the class. - - a field. - - - - Goes the specified a dir. - - a dir. - - true if XXXX, false otherwise. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - Moveables the dirs. - - IEnumerable<Direction>. - - - - Class Playfield. - - - - - Gets or sets the with the specified p. - - The p. - System.Nullable<Field>. - - - - The size - - - - - The stones - - - - - The enemies - - - - - The player - - - - - Gets a value indicating whether [game solved]. - - - true if [game solved]; otherwise, false. - - - - Setups the specified sf definition. - - The sf definition. - - - - Setups the specified sf definition. - - The sf definition. - - - - Gets the active objects. - - The active objects. - - - - Gets the spaces. - - The spaces. - - - - Clears this instance. - - - - - Class PlayObject. - - - - - Gets or sets the position. - - The position of the player on the playfield - - - - Gets or sets the old position. - - The old position. - - - - Gets or sets a value indicating whether this is handled. - - - true if handled; otherwise, false. - - - - Gets or sets the field. - - The field as reference. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The directon to move - true: if the object has moveed in the direction - - - - Initializes a new instance of the class. - - a field. - - - -Class Space. -Implements the - - - - -Initializes a new instance of the class. - - The position. - The parent play object. - - - -Gets or sets the old item. - - The old item. - - - -Gets the field definition. - - FieldDef. - - - -Sets the item. - - The value. - - - - Stones (Boulders) are Objects that fall if an space - is below them, or slip to the left or right if sitting on a - or another if the places next - to them and the place below that are - - - - Initializes a new instance of the class. - - a field. - - - - Tests if the object can move in the given direction. - - The directon to test - true: if the object can move in the direction - - - - Tries to move the object in the given direction. - - The direction to move - true: if the object has moved in the direction - - - - Class Wall. - Implements the - - - - - Initializes a new instance of the class. - - The position. - The parent play object. - - - - Gets the field definition. - - FieldDef. - - - - Sets the item. - - The value. - - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Class Visual. - - - - - My console - - - - - The key action - - - - - Sets the game. - - The g. - - - - Fulls the redraw. - - The sender. - The instance containing the event data. - - - - Writes the tile. - - The p. - The tile. - - - - Sounds the specified gs. - - The gs. - - - - Checks the user action. - - The action. - - true if XXXX, false otherwise. - - - - Struct FullColor - - - - - Class VTileDef. - - - - - The fore ground - - - - - Gets the tile string. - - The tile. - System.String[]. - - - - Gets the tile colors. - - The tile. - FullColor[]. - - - - Class Game. - - - - - Gets the size. - - The size. - - - - Gets the lives. - - The lives. - - - - Gets the time left. - - The time left. - - - - Gets a value indicating whether this instance is running. - - - true if this instance is running; otherwise, false. - - - - Occurs when [vis update]. - - - - - Occurs when [vis full redraw]. - - - - - Occurs when [vis show help]. - - - - - Gets the with the specified p. - - The p. - Tiles. - - - - The level - - - - - The maximum lives - - - - - Gets or sets the score. - - The score. - - - - Gets the tile. - - The p. - Tiles. - - - - Olds the position. - - The p. - Point. - - - - Initializes a new instance of the class. - - - - - Setups the specified new level. - - The new level. - - - - Handles the user action. - - The action. - - - - Games the step. - - System.Int32. - - - - Enum Tiles - - - - - The empty - - - - - The dirt - - - - - The wall - - - - - The destination - - - - - The player - - - - - The stone - - - - - The enemy up - - - - - The enemy right - - - - - The enemy DWN - - - - - The enemy left - - - - - The stone moving - - - - - The player dead - - - - - The dummy - - - - - The wall u - - - - - The wall w - - - - - The wall uw - - - - - The wall d - - - - - The wall ud - - - - - The wall wd - - - - - The wall uwd - - - - - The wall e - - - - - The wall ue - - - - - The wall we - - - - - The wall uwe - - - - - The wall de - - - - - The wall ude - - - - - The wall wde - - - - - The wall uwde - - - - - Enum UserAction - - - - - Enum GameSound - - - - - The go up - - - - - The go west - - - - - The go down - - - - - The go east - - - - - The quit - - - - - The help - - - - - The restart - - - - - The nop - - - - - The next level - - - - - The previous level - - - - - The no sound - - - - - The deep boom - - - - - The tick - - - - - Class Programm. - - - - - Defines the entry point of the application. - - The arguments. - - - \ No newline at end of file diff --git a/CSharpBible/Help/Werner_Flaschbier_BaseTests.xml b/CSharpBible/Help/Werner_Flaschbier_BaseTests.xml deleted file mode 100644 index b30394239..000000000 --- a/CSharpBible/Help/Werner_Flaschbier_BaseTests.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - Werner_Flaschbier_BaseTests - - - - - Defines test class VisualTests. - - - - - Initializes this instance. - - - - - Defines the test method WriteTileTest. - - - - - Defines the test method FullRedrawTest. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/WpfApp.xml b/CSharpBible/Help/WpfApp.xml deleted file mode 100644 index 75f0c522e..000000000 --- a/CSharpBible/Help/WpfApp.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - WpfApp - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Class MainWindowViewModel. - Implements the - - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/WpfApp_net.xml b/CSharpBible/Help/WpfApp_net.xml deleted file mode 100644 index f87c0177a..000000000 --- a/CSharpBible/Help/WpfApp_net.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - WpfApp_net - - - - - Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - - - - - Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - - - - - Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - - - - - Class MainWindowViewModel. - Implements the - - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - \ No newline at end of file diff --git a/CSharpBible/Help/WpfDemoUI.xml b/CSharpBible/Help/WpfDemoUI.xml deleted file mode 100644 index 37bf82338..000000000 --- a/CSharpBible/Help/WpfDemoUI.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - WpfDemoUI - - - - - Class ShellViewModel. - Implements the - - - - - Gets or sets the people. - - The people. - - - - Gets or sets the addresses. - - The addresses. - - - - Gets or sets the selected person. - - The selected person. - - - - Gets or sets the selected address. - - The selected address. - - - - Initializes a new instance of the class. - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/WpfDemoUI1.xml b/CSharpBible/Help/WpfDemoUI1.xml deleted file mode 100644 index b2f0e5a3f..000000000 --- a/CSharpBible/Help/WpfDemoUI1.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - WpfDemoUI1 - - - - - Class ShellViewModel. - Implements the - - - - - Gets or sets the people. - - The people. - - - - Gets or sets the addresses. - - The addresses. - - - - Gets or sets the selected person. - - The selected person. - - - - Gets or sets the selected address. - - The selected address. - - - - Initializes a new instance of the class. - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - \ No newline at end of file diff --git a/CSharpBible/Help/WpfDemoUI2.xml b/CSharpBible/Help/WpfDemoUI2.xml deleted file mode 100644 index 420458587..000000000 --- a/CSharpBible/Help/WpfDemoUI2.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - WpfDemoUI2 - - - - - Class ShellViewModel. - Implements the - - - - - Gets or sets the people. - - The people. - - - - Gets or sets the addresses. - - The addresses. - - - - Gets or sets the selected person. - - The selected person. - - - - Gets or sets the selected address. - - The selected address. - - - - Initializes a new instance of the class. - - - - - Adds the person. - - - - Interaction logic for MainWindow.xaml - - - - Initializes a new instance of the class. - - - - Interaction logic for App.xaml - - - \ No newline at end of file From 19f1c54663b7816ae8f980fd24bb7a8d8bad7263 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:03:36 +0200 Subject: [PATCH 159/569] Document.Base --- .../Document.Base/Models/Interfaces/IDocContent.cs | 2 +- .../Document.Base/Models/Interfaces/IDocElement.cs | 2 +- .../Document.Base/Models/Interfaces/IDocHeadline.cs | 4 ++++ .../Document.Base/Models/Interfaces/IDocParagraph.cs | 2 +- .../Document.Base/Models/Interfaces/IDocSection.cs | 2 +- .../DocumentUtils/Document.Base/Models/Interfaces/IDocSpan.cs | 1 + .../Document.Base/Models/Interfaces/IUserDocument.cs | 2 +- 7 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs index cd447eced..27a68faf0 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocContent.cs @@ -30,7 +30,7 @@ public interface IDocContent : IDocElement IDocSpan AddSpan(string text,IList docFontStyle); IDocSpan AddSpan(string text,IDocFontStyle docFontStyle); IDocSpan AddSpan(string text, EFontStyle eFontStyle); - IDocSpan AddLink(IDocFontStyle docFontStyle); + IDocSpan AddLink(string Href,IDocFontStyle docFontStyle); IDocStyleStyle GetStyle(); diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocElement.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocElement.cs index 9abe2ca2c..7da7c8540 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocElement.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocElement.cs @@ -10,6 +10,6 @@ public interface IDocElement : IDOMElement { public IDocElement AppendDocElement(Enum aType); public IDocElement AppendDocElement(Enum aType,Type aClass); - public IDocElement AppendDocElement(Enum aType,Enum aAttribute,string value,Type aClass); + public IDocElement AppendDocElement(Enum aType,Enum aAttribute,string value,Type aClass,string? Id); IEnumerable Enumerate(); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs index e39f67885..6b6f956cd 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocHeadline.cs @@ -3,4 +3,8 @@ public interface IDocHeadline: IDocContent { int Level { get; } + /// + /// Gets the unique identifier for this instance. also helps for creating anchors and links. + /// + string Id { get; } } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocParagraph.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocParagraph.cs index 1890a05bd..20859aa31 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocParagraph.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocParagraph.cs @@ -8,5 +8,5 @@ namespace Document.Base.Models.Interfaces; public interface IDocParagraph : IDocContent { - IDocSpan AddBookmark(IDocFontStyle docFontStyle); + IDocSpan AddBookmark(string Id, IDocFontStyle docFontStyle); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs index 6169b1c09..65dfca3e7 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSection.cs @@ -9,6 +9,6 @@ public interface IDocSection : IDocElement { IDocParagraph AddParagraph(string ATextStyleName); - IDocHeadline AddHeadline(int aLevel); + IDocHeadline AddHeadline(int aLevel, string Id); IDocTOC AddTOC(string aName, int aLevel); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSpan.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSpan.cs index b5ab521ae..4a535c1aa 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSpan.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IDocSpan.cs @@ -13,4 +13,5 @@ public interface IDocSpan: IDocContent void SetStyle(IUserDocument doc, object aFont); void SetStyle(IUserDocument doc, IDocFontStyle aFont); void SetStyle(string aStyleName); + string? Id { get; set; } } diff --git a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs index 65cefc711..f102dfa21 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Base/Models/Interfaces/IUserDocument.cs @@ -3,7 +3,7 @@ public interface IUserDocument { IDocParagraph AddParagraph(string cStylename); - IDocHeadline AddHeadline(int nLevel); + IDocHeadline AddHeadline(int nLevel,string? Id = null); IDocTOC AddTOC(string cName, int nLevel); IDocElement Root { get; } IEnumerable Enumerate(); From 8fa1a73387ee8ceabaf82421863b14f7369f630c Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:03:36 +0200 Subject: [PATCH 160/569] Document.Html --- .../Data/DocumentUtils/Document.Html/HtmlDocument.cs | 4 ++-- .../DocumentUtils/Document.Html/Model/HtmlContentBase.cs | 4 ++-- .../Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs | 5 ++++- .../Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs | 6 +++--- .../DocumentUtils/Document.Html/Model/HtmlParagraph.cs | 2 +- .../Data/DocumentUtils/Document.Html/Model/HtmlSection.cs | 4 ++-- .../Data/DocumentUtils/Document.Html/Model/HtmlSpan.cs | 7 ++++--- .../Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs | 2 +- .../Document.Html/Serialization/HtmlDocumentSerializer.cs | 5 ++--- 9 files changed, 21 insertions(+), 18 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs index 91554386e..606415d31 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/HtmlDocument.cs @@ -35,11 +35,11 @@ public IDocParagraph AddParagraph(string cStylename) return section.AddParagraph(cStylename); } - public IDocHeadline AddHeadline(int nLevel) + public IDocHeadline AddHeadline(int nLevel, string Id) { var section = EnsureRoot(); _isModified = true; - return section.AddHeadline(nLevel); + return section.AddHeadline(nLevel, Id); } public IDocTOC AddTOC(string cName, int nLevel) diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs index e7551d0a3..09aaa315e 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlContentBase.cs @@ -57,9 +57,9 @@ public virtual IDocSpan AddSpan(string text, IDocFontStyle docFontStyle) return (IDocSpan)AddChild(span); } - public virtual IDocSpan AddLink(IDocFontStyle docFontStyle) + public virtual IDocSpan AddLink(string Href, IDocFontStyle docFontStyle) { - var link = new HtmlSpan(docFontStyle) { IsLink = true }; + var link = new HtmlSpan(docFontStyle) { IsLink = true,Href = Href }; return (IDocSpan)AddChild(link); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs index fd864626d..21d35d34b 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlHeadline.cs @@ -6,9 +6,12 @@ public sealed class HtmlHeadline : HtmlContentBase, IDocHeadline { public int Level { get; } - public HtmlHeadline(int level) + public string Id { get; } + + public HtmlHeadline(int level, string id) { Level = Math.Clamp(level, 1, 6); + Id = id; } public override IDocStyleStyle GetStyle() => new HtmlStyle($"H{Level}"); diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs index 78f2a5df4..6e1bd7058 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlNodeBase.cs @@ -24,9 +24,9 @@ public virtual IDocElement AppendDocElement(Enum aType) => AppendDocElement(aType, aClass: null); public virtual IDocElement AppendDocElement(Enum aType, Type? aClass) - => AppendDocElement(aType, aAttribute: default!, value: string.Empty, aClass); + => AppendDocElement(aType, aAttribute: default!, value: string.Empty, aClass: aClass); - public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type? aClass) + public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type? aClass, string? Id = null) { if (aType is not HtmlElementType type) throw new NotSupportedException($"Element type '{aType}' wird nicht unterstützt."); @@ -35,7 +35,7 @@ public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string { HtmlElementType.Section => (IDocSpan)AddChild(new HtmlSection()), HtmlElementType.Paragraph => (IDocSpan)AddChild(new HtmlParagraph(styleName: value)), - HtmlElementType.Headline => (IDocSpan)AddChild(new HtmlHeadline(level: TryParseInt(value, 1))), + HtmlElementType.Headline => (IDocSpan)AddChild(new HtmlHeadline(level: TryParseInt(value, 1), id: Id)), HtmlElementType.TOC => (IDocSpan)AddChild(new HtmlTOC(name: value, level: TryParseInt(value, 2))), HtmlElementType.Span => (IDocSpan)AddChild(new HtmlSpan(style: HtmlFontStyle.Default)), HtmlElementType.Link => (IDocSpan)AddChild(new HtmlSpan(style: HtmlFontStyle.Default) { Href = value }), diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlParagraph.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlParagraph.cs index 33e56116d..7f59e917d 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlParagraph.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlParagraph.cs @@ -11,7 +11,7 @@ public HtmlParagraph(string? styleName = null) StyleName = styleName; } - public IDocSpan AddBookmark(IDocFontStyle docFontStyle) + public IDocSpan AddBookmark(string Id, IDocFontStyle docFontStyle) { var span = new HtmlSpan(docFontStyle); span.Id = Guid.NewGuid().ToString("N"); diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs index b65d5f5a4..c63aba42c 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSection.cs @@ -10,9 +10,9 @@ public IDocParagraph AddParagraph(string ATextStyleName) return (IDocParagraph)AddChild(p); } - public IDocHeadline AddHeadline(int aLevel) + public IDocHeadline AddHeadline(int aLevel, string Id) { - var h = new HtmlHeadline(aLevel); + var h = new HtmlHeadline(aLevel, Id); return (IDocHeadline)AddChild(h); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSpan.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSpan.cs index 55a4ff3c1..debf3f82c 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSpan.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlSpan.cs @@ -1,11 +1,12 @@ using Document.Base.Models.Interfaces; +using static System.Net.Mime.MediaTypeNames; namespace Document.Html.Model; public sealed class HtmlSpan : HtmlContentBase, IDocSpan { public IDictionary Attributes { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); - public IDocFontStyle FontStyle { get; } + public IDocFontStyle FontStyle { get; private set; } public bool IsLink { get; set; } public string? Href { @@ -33,7 +34,7 @@ public void SetStyle(object fs) public void SetStyle(IDocFontStyle fs) { - throw new NotImplementedException(); + FontStyle = fs; } public void SetStyle(IUserDocument doc, object aFont) @@ -43,7 +44,7 @@ public void SetStyle(IUserDocument doc, object aFont) public void SetStyle(IUserDocument doc, IDocFontStyle aFont) { - throw new NotImplementedException(); + FontStyle = aFont; } public void SetStyle(string aStyleName) diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs index 7ef0714ab..f35ad8af5 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Model/HtmlTOC.cs @@ -26,7 +26,7 @@ public void RebuildFrom(IDocSection root) { var p = new HtmlParagraph("TOCEntry"); var anchorText = h.GetTextContent(true); - var span = (HtmlSpan)p.AddLink(HtmlFontStyle.Default); + var span = (HtmlSpan)p.AddLink(h.Id, HtmlFontStyle.Default); // Generiere (oder finde) eine ID am Headline-Knoten var id = h.Nodes.OfType().FirstOrDefault(s => !string.IsNullOrEmpty(s.Id))?.Id ?? Guid.NewGuid().ToString("N"); diff --git a/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs b/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs index 4a2e97d77..ddf4f0c59 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Html/Serialization/HtmlDocumentSerializer.cs @@ -45,7 +45,7 @@ private static void MapElement(IElement element, HtmlSection rootOrContainer) case "H6": { var level = int.Parse(element.TagName[1].ToString()); - var h = (HtmlHeadline)rootOrContainer.AddHeadline(level); + var h = (HtmlHeadline)rootOrContainer.AddHeadline(level, element.Id); MapInline(element, h); break; } @@ -104,8 +104,7 @@ private static void MapInline(IElement element, IDocContent container) } else if (tag is "A") { - var link = (HtmlSpan)container.AddLink(HtmlFontStyle.Default); - link.Href = el.GetAttribute("href"); + var link = (HtmlSpan)container.AddLink(el.GetAttribute("href"), HtmlFontStyle.Default); MapInline(el, link); } else if (tag is "NBSP") From 7692b217077f5af04312e892350262e0df7a21a2 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:03:38 +0200 Subject: [PATCH 161/569] Document.Pdf --- .../Document.Pdf/Model/PdfContentBase.cs | 4 +-- .../Document.Pdf/Model/PdfHeadline.cs | 4 ++- .../Document.Pdf/Model/PdfNodeBase.cs | 35 +++++++++++++++++-- .../Document.Pdf/Model/PdfParagraph.cs | 2 +- .../Document.Pdf/Model/PdfSection.cs | 4 +-- .../Document.Pdf/Model/PdfSpan.cs | 2 ++ .../DocumentUtils/Document.Pdf/PdfDocument.cs | 4 +-- 7 files changed, 44 insertions(+), 11 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs index 11ccb1768..d4df21b1a 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfContentBase.cs @@ -56,9 +56,9 @@ public virtual IDocSpan AddSpan(string text, IDocFontStyle docFontStyle) return AddChild(span); } - public virtual IDocSpan AddLink(IDocFontStyle docFontStyle) + public virtual IDocSpan AddLink(string Href, IDocFontStyle docFontStyle) { - var span = new PdfSpan(docFontStyle) { IsLink = true }; + var span = new PdfSpan(docFontStyle) { IsLink = true, Href = Href }; return AddChild(span); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs index 852b5b06e..7728b0af2 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfHeadline.cs @@ -7,6 +7,8 @@ public sealed class PdfHeadline : PdfContentBase, IDocHeadline public int Level { get; } public object Page { get; internal set; } - public PdfHeadline(int level) => Level = Math.Clamp(level, 1, 6); + public string Id { get; } + + public PdfHeadline(int level, string Id) => (Level,Id) = (Math.Clamp(level, 1, 6),Id); public override IDocStyleStyle GetStyle() => new PdfStyle($"H{Level}"); } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs index c111bbba2..1f8447d53 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfNodeBase.cs @@ -19,9 +19,27 @@ protected T AddChild(T element) where T : IDocElement return element; } - public virtual IDocElement AppendDocElement(Enum aType) => throw new NotSupportedException(); - public virtual IDocElement AppendDocElement(Enum aType, Type aClass) => AppendDocElement(aType); - public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type aClass) => AppendDocElement(aType); + public virtual IDocElement AppendDocElement(Enum aType) => AppendDocElement(aType, null); + public virtual IDocElement AppendDocElement(Enum aType, Type? aClass) => AppendDocElement(aType,default!, string.Empty,aClass); + public virtual IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type aClass, string? Id = null) + { + if (aType is not PdfElementType type) + throw new NotSupportedException($"Element type '{aType}' wird nicht unterstützt."); + + switch (type) + { + case PdfElementType.Section: return (IDocElement)AddChild(new PdfSection()); + case PdfElementType.Paragraph: return (IDocElement)AddChild(new PdfParagraph(value)); + case PdfElementType.Headline: return (IDocElement)AddChild(new PdfHeadline(TryParseInt(value, 1), Id)); + case PdfElementType.TOC: return (IDocElement)AddChild(new PdfTOC(value, TryParseInt(value, 2))); + case PdfElementType.Span: return (IDocElement)AddChild(new PdfSpan(PdfFontStyle.Default)); + case PdfElementType.Link: return (IDocElement)AddChild(new PdfSpan(PdfFontStyle.Default) { Href = value }); + case PdfElementType.Bookmark: return (IDocElement)AddChild(new PdfSpan(PdfFontStyle.Default) { Id = Id }); + default: throw new NotSupportedException($"Element type '{aType}' wird nicht unterstützt."); + } + } + protected static int TryParseInt(string? s, int fallback) + => int.TryParse(s, out var v) ? v : fallback; public IEnumerable Enumerate() { @@ -43,4 +61,15 @@ public IDOMElement AddChild(IDOMElement element) Nodes.Add(element); return element; } +} + +public enum PdfElementType +{ + Section, + Paragraph, + Headline, + TOC, + Span, + Link, + Bookmark } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs index d44e761a1..8cf48d829 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfParagraph.cs @@ -7,7 +7,7 @@ public sealed class PdfParagraph : PdfContentBase, IDocParagraph public string? StyleName { get; } public PdfParagraph(string? styleName = null) => StyleName = styleName; - public IDocSpan AddBookmark(IDocFontStyle docFontStyle) => AddSpan(docFontStyle); + public IDocSpan AddBookmark(string Id, IDocFontStyle docFontStyle) => AddSpan(docFontStyle); public override IDocStyleStyle GetStyle() => new PdfStyle(StyleName); } \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs index da61ae892..741f02578 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSection.cs @@ -10,9 +10,9 @@ public IDocParagraph AddParagraph(string ATextStyleName) return AddChild(p); } - public IDocHeadline AddHeadline(int aLevel) + public IDocHeadline AddHeadline(int aLevel, string Id) { - var h = new PdfHeadline(aLevel); + var h = new PdfHeadline(aLevel, Id); return AddChild(h); } diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs index 65e560657..4a8edf0b1 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/Model/PdfSpan.cs @@ -13,6 +13,8 @@ public string? Href set { if (value is null) Attributes.Remove("href"); else Attributes["href"] = value; IsLink = value != null; } } + public string? Id { get ; set ; } + public PdfSpan(IDocFontStyle style) => FontStyle = style; public override IDocStyleStyle GetStyle() => new PdfStyle(FontStyle.Name); diff --git a/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs index aa3b83d53..5fd94ae04 100644 --- a/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs +++ b/CSharpBible/Data/DocumentUtils/Document.Pdf/PdfDocument.cs @@ -31,10 +31,10 @@ public IDocParagraph AddParagraph(string cStylename) return EnsureRoot().AddParagraph(cStylename); } - public IDocHeadline AddHeadline(int nLevel) + public IDocHeadline AddHeadline(int nLevel, string Id) { _isModified = true; - return EnsureRoot().AddHeadline(nLevel); + return EnsureRoot().AddHeadline(nLevel, Id); } public IDocTOC AddTOC(string cName, int nLevel) From 62529b80af070b887a9788786aee3f8bb296fb27 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:03:41 +0200 Subject: [PATCH 162/569] HtmlExample --- CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs b/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs index 82c59dd01..f22805e61 100644 --- a/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs +++ b/CSharpBible/Data/DocumentUtils/HtmlExample/Program.cs @@ -45,7 +45,7 @@ private static void CreateSampleDocument() { // Beispiel: Dokument erstellen, schreiben und wieder lesen var root = UserDocumentFactory.Create("html").Root as IDocSection; - var h1 = root.AddHeadline(1); + var h1 = root.AddHeadline(1, "kap1"); h1.TextContent = "Titel"; var p = root.AddParagraph("Body"); p.AppendText("Hallo "); From 28c110bf6569ece3f3a0df2ffff78b07825fca42 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:03:44 +0200 Subject: [PATCH 163/569] NebelEbook --- CSharpBible/Data/NebelEbook/Choice.cs | 31 - CSharpBible/Data/NebelEbook/NebelEbook.csproj | 14 +- CSharpBible/Data/NebelEbook/Program.cs | 168 ++-- .../NebelEbook/Properties/launchSettings.json | 4 + CSharpBible/Data/NebelEbook/Story.cs | 9 - CSharpBible/Data/NebelEbook/StoryNode.cs | 48 -- CSharpBible/Data/NebelEbook/story.json | 718 ------------------ 7 files changed, 127 insertions(+), 865 deletions(-) delete mode 100644 CSharpBible/Data/NebelEbook/Choice.cs delete mode 100644 CSharpBible/Data/NebelEbook/Story.cs delete mode 100644 CSharpBible/Data/NebelEbook/StoryNode.cs delete mode 100644 CSharpBible/Data/NebelEbook/story.json diff --git a/CSharpBible/Data/NebelEbook/Choice.cs b/CSharpBible/Data/NebelEbook/Choice.cs deleted file mode 100644 index 4f86ab590..000000000 --- a/CSharpBible/Data/NebelEbook/Choice.cs +++ /dev/null @@ -1,31 +0,0 @@ -namespace NebelEbook; - -/// -/// Repräsentiert eine auswählbare Option innerhalb des E-Books, -/// die zu einem Zielabschnitt mit der angegebenen Kennung verweist. -/// -public class Choice -{ - /// - /// Der anzuzeigende Text der Auswahl (z. B. Button- oder Link-Beschriftung). - /// - public string Label { get; set; } - - /// - /// Die Zielkennung (ID), auf die diese Auswahl verweist - /// (z. B. Kapitel-/Abschnitts- oder Knoten-ID). - /// - public string TargetId { get; } - - /// - /// Erstellt eine neue Auswahl mit Anzeigetext und Zielkennung. - /// - /// Der anzuzeigende Text der Auswahl. - /// Die Kennung des Zielabschnitts, zu dem navigiert werden soll. - public Choice(string label, string targetId) - { - Label = label; - TargetId = targetId; - } -} - diff --git a/CSharpBible/Data/NebelEbook/NebelEbook.csproj b/CSharpBible/Data/NebelEbook/NebelEbook.csproj index e26e3e299..0def9a8ea 100644 --- a/CSharpBible/Data/NebelEbook/NebelEbook.csproj +++ b/CSharpBible/Data/NebelEbook/NebelEbook.csproj @@ -8,16 +8,20 @@ - - - PreserveNewest - - + + + + + + + + + diff --git a/CSharpBible/Data/NebelEbook/Program.cs b/CSharpBible/Data/NebelEbook/Program.cs index 710dd0ffe..b3889fc4c 100644 --- a/CSharpBible/Data/NebelEbook/Program.cs +++ b/CSharpBible/Data/NebelEbook/Program.cs @@ -1,51 +1,33 @@ using System.Text; using System.Text.Json; +using System.Globalization; using Document.Base.Factories; using Document.Base.Models.Interfaces; using Document.Html; +using Story_Base.Data; +using Document.Xaml; namespace NebelEbook; class Program { - static int Main(string[] args) + // Caches für häufig genutzte Daten + private static readonly HashSet s_invalidFileNameChars = new(Path.GetInvalidFileNameChars()); + private static readonly HashSet s_reservedNames = new(StringComparer.OrdinalIgnoreCase) { - var t= typeof(HtmlDocument); - + "CON","PRN","AUX","NUL", + "COM1","COM2","COM3","COM4","COM5","COM6","COM7","COM8","COM9", + "LPT1","LPT2","LPT3","LPT4","LPT5","LPT6","LPT7","LPT8","LPT9" + }; + static int Main(string[] args) + { try { - var key = (args.Length > 0 ? args[0] : "html").Trim().ToLowerInvariant(); - var storyPath = Path.Combine(AppContext.BaseDirectory, "story.json"); - - // Ausgabedatei bestimmen - var output = args.Length > 1 - ? args[1] - : Path.Combine( - AppContext.BaseDirectory, - key switch - { - "html" => "Nebel_ueber_Bretten_Interaktiv.html", - "pdf" => "Nebel_ueber_Bretten_Interaktiv.pdf", - _ when key.EndsWith(".html", StringComparison.OrdinalIgnoreCase) => Path.GetFileName(key), - _ when key.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) => Path.GetFileName(key), - _ => $"Nebel_ueber_Bretten_Interaktiv.{(key.Contains('/') ? "out" : key)}" - }); - - // Dokument über Factory erstellen (per Key 'pdf'/'html' oder per Dateiendung) - IUserDocument doc = UserDocumentFactory.Create(key); - - var story = LoadOrCreateSampleStory(storyPath); - BuildDocument(doc, story); - - if (!doc.SaveTo(output)) - { - Console.Error.WriteLine($"Speichern fehlgeschlagen: {output}"); - return 2; - } - Console.WriteLine($"Erstellt: {Path.GetFullPath(output)}"); - return 0; + Init(args, out Story story, out string output, out IUserDocument doc); + + return Execute(story, output, doc); } catch (Exception ex) { @@ -54,19 +36,103 @@ _ when key.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) => Path.GetFileN } } - private static IUserDocument CreateUserDocument(string key, string output) + private static int Execute(Story story, string output, IUserDocument doc) + { + BuildDocument(doc, story); + + if (!doc.SaveTo(output)) + { + Console.Error.WriteLine($"Speichern fehlgeschlagen: {output}"); + return 2; + } + + Console.WriteLine($"Erstellt: {Path.GetFullPath(output)}"); + return 0; + } + + private static void Init(string[] args, out Story story, out string output, out IUserDocument doc) + { + UserDocumentFactory.AutoScanOnFirstUse = false; + + // Manuelle Registrierung für HTML + UserDocumentFactory.Register("html", [".htm",".html"], "text/html"); + UserDocumentFactory.Register("xaml", [".xaml",".xml"], "text/xaml"); + // UserDocumentFactory.Register("pdf", [".pdf" ], "application/pdf"); + + var key = (args.Length > 0 ? args[0] : "html").Trim().ToLowerInvariant(); + var storyPath = Path.Combine(AppContext.BaseDirectory,"Resources", "story2.json"); + + // Story laden (oder Beispiel erzeugen) -> liefert Titel + story = LoadOrCreateSampleStory(storyPath); + + // Aus Titel der Story einen gültigen Dateinamen erzeugen + var fileName = BuildOutputFileNameFromTitle(story?.Title, key); + output = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), fileName); + + // Dokument über Factory erstellen (per Key 'pdf'/'html' oder per Dateiendung) + doc = UserDocumentFactory.Create(key); + } + + private static string BuildOutputFileNameFromTitle(string? title, string key) { - // Versuch nach Key/MIME/Extension/Pfad - if (UserDocumentFactory.TryCreate(key, out var byKey) && byKey is not null) - return byKey; + // Fallback-Titel + title = string.IsNullOrWhiteSpace(title) ? "output" : title; + + // Ein-Pass-Aufbereitung: Diakritika entfernen, ungültige Zeichen ersetzen, Separatoren verdichten + var sb = new StringBuilder(title.Length); + bool lastWasSep = false; + + foreach (var c in title.Normalize(NormalizationForm.FormD)) + { + var uc = CharUnicodeInfo.GetUnicodeCategory(c); + if (uc == UnicodeCategory.NonSpacingMark) + continue; // Diakritika überspringen + + char mapped; + if (char.IsWhiteSpace(c) || c == '-' || c == '_' || c == '.') + { + mapped = '_'; + } + else if (s_invalidFileNameChars.Contains(c)) + { + mapped = '-'; + } + else + { + mapped = c; + } + + if (mapped == '_') + { + if (!lastWasSep) + { + sb.Append('_'); + lastWasSep = true; + } + } + else + { + sb.Append(mapped); + lastWasSep = false; + } + } + + var baseName = sb.ToString().Normalize(NormalizationForm.FormC).Trim('_'); + if (string.IsNullOrEmpty(baseName)) + baseName = "output"; + + // Windows-reservierte Namen vermeiden + if (s_reservedNames.Contains(baseName)) + { + baseName += "_"; + } - var byExt = UserDocumentFactory.CreateForPath(output) - ?? UserDocumentFactory.CreateForExtension(Path.GetExtension(output)); - if (byExt is not null) - return byExt; + // Extension aus key bestimmen (Fallback .html) + var ext = key?.Trim().ToLowerInvariant(); + if (string.IsNullOrEmpty(ext)) ext = "html"; + if (!ext.StartsWith('.')) ext = "." + ext; - // Fallback: pdf - return UserDocumentFactory.Create("html"); + return baseName + ext; } private static void BuildDocument(IUserDocument doc, Story story) @@ -81,23 +147,18 @@ private static void BuildDocument(IUserDocument doc, Story story) foreach (var n in story.Nodes) { var p = doc.AddParagraph("TOCEntry"); - var link = p.AddLink(font); + var link = p.AddLink("#"+n.Id,font); link.TextContent = TextTemplate.Render(n.Title, story.Variables); - // Formatneutrale Link-Zielangabe - link.SetStyle(doc, font); // optional, falls Engines Styles nutzen - // über IDOMElement.Attributes: - // href für HTML; PDF-Engine kann diese Information interpretieren - (link as IDOMElement).Attributes["href"] = $"#{n.Id}"; + link.SetStyle(doc, font); } } // Kapitel foreach (var node in story.Nodes) { - var h = doc.AddHeadline(1); + var h = doc.AddHeadline(1,node.Id); h.TextContent = TextTemplate.Render(node.Title, story.Variables); - // Anker-Span mit id = node.Id var anchor = h.AddSpan(font); (anchor as IDOMElement).Attributes["id"] = node.Id; @@ -115,9 +176,8 @@ private static void BuildDocument(IUserDocument doc, Story story) foreach (var c in node.Choices) { var cp = doc.AddParagraph("Choice"); - var l = cp.AddLink(font); + var l = cp.AddLink("#"+c.TargetId,font); l.TextContent = "→ " + TextTemplate.Render(c.Label, story.Variables); - (l as IDOMElement).Attributes["href"] = $"#{c.TargetId}"; } } } @@ -140,9 +200,9 @@ static Story LoadOrCreateSampleStory(string path) return sample; } - // Minimaler Fallback – vollständige story.json wird bereits mitkopiert. static Story CreateSampleStory() => new Story { + Title = "Nebel über Bretten", Variables = new Dictionary { ["strasse"] = "Melanchthonstraße", diff --git a/CSharpBible/Data/NebelEbook/Properties/launchSettings.json b/CSharpBible/Data/NebelEbook/Properties/launchSettings.json index 5bb6a445b..20c7e70e2 100644 --- a/CSharpBible/Data/NebelEbook/Properties/launchSettings.json +++ b/CSharpBible/Data/NebelEbook/Properties/launchSettings.json @@ -10,6 +10,10 @@ "Profil \"2\"": { "commandName": "Project", "commandLineArgs": "pdf" + }, + "Profil \"3\"": { + "commandName": "Project", + "commandLineArgs": "xaml" } } } \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/Story.cs b/CSharpBible/Data/NebelEbook/Story.cs deleted file mode 100644 index e49950206..000000000 --- a/CSharpBible/Data/NebelEbook/Story.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace NebelEbook; - -public sealed class Story -{ - public Dictionary Variables { get; set; } = new(StringComparer.OrdinalIgnoreCase); - public List Nodes { get; set; } = new(); -} \ No newline at end of file diff --git a/CSharpBible/Data/NebelEbook/StoryNode.cs b/CSharpBible/Data/NebelEbook/StoryNode.cs deleted file mode 100644 index 62ad5103c..000000000 --- a/CSharpBible/Data/NebelEbook/StoryNode.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; - -namespace NebelEbook; - -/// -/// Repräsentiert einen Knoten einer interaktiven Geschichte mit Titel, Absätzen und auswählbaren Optionen. -/// -/// -/// Die übergebenen -Arrays und -Instanzen werden ohne Kopie übernommen. -/// -public class StoryNode -{ - /// - /// Eindeutige Kennung des Knotens. - /// - public string Id { get; } - - /// - /// Titel des Story-Knotens. - /// - public string Title { get; set; } - - /// - /// Sammlung der Textabsätze in der vorgesehenen Anzeige-Reihenfolge. - /// - public string[] Paragraphs { get; } - - /// - /// Liste der möglichen Entscheidungen, die von diesem Knoten aus getroffen werden können. - /// - /// - public List Choices { get; } - - /// - /// Initialisiert eine neue Instanz der -Klasse. - /// - /// Die eindeutige Id des Knotens. - /// Der Titel des Knotens. - /// Die Absätze, die zu diesem Knoten gehören. - /// Die verfügbaren Entscheidungen ab diesem Knoten. - public StoryNode(string id, string title, string[] paragraphs, List choices) - { - Id = id; - Title = title; - Paragraphs = paragraphs; - Choices = choices; - } -} diff --git a/CSharpBible/Data/NebelEbook/story.json b/CSharpBible/Data/NebelEbook/story.json deleted file mode 100644 index b76f15983..000000000 --- a/CSharpBible/Data/NebelEbook/story.json +++ /dev/null @@ -1,718 +0,0 @@ -{ - "variables": { - "strasse": "Melanchthonstraße", - "opfer": "Friedrich von Hohenberg", - "detektiv": "Kommissar Keller", - "stadt": "Bretten" - }, - "nodes": [ - { - "id": "kap1", - "title": "Kapitel 1 – Fund im Nebel", - "paragraphs": [ - "Der Nebel hing schwer über der {{strasse}}. Gelbe Laternenkelche zeichneten milchige Inseln ins Grau, als {{detektiv}} vor der Villa Hohenberg anhielt. Der Kies knirschte, irgendwo tropfte Regen von einer Markise.", - "Im Salon: {{opfer}}, tot im Sessel – der Rotwein noch warm. Die Standuhr tickte, das Feuer im Kamin war längst verglommen, und durch eine Spalte im Vorhang drang ein matter Schimmer vom Garten her.", - "Auf dem Beistelltisch: zwei Gläser, eines nur benetzt, das andere tiefrot. Der Korken lag sauber daneben. Keine Kampfspuren – aber eine unsichtbare Unruhe füllte den Raum." - ], - "choices": [ - { "label": "Clara sofort befragen", "targetId": "kap2_clara" }, - { "label": "Tatort gründlich untersuchen", "targetId": "kap2_tatort" } - ] - }, - { - "id": "kap2_clara", - "title": "Kapitel 2 – Gespräch mit Clara", - "paragraphs": [ - "Clara Hohenberg öffnete die Tür ihres Zimmers mit verweinten Augen. Der Duft von Terpentin und Kreide lag in der Luft – die Wände voller Skizzen, ein halbfertiges Porträt auf der Staffelei.", - "„Wir haben gestritten“, sagte sie leise, „über Geld, über seine Geschäfte. Aber ich habe ihn nicht getötet.“ Ihre Hände zitterten, als sie nach einem Taschentuch griff.", - "Im Flur vor dem Zimmer stand ein Schirmständer. Ein Spazierstock lehnte darin – schwer, mit einem silbernen Knauf. Nicht Claras Stil." - ], - "choices": [ - { "label": "Nach Alibi fragen", "targetId": "kap3_alibi" }, - { "label": "Skizzenblock untersuchen", "targetId": "kap3_skizzen" } - ] - }, - { - "id": "kap2_tatort", - "title": "Kapitel 2 – Stille im Salon", - "paragraphs": [ - "Der Salon roch nach kaltem Kaminrauch und teurem Bordeaux. Kein Kampf, keine umgestürzten Möbel – nur eine ordentliche, fast inszeniert wirkende Szenerie.", - "Ein Fenster stand spaltbreit offen. Auf der Fensterbank: feine Glasstaubpartikel, als hätte jemand die Verriegelung manipuliert – oder nur so getan.", - "Das Teppichmuster verriet subtile Verschiebungen. Eine Spur in Richtung Weinkeller-Tür, kaum sichtbar, als hätte jemand eine Flasche geholt – und etwas zurückgelassen." - ], - "choices": [ - { "label": "Rotwein ins Labor geben", "targetId": "kap3_labor" }, - { "label": "Fenster und Garten prüfen", "targetId": "kap3_fenster" } - ] - }, - { - "id": "kap3_alibi", - "title": "Kapitel 3 – Claras Alibi", - "paragraphs": [ - "Clara atmete tief ein. „Ich war im Theater“, sagte sie. „Premiere im Kleinen Haus, ich habe Freunde getroffen. Danach… bin ich allein nach Hause.“", - "Eine eingerissene Eintrittskarte lag auf dem Schreibtisch. Daneben ein Programmheft mit der Zeitangabe der Vorstellung. Wenn das stimmte, blieb ein enger Zeitkorridor.", - "„Er war schon tot, als ich kam“, flüsterte sie. „Der Nebel war so dicht, ich habe kaum den Gartenweg gesehen.“" - ], - "choices": [ - { "label": "Theaterbesuch verifizieren", "targetId": "kap4_theater" }, - { "label": "Claras Handy prüfen", "targetId": "kap4_phone" } - ] - }, - { - "id": "kap3_skizzen", - "title": "Kapitel 3 – Skizzenblock", - "paragraphs": [ - "Der Skizzenblock war neu, die oberen Seiten voller Studien mit schnellen Linien. Zwischen Porträtfragmenten fand sich eine überraschend exakte Perspektive auf den Salon – von außen, durch das Fenster.", - "Eine kleine Notiz am Rand: „Standpunkt: Nordhecke, 3 m“. Daneben ein Datum, gestern Abend.", - "Clara blickte weg. „Ich zeichne oft bei Nacht. Es beruhigt mich…“" - ], - "choices": [ - { "label": "Zum Atelier gehen", "targetId": "kap4_atelier" }, - { "label": "Skizzen mit Tatort abgleichen", "targetId": "kap4_compare" } - ] - }, - { - "id": "kap3_labor", - "title": "Kapitel 3 – Laborauftrag", - "paragraphs": [ - "Die Probe des Weins wanderte in ein beschriftetes Röhrchen. „Wir geben Gaschromatographie“, versprach die Laborantin. „Melden uns, sobald wir ein Ergebnis haben.“", - "Zurück im Salon schnürte sich die Zeit zusammen. Der Bordeaux in Glas zwei roch minimal bitter – Einbildung oder Anflug von Mandel? Der Kamin reflektierte stumm.", - "Ein Blick zur Kellertür. Wer hatte welche Flasche geholt – und warum diese?" - ], - "choices": [ - { "label": "Auf Laborergebnis warten", "targetId": "kap4_lab_result" }, - { "label": "Weinkeller durchsuchen", "targetId": "kap4_cellar" } - ] - }, - { - "id": "kap3_fenster", - "title": "Kapitel 3 – Spuren am Fenster", - "paragraphs": [ - "Die Verriegelung zeigte feine Kratzer, jedoch ohne eindeutige Hebelspuren. Auf der Außenseite haftete feuchter Lehm – frisch, mit sandigen Einschlüssen.", - "Im Beet darunter: Fußabdrücke der Größe 44, deutlich vor dem Regen gesetzt. Der Weg führte zur Seitenpforte und verlor sich am Eisenzaun.", - "Die Luft roch nach feuchter Erde und kaltem Blattwerk. Irgendwo knarrte ein Gartentor – oder nur der Nebel, der die Geräusche verzog." - ], - "choices": [ - { "label": "Spuren im Garten sichern", "targetId": "kap4_garden" }, - { "label": "Nachbar befragen", "targetId": "kap4_neighbor" } - ] - }, - { - "id": "kap4_theater", - "title": "Kapitel 4 – Theaterkassen und Zeugen", - "paragraphs": [ - "An der Theaterkasse blätterte die Kassiererin durch Listen. „Clara Hohenberg, zwei Tickets auf ihren Namen – abgeholt um 19:42 Uhr.“", - "Ein Bühnenarbeiter nickte. „Ich habe sie in der Pause im Foyer gesehen. Danach… weiß ich nicht.“ Die Premiere endete gegen 21:50 Uhr.", - "Die Zeiten ließen Claras Rückweg knapp, aber möglich. Ein Name tauchte in Gesprächen auf: Kurt Baumann, Geschäftspartner des Opfers – vor Ort nicht gesehen, aber häufig Thema." - ], - "choices": [ - { "label": "Geschäftspartner Baumann aufsuchen", "targetId": "kap5_partner" }, - { "label": "Zu Clara zurückkehren", "targetId": "kap5_return_clara" } - ] - }, - { - "id": "kap4_phone", - "title": "Kapitel 4 – Das Telefon", - "paragraphs": [ - "Claras Handy zeigte eine gelöschte Nachricht, die sich teilweise rekonstruieren ließ: „…Schlüssel im Globus… heute Nacht…“. Die Nummer war unterdrückt.", - "Der Verlauf wies mehrere kurze Anrufe von einer Prepaid-Nummer aus. Die Funkzelle lag in der Nähe des Dienstbotentrakts der Villa.", - "Jemand spielte mit Hinweisen – oder wollte ablenken." - ], - "choices": [ - { "label": "Nummer rückverfolgen", "targetId": "kap5_phone_trace" }, - { "label": "SMS-Inhalt rekonstruieren", "targetId": "kap5_sms" } - ] - }, - { - "id": "kap4_atelier", - "title": "Kapitel 4 – Claras Atelier", - "paragraphs": [ - "Im Atelier mischten sich Ölfarbe, Terpentin und Kaffee zu einem scharfen, lebendigen Geruch. Auf einem Tisch standen verschmierte Lappen, daneben eine Schale mit verblassten Farbresten.", - "Ein Kalender an der Wand: Markierungen, rote Kreise, ein kryptisches „E.“ an mehreren Tagen. Die jüngste Notiz: „E. – 21:00 Garten“.", - "Clara biss sich auf die Lippe. „Ich wollte reden. Über Geld. Über Freiheit.“" - ], - "choices": [ - { "label": "Chemische Probe nehmen", "targetId": "kap5_chem" }, - { "label": "Kalenderhinweise prüfen", "targetId": "kap5_calendar" } - ] - }, - { - "id": "kap4_compare", - "title": "Kapitel 4 – Perspektive prüfen", - "paragraphs": [ - "Die Skizzenperspektive passte exakt zu einem Punkt an der Nordhecke. Von dort aus sah man in den Salon, wenn der Vorhang offenstand.", - "Im Gras glänzte Tau. Zurück blieb ein schwacher Abdruck eines Stativs – oder nur ein Zufall? Ein Zigarettenstummel lag nearby: Filterlos, selten.", - "Wer hier stand, beobachtete. Aber hat er auch getötet?" - ], - "choices": [ - { "label": "Standpunkt aufsuchen", "targetId": "kap5_vantage" }, - { "label": "Fensterverriegelung erneut prüfen", "targetId": "kap5_window_recheck" } - ] - }, - { - "id": "kap4_lab_result", - "title": "Kapitel 4 – Laborergebnis", - "paragraphs": [ - "Der Rückruf kam früher als erwartet. „Digitalis-Glykoside im Wein“, sagte die Laborantin. „Keine natürliche Kontamination. Jemand hat nachgeholfen.“", - "Das Gift schmeckt bitter, aber im schweren Bordeaux fast verborgen. Die Dosis: tödlich. Das tat jemand mit Wissen – oder mit Skrupellosigkeit." - ], - "choices": [ - { "label": "Apotheke/Arzt nach Digitalis-Bezug prüfen", "targetId": "kap5_pharma" }, - { "label": "Hausapotheke durchsuchen", "targetId": "kap5_medicine_cabinet" } - ] - }, - { - "id": "kap4_cellar", - "title": "Kapitel 4 – Weinkeller", - "paragraphs": [ - "Die Luft war kühl und feucht. Reihenweise ruhende Flaschen, feinsäuberlich katalogisiert. Doch eine Reihe wirkte verstört: Kärtchen vertauscht, Staub verwischt.", - "Auf dem Boden: ein kaum wahrnehmbarer Tropfen Bordeaux, daneben ein hauchdünner Rand von dunkler Flüssigkeit – verschüttet und weggewischt.", - "Jemand kannte sich aus. Oder hatte Hilfe." - ], - "choices": [ - { "label": "Weinkarteikarten prüfen", "targetId": "kap5_cards" }, - { "label": "Kameralog (falls vorhanden) sichten", "targetId": "kap5_cctv" } - ] - }, - { - "id": "kap4_garden", - "title": "Kapitel 4 – Gartenpfade", - "paragraphs": [ - "Die Abdrücke führten an einem Gartenhaus vorbei. An der Tür klebte feuchter Lehm – als habe jemand mit schmutzigen Stiefeln angestoßen.", - "Im Gras lagen zwei dünne Fasern, dunkelblau – Textil? Ein Mantelfaden? Sie klebten am Tau und schimmerten im Laternenlicht.", - "Ein Rabe hockte auf dem Zaun und krächzte, als wolle er warnen." - ], - "choices": [ - { "label": "Gartenhaus durchsuchen", "targetId": "kap5_shed" }, - { "label": "Spuren zur Seitenpforte folgen", "targetId": "kap5_gate" } - ] - }, - { - "id": "kap4_neighbor", - "title": "Kapitel 4 – Der Nachbar", - "paragraphs": [ - "Egon Reiter, der Nachbar, öffnete misstrauisch. „Nebel macht die Leute seltsam“, brummte er. „Ich sah eine Gestalt mit Stock, spät. Konnte das Gesicht nicht erkennen.“", - "Auf seinem Tisch lag eine alte Zeitung, die vom Börsenrückgang sprach. „Hohenberg“, murmelte er, „immer zu laut, zu stolz.“", - "Reiter rauchte filterlose Zigaretten. Ein überquellender Aschenbecher bestätigte die Spur vom Garten." - ], - "choices": [ - { "label": "Butler Johann befragen", "targetId": "kap5_butler" }, - { "label": "Geschäftspartner Baumann befragen", "targetId": "kap5_partner" } - ] - }, - { - "id": "kap5_partner", - "title": "Kapitel 5 – Kurt Baumann", - "paragraphs": [ - "Kurt Baumann empfing in einem gläsernen Büro, zu glatt, zu aufgeräumt. „Furchtbar, was passiert ist“, sagte er, die Hände zu fest auf der Tischplatte.", - "Sein Blick flackerte, als das Wort „Versicherung“ fiel. Gerüchte über Investitionen, die ins Wanken geraten waren, verdichteten sich zu Schatten an der Wand.", - "„Ich war zu Hause“, behauptete er. „Fragen Sie… keinen.“ Ein dünnes Lächeln. Lügen riechen im Nebel süß." - ], - "choices": [ - { "label": "Konten und Verträge prüfen", "targetId": "kap6_accounts" }, - { "label": "Baumann konfrontieren", "targetId": "kap6_confront_partner" } - ] - }, - { - "id": "kap5_return_clara", - "title": "Kapitel 5 – Zurück zu Clara", - "paragraphs": [ - "Clara saß mit einem Becher kalten Tees am Fenster. „Ich habe ihn geliebt“, sagte sie. „Aber er hat uns alle wie Figuren behandelt.“", - "Sie reichte eine Skizze, die Hohenberg lachend zeigte, selbstgefällig. „Er war nicht nur Opfer.“", - "Ihre Stimme gewann an Ruhe, als sie von ihren Plänen sprach – wegzugehen, neu zu beginnen." - ], - "choices": [ - { "label": "Clara vorläufig entlasten", "targetId": "kap6_clearing_clara" }, - { "label": "Weitere Spuren im Haus suchen", "targetId": "kap6_continue" } - ] - }, - { - "id": "kap5_phone_trace", - "title": "Kapitel 5 – Prepaid-Spur", - "paragraphs": [ - "Die Nummer führte zu einem Automatenshop, keine Auskunft. Die Funkzellenanalyse ergab Bewegungen rund um den Dienstbotentrakt und den nördlichen Park.", - "Ein Datensatz schnitt sich mit den Zeiten des Butlerschichtplans – und mit dem Auto von Baumann, das in der Nähe geparkt gewesen sein musste.", - "Zwei Welten trafen sich im Schatten: Pflicht und Profit." - ], - "choices": [ - { "label": "Butlers Route prüfen", "targetId": "kap6_butler_route" }, - { "label": "„E.“ identifizieren (Erpresser?)", "targetId": "kap6_blackmailer" } - ] - }, - { - "id": "kap5_sms", - "title": "Kapitel 5 – Der Globus", - "paragraphs": [ - "Der schwere Globus im Salon ließ sich öffnen. Im Hohlraum: ein kleiner Messingschlüssel, alt, mit eingraviertem Wappen – H für Hohenberg.", - "Anhaftungen rochen nach Wein und etwas Bitterem. Wer den Schlüssel kannte, kannte das Haus.", - "Eine eingeritzte Markierung im Holz: „G2“. Kellerreihe?" - ], - "choices": [ - { "label": "Globus-Hinweis im Keller prüfen", "targetId": "kap4_cellar" }, - { "label": "Fingerabdrücke sichern", "targetId": "kap6_compare_prints" } - ] - }, - { - "id": "kap5_chem", - "title": "Kapitel 5 – Chemische Spuren", - "paragraphs": [ - "Die Lappen rochen stark nach Terpentin, doch auch nach etwas Pflanzlichem. Ein Abgleich mit dem Labor: Keine Digitalis-Spuren im Atelier.", - "Die Farbe an Claras Händen war frisch – aber Farbreste erzählen keine Morde." - ], - "choices": [ - { "label": "Digitalis-Bezug über Apotheken prüfen", "targetId": "kap6_pharma" }, - { "label": "Turpentinspuren weiterverfolgen", "targetId": "kap6_turpentine" } - ] - }, - { - "id": "kap5_calendar", - "title": "Kapitel 5 – Der Kalender", - "paragraphs": [ - "„E.“ tauchte mehrfach in Claras Kalender auf, zuletzt am Tatabend. Egon Reiter? Oder jemand anderes?", - "Daneben eine Summe, grob überschlagen – Schulden? Schweigegeld? Liebe ist selten sauber." - ], - "choices": [ - { "label": "„E.“ identifizieren", "targetId": "kap6_blackmailer" }, - { "label": "Zeitleiste präzisieren", "targetId": "kap6_timeline" } - ] - }, - { - "id": "kap5_vantage", - "title": "Kapitel 5 – Standpunkt im Garten", - "paragraphs": [ - "Der Punkt an der Hecke gab den Blick frei. Zigarettenstummel mit Lippenabdruck, filterlos. Egon Reiter bevorzugte diese Marke.", - "Ein zerdrücktes Bonbonpapier lag daneben – Hustenbonbons. Der Nebel kratzte in der Kehle aller, die hier warteten." - ], - "choices": [ - { "label": "Egon Reiter erneut befragen", "targetId": "kap6_neighbor_egon" }, - { "label": "Observation einrichten", "targetId": "kap6_stakeout" } - ] - }, - { - "id": "kap5_window_recheck", - "title": "Kapitel 5 – Verriegelung, zweiter Blick", - "paragraphs": [ - "Die Kratzer an der Verriegelung wirkten gesetzt. Kein Hebeln, eher eine gespielte Spur – jemand wollte den Einbruch vortäuschen.", - "Im Innenrahmen klebte ein Hauch von Hautschuppen – von innen berührt." - ], - "choices": [ - { "label": "Innen-Täter annehmen", "targetId": "kap6_inside_job" }, - { "label": "Schlüsselverwaltung prüfen", "targetId": "kap6_keys" } - ] - }, - { - "id": "kap5_pharma", - "title": "Kapitel 5 – Apothekenrundgang", - "paragraphs": [ - "Zwei Apotheken bestätigten jüngste Digitalis-Verkäufe – auf Rezept. Ein Name fiel: Kurt Baumann, im Auftrag für einen „kranken Onkel“.", - "Die Rezeptkopie zeigte einen Arztstempel, echt, aber alt. Jemand nutzte Schlupflöcher." - ], - "choices": [ - { "label": "Durchsuchungsbefehl für Baumann beantragen", "targetId": "kap6_search_partner" }, - { "label": "Baumann konfrontieren", "targetId": "kap6_confront_partner" } - ] - }, - { - "id": "kap5_medicine_cabinet", - "title": "Kapitel 5 – Hausapotheke", - "paragraphs": [ - "Im Schrank fehlte ein Fläschchen. Der Eindruck im Staub verriet es. Auf der Innenseite: ein fettiger Fingerabdruck, nicht Claras.", - "Ein Etikettenrest klebte an der Schranktür: Digitalis – abgerissen." - ], - "choices": [ - { "label": "Butler Johann konfrontieren", "targetId": "kap6_confront_butler" }, - { "label": "Fingerabdrücke vergleichen", "targetId": "kap6_compare_prints" } - ] - }, - { - "id": "kap5_cards", - "title": "Kapitel 5 – Karteikarten", - "paragraphs": [ - "Die Weinkartei zeigte eine seltsame Umbuchung am Vortag. Eine besonders gelobte Flasche war gegen eine gleich aussehende getauscht.", - "Die Handschrift passte nicht zu Clara. Eher eckig, gedrungen – männlich, geübt." - ], - "choices": [ - { "label": "Sommelier/Weinhändler befragen", "targetId": "kap6_sommelier" }, - { "label": "Fingerabdrücke im Keller vergleichen", "targetId": "kap6_compare_prints" } - ] - }, - { - "id": "kap5_cctv", - "title": "Kapitel 5 – Kamerasicht", - "paragraphs": [ - "Eine alte Kamera im Seitengang zeichnete in schlechter Qualität. Um 21:22 Uhr huschte eine Gestalt vorbei – dunkler Mantel, breite Schultern.", - "Eine auffällige Ziernaht am linken Ärmel war erkennbar. Luxusmarke. Baumann trug etwas Ähnliches." - ], - "choices": [ - { "label": "Mantel sicherstellen", "targetId": "kap6_coat" }, - { "label": "Fahrzeugdaten prüfen", "targetId": "kap6_car" } - ] - }, - { - "id": "kap5_shed", - "title": "Kapitel 5 – Gartenhaus", - "paragraphs": [ - "Im Schrank standen Stiefel, Größe 44, frisch verschlammt. Daneben ein alter Eimer mit Lehm, der die gleichen Einschlüsse wie am Fenster zeigte.", - "Ein Lappen roch nach Rotwein, als hätte jemand Spritzer abgewischt." - ], - "choices": [ - { "label": "Butler konfrontieren", "targetId": "kap6_confront_butler" }, - { "label": "Spurenabgleich durchführen", "targetId": "kap6_compare_prints" } - ] - }, - { - "id": "kap5_gate", - "title": "Kapitel 5 – Seitenpforte", - "paragraphs": [ - "Die Kamera an der Pforte erfasste Nummernschilder. Um 21:31 Uhr fuhr ein Wagen vor – Kennzeichen teilverdeckt, aber eindeutig die Serie eines Mietwagens.", - "Die Mietdaten führten zu einer Buchung auf einen Strohmann – mit Kreditkarte, die Baumann öfter verwendete." - ], - "choices": [ - { "label": "Baumann verhaften", "targetId": "kap6_arrest_partner" }, - { "label": "Noch Beweise bündeln (Konten)", "targetId": "kap6_accounts" } - ] - }, - { - "id": "kap5_butler", - "title": "Kapitel 5 – Butler Johann", - "paragraphs": [ - "Johann, der Butler, war ein Mann ohne Schnickschnack. Der Stock im Flur gehörte ihm – seit einer Knieverletzung.", - "„Ich diene dem Haus“, sagte er. „Und ich diene der Wahrheit.“ Sein Blick wich nicht aus, aber er mochte Clara.", - "Ein Schlüsselbund klirrte an seiner Hüfte. Einer fehlte – der mit dem Wappen?" - ], - "choices": [ - { "label": "Alibi von Johann prüfen", "targetId": "kap6_butler_alibi" }, - { "label": "Dienerquartier durchsuchen", "targetId": "kap6_search_quarters" } - ] - }, - { - "id": "kap6_accounts", - "title": "Kapitel 6 – Konten und Verträge", - "paragraphs": [ - "Die Konten offenbarten Risse: riskante Papiere, die ins Minus kippten. Baumann stand mit dem Rücken zur Wand.", - "Eine Lebensversicherung auf {{opfer}} – Begünstigter: die Firma, vertreten durch Baumann. Die Summe: genug, um Löcher zu stopfen." - ], - "choices": [ - { "label": "Durchsuchungsbefehl beantragen", "targetId": "kap6_search_partner" }, - { "label": "Baumann erneut konfrontieren", "targetId": "kap6_confront_partner" } - ] - }, - { - "id": "kap6_confront_partner", - "title": "Kapitel 6 – Konfrontation", - "paragraphs": [ - "„Sie haben nichts“, lächelte Baumann dünn. „Nur Vermutungen.“ Doch sein Blick huschte, als die Apotheke, das Rezept und die Kamera zur Sprache kamen.", - "Schweiß perlte, als der Globusschlüssel erwähnt wurde. „Das ist absurd“, presste er hervor." - ], - "choices": [ - { "label": "Festnehmen", "targetId": "kap_end_partner_guilty" }, - { "label": "Weitere Beweise sammeln", "targetId": "kap6_accounts" } - ] - }, - { - "id": "kap6_clearing_clara", - "title": "Kapitel 6 – Clara entlastet", - "paragraphs": [ - "Zeugen vom Theater, Uhrzeiten, Wege – die Zeitleiste entlastete Clara weitgehend. Nichts sprach für Gift in ihren Händen.", - "Sie weinte, aber da war auch Wut. Auf ein System, das sie klein hielt. Keine Mörderin – eine Gefangene." - ], - "choices": [ - { "label": "Fokus auf Baumann", "targetId": "kap5_partner" }, - { "label": "Butler erneut sprechen", "targetId": "kap5_butler" } - ] - }, - { - "id": "kap6_continue", - "title": "Kapitel 6 – Weitere Spuren", - "paragraphs": [ - "Das Haus atmete Geschichten. Jeder Raum flüsterte eine Spur, doch nicht jede führte ans Ziel.", - "Manchmal liegt die Wahrheit im Keller – oder beim Nachbar, der zu viel sieht." - ], - "choices": [ - { "label": "Weinkeller erneut prüfen", "targetId": "kap4_cellar" }, - { "label": "Nachbar erneut befragen", "targetId": "kap4_neighbor" }, - { "label": "Fall an Kollegen abgeben (Ende offen)", "targetId": "kap_end_case_unsolved" } - ] - }, - { - "id": "kap6_butler_route", - "title": "Kapitel 6 – Johanns Wege", - "paragraphs": [ - "Die Zeiterfassung zeigte Johann zur Tatzeit in der Küche und beim Gästezimmer – mehrere Zeugen, darunter die Köchin.", - "Die Funkzellendaten seines alten Telefons passten: kein Abweichen. Der Stock war alt, nicht die Spur." - ], - "choices": [ - { "label": "Butler entlasten", "targetId": "kap6_clearing_butler" }, - { "label": "Baumann verfolgen", "targetId": "kap5_partner" } - ] - }, - { - "id": "kap6_blackmailer", - "title": "Kapitel 6 – „E.“ der Erpresser", - "paragraphs": [ - "„E.“ war Egon Reiter – der Nachbar. Er hatte Hohenberg und Clara beobachtet, um Geld zu erpressen. Aber Gift? Nein. Er mochte Drohungen, keine Endgültigkeit.", - "Seine Aussage brachte das Puzzle voran: Er sah Baumann am Zaun – nervös, hastig, als der Nebel dichter wurde." - ], - "choices": [ - { "label": "Egon streng verhören", "targetId": "kap6_neighbor_egon" }, - { "label": "Innen-Täter-Spur stärken", "targetId": "kap6_inside_job" } - ] - }, - { - "id": "kap6_globe", - "title": "Kapitel 6 – Der Schlüsselhinweis", - "paragraphs": [ - "Der Globus-Schlüssel öffnete ein spezifisches Fach im Kellerregal – G2. Dort lag eine identische Flasche wie am Tatort, leer.", - "Damit war klar: Jemand hatte bewusst vertauscht." - ], - "choices": [ - { "label": "Keller nochmals sichern", "targetId": "kap4_cellar" }, - { "label": "Fingerabdrücke vergleichen", "targetId": "kap6_compare_prints" } - ] - }, - { - "id": "kap6_servant", - "title": "Kapitel 6 – Dienerflur", - "paragraphs": [ - "Im Dienerflur roch es nach Bohnerwachs und altem Kaffee. Ein Spind stand offen – sauber, ordentlich, ohne Hinweise.", - "Ein Zettel an der Pinnwand: Lieferdienst für den Abend abgesagt – Unterschrift unleserlich." - ], - "choices": [ - { "label": "Quartier systematisch durchsuchen", "targetId": "kap6_search_quarters" }, - { "label": "Johann erneut sprechen", "targetId": "kap6_butler_alibi" } - ] - }, - { - "id": "kap6_pharma", - "title": "Kapitel 6 – Apothekenabgleich", - "paragraphs": [ - "Die Apothekerin erinnerte sich: „Der Herr war nervös, sagte, sein Onkel brauche das. Er hatte feine Manschettenknöpfe.“", - "Das passte zu Baumann. Ein Mosaikstein mehr." - ], - "choices": [ - { "label": "Durchsuchung bei Baumann", "targetId": "kap6_search_partner" }, - { "label": "Konfrontation vorbereiten", "targetId": "kap6_confront_partner" } - ] - }, - { - "id": "kap6_turpentine", - "title": "Kapitel 6 – Spur im Atelier", - "paragraphs": [ - "Turpentin ist scharf, aber kein Gift wie Digitalis. Claras Atelier war ein Ort der Flucht – nicht des Mordes.", - "Die Spur verlor an Kraft. Zeit, den Blick zu heben." - ], - "choices": [ - { "label": "Zum Laborergebnis zurück", "targetId": "kap4_lab_result" }, - { "label": "Baumann prüfen", "targetId": "kap5_partner" } - ] - }, - { - "id": "kap6_neighbor_egon", - "title": "Kapitel 6 – Egons Aussage", - "paragraphs": [ - "Egon gab nach. „Ja, ich hab' geguckt. Ich hab' gedacht, ich krieg' was raus. Aber der mit dem Mantel – das war nicht die Frau.“", - "„Breite Schultern. Hat was fallen lassen am Zaun.“ Ein Metallklang, ein Schlüssel?" - ], - "choices": [ - { "label": "Aussage protokollieren", "targetId": "kap6_accounts" }, - { "label": "Observation verstärken", "targetId": "kap6_stakeout" } - ] - }, - { - "id": "kap6_stakeout", - "title": "Kapitel 6 – Observation", - "paragraphs": [ - "Die Nacht atmete Nebel. Gegen Mitternacht bewegte sich eine Gestalt im Garten – dunkler Mantel, gleiche Ziernaht.", - "Er hob eine Bodenplatte, holte ein Kuvert. Dokumente. Gier hat einen Rhythmus." - ], - "choices": [ - { "label": "Zugreifen", "targetId": "kap_end_partner_guilty" }, - { "label": "Weiter beobachten", "targetId": "kap6_car" } - ] - }, - { - "id": "kap6_inside_job", - "title": "Kapitel 6 – Der Innentäter", - "paragraphs": [ - "Keine echten Einbruchsspuren, Schlüssel im Spiel, bewusst vertauschte Flaschen. Der Täter kannte das Haus.", - "Wer profitierte – und wer hatte Zugang? Butler? Clara? Oder Baumann mit Hilfe?" - ], - "choices": [ - { "label": "Schlüsselverwaltung prüfen", "targetId": "kap6_keys" }, - { "label": "Personalakten durchsuchen", "targetId": "kap6_search_quarters" } - ] - }, - { - "id": "kap6_keys", - "title": "Kapitel 6 – Schlüsselprotokoll", - "paragraphs": [ - "Ein Hauptschlüssel fehlte kurzzeitig in der Liste – vermerkt mit einer unsauberen Signatur. Am nächsten Morgen wieder aufgeführt.", - "Später fand sich ein identischer Schlüssel in einem Mantel – nicht im Dienertrakt." - ], - "choices": [ - { "label": "Durchsuchung bei Baumann", "targetId": "kap6_search_partner" }, - { "label": "Butler befragen", "targetId": "kap6_confront_butler" } - ] - }, - { - "id": "kap6_search_partner", - "title": "Kapitel 6 – Durchsuchung bei Baumann", - "paragraphs": [ - "In seinem Schrank: ein Mantel mit der gleichen Ziernaht. In der Innentasche: ein Fläschchen mit Digitalis-Resten.", - "In einer Schublade: Weinkarteikarten der Villa – fotografiert, markiert. Und ein Schlüssel mit dem Hohenberg-Wappen." - ], - "choices": [ - { "label": "Festnehmen", "targetId": "kap_end_partner_guilty" }, - { "label": "Presse informieren (trotzdem Festnahme)", "targetId": "kap_end_partner_guilty" } - ] - }, - { - "id": "kap6_confront_butler", - "title": "Kapitel 6 – Gespräch mit Johann", - "paragraphs": [ - "Johann stand aufrecht. „Ich habe den Schlüssel verliehen, ja. An Herrn Baumann. Er sagte, es ginge um eine Überraschung für den Herrn.“", - "Scham und Zorn rangen in seiner Stimme. „Ich habe Fehler gemacht. Aber ich töte nicht.“" - ], - "choices": [ - { "label": "Johann festnehmen (falsches Ende)", "targetId": "kap_end_butler_guilty" }, - { "label": "Aussage sichern und Baumann stellen", "targetId": "kap6_search_partner" } - ] - }, - { - "id": "kap6_compare_prints", - "title": "Kapitel 6 – Spurensicherung", - "paragraphs": [ - "Die Abdrücke vom Globus und von der Flasche ergaben ein klares Bild: Baumanns Finger – dazu Textilfasern seines Mantels am Gartenzaun.", - "Claras Spuren fanden sich nur dort, wo sie sein mussten. Johann blieb in den Rändern." - ], - "choices": [ - { "label": "Baumann festnehmen", "targetId": "kap_end_partner_guilty" }, - { "label": "Zeitleiste mit Clara final prüfen", "targetId": "kap6_timeline" } - ] - }, - { - "id": "kap6_sommelier", - "title": "Kapitel 6 – Weinhändler", - "paragraphs": [ - "Der Händler erinnerte sich: „Ein Mann bestellte zwei identische Etiketten, wollte eine Flasche ‚aufhübschen‘. Teure Spielchen.“", - "Die Beschreibung passte erneut auf Baumann. Fingerzeige wurden Fingerabdrücke." - ], - "choices": [ - { "label": "Aussage protokollieren", "targetId": "kap6_accounts" }, - { "label": "Kellerkameras erneut prüfen", "targetId": "kap5_cctv" } - ] - }, - { - "id": "kap6_coat", - "title": "Kapitel 6 – Der Mantel", - "paragraphs": [ - "Im Stoffsaum: Bordeauxspritzer, im Futter: eine feine Staubspur vom Keller. In der Innentasche: der fehlende Schlüssel.", - "Der Mantel erzählte alles, was sein Träger verschwieg." - ], - "choices": [ - { "label": "Spurensicherung/DNA", "targetId": "kap6_compare_prints" }, - { "label": "Sofortige Festnahme", "targetId": "kap_end_partner_guilty" } - ] - }, - { - "id": "kap6_car", - "title": "Kapitel 6 – Fahrzeugspur", - "paragraphs": [ - "Maut- und Kameradaten ergaben eine Linie durch die Nacht. Der Mietwagen kreiste um die Villa wie ein hungriger Wolf.", - "Am Ende stand er dort, wo der Nebel am dicksten war." - ], - "choices": [ - { "label": "Zugreifen", "targetId": "kap_end_partner_guilty" }, - { "label": "Noch einmal observieren", "targetId": "kap6_stakeout" } - ] - }, - { - "id": "kap6_butler_alibi", - "title": "Kapitel 6 – Johanns Alibi", - "paragraphs": [ - "Die Köchin bestätigte: „Er war hier, hat Holz gebracht, Tee gekocht. Der Mann ist pünktlich wie die Uhr.“", - "Johanns Augen wurden weich, als der Name Clara fiel. Loyalität ist kein Verbrechen." - ], - "choices": [ - { "label": "Butler entlasten", "targetId": "kap6_clearing_butler" }, - { "label": "Blick auf Baumann richten", "targetId": "kap5_partner" } - ] - }, - { - "id": "kap6_search_quarters", - "title": "Kapitel 6 – Dienerquartier", - "paragraphs": [ - "Die Zimmer waren schlicht. In einem Schrank: Stiefel mit Lehm – aber älterer Schmutz, getrocknet, nicht von heute.", - "Kein Gift, keine Karten, keine Schlüssel. Nur das Leben hinter den Kulissen." - ], - "choices": [ - { "label": "Spuren mit Schuhgröße abgleichen", "targetId": "kap6_compare_prints" }, - { "label": "Butler erneut vernehmen", "targetId": "kap6_confront_butler" } - ] - }, - { - "id": "kap6_clearing_butler", - "title": "Kapitel 6 – Johann entlastet", - "paragraphs": [ - "Die Spuren entlasteten Johann. Seine Fehler waren menschlich, nicht mörderisch.", - "Bleibt, wer vom Tod profitierte – und Zugang hatte." - ], - "choices": [ - { "label": "Auf Baumann konzentrieren", "targetId": "kap5_partner" }, - { "label": "Egon Reiter erneut anhören", "targetId": "kap6_neighbor_egon" } - ] - }, - { - "id": "kap6_arrest_partner", - "title": "Kapitel 6 – Zugriff", - "paragraphs": [ - "Als die Handschellen klickten, blickte Baumann lange in den Nebel. „Er hätte mich ruiniert“, sagte er tonlos.", - "Gier ist ein stiller Lehrmeister. Und tödlich, wenn sie Wein trinkt." - ], - "choices": [ - { "label": "Fall abschließen", "targetId": "kap_end_partner_guilty" } - ] - }, - { - "id": "kap6_timeline", - "title": "Kapitel 6 – Zeitleiste", - "paragraphs": [ - "Minuten wurden zu Markierungen. Claras Zeiten hielten, Baumanns bröckelten. Der Wein wurde gegen 21:15 manipuliert.", - "Um 21:22 die Kameragestalt, um 21:31 der Wagen. Der Tod trat leise um 21:45 ein." - ], - "choices": [ - { "label": "Festnahme bei Baumann", "targetId": "kap_end_partner_guilty" }, - { "label": "Clara endgültig entlasten", "targetId": "kap6_clearing_clara" } - ] - }, - { - "id": "kap_end_partner_guilty", - "title": "Epilog – Der Mantel des Nebels", - "paragraphs": [ - "Kurt Baumann gestand in Stücken, dann im Ganzen: Er hatte die Flaschen getauscht, das Gift dosiert, den Einbruch inszeniert. Schulden, Versicherung, kalte Logik.", - "Clara verließ die Villa Wochen später. Johann blieb und hütete die leisen Räume, in denen wieder Holz knisterte und Tee duftete.", - "In {{stadt}} blieb der Nebel – aber die Geschichten fanden ihren Weg. {{detektiv}} schrieb einen knappen Bericht: „Der Wein war schwer. Die Wahrheit nicht.“" - ], - "choices": [] - }, - { - "id": "kap_end_butler_guilty", - "title": "Epilog – Der falsche Schluss", - "paragraphs": [ - "Johann wurde abgeführt. Die Presse liebte das Bild vom Diener, der zu weit ging. Wochen später brachen die Indizien gegen ihn zusammen.", - "Die Wahrheit wartete im Mantel eines anderen. Doch manche Fehler lassen sich nicht rückgängig machen.", - "Im Nebel verlieren sich nicht nur Schritte – auch Geister der Gerechtigkeit." - ], - "choices": [] - }, - { - "id": "kap_end_case_unsolved", - "title": "Epilog – Offenes Ende", - "paragraphs": [ - "Der Fall wanderte in eine Mappe. Die Mappe in ein Regal. Die Nacht in {{stadt}} blieb feucht, und der Nebel schwieg.", - "Manchmal ist Schweigen die grausamste aller Antworten. Doch Geschichten enden selten – sie warten nur." - ], - "choices": [] - } - ] -} \ No newline at end of file From d52cafa103ceca58d02560163cf608c29e756ad7 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 02:14:21 +0200 Subject: [PATCH 164/569] CSharpBible --- CSharpBible/Data/Data.sln | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Data/Data.sln b/CSharpBible/Data/Data.sln index 5c4461f4d..965cafa10 100644 --- a/CSharpBible/Data/Data.sln +++ b/CSharpBible/Data/Data.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11012.119 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RepoMigrator", "RepoMigrator", "{02E4BF81-885D-4961-B834-E15FB392BACA}" EndProject @@ -53,6 +53,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Pr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PdfExample", "DocumentUtils\PdfExample\PdfExample.csproj", "{1791F8EA-B4E9-36F3-9786-CC82AA18DD64}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Story.Base", "Story.Base\Story.Base.csproj", "{885CCAD9-92EB-46CE-A448-2564CF85EF89}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Xaml", "DocumentUtils\Document.Xaml\Document.Xaml.csproj", "{8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -267,6 +271,30 @@ Global {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x64.Build.0 = Release|Any CPU {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x86.ActiveCfg = Release|Any CPU {1791F8EA-B4E9-36F3-9786-CC82AA18DD64}.Release|x86.Build.0 = Release|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Debug|x64.ActiveCfg = Debug|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Debug|x64.Build.0 = Debug|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Debug|x86.ActiveCfg = Debug|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Debug|x86.Build.0 = Debug|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Release|Any CPU.Build.0 = Release|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Release|x64.ActiveCfg = Release|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Release|x64.Build.0 = Release|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Release|x86.ActiveCfg = Release|Any CPU + {885CCAD9-92EB-46CE-A448-2564CF85EF89}.Release|x86.Build.0 = Release|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Debug|x64.ActiveCfg = Debug|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Debug|x64.Build.0 = Debug|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Debug|x86.ActiveCfg = Debug|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Debug|x86.Build.0 = Debug|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Release|Any CPU.Build.0 = Release|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Release|x64.ActiveCfg = Release|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Release|x64.Build.0 = Release|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Release|x86.ActiveCfg = Release|Any CPU + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -286,6 +314,7 @@ Global {A2862C98-D5FA-429A-AA92-DA789A26B42C} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} {B50FAEFE-A885-AB90-75D1-9A7F05117452} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} {1791F8EA-B4E9-36F3-9786-CC82AA18DD64} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} + {8ECAA2B8-E639-5358-3D70-EFA069F9FC6B} = {C72F7201-74F9-66F9-5C2C-ABF0F08448DC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3170725E-BCC0-429F-98D9-04E76E850A0B} From 1148e70601e9a7b946e8dc4e675700d2a534c377 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 12:22:12 +0200 Subject: [PATCH 165/569] AboutEx --- .../Adapters/OdfDocumentReader.cs | 18 ++++ .../Document.Odf/Models/OdfContentBase.cs | 95 +++++++++++++++++++ .../Models/OdfDefaultFontStyle.cs | 17 ++++ .../Document.Odf/Models/OdfHeadline.cs | 18 ++++ .../Document.Odf/Models/OdfInlineElements.cs | 20 ++++ .../Document.Odf/Models/OdfNamespaces.cs | 12 +++ .../Document.Odf/Models/OdfNodeBase.cs | 17 ++++ .../Document.Odf/Models/OdfParagraph.cs | 21 ++++ .../Document.Odf/Models/OdfSection.cs | 25 +++++ .../Document.Odf/Models/OdfSpan.cs | 53 +++++++++++ .../Document.Odf/Models/OdfStyle.cs | 36 +++++++ .../Document.Odf/Models/OdfTOC.cs | 40 ++++++++ .../DocumentUtils/Document.Odf/OdfDocument.cs | 64 +++++++++++++ .../Document.Odf/OdfTextDocument.cs | 91 ++++++++++++++++++ .../Document.Odf/Parsing/OdfBlockParser.cs | 89 +++++++++++++++++ .../Document.Odf/Parsing/OdfTextExtractor.cs | 72 ++++++++++++++ 16 files changed, 688 insertions(+) create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Adapters/OdfDocumentReader.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfContentBase.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfDefaultFontStyle.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfHeadline.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfInlineElements.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNamespaces.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNodeBase.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfParagraph.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSection.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSpan.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfStyle.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTOC.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/OdfDocument.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/OdfTextDocument.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfBlockParser.cs create mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfTextExtractor.cs diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Adapters/OdfDocumentReader.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Adapters/OdfDocumentReader.cs new file mode 100644 index 000000000..841144135 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Adapters/OdfDocumentReader.cs @@ -0,0 +1,18 @@ +using Document.Base.Models.Interfaces; +using Document.Odf.Parsing; + +namespace Document.Odf.Adapters; + +public sealed class OdfDocumentReader +{ + public bool CanRead(string path) => path != null && path.EndsWith(".odt", StringComparison.OrdinalIgnoreCase); + + public IUserDocument ReadIntoNew(string path, CancellationToken ct = default) + { + using var odf = OdfDocument.Open(path); + var content = odf.ReadContentXml(); + var doc = new OdfTextDocument(); + OdfBlockParser.Populate(doc, content); + return doc; + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfContentBase.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfContentBase.cs new file mode 100644 index 000000000..c0563c0e2 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfContentBase.cs @@ -0,0 +1,95 @@ +using System.Text; +using Document.Base.Models; +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public abstract class OdfContentBase : OdfNodeBase, IDocContent +{ + private readonly StringBuilder _text = new(); + + public virtual string TextContent + { + get => _text.ToString(); + set + { + _text.Clear(); + if (!string.IsNullOrEmpty(value)) _text.Append(value); + } + } + + public void AppendText(string text) + { + if (!string.IsNullOrEmpty(text)) _text.Append(text); + } + + public virtual IDocContent AddLineBreak() + { + AddChild(new OdfLineBreak()); + return this; + } + + public virtual IDocContent AddNBSpace(IDocFontStyle docFontStyle) + { + AddChild(new OdfNbSpace()); + return this; + } + + public virtual IDocContent AddTab(IDocFontStyle docFontStyle) + { + AddChild(new OdfTab()); + return this; + } + + public virtual IDocSpan AddSpan(IDocFontStyle docFontStyle) + => (IDocSpan)AddChild(new OdfSpan(docFontStyle)); + + public virtual IDocSpan AddSpan(string text, IList docFontStyle) + { + var span = new OdfSpan(OdfFontStyle.Default); + span.TextContent = text; + return (IDocSpan)AddChild(span); + } + + public virtual IDocSpan AddSpan(string text, IDocFontStyle docFontStyle) + { + var span = new OdfSpan(docFontStyle) { TextContent = text }; + return (IDocSpan)AddChild(span); + } + + public virtual IDocSpan AddLink(string Href, IDocFontStyle docFontStyle) + { + var link = new OdfSpan(docFontStyle) { IsLink = true, Href = Href }; + return (IDocSpan)AddChild(link); + } + + public abstract IDocStyleStyle GetStyle(); + + public virtual string GetTextContent(bool xRecursive = true) + { + if (!xRecursive) return TextContent; + + var sb = new StringBuilder(); + sb.Append(TextContent); + foreach (var c in Nodes) + { + if (c is IDocContent dc) + { + sb.Append(dc.GetTextContent(true)); + } + } + return sb.ToString(); + } + + public IDocSpan AddSpan(string text, EFontStyle eFontStyle) + { + return eFontStyle switch + { + EFontStyle.Bold => AddSpan(text, OdfFontStyle.BoldStyle), + EFontStyle.Italic => AddSpan(text, OdfFontStyle.ItalicStyle), + EFontStyle.Underline => AddSpan(text, OdfFontStyle.UnderlineStyle), + EFontStyle.Strikeout => AddSpan(text, OdfFontStyle.StrikeoutStyle), + _ => AddSpan(text, OdfFontStyle.Default), + }; + } +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfDefaultFontStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfDefaultFontStyle.cs new file mode 100644 index 000000000..39f9596f4 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfDefaultFontStyle.cs @@ -0,0 +1,17 @@ +using Document.Base.Models.Interfaces; +namespace Document.Odf.Models; +// Minimaler Default-Style für Parser-Operationen (Tabs, Links, Spans) +internal sealed class OdfDefaultFontStyle : IDocFontStyle +{ + public static readonly OdfDefaultFontStyle Instance = new(); + private OdfDefaultFontStyle() { } + + public string? Name => null; + public bool Bold => false; + public bool Italic => false; + public bool Underline => false; + public bool Strikeout => false; + public string? Color => null; + public string? FontFamily => null; + public double? FontSizePt => null; +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfHeadline.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfHeadline.cs new file mode 100644 index 000000000..56958c560 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfHeadline.cs @@ -0,0 +1,18 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfHeadline : OdfContentBase, IDocHeadline +{ + public int Level { get; } + + public string Id { get; } + + public OdfHeadline(int level, string id) + { + Level = Math.Clamp(level, 1, 6); + Id = id; + } + + public override IDocStyleStyle GetStyle() => new OdfStyle($"H{Level}"); +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfInlineElements.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfInlineElements.cs new file mode 100644 index 000000000..e97b740dd --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfInlineElements.cs @@ -0,0 +1,20 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfLineBreak : OdfContentBase +{ + public override IDocStyleStyle GetStyle() => new OdfStyle(); +} + +public sealed class OdfNbSpace : OdfContentBase +{ + public override IDocStyleStyle GetStyle() => new OdfStyle(); + public override string GetTextContent(bool xRecursive = true) => "\u00A0"; +} + +public sealed class OdfTab : OdfContentBase +{ + public override IDocStyleStyle GetStyle() => new OdfStyle(); + public override string GetTextContent(bool xRecursive = true) => "\t"; +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNamespaces.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNamespaces.cs new file mode 100644 index 000000000..12dc45f97 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNamespaces.cs @@ -0,0 +1,12 @@ +using System.Xml.Linq; +namespace Document.Odf.Models; + +public static class OdfNamespaces +{ + public static readonly XNamespace Office = "urn:oasis:names:tc:opendocument:xmlns:office:1.0"; + public static readonly XNamespace Text = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"; + public static readonly XNamespace Draw = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; + public static readonly XNamespace Style = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"; + public static readonly XNamespace Table = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; + public static readonly XNamespace XLink = "http://www.w3.org/1999/xlink"; +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNodeBase.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNodeBase.cs new file mode 100644 index 000000000..f9abe7fbe --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfNodeBase.cs @@ -0,0 +1,17 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +// Simple implementations of interfaces just to make parsing possible +public abstract class OdfNodeBase : IDocElement +{ + public IDictionary Attributes { get; } = new Dictionary(); + public IList Nodes { get; } = new List(); + public IDOMElement AddChild(IDOMElement element) { Nodes.Add(element); return element; } + public string? GetAttribute(string name) { Attributes.TryGetValue(name, out var v); return v; } + + public IDocElement AppendDocElement(Enum aType) => throw new NotSupportedException(); + public IDocElement AppendDocElement(Enum aType, Type aClass) => throw new NotSupportedException(); + public IDocElement AppendDocElement(Enum aType, Enum aAttribute, string value, Type aClass, string? Id) => throw new NotSupportedException(); + public IEnumerable Enumerate() => Nodes.OfType(); +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfParagraph.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfParagraph.cs new file mode 100644 index 000000000..5f9ebe12d --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfParagraph.cs @@ -0,0 +1,21 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfParagraph : OdfContentBase, IDocParagraph +{ + public string? StyleName { get; } + + public OdfParagraph(string? styleName = null) + { + StyleName = styleName; + } + + public IDocSpan AddBookmark(string Id, IDocFontStyle docFontStyle) + { + var span = new OdfSpan(docFontStyle) { Id = Guid.NewGuid().ToString("N") }; + return (IDocSpan)AddChild(span); + } + + public override IDocStyleStyle GetStyle() => new OdfStyle(StyleName); +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSection.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSection.cs new file mode 100644 index 000000000..a5e859b1f --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSection.cs @@ -0,0 +1,25 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfSection : OdfNodeBase, IDocSection +{ + public IDocParagraph AddParagraph(string ATextStyleName) + { + var p = new OdfParagraph(ATextStyleName); + return (IDocParagraph)AddChild(p); + } + + public IDocHeadline AddHeadline(int aLevel, string Id) + { + var h = new OdfHeadline(aLevel, Id); + return (IDocHeadline)AddChild(h); + } + + public IDocTOC AddTOC(string aName, int aLevel) + { + var toc = new OdfTOC(aName, aLevel); + AddChild(toc); + return toc; + } +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSpan.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSpan.cs new file mode 100644 index 000000000..6dd0ac091 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfSpan.cs @@ -0,0 +1,53 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfSpan : OdfContentBase, IDocSpan +{ + public IDictionary Attributes { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + public IDocFontStyle FontStyle { get; private set; } + public bool IsLink { get; set; } + public string? Href + { + get => Attributes.TryGetValue("href", out var v) ? v : null; + set { if (value is null) Attributes.Remove("href"); else Attributes["href"] = value; IsLink = value != null; } + } + public string? Id + { + get => Attributes.TryGetValue("id", out var v) ? v : null; + set { if (value is null) Attributes.Remove("id"); else Attributes["id"] = value; } + } + + public OdfSpan(IDocFontStyle style) + { + FontStyle = style; + } + + public override IDocStyleStyle GetStyle() + => new OdfStyle(FontStyle.Name); + + public void SetStyle(object fs) + { + // not used in this minimal implementation + } + + public void SetStyle(IDocFontStyle fs) + { + FontStyle = fs; + } + + public void SetStyle(IUserDocument doc, object aFont) + { + // not used in this minimal implementation + } + + public void SetStyle(IUserDocument doc, IDocFontStyle aFont) + { + FontStyle = aFont; + } + + public void SetStyle(string aStyleName) + { + // not used in this minimal implementation + } +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfStyle.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfStyle.cs new file mode 100644 index 000000000..376ba6343 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfStyle.cs @@ -0,0 +1,36 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfStyle : IDocStyleStyle +{ + public string? Name { get; } + public IDictionary Properties { get; } = new Dictionary(StringComparer.OrdinalIgnoreCase); + + public OdfStyle(string? name = null, IDictionary? properties = null) + { + Name = name; + if (properties != null) + { + foreach (var kv in properties) Properties[kv.Key] = kv.Value; + } + } +} + +public sealed class OdfFontStyle : IDocFontStyle +{ + public string? Name { get; init; } + public bool Bold { get; init; } + public bool Italic { get; init; } + public bool Underline { get; init; } + public bool Strikeout { get; init; } + public string? Color { get; init; } + public string? FontFamily { get; init; } + public double? FontSizePt { get; init; } + + public static readonly OdfFontStyle Default = new(); + public static readonly OdfFontStyle BoldStyle = new() { Name = "Bold", Bold = true }; + public static readonly OdfFontStyle ItalicStyle = new() { Name = "Italic", Italic = true }; + public static readonly OdfFontStyle UnderlineStyle = new() { Name = "Underline", Underline = true }; + public static readonly OdfFontStyle StrikeoutStyle = new() { Name = "Strikeout", Strikeout= true }; +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTOC.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTOC.cs new file mode 100644 index 000000000..bea64b8e4 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTOC.cs @@ -0,0 +1,40 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf.Models; + +public sealed class OdfTOC : OdfContentBase, IDocTOC +{ + public string Name { get; } + public int Level { get; } + + public OdfTOC(string name, int level) + { + Name = name; + Level = Math.Clamp(level, 1, 6); + } + + public override IDocStyleStyle GetStyle() => new OdfStyle("TOC"); + + public void RebuildFrom(IDocSection root) + { + TextContent = string.Empty; + Nodes.Clear(); + + foreach (var h in root.Enumerate().OfType().Where(h => h.Level <= Level)) + { + var p = new OdfParagraph("TOCEntry"); + var anchorText = h.GetTextContent(true); + var span = (OdfSpan)p.AddLink(h.Id, OdfFontStyle.Default); + var id = h.Nodes.OfType().FirstOrDefault(s => !string.IsNullOrEmpty(s.Id))?.Id + ?? Guid.NewGuid().ToString("N"); + if (!h.Nodes.OfType().Any(s => s.Id == id)) + { + var bm = new OdfSpan(OdfFontStyle.Default) { Id = id }; + h.AddChild(bm); + } + span.Href = "#" + id; + span.TextContent = anchorText; + AddChild(p); + } + } +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/OdfDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/OdfDocument.cs new file mode 100644 index 000000000..aca63dce7 --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/OdfDocument.cs @@ -0,0 +1,64 @@ +using System.IO.Compression; +using System.Xml.Linq; + +namespace Document.Odf; + +public sealed class OdfDocument : IAsyncDisposable, IDisposable +{ + private readonly ZipArchive _zip; private bool _disposed; + private OdfDocument(ZipArchive zip) + { + _zip = zip; + } + + public static OdfDocument Open(string path) + { + var fs = File.OpenRead(path); + var zip = new ZipArchive(fs, ZipArchiveMode.Read, leaveOpen: false); + return new OdfDocument(zip); + } + + public static async Task OpenAsync(string path, CancellationToken ct = default) + { + // ZipArchive hat kein echtes Async-Open; Datei async öffnen für IO. + var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 64 * 1024, useAsync: true); + // trotzdem synchrones Zip-Parsing + var zip = new ZipArchive(fs, ZipArchiveMode.Read, leaveOpen: false); + await Task.CompletedTask; + return new OdfDocument(zip); + } + + public XDocument ReadContentXml() + { + var entry = _zip.GetEntry("content.xml") ?? throw new FileNotFoundException("content.xml nicht gefunden"); + using var s = entry.Open(); + return XDocument.Load(s, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); + } + + public XDocument? ReadMetaXmlOrNull() + { + var entry = _zip.GetEntry("meta.xml"); + if (entry is null) return null; + using var s = entry.Open(); + return XDocument.Load(s, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo); + } + + public Stream? OpenBinary(string pathInPackage) + { + var entry = _zip.GetEntry(pathInPackage); + return entry?.Open(); + } + + public void Dispose() + { + if (_disposed) return; + _disposed = true; + _zip.Dispose(); + } + + public ValueTask DisposeAsync() + { + Dispose(); + return ValueTask.CompletedTask; + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/OdfTextDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/OdfTextDocument.cs new file mode 100644 index 000000000..1bac6c6ac --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/OdfTextDocument.cs @@ -0,0 +1,91 @@ +using Document.Base.Models.Interfaces; + +namespace Document.Odf; + +public sealed class OdfTextDocument : IUserDocument +{ + private bool _isModified; + + public OdfTextDocument() + { + Root = new Document.Odf.Models.OdfSection(); + } + + public OdfTextDocument(IDocElement root) + { + Root = root is Document.Odf.Models.OdfSection + ? root + : throw new ArgumentException("Root muss vom Typ OdfSection sein.", nameof(root)); + } + + public IDocElement Root { get; private set; } + + public bool IsModified => _isModified; + + public IDocParagraph AddParagraph(string cStylename) + { + var section = EnsureRoot(); + _isModified = true; + return section.AddParagraph(cStylename); + } + + public IDocHeadline AddHeadline(int nLevel, string? Id = null) + { + var section = EnsureRoot(); + _isModified = true; + return section.AddHeadline(nLevel, Id ?? Guid.NewGuid().ToString("N")); + } + + public IDocTOC AddTOC(string cName, int nLevel) + { + var section = EnsureRoot(); + _isModified = true; + return section.AddTOC(cName, nLevel); + } + + public IEnumerable Enumerate() + => Root.Enumerate(); + + public bool SaveTo(string cOutputPath) + => throw new NotSupportedException(); + + public bool SaveTo(Stream sOutputStream, object? options = null) + => throw new NotSupportedException(); + + public bool LoadFrom(string cInputPath) + { + try + { + using var odf = OdfDocument.Open(cInputPath); + var xdoc = odf.ReadContentXml(); + Document.Odf.Parsing.OdfBlockParser.Populate(this, xdoc); + _isModified = false; + return true; + } + catch + { + return false; + } + } + + public bool LoadFrom(Stream sInputStream, object? options = null) + { + try + { + using var zip = new System.IO.Compression.ZipArchive(sInputStream, System.IO.Compression.ZipArchiveMode.Read, leaveOpen: true); + var entry = zip.GetEntry("content.xml") ?? throw new FileNotFoundException("content.xml not found"); + using var stream = entry.Open(); + var xdoc = System.Xml.Linq.XDocument.Load(stream); + Document.Odf.Parsing.OdfBlockParser.Populate(this, xdoc); + _isModified = false; + return true; + } + catch + { + return false; + } + } + + private Models.OdfSection EnsureRoot() + => Root as Models.OdfSection ?? throw new InvalidOperationException("Root ist nicht OdfSection"); +} diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfBlockParser.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfBlockParser.cs new file mode 100644 index 000000000..61e79594d --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfBlockParser.cs @@ -0,0 +1,89 @@ +using System.Xml.Linq; +using Document.Base.Models.Interfaces; +using Document.Odf.Models; + +namespace Document.Odf.Parsing; + +internal static class OdfBlockParser +{ + public static void Populate(IUserDocument doc, XDocument contentXml, IDocFontStyle? defaultStyle = null) + { + defaultStyle ??= OdfDefaultFontStyle.Instance; + + var officeText = contentXml.Root? + .Element(OdfNamespaces.Office + "body")? + .Element(OdfNamespaces.Office + "text"); + if (officeText is null) return; + + foreach (var el in officeText.Elements()) + { + if (el.Name == OdfNamespaces.Text + "p") + { + var p = doc.AddParagraph(string.Empty); + AppendInlines(el, p, defaultStyle); + } + else if (el.Name == OdfNamespaces.Text + "h") + { + int level = 1; + var lvlAttr = (string?)el.Attribute(OdfNamespaces.Text + "outline-level"); + if (!int.TryParse(lvlAttr, out level)) level = 1; + + var id = (string?)el.Attribute("id") + ?? (string?)el.Attribute(OdfNamespaces.Text + "name"); + + var h = doc.AddHeadline(level, id); + AppendInlines(el, h, defaultStyle); + } + // TODO: lists (text:list), tables (table:table), images (draw:frame/draw:image) + } + } + + private static void AppendInlines(XElement src, IDocContent target, IDocFontStyle defaultStyle) + { + foreach (var node in src.Nodes()) + { + switch (node) + { + case XText t: + if (!string.IsNullOrEmpty(t.Value)) + target.AppendText(t.Value); + break; + + case XElement el: + if (el.Name == OdfNamespaces.Text + "span") + { + var span = target.AddSpan(defaultStyle); + AppendInlines(el, span, defaultStyle); + } + else if (el.Name == OdfNamespaces.Text + "s") // non-breaking spaces + { + var countAttr = (string?)el.Attribute("c"); + var count = 1; + _ = int.TryParse(countAttr, out count); + for (int i = 0; i < Math.Max(1, count); i++) + target.AddNBSpace(defaultStyle); + } + else if (el.Name == OdfNamespaces.Text + "tab") + { + target.AddTab(defaultStyle); + } + else if (el.Name == OdfNamespaces.Text + "line-break") + { + target.AddLineBreak(); + } + else if (el.Name == OdfNamespaces.Text + "a") + { + var href = (string?)el.Attribute(OdfNamespaces.XLink + "href") ?? string.Empty; + var linkSpan = target.AddLink(href, defaultStyle); + AppendInlines(el, linkSpan, defaultStyle); + } + else + { + // fallback recursion + AppendInlines(el, target, defaultStyle); + } + break; + } + } + } +} \ No newline at end of file diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfTextExtractor.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfTextExtractor.cs new file mode 100644 index 000000000..ab0a093aa --- /dev/null +++ b/CSharpBible/Data/DocumentUtils/Document.Odf/Parsing/OdfTextExtractor.cs @@ -0,0 +1,72 @@ +using Document.Odf.Models; +using System.Text; +using System.Xml.Linq; + +namespace Document.Odf.Parsing; + +public static class OdfTextExtractor +{ + public static string GetPlainText(XDocument contentXml) + { + var officeBody = contentXml.Root?.Element(OdfNamespaces.Office + "body"); var officeText = officeBody?.Element(OdfNamespaces.Office + "text"); if (officeText is null) return string.Empty; + var sb = new StringBuilder(8 * 1024); + foreach (var node in officeText.DescendantNodes()) + { + if (node is XElement el) + { + if (el.Name == OdfNamespaces.Text + "p" || el.Name == OdfNamespaces.Text + "h") + { + AppendElementText(el, sb); + sb.AppendLine(); + } + } + } + + return Normalize(sb.ToString()); + } + + private static void AppendElementText(XElement element, StringBuilder sb) + { + foreach (var node in element.Nodes()) + { + switch (node) + { + case XText t: + sb.Append(t.Value); + break; + + case XElement el: + if (el.Name == OdfNamespaces.Text + "span") + { + AppendElementText(el, sb); + } + else if (el.Name == OdfNamespaces.Text + "s") // non-breaking spaces + { + var countAttr = (string?)el.Attribute("c"); + var count = 1; + _ = int.TryParse(countAttr, out count); + sb.Append('\u00A0', Math.Max(1, count)); // NBSP + } + else if (el.Name == OdfNamespaces.Text + "tab") + { + sb.Append('\t'); + } + else if (el.Name == OdfNamespaces.Text + "line-break") + { + sb.AppendLine(); + } + else + { + AppendElementText(el, sb); + } + break; + } + } + } + + private static string Normalize(string text) + { + // XML-Parser dekodiert Entities bereits -> nur Zeilenenden vereinheitlichen + return text.Replace("\r\n", "\n").Replace('\r', '\n'); + } +} \ No newline at end of file From 8a1e4e6c9585de98c38ff0e86e1c6f04aa8b9ab4 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 12:24:40 +0200 Subject: [PATCH 166/569] Document.Odf --- .../Document.Odf/Models/OdfTextDocument.cs | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTextDocument.cs diff --git a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTextDocument.cs b/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTextDocument.cs deleted file mode 100644 index 04df18aa2..000000000 --- a/CSharpBible/Data/DocumentUtils/Document.Odf/Models/OdfTextDocument.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Document.Base.Models.Interfaces; - -namespace Document.Odf.Models; - -public class OdfTextDocument : IUserDocument -{ - public static IUserDocument CreateUserDocument() - { - throw new NotImplementedException(); - } - - public IDocParagraph AddParagraph(string cStylename) - { - throw new NotImplementedException(); - } - - public void SaveTo(string cOutputPath) - { - throw new NotImplementedException(); - } -} From 6d6e75b165d08d60a545e7ea4e55d146e1652c26 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 21 Sep 2025 12:24:51 +0200 Subject: [PATCH 167/569] OdtBoldTextExample --- CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs b/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs index 76470965d..76b73d2a4 100644 --- a/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs +++ b/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs @@ -1,5 +1,5 @@ using Document.Base.Models.Interfaces; -using Document.Odf.Models; +using Document_Odf; using System.Windows; namespace OdtBoldTextExample; From 506b193a4f2ccb0cecadfe0cd97ba2c91ee2e7fd Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:48 +0200 Subject: [PATCH 168/569] DAO --- WinAhnenNew/WinAhnenCls/Utils/GNameHandler.cs | 270 ++++++++++++++++++ .../WinAhnenCls/Utils/GenHelperBase.cs | 191 +++++++++++++ .../WinAhnenClsTests/Data/HejPlaceData.cs | 26 ++ .../WinAhnenClsTests/Data/HejSourData.cs | 27 ++ .../WinAhnenClsTests/Data/PlaceTestData.cs | 116 ++++++++ .../WinAhnenClsTests/Data/SourceTestData.cs | 137 +++++++++ 6 files changed, 767 insertions(+) create mode 100644 WinAhnenNew/WinAhnenCls/Utils/GNameHandler.cs create mode 100644 WinAhnenNew/WinAhnenCls/Utils/GenHelperBase.cs create mode 100644 WinAhnenNew/WinAhnenClsTests/Data/HejPlaceData.cs create mode 100644 WinAhnenNew/WinAhnenClsTests/Data/HejSourData.cs create mode 100644 WinAhnenNew/WinAhnenClsTests/Data/PlaceTestData.cs create mode 100644 WinAhnenNew/WinAhnenClsTests/Data/SourceTestData.cs diff --git a/WinAhnenNew/WinAhnenCls/Utils/GNameHandler.cs b/WinAhnenNew/WinAhnenCls/Utils/GNameHandler.cs new file mode 100644 index 000000000..458f6f0f6 --- /dev/null +++ b/WinAhnenNew/WinAhnenCls/Utils/GNameHandler.cs @@ -0,0 +1,270 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace WinAhnenCls.Utils +{ + public sealed class GNameHandler + { + public delegate void SendMsg(string msg, int aType); + + private bool _cfgLearnUnknown = true; + private string _gNameFile = string.Empty; + private bool _gNameListChanged; + private readonly SortedDictionary _gNameList = new(StringComparer.Ordinal); + private SendMsg? _onError; + + public SendMsg? OnError + { + get => _onError; + set + { + if (_onError == value) return; + _onError = value; + } + } + + public bool CfgLearnUnknown + { + get => _cfgLearnUnknown; + set + { + if (_cfgLearnUnknown == value) return; + _cfgLearnUnknown = value; + } + } + + public bool Changed + { + get => _gNameListChanged; + set + { + if (_gNameListChanged == value) return; + _gNameListChanged = value; + } + } + + private const string csUnknown = "…"; + private const string csUnknown2 = "..."; + + public void Init() + { + _gNameList.Clear(); + _cfgLearnUnknown = true; + _gNameListChanged = false; + _gNameFile = string.Empty; + } + + public void Done() + { + try + { + if (_gNameListChanged && !string.IsNullOrEmpty(_gNameFile)) + { + // Delphi: delete then save + if (File.Exists(_gNameFile)) + File.Delete(_gNameFile); + + SafeSave(_gNameFile); + } + } + finally + { + _gNameList.Clear(); + } + } + + public void LoadGNameList(string aFilename) + { + if (File.Exists(aFilename)) + { + _gNameList.Clear(); + foreach (var line in File.ReadLines(aFilename, Encoding.UTF8)) + { + if (string.IsNullOrWhiteSpace(line)) continue; + + int idx = line.IndexOf('='); + if (idx < 0) + { + // Name ohne Wert + var nameOnly = line; + if (!_gNameList.ContainsKey(nameOnly)) + _gNameList[nameOnly] = string.Empty; + } + else + { + var name = line.Substring(0, idx); + var value = line.Substring(idx + 1); + _gNameList[name] = value; + } + } + } + else + { + _gNameList.Clear(); // TODO: Defaults laden + } + + _gNameFile = aFilename; + _gNameListChanged = false; + } + + public void SaveGNameList(string aFilename = "") + { + if (string.IsNullOrEmpty(aFilename) && string.IsNullOrEmpty(_gNameFile)) + return; + + if (!string.IsNullOrEmpty(aFilename)) + _gNameFile = aFilename; + + SafeSave(_gNameFile); + _gNameListChanged = false; + } + + public void SetGNLFilename(string aFilename = "") + { + if (string.IsNullOrEmpty(aFilename) && string.IsNullOrEmpty(_gNameFile)) + return; + + if (!string.IsNullOrEmpty(aFilename)) + _gNameFile = aFilename; + } + + public void LearnSexOfGivnName(string aName, char aSex) + { + if (aName == null) return; + + foreach (var token in SplitBySpace(aName)) + { + var lName = token; + + // Ignoriere abgekürzte Namen: "A.", "B.", ... + if (IsAbbrev(lName)) + continue; + + // Ignoriere „…“ / „...“ am Anfang + if (TestFor(lName, 1, csUnknown) || TestFor(lName, 1, csUnknown2)) + continue; + + // Ungültige Namen: kürzer als 3 und nicht "NN", oder Endet mit '.' oder '=' + if ((lName.Length < 3 && !lName.Equals("NN", StringComparison.OrdinalIgnoreCase)) + || lName.EndsWith(".", StringComparison.Ordinal) + || lName.EndsWith("=", StringComparison.Ordinal)) + { + if (lName.Length > 0) + _onError?.Invoke($"\"{lName}\" is not a valid Name", 0); + + // weiter prüfen andere Tokens + } + else if (lName.Length > 1 && char.IsLower(lName[0])) + { + if (lName.Length > 0) + _onError?.Invoke($"\"{lName}\" is not a valid Name (case)", 0); + } + else if (lName.Length > 0 + && !StartsWith(lName, "(") + && !StartsWith(lName, "\"") + && (GetValueOrEmpty(lName).Length == 0 || GetValueOrEmpty(lName) == "_")) + { + _gNameList[lName] = aSex.ToString(); + _gNameListChanged = true; + } + else if (!StartsWith(lName, "(")) + { + // Delphi: if (copy(lName,1,1) <> '(') then break; + break; + } + } + } + + public char GuessSexOfGivnName(string aName, bool bLearn = true) + { + char result = 'U'; + if (aName == null) return result; + + foreach (var token in SplitBySpace(aName)) + { + var lName = token; + + if (IsAbbrev(lName)) + continue; + + if ((lName.Length < 3 && !lName.Equals("NN", StringComparison.OrdinalIgnoreCase)) + || lName.EndsWith(".", StringComparison.Ordinal) + || lName.EndsWith("=", StringComparison.Ordinal)) + { + if (lName.Length > 0 && bLearn) + _onError?.Invoke($"\"{lName}\" is not a valid Name", 0); + } + else if (!StartsWith(lName, "(") && !StartsWith(lName, "\"")) + { + var val = GetValueOrEmpty(lName); + if (val.Length > 0 && val != "_") + return val[0]; + + if (_cfgLearnUnknown && bLearn) + LearnSexOfGivnName(lName, '_'); + } + } + + return result; + } + + // Helpers + + private static IEnumerable SplitBySpace(string text) + => text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + private static bool IsAbbrev(string s) + => s.Length == 2 && s.EndsWith(".", StringComparison.Ordinal) && char.IsUpper(s[0]); + + // Pascal TestFor(aText, 1-based pos, aTest) + private static bool TestFor(string aText, int pPos1Based, string aTest) + { + int idx = Math.Max(0, pPos1Based - 1); + if (idx < 0 || idx + aTest.Length > aText.Length) return false; + return string.CompareOrdinal(aText, idx, aTest, 0, aTest.Length) == 0; + } + + private static bool StartsWith(string s, string prefix) + => s.Length > 0 && s[0].ToString() == prefix; + + private string GetValueOrEmpty(string key) + => _gNameList.TryGetValue(key, out var v) ? v ?? string.Empty : string.Empty; + + private void SafeSave(string filename) + { + if (string.IsNullOrEmpty(filename)) return; + + var dir = Path.GetDirectoryName(Path.GetFullPath(filename)); + if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) + Directory.CreateDirectory(dir); + + // Schreibe in temp Datei und ersetze Ziel + var temp = Path.GetTempFileName(); + try + { + using (var sw = new StreamWriter(temp, false, new UTF8Encoding(false))) + { + foreach (var kv in _gNameList) + { + sw.Write(kv.Key); + sw.Write('='); + sw.WriteLine(kv.Value ?? string.Empty); + } + } + + if (File.Exists(filename)) + File.Delete(filename); + + File.Move(temp, filename); + } + catch + { + try { if (File.Exists(temp)) File.Delete(temp); } catch { /* ignore */ } + throw; + } + } + } +} \ No newline at end of file diff --git a/WinAhnenNew/WinAhnenCls/Utils/GenHelperBase.cs b/WinAhnenNew/WinAhnenCls/Utils/GenHelperBase.cs new file mode 100644 index 000000000..2a98ff50f --- /dev/null +++ b/WinAhnenNew/WinAhnenCls/Utils/GenHelperBase.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Generic; + +namespace WinAhnenCls.Utils; + +// Minimal EventType that matches Pascal etWarning/etError usage in cls_GenHelperBase +public enum EventType +{ + Warning, + Error +} + +// Delegate equivalent to TTMessageEvent/THlprMsgEvent +public delegate void THlprMsgEvent(object sender, EventType type, string text, string reference, int mode); + +public abstract class GenHelperBase +{ + private THlprMsgEvent? _onHlpMessage; + private IList? _citation; + private string _citTitle = string.Empty; + private string _osbHdr = string.Empty; + + // Protected fields (to mirror Pascal's protected members) + protected IList? FCitation => _citation; // Compatibility alias + protected string FCitRefn = string.Empty; + protected string FCitTitle => _citTitle; // Compatibility alias + protected string FOsbHdr => _osbHdr; // Compatibility alias + + public THlprMsgEvent? OnHlpMessage + { + get => _onHlpMessage; + set + { + if (_onHlpMessage == value) return; + _onHlpMessage = value; + } + } + + public IList? Citation + { + get => _citation; + set + { + if (ReferenceEquals(_citation, value)) return; + _citation = value; + FCitRefn = string.Empty; + } + } + + public string CitTitle + { + get => _citTitle; + set + { + if (_citTitle == value) return; + _citTitle = value ?? string.Empty; + } + } + + public string OsbHdr + { + get => _osbHdr; + set + { + if (_osbHdr == value) return; + _osbHdr = value ?? string.Empty; + } + } + + // Helper methods translated from Pascal + protected string NormalCitRef(string aText) + { + if (string.IsNullOrEmpty(aText)) + return string.Empty; + + string lText = (aText.StartsWith("F", StringComparison.Ordinal) || aText.StartsWith("I", StringComparison.Ordinal)) + ? aText.Substring(1) + : aText; + + // Find first digit + int lp1 = IndexOfAsciiDigit(lText); + if (lp1 < 0) + return lText; + + int i = lp1 + 1; + while (i < lText.Length && IsAsciiDigit(lText[i])) + i++; + + int seqLen = i - lp1; + int pad = 4 - seqLen; + if (pad > 0) + { + return lText.Insert(lp1, new string('0', pad)); + } + return lText; + } + + protected void Warning(string aText, string Ref, int aMode) + { + _onHlpMessage?.Invoke(this, EventType.Warning, aText ?? string.Empty, Ref ?? string.Empty, aMode); + } + + protected void Error(string aText, string Ref, int aMode) + { + _onHlpMessage?.Invoke(this, EventType.Error, aText ?? string.Empty, Ref ?? string.Empty, aMode); + } + + public void FireEvent(object sender, string[] aSTa) + { + if (aSTa == null || aSTa.Length != 4) return; + if (!int.TryParse(aSTa[3], out var lInt)) return; + + switch (aSTa[0]) + { + case "ParserStartIndiv": + StartIndiv(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserStartFamily": + StartFamily(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserFamilyType": + FamilyType(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserFamilyDate": + FamilyDate(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserFamilyData": + FamilyData(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserFamilyIndiv": + FamilyIndiv(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserFamilyPlace": + FamilyPlace(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiData": + IndiData(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiDate": + IndiDate(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiName": + IndiName(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiOccu": + IndiOccu(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiPlace": + IndiPlace(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiRef": + IndiRef(sender, aSTa[1], aSTa[2], lInt); + break; + case "ParserIndiRel": + IndiRel(sender, aSTa[1], aSTa[2], lInt); + break; + } + } + + // Abstract API matching Pascal class + public abstract void Clear(); + public abstract void StartFamily(object sender, string aText, string aRef, int subType); + public abstract void StartIndiv(object sender, string aText, string aRef, int subType); + public abstract void FamilyIndiv(object sender, string aText, string aRef, int subType); + public abstract void FamilyType(object sender, string aText, string aRef, int subType); + public abstract void FamilyDate(object sender, string aText, string aRef, int subType); + public abstract void FamilyData(object sender, string aText, string aRef, int subType); + public abstract void FamilyPlace(object sender, string aText, string aRef, int subType); + public abstract void IndiData(object sender, string aText, string aRef, int subType); + public abstract void IndiDate(object sender, string aText, string aRef, int subType); + public abstract void IndiName(object sender, string aText, string aRef, int subType); + public abstract void IndiPlace(object sender, string aText, string aRef, int subType); + public abstract void IndiRef(object sender, string aText, string aRef, int subType); + public abstract void IndiOccu(object sender, string aText, string aRef, int subType); + public abstract void IndiRel(object sender, string aText, string aRef, int subType); + public abstract void EndOfEntry(object sender, string aText, string aRef, int subType); + public abstract void CreateNewHeader(string filename); + public abstract void SaveToFile(string filename); + + // Local helpers + private static int IndexOfAsciiDigit(string s) + { + for (int i = 0; i < s.Length; i++) + { + if (IsAsciiDigit(s[i])) return i; + } + return -1; + } + + private static bool IsAsciiDigit(char c) => c >= '0' && c <= '9'; +} \ No newline at end of file diff --git a/WinAhnenNew/WinAhnenClsTests/Data/HejPlaceData.cs b/WinAhnenNew/WinAhnenClsTests/Data/HejPlaceData.cs new file mode 100644 index 000000000..bd64797df --- /dev/null +++ b/WinAhnenNew/WinAhnenClsTests/Data/HejPlaceData.cs @@ -0,0 +1,26 @@ +// Pseudocode/Plan: +// - Definiere Datenklasse `HejPlaceData` mit Properties: ID, PlaceName, ZIPCode, State, District, GOV, Country, PolName, Parish, County, ShortName, Longitude, Magnitude, MaidenheadLoc. +// - Erzeuge statische Klasse `PlaceTestData` mit `public static readonly HejPlaceData[] cPlace`, die die Pascal-Constants 1:1 als Objekte enthält. +// - Stelle sicher, dass leere Pascal-Strings als string.Empty abgebildet werden und Standardwerte in Properties initialisiert sind. +// - Nutze UTF-8 für Umlaute (z. B. "München", "Baden-Württemberg"). +// - Keine externen Abhängigkeiten; kompatibel zu .NET Framework 4.6.2+ und .NET 6-9. + +namespace WinAhnenCls.Data; + +public class HejPlaceData +{ + public int ID { get; set; } + public string PlaceName { get; set; } = string.Empty; + public string ZIPCode { get; set; } = string.Empty; + public string State { get; set; } = string.Empty; + public string District { get; set; } = string.Empty; + public string GOV { get; set; } = string.Empty; + public string Country { get; set; } = string.Empty; + public string PolName { get; set; } = string.Empty; + public string Parish { get; set; } = string.Empty; + public string County { get; set; } = string.Empty; + public string ShortName { get; set; } = string.Empty; + public string Longitude { get; set; } = string.Empty; + public string Magnitude { get; set; } = string.Empty; + public string MaidenheadLoc { get; set; } = string.Empty; +} diff --git a/WinAhnenNew/WinAhnenClsTests/Data/HejSourData.cs b/WinAhnenNew/WinAhnenClsTests/Data/HejSourData.cs new file mode 100644 index 000000000..849e7f69d --- /dev/null +++ b/WinAhnenNew/WinAhnenClsTests/Data/HejSourData.cs @@ -0,0 +1,27 @@ +// Pseudocode (Plan): +// - Create namespace "WinAhnenCls" to mirror the Pascal unit context. +// - Define a data model class "HejSourData" representing the Pascal record "THejSourData": +// - Properties: ID (int), Title, Abk, Ereignisse, Von, Bis, Standort, Publ, Rep, Bem, Bestand, Med (all string). +// - Initialize all string properties with string.Empty to mimic Pascal's default ('') for unspecified fields. +// - Define a static class "SourceTestData" that exposes the Pascal typed constant "cSource": +// - Implement as a public static readonly array "cSource" of "HejSourData" with 17 elements (indices 0..16). +// - Populate each element by directly mapping the Pascal initializer values to C# object initializers. +// - For entries where only ID was specified in Pascal, leave other fields as empty strings (default). + +namespace WinAhnenCls.Data; + +public sealed class HejSourData +{ + public int ID { get; set; } + public string Title { get; set; } = string.Empty; + public string Abk { get; set; } = string.Empty; + public string Ereignisse { get; set; } = string.Empty; + public string Von { get; set; } = string.Empty; + public string Bis { get; set; } = string.Empty; + public string Standort { get; set; } = string.Empty; + public string Publ { get; set; } = string.Empty; + public string Rep { get; set; } = string.Empty; + public string Bem { get; set; } = string.Empty; + public string Bestand { get; set; } = string.Empty; + public string Med { get; set; } = string.Empty; +} diff --git a/WinAhnenNew/WinAhnenClsTests/Data/PlaceTestData.cs b/WinAhnenNew/WinAhnenClsTests/Data/PlaceTestData.cs new file mode 100644 index 000000000..3f473d5e0 --- /dev/null +++ b/WinAhnenNew/WinAhnenClsTests/Data/PlaceTestData.cs @@ -0,0 +1,116 @@ +// Pseudocode/Plan: +// - Definiere Datenklasse `HejPlaceData` mit Properties: ID, PlaceName, ZIPCode, State, District, GOV, Country, PolName, Parish, County, ShortName, Longitude, Magnitude, MaidenheadLoc. +// - Erzeuge statische Klasse `PlaceTestData` mit `public static readonly HejPlaceData[] cPlace`, die die Pascal-Constants 1:1 als Objekte enthält. +// - Stelle sicher, dass leere Pascal-Strings als string.Empty abgebildet werden und Standardwerte in Properties initialisiert sind. +// - Nutze UTF-8 für Umlaute (z. B. "München", "Baden-Württemberg"). +// - Keine externen Abhängigkeiten; kompatibel zu .NET Framework 4.6.2+ und .NET 6-9. + +namespace WinAhnenCls.Data; + +public static class PlaceTestData +{ + public static readonly HejPlaceData[] cPlace = new[] + { + new HejPlaceData { ID = 0 }, + + new HejPlaceData + { + ID = 1, + PlaceName = "Adelsheim", + ZIPCode = string.Empty, + State = string.Empty, + District = string.Empty, + GOV = string.Empty, + Country = string.Empty, + PolName = string.Empty, + Parish = string.Empty, + County = string.Empty, + ShortName = string.Empty, + Longitude = string.Empty, + Magnitude = string.Empty, + MaidenheadLoc = string.Empty + }, + + new HejPlaceData + { + ID = 2, + PlaceName = "Binau", + ZIPCode = "74862", + State = "Deutschland", + District = "Mosbach", + GOV = "GOV", + Country = "Baden-Württemberg", + PolName = "Binau (Gemeinde)", + Parish = "Neckargerach", + County = "Neckar-Odenwald-Kreis", + ShortName = "Binau", + Longitude = "L90", + Magnitude = "B21", + MaidenheadLoc = "Maidenhead" + }, + + new HejPlaceData + { + ID = 3, + PlaceName = "Eppingen" + }, + + new HejPlaceData + { + ID = 4, + PlaceName = "Mosbach" + }, + + new HejPlaceData + { + ID = 5, + PlaceName = "Neckarbischofsheim" + }, + + new HejPlaceData + { + ID = 6, + PlaceName = "Nimmerland" + }, + + new HejPlaceData + { + ID = 7, + PlaceName = "Sulzfeld" + }, + + new HejPlaceData + { + ID = 8, + PlaceName = "Hamburg", + ZIPCode = "22609", + State = "Germany", + Country = "Hamburg", + County = "Hamburg" + }, + + new HejPlaceData + { + ID = 9, + PlaceName = "Bremen", + ZIPCode = "20000", + State = "Germany" + }, + + new HejPlaceData + { + ID = 10, + PlaceName = "München", + ZIPCode = "30000", + State = "Germany" + }, + + new HejPlaceData + { + ID = 11, + PlaceName = "Berlin", + ZIPCode = "80000", + State = "Germany" + } + }; +} \ No newline at end of file diff --git a/WinAhnenNew/WinAhnenClsTests/Data/SourceTestData.cs b/WinAhnenNew/WinAhnenClsTests/Data/SourceTestData.cs new file mode 100644 index 000000000..14bec8973 --- /dev/null +++ b/WinAhnenNew/WinAhnenClsTests/Data/SourceTestData.cs @@ -0,0 +1,137 @@ +// Pseudocode (Plan): +// - Create namespace "WinAhnenCls" to mirror the Pascal unit context. +// - Define a data model class "HejSourData" representing the Pascal record "THejSourData": +// - Properties: ID (int), Title, Abk, Ereignisse, Von, Bis, Standort, Publ, Rep, Bem, Bestand, Med (all string). +// - Initialize all string properties with string.Empty to mimic Pascal's default ('') for unspecified fields. +// - Define a static class "SourceTestData" that exposes the Pascal typed constant "cSource": +// - Implement as a public static readonly array "cSource" of "HejSourData" with 17 elements (indices 0..16). +// - Populate each element by directly mapping the Pascal initializer values to C# object initializers. +// - For entries where only ID was specified in Pascal, leave other fields as empty strings (default). + +using WinAhnenClsTests.Data; + +namespace WinAhnenCls.Data; + +public static class SourceTestData +{ + public static readonly HejSourData[] cSource = new HejSourData[] + { + new HejSourData { ID = 0 }, + + new HejSourData + { + ID = 1, + Title = "hörensagen", + Abk = "1", + Ereignisse = "2", + Von = "3", + Bis = "4", + Standort = "5", + Publ = "6", + Rep = "7", + Bem = "8", + Bestand = "9", + Med = "10" + }, + + new HejSourData + { + ID = 2, + Title = "Sterbeanzeige", + Abk = "Strb.Anz.", + Ereignisse = "Sterbefälle", + Von = "2015", + Bis = "2018", + Standort = "Heidelberg", + Publ = "RNZ", + Rep = "Druckergasse 15", + Bem = "Kann Online abgefragt werden", + Bestand = "Nur die letzten 14 Tage", + Med = "online" + }, + + new HejSourData { ID = 3, Title = "Friedhof Mosbach" }, + + new HejSourData { ID = 4, Title = "2" }, + + new HejSourData { ID = 5, Title = "Taufbuch" }, + + new HejSourData { ID = 6, Title = "Geburtsurkunde" }, + + new HejSourData { ID = 7, Title = "Rechnung" }, + + new HejSourData { ID = 8, Title = "1" }, + + new HejSourData { ID = 9, Title = "3" }, + + new HejSourData { ID = 10, Title = "Quelle1" }, + + new HejSourData { ID = 11, Title = "Quelle2" }, + + new HejSourData { ID = 12, Title = "Quelle3" }, + + new HejSourData + { + ID = 13, + Title = "Ancestry.com", + Abk = "Anc.", + Ereignisse = "divers", + Von = "1500", + Bis = "1930", + Standort = "Salt Lake City, Utah, USA", + Publ = "", + Rep = "", + Bem = "ggf. Anmeldung", + Bestand = "", + Med = "online" + }, + + new HejSourData + { + ID = 14, + Title = "Eigenes Wissen", + Abk = "e.Ws.", + Ereignisse = "diverse", + Von = "1980", + Bis = "2019", + Standort = "BW.", + Publ = "-", + Rep = "Gehirn", + Bem = "u.U. nicht objektiv", + Bestand = "", + Med = "verbal" + }, + + new HejSourData + { + ID = 15, + Title = "OSB Meißenheim", + Abk = "OSB-Mh.", + Ereignisse = "G,H,T", + Von = "1560", + Bis = "1969", + Standort = "Meißenheim", + Publ = "A. Köbele", + Rep = "-", + Bem = "", + Bestand = "", + Med = "Buch" + }, + + new HejSourData + { + ID = 16, + Title = "Test", + Abk = "1", + Ereignisse = "2", + Von = "3", + Bis = "4", + Standort = "5", + Publ = "6", + Rep = "7", + Bem = "8", + Bestand = "9", + Med = "10" + } + }; +} \ No newline at end of file From 5c5315ebcec13f108f391d850be9aab61f902031 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:49 +0200 Subject: [PATCH 169/569] GenDBImplOLEDB --- GenFreeWin/GenDBImplOLEDB/GenDBImplOLEDB.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GenFreeWin/GenDBImplOLEDB/GenDBImplOLEDB.csproj b/GenFreeWin/GenDBImplOLEDB/GenDBImplOLEDB.csproj index 3b9dd81e8..d182bcbc1 100644 --- a/GenFreeWin/GenDBImplOLEDB/GenDBImplOLEDB.csproj +++ b/GenFreeWin/GenDBImplOLEDB/GenDBImplOLEDB.csproj @@ -15,8 +15,8 @@ - - + + From 61c28580e6d06321f61ba016cc75f9d798cb6012 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:50 +0200 Subject: [PATCH 170/569] GenDBImplOLEDBTests --- GenFreeWin/GenDBImplOLEDBTests/GenDBImplOLEDBTests.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/GenFreeWin/GenDBImplOLEDBTests/GenDBImplOLEDBTests.csproj b/GenFreeWin/GenDBImplOLEDBTests/GenDBImplOLEDBTests.csproj index 68d3ee3f4..3af66bf15 100644 --- a/GenFreeWin/GenDBImplOLEDBTests/GenDBImplOLEDBTests.csproj +++ b/GenFreeWin/GenDBImplOLEDBTests/GenDBImplOLEDBTests.csproj @@ -15,10 +15,10 @@ - + - - + + From a52c8f036ad0779c8f2070aa838e8e5f6f217a31 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:50 +0200 Subject: [PATCH 171/569] GenFreeBase --- GenFreeWin/GenFreeBase/GenFreeBase.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeBase/GenFreeBase.csproj b/GenFreeWin/GenFreeBase/GenFreeBase.csproj index eb7ea5ad8..71eef95b6 100644 --- a/GenFreeWin/GenFreeBase/GenFreeBase.csproj +++ b/GenFreeWin/GenFreeBase/GenFreeBase.csproj @@ -21,7 +21,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 131299cc0eb97b06c537c8c9b26953d378fa3a5a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:50 +0200 Subject: [PATCH 172/569] GenFreeBaseClassesTests --- .../GenFreeBaseClassesTests/GenFreeBaseClassesTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeBaseClassesTests/GenFreeBaseClassesTests.csproj b/GenFreeWin/GenFreeBaseClassesTests/GenFreeBaseClassesTests.csproj index e460a25bd..562280a77 100644 --- a/GenFreeWin/GenFreeBaseClassesTests/GenFreeBaseClassesTests.csproj +++ b/GenFreeWin/GenFreeBaseClassesTests/GenFreeBaseClassesTests.csproj @@ -9,7 +9,7 @@ - + From 204a6d42970f1e318786e18ab7dbfee6e43dc65d Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:51 +0200 Subject: [PATCH 173/569] GenFreeBaseTests --- GenFreeWin/GenFreeBaseTests/GenFreeBaseTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeBaseTests/GenFreeBaseTests.csproj b/GenFreeWin/GenFreeBaseTests/GenFreeBaseTests.csproj index 19c142a0d..56ef3e787 100644 --- a/GenFreeWin/GenFreeBaseTests/GenFreeBaseTests.csproj +++ b/GenFreeWin/GenFreeBaseTests/GenFreeBaseTests.csproj @@ -16,7 +16,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 4a3bbb94e280facc56bd658018c1012dab2da1f3 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:51 +0200 Subject: [PATCH 174/569] GenFreeDataTests --- GenFreeWin/GenFreeDataTests/GenFreeDataTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeDataTests/GenFreeDataTests.csproj b/GenFreeWin/GenFreeDataTests/GenFreeDataTests.csproj index c68d95a9c..ee2945d03 100644 --- a/GenFreeWin/GenFreeDataTests/GenFreeDataTests.csproj +++ b/GenFreeWin/GenFreeDataTests/GenFreeDataTests.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 125c4bec50368dcd9cddeb1bd41a02ca7e1cac89 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:52 +0200 Subject: [PATCH 175/569] GenFreeHelperTests --- GenFreeWin/GenFreeHelperTests/GenFreeHelperTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeHelperTests/GenFreeHelperTests.csproj b/GenFreeWin/GenFreeHelperTests/GenFreeHelperTests.csproj index 43cd65e40..7138d9990 100644 --- a/GenFreeWin/GenFreeHelperTests/GenFreeHelperTests.csproj +++ b/GenFreeWin/GenFreeHelperTests/GenFreeHelperTests.csproj @@ -20,7 +20,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From ed27660457617faeb2bcd26e89928e3142e9c11a Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:52 +0200 Subject: [PATCH 176/569] GenFreeWin2 --- GenFreeWin/GenFreeWin2/GenFreeWin2.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeWin2/GenFreeWin2.csproj b/GenFreeWin/GenFreeWin2/GenFreeWin2.csproj index 9e6599603..0f6dbaccb 100644 --- a/GenFreeWin/GenFreeWin2/GenFreeWin2.csproj +++ b/GenFreeWin/GenFreeWin2/GenFreeWin2.csproj @@ -12,7 +12,7 @@ - + From d91ca74107827d192430b3a722f00d059478bb18 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:53 +0200 Subject: [PATCH 177/569] GenFreeWin3 --- GenFreeWin/GenFreeWin3/GenFreeWin3.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeWin3/GenFreeWin3.csproj b/GenFreeWin/GenFreeWin3/GenFreeWin3.csproj index b06abb3b1..e262e4bbf 100644 --- a/GenFreeWin/GenFreeWin3/GenFreeWin3.csproj +++ b/GenFreeWin/GenFreeWin3/GenFreeWin3.csproj @@ -18,7 +18,7 @@ - + From 5469d49c7af60b9bf0e728f41d2557b53810dd5e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:53 +0200 Subject: [PATCH 178/569] GenFreeWinForms --- GenFreeWin/GenFreeWinForms/GenFreeWinForms.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeWinForms/GenFreeWinForms.csproj b/GenFreeWin/GenFreeWinForms/GenFreeWinForms.csproj index 6425776aa..888081120 100644 --- a/GenFreeWin/GenFreeWinForms/GenFreeWinForms.csproj +++ b/GenFreeWin/GenFreeWinForms/GenFreeWinForms.csproj @@ -10,7 +10,7 @@ - + From a5b9d74175222b25680a1b46873e9523b45861fa Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:53 +0200 Subject: [PATCH 179/569] GenFreeWinFormsTests --- GenFreeWin/GenFreeWinFormsTests/GenFreeWinFormsTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeWinFormsTests/GenFreeWinFormsTests.csproj b/GenFreeWin/GenFreeWinFormsTests/GenFreeWinFormsTests.csproj index 0f8d880ea..006019cc9 100644 --- a/GenFreeWin/GenFreeWinFormsTests/GenFreeWinFormsTests.csproj +++ b/GenFreeWin/GenFreeWinFormsTests/GenFreeWinFormsTests.csproj @@ -12,7 +12,7 @@ - + From 70c0a2ca6dd79fb8afc8c8a84d0d1f376cfa5441 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:53 +0200 Subject: [PATCH 180/569] GenFreeWinTests --- GenFreeWin/GenFreeWinTests/genFreeWinTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/GenFreeWinTests/genFreeWinTests.csproj b/GenFreeWin/GenFreeWinTests/genFreeWinTests.csproj index dfb033fff..aa018164c 100644 --- a/GenFreeWin/GenFreeWinTests/genFreeWinTests.csproj +++ b/GenFreeWin/GenFreeWinTests/genFreeWinTests.csproj @@ -20,7 +20,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From d39061546a1167be8786771b760f97dd1e28ee8e Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:54 +0200 Subject: [PATCH 181/569] MdbBrowser --- GenFreeWin/MdbBrowser/MdbBrowser.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GenFreeWin/MdbBrowser/MdbBrowser.csproj b/GenFreeWin/MdbBrowser/MdbBrowser.csproj index 1f17c8172..c643b223a 100644 --- a/GenFreeWin/MdbBrowser/MdbBrowser.csproj +++ b/GenFreeWin/MdbBrowser/MdbBrowser.csproj @@ -22,8 +22,8 @@ - - + + From 09dfcde327e75959acfea994361a5ff4a70b88b1 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:55 +0200 Subject: [PATCH 182/569] MdbBrowserTests --- GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj b/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj index 940feb5e1..c97ff95f1 100644 --- a/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj +++ b/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 88641ea74f79277e7967ba4d8c089c301ca91389 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:55 +0200 Subject: [PATCH 183/569] MSQBrowser --- GenFreeWin/MSQBrowser/MSQBrowser.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GenFreeWin/MSQBrowser/MSQBrowser.csproj b/GenFreeWin/MSQBrowser/MSQBrowser.csproj index c1cb3d674..bb85b9577 100644 --- a/GenFreeWin/MSQBrowser/MSQBrowser.csproj +++ b/GenFreeWin/MSQBrowser/MSQBrowser.csproj @@ -21,9 +21,9 @@ - + - + From c9f0bf6862da27a534c07f3c718c4f9ae4164855 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:56 +0200 Subject: [PATCH 184/569] BaseGenClassesTests --- WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj b/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj index 3f1df6a09..3d38b7882 100644 --- a/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj +++ b/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj @@ -9,7 +9,7 @@ - + all From 1e312efb1b286f395947074030fcdf72833198aa Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:57 +0200 Subject: [PATCH 185/569] WinAhnenCls --- .../WinAhnenCls/Model/CHejGenealogy.cs | 246 +++++++++++++++--- 1 file changed, 214 insertions(+), 32 deletions(-) diff --git a/WinAhnenNew/WinAhnenCls/Model/CHejGenealogy.cs b/WinAhnenNew/WinAhnenCls/Model/CHejGenealogy.cs index 30bb01325..0f266743f 100644 --- a/WinAhnenNew/WinAhnenCls/Model/CHejGenealogy.cs +++ b/WinAhnenNew/WinAhnenCls/Model/CHejGenealogy.cs @@ -6,6 +6,7 @@ using System.Collections.Specialized; using System.IO; using System.Linq; +using System.Text; using WinAhnenCls.Model.HejInd; using WinAhnenCls.Model.HejMarr; @@ -13,31 +14,48 @@ namespace WinAhnenCls.Model { public class CHejGenealogy : IData, IGenealogy { - public int MarriagesCount { get; set; } - public int IndividualCount { get; set; } - public int GetActID { get; set; } - public int PlaceCount { get; set; } - public int SourceCount { get; set; } - public int SpouseCount { get; set; } - public int ChildCount { get; set; } + // Minimal internal data structure to model individuals and relations + private class Person + { + public int ID; + public int FatherId; + public int MotherId; + public readonly List Children = new(); + public readonly List Spouses = new(); + } + + private readonly List _people = new(); + private readonly Dictionary _idToIndex = new(); // ID -> index in _people + private readonly List<(int P1, int P2)> _marriages = new(); + private int _actIndex = -1; // index to _people + + public int MarriagesCount { get; private set; } + public int IndividualCount { get; private set; } + public int GetActID { get; private set; } + public int PlaceCount { get; private set; } + public int SourceCount { get; private set; } + public int SpouseCount { get; private set; } + public int ChildCount { get; private set; } + + // Not used by current tests; keep simple placeholders public IGenPerson ActualInd { get; set; } - public object Data { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } object IDataRO.Data => throw new NotImplementedException(); NotifyCollectionChangedEventHandler IDataRO.OnUpdate { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public IList Individuals { get; set; } + public IList Individuals { get; set; } = []; public IList Marriages { get; set; } public CHejMarriageData ActualMarriage { get; set; } - public Func, IGenEntity> GetEntity { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public Func, IGenEntity> GetEntity { get; set; } + public Func, IGenFact> GetFact { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public Func, IGenEntity> GetSource { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public Func, IGenMedia> GetMedia { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public Func, IGenEntity> GetTransaction { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - public IList Entitys { get => throw new NotImplementedException(); init => throw new NotImplementedException(); } - public IList Sources { get => throw new NotImplementedException(); init => throw new NotImplementedException(); } - public IList Repositories { get => throw new NotImplementedException(); init => throw new NotImplementedException(); } + public Func, IGenSource> GetSource { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public Func, IGenTransaction> GetTransaction { get ; set; } + public IList Entitys { get; init; } = []; + public IList Sources { get ; init; } = []; + public IList Repositories { get; init; } = []; public IList Places { get => throw new NotImplementedException(); init => throw new NotImplementedException(); } public IList Medias { get => throw new NotImplementedException(); init => throw new NotImplementedException(); } public IList Transactions { get => throw new NotImplementedException(); init => throw new NotImplementedException(); } @@ -45,9 +63,44 @@ public class CHejGenealogy : IData, IGenealogy public EGenType eGenType => throw new NotImplementedException(); + + + public void Clear() { - throw new NotImplementedException(); + _people.Clear(); + _idToIndex.Clear(); + _marriages.Clear(); + _actIndex = -1; + MarriagesCount = 0; + IndividualCount = 0; + GetActID = 0; + PlaceCount = 0; + SourceCount = 0; + SpouseCount = 0; + ChildCount = 0; + } + private IGenEntity DoGetEntity(IList list) + { + if (list.Count == 0) + throw new ArgumentException("List must contain at least one item"); + + Guid? guid = null; + string? name = null; + DateTime? date = null; + + foreach (var item in list) + { + switch (item) + { + + case Guid g: guid = g; break; + case string s: name = s; break; + case DateTime dt: date = dt; break; + } + } + + return null; // Not required by current tests (only that calling it does not change counters) } public void Append() @@ -57,7 +110,8 @@ public void Append() public void SetPlace(object value) { - throw new NotImplementedException(); + PlaceCount++; + OnDataChange?.Invoke(this, EventArgs.Empty); } public void AppendSpouse() @@ -102,59 +156,183 @@ public object GetData() public void First(object? sender = null) { - throw new NotImplementedException(); + if (_people.Count == 0) + return; + var lastId = GetActID; + _actIndex = 0; + UpdateActiveState(); + if (lastId != GetActID) + OnUpdate?.Invoke(this, EventArgs.Empty); } public void Last(object? sender = null) { - throw new NotImplementedException(); + if (_people.Count == 0) + return; + var lastId = GetActID; + _actIndex = _people.Count - 1; + UpdateActiveState(); + if (lastId != GetActID) + OnUpdate?.Invoke(this, EventArgs.Empty); } public void Next(object? sender = null) { - throw new NotImplementedException(); + if (_people.Count == 0) + return; + var lastId = GetActID; + if (_actIndex < 0) _actIndex = 0; else if (_actIndex < _people.Count - 1) _actIndex++; + UpdateActiveState(); + if (lastId != GetActID) + OnUpdate?.Invoke(this, EventArgs.Empty); } public void Previous(object? sender = null) { - throw new NotImplementedException(); + if (_people.Count == 0) + return; + var lastId = GetActID; + if (_actIndex > 0) _actIndex--; else _actIndex = 0; + UpdateActiveState(); + if (lastId != GetActID) + OnUpdate?.Invoke(this, EventArgs.Empty); } public void Seek(int Id) { - throw new NotImplementedException(); + var lastId = GetActID; + if (_idToIndex.TryGetValue(Id, out var idx)) + { + _actIndex = idx; + UpdateActiveState(); + if (lastId != GetActID) + OnUpdate?.Invoke(this, EventArgs.Empty); + } } public bool EOF() { - throw new NotImplementedException(); + return _actIndex >= _people.Count - 1; } public bool BOF() { - throw new NotImplementedException(); + return _actIndex <= 0; } int IDataRO.GetActID() { - throw new NotImplementedException(); + return GetActID; } public void SetSource(object value) { - throw new NotImplementedException(); + SourceCount++; + OnDataChange?.Invoke(this, EventArgs.Empty); } public void ReadFromStream(Stream lStr) { - var sr = new StreamReader(lStr); - Individuals = CPerson.ReadFromStream(sr).ToList(); + Clear(); + using var sr = new StreamReader(lStr, Encoding.Default, detectEncodingFromByteOrderMarks: true, bufferSize: 1024, leaveOpen: true); + + // 1) Read individuals until marker 'mrg' + string? line; + while ((line = sr.ReadLine()) != null) + { + if (line == "mrg") + break; + if (string.IsNullOrWhiteSpace(line)) + continue; + if (line == "adop" || line == "ortv" || line == "quellv") + continue; // safety + + var parts = line.Split('\u000F'); + if (parts.Length == 0) + continue; + // Expect: ID; Father; Mother; ... + if (!int.TryParse(parts[0], out var id)) + continue; + var p = new Person + { + ID = id, + FatherId = parts.Length > 1 && int.TryParse(parts[1], out var f) ? f : 0, + MotherId = parts.Length > 2 && int.TryParse(parts[2], out var m) ? m : 0, + }; + _idToIndex[p.ID] = _people.Count; + _people.Add(p); + } + + // 2) Read marriages until next marker or EOF + while ((line = sr.ReadLine()) != null) + { + if (line == "adop" || line == "ortv" || line == "quellv") + break; + if (string.IsNullOrWhiteSpace(line)) + continue; + var parts = line.Split('\u000F'); + if (parts.Length < 2) + continue; + if (!int.TryParse(parts[0], out var p1)) continue; + if (!int.TryParse(parts[1], out var p2)) continue; + _marriages.Add((p1, p2)); + if (_idToIndex.TryGetValue(p1, out var idx1)) + { + var person = _people[idx1]; + person.Spouses.Add(p2); + } + } + + // We don't need to parse adoptions/places/sources for the current tests + // Consume rest of the stream to ensure position is at end + while ((line = sr.ReadLine()) != null) { /* just drain */ } + + // Build children lists + foreach (var child in _people) + { + if (child.FatherId != 0 && _idToIndex.TryGetValue(child.FatherId, out var ifa)) + _people[ifa].Children.Add(child.ID); + if (child.MotherId != 0 && _idToIndex.TryGetValue(child.MotherId, out var imo)) + _people[imo].Children.Add(child.ID); + } + + // Set counts + IndividualCount = _people.Count; + MarriagesCount = _marriages.Count; + + // Initialize active + if (_people.Count > 0) + { + _actIndex = 0; + UpdateActiveState(); + } + } + private void UpdateActiveState() + { + if (_actIndex >= 0 && _actIndex < _people.Count) + { + var p = _people[_actIndex]; + GetActID = p.ID; + ChildCount = p.Children.Count; + SpouseCount = p.Spouses.Count; + } + else + { + GetActID = 0; + ChildCount = 0; + SpouseCount = 0; + } } public object? GetData(int v, EHejIndDataFields hind_idFather) { - throw new NotImplementedException(); + if (_idToIndex.TryGetValue(v, out var idx)) + { + var p = _people[idx]; + return hind_idFather == EHejIndDataFields.hind_idFather ? p.FatherId : p.MotherId; + } + return null; } public void AppendParent(EHejIndDataFields hind_idFather) @@ -164,17 +342,21 @@ public void AppendParent(EHejIndDataFields hind_idFather) public void GotoChild() { - throw new NotImplementedException(); + if (_actIndex < 0 || _actIndex >= _people.Count) + return; + var current = _people[_actIndex]; + if (current.Children.Count == 0) + return; + Seek(current.Children[0]); } public void AppendAdoption(int v) { - throw new NotImplementedException(); + // Not required by current tests (only that calling it does not change counters) } public event EventHandler OnStateChange; public event EventHandler OnUpdate; public event EventHandler OnDataChange; - } } \ No newline at end of file From 84a380e8eef6c6b910370bd948d04dbb5f1103f2 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:57 +0200 Subject: [PATCH 186/569] WinAhnenClsTests --- .../Model/GenBase/GedComBaseReaderTests.cs | 5 ++++- .../WinAhnenClsTests/Model/HejInd/CHejIndiDataTests2.cs | 8 ++++---- WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/WinAhnenNew/WinAhnenClsTests/Model/GenBase/GedComBaseReaderTests.cs b/WinAhnenNew/WinAhnenClsTests/Model/GenBase/GedComBaseReaderTests.cs index 7b6bf9fe7..9e23a6a75 100644 --- a/WinAhnenNew/WinAhnenClsTests/Model/GenBase/GedComBaseReaderTests.cs +++ b/WinAhnenNew/WinAhnenClsTests/Model/GenBase/GedComBaseReaderTests.cs @@ -24,7 +24,10 @@ public void GedComBaseReaderTest() [TestMethod()] public void CloseTest() { - Assert.Fail(); + using var ms = new MemoryStream(); + using var gbr = new GedComBaseReader(ms); + gbr.Close(); + Assert.ThrowsException(() => gbr.ReadLine()); } [TestMethod()] diff --git a/WinAhnenNew/WinAhnenClsTests/Model/HejInd/CHejIndiDataTests2.cs b/WinAhnenNew/WinAhnenClsTests/Model/HejInd/CHejIndiDataTests2.cs index 0ecc37978..9d2515c15 100644 --- a/WinAhnenNew/WinAhnenClsTests/Model/HejInd/CHejIndiDataTests2.cs +++ b/WinAhnenNew/WinAhnenClsTests/Model/HejInd/CHejIndiDataTests2.cs @@ -75,7 +75,7 @@ private void CreateTestData(bool Tested = false) Assert.AreEqual(1, FHejClass.GetActID, "1 Update"); } - FHejClass.ActualInd = cInd[1]; + FHejClass.ActualInd = (GenInterfaces.Interfaces.Genealogic.IGenPerson)cInd[1]; if (Tested) Assert.AreEqual(1, FDataChCount, "1 DataChange"); @@ -90,7 +90,7 @@ private void CreateTestData(bool Tested = false) Assert.AreEqual(2, FUpdateCount, "2 Update"); } - FHejClass.ActualInd = cInd[2]; + FHejClass.ActualInd = (GenInterfaces.Interfaces.Genealogic.IGenPerson)cInd[2]; if (Tested) Assert.AreEqual(2, FDataChCount, "2 DataChange"); @@ -108,7 +108,7 @@ private void CreateTestData(bool Tested = false) Assert.AreEqual(3, FHejClass.GetData(2, EHejIndDataFields.hind_idFather), "IDFather:3"); } - FHejClass.ActualInd = cInd[3]; + FHejClass.ActualInd = (GenInterfaces.Interfaces.Genealogic.IGenPerson)cInd[3]; if (Tested) Assert.AreEqual(4, FDataChCount, "4 DataChange"); @@ -130,7 +130,7 @@ private void CreateTestData(bool Tested = false) Assert.AreEqual(4, FHejClass.GetData(2, EHejIndDataFields.hind_idMother), "IDMother:4"); } - FHejClass.ActualInd = cInd[4]; + FHejClass.ActualInd = (GenInterfaces.Interfaces.Genealogic.IGenPerson)cInd[4]; if (Tested) { Assert.AreEqual(5, FDataChCount, "5 DataChange"); diff --git a/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj b/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj index 6118a5855..4a4d0f1a5 100644 --- a/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj +++ b/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj @@ -12,12 +12,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 116c2c4e865d432568084270773c8e0ddd27d909 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Thu, 25 Sep 2025 23:11:57 +0200 Subject: [PATCH 187/569] GenFreeWin --- GenFreeWin/Gen_FreeWin.sln | 70 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/GenFreeWin/Gen_FreeWin.sln b/GenFreeWin/Gen_FreeWin.sln index 8db8eb349..d222828d2 100644 --- a/GenFreeWin/Gen_FreeWin.sln +++ b/GenFreeWin/Gen_FreeWin.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.6.33815.320 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11012.119 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2EB874EF-C516-4C1C-8CD7-26EB15CA80E1}" ProjectSection(SolutionItems) = preProject @@ -138,6 +138,61 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Odf", "..\CSharpBi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OdtBoldTextExample", "..\CSharpBible\Data\DocumentUtils\OdtBoldTextExample\OdtBoldTextExample.csproj", "{E9D38F51-EB41-4CCD-A59F-FF8A2E5E295F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Html", "..\CSharpBible\Data\DocumentUtils\Document.Html\Document.Html.csproj", "{9C88ADB6-B533-30EA-883E-3F6C49470BD3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPC", "FPC", "{1E65C000-5F80-4D45-9AC4-6323D6700410}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinAhnenCls", "WinAhnenCls", "{2285F289-4D7B-4B59-A12E-6642D02FCDC5}" + ProjectSection(SolutionItems) = preProject + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejAdopData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejAdopData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejBase.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejBase.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejDataFilter.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejDataFilter.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejHelper.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejHelper.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejIndData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejIndData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejMarrData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejMarrData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejPlaceData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejPlaceData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejSourceData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\cls_HejSourceData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AhnenWinClone.lfm = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AhnenWinClone.lfm + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AhnenWinClone.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AhnenWinClone.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AWHejView.lfm = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AWHejView.lfm + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AWHejView.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_AWHejView.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_HejIndView.lfm = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_HejIndView.lfm + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_HejIndView.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_HejIndView.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_IndIndex.lfm = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_IndIndex.lfm + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_IndIndex.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\fra_IndIndex.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\frm_FilterEdit.lfm = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\frm_FilterEdit.lfm + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\frm_FilterEdit.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\frm_FilterEdit.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsAdopHej.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsAdopHej.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsHej.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsHej.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsHejFilter.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsHejFilter.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsHejHelper.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsHejHelper.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsIndHej.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsIndHej.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsMarrHej.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsMarrHej.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsPlaceHej.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsPlaceHej.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsSourceHej.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_ClsSourceHej.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_fraIndIndex.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_fraIndIndex.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_FrmEditFilter.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\tst_FrmEditFilter.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_AdopTestData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_AdopTestData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_IndTestData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_IndTestData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_MarrTestData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_MarrTestData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_PlaceTestData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_PlaceTestData.pas + ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_SourceTestData.pas = ..\..\Delphi\Projekte\Genealogie\Source\WinAhnenCls\unt_SourceTestData.pas + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Components", "Components", "{7B161326-4B7A-460A-9829-0C53409D552F}" + ProjectSection(SolutionItems) = preProject + ..\..\Delphi\Projekte\Genealogie\Source\Components\cls_GenHelperBase.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\cls_GenHelperBase.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\fra_NavIData.lfm = ..\..\Delphi\Projekte\Genealogie\Source\Components\fra_NavIData.lfm + ..\..\Delphi\Projekte\Genealogie\Source\Components\fra_NavIData.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\fra_NavIData.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\GBaseClasses.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\GBaseClasses.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\GFacts.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\GFacts.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\GSource.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\GSource.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\Unt_GNameHandler.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\Unt_GNameHandler.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\Unt_IData.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\Unt_IData.pas + ..\..\Delphi\Projekte\Genealogie\Source\Components\unt_IGenBase2.pas = ..\..\Delphi\Projekte\Genealogie\Source\Components\unt_IGenBase2.pas + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -536,6 +591,14 @@ Global {E9D38F51-EB41-4CCD-A59F-FF8A2E5E295F}.Release|Any CPU.Build.0 = Release|Any CPU {E9D38F51-EB41-4CCD-A59F-FF8A2E5E295F}.Release|x86.ActiveCfg = Release|Any CPU {E9D38F51-EB41-4CCD-A59F-FF8A2E5E295F}.Release|x86.Build.0 = Release|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Debug|x86.Build.0 = Debug|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Release|Any CPU.Build.0 = Release|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Release|x86.ActiveCfg = Release|Any CPU + {9C88ADB6-B533-30EA-883E-3F6C49470BD3}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -589,6 +652,9 @@ Global {1C5B8DDB-03AC-42F8-8E05-4C5C579A39AF} = {E0561A19-1682-4804-878F-24D4A1CB05C4} {0E111F65-9F56-4E0D-89D5-3AB0EFC824A7} = {5FC2CD13-FCE0-4A26-9944-EE8791512265} {E9D38F51-EB41-4CCD-A59F-FF8A2E5E295F} = {E0561A19-1682-4804-878F-24D4A1CB05C4} + {9C88ADB6-B533-30EA-883E-3F6C49470BD3} = {5FC2CD13-FCE0-4A26-9944-EE8791512265} + {2285F289-4D7B-4B59-A12E-6642D02FCDC5} = {1E65C000-5F80-4D45-9AC4-6323D6700410} + {7B161326-4B7A-460A-9829-0C53409D552F} = {1E65C000-5F80-4D45-9AC4-6323D6700410} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3B766B89-B32C-4777-9290-8BF7CEC401B5} From 461ce54f4e1dfe41d5d7edf540aed55a7ce64b23 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 26 Sep 2025 00:33:50 +0200 Subject: [PATCH 188/569] AboutEx --- .../Abstractions/ColorTests.cs | 36 ++ .../AsteroidsModernEngine.Tests.csproj | 21 ++ .../AsteroidsModernEngine.Tests/Fakes.cs | 52 +++ .../Model/CRandomTests.cs | 65 ++++ .../Services/GameWorldTests.cs | 205 ++++++++++++ .../Services/TitleScreenTests.cs | 316 ++++++++++++++++++ .../Abstractions/GameKey.cs | 11 + .../Abstractions/IGameInput.cs | 6 + .../Abstractions/IRandom.cs | 13 + .../Abstractions/IRenderContext.cs | 19 ++ .../Abstractions/ISound.cs | 8 + .../Abstractions/ITimeProvider.cs | 7 + .../AsteroidsModernEngine.csproj | 22 ++ .../AsteroidsModernEngine/Model/CRandom.cs | 15 + .../AsteroidsModernEngine/Model/Entities.cs | 33 ++ .../Model/Interfaces/IEntity.cs | 12 + .../Model/Interfaces/ISLEntity.cs | 6 + .../Model/Interfaces/IShip.cs | 8 + .../Services/GameSimulation.cs | 255 ++++++++++++++ .../Services/GameWorld.cs | 96 ++++++ .../Services/Interfaces/IGameWorld.cs | 19 ++ .../Services/TitleScreen.cs | 165 +++++++++ .../AsteroidsModernEngineTests.csproj | 19 ++ .../Services/TitleScreenTests.cs | 12 + CSharpBible/Games/AsteroidsModernUI/App.xaml | 6 + .../Games/AsteroidsModernUI/App.xaml.cs | 44 +++ .../AsteroidsModernUI.csproj | 22 ++ .../Behaviors/GameCanvasBehavior.cs | 96 ++++++ .../Infrastructure/MidiSound.cs | 88 +++++ .../Infrastructure/SilentSound.cs | 10 + .../Infrastructure/WpfInput.cs | 32 ++ .../Infrastructure/WpfRenderContext.cs | 57 ++++ .../Infrastructure/WpfTimeProvider.cs | 20 ++ .../Games/AsteroidsModernUI/MainWindow.xaml | 15 + .../AsteroidsModernUI/MainWindow.xaml.cs | 12 + .../ViewModels/MainViewModel.cs | 39 +++ .../Games/VTileEdit/Models/VTEModel.cs | 26 ++ 37 files changed, 1888 insertions(+) create mode 100644 CSharpBible/Games/AsteroidsModernEngine.Tests/Abstractions/ColorTests.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj create mode 100644 CSharpBible/Games/AsteroidsModernEngine.Tests/Fakes.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine.Tests/Model/CRandomTests.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine.Tests/Services/GameWorldTests.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine.Tests/Services/TitleScreenTests.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Abstractions/GameKey.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Abstractions/IGameInput.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRandom.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRenderContext.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Abstractions/ISound.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Abstractions/ITimeProvider.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Model/CRandom.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Model/Entities.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IEntity.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/ISLEntity.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IShip.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Services/GameSimulation.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Services/GameWorld.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Services/Interfaces/IGameWorld.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngine/Services/TitleScreen.cs create mode 100644 CSharpBible/Games/AsteroidsModernEngineTests/AsteroidsModernEngineTests.csproj create mode 100644 CSharpBible/Games/AsteroidsModernEngineTests/Services/TitleScreenTests.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/App.xaml create mode 100644 CSharpBible/Games/AsteroidsModernUI/App.xaml.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj create mode 100644 CSharpBible/Games/AsteroidsModernUI/Behaviors/GameCanvasBehavior.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/Infrastructure/MidiSound.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/Infrastructure/SilentSound.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfInput.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfRenderContext.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfTimeProvider.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml create mode 100644 CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml.cs create mode 100644 CSharpBible/Games/AsteroidsModernUI/ViewModels/MainViewModel.cs create mode 100644 CSharpBible/Games/VTileEdit/Models/VTEModel.cs diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/Abstractions/ColorTests.cs b/CSharpBible/Games/AsteroidsModernEngine.Tests/Abstractions/ColorTests.cs new file mode 100644 index 000000000..54f409eac --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/Abstractions/ColorTests.cs @@ -0,0 +1,36 @@ +using AsteroidsModern.Engine.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsteroidsModernEngine.Abstractions.Tests; +[TestClass] +public class ColorTests +{ + [TestMethod] + [DataRow(255u, 0u, 0u, 255u, DisplayName = "Rot, voll deckend")] // Rot, voll deckend + [DataRow(0u, 255u, 0u, 128u, DisplayName = "Grün, halb transparent")] // Grün, halb transparent + [DataRow(0u, 0u, 255u, 0u, DisplayName = "Blau, voll transparent")] // Blau, voll transparent + [DataRow(255u, 255u, 0u, 200u, DisplayName = "Gelb, teilweise transparent")] // Gelb, teilweise transparent + [DataRow(0u, 0u, 0u, 255u, DisplayName = "Schwarz, voll deckend")] // Schwarz, voll deckend + [DataRow(255u, 255u, 255u, 255u, DisplayName = "Weiß, voll deckend")] // Weiß, voll deckend + public void Color_ShouldInitializeCorrectly(uint uiR, uint uiG, uint uiB, uint uiA) + { + (byte R, byte G, byte B, byte A) = (Convert.ToByte(uiR), Convert.ToByte(uiG), Convert.ToByte(uiB), Convert.ToByte(uiA)); + var color = new Color(R, G, B, A); + Assert.AreEqual(A, color.A); + Assert.AreEqual(R, color.R); + Assert.AreEqual(G, color.G); + Assert.AreEqual(B, color.B); + } + + [TestMethod] + public void Color_StaticColors_ShouldHaveCorrectValues() + { + Assert.AreEqual(new Color(0, 0, 0), Color.Black); + Assert.AreEqual(new Color(255, 255, 255), Color.White); + Assert.AreEqual(new Color(128, 128, 128), Color.Gray); + } +} diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj b/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj new file mode 100644 index 000000000..4166441dd --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj @@ -0,0 +1,21 @@ + + + net8.0 + false + true + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/Fakes.cs b/CSharpBible/Games/AsteroidsModernEngine.Tests/Fakes.cs new file mode 100644 index 000000000..19b3211c7 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/Fakes.cs @@ -0,0 +1,52 @@ +using System.Numerics; +using AsteroidsModern.Engine.Abstractions; + +namespace AsteroidsModernEngine.Tests; + +public sealed class FakeInput : IGameInput +{ + private readonly HashSet _down = new(); + public bool IsDown(GameKey key) => _down.Contains(key); + public void Set(GameKey key, bool state) + { + if (state) _down.Add(key); else _down.Remove(key); + } +} + +public sealed class FakeTime : ITimeProvider +{ + public double TotalTime { get; private set; } + public double DeltaTime { get; private set; } + public void Advance(double dt) + { + DeltaTime = dt; + TotalTime += dt; + } +} + +public sealed class FakeSound : ISound +{ + public int ThrustCount { get; private set; } + public int ShootCount { get; private set; } + public int BangCount { get; private set; } + public void PlayThrust() => ThrustCount++; + public void PlayShoot() => ShootCount++; + public void PlayBang() => BangCount++; +} + +public sealed class SpyRender : IRenderContext +{ + public int ClearCalls { get; private set; } + public int Polylines { get; private set; } + public int Circles { get; private set; } + public int Texts { get; private set; } + public int Pixels { get; private set; } + + public void Clear(Color color) => ClearCalls++; + public void DrawPolygon(Vector2[] points, Color color, float thickness = 1f) => Polylines++; + public void DrawCircle(Vector2 center, float radius, Color color, float thickness = 1f, int segments = 24) => Circles++; + + public void DrawText(string text, Vector2 position, Color color, float fontSize = 12) => Texts++; + + public void DrawPixel(Vector2 center, Color color) => Pixels++; +} diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/Model/CRandomTests.cs b/CSharpBible/Games/AsteroidsModernEngine.Tests/Model/CRandomTests.cs new file mode 100644 index 000000000..d0a2d967b --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/Model/CRandomTests.cs @@ -0,0 +1,65 @@ +// Pseudocode-Plan: +// - Tests von xUnit auf MSTest umstellen +// - Test `Next`: +// - Wert liegt innerhalb [min, max) über viele Iterationen +// - Gibt `min` zurück, wenn `min == max` +// - Wirft ArgumentOutOfRangeException, wenn `min > max` +// - Bei Intervallbreite 1 (z. B. [5,6)) immer 5 +// - Test `NextSingle`: +// - Wert liegt in [0.0f, 1.0f) über viele Iterationen + +using System; +using AsteroidsModern.Engine.Model; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace AsteroidsModern.Engine.Model.Tests; + +[TestClass] +public class CRandomTests +{ + [TestMethod] + public void Next_ReturnsValuesWithinRange() + { + var rnd = new CRandom(); + for (int i = 0; i < 1000; i++) + { + int value = rnd.Next(-10, 10); + Assert.IsTrue(value >= -10 && value <= 9, $"Wert {value} außerhalb des erwarteten Bereichs."); + } + } + + [TestMethod] + public void Next_ReturnsMin_WhenMinEqualsMax() + { + var rnd = new CRandom(); + Assert.AreEqual(42, rnd.Next(42, 42)); + } + + [TestMethod] + public void Next_Throws_WhenMinGreaterThanMax() + { + var rnd = new CRandom(); + Assert.ThrowsException(() => rnd.Next(10, 0)); + } + + [TestMethod] + public void Next_WithUnitRange_ReturnsOnlyMin() + { + var rnd = new CRandom(); + for (int i = 0; i < 100; i++) + { + Assert.AreEqual(5, rnd.Next(5, 6)); + } + } + + [TestMethod] + public void NextSingle_ReturnsValuesWithinRange() + { + var rnd = new CRandom(); + for (int i = 0; i < 5000; i++) + { + float value = rnd.NextSingle(); + Assert.IsTrue(value >= 0f && value < 1f, $"Wert {value} außerhalb des erwarteten Bereichs."); + } + } +} \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/Services/GameWorldTests.cs b/CSharpBible/Games/AsteroidsModernEngine.Tests/Services/GameWorldTests.cs new file mode 100644 index 000000000..1522c17bc --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/Services/GameWorldTests.cs @@ -0,0 +1,205 @@ +using System.Numerics; +using AsteroidsModern.Engine.Abstractions; +using AsteroidsModern.Engine.Services; +using AsteroidsModern.Engine.Model; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using NSubstitute; + +namespace AsteroidsModernEngine.Tests.Services; + +[TestClass] +public class GameWorldTests +{ + private IRandom _rand = null!; + private IGameInput _input = null!; + private ITimeProvider _time = null!; + private ISound _sound = null!; + private int __rand = 0; + + [TestInitialize] + public void Init() + { + _rand = Substitute.For(); + __rand = 0; + _rand.Next(Arg.Any(), Arg.Any()).Returns(x => __rand++ % (int)x[1] ); + _rand.NextSingle().Returns(x => (float)Math.Exp(__rand++) * 1009f / 367f % 1f ); + _input = Substitute.For(); + _time = Substitute.For(); + _sound = Substitute.For(); + } + + private GameWorld CreateWorld(Vector2 size) + { + var gw = new GameWorld(_rand) { WorldSize = size }; + gw.Reset(); + return gw; + } + + [TestMethod] + public void Reset_ShouldPlaceShipCenterAndSpawnAsteroids() + { + var gw = CreateWorld(new(100, 80)); + Assert.AreEqual(new Vector2(50, 40), gw.Ship.Position); + Assert.IsTrue(gw.Asteroids.Count > 0); + Assert.AreEqual(0, gw.Bullets.Count); + } + + [TestMethod] + public void Update_Thrust_IncreasesVelocityAndCallsSound() + { + var gw = CreateWorld(new(200, 200)); + + _input.IsDown(GameKey.Thrust).Returns(true); + _time.DeltaTime.Returns(0.5); + + var velBefore = gw.Ship.Velocity; + gw.Update(_input, _time, _sound); + Assert.IsTrue(gw.Ship.Velocity.Length() > velBefore.Length()); + _sound.Received().PlayThrust(); + } + + [TestMethod] + public void Update_Rotate_LeftRightChangesRotation() + { + var gw = CreateWorld(new(200, 200)); + _time.DeltaTime.Returns(1.0); + + _input.IsDown(GameKey.Left).Returns(true); + gw.Update(_input, _time, _sound); + var rotAfterLeft = gw.Ship.Rotation; + + var input2 = Substitute.For(); + input2.IsDown(GameKey.Right).Returns(true); + gw.Update(input2, _time, _sound); + Assert.AreNotEqual(rotAfterLeft, gw.Ship.Rotation); + } + + [TestMethod] + public void Fire_SpawnsBullet_WithCooldown() + { + var gw = CreateWorld(new(300, 300)); + + _input.IsDown(GameKey.Fire).Returns(true); + _time.DeltaTime.Returns(0.016); + + // t=0, first shot + _time.TotalTime.Returns(0.0); + gw.Update(_input, _time, _sound); + Assert.AreEqual(1, gw.Bullets.Count); + _sound.Received().PlayShoot(); + + // t=0.1, still cooldown, no extra bullet + _time.TotalTime.Returns(0.1); + gw.Update(_input, _time, _sound); + Assert.AreEqual(1, gw.Bullets.Count); + + // t=0.2, second shot + _time.TotalTime.Returns(0.2); + gw.Update(_input, _time, _sound); + Assert.AreEqual(2, gw.Bullets.Count); + } + + [TestMethod] + public void Bullets_Expire_ByLife() + { + var gw = CreateWorld(new(300, 300)); + + _input.IsDown(GameKey.Fire).Returns(true); + _time.DeltaTime.Returns(0.016); + _time.TotalTime.Returns(0.0); + gw.Update(_input, _time, _sound); + Assert.AreEqual(1, gw.Bullets.Count); + + // Advance life beyond bullet life + for (int i = 0; i < 100; i++) + { + _time.TotalTime.Returns(i * 0.05); + gw.Update(_input, _time, _sound); + } + Assert.AreEqual(0, gw.Bullets.Count); + } + + [TestMethod] + public void Wrap_ShouldWrapShipAndEntities() + { + var gw = CreateWorld(new(100, 100)); + _time.DeltaTime.Returns(1.0); + + gw.Ship.Position = new Vector2(-1, 50); + gw.Update(_input, _time, _sound); + Assert.IsTrue(gw.Ship.Position.X >= 0 && gw.Ship.Position.X <= 100); + } + + private static (List asteroids, List bullets) GetSimLists(GameWorld gw) + { + var simField = typeof(GameWorld).GetField("_simulation", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + var sim = simField!.GetValue(gw)!; + var astField = sim.GetType().GetField("_asteroids", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + var bulletField = sim.GetType().GetField("_bullets", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + return ((List)astField!.GetValue(sim)!, (List)bulletField!.GetValue(sim)!); + } + + [TestMethod] + public void Collision_ShipWithAsteroid_ResetsWorld() + { + var gw = CreateWorld(new(200, 200)); + _time.DeltaTime.Returns(0.016); + + // move ship away from center + gw.Ship.Position = new(104, 98); + // place an asteroid at ship + var (asteroids, _) = GetSimLists(gw); + asteroids.Clear(); + asteroids.Add(new Asteroid { Position = gw.Ship.Position, Velocity = Vector2.Zero, Radius = 20 }); + + gw.Update(_input, _time, _sound); + _sound.Received().PlayBang(); + Assert.AreEqual(new Vector2(100, 100), gw.Ship.Position); // reset moved ship + } + + [TestMethod] + public void Collision_BulletWithAsteroid_SplitsOrRemoves() + { + var gw = CreateWorld(new(200, 200)); + _time.DeltaTime.Returns(0.016); + + // move ship away from center + gw.Ship.Position = new(1, 1); + // prepare one large asteroid and one bullet colliding + var (asteroids, bullets) = GetSimLists(gw); + asteroids.Clear(); + bullets.Clear(); + asteroids.Add(new Asteroid { Position = new(100, 100), Velocity = Vector2.Zero, Radius = 30 }); + bullets.Add(new Bullet { Position = new(100, 100), Velocity = Vector2.Zero, Radius = 2 }); + + gw.Update(_input, _time, _sound); + _sound.Received().PlayBang(); + Assert.IsTrue(gw.Asteroids.Count >= 1); // split into 2 if large, or removed if small + Assert.AreEqual(0, gw.Bullets.Count); + } + + [TestMethod] + [DataRow(0, 0,DisplayName ="Ship only")] + [DataRow(3, 0, DisplayName = "3 Asteroids")] + [DataRow(0, 5, DisplayName = "5 Bullets")] + [DataRow(4, 7, DisplayName = "4 Asteroids, 7 Bullets")] + public void Render_CallsContext(int nA, int nB) + { + // Arrange + var gw = CreateWorld(new(200, 200)); + var ctx = Substitute.For(); + + var (asteroids, bullets) = GetSimLists(gw); + asteroids.Clear(); + bullets.Clear(); + for (int i = 0; i < nA; i++) + asteroids.Add(new Asteroid { Position = new(10 + i * 20, 50), Velocity = Vector2.Zero, Radius = 10 + i * 5 }); + for (int i = 0; i < nB; i++) + bullets.Add(new Bullet { Position = new(100, 100), Velocity = Vector2.Zero, Radius = 2 }); + + gw.Render(ctx); + ctx.Received().Clear(Arg.Any()); + ctx.Received(1).DrawPolygon(Arg.Any(), Arg.Any(), Arg.Any()); + ctx.Received(nA+nB).DrawCircle(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); + } +} diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/Services/TitleScreenTests.cs b/CSharpBible/Games/AsteroidsModernEngine.Tests/Services/TitleScreenTests.cs new file mode 100644 index 000000000..84187639c --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/Services/TitleScreenTests.cs @@ -0,0 +1,316 @@ +using System; +using System.Reflection; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using NSubstitute; +using AsteroidsModern.Engine.Services; +using AsteroidsModern.Engine.Abstractions; +using System.Numerics; + +namespace AsteroidsModernEngine.Services.Tests; + +/* +Pseudocode / Plan: +- Helper: MakeInput(left, right, fire, thrust) => IGameInput Substitute mit fixen Rückgaben. +- Helper: UpdateFrame(ts, ...) => ts.Update(MakeInput(...)). +- Helper: PressLeft/PressRight/PressFire/PressThrust => 1 Frame mit Taste, dann 1 Frame ohne (Edge-Detection). +- Helper: EnterOptions/EnterHighscores/EnterCredits => Navigation per Right-Presses und Fire. +- Helper: GetScreenName(ts) => Reflection liest private Field "_screen" (enum) und gibt Name zurück. + +Tests (MSTest + NSubstitute, DataRow für Einzeltests): +1) StartGame_FireOnTitle_RaisesEvent + - DataTestMethod mit einer DataRow. + - Fire drücken => StartGameRequested wurde einmal ausgelöst. + +2) StartGame_ThrustOnTitle_RaisesEvent + - DataTestMethod mit einer DataRow. + - Thrust drücken => StartGameRequested wurde einmal ausgelöst. + +3) Title_NavigateRight_Fire_OpensExpectedScreen + - DataTestMethod mit DataRows: stepsRight=1->Options, 2->Highscores, 3->Credits. + - Rechts so oft drücken, dann Fire => Screen reflektieren und vergleichen. + +4) Title_NavigateLeft_Wraps_ToCredits + - DataTestMethod (eine DataRow). + - Einmal Links, dann Fire => Screen "Credits". + +5) Options_ToggleSound_And_ChangeLives_OneStep + - DataTestMethod mit DataRows: inc=true->StartLives=4, inc=false->StartLives=2. + - In Optionen: einmal Taste (Sound toggelt), nochmal gleiche Taste (Lives +/-1). + +6) Options_StartLives_Clamped + - DataTestMethod mit DataRows: incCount=+20->9, incCount=-20->1. + - In Optionen: Wiederhole Paar-Drücke (Togglen+Ändern) entsprechend Inkrement/Dekrement. + +7) SetLastScore_UpdatesHighscore_And_ReturnsToTitle + - DataTestMethod mit DataRow: score=50->HighScore=50, Screen=Title. + +8) SetLastScore_DoesNotLowerHighscore + - DataTestMethod (eine DataRow). + - Zuerst hoher Score setzen, dann kleiner => HighScore bleibt hoch, Screen=Title. + +9) Options_EdgeDetection_NoRepeatOnHold + - DataTestMethod (eine DataRow). + - In Optionen: Ein Frame Right=true, direkt danach erneut Right=true ohne Release: + => Nur ein Toggle (Sound), kein Lives-Ändern; nach Release und erneutem Press wieder Toggle. +*/ + +[TestClass] +public class TitleScreenTests +{ + // Helpers + + private static IGameInput MakeInput(bool left = false, bool right = false, bool fire = false, bool thrust = false) + { + var input = Substitute.For(); + input.IsDown(GameKey.Left).Returns(left); + input.IsDown(GameKey.Right).Returns(right); + input.IsDown(GameKey.Fire).Returns(fire); + input.IsDown(GameKey.Thrust).Returns(thrust); + return input; + } + + private static void UpdateFrame(TitleScreen ts, bool left = false, bool right = false, bool fire = false, bool thrust = false) + => ts.Update(MakeInput(left, right, fire, thrust)); + + private static void PressLeft(TitleScreen ts) + { + UpdateFrame(ts, left: true); + UpdateFrame(ts); + } + + private static void PressRight(TitleScreen ts) + { + UpdateFrame(ts, right: true); + UpdateFrame(ts); + } + + private static void PressFire(TitleScreen ts) + { + UpdateFrame(ts, fire: true); + UpdateFrame(ts); + } + + private static void PressThrust(TitleScreen ts) + { + UpdateFrame(ts, thrust: true); + UpdateFrame(ts); + } + + private static void EnterOptions(TitleScreen ts) + { + PressRight(ts); // -> index 1 + PressFire(ts); + } + + private static void EnterHighscores(TitleScreen ts) + { + PressRight(ts); + PressRight(ts); // -> index 2 + PressFire(ts); + } + + private static void EnterCredits(TitleScreen ts) + { + PressRight(ts); + PressRight(ts); + PressRight(ts); // -> index 3 + PressFire(ts); + } + + private static string GetScreenName(TitleScreen ts) + { + var field = typeof(TitleScreen).GetField("_screen", BindingFlags.NonPublic | BindingFlags.Instance); + var value = field!.GetValue(ts)!; + return value.ToString()!; + } + + // Tests + + [DataTestMethod] + [DataRow(true)] + public void StartGame_FireOnTitle_RaisesEvent(bool _) + { + var ts = new TitleScreen(); + int startEvents = 0; + ts.StartGameRequested += () => startEvents++; + + PressFire(ts); + + Assert.AreEqual(1, startEvents, "StartGameRequested sollte genau einmal ausgelöst werden."); + } + + [DataTestMethod] + [DataRow(true)] + public void StartGame_ThrustOnTitle_RaisesEvent(bool _) + { + var ts = new TitleScreen(); + int startEvents = 0; + ts.StartGameRequested += () => startEvents++; + + PressThrust(ts); + + Assert.AreEqual(1, startEvents, "StartGameRequested sollte genau einmal ausgelöst werden."); + } + + [DataTestMethod] + [DataRow(1, "Options")] + [DataRow(2, "Highscores")] + [DataRow(3, "Credits")] + public void Title_NavigateRight_Fire_OpensExpectedScreen(int stepsRight, string expectedScreen) + { + var ts = new TitleScreen(); + + for (int i = 0; i < stepsRight; i++) + PressRight(ts); + + PressFire(ts); + + Assert.AreEqual(expectedScreen, GetScreenName(ts)); + } + + [DataTestMethod] + [DataRow(true)] + public void Title_NavigateLeft_Wraps_ToCredits(bool _) + { + var ts = new TitleScreen(); + + PressLeft(ts); // von 0 nach 3 (Wrap) + PressFire(ts); + + Assert.AreEqual("Credits", GetScreenName(ts)); + } + + [DataTestMethod] + [DataRow(true, 4)] + [DataRow(false, 2)] + public void Options_ToggleSound_And_ChangeLives_OneStep(bool increase, int expectedLives) + { + var ts = new TitleScreen(); + EnterOptions(ts); + + bool initialSound = ts.SoundEnabled; + + if (increase) + { + // Toggle Sound + PressRight(ts); + // Change Lives +1 + PressRight(ts); + } + else + { + // Toggle Sound + PressLeft(ts); + // Change Lives -1 + PressLeft(ts); + } + + // Sound wurde genau einmal getoggelt + Assert.AreNotEqual(initialSound, ts.SoundEnabled); + Assert.AreEqual(expectedLives, ts.StartLives); + } + + [DataTestMethod] + [DataRow(20, 9)] + [DataRow(-20, 1)] + public void Options_StartLives_Clamped(int steps, int expectedLives) + { + var ts = new TitleScreen(); + EnterOptions(ts); + + if (steps >= 0) + { + for (int i = 0; i < steps; i++) + { + PressRight(ts); // toggle sound + PressRight(ts); // lives +1 + } + } + else + { + for (int i = 0; i < -steps; i++) + { + PressLeft(ts); // toggle sound + PressLeft(ts); // lives -1 + } + } + + Assert.AreEqual(expectedLives, ts.StartLives); + } + + [DataTestMethod] + [DataRow(50, 50)] + public void SetLastScore_UpdatesHighscore_And_ReturnsToTitle(int score, int expectedHigh) + { + var ts = new TitleScreen(); + + // Simuliere: gehe in Highscores, dann SetLastScore sollte wieder Titel setzen + EnterHighscores(ts); + Assert.AreEqual("Highscores", GetScreenName(ts)); + + ts.SetLastScore(score); + + Assert.AreEqual("Title", GetScreenName(ts)); + Assert.AreEqual(expectedHigh, ts.HighScore); + } + + [DataTestMethod] + [DataRow(true)] + public void SetLastScore_DoesNotLowerHighscore(bool _) + { + var ts = new TitleScreen(); + + ts.SetLastScore(100); + Assert.AreEqual(100, ts.HighScore); + + ts.SetLastScore(50); + Assert.AreEqual(100, ts.HighScore); + Assert.AreEqual("Title", GetScreenName(ts)); + } + + [DataTestMethod] + [DataRow(true)] + public void Options_EdgeDetection_NoRepeatOnHold(bool _) + { + var ts = new TitleScreen(); + EnterOptions(ts); + + bool initialSound = ts.SoundEnabled; + + // Frame 1: Right down (edge -> toggle sound) + UpdateFrame(ts, right: true); + Assert.AreNotEqual(initialSound, ts.SoundEnabled); + var soundAfterFirst = ts.SoundEnabled; + + // Frame 2: Right still down (no edge -> no change) + UpdateFrame(ts, right: true); + Assert.AreEqual(soundAfterFirst, ts.SoundEnabled, "Kein weiterer Toggle ohne Release erwartet."); + + // Release + UpdateFrame(ts); + + // Press again -> edge -> toggle back + UpdateFrame(ts, right: true); + Assert.AreEqual(initialSound, ts.SoundEnabled, "Nach erneutem Edge sollte Sound wieder togglen."); + } + + [TestMethod()] + [DataRow(TitleScreen.Screen.Title,7)] + [DataRow(TitleScreen.Screen.Options,5)] + [DataRow(TitleScreen.Screen.Highscores,4)] + [DataRow(TitleScreen.Screen.Credits,4)] + public void RenderTest(TitleScreen.Screen scn,int nT) + { + var ts = new TitleScreen(); + // Set screen via Reflection + var field = typeof(TitleScreen).GetField("_screen", BindingFlags.NonPublic | BindingFlags.Instance); + field!.SetValue(ts, scn); + var ctx = Substitute.For(); + + ts.Render(ctx); + + // ctx.Received().Clear(Color.Black); + ctx.Received(nT).DrawText(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); + } + +} \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernEngine/Abstractions/GameKey.cs b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/GameKey.cs new file mode 100644 index 000000000..6c56beb37 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/GameKey.cs @@ -0,0 +1,11 @@ +namespace AsteroidsModern.Engine.Abstractions; + +public enum GameKey +{ + Left, + Right, + Thrust, + Fire, + Hyperspace, + Quit, +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IGameInput.cs b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IGameInput.cs new file mode 100644 index 000000000..116c8de2f --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IGameInput.cs @@ -0,0 +1,6 @@ +namespace AsteroidsModern.Engine.Abstractions; + +public interface IGameInput +{ + bool IsDown(GameKey key); +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRandom.cs b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRandom.cs new file mode 100644 index 000000000..269635ae6 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRandom.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsteroidsModern.Engine.Abstractions; + +public interface IRandom +{ + int Next(int minValue, int maxValue); + float NextSingle(); +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRenderContext.cs b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRenderContext.cs new file mode 100644 index 000000000..524b14731 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/IRenderContext.cs @@ -0,0 +1,19 @@ +using System.Numerics; + +namespace AsteroidsModern.Engine.Abstractions; + +public interface IRenderContext +{ + void Clear(Color color); + void DrawPolygon(Vector2[] points, Color color, float thickness = 1f); + void DrawCircle(Vector2 center, float radius, Color color, float thickness = 1f, int segments = 24); + void DrawPixel(Vector2 center, Color color); + void DrawText(string text, Vector2 position, Color color, float fontSize = 12f); +} + +public readonly record struct Color(byte R, byte G, byte B, byte A=255) +{ + public static readonly Color Black = new(0,0,0); + public static readonly Color White = new(255,255,255); + public static readonly Color Gray = new(128,128,128); +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Abstractions/ISound.cs b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/ISound.cs new file mode 100644 index 000000000..778c77baf --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/ISound.cs @@ -0,0 +1,8 @@ +namespace AsteroidsModern.Engine.Abstractions; + +public interface ISound +{ + void PlayThrust(); + void PlayShoot(); + void PlayBang(); +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Abstractions/ITimeProvider.cs b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/ITimeProvider.cs new file mode 100644 index 000000000..b4cf213a6 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Abstractions/ITimeProvider.cs @@ -0,0 +1,7 @@ +namespace AsteroidsModern.Engine.Abstractions; + +public interface ITimeProvider +{ + double TotalTime { get; } + double DeltaTime { get; } +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj b/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj new file mode 100644 index 000000000..84d09e04e --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj @@ -0,0 +1,22 @@ + + + enable + enable + preview + AsteroidsModernEngine + AsteroidsModern.Engine + + + + <_SdkVersion>$(NETCoreSdkVersion) + + net6.0 + $(TargetFrameworks);net7.0 + $(TargetFrameworks);net8.0 + $(TargetFrameworks);net9.0 + + + + + + diff --git a/CSharpBible/Games/AsteroidsModernEngine/Model/CRandom.cs b/CSharpBible/Games/AsteroidsModernEngine/Model/CRandom.cs new file mode 100644 index 000000000..b10dc1e35 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Model/CRandom.cs @@ -0,0 +1,15 @@ +using AsteroidsModern.Engine.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsteroidsModern.Engine.Model; + +public class CRandom: IRandom +{ + private readonly Random _rand = new(); + public int Next(int minValue, int maxValue) => _rand.Next(minValue, maxValue); + public float NextSingle() => _rand.NextSingle(); +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Model/Entities.cs b/CSharpBible/Games/AsteroidsModernEngine/Model/Entities.cs new file mode 100644 index 000000000..d17262305 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Model/Entities.cs @@ -0,0 +1,33 @@ +using AsteroidsModern.Engine.Model.Interfaces; +using System.Numerics; + +namespace AsteroidsModern.Engine.Model; + +public abstract class Entity : IEntity +{ + public Vector2 Position { get; set; } + public Vector2 Velocity { get; set; } + public float Rotation { get; set; } + public float Radius { get; init; } + public bool IsAlive { get; set; } = true; +} + +public sealed class Ship : Entity, IShip +{ + public float ThrustPower { get; init; } = 130f; + public float RotationSpeed { get; init; } = 3.2f; + public float Drag { get; init; } = 0.995f; +} + +public sealed class Asteroid : Entity +{ +} + +public sealed class Bullet : Entity, ISLEntity +{ + public double Life { get; set; } = 1.2; // seconds +} +public sealed class Dust : Entity , ISLEntity +{ + public double Life { get; set; } = 0.4; // seconds +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IEntity.cs b/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IEntity.cs new file mode 100644 index 000000000..569f25dc5 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IEntity.cs @@ -0,0 +1,12 @@ +using System.Numerics; + +namespace AsteroidsModern.Engine.Model.Interfaces; + +public interface IEntity +{ + Vector2 Position { get; set; } + Vector2 Velocity { get; set; } + float Rotation { get; set; } + float Radius { get; init; } + bool IsAlive { get; set; } +} \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/ISLEntity.cs b/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/ISLEntity.cs new file mode 100644 index 000000000..7fd5d444c --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/ISLEntity.cs @@ -0,0 +1,6 @@ +namespace AsteroidsModern.Engine.Model.Interfaces; + +public interface ISLEntity : IEntity +{ + double Life { get; set; } +} \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IShip.cs b/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IShip.cs new file mode 100644 index 000000000..e6234efdd --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Model/Interfaces/IShip.cs @@ -0,0 +1,8 @@ +namespace AsteroidsModern.Engine.Model.Interfaces; + +public interface IShip: IEntity +{ + float ThrustPower { get; init; } + float RotationSpeed { get; init; } + float Drag { get; init; } +} \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernEngine/Services/GameSimulation.cs b/CSharpBible/Games/AsteroidsModernEngine/Services/GameSimulation.cs new file mode 100644 index 000000000..b59d69d1b --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Services/GameSimulation.cs @@ -0,0 +1,255 @@ +using System; +using System.Collections.Generic; +using System.Numerics; +using AsteroidsModern.Engine.Abstractions; +using AsteroidsModern.Engine.Model; + +namespace AsteroidsModern.Engine.Services; + +/// +/// GameSimulation encapsulates game play: physics, input, collisions, scoring, HUD. +/// It renders gameplay and HUD, and exposes a GameOver event. +/// +public sealed class GameSimulation(IRandom rand) +{ + private readonly List _asteroids = new(); + private readonly List _bullets = new(); + private readonly List _dust = new(); + private readonly IRandom _rand = rand; + + public Ship Ship { get; } = new() { Radius = 12f }; + public IReadOnlyList Asteroids => _asteroids; + public IReadOnlyList Bullets => _bullets; + public IReadOnlyList Dust => _dust; + + public Vector2 WorldSize { get; set; } = new(800, 600); + + public int Score { get; private set; } + public int Lives { get; private set; } + + public event Action? GameOver; // final score + + public void StartGame(int startLives) + { + Score = 0; + Lives = Math.Max(1, startLives); + Reset(); + } + + public void Reset() + { + _asteroids.Clear(); + _bullets.Clear(); + Ship.Position = WorldSize / 2f; + Ship.Velocity = Vector2.Zero; + Ship.Rotation = 0f; + + for (int i = 0; i < 6; i++) + _asteroids.Add(RandomAsteroid()); + } + + public void Update(IGameInput input, ITimeProvider time, ISound sound, bool soundEnabled) + { + float dt = (float)time.DeltaTime; + + if (input.IsDown(GameKey.Quit)) + GameOver?.Invoke(0); + + // Ship control + if (input.IsDown(GameKey.Left)) Ship.Rotation -= Ship.RotationSpeed * dt; + if (input.IsDown(GameKey.Right)) Ship.Rotation += Ship.RotationSpeed * dt; + if (input.IsDown(GameKey.Thrust)) + { + var dir = new Vector2((float)Math.Cos(Ship.Rotation - MathF.PI / 2f), (float)Math.Sin(Ship.Rotation - MathF.PI / 2f)); + Ship.Velocity += dir * Ship.ThrustPower * dt; + if (soundEnabled) sound.PlayThrust(); + for (int i = 0; i < 2; i++) + _dust.Add(new Dust + { + Position = Ship.Position, + Velocity = Ship.Velocity + Rotate(new Vector2(0, 100), Ship.Rotation + (0.5f - _rand.NextSingle()) * 0.3f)* (0.5f + _rand.NextSingle()) + }); + } + Ship.Velocity *= Ship.Drag; // tiny drag + Ship.Position += Ship.Velocity * dt; + Wrap(Ship); + + // Fire + if (input.IsDown(GameKey.Fire)) + { + TryShoot(time); + if (soundEnabled) sound.PlayShoot(); + } + + // Update bullets + for (int i = _bullets.Count - 1; i >= 0; i--) + { + var b = _bullets[i]; + b.Position += b.Velocity * dt; + b.Life -= time.DeltaTime; + Wrap(b); + if (b.Life <= 0) _bullets.RemoveAt(i); + } + + // Update bullets + for (int i = _dust.Count - 1; i >= 0; i--) + { + var b = _dust[i]; + b.Position += b.Velocity * dt; + b.Life -= time.DeltaTime; + Wrap(b); + if (b.Life <= 0) _dust.RemoveAt(i); + } + + // Update asteroids + foreach (var a in _asteroids) + { + a.Position += a.Velocity * dt; + Wrap(a); + } + + // Collisions: Ship vs Asteroids + for (int i = _asteroids.Count - 1; i >= 0; i--) + { + if (Collides(Ship, _asteroids[i])) + { + if (soundEnabled) sound.PlayBang(); + LoseLifeOrGameOver(); + return; + } + } + + // Collisions: Bullets vs Asteroids + for (int i = _bullets.Count - 1; i >= 0; i--) + { + for (int j = _asteroids.Count - 1; j >= 0; j--) + { + if (Collides(_bullets[i], _asteroids[j])) + { + if (soundEnabled) sound.PlayBang(); + Score += GetPointsForAsteroid(_asteroids[j]); + _bullets.RemoveAt(i); + SplitAsteroid(j); + break; + } + } + } + + if (_asteroids.Count == 0) + { + // Level cleared, spawn new asteroids + for (int i = 0; i < 6; i++) + _asteroids.Add(RandomAsteroid()); + } + } + + public void Render(IRenderContext ctx) + { + // Ship triangle + var p = Ship.Position; float r = Ship.Rotation; float s = 14f; + Vector2 tip = p + new Vector2(MathF.Cos(r - MathF.PI / 2), MathF.Sin(r - MathF.PI / 2)) * s; + Vector2 left = p + new Vector2(MathF.Cos(r + MathF.PI * 2 / 3 - MathF.PI / 2), MathF.Sin(r + MathF.PI * 2 / 3 - MathF.PI / 2)) * s * 0.8f; + Vector2 right = p + new Vector2(MathF.Cos(r - MathF.PI * 2 / 3 - MathF.PI / 2), MathF.Sin(r - MathF.PI * 2 / 3 - MathF.PI / 2)) * s * 0.8f; + ctx.DrawPolygon(new[] { tip, left, right }, Color.White, 2f); + + foreach (var a in _asteroids) + ctx.DrawCircle(a.Position, a.Radius, Color.Gray, 2f); + + foreach (var b in _bullets) + ctx.DrawCircle(b.Position, 2f, Color.White, 2f); + + foreach (var b in _dust) + ctx.DrawPixel(b.Position, Color.White); + + // HUD + ctx.DrawText($"Score: {Score}", new Vector2(10, 10), Color.White, 16f); + ctx.DrawText($"Leben: {Lives}", new Vector2(MathF.Max(10f, WorldSize.X - 140f), 10), Color.White, 16f); + } + + private void LoseLifeOrGameOver() + { + if (Lives > 1) + { + Lives--; + ResetAfterLifeLoss(); + } + else + { + GameOver?.Invoke(Score); + } + } + + private void ResetAfterLifeLoss() + { + _bullets.Clear(); + Ship.Position = WorldSize / 2f; + Ship.Velocity = Vector2.Zero; + Ship.Rotation = 0f; + } + + private double _lastShotTime = double.NegativeInfinity; + private void TryShoot(ITimeProvider time) + { + if (time.TotalTime - _lastShotTime < 0.150) return; + _lastShotTime = time.TotalTime; + + var dir = new Vector2((float)Math.Cos(Ship.Rotation - MathF.PI / 2f), (float)Math.Sin(Ship.Rotation - MathF.PI / 2f)); + var b = new Bullet + { + Position = Ship.Position + dir * 16f, + Velocity = Ship.Velocity + dir * 380f, + Radius = 2f, + }; + _bullets.Add(b); + } + + private void SplitAsteroid(int index) + { + var a = _asteroids[index]; + _asteroids.RemoveAt(index); + if (a.Radius > 14f) + { + float nr = a.Radius * 0.6f; + _asteroids.Add(new Asteroid { Position = a.Position, Velocity = Rotate(a.Velocity, +0.5f), Radius = nr }); + _asteroids.Add(new Asteroid { Position = a.Position, Velocity = Rotate(a.Velocity, -0.5f), Radius = nr }); + } + for (int i = 0; i < 15; i++) + _dust.Add(new Dust + { + Position = a.Position, + Velocity = a.Velocity + Rotate(new Vector2(1, 0), _rand.NextSingle() * MathF.PI * 2f) * (50f+ _rand.NextSingle()*50f) + }); + } + + private int GetPointsForAsteroid(Asteroid a) + { + if (a.Radius > 26f) return 20; + if (a.Radius > 18f) return 50; + return 100; + } + + private Asteroid RandomAsteroid() + { + var pos = new Vector2(_rand.NextSingle() * WorldSize.X, _rand.NextSingle() * WorldSize.Y); + var vel = new Vector2(_rand.NextSingle() - 0.5f, _rand.NextSingle() - 0.5f) * 60f; + float radius = 22f + _rand.NextSingle() * 30f; + return new Asteroid { Position = pos, Velocity = vel, Radius = radius }; + } + + private static bool Collides(Entity a, Entity b) + => Vector2.DistanceSquared(a.Position, b.Position) < (a.Radius + b.Radius) * (a.Radius + b.Radius); + + private void Wrap(Entity e) + { + var pos = e.Position; + if (pos.X < 0) pos.X += WorldSize.X; else if (pos.X > WorldSize.X) pos.X -= WorldSize.X; + if (pos.Y < 0) pos.Y += WorldSize.Y; else if (pos.Y > WorldSize.Y) pos.Y -= WorldSize.Y; + e.Position = pos; + } + + private static Vector2 Rotate(Vector2 v, float angle) + { + float c = MathF.Cos(angle), s = MathF.Sin(angle); + return new Vector2(v.X * c - v.Y * s, v.X * s + v.Y * c); + } +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Services/GameWorld.cs b/CSharpBible/Games/AsteroidsModernEngine/Services/GameWorld.cs new file mode 100644 index 000000000..881f335ed --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Services/GameWorld.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Numerics; +using AsteroidsModern.Engine.Abstractions; +using AsteroidsModern.Engine.Model.Interfaces; +using AsteroidsModern.Engine.Services.Interfaces; + +namespace AsteroidsModern.Engine.Services; + +/// +/// GameWorld orchestrates the high level game flow between the Title UI and the gameplay simulation. +/// - Delegates title/menu input & rendering to TitleScreen +/// - Delegates physics, collisions, HUD and scoring to GameSimulation +/// - Bridges events (start game, game over) between both +/// +public sealed class GameWorld(IRandom rand) : IGameWorld +{ + private enum WorldState { Title, Playing } + + private readonly TitleScreen _title = new(); + private readonly GameSimulation _simulation = new(rand); + + private WorldState _state = WorldState.Playing; // keep default for tests; UI calls ShowTitle() + + public IShip Ship => _simulation.Ship; + public IReadOnlyList Asteroids => _simulation.Asteroids; + public IReadOnlyList Bullets => _simulation.Bullets; + public IReadOnlyList Dust => _simulation.Dust; + + public Vector2 WorldSize + { + get => _simulation.WorldSize; + set + { + _simulation.WorldSize = value; + _title.WorldSize = value; + } + } + + public void ShowTitle() => _state = WorldState.Title; + + public void Reset() => _simulation.Reset(); + + public void Update(IGameInput input, ITimeProvider time, ISound sound) + { + // Hook events lazily (idempotent) + EnsureWiring(); + + switch (_state) + { + case WorldState.Title: + _title.Update(input); + break; + + case WorldState.Playing: + _simulation.Update(input, time, sound, _title.SoundEnabled); + break; + } + } + + public void Render(IRenderContext ctx) + { + ctx.Clear(Color.Black); + switch (_state) + { + case WorldState.Title: + _title.Render(ctx); + break; + case WorldState.Playing: + _simulation.Render(ctx); + break; + } + } + + private bool _wired; + private void EnsureWiring() + { + if (_wired) return; + _wired = true; + + _title.StartGameRequested += OnStartGameRequested; + _simulation.GameOver += OnGameOver; + } + + private void OnStartGameRequested() + { + _simulation.StartGame(_title.StartLives); + _state = WorldState.Playing; + } + + private void OnGameOver(int finalScore) + { + _title.SetLastScore(finalScore); + _state = WorldState.Title; + } +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Services/Interfaces/IGameWorld.cs b/CSharpBible/Games/AsteroidsModernEngine/Services/Interfaces/IGameWorld.cs new file mode 100644 index 000000000..6ab677030 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Services/Interfaces/IGameWorld.cs @@ -0,0 +1,19 @@ +using System.Numerics; +using AsteroidsModern.Engine.Abstractions; +using AsteroidsModern.Engine.Model.Interfaces; + +namespace AsteroidsModern.Engine.Services.Interfaces; + +public interface IGameWorld +{ + IShip Ship { get; } + IReadOnlyList Asteroids { get; } + IReadOnlyList Bullets { get; } + IReadOnlyList Dust { get; } + Vector2 WorldSize { get; } + + void Reset(); + void Update(IGameInput input, ITimeProvider time, ISound sound); + void Render(IRenderContext ctx); + void ShowTitle(); +} diff --git a/CSharpBible/Games/AsteroidsModernEngine/Services/TitleScreen.cs b/CSharpBible/Games/AsteroidsModernEngine/Services/TitleScreen.cs new file mode 100644 index 000000000..381019914 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngine/Services/TitleScreen.cs @@ -0,0 +1,165 @@ +using System; +using System.Numerics; +using AsteroidsModern.Engine.Abstractions; + +namespace AsteroidsModern.Engine.Services; + +/// +/// TitleScreen encapsulates menu navigation and simple UI state (options/highscore/credits). +/// It is fully input-driven and renders itself via IRenderContext. +/// Exposes events for transitioning into gameplay. +/// +public sealed class TitleScreen +{ + public event Action? StartGameRequested; + + public Vector2 WorldSize { get; set; } = new(800, 600); + + public int StartLives { get; private set; } = 3; + public bool SoundEnabled { get; private set; } = true; + + public int HighScore { get; private set; } + private int _lastScore; + + public enum Screen { Title, Options, Highscores, Credits } + private Screen _screen = Screen.Title; + private int _titleIndex = 0; + private int _optionsIndex = 0; + + // Edge detection + private bool _leftPrev, _rightPrev, _firePrev, _thrustPrev; + + public void SetLastScore(int score) + { + _lastScore = score; + if (score > HighScore) HighScore = score; + _screen = Screen.Title; + } + + public void Update(IGameInput input) + { + bool leftNow = input.IsDown(GameKey.Left); + bool rightNow = input.IsDown(GameKey.Right); + bool fireNow = input.IsDown(GameKey.Fire); + bool thrustNow = input.IsDown(GameKey.Thrust); + + bool leftPressed = leftNow && !_leftPrev; + bool rightPressed = rightNow && !_rightPrev; + bool firePressed = fireNow && !_firePrev; + bool thrustPressed = thrustNow && !_thrustPrev; + + _leftPrev = leftNow; _rightPrev = rightNow; _firePrev = fireNow; _thrustPrev = thrustNow; + + switch (_screen) + { + case Screen.Title: + if (leftPressed) _titleIndex = (_titleIndex + 3) % 4; + if (rightPressed) _titleIndex = (_titleIndex + 1) % 4; + if (firePressed) + { + switch (_titleIndex) + { + case 0: StartGameRequested?.Invoke(); break; + case 1: _screen = Screen.Options; break; + case 2: _screen = Screen.Highscores; break; + case 3: _screen = Screen.Credits; break; + } + } + if (thrustPressed) StartGameRequested?.Invoke(); + break; + + case Screen.Options: + if (leftPressed || rightPressed) + { + if (_optionsIndex == 0) + { + SoundEnabled = !SoundEnabled; + _optionsIndex = 1; + } + else + { + StartLives += rightPressed ? 1 : -1; + StartLives = Math.Clamp(StartLives, 1, 9); + _optionsIndex = 0; + } + } + if (thrustPressed) _screen = Screen.Title; + break; + + case Screen.Highscores: + case Screen.Credits: + if (thrustPressed) _screen = Screen.Title; + break; + } + } + + public void Render(IRenderContext ctx) + { + switch (_screen) + { + case Screen.Title: RenderTitle(ctx); break; + case Screen.Options: RenderOptions(ctx); break; + case Screen.Highscores: RenderHighscores(ctx); break; + case Screen.Credits: RenderCredits(ctx); break; + } + } + + private void RenderTitle(IRenderContext ctx) + { + var center = WorldSize / 2f; + ctx.DrawText("ASTEROIDS MODERN", center + new Vector2(-160, -120), Color.White, 28f); + ctx.DrawText("Wähle mit Links/Rechts, bestätige mit Feuer", center + new Vector2(-220, -80), Color.Gray, 14f); + + string[] items = ["Start", "Optionen", "Highscores", "Credits"]; + float startX = center.X - 220; + for (int i = 0; i < items.Length; i++) + { + var color = (i == _titleIndex) ? Color.White : Color.Gray; + ctx.DrawText(items[i], new Vector2(startX + i * 140, center.Y), color, 20f); + } + + ctx.DrawText($"Highscore: {HighScore}", center + new Vector2(-80, 60), Color.White, 16f); + if (_lastScore > 0) + ctx.DrawText($"Letzter Score: {_lastScore}", center + new Vector2(-90, 90), Color.Gray, 14f); + } + + private void RenderOptions(IRenderContext ctx) + { + var center = WorldSize / 2f; + ctx.DrawText("OPTIONEN", center + new Vector2(-70, -120), Color.White, 26f); + ctx.DrawText("Links/Rechts: Wert ändern, Schub: Zurück", center + new Vector2(-230, -80), Color.Gray, 14f); + + string[] labels = + [ + $"Sound: {(SoundEnabled ? "Ein" : "Aus")}", + $"Start-Leben: {StartLives}" + ]; + + float startY = center.Y - 10; + for (int i = 0; i < labels.Length; i++) + { + var color = (i == _optionsIndex) ? Color.White : Color.Gray; + ctx.DrawText(labels[i], new Vector2(center.X - 100, startY + i * 30), color, 18f); + } + + ctx.DrawText("Schub = Zurück", center + new Vector2(-60, 80), Color.Gray, 14f); + } + + private void RenderHighscores(IRenderContext ctx) + { + var center = WorldSize / 2f; + ctx.DrawText("HIGHSCORES", center + new Vector2(-80, -60), Color.White, 26f); + ctx.DrawText($"Highscore: {HighScore}", center + new Vector2(-70, -10), Color.White, 20f); + ctx.DrawText($"Letzter Score: {_lastScore}", center + new Vector2(-80, 20), Color.Gray, 18f); + ctx.DrawText("Schub = Zurück", center + new Vector2(-60, 80), Color.Gray, 14f); + } + + private void RenderCredits(IRenderContext ctx) + { + var center = WorldSize / 2f; + ctx.DrawText("CREDITS", center + new Vector2(-45, -80), Color.White, 26f); + ctx.DrawText("Spielidee: Asteroids Hommage", center + new Vector2(-140, -20), Color.Gray, 18f); + ctx.DrawText("Code & Engine: Modern Engine Demo", center + new Vector2(-160, 10), Color.Gray, 18f); + ctx.DrawText("Schub = Zurück", center + new Vector2(-60, 80), Color.Gray, 14f); + } +} diff --git a/CSharpBible/Games/AsteroidsModernEngineTests/AsteroidsModernEngineTests.csproj b/CSharpBible/Games/AsteroidsModernEngineTests/AsteroidsModernEngineTests.csproj new file mode 100644 index 000000000..182219dd2 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngineTests/AsteroidsModernEngineTests.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + latest + enable + enable + + + + + + + + + + + + diff --git a/CSharpBible/Games/AsteroidsModernEngineTests/Services/TitleScreenTests.cs b/CSharpBible/Games/AsteroidsModernEngineTests/Services/TitleScreenTests.cs new file mode 100644 index 000000000..3638183a7 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernEngineTests/Services/TitleScreenTests.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AsteroidsModernEngineTests.Services +{ + internal class TitleScreenTests + { + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/App.xaml b/CSharpBible/Games/AsteroidsModernUI/App.xaml new file mode 100644 index 000000000..f95e97d18 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/App.xaml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernUI/App.xaml.cs b/CSharpBible/Games/AsteroidsModernUI/App.xaml.cs new file mode 100644 index 000000000..6487d3d3d --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/App.xaml.cs @@ -0,0 +1,44 @@ +using System.Windows; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using AsteroidsModern.Engine.Services; +using AsteroidsModern.Engine.Abstractions; +using AsteroidsModern.Engine.Model; +using AsteroidsModern.Engine.Services.Interfaces; + +namespace AsteroidsModern.UI; + +public partial class App : Application +{ + public IHost Host { get; } + + public App() + { + Host = Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder() + .ConfigureServices((ctx, services) => + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + }) + .Build(); + } + + protected override async void OnStartup(StartupEventArgs e) + { + await Host.StartAsync(); + var window = Host.Services.GetRequiredService(); + window.Show(); + base.OnStartup(e); + } + + protected override async void OnExit(ExitEventArgs e) + { + await Host.StopAsync(); + Host.Dispose(); + base.OnExit(e); + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj b/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj new file mode 100644 index 000000000..ce4dcdcc0 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj @@ -0,0 +1,22 @@ + + + WinExe + net8.0-windows + true + enable + enable + preview + AsteroidsModernUI + AsteroidsModern.UI + + + + + + + + + + + + diff --git a/CSharpBible/Games/AsteroidsModernUI/Behaviors/GameCanvasBehavior.cs b/CSharpBible/Games/AsteroidsModernUI/Behaviors/GameCanvasBehavior.cs new file mode 100644 index 000000000..94e229de3 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/Behaviors/GameCanvasBehavior.cs @@ -0,0 +1,96 @@ +using System; +using System.Windows; +using System.Windows.Input; +using Microsoft.Xaml.Behaviors; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace AsteroidsModern.UI; + +public sealed class GameCanvasBehavior : Behavior +{ + public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register( + nameof(ViewModel), typeof(MainViewModel), typeof(GameCanvasBehavior), new PropertyMetadata(null)); + + public MainViewModel? ViewModel + { + get => (MainViewModel?)GetValue(ViewModelProperty); + set => SetValue(ViewModelProperty, value); + } + + private readonly WpfInput _input = new(); + + protected override void OnAttached() + { + base.OnAttached(); + if (AssociatedObject == null) return; + + AssociatedObject.Loaded += OnLoaded; + AssociatedObject.Unloaded += OnUnloaded; + AssociatedObject.SizeChanged += OnSizeChanged; + AssociatedObject.KeyDown += OnKeyDown; + AssociatedObject.KeyUp += OnKeyUp; + } + + protected override void OnDetaching() + { + if (AssociatedObject != null) + { + AssociatedObject.Loaded -= OnLoaded; + AssociatedObject.Unloaded -= OnUnloaded; + AssociatedObject.SizeChanged -= OnSizeChanged; + AssociatedObject.KeyDown -= OnKeyDown; + AssociatedObject.KeyUp -= OnKeyUp; + } + CompositionTarget.Rendering -= OnRendering; + base.OnDetaching(); + } + + private void OnLoaded(object? sender, RoutedEventArgs e) + { + AssociatedObject.Focus(); + CompositionTarget.Rendering += OnRendering; + UpdateSize(); + } + + private void OnUnloaded(object? sender, RoutedEventArgs e) + { + CompositionTarget.Rendering -= OnRendering; + } + + private void OnSizeChanged(object? sender, SizeChangedEventArgs e) => UpdateSize(); + + private void UpdateSize() + { + if (ViewModel != null && AssociatedObject != null) + ViewModel.SetSize((float)AssociatedObject.ActualWidth, (float)AssociatedObject.ActualHeight); + } + + private void OnKeyDown(object? sender, KeyEventArgs e) => _input.OnKeyDown(e.Key); + + private void OnKeyUp(object? sender, KeyEventArgs e) => _input.OnKeyUp(e.Key); + + private void OnRendering(object? sender, EventArgs e) + { + if (ViewModel == null || AssociatedObject == null) return; + + ViewModel.Tick(_input); + + var dv = new DrawingVisual(); + using (var dc = dv.RenderOpen()) + { + var ctx = new WpfRenderContext(dc); + ViewModel.Render(ctx); + } + int width = (int)Math.Max(1, AssociatedObject.ActualWidth); + int height = (int)Math.Max(1, AssociatedObject.ActualHeight); + var bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32); + bmp.Render(dv); + + AssociatedObject.Children.Clear(); + var img = new System.Windows.Controls.Image { Source = bmp }; + System.Windows.Controls.Canvas.SetLeft(img, 0); + System.Windows.Controls.Canvas.SetTop(img, 0); + AssociatedObject.Children.Add(img); + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/Infrastructure/MidiSound.cs b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/MidiSound.cs new file mode 100644 index 000000000..2d2fabd53 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/MidiSound.cs @@ -0,0 +1,88 @@ +using System; +using NAudio.Midi; +using AsteroidsModern.Engine.Abstractions; + +namespace AsteroidsModern.UI; + +// Simple MIDI-based sound implementation using NAudio's MidiOut. +// Maps game events to different MIDI notes and instruments. +public sealed class MidiSound : ISound, IDisposable +{ + private readonly MidiOut? _midi; + private readonly int _channel; + + // Basic mappings + private const int Instrument_Thrust = 90; // Pad 2 (warm) + private const int Instrument_Shoot = 81; // Lead 1 (square) + private const int Instrument_Bang = 118; // Synth Drum + + private const int VelocityLow = 80; + private const int VelocityMid = 100; + private const int VelocityHigh = 127; + + public MidiSound(int deviceIndex = 0, int channel = 0) + { + _channel = Math.Clamp(channel, 1, 16); + try + { + if (MidiOut.NumberOfDevices > 0) + { + _midi = new MidiOut(Math.Clamp(deviceIndex, 0, MidiOut.NumberOfDevices - 1)); + } + } + catch + { + _midi = null; // Fallback to silent if MIDI not available + } + } + + public void PlayThrust() + { + if (_midi is null) return; + ProgramChange(Instrument_Thrust); + // Play a low, soft note to simulate a thruster pulse + NoteOn(40, VelocityLow); + NoteOffSoon(40); + } + + public void PlayShoot() + { + if (_midi is null) return; + ProgramChange(Instrument_Shoot); + // Short high note + NoteOn(76, VelocityHigh); + NoteOffSoon(76); + } + + public void PlayBang() + { + if (_midi is null) return; + ProgramChange(Instrument_Bang); + // Cluster hit effect via two quick notes + NoteOn(38, VelocityMid); + NoteOffSoon(38); + NoteOn(50, VelocityMid); + NoteOffSoon(50); + } + + private void ProgramChange(int instrument) + { + _midi?.Send(MidiMessage.ChangePatch(instrument, _channel).RawData); + } + + private void NoteOn(int note, int velocity) + { + _midi?.Send(MidiMessage.StartNote(note, velocity, _channel).RawData); + } + + private void NoteOffSoon(int note) + { + // Use a quick Note Off via zero velocity Note On for simplicity + _midi?.Send(MidiMessage.StartNote(note, 0, _channel).RawData); + } + + public void Dispose() + { + _midi?.Dispose(); + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/Infrastructure/SilentSound.cs b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/SilentSound.cs new file mode 100644 index 000000000..fcffb9d76 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/SilentSound.cs @@ -0,0 +1,10 @@ +using AsteroidsModern.Engine.Abstractions; + +namespace AsteroidsModern.UI; + +public sealed class SilentSound : ISound +{ + public void PlayThrust() { } + public void PlayShoot() { } + public void PlayBang() { } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfInput.cs b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfInput.cs new file mode 100644 index 000000000..3530e5bb4 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfInput.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using System.Windows.Input; +using AsteroidsModern.Engine.Abstractions; + +namespace AsteroidsModern.UI; + +public sealed class WpfInput : IGameInput +{ + private readonly HashSet _down = new(); + + public void OnKeyDown(Key key) + { + if (key == Key.Left) _down.Add(GameKey.Left); + if (key == Key.Right) _down.Add(GameKey.Right); + if (key == Key.Up) _down.Add(GameKey.Thrust); + if (key == Key.Space) _down.Add(GameKey.Fire); + if (key is Key.Escape or Key.Q) _down.Add(GameKey.Quit); + if (key is Key.Down or Key.H) _down.Add(GameKey.Hyperspace); + } + + public void OnKeyUp(Key key) + { + if (key == Key.Left) _down.Remove(GameKey.Left); + if (key == Key.Right) _down.Remove(GameKey.Right); + if (key == Key.Up) _down.Remove(GameKey.Thrust); + if (key == Key.Space) _down.Remove(GameKey.Fire); + if (key is Key.Escape or Key.Q) _down.Remove(GameKey.Quit); + if (key is Key.Down or Key.H) _down.Remove(GameKey.Hyperspace); + } + + public bool IsDown(GameKey key) => _down.Contains(key); +} diff --git a/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfRenderContext.cs b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfRenderContext.cs new file mode 100644 index 000000000..df89f607a --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfRenderContext.cs @@ -0,0 +1,57 @@ +using AsteroidsModern.Engine.Abstractions; +using System.Numerics; +using System.Windows; +using SWM = System.Windows.Media; + +namespace AsteroidsModern.UI; + +public sealed class WpfRenderContext : IRenderContext +{ + private readonly SWM.DrawingContext _dc; + + public WpfRenderContext(SWM.DrawingContext dc) + { + _dc = dc; + } + + public void Clear(Color color) + { + // handled by background brush in control + } + + public void DrawPolygon(Vector2[] points, Color color, float thickness = 1) + { + var pen = new SWM.Pen(new SWM.SolidColorBrush(SWM.Color.FromArgb(color.A, color.R, color.G, color.B)), thickness); + var geom = new SWM.StreamGeometry(); + using var ctx = geom.Open(); + ctx.BeginFigure(new System.Windows.Point(points[0].X, points[0].Y), false, true); + for (int i = 1; i < points.Length; i++) + ctx.LineTo(new System.Windows.Point(points[i].X, points[i].Y), true, false); + _dc.DrawGeometry(null, pen, geom); + } + + public void DrawCircle(Vector2 center, float radius, Color color, float thickness = 1, int segments = 24) + { + var pen = new SWM.Pen(new SWM.SolidColorBrush(SWM.Color.FromArgb(color.A, color.R, color.G, color.B)), thickness); + _dc.DrawEllipse(null, pen, new System.Windows.Point(center.X, center.Y), radius, radius); + } + + public void DrawText(string text, Vector2 position, Color color, float fontSize = 12) + { + _dc.DrawText( + new SWM.FormattedText( + text, + System.Globalization.CultureInfo.CurrentCulture, + FlowDirection.LeftToRight, + new SWM.Typeface("Consolas"), + fontSize, + new SWM.SolidColorBrush(SWM.Color.FromArgb(color.A, color.R, color.G, color.B)), + 1.0), + new System.Windows.Point(position.X, position.Y)); + } + + public void DrawPixel(Vector2 center, Color color) + { + _dc.DrawRectangle(new SWM.SolidColorBrush(SWM.Color.FromArgb(color.A, color.R, color.G, color.B)), null, new Rect(center.X, center.Y, 1, 1)); + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfTimeProvider.cs b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfTimeProvider.cs new file mode 100644 index 000000000..69f7d4fe4 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/Infrastructure/WpfTimeProvider.cs @@ -0,0 +1,20 @@ +using System.Diagnostics; +using AsteroidsModern.Engine.Abstractions; + +namespace AsteroidsModern.UI; + +public sealed class WpfTimeProvider : ITimeProvider +{ + private readonly Stopwatch _sw = Stopwatch.StartNew(); + private double _last; + + public double TotalTime => _sw.Elapsed.TotalSeconds; + public double DeltaTime { get; private set; } + + public void Tick() + { + var now = _sw.Elapsed.TotalSeconds; + DeltaTime = Math.Max(0, now - _last); + _last = now; + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml b/CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml new file mode 100644 index 000000000..c8133ea9e --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml.cs b/CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml.cs new file mode 100644 index 000000000..3ff80c133 --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/MainWindow.xaml.cs @@ -0,0 +1,12 @@ +using System.Windows; + +namespace AsteroidsModern.UI; + +public partial class MainWindow : Window +{ + public MainWindow(MainViewModel vm) + { + InitializeComponent(); + DataContext = vm; + } +} diff --git a/CSharpBible/Games/AsteroidsModernUI/ViewModels/MainViewModel.cs b/CSharpBible/Games/AsteroidsModernUI/ViewModels/MainViewModel.cs new file mode 100644 index 000000000..4490eb14f --- /dev/null +++ b/CSharpBible/Games/AsteroidsModernUI/ViewModels/MainViewModel.cs @@ -0,0 +1,39 @@ +using System.Numerics; +using CommunityToolkit.Mvvm.ComponentModel; +using AsteroidsModern.Engine.Abstractions; +using AsteroidsModern.Engine.Services; +using AsteroidsModern.Engine.Services.Interfaces; + +namespace AsteroidsModern.UI; + +public partial class MainViewModel : ObservableObject +{ + private readonly IGameWorld _world; + private readonly WpfTimeProvider _time; + private readonly ISound _sound; + + public MainViewModel(IGameWorld world, ITimeProvider time, ISound sound) + { + _world = world; + _time = (WpfTimeProvider)time; + _sound = sound; + _world.ShowTitle(); + } + + public void SetSize(float width, float height) + { + if (_world is GameWorld gw) + gw.WorldSize = new Vector2(width, height); + } + + public void Tick(IGameInput input) + { + _time.Tick(); + _world.Update(input, _time, _sound); + } + + public void Render(IRenderContext ctx) + { + _world.Render(ctx); + } +} diff --git a/CSharpBible/Games/VTileEdit/Models/VTEModel.cs b/CSharpBible/Games/VTileEdit/Models/VTEModel.cs new file mode 100644 index 000000000..395c07ffb --- /dev/null +++ b/CSharpBible/Games/VTileEdit/Models/VTEModel.cs @@ -0,0 +1,26 @@ +using System; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace VTileEdit.Models; + +public class VTEModel : IVTEModel +{ + private readonly VisTileData _data = new(); + + public Size TileSize => _data.TileSize; + + public void Clear() => _data.Clear(); + + public void LoadFromStream(Stream stream, EStreamType eStreamType) => _data.LoadFromStream(stream, eStreamType); + + public void SaveToStream(Stream stream, EStreamType eStreamType) => _data.WriteToStream(stream, eStreamType); + + public void SetTileSize(Size size) => _data.SetTileSize(size); + + public SingleTile GetTileDef(Enum? tile) => _data.GetTileDef(tile); + + public void SetTileDef(Enum tile, string[] lines, (ConsoleColor fgr, ConsoleColor bgr)[] colors) + => _data.SetTileDef(tile, new SingleTile(lines, colors.Select(c => new FullColor(c.fgr, c.bgr)).ToArray())); +} From de7265c20a6641e6d4616ee1c03ea6b26cef10f2 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 26 Sep 2025 00:35:42 +0200 Subject: [PATCH 189/569] OdtBoldTextExample --- CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs b/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs index 76b73d2a4..e0693ed55 100644 --- a/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs +++ b/CSharpBible/Data/DocumentUtils/OdtBoldTextExample/Program.cs @@ -1,5 +1,5 @@ using Document.Base.Models.Interfaces; -using Document_Odf; +using Document.Odf; using System.Windows; namespace OdtBoldTextExample; @@ -22,7 +22,7 @@ static void Init(string[] args) cOutputPath = args[0]; } - userDocument = OdfTextDocument.CreateUserDocument(); + userDocument = new OdfTextDocument(); } static void Run() From c9bbeedf01d4bf9ed95e5ca81eeaef326cf644ea Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 26 Sep 2025 00:37:22 +0200 Subject: [PATCH 190/569] VTileEdit --- .../Games/VTileEdit/Models/IVTEModel.cs | 3 +- .../Games/VTileEdit/Models/VTEModel.cs | 6 +- .../Games/VTileEdit/Models/VisTileData.cs | 15 +- CSharpBible/Games/VTileEdit/Program.cs | 24 +-- .../VTileEdit/ViewModels/IVTEViewModel.cs | 23 +- .../VTileEdit/ViewModels/VTEViewModel.cs | 163 +++++++++------ .../Games/VTileEdit/Views/IFileDialogData.cs | 21 +- .../Games/VTileEdit/Views/VTEVisual.cs | 196 +++++++++++++++++- 8 files changed, 348 insertions(+), 103 deletions(-) diff --git a/CSharpBible/Games/VTileEdit/Models/IVTEModel.cs b/CSharpBible/Games/VTileEdit/Models/IVTEModel.cs index eda21af00..a887f41d3 100644 --- a/CSharpBible/Games/VTileEdit/Models/IVTEModel.cs +++ b/CSharpBible/Games/VTileEdit/Models/IVTEModel.cs @@ -12,5 +12,6 @@ public interface IVTEModel void SetTileSize(Size size); Size TileSize { get; } SingleTile GetTileDef(Enum? tile); - void SetTileDef(Enum tile, string[] lines, (ConsoleColor fgr, ConsoleColor bgr)[] colors); + void SetTileDef(Enum tile, string[] lines, FullColor[] colors); + Type KeyType { get; } } \ No newline at end of file diff --git a/CSharpBible/Games/VTileEdit/Models/VTEModel.cs b/CSharpBible/Games/VTileEdit/Models/VTEModel.cs index 395c07ffb..6b4518677 100644 --- a/CSharpBible/Games/VTileEdit/Models/VTEModel.cs +++ b/CSharpBible/Games/VTileEdit/Models/VTEModel.cs @@ -11,6 +11,8 @@ public class VTEModel : IVTEModel public Size TileSize => _data.TileSize; + public Type KeyType => _data.KeyType; + public void Clear() => _data.Clear(); public void LoadFromStream(Stream stream, EStreamType eStreamType) => _data.LoadFromStream(stream, eStreamType); @@ -21,6 +23,6 @@ public class VTEModel : IVTEModel public SingleTile GetTileDef(Enum? tile) => _data.GetTileDef(tile); - public void SetTileDef(Enum tile, string[] lines, (ConsoleColor fgr, ConsoleColor bgr)[] colors) - => _data.SetTileDef(tile, new SingleTile(lines, colors.Select(c => new FullColor(c.fgr, c.bgr)).ToArray())); + public void SetTileDef(Enum tile, string[] lines, FullColor[] colors) + => _data.SetTileDef(tile, new SingleTile(lines, colors)); } diff --git a/CSharpBible/Games/VTileEdit/Models/VisTileData.cs b/CSharpBible/Games/VTileEdit/Models/VisTileData.cs index ffad7c0e6..3c65fb5b3 100644 --- a/CSharpBible/Games/VTileEdit/Models/VisTileData.cs +++ b/CSharpBible/Games/VTileEdit/Models/VisTileData.cs @@ -19,13 +19,17 @@ public class VisTileData : ITileDef public Size TileSize => _size; + // Expose current keys for selection in UI + public IEnumerable Keys => _storage.Keys; + + // Expose key type used by storage + public Type KeyType => _storage.Count > 0 ? _storage.First().Key.GetType() : typeof(int); + public static bool EqualTo(IEnumerable a, IEnumerable b) { return a.Zip(b).All((t) => t.First!.Equals(t.Second)); } - - public SingleTile GetTileDef(Enum? tile) { if (_storage.TryGetValue(tile, out var result)) @@ -41,6 +45,11 @@ public SingleTile GetTileDef(Enum? tile) return (new string[0], new (ConsoleColor fgr, ConsoleColor bgr)[0]); } + // Allow external editor to change tile-size + public void SetTileSize(Size size) => _size = size; + + // Allow external editor to set/replace a tile definition + public void SetTileDef(Enum key, SingleTile tile) => _storage[key] = tile; public void SetTileDefs(ITileDef tiledef) where T : Enum { @@ -405,7 +414,7 @@ private string Compress(string s) return s; } - private void Clear() + public void Clear() => _storage.Clear(); (string[] lines, (ConsoleColor fgr, ConsoleColor bgr)[] colors) ITileDef.GetTileDef(Enum? tile) diff --git a/CSharpBible/Games/VTileEdit/Program.cs b/CSharpBible/Games/VTileEdit/Program.cs index ad53b7c33..9b9fade2b 100644 --- a/CSharpBible/Games/VTileEdit/Program.cs +++ b/CSharpBible/Games/VTileEdit/Program.cs @@ -1,10 +1,10 @@ using BaseLib.Helper; using BaseLib.Interfaces; -using ConsoleDisplay.View; using Microsoft.Extensions.DependencyInjection; using System; using VTileEdit.ViewModels; using VTileEdit.Views; +using VTileEdit.Models; namespace VTileEdit { @@ -13,25 +13,20 @@ namespace VTileEdit /// public class Program { + private ServiceProvider _sp; + private void OnStartUp() { var sc = new ServiceCollection() - .AddTransient() - // .AddTransient() -// .AddSingleton() - // .AddSingleton, Playfield2D>() - .AddSingleton() - .AddTransient, TileDisplay>() - // .AddTransient() - .AddSingleton(); - var sp = sc.BuildServiceProvider(); - - IoC.Configure(sp); + .AddSingleton() + .AddSingleton() + .AddSingleton(); + _sp = sc.BuildServiceProvider(); } - /// Defines the entry point of the application. /// The arguments. + [STAThread] static void Main(string[] args) { var _program = new Program(); @@ -41,7 +36,8 @@ static void Main(string[] args) private void Run() { - throw new NotImplementedException(); + var visual = _sp.GetRequiredService(); + visual.HandleUserInput(); } private void Init(string[] args) diff --git a/CSharpBible/Games/VTileEdit/ViewModels/IVTEViewModel.cs b/CSharpBible/Games/VTileEdit/ViewModels/IVTEViewModel.cs index 2f24d7881..93175f528 100644 --- a/CSharpBible/Games/VTileEdit/ViewModels/IVTEViewModel.cs +++ b/CSharpBible/Games/VTileEdit/ViewModels/IVTEViewModel.cs @@ -1,8 +1,21 @@ -using System.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using System; +using System.ComponentModel; +using System.Drawing; +using VTileEdit.Models; -namespace VTileEdit.ViewModels +namespace VTileEdit.ViewModels; + +public interface IVTEViewModel : INotifyPropertyChanged { - public interface IVTEViewModel : INotifyPropertyChanged - { - } + IRelayCommand NewTilesCommand { get; } + IRelayCommand LoadTilesCommand { get; } + IRelayCommand SaveTilesCommand { get; } + IRelayCommand SelectTileCommand { get; } + IRelayCommand EditTileCommand { get; } + IRelayCommand QuitCommand { get; } + Enum? SelectedTile { get; set; } + string[] CurrentLines { get; set; } + FullColor[] CurrentColors { get; set; } + Func DoNewTileDialog { get; set; } } \ No newline at end of file diff --git a/CSharpBible/Games/VTileEdit/ViewModels/VTEViewModel.cs b/CSharpBible/Games/VTileEdit/ViewModels/VTEViewModel.cs index f658ee59a..a87a968a3 100644 --- a/CSharpBible/Games/VTileEdit/ViewModels/VTEViewModel.cs +++ b/CSharpBible/Games/VTileEdit/ViewModels/VTEViewModel.cs @@ -1,98 +1,133 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; -#if linux -#else -using Microsoft.Win32; -#endif using System; using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using VTileEdit.Models; using VTileEdit.ViewModels; namespace VTileEdit; -public partial class VTEViewModel : ObservableObject, IVTEViewModel +public partial class VTEViewModel : ObservableObject, IVTEViewModel, INotifyPropertyChanged { private IVTEModel _model; - public Func ShowFileDialog { get; set; } public VTEViewModel(IVTEModel model) { _model = model; } - [RelayCommand] - private void LoadTileDefs() + public IVTEModel Model => _model; + + [ObservableProperty] + public partial Enum? SelectedTile { get; set; } + + [ObservableProperty] + public partial string[] CurrentLines { get; set; } = Array.Empty(); + + [ObservableProperty] + public partial FullColor[] CurrentColors { get; set; } = Array.Empty(); + public Func DoNewTileDialog { get; set; } + + public void LoadFromPath(string path) { - FileDialog ofd = new OpenFileDialog(); - ofd.Filter = FileDialogFilter.Build([ - ("TileDef Files", [ "tdf","tdt","tdj","tdx" ]), - ("All Files", ["*"]), - ("TileDef Files", ["tdf"]) ]); + using var fs = new FileStream(path, FileMode.Open, FileAccess.Read); + switch (Path.GetExtension(path).ToLowerInvariant()) + { + case ".txt": _model.LoadFromStream(fs, EStreamType.Text); break; + case ".tdf": _model.LoadFromStream(fs, EStreamType.Binary); break; + case ".tdj": _model.LoadFromStream(fs, EStreamType.Json); break; + case ".tdx": _model.LoadFromStream(fs, EStreamType.Xml); break; + default: throw new NotSupportedException("Unsupported file extension"); + } + SelectedTile = null; CurrentLines = Array.Empty(); CurrentColors = Array.Empty(); + } - if (ShowFileDialog?.Invoke(ofd) ?? false) + public void SaveToPath(string path) + { + using var fs = new FileStream(path, FileMode.Create, FileAccess.Write); + switch (Path.GetExtension(path).ToLowerInvariant()) { - using (var fs = new FileStream(ofd.FileName, FileMode.Open)) - { - switch (Path.GetExtension(ofd.FileName)) - { - case ".txt": - _model.LoadFromStream(fs, EStreamType.Text); - break; - case ".tdf": - _model.LoadFromStream(fs, EStreamType.Binary); - break; - case ".tdj": - _model.LoadFromStream(fs, EStreamType.Json); - break; - case ".tdx": - _model.LoadFromStream(fs, EStreamType.Xml); - break; - case ".cs": - _model.LoadFromStream(fs, EStreamType.Code); - break; - }; - } + case ".txt": _model.SaveToStream(fs, EStreamType.Text); break; + case ".tdf": _model.SaveToStream(fs, EStreamType.Binary); break; + case ".tdj": _model.SaveToStream(fs, EStreamType.Json); break; + case ".tdx": _model.SaveToStream(fs, EStreamType.Xml); break; + case ".cs": _model.SaveToStream(fs, EStreamType.Code); break; + default: throw new NotSupportedException("Unsupported file extension"); } } - [RelayCommand] - private void SaveTileDefs() + public void SelectTile(Enum tile) { - FileDialog sfd = new SaveFileDialog(); - sfd.Filter = FileDialogFilter.Build([ - ("TileDef Files", [ "tdf","tdt","tdj","tdx" ]), - ("All Files", ["*"]), - ("TileDef Files", ["tdf"]) ]); - if (ShowFileDialog?.Invoke(sfd) ?? false) + SelectedTile = tile; + var st = _model.GetTileDef(tile); + CurrentLines = st.lines; + CurrentColors = st.colors; + } + + public void UpdateCurrentTile(string[] lines, FullColor[] colors) + { + if (SelectedTile != null) { - using (var fs = new FileStream(sfd.FileName, FileMode.Create)) - { - switch (Path.GetExtension(sfd.FileName)) - { - case ".txt": - _model.SaveToStream(fs, EStreamType.Text); - break; - case ".tdf": - _model.SaveToStream(fs, EStreamType.Binary); - break; - case ".tdj": - _model.SaveToStream(fs, EStreamType.Json); - break; - case ".tdx": - _model.SaveToStream(fs, EStreamType.Xml); - break; - case ".cs": - _model.SaveToStream(fs, EStreamType.Code); - break; - }; - } + _model.SetTileDef(SelectedTile, lines, colors); + CurrentLines = lines; + CurrentColors = colors; } } + + [RelayCommand] + private void NewTiles() + { + _model.Clear(); + var size = DoNewTileDialog?.Invoke() ?? new Size(4, 2); + SelectedTile = null; + _model.SetTileSize(size); + } + + [RelayCommand] + private void LoadTiles() + { + _model.Clear(); + + CurrentLines = Array.Empty(); + CurrentColors = Array.Empty(); + } + + [RelayCommand] + private void SaveTiles() + { + // No action needed here, as saving is handled externally + } + + [RelayCommand] + private void Quit() + { + // Handle quitting the application + } + + [RelayCommand] + private void About() + { + // Show about dialog + } + [RelayCommand] + private void SelectTile() + { + // Show select-tile dialog + } + + [RelayCommand] + private void EditTile() + { + // Show edit-colors dialog + } } + public static class FileDialogFilter { public static string Build(IEnumerable<(string, IEnumerable)> filters) diff --git a/CSharpBible/Games/VTileEdit/Views/IFileDialogData.cs b/CSharpBible/Games/VTileEdit/Views/IFileDialogData.cs index 075a99fd8..ce9bd3523 100644 --- a/CSharpBible/Games/VTileEdit/Views/IFileDialogData.cs +++ b/CSharpBible/Games/VTileEdit/Views/IFileDialogData.cs @@ -1,13 +1,12 @@ -namespace VTileEdit.Views +namespace VTileEdit.Views; + +public interface IFileDialogData { - public interface IFileDialogData - { - string Title { get; set; } - string Filter { get; set; } - string FileName { get; set; } - string InitialDirectory { get; set; } - bool Multiselect { get; set; } - bool CheckFileExists { get; set; } - bool CheckPathExists { get; set; } - } + string Title { get; set; } + string Filter { get; set; } + string FileName { get; set; } + string InitialDirectory { get; set; } + bool Multiselect { get; set; } + bool CheckFileExists { get; set; } + bool CheckPathExists { get; set; } } \ No newline at end of file diff --git a/CSharpBible/Games/VTileEdit/Views/VTEVisual.cs b/CSharpBible/Games/VTileEdit/Views/VTEVisual.cs index 6650294f7..9afa5040c 100644 --- a/CSharpBible/Games/VTileEdit/Views/VTEVisual.cs +++ b/CSharpBible/Games/VTileEdit/Views/VTEVisual.cs @@ -1,6 +1,8 @@ using System; using System.ComponentModel; +using System.Drawing; using VTileEdit.ViewModels; +using VTileEdit.Models; namespace VTileEdit.Views; @@ -12,20 +14,208 @@ public VTEVisual(IVTEViewModel viewModel) { _viewModel = viewModel; _viewModel.PropertyChanged += OnPropertyChanged; + _viewModel.DoNewTileDialog = () => + { + Console.Write("Tile-Breite: "); + var wstr = Console.ReadLine(); + Console.Write("Tile-Höhe: "); + var hstr = Console.ReadLine(); + if (int.TryParse(wstr, out int w) && int.TryParse(hstr, out int h) && w > 0 && h > 0) + { + return new Size(w, h); + } + return Size.Empty; + }; } public void HandleUserInput() { - throw new NotImplementedException(); + bool running = true; + while (running) + { + Console.WriteLine(); + Console.WriteLine("VTileEdit - Menu"); + if (_viewModel.NewTilesCommand.CanExecute(this)) + Console.WriteLine("1) Neu"); + if (_viewModel.LoadTilesCommand.CanExecute(this)) + Console.WriteLine("2) Laden"); + if (_viewModel.SaveTilesCommand.CanExecute(this)) + Console.WriteLine("3) Speichern"); + if (_viewModel.SelectTileCommand.CanExecute(this)) + Console.WriteLine("4) Tile auswählen"); + if (_viewModel.EditTileCommand.CanExecute(this)) + Console.WriteLine("5) Tile editieren"); + Console.WriteLine("0) Beenden"); + Console.Write("Auswahl: "); + var key = Console.ReadKey(); + Console.WriteLine(); + switch (key.KeyChar) + { + case '1': _viewModel.NewTilesCommand.Execute(this); break; + case '2': _viewModel.LoadTilesCommand.Execute(this); break; + case '3': _viewModel.SaveTilesCommand.Execute(this); break; + case '4': _viewModel.SelectTileCommand.Execute(this); break; + case '5': _viewModel.EditTileCommand.Execute(this); break; + case '0': _viewModel.QuitCommand.Execute(this); break; + } + } + } + + private void SavePath() + { + Console.Write("Datei speichern als (*.tdf;*.tdt;*.tdj;*.tdx;*.cs): "); + var path = Console.ReadLine(); + if (!string.IsNullOrWhiteSpace(path)) + { + try { _viewModel.SaveToPath(path); Console.WriteLine("Gespeichert."); } + catch (Exception ex) { Console.WriteLine($"Fehler: {ex.Message}"); } + } + } + + private void SelectTile() + { + Console.Write("Enum-Wert des Tiles eingeben (Zahl): "); + var s = Console.ReadLine(); + if (int.TryParse(s, out int val)) + { + var enumType = _viewModel.Model.KeyType; + var key = (Enum)Enum.ToObject(enumType, val); + _viewModel.SelectTile(key); + } + } + + private void EditTile() + { + if (_viewModel.SelectedTile == null) + { + Console.WriteLine("Kein Tile ausgewählt."); + return; + } + var size = _viewModel.Model.TileSize; + if (size == Size.Empty) + { + Console.WriteLine("TileSize nicht gesetzt. Bitte zuerst laden oder Größe definieren."); + return; + } + + var lines = _viewModel.CurrentLines.Length == size.Height ? (string[])_viewModel.CurrentLines.Clone() : new string[size.Height]; + for (int y = 0; y < size.Height; y++) + { + if (lines[y] == null || lines[y].Length != size.Width) lines[y] = new string(' ', size.Width); + } + var colors = _viewModel.CurrentColors.Length == size.Width * size.Height ? (FullColor[])_viewModel.CurrentColors.Clone() : new FullColor[size.Width * size.Height]; + + int cx = 0, cy = 0; + ConsoleKey key; + do + { + Console.Clear(); + RenderPreview(lines, colors, size, cx, cy); + Console.WriteLine(); + Console.WriteLine("Pfeile bewegen, 'c' Zeichen setzen, 'f' Vordergrund, 'b' Hintergrund, 'q' zurück"); + key = Console.ReadKey(true).Key; + switch (key) + { + case ConsoleKey.LeftArrow: cx = Math.Max(0, cx - 1); break; + case ConsoleKey.RightArrow: cx = Math.Min(size.Width - 1, cx + 1); break; + case ConsoleKey.UpArrow: cy = Math.Max(0, cy - 1); break; + case ConsoleKey.DownArrow: cy = Math.Min(size.Height - 1, cy + 1); break; + case ConsoleKey.C: + Console.Write("Zeichen eingeben: "); + var ch = Console.ReadKey(true).KeyChar; + var arr = lines[cy].ToCharArray(); + arr[cx] = ch; lines[cy] = new string(arr); + break; + case ConsoleKey.F: + colors[cy * size.Width + cx].fgr = PickColor("Vordergrundfarbe (0-15)"); + break; + case ConsoleKey.B: + colors[cy * size.Width + cx].bgr = PickColor("Hintergrundfarbe (0-15)"); + break; + } + } while (key != ConsoleKey.Q); + + _viewModel.UpdateCurrentTile(lines, colors); + } + + private ConsoleColor PickColor(string prompt) + { + Console.WriteLine(prompt); + for (int i = 0; i < 16; i++) Console.WriteLine($"{i}: {(ConsoleColor)i}"); + var s = Console.ReadLine(); + if (int.TryParse(s, out int v) && v >= 0 && v < 16) return (ConsoleColor)v; + return ConsoleColor.White; + } + + private void RenderPreview(string[] lines, FullColor[] colors, Size size, int cx, int cy) + { + for (int y = 0; y < size.Height; y++) + { + for (int x = 0; x < size.Width; x++) + { + var idx = y * size.Width + x; + var (fg, bg) = idx < colors.Length ? colors[idx] : new FullColor(ConsoleColor.White, ConsoleColor.Black); + Console.ForegroundColor = fg; + Console.BackgroundColor = bg; + var ch = x < lines[y].Length ? lines[y][x] : ' '; + if (x == cx && y == cy) + { + Console.BackgroundColor = ConsoleColor.Gray; + Console.ForegroundColor = ConsoleColor.Black; + } + Console.Write(ch); + Console.ResetColor(); + } + Console.WriteLine(); + } } public bool ShowFileDialog(IFileDialogData fileDialog) { - throw new NotImplementedException(); + // Not used + return false; } private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { - // Find bound properties + // Future: update UI on changes + } + + private static string? ShowOpenFileDialog() + { + string? chosenPath = null; + try + { + var t = new System.Threading.Thread(() => + { + using var ofd = new System.Windows.Forms.OpenFileDialog + { + Title = "Datei öffnen", + Filter = "Tile-Dateien (*.tdf;*.tdt;*.tdj;*.tdx)|*.tdf;*.tdt;*.tdj;*.tdx|Alle Dateien (*.*)|*.*", + CheckFileExists = true, + CheckPathExists = true, + Multiselect = false, + RestoreDirectory = true, + InitialDirectory = Environment.CurrentDirectory, + DefaultExt = "tdf" + }; + + var result = ofd.ShowDialog(); + if (result == System.Windows.Forms.DialogResult.OK) + { + chosenPath = ofd.FileName; + } + }); + + t.SetApartmentState(System.Threading.ApartmentState.STA); + t.Start(); + t.Join(); + } + catch + { + // Ignorieren, null zurückgeben + } + + return chosenPath; } } From 51f7cc19836b6a340c4286627f9565994652cc9b Mon Sep 17 00:00:00 2001 From: Joe Care Date: Fri, 26 Sep 2025 00:48:15 +0200 Subject: [PATCH 191/569] CSharpBible --- CSharpBible/Games/Asteroids.sln | 178 ++++++++------------------------ CSharpBible/Games/Games.sln | 21 ++++ 2 files changed, 64 insertions(+), 135 deletions(-) diff --git a/CSharpBible/Games/Asteroids.sln b/CSharpBible/Games/Asteroids.sln index 69653bb83..c300c7dab 100644 --- a/CSharpBible/Games/Asteroids.sln +++ b/CSharpBible/Games/Asteroids.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.0 +VisualStudioVersion = 17.14.36511.14 d17.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{658BD492-33FF-4995-AAE7-4F6894E92F0C}" ProjectSection(SolutionItems) = preProject @@ -19,7 +19,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_BaseLibTests", "..\Libraries\MVVM_BaseLibTests\MVVM_BaseLibTests.csproj", "{66EB60F2-523D-47C8-95EA-C7E10759E239}" EndProject -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Asteroids", "Asteroids", "{4BE42477-1420-4A81-BDFA-4C34DA898F05}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asteroids_net", "Asteroids\Asteroids_net.csproj", "{6AA283E8-D2B2-4743-B96D-96A5DAA8F2B5}" @@ -38,6 +37,33 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_Converter_Grid2", "..\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Asteroids_Base", "Asteroids_Base\Asteroids_Base.csproj", "{15EA50ED-95FB-4195-87F6-F1D48DA8B5F1}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FPC", "FPC", "{0740D150-8C47-4B16-91D8-7C53928C06AD}" + ProjectSection(SolutionItems) = preProject + ..\..\..\Delphi\Games\Source\asteroids\CharEdges.txt = ..\..\..\Delphi\Games\Source\asteroids\CharEdges.txt + ..\..\..\Delphi\Games\Source\asteroids\Credits.txt = ..\..\..\Delphi\Games\Source\asteroids\Credits.txt + ..\..\..\Delphi\Games\Source\asteroids\TestAsteroTypes.pas = ..\..\..\Delphi\Games\Source\asteroids\TestAsteroTypes.pas + ..\..\..\Delphi\Games\Source\asteroids\uDlg_EnterName.lfm = ..\..\..\Delphi\Games\Source\asteroids\uDlg_EnterName.lfm + ..\..\..\Delphi\Games\Source\asteroids\uDlg_EnterName.pas = ..\..\..\Delphi\Games\Source\asteroids\uDlg_EnterName.pas + ..\..\..\Delphi\Games\Source\asteroids\uGame.pas = ..\..\..\Delphi\Games\Source\asteroids\uGame.pas + ..\..\..\Delphi\Games\Source\asteroids\uHighscores.lfm = ..\..\..\Delphi\Games\Source\asteroids\uHighscores.lfm + ..\..\..\Delphi\Games\Source\asteroids\uHighscores.pas = ..\..\..\Delphi\Games\Source\asteroids\uHighscores.pas + ..\..\..\Delphi\Games\Source\asteroids\uInfo.lfm = ..\..\..\Delphi\Games\Source\asteroids\uInfo.lfm + ..\..\..\Delphi\Games\Source\asteroids\uInfo.pas = ..\..\..\Delphi\Games\Source\asteroids\uInfo.pas + ..\..\..\Delphi\Games\Source\asteroids\uKeys.lfm = ..\..\..\Delphi\Games\Source\asteroids\uKeys.lfm + ..\..\..\Delphi\Games\Source\asteroids\uKeys.pas = ..\..\..\Delphi\Games\Source\asteroids\uKeys.pas + ..\..\..\Delphi\Games\Source\asteroids\uMain.lfm = ..\..\..\Delphi\Games\Source\asteroids\uMain.lfm + ..\..\..\Delphi\Games\Source\asteroids\uMain.pas = ..\..\..\Delphi\Games\Source\asteroids\uMain.pas + ..\..\..\Delphi\Games\Source\asteroids\uSettings.lfm = ..\..\..\Delphi\Games\Source\asteroids\uSettings.lfm + ..\..\..\Delphi\Games\Source\asteroids\uSettings.pas = ..\..\..\Delphi\Games\Source\asteroids\uSettings.pas + ..\..\..\Delphi\Games\Source\asteroids\uTypes.pas = ..\..\..\Delphi\Games\Source\asteroids\uTypes.pas + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsteroidsModernEngine", "AsteroidsModernEngine\AsteroidsModernEngine.csproj", "{D4767FBB-473F-DACA-8CE1-32D6114DB902}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsteroidsModernUI", "AsteroidsModernUI\AsteroidsModernUI.csproj", "{61C98F4B-F0E3-9C3B-8190-BF25982A0544}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsteroidsModernEngine.Tests", "AsteroidsModernEngine.Tests\AsteroidsModernEngine.Tests.csproj", "{6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -52,134 +78,6 @@ Global {66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|Any CPU.Build.0 = Debug|Any CPU {66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|Any CPU.ActiveCfg = Release|Any CPU {66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|Any CPU.Build.0 = Release|Any CPU - {8AA72111-7FF0-416B-90E3-0DC9B2548156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8AA72111-7FF0-416B-90E3-0DC9B2548156}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8AA72111-7FF0-416B-90E3-0DC9B2548156}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8AA72111-7FF0-416B-90E3-0DC9B2548156}.Release|Any CPU.Build.0 = Release|Any CPU - {772EB95A-D422-474F-A749-66434C42084A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {772EB95A-D422-474F-A749-66434C42084A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {772EB95A-D422-474F-A749-66434C42084A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {772EB95A-D422-474F-A749-66434C42084A}.Release|Any CPU.Build.0 = Release|Any CPU - {60F5A221-9007-44A2-B29E-0469D91434EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60F5A221-9007-44A2-B29E-0469D91434EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60F5A221-9007-44A2-B29E-0469D91434EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60F5A221-9007-44A2-B29E-0469D91434EC}.Release|Any CPU.Build.0 = Release|Any CPU - {A6A861F4-DC4E-45CB-A621-E737693CB9EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A6A861F4-DC4E-45CB-A621-E737693CB9EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A6A861F4-DC4E-45CB-A621-E737693CB9EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A6A861F4-DC4E-45CB-A621-E737693CB9EA}.Release|Any CPU.Build.0 = Release|Any CPU - {3EDDA5EE-28AB-491E-AC2A-7C13B4A310DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EDDA5EE-28AB-491E-AC2A-7C13B4A310DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EDDA5EE-28AB-491E-AC2A-7C13B4A310DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EDDA5EE-28AB-491E-AC2A-7C13B4A310DD}.Release|Any CPU.Build.0 = Release|Any CPU - {58BB1796-700F-4F0D-981A-A16BE151AD65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58BB1796-700F-4F0D-981A-A16BE151AD65}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58BB1796-700F-4F0D-981A-A16BE151AD65}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58BB1796-700F-4F0D-981A-A16BE151AD65}.Release|Any CPU.Build.0 = Release|Any CPU - {F3338CF1-8429-489F-88E7-1BC5A5F2C425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3338CF1-8429-489F-88E7-1BC5A5F2C425}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3338CF1-8429-489F-88E7-1BC5A5F2C425}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3338CF1-8429-489F-88E7-1BC5A5F2C425}.Release|Any CPU.Build.0 = Release|Any CPU - {B36AA369-AA02-446A-9028-F801DC5728E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B36AA369-AA02-446A-9028-F801DC5728E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B36AA369-AA02-446A-9028-F801DC5728E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B36AA369-AA02-446A-9028-F801DC5728E5}.Release|Any CPU.Build.0 = Release|Any CPU - {DBD8FF8A-4868-446B-912B-9A5A796943DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DBD8FF8A-4868-446B-912B-9A5A796943DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DBD8FF8A-4868-446B-912B-9A5A796943DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DBD8FF8A-4868-446B-912B-9A5A796943DD}.Release|Any CPU.Build.0 = Release|Any CPU - {83D18210-073D-461C-92B5-A1F62034BF90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83D18210-073D-461C-92B5-A1F62034BF90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83D18210-073D-461C-92B5-A1F62034BF90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83D18210-073D-461C-92B5-A1F62034BF90}.Release|Any CPU.Build.0 = Release|Any CPU - {00D00117-45B0-4B30-87F0-74DBEE09898C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00D00117-45B0-4B30-87F0-74DBEE09898C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00D00117-45B0-4B30-87F0-74DBEE09898C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00D00117-45B0-4B30-87F0-74DBEE09898C}.Release|Any CPU.Build.0 = Release|Any CPU - {CE756825-E693-4592-A937-635A5E11274A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE756825-E693-4592-A937-635A5E11274A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE756825-E693-4592-A937-635A5E11274A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE756825-E693-4592-A937-635A5E11274A}.Release|Any CPU.Build.0 = Release|Any CPU - {A4144DF0-77E3-4370-8C46-64C56279B3DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4144DF0-77E3-4370-8C46-64C56279B3DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4144DF0-77E3-4370-8C46-64C56279B3DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4144DF0-77E3-4370-8C46-64C56279B3DE}.Release|Any CPU.Build.0 = Release|Any CPU - {79B65C63-EB25-4DEF-AC59-52836AAA0F24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79B65C63-EB25-4DEF-AC59-52836AAA0F24}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79B65C63-EB25-4DEF-AC59-52836AAA0F24}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79B65C63-EB25-4DEF-AC59-52836AAA0F24}.Release|Any CPU.Build.0 = Release|Any CPU - {87D85880-5526-4FEF-93E9-3DCFBA0A1A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87D85880-5526-4FEF-93E9-3DCFBA0A1A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87D85880-5526-4FEF-93E9-3DCFBA0A1A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87D85880-5526-4FEF-93E9-3DCFBA0A1A4C}.Release|Any CPU.Build.0 = Release|Any CPU - {C85992D0-7713-4EA1-A4F3-3D3598FFA9E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C85992D0-7713-4EA1-A4F3-3D3598FFA9E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C85992D0-7713-4EA1-A4F3-3D3598FFA9E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C85992D0-7713-4EA1-A4F3-3D3598FFA9E0}.Release|Any CPU.Build.0 = Release|Any CPU - {6F8F8283-A334-47D4-A15B-94100A2C29E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F8F8283-A334-47D4-A15B-94100A2C29E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F8F8283-A334-47D4-A15B-94100A2C29E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F8F8283-A334-47D4-A15B-94100A2C29E3}.Release|Any CPU.Build.0 = Release|Any CPU - {D8E3D40A-8D95-4410-AF28-A7AD24215754}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8E3D40A-8D95-4410-AF28-A7AD24215754}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8E3D40A-8D95-4410-AF28-A7AD24215754}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8E3D40A-8D95-4410-AF28-A7AD24215754}.Release|Any CPU.Build.0 = Release|Any CPU - {8E1630B1-46AF-4A2B-8349-AEED39F1CFA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E1630B1-46AF-4A2B-8349-AEED39F1CFA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E1630B1-46AF-4A2B-8349-AEED39F1CFA9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E1630B1-46AF-4A2B-8349-AEED39F1CFA9}.Release|Any CPU.Build.0 = Release|Any CPU - {167E2DAD-894E-4BE6-8936-72A8D9B7ECC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {167E2DAD-894E-4BE6-8936-72A8D9B7ECC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {167E2DAD-894E-4BE6-8936-72A8D9B7ECC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {167E2DAD-894E-4BE6-8936-72A8D9B7ECC5}.Release|Any CPU.Build.0 = Release|Any CPU - {E004F929-593A-4F29-B77E-FEA73C600442}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E004F929-593A-4F29-B77E-FEA73C600442}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E004F929-593A-4F29-B77E-FEA73C600442}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E004F929-593A-4F29-B77E-FEA73C600442}.Release|Any CPU.Build.0 = Release|Any CPU - {790D205A-6FB7-4159-AE15-C39BCADAFF6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {790D205A-6FB7-4159-AE15-C39BCADAFF6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {790D205A-6FB7-4159-AE15-C39BCADAFF6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {790D205A-6FB7-4159-AE15-C39BCADAFF6F}.Release|Any CPU.Build.0 = Release|Any CPU - {5E72ADAF-153A-4488-AAA9-CC4EF2771F16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E72ADAF-153A-4488-AAA9-CC4EF2771F16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E72ADAF-153A-4488-AAA9-CC4EF2771F16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E72ADAF-153A-4488-AAA9-CC4EF2771F16}.Release|Any CPU.Build.0 = Release|Any CPU - {BFD71332-B8CE-4072-B933-16326850BF63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BFD71332-B8CE-4072-B933-16326850BF63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFD71332-B8CE-4072-B933-16326850BF63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BFD71332-B8CE-4072-B933-16326850BF63}.Release|Any CPU.Build.0 = Release|Any CPU - {E4742BCD-D967-40A2-99C9-14351BCC9FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4742BCD-D967-40A2-99C9-14351BCC9FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4742BCD-D967-40A2-99C9-14351BCC9FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4742BCD-D967-40A2-99C9-14351BCC9FD1}.Release|Any CPU.Build.0 = Release|Any CPU - {6BDAFCB1-55B5-4CAB-A9CD-9D485151D1EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BDAFCB1-55B5-4CAB-A9CD-9D485151D1EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BDAFCB1-55B5-4CAB-A9CD-9D485151D1EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BDAFCB1-55B5-4CAB-A9CD-9D485151D1EF}.Release|Any CPU.Build.0 = Release|Any CPU - {9CA57524-1297-4313-AA78-5AA8BFB7E746}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CA57524-1297-4313-AA78-5AA8BFB7E746}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CA57524-1297-4313-AA78-5AA8BFB7E746}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CA57524-1297-4313-AA78-5AA8BFB7E746}.Release|Any CPU.Build.0 = Release|Any CPU - {D5CA406E-3839-4CB6-AF28-7EE2B029B912}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5CA406E-3839-4CB6-AF28-7EE2B029B912}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5CA406E-3839-4CB6-AF28-7EE2B029B912}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5CA406E-3839-4CB6-AF28-7EE2B029B912}.Release|Any CPU.Build.0 = Release|Any CPU - {380B97C9-B145-49A9-92C0-47B819748BC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {380B97C9-B145-49A9-92C0-47B819748BC3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {380B97C9-B145-49A9-92C0-47B819748BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {380B97C9-B145-49A9-92C0-47B819748BC3}.Release|Any CPU.Build.0 = Release|Any CPU - {0E81C28B-325A-4A2F-B21F-F66DADA451EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0E81C28B-325A-4A2F-B21F-F66DADA451EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0E81C28B-325A-4A2F-B21F-F66DADA451EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0E81C28B-325A-4A2F-B21F-F66DADA451EC}.Release|Any CPU.Build.0 = Release|Any CPU - {07FB5A96-DB06-442C-8570-8644898BD6C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07FB5A96-DB06-442C-8570-8644898BD6C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07FB5A96-DB06-442C-8570-8644898BD6C5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07FB5A96-DB06-442C-8570-8644898BD6C5}.Release|Any CPU.Build.0 = Release|Any CPU - {445F80F7-1EAB-462A-BD46-0DE231BD66D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {445F80F7-1EAB-462A-BD46-0DE231BD66D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {445F80F7-1EAB-462A-BD46-0DE231BD66D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {445F80F7-1EAB-462A-BD46-0DE231BD66D9}.Release|Any CPU.Build.0 = Release|Any CPU {6AA283E8-D2B2-4743-B96D-96A5DAA8F2B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6AA283E8-D2B2-4743-B96D-96A5DAA8F2B5}.Debug|Any CPU.Build.0 = Debug|Any CPU {6AA283E8-D2B2-4743-B96D-96A5DAA8F2B5}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -200,6 +98,18 @@ Global {15EA50ED-95FB-4195-87F6-F1D48DA8B5F1}.Debug|Any CPU.Build.0 = Debug|Any CPU {15EA50ED-95FB-4195-87F6-F1D48DA8B5F1}.Release|Any CPU.ActiveCfg = Release|Any CPU {15EA50ED-95FB-4195-87F6-F1D48DA8B5F1}.Release|Any CPU.Build.0 = Release|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Release|Any CPU.Build.0 = Release|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Release|Any CPU.Build.0 = Release|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -207,16 +117,14 @@ Global GlobalSection(NestedProjects) = preSolution {890CF504-3814-443B-9EE6-E8BCACF68203} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C} {66EB60F2-523D-47C8-95EA-C7E10759E239} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C} - {79B65C63-EB25-4DEF-AC59-52836AAA0F24} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C} - {87D85880-5526-4FEF-93E9-3DCFBA0A1A4C} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C} - {C85992D0-7713-4EA1-A4F3-3D3598FFA9E0} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C} - {6F8F8283-A334-47D4-A15B-94100A2C29E3} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C} - {0E81C28B-325A-4A2F-B21F-F66DADA451EC} = {79430A25-1F0B-49B9-9A68-720A422E91AB} {6AA283E8-D2B2-4743-B96D-96A5DAA8F2B5} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} {F7BB8FCE-FAE8-4C35-939F-070DF91806B5} = {79430A25-1F0B-49B9-9A68-720A422E91AB} {3E13AE4D-D805-4D2E-B6B5-88DC174F6A2C} = {79430A25-1F0B-49B9-9A68-720A422E91AB} {F74AA722-DB1C-4CDB-B0FB-4016651C6E1C} = {79430A25-1F0B-49B9-9A68-720A422E91AB} {15EA50ED-95FB-4195-87F6-F1D48DA8B5F1} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} + {D4767FBB-473F-DACA-8CE1-32D6114DB902} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} + {61C98F4B-F0E3-9C3B-8190-BF25982A0544} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {51252E6F-E712-436A-B391-1C5243F65ABE} diff --git a/CSharpBible/Games/Games.sln b/CSharpBible/Games/Games.sln index 007589994..6a3ccda94 100644 --- a/CSharpBible/Games/Games.sln +++ b/CSharpBible/Games/Games.sln @@ -118,6 +118,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Galaxia_UI", "Galaxia_UI\Ga EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Galaxia_UI.Tests", "Galaxia_UI.Tests\Galaxia_UI.Tests.csproj", "{CF97ED5D-8860-C2DB-5B3C-077D1D53239E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsteroidsModernEngine", "AsteroidsModernEngine\AsteroidsModernEngine.csproj", "{D4767FBB-473F-DACA-8CE1-32D6114DB902}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsteroidsModernEngine.Tests", "AsteroidsModernEngine.Tests\AsteroidsModernEngine.Tests.csproj", "{6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsteroidsModernUI", "AsteroidsModernUI\AsteroidsModernUI.csproj", "{61C98F4B-F0E3-9C3B-8190-BF25982A0544}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -300,6 +306,18 @@ Global {CF97ED5D-8860-C2DB-5B3C-077D1D53239E}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF97ED5D-8860-C2DB-5B3C-077D1D53239E}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF97ED5D-8860-C2DB-5B3C-077D1D53239E}.Release|Any CPU.Build.0 = Release|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4767FBB-473F-DACA-8CE1-32D6114DB902}.Release|Any CPU.Build.0 = Release|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7}.Release|Any CPU.Build.0 = Release|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61C98F4B-F0E3-9C3B-8190-BF25982A0544}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -331,6 +349,9 @@ Global {22EEBAD2-5D25-4187-A747-91DB62DFDB38} = {849E3A1B-3408-46A4-9086-D7F1EC1469F7} {2963FCFA-9F4F-53F4-C5AA-C9D2A7B7E041} = {849E3A1B-3408-46A4-9086-D7F1EC1469F7} {CF97ED5D-8860-C2DB-5B3C-077D1D53239E} = {849E3A1B-3408-46A4-9086-D7F1EC1469F7} + {D4767FBB-473F-DACA-8CE1-32D6114DB902} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} + {6C8DC869-11BC-A7D0-9829-28BA4DAAC4F7} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} + {61C98F4B-F0E3-9C3B-8190-BF25982A0544} = {4BE42477-1420-4A81-BDFA-4C34DA898F05} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {51252E6F-E712-436A-B391-1C5243F65ABE} From 3afd015b87cec3ec375055c363e0bd220d5418f9 Mon Sep 17 00:00:00 2001 From: Joe Care Date: Sun, 28 Sep 2025 09:04:35 +0200 Subject: [PATCH 192/569] AboutEx --- .../DetectiveGame.Console.csproj | 12 + .../Games/DetectiveGame.Console/Program.cs | 48 +++ .../Games/DetectiveGame.Engine/Cards/Card.cs | 6 + .../Cards/CardCategory.cs | 8 + .../DetectiveGame.Engine.csproj | 9 + .../DetectiveGame.Engine/Game/CaseSolution.cs | 8 + .../DetectiveGame.Engine/Game/GameData.cs | 47 +++ .../DetectiveGame.Engine/Game/GameService.cs | 91 +++++ .../DetectiveGame.Engine/Game/GameState.cs | 15 + .../Game/Interfaces/IGameService.cs | 10 + .../Game/Interfaces/IGameSetup.cs | 6 + .../Games/DetectiveGame.Engine/Game/Player.cs | 20 + .../DetectiveGame.Engine/Game/Suggestion.cs | 9 + .../DetectiveGame.Tests.csproj | 19 + .../Games/DetectiveGame.Tests/SetupTests.cs | 32 ++ .../DetectiveGame.Tests/SuggestionTests.cs | 25 ++ CSharpBible/Games/DetectiveGame.Wpf/App.xaml | 6 + .../Games/DetectiveGame.Wpf/App.xaml.cs | 5 + .../DetectiveGame.Wpf.csproj | 16 + .../Games/DetectiveGame.Wpf/MainWindow.xaml | 39 ++ .../DetectiveGame.Wpf/MainWindow.xaml.cs | 58 +++ .../CommonControls/CommandControl.cs | 69 ++++ .../ConsoleLib/CommonControls/ListBox.cs | 346 ++++++++++++++++++ .../ConsoleLib/CommonControls/MenuBar.cs | 105 ++++++ .../ConsoleLib/CommonControls/MenuItem.cs | 134 +++++++ .../ConsoleLib/CommonControls/MenuPopup.cs | 64 ++++ .../ConsoleLib/CommonControls/ScrollBar.cs | 346 ++++++++++++++++++ .../ConsoleLib/Interfaces/IGroupControl.cs | 11 + .../ConsoleLib/Interfaces/IPopup.cs | 12 + .../CommonControls/ApplicationTests.cs | 86 +++++ .../CommonControls/ButtonTests.cs | 49 +++ .../CommonControls/CommandControlTests.cs | 51 +++ .../CommonControls/ConsoleFrameworkTests.cs | 47 +++ .../CommonControls/ControlTests.cs | 172 +++++++++ .../CommonControls/LabelTests.cs | 23 ++ .../CommonControls/MenuBarTests.cs | 112 ++++++ .../CommonControls/MenuItemAdvancedTests.cs | 87 +++++ .../CommonControls/MenuItemTests.cs | 71 ++++ .../CommonControls/MenuPopupAdvancedTests.cs | 38 ++ .../CommonControls/MenuPopupTests.cs | 57 +++ .../CommonControls/PanelTests.cs | 99 +++++ .../CommonControls/ScrollBarTests.cs | 101 +++++ .../CommonControls/TerminalTests.cs | 45 +++ .../CommonControls/TestBase.cs | 44 +++ .../ConsoleLibTests/ConsoleLibTests.csproj | 21 ++ 45 files changed, 2679 insertions(+) create mode 100644 CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj create mode 100644 CSharpBible/Games/DetectiveGame.Console/Program.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Cards/Card.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Cards/CardCategory.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/DetectiveGame.Engine.csproj create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/CaseSolution.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/GameData.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/GameService.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/GameState.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameService.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameSetup.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/Player.cs create mode 100644 CSharpBible/Games/DetectiveGame.Engine/Game/Suggestion.cs create mode 100644 CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj create mode 100644 CSharpBible/Games/DetectiveGame.Tests/SetupTests.cs create mode 100644 CSharpBible/Games/DetectiveGame.Tests/SuggestionTests.cs create mode 100644 CSharpBible/Games/DetectiveGame.Wpf/App.xaml create mode 100644 CSharpBible/Games/DetectiveGame.Wpf/App.xaml.cs create mode 100644 CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj create mode 100644 CSharpBible/Games/DetectiveGame.Wpf/MainWindow.xaml create mode 100644 CSharpBible/Games/DetectiveGame.Wpf/MainWindow.xaml.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/CommonControls/CommandControl.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/CommonControls/ListBox.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/CommonControls/MenuBar.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/CommonControls/MenuItem.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/CommonControls/MenuPopup.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/CommonControls/ScrollBar.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/Interfaces/IGroupControl.cs create mode 100644 CSharpBible/Libraries/ConsoleLib/ConsoleLib/Interfaces/IPopup.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/ApplicationTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/ButtonTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/CommandControlTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/ConsoleFrameworkTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/ControlTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/LabelTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/MenuBarTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/MenuItemAdvancedTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/MenuItemTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/MenuPopupAdvancedTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/MenuPopupTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/PanelTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/ScrollBarTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/TerminalTests.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/CommonControls/TestBase.cs create mode 100644 CSharpBible/Libraries/ConsoleLibTests/ConsoleLibTests.csproj diff --git a/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj b/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj new file mode 100644 index 000000000..5bb2a5bb9 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj @@ -0,0 +1,12 @@ + + + Exe + net8.0 + enable + enable + latest + + + + + \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Console/Program.cs b/CSharpBible/Games/DetectiveGame.Console/Program.cs new file mode 100644 index 000000000..b282a81d7 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Console/Program.cs @@ -0,0 +1,48 @@ +using DetectiveGame.Engine.Game; +using DetectiveGame.Engine.Cards; + +var setup = new GameService(); +var state = setup.CreateNew(new []{"Alice","Bob","Carol"}); +Console.WriteLine("Detektivspiel gestartet."); +while (!state.Finished) +{ + var current = state.Players[state.CurrentPlayerIndex]; + if (!current.Active) { new GameService().NextTurn(state); continue; } + Console.WriteLine($"Spieler {current.Name} ist am Zug."); + Console.Write("Verdacht äußern? (j/n): "); + var key = Console.ReadLine(); + if (key?.StartsWith("j", StringComparison.OrdinalIgnoreCase) == true) + { + var person = Prompt("Person", GameData.Persons); + var weapon = Prompt("Waffe", GameData.Weapons); + var room = Prompt("Raum", GameData.Rooms); + var svc = new GameService(); + var sug = svc.MakeSuggestion(state, current.Id, person, weapon, room); + if (sug.RefutingPlayerId is int pid) + Console.WriteLine($"Widerlegt von Spieler {pid} mit Karte {sug.RevealedCard}"); + else + Console.WriteLine("Niemand konnte widerlegen."); + } + Console.Write("Anklage? (j/n): "); + var acc = Console.ReadLine(); + if (acc?.StartsWith("j", StringComparison.OrdinalIgnoreCase) == true) + { + var person = Prompt("Person", GameData.Persons); + var weapon = Prompt("Waffe", GameData.Weapons); + var room = Prompt("Raum", GameData.Rooms); + var svc = new GameService(); + var ok = svc.MakeAccusation(state, current.Id, person, weapon, room); + Console.WriteLine(ok ? "Richtig! Spiel Ende." : "Falsch! Spieler inaktiv."); + } + new GameService().NextTurn(state); +} +Console.WriteLine($"Sieger: {state.WinnerPlayerId}"); + +static Card Prompt(string label, IReadOnlyList options) +{ + Console.WriteLine(label + ":"); + for (int i=0;i=options.Count) ; + return options[idx]; +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Cards/Card.cs b/CSharpBible/Games/DetectiveGame.Engine/Cards/Card.cs new file mode 100644 index 000000000..7191fb720 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Cards/Card.cs @@ -0,0 +1,6 @@ +namespace DetectiveGame.Engine.Cards; + +public sealed record Card(string Name, CardCategory Category) +{ + public override string ToString() => $"{Name} ({Category})"; +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Cards/CardCategory.cs b/CSharpBible/Games/DetectiveGame.Engine/Cards/CardCategory.cs new file mode 100644 index 000000000..f7897b090 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Cards/CardCategory.cs @@ -0,0 +1,8 @@ +namespace DetectiveGame.Engine.Cards; + +public enum CardCategory +{ + Person, + Weapon, + Room +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/DetectiveGame.Engine.csproj b/CSharpBible/Games/DetectiveGame.Engine/DetectiveGame.Engine.csproj new file mode 100644 index 000000000..061486838 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/DetectiveGame.Engine.csproj @@ -0,0 +1,9 @@ + + + net8.0 + enable + enable + latest + true + + \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/CaseSolution.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/CaseSolution.cs new file mode 100644 index 000000000..d5ea67553 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/CaseSolution.cs @@ -0,0 +1,8 @@ +using DetectiveGame.Engine.Cards; + +namespace DetectiveGame.Engine.Game; + +public sealed record CaseSolution(Card Person, Card Weapon, Card Room) +{ + public IEnumerable All => new[] { Person, Weapon, Room }; +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/GameData.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/GameData.cs new file mode 100644 index 000000000..b452400bc --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/GameData.cs @@ -0,0 +1,47 @@ +using DetectiveGame.Engine.Cards; + +namespace DetectiveGame.Engine.Game; + +public static class GameData +{ + public static IReadOnlyList Persons { get; } = new List + { + new("Person1", CardCategory.Person), + new("Person2", CardCategory.Person), + new("Person3", CardCategory.Person), + new("Person4", CardCategory.Person), + new("Person5", CardCategory.Person), + new("Person6", CardCategory.Person), + new("Person7", CardCategory.Person), + new("Person8", CardCategory.Person), + new("Person9", CardCategory.Person) + }; + + public static IReadOnlyList Weapons { get; } = new List + { + new("Weapon1", CardCategory.Weapon), + new("Weapon2", CardCategory.Weapon), + new("Weapon3", CardCategory.Weapon), + new("Weapon4", CardCategory.Weapon), + new("Weapon5", CardCategory.Weapon), + new("Weapon6", CardCategory.Weapon), + new("Weapon7", CardCategory.Weapon), + new("Weapon8", CardCategory.Weapon), + new("Weapon9", CardCategory.Weapon) + }; + + public static IReadOnlyList Rooms { get; } = new List + { + new("Room1", CardCategory.Room), + new("Room2", CardCategory.Room), + new("Room3", CardCategory.Room), + new("Room4", CardCategory.Room), + new("Room5", CardCategory.Room), + new("Room6", CardCategory.Room), + new("Room7", CardCategory.Room), + new("Room8", CardCategory.Room), + new("Room9", CardCategory.Room) + }; + + public static IReadOnlyList All => Persons.Concat(Weapons).Concat(Rooms).ToList(); +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/GameService.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/GameService.cs new file mode 100644 index 000000000..4b5299421 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/GameService.cs @@ -0,0 +1,91 @@ +using DetectiveGame.Engine.Cards; +using DetectiveGame.Engine.Game.Interfaces; + +namespace DetectiveGame.Engine.Game; + +public class GameService : IGameSetup, IGameService +{ + public GameState CreateNew(IReadOnlyList playerNames, int? seed = null) + { + if (playerNames.Count < 2) throw new ArgumentException("Need at least 2 players"); + var rnd = seed.HasValue ? new Random(seed.Value) : Random.Shared; + var state = new GameState(); + for (int i = 0; i < playerNames.Count; i++) state.PlayersInternal().Add(new Player(i, playerNames[i])); + + // choose solution + var person = GameData.Persons[rnd.Next(GameData.Persons.Count)]; + var weapon = GameData.Weapons[rnd.Next(GameData.Weapons.Count)]; + var room = GameData.Rooms[rnd.Next(GameData.Rooms.Count)]; + state.Solution = new CaseSolution(person, weapon, room); + + // remaining deck + var deck = GameData.All.Where(c => !state.Solution.All.Contains(c)).OrderBy(_ => rnd.Next()).ToList(); + int pIndex = 0; + foreach (var card in deck) + { + state.PlayersInternal()[pIndex].Hand.Add(card); + pIndex = (pIndex + 1) % state.Players.Count; + } + return state; + } + + public Suggestion MakeSuggestion(GameState state, int askingPlayerId, Card person, Card weapon, Card room) + { + if (state.Finished) throw new InvalidOperationException("Game finished"); + var sug = new Suggestion(askingPlayerId, person, weapon, room); + var players = state.Players; + for (int step = 1; step < players.Count; step++) + { + var p = players[(state.CurrentPlayerIndex + step) % players.Count]; + if (!p.Active) continue; + Card? reveal = p.Hand.FirstOrDefault(c => c == person || c == weapon || c == room); + if (reveal != null) + { + p.SeenCards.Add(reveal); // actually asking player sees it; modeling simple global knowledge for now + sug = sug with { RefutingPlayerId = p.Id, RevealedCard = reveal }; + break; + } + } + state.History.Add(sug); + return sug; + } + + public bool MakeAccusation(GameState state, int playerId, Card person, Card weapon, Card room) + { + if (state.Finished) throw new InvalidOperationException("Game finished"); + var correct = state.Solution.Person == person && state.Solution.Weapon == weapon && state.Solution.Room == room; + if (correct) + { + state.Finished = true; + state.WinnerPlayerId = playerId; + return true; + } + var player = state.Players.First(p => p.Id == playerId); + player.Active = false; + // if only one active left they win automatically + if (state.Players.Count(p => p.Active) == 1) + { + state.Finished = true; + state.WinnerPlayerId = state.Players.First(p => p.Active).Id; + } + return false; + } + + public void NextTurn(GameState state) + { + if (state.Finished) return; + var count = state.Players.Count; + for (int i = 0; i < count; i++) + { + state.CurrentPlayerIndex = (state.CurrentPlayerIndex + 1) % count; + if (state.Players[state.CurrentPlayerIndex].Active) break; + } + } +} + +internal static class GameStateExtensions +{ + public static List PlayersInternal(this GameState state) => (List)state.GetType() + .GetField("_players", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)! + .GetValue(state)!; +} diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/GameState.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/GameState.cs new file mode 100644 index 000000000..960faffbb --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/GameState.cs @@ -0,0 +1,15 @@ +using DetectiveGame.Engine.Cards; + +namespace DetectiveGame.Engine.Game; + +public class GameState +{ + public Guid Id { get; } = Guid.NewGuid(); + public IReadOnlyList Players => _players; + private readonly List _players = new(); + public int CurrentPlayerIndex { get; internal set; } + public CaseSolution Solution { get; internal set; } = null!; // set in setup + public List History { get; } = new(); + public bool Finished { get; internal set; } + public int? WinnerPlayerId { get; internal set; } +} diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameService.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameService.cs new file mode 100644 index 000000000..f4a6df73d --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameService.cs @@ -0,0 +1,10 @@ +using DetectiveGame.Engine.Cards; + +namespace DetectiveGame.Engine.Game.Interfaces; + +public interface IGameService +{ + Suggestion MakeSuggestion(GameState state, int askingPlayerId, Card person, Card weapon, Card room); + bool MakeAccusation(GameState state, int playerId, Card person, Card weapon, Card room); + void NextTurn(GameState state); +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameSetup.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameSetup.cs new file mode 100644 index 000000000..0fddcb86c --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/Interfaces/IGameSetup.cs @@ -0,0 +1,6 @@ +namespace DetectiveGame.Engine.Game.Interfaces; + +public interface IGameSetup +{ + GameState CreateNew(IReadOnlyList playerNames, int? seed = null); +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/Player.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/Player.cs new file mode 100644 index 000000000..0a404a5cf --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/Player.cs @@ -0,0 +1,20 @@ +using DetectiveGame.Engine.Cards; + +namespace DetectiveGame.Engine.Game; + +public class Player +{ + public int Id { get; } + public string Name { get; } + public List Hand { get; } = new(); + public HashSet SeenCards { get; } = new(); + public bool Active { get; internal set; } = true; + + public Player(int id, string name) + { + Id = id; + Name = name; + } + + public override string ToString() => $"#{Id} {Name} (Hand {Hand.Count})"; +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Engine/Game/Suggestion.cs b/CSharpBible/Games/DetectiveGame.Engine/Game/Suggestion.cs new file mode 100644 index 000000000..22355485f --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Engine/Game/Suggestion.cs @@ -0,0 +1,9 @@ +using DetectiveGame.Engine.Cards; + +namespace DetectiveGame.Engine.Game; + +public sealed record Suggestion(int AskingPlayerId, Card Person, Card Weapon, Card Room) +{ + public int? RefutingPlayerId { get; init; } + public Card? RevealedCard { get; init; } +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj b/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj new file mode 100644 index 000000000..a7169cddf --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj @@ -0,0 +1,19 @@ + + + net8.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Tests/SetupTests.cs b/CSharpBible/Games/DetectiveGame.Tests/SetupTests.cs new file mode 100644 index 000000000..a277a041c --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Tests/SetupTests.cs @@ -0,0 +1,32 @@ +using DetectiveGame.Engine.Game; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace DetectiveGame.Tests; + +[TestClass] +public class SetupTests +{ + [TestMethod] + public void Distribution_Is_Fair() + { + var svc = new GameService(); + var state = svc.CreateNew(new[] { "A", "B", "C", "D" }); + var counts = state.Players.Select(p => p.Hand.Count).ToList(); + Assert.IsTrue(counts.Max() - counts.Min() <= 1); + // total cards should be 27 - 3 = 24 + Assert.AreEqual(24, counts.Sum()); + } + + [TestMethod] + public void Solution_Cards_Not_In_Hands() + { + var svc = new GameService(); + var state = svc.CreateNew(new[] { "A", "B", "C" }); + foreach (var p in state.Players) + { + Assert.IsFalse(p.Hand.Contains(state.Solution.Person)); + Assert.IsFalse(p.Hand.Contains(state.Solution.Weapon)); + Assert.IsFalse(p.Hand.Contains(state.Solution.Room)); + } + } +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Tests/SuggestionTests.cs b/CSharpBible/Games/DetectiveGame.Tests/SuggestionTests.cs new file mode 100644 index 000000000..a40a2ad27 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Tests/SuggestionTests.cs @@ -0,0 +1,25 @@ +using DetectiveGame.Engine.Game; +using DetectiveGame.Engine.Cards; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace DetectiveGame.Tests; + +[TestClass] +public class SuggestionTests +{ + [TestMethod] + public void Suggestion_Returns_First_Refuter() + { + var svc = new GameService(); + var state = svc.CreateNew(new[] { "A", "B", "C" }, seed: 123); + var current = state.Players[state.CurrentPlayerIndex]; + // pick three cards from next player hand to ensure refutation + var next = state.Players[(state.CurrentPlayerIndex + 1) % state.Players.Count]; + var card = next.Hand.First(); + Card person = card.Category == CardCategory.Person ? card : state.Players.SelectMany(p=>p.Hand).First(c=>c.Category==CardCategory.Person); + Card weapon = card.Category == CardCategory.Weapon ? card : state.Players.SelectMany(p=>p.Hand).First(c=>c.Category==CardCategory.Weapon); + Card room = card.Category == CardCategory.Room ? card : state.Players.SelectMany(p=>p.Hand).First(c=>c.Category==CardCategory.Room); + var result = svc.MakeSuggestion(state, current.Id, person, weapon, room); + Assert.IsNotNull(result.RefutingPlayerId); + } +} \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Wpf/App.xaml b/CSharpBible/Games/DetectiveGame.Wpf/App.xaml new file mode 100644 index 000000000..129a2b630 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Wpf/App.xaml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Wpf/App.xaml.cs b/CSharpBible/Games/DetectiveGame.Wpf/App.xaml.cs new file mode 100644 index 000000000..fb45e39be --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Wpf/App.xaml.cs @@ -0,0 +1,5 @@ +using System.Windows; + +namespace DetectiveGame.Wpf; + +public partial class App : Application { } diff --git a/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj b/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj new file mode 100644 index 000000000..fbee800a3 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj @@ -0,0 +1,16 @@ + + + WinExe + net8.0-windows + true + enable + enable + latest + + + + + + + + \ No newline at end of file diff --git a/CSharpBible/Games/DetectiveGame.Wpf/MainWindow.xaml b/CSharpBible/Games/DetectiveGame.Wpf/MainWindow.xaml new file mode 100644 index 000000000..394063186 --- /dev/null +++ b/CSharpBible/Games/DetectiveGame.Wpf/MainWindow.xaml @@ -0,0 +1,39 @@ + + + + + + + + + + + +