From 8afb8ebf31971bc914e4d59345fdeff6f8d9ba08 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 30 Nov 2016 14:08:28 -1000 Subject: [PATCH] sln reader/writer (#4870) * Snap of sln reader/writer from https://github.com/mono/monodevelop * Remove unnecessary code * Create a new test asset with an sln file because adding an sln to an existing one broke other tests * Remove commented out line * Removing unneeded PropertyGroup per PR comments * Update the license * Fixing the license --- Microsoft.DotNet.Cli.sln | 486 ++++++++ THIRD-PARTY-NOTICES | 45 +- .../TestProjects/TestAppWithSln/Program.cs | 12 + .../TestAppWithSln/TestAppWithSln.sln | 22 + .../TestAppWithSln/TestAppWithSln.xproj | 18 + .../TestProjects/TestAppWithSln/project.json | 25 + .../FileManipulation/FilePath.cs | 400 ++++++ .../FileManipulation/FileUtil.cs | 147 +++ .../Microsoft.DotNet.Cli.Sln.Internal.csproj | 36 + .../SlnFile.cs | 1071 +++++++++++++++++ ...Microsoft.DotNet.Cli.Sln.Internal.Tests.cs | 84 ++ ...osoft.DotNet.Cli.Sln.Internal.Tests.csproj | 50 + 12 files changed, 2395 insertions(+), 1 deletion(-) create mode 100644 TestAssets/TestProjects/TestAppWithSln/Program.cs create mode 100644 TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.sln create mode 100644 TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.xproj create mode 100644 TestAssets/TestProjects/TestAppWithSln/project.json create mode 100644 src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FilePath.cs create mode 100644 src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FileUtil.cs create mode 100644 src/Microsoft.DotNet.Cli.Sln.Internal/Microsoft.DotNet.Cli.Sln.Internal.csproj create mode 100644 src/Microsoft.DotNet.Cli.Sln.Internal/SlnFile.cs create mode 100644 test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.cs create mode 100644 test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.csproj diff --git a/Microsoft.DotNet.Cli.sln b/Microsoft.DotNet.Cli.sln index 5d96b9bab..031417dd4 100644 --- a/Microsoft.DotNet.Cli.sln +++ b/Microsoft.DotNet.Cli.sln @@ -192,880 +192,1364 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shared-build-targets-utils" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "update-dependencies", "build_projects\update-dependencies\update-dependencies.csproj", "{F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.Cli.Sln.Internal", "src\Microsoft.DotNet.Cli.Sln.Internal\Microsoft.DotNet.Cli.Sln.Internal.csproj", "{C98C7C2E-2C29-4A40-958C-60561ED77791}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.Cli.Sln.Internal.Tests", "test\Microsoft.DotNet.Cli.Sln.Internal.Tests\Microsoft.DotNet.Cli.Sln.Internal.Tests.csproj", "{56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 MinSizeRel|Any CPU = MinSizeRel|Any CPU MinSizeRel|x64 = MinSizeRel|x64 + MinSizeRel|x86 = MinSizeRel|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 + Release|x86 = Release|x86 RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU RelWithDebInfo|x64 = RelWithDebInfo|x64 + RelWithDebInfo|x86 = RelWithDebInfo|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Debug|Any CPU.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Debug|x64.ActiveCfg = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Debug|x86.ActiveCfg = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Debug|x86.Build.0 = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.MinSizeRel|Any CPU.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.MinSizeRel|Any CPU.Build.0 = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.MinSizeRel|x64.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.MinSizeRel|x64.Build.0 = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.MinSizeRel|x86.ActiveCfg = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.MinSizeRel|x86.Build.0 = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Release|Any CPU.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Release|Any CPU.Build.0 = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Release|x64.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Release|x64.Build.0 = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Release|x86.ActiveCfg = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.Release|x86.Build.0 = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.RelWithDebInfo|Any CPU.Build.0 = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.RelWithDebInfo|x64.ActiveCfg = Debug|x86 {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.RelWithDebInfo|x64.Build.0 = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.RelWithDebInfo|x86.ActiveCfg = Debug|x86 + {8A2FA2D8-0DA1-4814-B5C1-2ECEAA613EB1}.RelWithDebInfo|x86.Build.0 = Debug|x86 {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Debug|Any CPU.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Debug|Any CPU.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Debug|x64.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Debug|x64.Build.0 = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Debug|x86.ActiveCfg = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Debug|x86.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.MinSizeRel|x64.Build.0 = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.MinSizeRel|x86.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Release|Any CPU.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Release|Any CPU.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Release|x64.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Release|x64.Build.0 = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Release|x86.ActiveCfg = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.Release|x86.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {48A62BA4-D798-46A2-AB49-8A8471CF8165}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {48A62BA4-D798-46A2-AB49-8A8471CF8165}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Debug|Any CPU.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Debug|Any CPU.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Debug|x64.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Debug|x64.Build.0 = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Debug|x86.ActiveCfg = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Debug|x86.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.MinSizeRel|x64.Build.0 = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.MinSizeRel|x86.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Release|Any CPU.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Release|x64.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Release|x64.Build.0 = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Release|x86.ActiveCfg = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.Release|x86.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {7C3D62C6-1D71-4C45-872F-7583F2AB304A}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Debug|Any CPU.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Debug|Any CPU.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Debug|x64.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Debug|x64.Build.0 = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Debug|x86.ActiveCfg = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Debug|x86.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.MinSizeRel|x64.Build.0 = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.MinSizeRel|x86.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Release|Any CPU.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Release|Any CPU.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Release|x64.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Release|x64.Build.0 = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Release|x86.ActiveCfg = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.Release|x86.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {79B4932C-3D57-494B-95AF-E5624F9D2F01}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {79B4932C-3D57-494B-95AF-E5624F9D2F01}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Debug|Any CPU.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Debug|Any CPU.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Debug|x64.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Debug|x64.Build.0 = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Debug|x86.ActiveCfg = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Debug|x86.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.MinSizeRel|x64.Build.0 = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.MinSizeRel|x86.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Release|Any CPU.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Release|Any CPU.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Release|x64.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Release|x64.Build.0 = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Release|x86.ActiveCfg = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.Release|x86.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {1FC7922B-489D-42BF-81CD-31A37DD17E5D}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Debug|Any CPU.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Debug|Any CPU.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Debug|x64.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Debug|x64.Build.0 = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.Debug|x86.ActiveCfg = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.Debug|x86.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.MinSizeRel|x64.Build.0 = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.MinSizeRel|x86.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Release|Any CPU.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Release|x64.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.Release|x64.Build.0 = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.Release|x86.ActiveCfg = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.Release|x86.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {AA831686-C4EB-4250-9EC3-D252303B36A2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {AA831686-C4EB-4250-9EC3-D252303B36A2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Debug|Any CPU.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Debug|Any CPU.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Debug|x64.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Debug|x64.Build.0 = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Debug|x86.ActiveCfg = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Debug|x86.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.MinSizeRel|x64.Build.0 = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.MinSizeRel|x86.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Release|Any CPU.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Release|Any CPU.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Release|x64.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Release|x64.Build.0 = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Release|x86.ActiveCfg = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.Release|x86.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {DED9654E-74A5-4BCB-83A4-05D4B78D7833}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Debug|Any CPU.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Debug|x64.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Debug|x64.Build.0 = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.Debug|x86.ActiveCfg = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.Debug|x86.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.MinSizeRel|x64.Build.0 = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.MinSizeRel|x86.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Release|Any CPU.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Release|x64.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.Release|x64.Build.0 = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.Release|x86.ActiveCfg = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.Release|x86.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {2E852476-0B95-4A5B-9C29-53A950D1278F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {2E852476-0B95-4A5B-9C29-53A950D1278F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Debug|Any CPU.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Debug|Any CPU.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Debug|x64.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Debug|x64.Build.0 = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.Debug|x86.ActiveCfg = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.Debug|x86.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.MinSizeRel|x64.Build.0 = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.MinSizeRel|x86.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Release|Any CPU.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Release|Any CPU.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Release|x64.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.Release|x64.Build.0 = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.Release|x86.ActiveCfg = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.Release|x86.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {736BF068-7389-41B9-BF63-D4E49B9BC833}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {736BF068-7389-41B9-BF63-D4E49B9BC833}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Debug|Any CPU.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Debug|Any CPU.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Debug|x64.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Debug|x64.Build.0 = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Debug|x86.ActiveCfg = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Debug|x86.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.MinSizeRel|x64.Build.0 = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.MinSizeRel|x86.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Release|Any CPU.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Release|Any CPU.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Release|x64.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Release|x64.Build.0 = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Release|x86.ActiveCfg = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.Release|x86.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {48408A19-CCC5-4C85-990B-0A9F827BF29A}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {48408A19-CCC5-4C85-990B-0A9F827BF29A}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Debug|Any CPU.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Debug|Any CPU.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Debug|x64.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Debug|x64.Build.0 = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Debug|x86.ActiveCfg = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Debug|x86.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.MinSizeRel|x64.Build.0 = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.MinSizeRel|x86.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Release|Any CPU.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Release|x64.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Release|x64.Build.0 = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Release|x86.ActiveCfg = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.Release|x86.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {8FB83810-5A4C-4097-9A79-8E687E4981CB}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {8FB83810-5A4C-4097-9A79-8E687E4981CB}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Debug|Any CPU.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Debug|Any CPU.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Debug|x64.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Debug|x64.Build.0 = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Debug|x86.ActiveCfg = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Debug|x86.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.MinSizeRel|x64.Build.0 = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.MinSizeRel|x86.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Release|Any CPU.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Release|x64.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Release|x64.Build.0 = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Release|x86.ActiveCfg = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.Release|x86.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {F0CB08B6-2809-4D37-B1DD-A9B7F1B0D95D}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Debug|Any CPU.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Debug|Any CPU.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Debug|x64.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Debug|x64.Build.0 = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.Debug|x86.ActiveCfg = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.Debug|x86.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.MinSizeRel|x64.Build.0 = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.MinSizeRel|x86.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Release|Any CPU.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Release|Any CPU.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Release|x64.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.Release|x64.Build.0 = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.Release|x86.ActiveCfg = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.Release|x86.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {203F0362-DAFC-4679-A01E-7FBC331D8647}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {203F0362-DAFC-4679-A01E-7FBC331D8647}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Debug|Any CPU.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Debug|Any CPU.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Debug|x64.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Debug|x64.Build.0 = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Debug|x86.ActiveCfg = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Debug|x86.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.MinSizeRel|x64.Build.0 = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.MinSizeRel|x86.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Release|Any CPU.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Release|x64.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Release|x64.Build.0 = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Release|x86.ActiveCfg = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.Release|x86.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {F8C66E8A-FC59-40B3-AC0F-58CA22526F76}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Debug|Any CPU.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Debug|Any CPU.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Debug|x64.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Debug|x64.Build.0 = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Debug|x86.ActiveCfg = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Debug|x86.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.MinSizeRel|x64.Build.0 = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.MinSizeRel|x86.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Release|Any CPU.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Release|Any CPU.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Release|x64.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Release|x64.Build.0 = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Release|x86.ActiveCfg = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.Release|x86.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {73ACEB34-D22C-43EA-87BE-EFC0E83D0126}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Debug|Any CPU.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Debug|Any CPU.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Debug|x64.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Debug|x64.Build.0 = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Debug|x86.ActiveCfg = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Debug|x86.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.MinSizeRel|x64.Build.0 = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.MinSizeRel|x86.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Release|Any CPU.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Release|Any CPU.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Release|x64.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Release|x64.Build.0 = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Release|x86.ActiveCfg = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.Release|x86.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {ABB81DAE-0D26-483C-BE3B-0F9ACD812A62}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Debug|Any CPU.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Debug|Any CPU.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Debug|x64.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Debug|x64.Build.0 = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.Debug|x86.ActiveCfg = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.Debug|x86.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.MinSizeRel|x64.Build.0 = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.MinSizeRel|x86.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Release|Any CPU.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Release|Any CPU.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Release|x64.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.Release|x64.Build.0 = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.Release|x86.ActiveCfg = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.Release|x86.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {570950AD-A080-4F32-980C-F50E312910DF}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {570950AD-A080-4F32-980C-F50E312910DF}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Debug|Any CPU.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Debug|Any CPU.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Debug|x64.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Debug|x64.Build.0 = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Debug|x86.ActiveCfg = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Debug|x86.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.MinSizeRel|x64.Build.0 = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.MinSizeRel|x86.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Release|Any CPU.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Release|x64.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Release|x64.Build.0 = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Release|x86.ActiveCfg = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.Release|x86.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {A8E6EFEB-027A-4C4B-A73C-C193A0F00569}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Debug|Any CPU.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Debug|Any CPU.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Debug|x64.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Debug|x64.Build.0 = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.Debug|x86.ActiveCfg = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.Debug|x86.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.MinSizeRel|x64.Build.0 = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.MinSizeRel|x86.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Release|Any CPU.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Release|Any CPU.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Release|x64.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.Release|x64.Build.0 = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.Release|x86.ActiveCfg = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.Release|x86.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {6592A22C-2386-4E83-A4D3-FC08075C723A}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {6592A22C-2386-4E83-A4D3-FC08075C723A}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Debug|Any CPU.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Debug|Any CPU.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Debug|x64.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Debug|x64.Build.0 = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.Debug|x86.ActiveCfg = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.Debug|x86.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.MinSizeRel|x64.Build.0 = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.MinSizeRel|x86.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Release|Any CPU.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Release|Any CPU.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Release|x64.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.Release|x64.Build.0 = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.Release|x86.ActiveCfg = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.Release|x86.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {098D9321-1201-4974-A75E-F58EBCD98ACF}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {098D9321-1201-4974-A75E-F58EBCD98ACF}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Debug|Any CPU.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Debug|Any CPU.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Debug|x64.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Debug|x64.Build.0 = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Debug|x86.ActiveCfg = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Debug|x86.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.MinSizeRel|x64.Build.0 = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.MinSizeRel|x86.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Release|Any CPU.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Release|x64.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Release|x64.Build.0 = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Release|x86.ActiveCfg = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.Release|x86.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {A0670C63-BA7A-4C1B-B9A7-1CA26A7F235C}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Debug|Any CPU.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Debug|x64.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Debug|x64.Build.0 = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Debug|x86.ActiveCfg = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Debug|x86.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.MinSizeRel|x64.Build.0 = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.MinSizeRel|x86.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Release|Any CPU.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Release|x64.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Release|x64.Build.0 = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Release|x86.ActiveCfg = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.Release|x86.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {D82A3246-9831-4024-A9B2-1932EEF3D56F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {D82A3246-9831-4024-A9B2-1932EEF3D56F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Debug|Any CPU.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Debug|Any CPU.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Debug|x64.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Debug|x64.Build.0 = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.Debug|x86.ActiveCfg = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.Debug|x86.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.MinSizeRel|x64.Build.0 = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.MinSizeRel|x86.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Release|Any CPU.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Release|x64.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.Release|x64.Build.0 = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.Release|x86.ActiveCfg = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.Release|x86.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {BE4C655A-DC54-4408-B739-743456D34111}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {BE4C655A-DC54-4408-B739-743456D34111}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Debug|Any CPU.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Debug|Any CPU.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Debug|x64.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Debug|x64.Build.0 = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Debug|x86.ActiveCfg = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Debug|x86.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.MinSizeRel|x64.Build.0 = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.MinSizeRel|x86.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Release|Any CPU.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Release|x64.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Release|x64.Build.0 = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Release|x86.ActiveCfg = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.Release|x86.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {2DFCC95F-75F7-46E1-8F56-256DB4CA98B2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Debug|Any CPU.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Debug|Any CPU.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Debug|x64.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Debug|x64.Build.0 = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Debug|x86.ActiveCfg = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Debug|x86.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.MinSizeRel|x64.Build.0 = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.MinSizeRel|x86.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Release|Any CPU.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Release|Any CPU.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Release|x64.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Release|x64.Build.0 = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Release|x86.ActiveCfg = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.Release|x86.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {30C5EFC3-E6FD-4071-89FA-EBB9B5084C42}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Debug|Any CPU.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Debug|Any CPU.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Debug|x64.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Debug|x64.Build.0 = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Debug|x86.ActiveCfg = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Debug|x86.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.MinSizeRel|x64.Build.0 = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.MinSizeRel|x86.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Release|Any CPU.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Release|x64.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Release|x64.Build.0 = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Release|x86.ActiveCfg = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.Release|x86.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {3E28672F-F4E4-44D5-AEFB-1F425DECC57E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Debug|Any CPU.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Debug|Any CPU.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Debug|x64.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Debug|x64.Build.0 = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.Debug|x86.ActiveCfg = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.Debug|x86.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.MinSizeRel|x64.Build.0 = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.MinSizeRel|x86.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Release|Any CPU.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Release|x64.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.Release|x64.Build.0 = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.Release|x86.ActiveCfg = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.Release|x86.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {A5CA696F-585E-40AB-912C-6316BC330C5E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {A5CA696F-585E-40AB-912C-6316BC330C5E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Debug|Any CPU.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Debug|Any CPU.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Debug|x64.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Debug|x64.Build.0 = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.Debug|x86.ActiveCfg = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.Debug|x86.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.MinSizeRel|x64.Build.0 = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.MinSizeRel|x86.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Release|Any CPU.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Release|Any CPU.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Release|x64.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.Release|x64.Build.0 = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.Release|x86.ActiveCfg = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.Release|x86.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {4EF497BF-D717-4E03-90B1-932C7F51B918}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {4EF497BF-D717-4E03-90B1-932C7F51B918}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Debug|Any CPU.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Debug|Any CPU.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Debug|x64.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Debug|x64.Build.0 = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.Debug|x86.ActiveCfg = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.Debug|x86.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.MinSizeRel|x64.Build.0 = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.MinSizeRel|x86.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Release|Any CPU.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Release|x64.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.Release|x64.Build.0 = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.Release|x86.ActiveCfg = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.Release|x86.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {18B43540-346F-4AFF-8868-A82CF098FAFD}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {18B43540-346F-4AFF-8868-A82CF098FAFD}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Debug|Any CPU.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Debug|x64.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Debug|x64.Build.0 = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.Debug|x86.ActiveCfg = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.Debug|x86.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.MinSizeRel|x64.Build.0 = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.MinSizeRel|x86.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Release|Any CPU.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Release|x64.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.Release|x64.Build.0 = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.Release|x86.ActiveCfg = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.Release|x86.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {C3845C85-1F59-4552-BE52-32F513CE795F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {C3845C85-1F59-4552-BE52-32F513CE795F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Debug|Any CPU.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Debug|Any CPU.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Debug|x64.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Debug|x64.Build.0 = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Debug|x86.ActiveCfg = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Debug|x86.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.MinSizeRel|x64.Build.0 = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.MinSizeRel|x86.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Release|Any CPU.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Release|Any CPU.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Release|x64.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Release|x64.Build.0 = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Release|x86.ActiveCfg = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.Release|x86.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {C6BEBDCE-991D-4611-9CDE-9F3914979868}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {C6BEBDCE-991D-4611-9CDE-9F3914979868}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Debug|Any CPU.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Debug|Any CPU.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Debug|x64.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Debug|x64.Build.0 = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Debug|x86.ActiveCfg = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Debug|x86.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.MinSizeRel|x64.Build.0 = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.MinSizeRel|x86.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Release|Any CPU.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Release|Any CPU.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Release|x64.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Release|x64.Build.0 = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Release|x86.ActiveCfg = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.Release|x86.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {BBB5A4C8-CD2D-4A6A-9159-0FEAF84B745E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Debug|Any CPU.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Debug|Any CPU.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Debug|x64.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Debug|x64.Build.0 = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.Debug|x86.ActiveCfg = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.Debug|x86.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.MinSizeRel|x64.Build.0 = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.MinSizeRel|x86.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Release|Any CPU.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Release|Any CPU.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Release|x64.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.Release|x64.Build.0 = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.Release|x86.ActiveCfg = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.Release|x86.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {726D2CB9-80E5-4496-9C86-910AC452C45E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {726D2CB9-80E5-4496-9C86-910AC452C45E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Debug|Any CPU.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Debug|Any CPU.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Debug|x64.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Debug|x64.Build.0 = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Debug|x86.ActiveCfg = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Debug|x86.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.MinSizeRel|x64.Build.0 = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.MinSizeRel|x86.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Release|Any CPU.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Release|x64.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Release|x64.Build.0 = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Release|x86.ActiveCfg = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.Release|x86.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {EF745C56-0350-4C42-AA22-86D592E1D8D5}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {EF745C56-0350-4C42-AA22-86D592E1D8D5}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Debug|Any CPU.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Debug|Any CPU.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Debug|x64.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Debug|x64.Build.0 = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.Debug|x86.ActiveCfg = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.Debug|x86.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.MinSizeRel|x64.Build.0 = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.MinSizeRel|x86.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Release|Any CPU.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Release|Any CPU.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Release|x64.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.Release|x64.Build.0 = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.Release|x86.ActiveCfg = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.Release|x86.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {87063BA1-454D-4433-ADF9-89C667275D62}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {87063BA1-454D-4433-ADF9-89C667275D62}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Debug|Any CPU.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Debug|x64.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Debug|x64.Build.0 = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Debug|x86.ActiveCfg = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Debug|x86.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.MinSizeRel|x64.Build.0 = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.MinSizeRel|x86.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Release|Any CPU.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Release|Any CPU.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Release|x64.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Release|x64.Build.0 = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Release|x86.ActiveCfg = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.Release|x86.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {07DD4AE1-5CF6-4EDB-AB29-31EB532F950F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Debug|Any CPU.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Debug|Any CPU.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Debug|x64.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Debug|x64.Build.0 = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.Debug|x86.ActiveCfg = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.Debug|x86.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.MinSizeRel|x64.Build.0 = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.MinSizeRel|x86.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Release|Any CPU.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Release|Any CPU.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Release|x64.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.Release|x64.Build.0 = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.Release|x86.ActiveCfg = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.Release|x86.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {7256EEBC-814D-42CF-821B-58CB61F3E070}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {7256EEBC-814D-42CF-821B-58CB61F3E070}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Debug|Any CPU.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Debug|Any CPU.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Debug|x64.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Debug|x64.Build.0 = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.Debug|x86.ActiveCfg = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.Debug|x86.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.MinSizeRel|x64.Build.0 = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.MinSizeRel|x86.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Release|Any CPU.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Release|Any CPU.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Release|x64.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.Release|x64.Build.0 = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.Release|x86.ActiveCfg = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.Release|x86.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {448F6884-B613-440E-82A6-07E6BB54794C}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {448F6884-B613-440E-82A6-07E6BB54794C}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Debug|Any CPU.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Debug|Any CPU.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Debug|x64.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Debug|x64.Build.0 = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Debug|x86.ActiveCfg = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Debug|x86.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.MinSizeRel|x64.Build.0 = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.MinSizeRel|x86.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Release|Any CPU.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Release|Any CPU.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Release|x64.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Release|x64.Build.0 = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Release|x86.ActiveCfg = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.Release|x86.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {526D7B7A-0485-48A3-A43F-F03A0DBC9897}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Debug|Any CPU.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Debug|Any CPU.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Debug|x64.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Debug|x64.Build.0 = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Debug|x86.ActiveCfg = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Debug|x86.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.MinSizeRel|x64.Build.0 = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.MinSizeRel|x86.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Release|Any CPU.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Release|x64.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Release|x64.Build.0 = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Release|x86.ActiveCfg = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.Release|x86.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {C8D98389-E3CF-4BEF-A9EF-D78672E51866}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Debug|Any CPU.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Debug|Any CPU.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Debug|x64.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Debug|x64.Build.0 = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.Debug|x86.ActiveCfg = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.Debug|x86.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.MinSizeRel|x64.Build.0 = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.MinSizeRel|x86.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Release|Any CPU.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Release|Any CPU.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Release|x64.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.Release|x64.Build.0 = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.Release|x86.ActiveCfg = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.Release|x86.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {131C05D4-D685-478F-A3FB-F5600EF93533}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {131C05D4-D685-478F-A3FB-F5600EF93533}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Debug|Any CPU.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Debug|Any CPU.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Debug|x64.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Debug|x64.Build.0 = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Debug|x86.ActiveCfg = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Debug|x86.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.MinSizeRel|x64.Build.0 = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.MinSizeRel|x86.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Release|Any CPU.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Release|Any CPU.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Release|x64.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Release|x64.Build.0 = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Release|x86.ActiveCfg = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.Release|x86.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {1BFF54F9-4E35-49DB-893C-AF2047722FC6}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Debug|Any CPU.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Debug|Any CPU.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Debug|x64.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Debug|x64.Build.0 = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.Debug|x86.ActiveCfg = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.Debug|x86.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.MinSizeRel|x64.Build.0 = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.MinSizeRel|x86.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Release|Any CPU.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Release|x64.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.Release|x64.Build.0 = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.Release|x86.ActiveCfg = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.Release|x86.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {7F115EF9-1827-4175-B50E-F214A490093E}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {7F115EF9-1827-4175-B50E-F214A490093E}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Debug|Any CPU.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Debug|Any CPU.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Debug|x64.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Debug|x64.Build.0 = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.Debug|x86.ActiveCfg = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.Debug|x86.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.MinSizeRel|x64.Build.0 = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.MinSizeRel|x86.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Release|Any CPU.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Release|Any CPU.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Release|x64.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.Release|x64.Build.0 = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.Release|x86.ActiveCfg = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.Release|x86.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {85296DB1-1999-4137-B6EE-CD417D64699C}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {85296DB1-1999-4137-B6EE-CD417D64699C}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Debug|Any CPU.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Debug|Any CPU.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Debug|x64.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Debug|x64.Build.0 = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Debug|x86.ActiveCfg = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Debug|x86.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.MinSizeRel|x64.Build.0 = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.MinSizeRel|x86.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Release|Any CPU.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Release|x64.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Release|x64.Build.0 = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Release|x86.ActiveCfg = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.Release|x86.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {FC9A1FF2-86AC-4DBE-B045-1A8EE6E9B3F3}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Debug|Any CPU.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Debug|Any CPU.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Debug|x64.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Debug|x64.Build.0 = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.Debug|x86.ActiveCfg = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.Debug|x86.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.MinSizeRel|x64.Build.0 = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.MinSizeRel|x86.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Release|Any CPU.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Release|Any CPU.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Release|x64.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.Release|x64.Build.0 = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.Release|x86.ActiveCfg = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.Release|x86.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {F228580D-9373-4A60-AB88-76DF58D11580}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {F228580D-9373-4A60-AB88-76DF58D11580}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Debug|Any CPU.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Debug|Any CPU.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Debug|x64.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Debug|x64.Build.0 = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Debug|x86.ActiveCfg = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Debug|x86.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.MinSizeRel|x64.Build.0 = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.MinSizeRel|x86.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Release|Any CPU.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Release|x64.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Release|x64.Build.0 = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Release|x86.ActiveCfg = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.Release|x86.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {53F4CC00-72B3-4049-8888-FC05F622A9AC}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {53F4CC00-72B3-4049-8888-FC05F622A9AC}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Debug|Any CPU.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Debug|Any CPU.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Debug|x64.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Debug|x64.Build.0 = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Debug|x86.ActiveCfg = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Debug|x86.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.MinSizeRel|x64.Build.0 = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.MinSizeRel|x86.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Release|Any CPU.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Release|Any CPU.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Release|x64.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Release|x64.Build.0 = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Release|x86.ActiveCfg = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.Release|x86.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {48E260F4-6F3F-4387-B61F-D15BABD06D9A}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Debug|Any CPU.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Debug|Any CPU.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Debug|x64.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Debug|x64.Build.0 = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Debug|x86.ActiveCfg = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Debug|x86.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.MinSizeRel|x64.Build.0 = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.MinSizeRel|x86.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Release|Any CPU.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Release|Any CPU.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Release|x64.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Release|x64.Build.0 = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Release|x86.ActiveCfg = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.Release|x86.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {23EE9BBB-3B33-4CF2-8D1A-29A8DB12E878}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Debug|Any CPU.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Debug|Any CPU.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Debug|x64.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Debug|x64.Build.0 = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Debug|x86.ActiveCfg = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Debug|x86.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.MinSizeRel|x64.Build.0 = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.MinSizeRel|x86.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Release|Any CPU.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Release|Any CPU.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Release|x64.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Release|x64.Build.0 = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Release|x86.ActiveCfg = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.Release|x86.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {F5E27BA5-063B-4770-A6E8-87252E9AB22C}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Debug|Any CPU.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Debug|Any CPU.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Debug|x64.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Debug|x64.Build.0 = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.Debug|x86.ActiveCfg = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.Debug|x86.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.MinSizeRel|x64.Build.0 = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.MinSizeRel|x86.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Release|Any CPU.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Release|Any CPU.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Release|x64.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.Release|x64.Build.0 = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.Release|x86.ActiveCfg = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.Release|x86.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {90C8861D-1C4C-4D2A-9715-B217760A1655}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {90C8861D-1C4C-4D2A-9715-B217760A1655}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Debug|Any CPU.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Debug|Any CPU.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Debug|x64.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Debug|x64.Build.0 = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.Debug|x86.ActiveCfg = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.Debug|x86.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.MinSizeRel|x64.Build.0 = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.MinSizeRel|x86.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Release|Any CPU.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Release|Any CPU.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Release|x64.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.Release|x64.Build.0 = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.Release|x86.ActiveCfg = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.Release|x86.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {AA744891-5209-4335-8457-37EC347DF833}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {AA744891-5209-4335-8457-37EC347DF833}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Debug|Any CPU.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Debug|Any CPU.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Debug|x64.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Debug|x64.Build.0 = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Debug|x86.ActiveCfg = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Debug|x86.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.MinSizeRel|x64.Build.0 = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.MinSizeRel|x86.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Release|Any CPU.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Release|Any CPU.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Release|x64.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Release|x64.Build.0 = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Release|x86.ActiveCfg = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.Release|x86.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {DA3595A8-35DE-42B9-97A4-4A2461BAD554}.RelWithDebInfo|x86.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Debug|Any CPU.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Debug|Any CPU.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Debug|x64.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Debug|x64.Build.0 = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Debug|x86.ActiveCfg = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Debug|x86.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.MinSizeRel|Any CPU.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.MinSizeRel|Any CPU.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.MinSizeRel|x64.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.MinSizeRel|x64.Build.0 = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.MinSizeRel|x86.ActiveCfg = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.MinSizeRel|x86.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Release|Any CPU.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Release|x64.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Release|x64.Build.0 = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Release|x86.ActiveCfg = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.Release|x86.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.RelWithDebInfo|x64.Build.0 = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU + {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853}.RelWithDebInfo|x86.Build.0 = Release|Any CPU + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Debug|Any CPU.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Debug|x64.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Debug|x86.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Debug|x86.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.MinSizeRel|Any CPU.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.MinSizeRel|Any CPU.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.MinSizeRel|x64.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.MinSizeRel|x64.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.MinSizeRel|x86.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.MinSizeRel|x86.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Release|Any CPU.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Release|Any CPU.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Release|x64.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Release|x64.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Release|x86.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.Release|x86.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.RelWithDebInfo|Any CPU.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.RelWithDebInfo|x64.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.RelWithDebInfo|x64.Build.0 = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.RelWithDebInfo|x86.ActiveCfg = Debug|x86 + {C98C7C2E-2C29-4A40-958C-60561ED77791}.RelWithDebInfo|x86.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Debug|Any CPU.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Debug|x64.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Debug|x86.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Debug|x86.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.MinSizeRel|Any CPU.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.MinSizeRel|Any CPU.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.MinSizeRel|x64.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.MinSizeRel|x64.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.MinSizeRel|x86.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.MinSizeRel|x86.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Release|Any CPU.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Release|Any CPU.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Release|x64.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Release|x64.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Release|x86.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.Release|x86.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.RelWithDebInfo|Any CPU.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.RelWithDebInfo|x64.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.RelWithDebInfo|x64.Build.0 = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.RelWithDebInfo|x86.ActiveCfg = Debug|x86 + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A}.RelWithDebInfo|x86.Build.0 = Debug|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1134,5 +1618,7 @@ Global {AA744891-5209-4335-8457-37EC347DF833} = {88278B81-7649-45DC-8A6A-D3A645C5AFC3} {DA3595A8-35DE-42B9-97A4-4A2461BAD554} = {88278B81-7649-45DC-8A6A-D3A645C5AFC3} {F2D1A7DA-B3EB-4CA7-BAA9-A18CEC398853} = {88278B81-7649-45DC-8A6A-D3A645C5AFC3} + {C98C7C2E-2C29-4A40-958C-60561ED77791} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F} + {56F1E090-B80F-4BDF-8991-4B0F9B5B8C9A} = {17735A9D-BFD9-4585-A7CB-3208CA6EA8A7} EndGlobalSection EndGlobal diff --git a/THIRD-PARTY-NOTICES b/THIRD-PARTY-NOTICES index d6df8c431..6c674f057 100644 --- a/THIRD-PARTY-NOTICES +++ b/THIRD-PARTY-NOTICES @@ -45,4 +45,47 @@ This document and the information contained herein is provided on an TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF -MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. \ No newline at end of file +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +License notice for MonoDevelop +------------------------------ + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/TestAssets/TestProjects/TestAppWithSln/Program.cs b/TestAssets/TestProjects/TestAppWithSln/Program.cs new file mode 100644 index 000000000..51233cffa --- /dev/null +++ b/TestAssets/TestProjects/TestAppWithSln/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace ConsoleApplication +{ + public class Program + { + public static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.sln b/TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.sln new file mode 100644 index 000000000..e6b587e50 --- /dev/null +++ b/TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "TestAppWithSln", "TestAppWithSln.xproj", "{0138CB8F-4AA9-4029-A21E-C07C30F425BA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.xproj b/TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.xproj new file mode 100644 index 000000000..53f0c8b7a --- /dev/null +++ b/TestAssets/TestProjects/TestAppWithSln/TestAppWithSln.xproj @@ -0,0 +1,18 @@ + + + + 14.0.23107 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 0138cb8f-4aa9-4029-a21e-c07c30f425ba + TestAppWithContents + ..\..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\..\artifacts\ + + + 2.0 + + + \ No newline at end of file diff --git a/TestAssets/TestProjects/TestAppWithSln/project.json b/TestAssets/TestProjects/TestAppWithSln/project.json new file mode 100644 index 000000000..5f8329deb --- /dev/null +++ b/TestAssets/TestProjects/TestAppWithSln/project.json @@ -0,0 +1,25 @@ +{ + "version": "1.0.0-*", + "buildOptions": { + "emitEntryPoint": true + }, + "dependencies": { + "Microsoft.NETCore.App": "1.0.1" + }, + "frameworks": { + "netcoreapp1.0": {} + }, + "runtimes": { + "win7-x64": {}, + "win7-x86": {}, + "osx.10.10-x64": {}, + "osx.10.11-x64": {}, + "ubuntu.14.04-x64": {}, + "ubuntu.16.04-x64": {}, + "centos.7-x64": {}, + "rhel.7.2-x64": {}, + "debian.8-x64": {}, + "fedora.23-x64": {}, + "opensuse.13.2-x64": {} + } +} \ No newline at end of file diff --git a/src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FilePath.cs b/src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FilePath.cs new file mode 100644 index 000000000..e05063c74 --- /dev/null +++ b/src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FilePath.cs @@ -0,0 +1,400 @@ +// +// FilePath.cs +// +// Author: +// Lluis Sanchez Gual +// +// Copyright (c) 2011 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using System.Runtime.InteropServices; +using System.Linq; + +namespace Microsoft.DotNet.Cli.Sln.Internal.FileManipulation +{ + public struct FilePath : IComparable, IComparable, IEquatable + { + public static readonly StringComparer PathComparer = (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; + public static readonly StringComparison PathComparison = (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + + readonly string fileName; + + public static readonly FilePath Null = new FilePath(null); + public static readonly FilePath Empty = new FilePath(string.Empty); + + public FilePath(string name) + { + if (name != null && name.Length > 6 && name[0] == 'f' && name.StartsWith("file://", StringComparison.Ordinal)) + name = new Uri(name).LocalPath; + + fileName = name; + } + + public bool IsNull + { + get { return fileName == null; } + } + + public bool IsNullOrEmpty + { + get { return string.IsNullOrEmpty(fileName); } + } + + public bool IsNotNull + { + get { return fileName != null; } + } + + public bool IsEmpty + { + get { return fileName != null && fileName.Length == 0; } + } + + const int PATHMAX = 4096 + 1; + + static readonly char[] invalidPathChars = Path.GetInvalidPathChars(); + public static char[] GetInvalidPathChars() + { + return (char[])invalidPathChars.Clone(); + } + + static readonly char[] invalidFileNameChars = Path.GetInvalidFileNameChars(); + public static char[] GetInvalidFileNameChars() + { + return (char[])invalidFileNameChars.Clone(); + } + + public FilePath FullPath + { + get + { + return new FilePath(!string.IsNullOrEmpty(fileName) ? Path.GetFullPath(fileName) : ""); + } + } + + public bool IsDirectory + { + get + { + return Directory.Exists(FullPath); + } + } + + /// + /// Returns a path in standard form, which can be used to be compared + /// for equality with other canonical paths. It is similar to FullPath, + /// but unlike FullPath, the directory "/a/b" is considered equal to "/a/b/" + /// + public FilePath CanonicalPath + { + get + { + if (fileName == null) + return FilePath.Null; + if (fileName.Length == 0) + return FilePath.Empty; + string fp = Path.GetFullPath(fileName); + if (fp.Length > 0) + { + if (fp[fp.Length - 1] == Path.DirectorySeparatorChar) + return fp.TrimEnd(Path.DirectorySeparatorChar); + if (fp[fp.Length - 1] == Path.AltDirectorySeparatorChar) + return fp.TrimEnd(Path.AltDirectorySeparatorChar); + } + return fp; + } + } + + public string FileName + { + get + { + return Path.GetFileName(fileName); + } + } + + public string Extension + { + get + { + return Path.GetExtension(fileName); + } + } + + public bool HasExtension(string extension) + { + return fileName.Length > extension.Length + && fileName.EndsWith(extension, StringComparison.OrdinalIgnoreCase) + && fileName[fileName.Length - extension.Length - 1] != Path.PathSeparator; + } + + public string FileNameWithoutExtension + { + get + { + return Path.GetFileNameWithoutExtension(fileName); + } + } + + public FilePath ParentDirectory + { + get + { + return new FilePath(Path.GetDirectoryName(fileName)); + } + } + + public bool IsAbsolute + { + get { return Path.IsPathRooted(fileName); } + } + + public bool IsChildPathOf(FilePath basePath) + { + if (basePath.fileName[basePath.fileName.Length - 1] != Path.DirectorySeparatorChar) + return fileName.StartsWith(basePath.fileName + Path.DirectorySeparatorChar, PathComparison); + else + return fileName.StartsWith(basePath.fileName, PathComparison); + } + + public FilePath ChangeExtension(string ext) + { + return Path.ChangeExtension(fileName, ext); + } + + /// + /// Returns a file path with the name changed to the provided name, but keeping the extension + /// + /// The new file path + /// New file name + public FilePath ChangeName(string newName) + { + return ParentDirectory.Combine(newName) + Extension; + } + + public FilePath Combine(params FilePath[] paths) + { + string path = fileName; + foreach (FilePath p in paths) + path = Path.Combine(path, p.fileName); + return new FilePath(path); + } + + public FilePath Combine(params string[] paths) + { + return new FilePath(Path.Combine(fileName, Path.Combine(paths))); + } + + public Task DeleteAsync() + { + return Task.Run((System.Action)Delete); + } + + public void Delete() + { + // Ensure that this file/directory and all children are writable + MakeWritable(true); + + // Also ensure the directory containing this file/directory is writable, + // otherwise we will not be able to delete it + ParentDirectory.MakeWritable(false); + + if (Directory.Exists(this)) + { + Directory.Delete(this, true); + } + else if (File.Exists(this)) + { + File.Delete(this); + } + } + + public void MakeWritable() + { + MakeWritable(false); + } + + public void MakeWritable(bool recurse) + { + if (Directory.Exists(this)) + { + try + { + var info = new DirectoryInfo(this); + info.Attributes &= ~FileAttributes.ReadOnly; + } + catch + { + + } + + if (recurse) + { + foreach (var sub in Directory.GetFileSystemEntries(this)) + { + ((FilePath)sub).MakeWritable(recurse); + } + } + } + else if (File.Exists(this)) + { + try + { + // Try/catch is to work around a mono bug where dangling symlinks + // blow up when you call SetFileAttributes. Just ignore this case + // until mono 2.10.7/8 is released which fixes it. + var info = new FileInfo(this); + info.Attributes &= ~FileAttributes.ReadOnly; + } + catch + { + + } + } + } + + /// + /// Builds a path by combining all provided path sections + /// + public static FilePath Build(params string[] paths) + { + return Empty.Combine(paths); + } + + public static FilePath GetCommonRootPath(IEnumerable paths) + { + FilePath root = FilePath.Null; + foreach (FilePath p in paths) + { + if (root.IsNull) + root = p; + else if (root == p) + continue; + else if (root.IsChildPathOf(p)) + root = p; + else + { + while (!root.IsNullOrEmpty && !p.IsChildPathOf(root)) + root = root.ParentDirectory; + } + } + return root; + } + + public FilePath ToAbsolute(FilePath basePath) + { + if (IsAbsolute) + return FullPath; + else + return Combine(basePath, this).FullPath; + } + + public static implicit operator FilePath(string name) + { + return new FilePath(name); + } + + public static implicit operator string(FilePath filePath) + { + return filePath.fileName; + } + + public static bool operator ==(FilePath name1, FilePath name2) + { + return PathComparer.Equals(name1.fileName, name2.fileName); + } + + public static bool operator !=(FilePath name1, FilePath name2) + { + return !(name1 == name2); + } + + public override bool Equals(object obj) + { + if (!(obj is FilePath)) + return false; + + FilePath fn = (FilePath)obj; + return this == fn; + } + + public override int GetHashCode() + { + if (fileName == null) + return 0; + return PathComparer.GetHashCode(fileName); + } + + public override string ToString() + { + return fileName; + } + + public int CompareTo(FilePath filePath) + { + return PathComparer.Compare(fileName, filePath.fileName); + } + + int IComparable.CompareTo(object obj) + { + if (!(obj is FilePath)) + return -1; + return CompareTo((FilePath)obj); + } + + #region IEquatable Members + + bool IEquatable.Equals(FilePath other) + { + return this == other; + } + + #endregion + } + + public static class FilePathUtil + { + public static string[] ToStringArray(this FilePath[] paths) + { + string[] array = new string[paths.Length]; + for (int n = 0; n < paths.Length; n++) + array[n] = paths[n].ToString(); + return array; + } + + public static FilePath[] ToFilePathArray(this string[] paths) + { + var array = new FilePath[paths.Length]; + for (int n = 0; n < paths.Length; n++) + array[n] = paths[n]; + return array; + } + + public static IEnumerable ToPathStrings(this IEnumerable paths) + { + foreach (FilePath p in paths) + yield return p.ToString(); + } + } +} diff --git a/src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FileUtil.cs b/src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FileUtil.cs new file mode 100644 index 000000000..34f5405af --- /dev/null +++ b/src/Microsoft.DotNet.Cli.Sln.Internal/FileManipulation/FileUtil.cs @@ -0,0 +1,147 @@ +// +// FileUtil.cs +// +// Author: +// Lluis Sanchez Gual +// +// Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using System.IO; +using System.Text; + +namespace Microsoft.DotNet.Cli.Sln.Internal.FileManipulation +{ + static class FileUtil + { + public static TextFormatInfo GetTextFormatInfo(string file) + { + var info = new TextFormatInfo(); + + string newLine = null; + Encoding encoding; + + using (FileStream fs = File.OpenRead(file)) + { + byte[] buf = new byte[1024]; + int nread, i; + + if ((nread = fs.Read(buf, 0, buf.Length)) <= 0) + return info; + + if (TryParse(buf, nread, out encoding)) + i = encoding.GetPreamble().Length; + else + i = 0; + + do + { + // Read to the first newline to figure out which line endings this file is using + while (i < nread) + { + if (buf[i] == '\r') + { + newLine = "\r\n"; + break; + } + else if (buf[i] == '\n') + { + newLine = "\n"; + break; + } + + i++; + } + + if (newLine == null) + { + if ((nread = fs.Read(buf, 0, buf.Length)) <= 0) + { + newLine = "\n"; + break; + } + + i = 0; + } + } while (newLine == null); + + // Check for a blank line at the end + info.EndsWithEmptyLine = fs.Seek(-1, SeekOrigin.End) > 0 && fs.ReadByte() == (int)'\n'; + info.NewLine = newLine; + info.Encoding = encoding; + return info; + } + } + + private static bool TryParse(byte[] buffer, int available, out Encoding encoding) + { + if (buffer.Length >= 2) + { + for (int i = 0; i < table.Length; i++) + { + bool matched = true; + + if (available < table[i].GetPreamble().Length) + continue; + + for (int j = 0; j < table[i].GetPreamble().Length; j++) + { + if (buffer[j] != table[i].GetPreamble()[j]) + { + matched = false; + break; + } + } + + if (matched) + { + encoding = table[i]; + return true; + } + } + } + + encoding = null; + + return false; + } + + private static readonly Encoding[] table = new[] { + Encoding.UTF7, + Encoding.UTF8, + Encoding.UTF32, + Encoding.ASCII, + }; + } + + class TextFormatInfo + { + public TextFormatInfo() + { + NewLine = Environment.NewLine; + } + + public string NewLine { get; set; } + public Encoding Encoding { get; set; } + public bool EndsWithEmptyLine { get; set; } + } +} + diff --git a/src/Microsoft.DotNet.Cli.Sln.Internal/Microsoft.DotNet.Cli.Sln.Internal.csproj b/src/Microsoft.DotNet.Cli.Sln.Internal/Microsoft.DotNet.Cli.Sln.Internal.csproj new file mode 100644 index 000000000..2c05e1e42 --- /dev/null +++ b/src/Microsoft.DotNet.Cli.Sln.Internal/Microsoft.DotNet.Cli.Sln.Internal.csproj @@ -0,0 +1,36 @@ + + + + + SLN file reader/writer + 1.0.0-preview4 + netstandard1.6 + portable + Microsoft.DotNet.Cli.Sln.Internal + ../../tools/Key.snk + true + true + + + + + + + + + 1.0.0-alpha-20161104-2 + All + + + 4.0.1 + + + 4.1.0 + + + 1.6.0 + + + + + diff --git a/src/Microsoft.DotNet.Cli.Sln.Internal/SlnFile.cs b/src/Microsoft.DotNet.Cli.Sln.Internal/SlnFile.cs new file mode 100644 index 000000000..96fe779df --- /dev/null +++ b/src/Microsoft.DotNet.Cli.Sln.Internal/SlnFile.cs @@ -0,0 +1,1071 @@ +// +// SlnFile.cs +// +// Author: +// Lluis Sanchez Gual +// +// Copyright (c) 2016 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Collections.ObjectModel; +using System.Collections.Specialized; +using System.IO; +using System.Collections; +using System.Text.RegularExpressions; +using System.Globalization; +using System.Reflection; +using Microsoft.DotNet.Cli.Sln.Internal.FileManipulation; + +namespace Microsoft.DotNet.Cli.Sln.Internal +{ + public class SlnFile + { + SlnProjectCollection projects = new SlnProjectCollection(); + SlnSectionCollection sections = new SlnSectionCollection(); + SlnPropertySet metadata = new SlnPropertySet(true); + int prefixBlankLines = 1; + TextFormatInfo format = new TextFormatInfo { NewLine = "\r\n" }; + + public string FormatVersion { get; set; } + public string ProductDescription { get; set; } + + public string VisualStudioVersion + { + get { return metadata.GetValue("VisualStudioVersion"); } + set { metadata.SetValue("VisualStudioVersion", value); } + } + + public string MinimumVisualStudioVersion + { + get { return metadata.GetValue("MinimumVisualStudioVersion"); } + set { metadata.SetValue("MinimumVisualStudioVersion", value); } + } + + public SlnFile() + { + projects.ParentFile = this; + sections.ParentFile = this; + } + + /// + /// Gets the sln format version of the provided solution file + /// + /// The file version. + /// File. + public static string GetFileVersion(string file) + { + string strVersion; + using (var reader = new StreamReader(new FileStream(file, FileMode.Open))) + { + var strInput = reader.ReadLine(); + if (strInput == null) + return null; + + var match = slnVersionRegex.Match(strInput); + if (!match.Success) + { + strInput = reader.ReadLine(); + if (strInput == null) + return null; + match = slnVersionRegex.Match(strInput); + if (!match.Success) + return null; + } + + strVersion = match.Groups[1].Value; + return strVersion; + } + } + + static Regex slnVersionRegex = new Regex(@"Microsoft Visual Studio Solution File, Format Version (\d?\d.\d\d)"); + + /// + /// The directory to be used as base for converting absolute paths to relative + /// + public FilePath BaseDirectory + { + get { return FileName.ParentDirectory; } + } + + /// + /// Gets the solution configurations section. + /// + /// The solution configurations section. + public SlnPropertySet SolutionConfigurationsSection + { + get { return sections.GetOrCreateSection("SolutionConfigurationPlatforms", SlnSectionType.PreProcess).Properties; } + } + + /// + /// Gets the project configurations section. + /// + /// The project configurations section. + public SlnPropertySetCollection ProjectConfigurationsSection + { + get { return sections.GetOrCreateSection("ProjectConfigurationPlatforms", SlnSectionType.PostProcess).NestedPropertySets; } + } + + public SlnSectionCollection Sections + { + get { return sections; } + } + + public SlnProjectCollection Projects + { + get { return projects; } + } + + public FilePath FileName { get; set; } + + public void Read(string file) + { + FileName = file; + format = FileUtil.GetTextFormatInfo(file); + + using (var sr = new StreamReader(new FileStream(file, FileMode.Open))) + Read(sr); + } + + public void Read(TextReader reader) + { + string line; + int curLineNum = 0; + bool globalFound = false; + bool productRead = false; + + while ((line = reader.ReadLine()) != null) + { + curLineNum++; + line = line.Trim(); + if (line.StartsWith("Microsoft Visual Studio Solution File", StringComparison.Ordinal)) + { + int i = line.LastIndexOf(' '); + if (i == -1) + throw new InvalidSolutionFormatException(curLineNum); + FormatVersion = line.Substring(i + 1); + prefixBlankLines = curLineNum - 1; + } + if (line.StartsWith("# ", StringComparison.Ordinal)) + { + if (!productRead) + { + productRead = true; + ProductDescription = line.Substring(2); + } + } + else if (line.StartsWith("Project", StringComparison.Ordinal)) + { + SlnProject p = new SlnProject(); + p.Read(reader, line, ref curLineNum); + projects.Add(p); + } + else if (line == "Global") + { + if (globalFound) + throw new InvalidSolutionFormatException(curLineNum, "Global section specified more than once"); + globalFound = true; + while ((line = reader.ReadLine()) != null) + { + curLineNum++; + line = line.Trim(); + if (line == "EndGlobal") + { + break; + } + else if (line.StartsWith("GlobalSection", StringComparison.Ordinal)) + { + var sec = new SlnSection(); + sec.Read(reader, line, ref curLineNum); + sections.Add(sec); + } + else // Ignore text that's out of place + continue; + } + if (line == null) + throw new InvalidSolutionFormatException(curLineNum, "Global section not closed"); + } + else if (line.IndexOf('=') != -1) + { + metadata.ReadLine(line, curLineNum); + } + } + if (FormatVersion == null) + throw new InvalidSolutionFormatException(curLineNum, "File header is missing"); + } + + public void Write(string file) + { + FileName = file; + var sw = new StringWriter(); + Write(sw); + File.WriteAllText(file, sw.ToString()); + } + + public void Write(TextWriter writer) + { + writer.NewLine = format.NewLine; + for (int n = 0; n < prefixBlankLines; n++) + writer.WriteLine(); + writer.WriteLine("Microsoft Visual Studio Solution File, Format Version " + FormatVersion); + writer.WriteLine("# " + ProductDescription); + + metadata.Write(writer); + + foreach (var p in projects) + p.Write(writer); + + writer.WriteLine("Global"); + foreach (SlnSection s in sections) + s.Write(writer, "GlobalSection"); + writer.WriteLine("EndGlobal"); + } + } + + public class SlnProject + { + SlnSectionCollection sections = new SlnSectionCollection(); + + SlnFile parentFile; + + public SlnFile ParentFile + { + get + { + return parentFile; + } + internal set + { + parentFile = value; + sections.ParentFile = parentFile; + } + } + + public string Id { get; set; } + public string TypeGuid { get; set; } + public string Name { get; set; } + public string FilePath { get; set; } + public int Line { get; private set; } + internal bool Processed { get; set; } + + public SlnSectionCollection Sections + { + get { return sections; } + } + + internal void Read(TextReader reader, string line, ref int curLineNum) + { + Line = curLineNum; + + int n = 0; + FindNext(curLineNum, line, ref n, '('); + n++; + FindNext(curLineNum, line, ref n, '"'); + int n2 = n + 1; + FindNext(curLineNum, line, ref n2, '"'); + TypeGuid = line.Substring(n + 1, n2 - n - 1); + + n = n2 + 1; + FindNext(curLineNum, line, ref n, ')'); + FindNext(curLineNum, line, ref n, '='); + + FindNext(curLineNum, line, ref n, '"'); + n2 = n + 1; + FindNext(curLineNum, line, ref n2, '"'); + Name = line.Substring(n + 1, n2 - n - 1); + + n = n2 + 1; + FindNext(curLineNum, line, ref n, ','); + FindNext(curLineNum, line, ref n, '"'); + n2 = n + 1; + FindNext(curLineNum, line, ref n2, '"'); + FilePath = line.Substring(n + 1, n2 - n - 1); + + n = n2 + 1; + FindNext(curLineNum, line, ref n, ','); + FindNext(curLineNum, line, ref n, '"'); + n2 = n + 1; + FindNext(curLineNum, line, ref n2, '"'); + Id = line.Substring(n + 1, n2 - n - 1); + + while ((line = reader.ReadLine()) != null) + { + curLineNum++; + line = line.Trim(); + if (line == "EndProject") + { + return; + } + if (line.StartsWith("ProjectSection", StringComparison.Ordinal)) + { + if (sections == null) + sections = new SlnSectionCollection(); + var sec = new SlnSection(); + sections.Add(sec); + sec.Read(reader, line, ref curLineNum); + } + } + + throw new InvalidSolutionFormatException(curLineNum, "Project section not closed"); + } + + void FindNext(int ln, string line, ref int i, char c) + { + i = line.IndexOf(c, i); + if (i == -1) + throw new InvalidSolutionFormatException(ln); + } + + public void Write(TextWriter writer) + { + writer.Write("Project(\""); + writer.Write(TypeGuid); + writer.Write("\") = \""); + writer.Write(Name); + writer.Write("\", \""); + writer.Write(FilePath); + writer.Write("\", \""); + writer.Write(Id); + writer.WriteLine("\""); + if (sections != null) + { + foreach (SlnSection s in sections) + s.Write(writer, "ProjectSection"); + } + writer.WriteLine("EndProject"); + } + } + + public class SlnSection + { + SlnPropertySetCollection nestedPropertySets; + SlnPropertySet properties; + List sectionLines; + int baseIndex; + + public string Id { get; set; } + public int Line { get; private set; } + + internal bool Processed { get; set; } + + public SlnFile ParentFile { get; internal set; } + + public bool IsEmpty + { + get + { + return (properties == null || properties.Count == 0) && (nestedPropertySets == null || nestedPropertySets.All(t => t.IsEmpty)) && (sectionLines == null || sectionLines.Count == 0); + } + } + + /// + /// If true, this section won't be written to the file if it is empty + /// + /// true if skip if empty; otherwise, false. + public bool SkipIfEmpty { get; set; } + + public void Clear() + { + properties = null; + nestedPropertySets = null; + sectionLines = null; + } + + public SlnPropertySet Properties + { + get + { + if (properties == null) + { + properties = new SlnPropertySet(); + properties.ParentSection = this; + if (sectionLines != null) + { + foreach (var line in sectionLines) + properties.ReadLine(line, Line); + sectionLines = null; + } + } + return properties; + } + } + + public SlnPropertySetCollection NestedPropertySets + { + get + { + if (nestedPropertySets == null) + { + nestedPropertySets = new SlnPropertySetCollection(this); + if (sectionLines != null) + LoadPropertySets(); + } + return nestedPropertySets; + } + } + + public void SetContent(IEnumerable> lines) + { + sectionLines = new List(lines.Select(p => p.Key + " = " + p.Value)); + properties = null; + nestedPropertySets = null; + } + + public IEnumerable> GetContent() + { + if (sectionLines != null) + return sectionLines.Select(li => + { + int i = li.IndexOf('='); + if (i != -1) + return new KeyValuePair(li.Substring(0, i).Trim(), li.Substring(i + 1).Trim()); + else + return new KeyValuePair(li.Trim(), ""); + }); + else + return new KeyValuePair[0]; + } + + public SlnSectionType SectionType { get; set; } + + SlnSectionType ToSectionType(int curLineNum, string s) + { + if (s == "preSolution" || s == "preProject") + return SlnSectionType.PreProcess; + if (s == "postSolution" || s == "postProject") + return SlnSectionType.PostProcess; + throw new InvalidSolutionFormatException(curLineNum, "Invalid section type: " + s); + } + + string FromSectionType(bool isProjectSection, SlnSectionType type) + { + if (type == SlnSectionType.PreProcess) + return isProjectSection ? "preProject" : "preSolution"; + else + return isProjectSection ? "postProject" : "postSolution"; + } + + internal void Read(TextReader reader, string line, ref int curLineNum) + { + Line = curLineNum; + int k = line.IndexOf('('); + if (k == -1) + throw new InvalidSolutionFormatException(curLineNum, "Section id missing"); + var tag = line.Substring(0, k).Trim(); + var k2 = line.IndexOf(')', k); + if (k2 == -1) + throw new InvalidSolutionFormatException(curLineNum); + Id = line.Substring(k + 1, k2 - k - 1); + + k = line.IndexOf('=', k2); + SectionType = ToSectionType(curLineNum, line.Substring(k + 1).Trim()); + + var endTag = "End" + tag; + + sectionLines = new List(); + baseIndex = ++curLineNum; + while ((line = reader.ReadLine()) != null) + { + curLineNum++; + line = line.Trim(); + if (line == endTag) + break; + sectionLines.Add(line); + } + if (line == null) + throw new InvalidSolutionFormatException(curLineNum, "Closing section tag not found"); + } + + void LoadPropertySets() + { + if (sectionLines != null) + { + SlnPropertySet curSet = null; + for (int n = 0; n < sectionLines.Count; n++) + { + var line = sectionLines[n]; + if (string.IsNullOrEmpty(line.Trim())) + continue; + var i = line.IndexOf('.'); + if (i == -1) + throw new InvalidSolutionFormatException(baseIndex + n); + var id = line.Substring(0, i); + if (curSet == null || id != curSet.Id) + { + curSet = new SlnPropertySet(id); + nestedPropertySets.Add(curSet); + } + curSet.ReadLine(line.Substring(i + 1), baseIndex + n); + } + sectionLines = null; + } + } + + internal void Write(TextWriter writer, string sectionTag) + { + if (SkipIfEmpty && IsEmpty) + return; + + writer.Write("\t"); + writer.Write(sectionTag); + writer.Write('('); + writer.Write(Id); + writer.Write(") = "); + writer.WriteLine(FromSectionType(sectionTag == "ProjectSection", SectionType)); + if (sectionLines != null) + { + foreach (var l in sectionLines) + writer.WriteLine("\t\t" + l); + } + else if (properties != null) + properties.Write(writer); + else if (nestedPropertySets != null) + { + foreach (var ps in nestedPropertySets) + ps.Write(writer); + } + writer.WriteLine("\tEnd" + sectionTag); + } + } + + /// + /// A collection of properties + /// + public class SlnPropertySet : IDictionary + { + OrderedDictionary values = new OrderedDictionary(); + bool isMetadata; + + internal bool Processed { get; set; } + + public SlnFile ParentFile + { + get { return ParentSection != null ? ParentSection.ParentFile : null; } + } + + public SlnSection ParentSection { get; set; } + + /// + /// Text file line of this section in the original file + /// + /// The line. + public int Line { get; private set; } + + internal SlnPropertySet() + { + } + + /// + /// Creates a new property set with the specified ID + /// + /// Identifier. + public SlnPropertySet(string id) + { + Id = id; + } + + internal SlnPropertySet(bool isMetadata) + { + this.isMetadata = isMetadata; + } + + /// + /// Gets a value indicating whether this property set is empty. + /// + /// true if this instance is empty; otherwise, false. + public bool IsEmpty + { + get + { + return values.Count == 0; + } + } + + internal void ReadLine(string line, int currentLine) + { + if (Line == 0) + Line = currentLine; + int k = line.IndexOf('='); + if (k != -1) + { + var name = line.Substring(0, k).Trim(); + var val = line.Substring(k + 1).Trim(); + values[name] = val; + } + else + { + line = line.Trim(); + if (!string.IsNullOrWhiteSpace(line)) + values.Add(line, null); + } + } + + internal void Write(TextWriter writer) + { + foreach (DictionaryEntry e in values) + { + if (!isMetadata) + writer.Write("\t\t"); + if (Id != null) + writer.Write(Id + "."); + writer.WriteLine(e.Key + " = " + e.Value); + } + } + + /// + /// Gets the identifier of the property set + /// + /// The identifier. + public string Id { get; private set; } + + public string GetValue(string name, string defaultValue = null) + { + string res; + if (TryGetValue(name, out res)) + return res; + else + return defaultValue; + } + + public T GetValue(string name) + { + return (T)GetValue(name, typeof(T), default(T)); + } + + public T GetValue(string name, T defaultValue) + { + return (T)GetValue(name, typeof(T), defaultValue); + } + + public object GetValue(string name, Type t, object defaultValue) + { + string val; + if (TryGetValue(name, out val)) + { + if (t == typeof(bool)) + return (object)val.Equals("true", StringComparison.OrdinalIgnoreCase); + if (t.GetTypeInfo().IsEnum) + return Enum.Parse(t, val, true); + if (t.GetTypeInfo().IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + var at = t.GetTypeInfo().GetGenericArguments()[0]; + if (string.IsNullOrEmpty(val)) + return null; + return Convert.ChangeType(val, at, CultureInfo.InvariantCulture); + + } + return Convert.ChangeType(val, t, CultureInfo.InvariantCulture); + } + else + return defaultValue; + } + + public void SetValue(string name, string value, string defaultValue = null, bool preserveExistingCase = false) + { + if (value == null && defaultValue == "") + value = ""; + if (value == defaultValue) + { + // if the value is default, only remove the property if it was not already the default + // to avoid unnecessary project file churn + string res; + if (TryGetValue(name, out res) && !string.Equals(defaultValue ?? "", res, preserveExistingCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal)) + Remove(name); + return; + } + string currentValue; + if (preserveExistingCase && TryGetValue(name, out currentValue) && string.Equals(value, currentValue, StringComparison.OrdinalIgnoreCase)) + return; + values[name] = value; + } + + public void SetValue(string name, object value, object defaultValue = null) + { + var isDefault = object.Equals(value, defaultValue); + if (isDefault) + { + // if the value is default, only remove the property if it was not already the default + // to avoid unnecessary project file churn + if (ContainsKey(name) && (defaultValue == null || !object.Equals(defaultValue, GetValue(name, defaultValue.GetType(), null)))) + Remove(name); + return; + } + + if (value is bool) + values[name] = (bool)value ? "TRUE" : "FALSE"; + else + values[name] = Convert.ToString(value, CultureInfo.InvariantCulture); + } + + void IDictionary.Add(string key, string value) + { + SetValue(key, value); + } + + /// + /// Determines whether the current instance contains an entry with the specified key + /// + /// true, if key was containsed, false otherwise. + /// Key. + public bool ContainsKey(string key) + { + return values.Contains(key); + } + + /// + /// Removes a property + /// + /// Property name + public bool Remove(string key) + { + var wasThere = values.Contains(key); + values.Remove(key); + return wasThere; + } + + /// + /// Tries to get the value of a property + /// + /// true, if the property exists, false otherwise. + /// Property name + /// Value. + public bool TryGetValue(string key, out string value) + { + value = (string)values[key]; + return value != null; + } + + /// + /// Gets or sets the value of a property + /// + /// Index. + public string this[string index] + { + get + { + return (string)values[index]; + } + set + { + values[index] = value; + } + } + + public ICollection Values + { + get + { + return values.Values.Cast().ToList(); + } + } + + public ICollection Keys + { + get { return values.Keys.Cast().ToList(); } + } + + void ICollection>.Add(KeyValuePair item) + { + SetValue(item.Key, item.Value); + } + + public void Clear() + { + values.Clear(); + } + + internal void ClearExcept(HashSet keys) + { + foreach (var k in values.Keys.Cast().Except(keys).ToArray()) + values.Remove(k); + } + + bool ICollection>.Contains(KeyValuePair item) + { + var val = GetValue(item.Key); + return val == item.Value; + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + foreach (DictionaryEntry de in values) + array[arrayIndex++] = new KeyValuePair((string)de.Key, (string)de.Value); + } + + bool ICollection>.Remove(KeyValuePair item) + { + if (((ICollection>)this).Contains(item)) + { + Remove(item.Key); + return true; + } + else + return false; + } + + public int Count + { + get + { + return values.Count; + } + } + + internal void SetLines(IEnumerable> lines) + { + values.Clear(); + foreach (var line in lines) + values[line.Key] = line.Value; + } + + bool ICollection>.IsReadOnly + { + get + { + return false; + } + } + + public IEnumerator> GetEnumerator() + { + foreach (DictionaryEntry de in values) + yield return new KeyValuePair((string)de.Key, (string)de.Value); + } + + IEnumerator IEnumerable.GetEnumerator() + { + foreach (DictionaryEntry de in values) + yield return new KeyValuePair((string)de.Key, (string)de.Value); + } + } + + public class SlnProjectCollection : Collection + { + SlnFile parentFile; + + internal SlnFile ParentFile + { + get + { + return parentFile; + } + set + { + parentFile = value; + foreach (var it in this) + it.ParentFile = parentFile; + } + } + + public SlnProject GetProject(string id) + { + return this.FirstOrDefault(s => s.Id == id); + } + + public SlnProject GetOrCreateProject(string id) + { + var p = this.FirstOrDefault(s => s.Id.Equals(id, StringComparison.OrdinalIgnoreCase)); + if (p == null) + { + p = new SlnProject { Id = id }; + Add(p); + } + return p; + } + + protected override void InsertItem(int index, SlnProject item) + { + base.InsertItem(index, item); + item.ParentFile = ParentFile; + } + + protected override void SetItem(int index, SlnProject item) + { + base.SetItem(index, item); + item.ParentFile = ParentFile; + } + + protected override void RemoveItem(int index) + { + var it = this[index]; + it.ParentFile = null; + base.RemoveItem(index); + } + + protected override void ClearItems() + { + foreach (var it in this) + it.ParentFile = null; + base.ClearItems(); + } + } + + public class SlnSectionCollection : Collection + { + SlnFile parentFile; + + internal SlnFile ParentFile + { + get + { + return parentFile; + } + set + { + parentFile = value; + foreach (var it in this) + it.ParentFile = parentFile; + } + } + + public SlnSection GetSection(string id) + { + return this.FirstOrDefault(s => s.Id == id); + } + + public SlnSection GetSection(string id, SlnSectionType sectionType) + { + return this.FirstOrDefault(s => s.Id == id && s.SectionType == sectionType); + } + + public SlnSection GetOrCreateSection(string id, SlnSectionType sectionType) + { + if (id == null) + throw new ArgumentNullException("id"); + var sec = this.FirstOrDefault(s => s.Id == id); + if (sec == null) + { + sec = new SlnSection { Id = id }; + sec.SectionType = sectionType; + Add(sec); + } + return sec; + } + + public void RemoveSection(string id) + { + if (id == null) + throw new ArgumentNullException("id"); + var s = GetSection(id); + if (s != null) + Remove(s); + } + + protected override void InsertItem(int index, SlnSection item) + { + base.InsertItem(index, item); + item.ParentFile = ParentFile; + } + + protected override void SetItem(int index, SlnSection item) + { + base.SetItem(index, item); + item.ParentFile = ParentFile; + } + + protected override void RemoveItem(int index) + { + var it = this[index]; + it.ParentFile = null; + base.RemoveItem(index); + } + + protected override void ClearItems() + { + foreach (var it in this) + it.ParentFile = null; + base.ClearItems(); + } + } + + public class SlnPropertySetCollection : Collection + { + SlnSection parentSection; + + internal SlnPropertySetCollection(SlnSection parentSection) + { + this.parentSection = parentSection; + } + + public SlnPropertySet GetPropertySet(string id, bool ignoreCase = false) + { + var sc = ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + return this.FirstOrDefault(s => s.Id.Equals(id, sc)); + } + + public SlnPropertySet GetOrCreatePropertySet(string id, bool ignoreCase = false) + { + var ps = GetPropertySet(id, ignoreCase); + if (ps == null) + { + ps = new SlnPropertySet(id); + Add(ps); + } + return ps; + } + + protected override void InsertItem(int index, SlnPropertySet item) + { + base.InsertItem(index, item); + item.ParentSection = parentSection; + } + + protected override void SetItem(int index, SlnPropertySet item) + { + base.SetItem(index, item); + item.ParentSection = parentSection; + } + + protected override void RemoveItem(int index) + { + var it = this[index]; + it.ParentSection = null; + base.RemoveItem(index); + } + + protected override void ClearItems() + { + foreach (var it in this) + it.ParentSection = null; + base.ClearItems(); + } + } + + class InvalidSolutionFormatException : Exception + { + public InvalidSolutionFormatException(int line) : base("Invalid format in line " + line) + { + } + + public InvalidSolutionFormatException(int line, string msg) : base("Invalid format in line " + line + ": " + msg) + { + + } + } + + public enum SlnSectionType + { + PreProcess, + PostProcess + } +} + diff --git a/test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.cs b/test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.cs new file mode 100644 index 000000000..3e3a43a48 --- /dev/null +++ b/test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.cs @@ -0,0 +1,84 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using System.IO; +using FluentAssertions; +using Xunit; +using Microsoft.DotNet.Cli.Sln.Internal; +using Microsoft.DotNet.TestFramework; +using Microsoft.DotNet.Tools.Test.Utilities; + +namespace Microsoft.DotNet.Cli.Sln.Internal.Tests +{ + public class GivenAnSlnFile : TestBase + { + [Fact] + public void It_reads_an_sln_file() + { + var solutionDirectory = + TestAssetsManager.CreateTestInstance("TestAppWithSln", callingMethod: "p").Path; + + var solutionFullPath = Path.Combine(solutionDirectory, "TestAppWithSln.sln"); + + var slnFile = new SlnFile(); + slnFile.Read(solutionFullPath); + + slnFile.FormatVersion.Should().Be("12.00"); + slnFile.ProductDescription.Should().Be("Visual Studio 14"); + slnFile.VisualStudioVersion.Should().Be("14.0.25420.1"); + slnFile.MinimumVisualStudioVersion.Should().Be("10.0.40219.1"); + slnFile.BaseDirectory.Should().Be(solutionDirectory); + slnFile.FileName.FileName.Should().Be("TestAppWithSln.sln"); + + SlnFile.GetFileVersion(solutionFullPath).Should().Be("12.00"); + + slnFile.Projects.Count.Should().Be(1); + var project = slnFile.Projects[0]; + project.Id.Should().Be("{0138CB8F-4AA9-4029-A21E-C07C30F425BA}"); + project.TypeGuid.Should().Be("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}"); + project.Name.Should().Be("TestAppWithSln"); + project.FilePath.Should().Be("TestAppWithSln.xproj"); + } + + [Fact] + public void It_writes_an_sln_file() + { + var solutionDirectory = + TestAssetsManager.CreateTestInstance("TestAppWithSln", callingMethod: "p").Path; + + var solutionFullPath = Path.Combine(solutionDirectory, "TestAppWithSln.sln"); + + var slnFile = new SlnFile(); + slnFile.Read(solutionFullPath); + + slnFile.Projects.Count.Should().Be(1); + var project = slnFile.Projects[0]; + project.Name.Should().Be("TestAppWithSln"); + project.Name = "New Project Name"; + project.FilePath.Should().Be("TestAppWithSln.xproj"); + project.FilePath = "New File Path"; + + var newSolutionFullPath = Path.Combine(solutionDirectory, "TestAppWithSln_modified.sln"); + slnFile.Write(newSolutionFullPath); + + slnFile = new SlnFile(); + slnFile.Read(newSolutionFullPath); + slnFile.FormatVersion.Should().Be("12.00"); + slnFile.ProductDescription.Should().Be("Visual Studio 14"); + slnFile.VisualStudioVersion.Should().Be("14.0.25420.1"); + slnFile.MinimumVisualStudioVersion.Should().Be("10.0.40219.1"); + slnFile.BaseDirectory.Should().Be(solutionDirectory); + slnFile.FileName.FileName.Should().Be("TestAppWithSln_modified.sln"); + SlnFile.GetFileVersion(solutionFullPath).Should().Be("12.00"); + slnFile.Projects.Count.Should().Be(1); + project = slnFile.Projects[0]; + project.Id.Should().Be("{0138CB8F-4AA9-4029-A21E-C07C30F425BA}"); + project.TypeGuid.Should().Be("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}"); + project.Name.Should().Be("New Project Name"); + project.FilePath.Should().Be("New File Path"); + slnFile.Projects.Count.Should().Be(1); + project = slnFile.Projects[0]; + } + } +} diff --git a/test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.csproj b/test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.csproj new file mode 100644 index 000000000..bcb91dafb --- /dev/null +++ b/test/Microsoft.DotNet.Cli.Sln.Internal.Tests/Microsoft.DotNet.Cli.Sln.Internal.Tests.csproj @@ -0,0 +1,50 @@ + + + + + netcoreapp1.0 + true + Microsoft.DotNet.Cli.Sln.Internal.Tests + ../../tools/test_key.snk + true + true + $(PackageTargetFallback);netstandardapp1.5;dotnet5.4;portable-net451+win8 + + + + + + + + + + + + + + + + + + 1.0.1 + + + 1.0.0-alpha-20161104-2 + All + + + 15.0.0-preview-20161123-03 + + + 2.2.0-beta4-build3444 + + + 2.2.0-beta4-build1194 + + + 4.0.0 + + + + + \ No newline at end of file