From 1b47f448760918ec4ea9fc72e9b710527ac07898 Mon Sep 17 00:00:00 2001
From: Ryan Nowak <nowakra@gmail.com>
Date: Tue, 7 May 2019 15:01:08 -0700
Subject: [PATCH] Add a top-level node for analyzers (#9906)

This is the first step, and just estabilishes a skeleton. The end goal
is organize our analyzers under this node because:
1. We're writing some 'top level' analyzers that depend on everything
else
2. We want to be able to service analyzers on the SDK schedule
(independent of runtime).

Next, we'll merge the MVC analyzers into this assembly since there's no
reason for them to be separate. The MVC API analyzers will remain a
separate package, but under this node. The component analyzers will
remain separate as they need to ship as a package, but will move under
this node as well.
---
 build/repo.props                              |   1 +
 eng/Versions.props                            |   6 +-
 src/Analyzers/Analyzers.sln                   | 794 ++++++++++++++++++
 .../src/Microsoft.AspNetCore.Analyzers.csproj |  46 +
 .../src/Microsoft.AspNetCore.Analyzers.nuspec |  24 +
 .../Analyzers/src/Properties/AssemblyInfo.cs  |   6 +
 src/Analyzers/Analyzers/src/StartupFacts.cs   | 126 +++
 src/Analyzers/Analyzers/src/StartupSymbols.cs |  22 +
 src/Analyzers/Analyzers/src/SymbolNames.cs    |  26 +
 .../Analyzers/test/AnalyzerTestBase.cs        |  59 ++
 ...Microsoft.AspNetCore.Analyzers.Test.csproj |  30 +
 .../Analyzers/test/StartupFactsTest.cs        | 142 ++++
 .../StartupFactsTest/BasicStartup.cs          |  19 +
 .../StartupFactsTest/EnvironmentStartup.cs    |  30 +
 .../StartupFactsTest/NotAStartupClass.cs      |  47 ++
 src/Analyzers/build.cmd                       |   3 +
 src/Analyzers/build.sh                        |   7 +
 ....Analyzers.FeatureDetection.Sources.csproj |  53 ++
 src/Analyzers/startvs.cmd                     |   3 +
 ...oft.AspNetCore.Components.Analyzers.csproj |   2 +-
 .../Microsoft.AspNetCore.Mvc.Analyzers.csproj |   2 +-
 .../src/Startup/StartupAnalysisContext.cs     |   2 +
 .../src/Startup/StartupAnalzyer.cs            |   3 +-
 .../AddResponseTypeAttributeCodeFixAction.cs  |   2 +
 ...AddResponseTypeAttributeCodeFixProvider.cs |   2 +
 ...rosoft.AspNetCore.Mvc.Api.Analyzers.csproj |   2 +-
 26 files changed, 1452 insertions(+), 7 deletions(-)
 create mode 100644 src/Analyzers/Analyzers.sln
 create mode 100644 src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj
 create mode 100644 src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec
 create mode 100644 src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs
 create mode 100644 src/Analyzers/Analyzers/src/StartupFacts.cs
 create mode 100644 src/Analyzers/Analyzers/src/StartupSymbols.cs
 create mode 100644 src/Analyzers/Analyzers/src/SymbolNames.cs
 create mode 100644 src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
 create mode 100644 src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj
 create mode 100644 src/Analyzers/Analyzers/test/StartupFactsTest.cs
 create mode 100644 src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs
 create mode 100644 src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs
 create mode 100644 src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs
 create mode 100644 src/Analyzers/build.cmd
 create mode 100644 src/Analyzers/build.sh
 create mode 100644 src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj
 create mode 100644 src/Analyzers/startvs.cmd

diff --git a/build/repo.props b/build/repo.props
index 53ad9422889..500a42773e2 100644
--- a/build/repo.props
+++ b/build/repo.props
@@ -166,6 +166,7 @@
                           $(RepositoryRoot)src\MusicStore\**\*.*proj;
                           $(RepositoryRoot)src\SignalR\**\*.csproj;
                           $(RepositoryRoot)src\Components\**\*.csproj;
+                          $(RepositoryRoot)src\Analyzers\**\*.csproj;
                           $(RepositoryRoot)src\ProjectTemplates\*\*.csproj;
                           $(RepositoryRoot)src\ProjectTemplates\testassets\*\*.csproj;
                           "
diff --git a/eng/Versions.props b/eng/Versions.props
index 2ae50f6f34b..e36b083079c 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -150,9 +150,9 @@
     <MicrosoftAzureStorageBlobPackageVersion>10.0.1</MicrosoftAzureStorageBlobPackageVersion>
     <MicrosoftBuildFrameworkPackageVersion>15.8.166</MicrosoftBuildFrameworkPackageVersion>
     <MicrosoftBuildUtilitiesCorePackageVersion>15.8.166</MicrosoftBuildUtilitiesCorePackageVersion>
-    <MicrosoftCodeAnalysisCommonPackageVersion>2.8.0</MicrosoftCodeAnalysisCommonPackageVersion>
-    <MicrosoftCodeAnalysisCSharpPackageVersion>2.8.0</MicrosoftCodeAnalysisCSharpPackageVersion>
-    <MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>2.8.0</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
+    <MicrosoftCodeAnalysisCommonPackageVersion>3.0.0</MicrosoftCodeAnalysisCommonPackageVersion>
+    <MicrosoftCodeAnalysisCSharpPackageVersion>3.0.0</MicrosoftCodeAnalysisCSharpPackageVersion>
+    <MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>3.0.0</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
     <MicrosoftIdentityModelClientsActiveDirectoryPackageVersion>3.19.8</MicrosoftIdentityModelClientsActiveDirectoryPackageVersion>
     <MicrosoftIdentityModelLoggingPackageVersion>5.3.0</MicrosoftIdentityModelLoggingPackageVersion>
     <MicrosoftIdentityModelProtocolsOpenIdConnectPackageVersion>5.3.0</MicrosoftIdentityModelProtocolsOpenIdConnectPackageVersion>
diff --git a/src/Analyzers/Analyzers.sln b/src/Analyzers/Analyzers.sln
new file mode 100644
index 00000000000..e247944f6a6
--- /dev/null
+++ b/src/Analyzers/Analyzers.sln
@@ -0,0 +1,794 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28903.44
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{E20BC57F-1881-40B0-BEAF-338BBDA87956}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc", "..\Mvc\Mvc\src\Microsoft.AspNetCore.Mvc.csproj", "{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR", "..\SignalR\server\SignalR\src\Microsoft.AspNetCore.SignalR.csproj", "{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Server", "..\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj", "{476B2742-74FD-4009-92DE-7B1214EAF244}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery", "..\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj", "{E38BD375-143D-4928-8814-924597931A07}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Abstractions", "..\Http\Authentication.Abstractions\src\Microsoft.AspNetCore.Authentication.Abstractions.csproj", "{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Core", "..\Http\Authentication.Core\src\Microsoft.AspNetCore.Authentication.Core.csproj", "{31B70151-7A3F-47F9-87DE-B279E93B3915}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization", "..\Security\Authorization\Core\src\Microsoft.AspNetCore.Authorization.csproj", "{D345FDA8-05A0-4141-BCEF-1A11AF01480A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Policy", "..\Security\Authorization\Policy\src\Microsoft.AspNetCore.Authorization.Policy.csproj", "{34CCB39F-37E7-46E7-AC58-E9197F4A5380}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components", "..\Components\Components\src\Microsoft.AspNetCore.Components.csproj", "{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Browser", "..\Components\Browser\src\Microsoft.AspNetCore.Components.Browser.csproj", "{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Connections.Abstractions", "..\Servers\Connections.Abstractions\src\Microsoft.AspNetCore.Connections.Abstractions.csproj", "{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors", "..\Middleware\CORS\src\Microsoft.AspNetCore.Cors.csproj", "{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.Internal", "..\DataProtection\Cryptography.Internal\src\Microsoft.AspNetCore.Cryptography.Internal.csproj", "{D8F56A11-8961-4BD4-8846-C5483BA500F8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection", "..\DataProtection\DataProtection\src\Microsoft.AspNetCore.DataProtection.csproj", "{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions", "..\DataProtection\Abstractions\src\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "{52055C8F-9A92-48D4-B4F7-33F287173456}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.Abstractions", "..\Middleware\Diagnostics.Abstractions\src\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj", "{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Abstractions", "..\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj", "{DF11316F-4166-415D-B610-01603DADFED1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Server.Abstractions", "..\Hosting\Server.Abstractions\src\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj", "{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Html.Abstractions", "..\Html\Abstractions\src\Microsoft.AspNetCore.Html.Abstractions.csproj", "{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http", "..\Http\Http\src\Microsoft.AspNetCore.Http.csproj", "{3090F751-B421-4853-829C-C0CC5ADE3D83}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions", "..\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj", "{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections", "..\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj", "{4B501200-A3FD-4F3B-B8AC-582108B13A05}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Common", "..\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj", "{99F7E758-9327-4A16-8AB7-72B35B1D2C92}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Extensions", "..\Http\Http.Extensions\src\Microsoft.AspNetCore.Http.Extensions.csproj", "{04C932ED-58DA-4EB9-90CD-2835C67B9952}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Features", "..\Http\Http.Features\src\Microsoft.AspNetCore.Http.Features.csproj", "{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization", "..\Middleware\Localization\src\Microsoft.AspNetCore.Localization.csproj", "{9D5B4D52-7E1B-4981-8994-5288262577B2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Abstractions", "..\Mvc\Mvc.Abstractions\src\Microsoft.AspNetCore.Mvc.Abstractions.csproj", "{06091041-72DA-4C68-8FC1-AD65E495993D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ApiExplorer", "..\Mvc\Mvc.ApiExplorer\src\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj", "{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core", "..\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj", "{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Cors", "..\Mvc\Mvc.Cors\src\Microsoft.AspNetCore.Mvc.Cors.csproj", "{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.DataAnnotations", "..\Mvc\Mvc.DataAnnotations\src\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj", "{2E4394A2-9863-4B60-B9EA-906FA6C46854}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Json", "..\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj", "{470CD0EE-3C90-462A-B003-3403AB4558A5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Localization", "..\Mvc\Mvc.Localization\src\Microsoft.AspNetCore.Mvc.Localization.csproj", "{0192C192-BE48-4BC4-8308-9497407FA054}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor", "..\Mvc\Mvc.Razor\src\Microsoft.AspNetCore.Mvc.Razor.csproj", "{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.RazorPages", "..\Mvc\Mvc.RazorPages\src\Microsoft.AspNetCore.Mvc.RazorPages.csproj", "{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TagHelpers", "..\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj", "{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ViewFeatures", "..\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj", "{47E04D89-C2F0-4339-B439-E097AD1ABC09}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor", "..\Razor\Razor\src\Microsoft.AspNetCore.Razor.csproj", "{10588AC3-7F69-47F3-B58D-387ED27C9A50}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime", "..\Razor\Razor.Runtime\src\Microsoft.AspNetCore.Razor.Runtime.csproj", "{3EEBE055-DD80-4256-B71F-48C9489E2FC2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Abstractions", "..\Middleware\ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj", "{F871786B-8DF5-4BA7-A5CA-D128651F69AA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing", "..\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj", "{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Abstractions", "..\Http\Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj", "{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Common", "..\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj", "{D3A17614-4C31-455F-ADA4-0FD746C569BE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Core", "..\SignalR\server\Core\src\Microsoft.AspNetCore.SignalR.Core.csproj", "{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Protocols.Json", "..\SignalR\common\Protocols.Json\src\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj", "{01E8A2FA-4591-4D85-81BE-341CA3C61A90}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles", "..\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj", "{894DE066-00B0-44E6-88B9-46F91A17EE26}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets", "..\Middleware\WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj", "{0684DA04-DFBA-499D-8D07-2649C3C1068D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities", "..\Http\WebUtilities\src\Microsoft.AspNetCore.WebUtilities.csproj", "{66456C7C-8CE9-4E01-95A3-399B59CA3438}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "..\Http\Headers\src\Microsoft.Net.Http.Headers.csproj", "{BDF0389F-B502-4D71-8ADF-206A59F9D32A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers", "Analyzers\src\Microsoft.AspNetCore.Analyzers.csproj", "{95534D16-E720-4435-9867-5D3E2B288406}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers.Test", "Analyzers\test\Microsoft.AspNetCore.Analyzers.Test.csproj", "{63A928CC-792F-400A-97D3-F455C0A78B8F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_dependencies", "_dependencies", "{15FC976B-4FFC-47E1-A047-194F21C3CA9F}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x64.Build.0 = Debug|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Debug|x86.Build.0 = Debug|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x64.ActiveCfg = Release|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x64.Build.0 = Release|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x86.ActiveCfg = Release|Any CPU
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A}.Release|x86.Build.0 = Release|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x64.Build.0 = Debug|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Debug|x86.Build.0 = Debug|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x64.ActiveCfg = Release|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x64.Build.0 = Release|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x86.ActiveCfg = Release|Any CPU
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6}.Release|x86.Build.0 = Release|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x64.Build.0 = Debug|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Debug|x86.Build.0 = Debug|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Release|Any CPU.Build.0 = Release|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x64.ActiveCfg = Release|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x64.Build.0 = Release|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x86.ActiveCfg = Release|Any CPU
+		{476B2742-74FD-4009-92DE-7B1214EAF244}.Release|x86.Build.0 = Release|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Debug|x64.Build.0 = Debug|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Debug|x86.Build.0 = Debug|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Release|x64.ActiveCfg = Release|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Release|x64.Build.0 = Release|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Release|x86.ActiveCfg = Release|Any CPU
+		{E38BD375-143D-4928-8814-924597931A07}.Release|x86.Build.0 = Release|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x64.Build.0 = Debug|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Debug|x86.Build.0 = Debug|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x64.ActiveCfg = Release|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x64.Build.0 = Release|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x86.ActiveCfg = Release|Any CPU
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D}.Release|x86.Build.0 = Release|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x64.Build.0 = Debug|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Debug|x86.Build.0 = Debug|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|Any CPU.Build.0 = Release|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x64.ActiveCfg = Release|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x64.Build.0 = Release|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x86.ActiveCfg = Release|Any CPU
+		{31B70151-7A3F-47F9-87DE-B279E93B3915}.Release|x86.Build.0 = Release|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x64.Build.0 = Debug|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Debug|x86.Build.0 = Debug|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x64.ActiveCfg = Release|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x64.Build.0 = Release|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x86.ActiveCfg = Release|Any CPU
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A}.Release|x86.Build.0 = Release|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x64.Build.0 = Debug|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Debug|x86.Build.0 = Debug|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|Any CPU.Build.0 = Release|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x64.ActiveCfg = Release|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x64.Build.0 = Release|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x86.ActiveCfg = Release|Any CPU
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380}.Release|x86.Build.0 = Release|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x64.Build.0 = Debug|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Debug|x86.Build.0 = Debug|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x64.ActiveCfg = Release|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x64.Build.0 = Release|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x86.ActiveCfg = Release|Any CPU
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1}.Release|x86.Build.0 = Release|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x64.Build.0 = Debug|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Debug|x86.Build.0 = Debug|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x64.ActiveCfg = Release|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x64.Build.0 = Release|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x86.ActiveCfg = Release|Any CPU
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC}.Release|x86.Build.0 = Release|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x64.Build.0 = Debug|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Debug|x86.Build.0 = Debug|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x64.ActiveCfg = Release|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x64.Build.0 = Release|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x86.ActiveCfg = Release|Any CPU
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E}.Release|x86.Build.0 = Release|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x64.Build.0 = Debug|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Debug|x86.Build.0 = Debug|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|Any CPU.Build.0 = Release|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x64.ActiveCfg = Release|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x64.Build.0 = Release|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x86.ActiveCfg = Release|Any CPU
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22}.Release|x86.Build.0 = Release|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x64.Build.0 = Debug|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Debug|x86.Build.0 = Debug|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x64.ActiveCfg = Release|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x64.Build.0 = Release|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x86.ActiveCfg = Release|Any CPU
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8}.Release|x86.Build.0 = Release|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x64.Build.0 = Debug|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Debug|x86.Build.0 = Debug|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x64.ActiveCfg = Release|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x64.Build.0 = Release|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x86.ActiveCfg = Release|Any CPU
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F}.Release|x86.Build.0 = Release|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x64.Build.0 = Debug|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Debug|x86.Build.0 = Debug|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Release|Any CPU.Build.0 = Release|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x64.ActiveCfg = Release|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x64.Build.0 = Release|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x86.ActiveCfg = Release|Any CPU
+		{52055C8F-9A92-48D4-B4F7-33F287173456}.Release|x86.Build.0 = Release|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x64.Build.0 = Debug|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Debug|x86.Build.0 = Debug|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x64.ActiveCfg = Release|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x64.Build.0 = Release|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x86.ActiveCfg = Release|Any CPU
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F}.Release|x86.Build.0 = Release|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Debug|x64.Build.0 = Debug|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Debug|x86.Build.0 = Debug|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Release|x64.ActiveCfg = Release|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Release|x64.Build.0 = Release|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Release|x86.ActiveCfg = Release|Any CPU
+		{DF11316F-4166-415D-B610-01603DADFED1}.Release|x86.Build.0 = Release|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x64.Build.0 = Debug|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Debug|x86.Build.0 = Debug|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x64.ActiveCfg = Release|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x64.Build.0 = Release|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x86.ActiveCfg = Release|Any CPU
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC}.Release|x86.Build.0 = Release|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x64.Build.0 = Debug|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Debug|x86.Build.0 = Debug|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x64.ActiveCfg = Release|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x64.Build.0 = Release|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x86.ActiveCfg = Release|Any CPU
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6}.Release|x86.Build.0 = Release|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x64.Build.0 = Debug|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Debug|x86.Build.0 = Debug|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x64.ActiveCfg = Release|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x64.Build.0 = Release|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x86.ActiveCfg = Release|Any CPU
+		{3090F751-B421-4853-829C-C0CC5ADE3D83}.Release|x86.Build.0 = Release|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x64.Build.0 = Debug|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Debug|x86.Build.0 = Debug|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x64.ActiveCfg = Release|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x64.Build.0 = Release|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x86.ActiveCfg = Release|Any CPU
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33}.Release|x86.Build.0 = Release|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x64.Build.0 = Debug|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Debug|x86.Build.0 = Debug|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x64.ActiveCfg = Release|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x64.Build.0 = Release|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x86.ActiveCfg = Release|Any CPU
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05}.Release|x86.Build.0 = Release|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x64.Build.0 = Debug|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Debug|x86.Build.0 = Debug|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|Any CPU.Build.0 = Release|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x64.ActiveCfg = Release|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x64.Build.0 = Release|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x86.ActiveCfg = Release|Any CPU
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92}.Release|x86.Build.0 = Release|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x64.Build.0 = Debug|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Debug|x86.Build.0 = Debug|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|Any CPU.Build.0 = Release|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x64.ActiveCfg = Release|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x64.Build.0 = Release|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x86.ActiveCfg = Release|Any CPU
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952}.Release|x86.Build.0 = Release|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x64.Build.0 = Debug|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Debug|x86.Build.0 = Debug|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x64.ActiveCfg = Release|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x64.Build.0 = Release|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x86.ActiveCfg = Release|Any CPU
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803}.Release|x86.Build.0 = Release|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x64.Build.0 = Debug|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Debug|x86.Build.0 = Debug|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x64.ActiveCfg = Release|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x64.Build.0 = Release|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x86.ActiveCfg = Release|Any CPU
+		{9D5B4D52-7E1B-4981-8994-5288262577B2}.Release|x86.Build.0 = Release|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x64.Build.0 = Debug|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Debug|x86.Build.0 = Debug|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x64.ActiveCfg = Release|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x64.Build.0 = Release|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x86.ActiveCfg = Release|Any CPU
+		{06091041-72DA-4C68-8FC1-AD65E495993D}.Release|x86.Build.0 = Release|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x64.Build.0 = Debug|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Debug|x86.Build.0 = Debug|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x64.ActiveCfg = Release|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x64.Build.0 = Release|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x86.ActiveCfg = Release|Any CPU
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB}.Release|x86.Build.0 = Release|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x64.Build.0 = Debug|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Debug|x86.Build.0 = Debug|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x64.ActiveCfg = Release|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x64.Build.0 = Release|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x86.ActiveCfg = Release|Any CPU
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E}.Release|x86.Build.0 = Release|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x64.Build.0 = Debug|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Debug|x86.Build.0 = Debug|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x64.ActiveCfg = Release|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x64.Build.0 = Release|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x86.ActiveCfg = Release|Any CPU
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7}.Release|x86.Build.0 = Release|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x64.Build.0 = Debug|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Debug|x86.Build.0 = Debug|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x64.ActiveCfg = Release|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x64.Build.0 = Release|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x86.ActiveCfg = Release|Any CPU
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854}.Release|x86.Build.0 = Release|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x64.Build.0 = Debug|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Debug|x86.Build.0 = Debug|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x64.ActiveCfg = Release|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x64.Build.0 = Release|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x86.ActiveCfg = Release|Any CPU
+		{470CD0EE-3C90-462A-B003-3403AB4558A5}.Release|x86.Build.0 = Release|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x64.Build.0 = Debug|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Debug|x86.Build.0 = Debug|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Release|x64.ActiveCfg = Release|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Release|x64.Build.0 = Release|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Release|x86.ActiveCfg = Release|Any CPU
+		{0192C192-BE48-4BC4-8308-9497407FA054}.Release|x86.Build.0 = Release|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x64.Build.0 = Debug|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Debug|x86.Build.0 = Debug|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x64.ActiveCfg = Release|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x64.Build.0 = Release|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x86.ActiveCfg = Release|Any CPU
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30}.Release|x86.Build.0 = Release|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x64.Build.0 = Debug|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Debug|x86.Build.0 = Debug|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x64.ActiveCfg = Release|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x64.Build.0 = Release|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x86.ActiveCfg = Release|Any CPU
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3}.Release|x86.Build.0 = Release|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x64.Build.0 = Debug|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Debug|x86.Build.0 = Debug|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x64.ActiveCfg = Release|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x64.Build.0 = Release|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x86.ActiveCfg = Release|Any CPU
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C}.Release|x86.Build.0 = Release|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x64.Build.0 = Debug|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Debug|x86.Build.0 = Debug|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|Any CPU.Build.0 = Release|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x64.ActiveCfg = Release|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x64.Build.0 = Release|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x86.ActiveCfg = Release|Any CPU
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09}.Release|x86.Build.0 = Release|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x64.Build.0 = Debug|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Debug|x86.Build.0 = Debug|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|Any CPU.Build.0 = Release|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x64.ActiveCfg = Release|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x64.Build.0 = Release|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x86.ActiveCfg = Release|Any CPU
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50}.Release|x86.Build.0 = Release|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x64.Build.0 = Debug|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Debug|x86.Build.0 = Debug|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x64.ActiveCfg = Release|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x64.Build.0 = Release|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x86.ActiveCfg = Release|Any CPU
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2}.Release|x86.Build.0 = Release|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x64.Build.0 = Debug|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Debug|x86.Build.0 = Debug|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x64.ActiveCfg = Release|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x64.Build.0 = Release|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x86.ActiveCfg = Release|Any CPU
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA}.Release|x86.Build.0 = Release|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x64.Build.0 = Debug|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Debug|x86.Build.0 = Debug|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x64.ActiveCfg = Release|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x64.Build.0 = Release|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x86.ActiveCfg = Release|Any CPU
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05}.Release|x86.Build.0 = Release|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x64.Build.0 = Debug|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Debug|x86.Build.0 = Debug|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x64.ActiveCfg = Release|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x64.Build.0 = Release|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x86.ActiveCfg = Release|Any CPU
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1}.Release|x86.Build.0 = Release|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x64.Build.0 = Debug|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Debug|x86.Build.0 = Debug|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x64.ActiveCfg = Release|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x64.Build.0 = Release|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x86.ActiveCfg = Release|Any CPU
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE}.Release|x86.Build.0 = Release|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x64.Build.0 = Debug|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Debug|x86.Build.0 = Debug|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x64.ActiveCfg = Release|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x64.Build.0 = Release|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x86.ActiveCfg = Release|Any CPU
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E}.Release|x86.Build.0 = Release|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x64.Build.0 = Debug|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Debug|x86.Build.0 = Debug|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|Any CPU.Build.0 = Release|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x64.ActiveCfg = Release|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x64.Build.0 = Release|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x86.ActiveCfg = Release|Any CPU
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90}.Release|x86.Build.0 = Release|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x64.Build.0 = Debug|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Debug|x86.Build.0 = Debug|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|Any CPU.Build.0 = Release|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x64.ActiveCfg = Release|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x64.Build.0 = Release|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x86.ActiveCfg = Release|Any CPU
+		{894DE066-00B0-44E6-88B9-46F91A17EE26}.Release|x86.Build.0 = Release|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x64.Build.0 = Debug|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Debug|x86.Build.0 = Debug|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x64.ActiveCfg = Release|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x64.Build.0 = Release|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x86.ActiveCfg = Release|Any CPU
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D}.Release|x86.Build.0 = Release|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x64.Build.0 = Debug|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Debug|x86.Build.0 = Debug|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|Any CPU.Build.0 = Release|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x64.ActiveCfg = Release|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x64.Build.0 = Release|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x86.ActiveCfg = Release|Any CPU
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438}.Release|x86.Build.0 = Release|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x64.Build.0 = Debug|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Debug|x86.Build.0 = Debug|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x64.ActiveCfg = Release|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x64.Build.0 = Release|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x86.ActiveCfg = Release|Any CPU
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A}.Release|x86.Build.0 = Release|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Debug|x64.Build.0 = Debug|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Debug|x86.Build.0 = Debug|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Release|Any CPU.Build.0 = Release|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Release|x64.ActiveCfg = Release|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Release|x64.Build.0 = Release|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Release|x86.ActiveCfg = Release|Any CPU
+		{95534D16-E720-4435-9867-5D3E2B288406}.Release|x86.Build.0 = Release|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x64.Build.0 = Debug|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Debug|x86.Build.0 = Debug|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x64.ActiveCfg = Release|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x64.Build.0 = Release|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x86.ActiveCfg = Release|Any CPU
+		{63A928CC-792F-400A-97D3-F455C0A78B8F}.Release|x86.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{C13EDBA9-14CB-46FE-8F9F-3ABCC1A5CD3A} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{E60ADC05-55CE-46FD-9CBF-31E31FEF79D6} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{476B2742-74FD-4009-92DE-7B1214EAF244} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{E38BD375-143D-4928-8814-924597931A07} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{B0E13EEA-7E85-4265-BC1C-AFA1526FB36D} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{31B70151-7A3F-47F9-87DE-B279E93B3915} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{D345FDA8-05A0-4141-BCEF-1A11AF01480A} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{34CCB39F-37E7-46E7-AC58-E9197F4A5380} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{34522BFF-D1D8-44A3-891E-77C6BE7C81F1} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{9C20C5AB-E609-4167-922D-0E7C7C6ED1EC} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{A21D03D7-5D69-47E7-B32C-4D7067D71B0E} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{48A3DFDD-C975-42CA-87BA-3B8BAF549E22} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{D8F56A11-8961-4BD4-8846-C5483BA500F8} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{7E619CBF-B8B4-4FF6-8A73-C259FD4B0A0F} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{52055C8F-9A92-48D4-B4F7-33F287173456} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{AACC0D65-5B5D-4D38-BC24-1FADDC1A5F0F} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{DF11316F-4166-415D-B610-01603DADFED1} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{AEC73094-8FE0-419C-A7E4-4BCC7CEF2BBC} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{A42AAAA1-C8D9-4EA9-935F-A155F8B4BEE6} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{3090F751-B421-4853-829C-C0CC5ADE3D83} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{E10A7203-BCC8-4F81-A9FB-56C241BC4B33} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{4B501200-A3FD-4F3B-B8AC-582108B13A05} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{99F7E758-9327-4A16-8AB7-72B35B1D2C92} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{04C932ED-58DA-4EB9-90CD-2835C67B9952} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{7B7FBB84-21AE-4720-90BE-F9FD22AEE803} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{9D5B4D52-7E1B-4981-8994-5288262577B2} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{06091041-72DA-4C68-8FC1-AD65E495993D} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{535E8748-EC5E-41CB-94ED-ACB8A75E46AB} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{9B71BB93-4E03-4F4A-A52C-6490E9CFD99E} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{11FB37B1-F4C9-4C4F-867E-4FD9050282C7} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{2E4394A2-9863-4B60-B9EA-906FA6C46854} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{470CD0EE-3C90-462A-B003-3403AB4558A5} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{0192C192-BE48-4BC4-8308-9497407FA054} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{DB90A8A7-6E65-4388-AA9A-4FCFFF39AF30} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{823DD383-E8EB-4CF8-84BB-0EA3D6E024C3} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{BD6F4453-AE41-4578-B3FB-9F7C4617D96C} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{47E04D89-C2F0-4339-B439-E097AD1ABC09} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{10588AC3-7F69-47F3-B58D-387ED27C9A50} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{3EEBE055-DD80-4256-B71F-48C9489E2FC2} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{F871786B-8DF5-4BA7-A5CA-D128651F69AA} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{AFBA7019-7A48-42AB-9C0B-B10D8CDC8A05} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{B634CC5E-8AC9-49EF-801F-C04AA322EEC1} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{D3A17614-4C31-455F-ADA4-0FD746C569BE} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{8AFB0927-456A-4EC9-A07F-65C15A03AA9E} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{01E8A2FA-4591-4D85-81BE-341CA3C61A90} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{894DE066-00B0-44E6-88B9-46F91A17EE26} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{0684DA04-DFBA-499D-8D07-2649C3C1068D} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{66456C7C-8CE9-4E01-95A3-399B59CA3438} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{BDF0389F-B502-4D71-8ADF-206A59F9D32A} = {15FC976B-4FFC-47E1-A047-194F21C3CA9F}
+		{95534D16-E720-4435-9867-5D3E2B288406} = {E20BC57F-1881-40B0-BEAF-338BBDA87956}
+		{63A928CC-792F-400A-97D3-F455C0A78B8F} = {E20BC57F-1881-40B0-BEAF-338BBDA87956}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {C44A91F6-58D3-4900-8D5C-60E9690D5D3B}
+	EndGlobalSection
+EndGlobal
diff --git a/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj
new file mode 100644
index 00000000000..5d67f77e3a2
--- /dev/null
+++ b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj
@@ -0,0 +1,46 @@
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <Description>CSharp Analyzers for ASP.NET Core.</Description>
+    <PackageTags>aspnetcore</PackageTags>
+
+    <!--
+      This package is for internal use only. It contains analyzers that are bundled in the .NET Core Web SDK.
+
+      We do need to pack it so it can be picked up by the Web SDK.
+    -->
+    <IsShippingPackage>false</IsShippingPackage>
+    <IsPackable>true</IsPackable>
+
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <IncludeBuildOutput>false</IncludeBuildOutput>
+    <GenerateDocumentationFile>false</GenerateDocumentationFile>
+    <NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" PrivateAssets="All" />
+  </ItemGroup>
+
+  <Target Name="PopulateNuspec" BeforeTargets="GenerateNuspec">
+
+    <PropertyGroup>
+      <NuspecProperties>
+        id=$(PackageId);
+        version=$(PackageVersion);
+        authors=$(Authors);
+        description=$(Description);
+        tags=$(PackageTags.Replace(';', ' '));
+        licenseUrl=$(PackageLicenseUrl);
+        projectUrl=$(PackageProjectUrl);
+        iconUrl=$(PackageIconUrl);
+        repositoryUrl=$(RepositoryUrl);
+        repositoryCommit=$(SourceRevisionId);
+        copyright=$(Copyright);
+
+        OutputBinary=$(OutputPath)$(AssemblyName).dll;
+        OutputSymbol=$(OutputPath)$(AssemblyName).pdb;
+      </NuspecProperties>
+    </PropertyGroup>
+  </Target>
+
+</Project>
diff --git a/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec
new file mode 100644
index 00000000000..5f9d436f73f
--- /dev/null
+++ b/src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.nuspec
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
+  <metadata>
+    <id>$id$</id>
+    <version>$version$</version>
+    <authors>$authors$</authors>
+    <requireLicenseAcceptance>true</requireLicenseAcceptance>
+    <licenseUrl>$licenseUrl$</licenseUrl>
+    <projectUrl>$projectUrl$</projectUrl>
+    <iconUrl>$iconUrl$</iconUrl>
+    <description>$description$</description>
+    <copyright>$copyright$</copyright>
+    <tags>$tags$</tags>
+    <repository type="git" url="$repositoryUrl$" commit="$repositoryCommit$" />
+    <dependencies>
+      <group targetFramework=".NETStandard1.3" />
+    </dependencies>
+  </metadata>
+
+  <files>
+    <file src="$OutputBinary$" target="analyzers\dotnet\cs\" />
+    <file src="$OutputSymbol$" target="analyzers\dotnet\cs\" />
+  </files>
+</package>
diff --git a/src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs b/src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000000..9db659780bc
--- /dev/null
+++ b/src/Analyzers/Analyzers/src/Properties/AssemblyInfo.cs
@@ -0,0 +1,6 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Analyzers.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/src/Analyzers/Analyzers/src/StartupFacts.cs b/src/Analyzers/Analyzers/src/StartupFacts.cs
new file mode 100644
index 00000000000..a267024a053
--- /dev/null
+++ b/src/Analyzers/Analyzers/src/StartupFacts.cs
@@ -0,0 +1,126 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using Microsoft.CodeAnalysis;
+
+namespace Microsoft.AspNetCore.Analyzers
+{
+    internal static class StartupFacts
+    {
+        public static bool IsStartupClass(StartupSymbols symbols, INamedTypeSymbol type)
+        {
+            if (symbols == null)
+            {
+                throw new ArgumentNullException(nameof(symbols));
+            }
+
+            if (type == null)
+            {
+                throw new ArgumentNullException(nameof(type));
+            }
+
+            // It's not good enough to just look for a method called ConfigureServices or Configure as a hueristic.
+            // ConfigureServices might not appear in trivial cases, and Configure might be named ConfigureDevelopment
+            // or something similar.
+            //
+            // Additionally, a startup class could be called anything and wired up explicitly.
+            //
+            // Since we already are analyzing the symbol it should be cheap to do a pass over the members.
+            var members = type.GetMembers();
+            for (var i = 0; i < members.Length; i++)
+            {
+                if (members[i] is IMethodSymbol method && (IsConfigureServices(symbols, method) || IsConfigure(symbols, method)))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        // Based on StartupLoader. The philosophy is that we want to do analysis only on things
+        // that would be recognized as a ConfigureServices method to avoid false positives.
+        //
+        // The ConfigureServices method follows the naming pattern `Configure{Environment?}Services` (ignoring case).
+        // The ConfigureServices method must be public.
+        // The ConfigureServices method can be instance or static.
+        // The ConfigureServices method cannot have other parameters besides IServiceCollection.
+        //
+        // The ConfigureServices method does not actually need to accept IServiceCollection
+        // but we exclude that case because a ConfigureServices method that doesn't accept an
+        // IServiceCollection can't do anything interesting to analysis.
+        public static bool IsConfigureServices(StartupSymbols symbols, IMethodSymbol symbol)
+        {
+            if (symbol == null)
+            {
+                throw new ArgumentNullException(nameof(symbol));
+            }
+
+            if (symbol.DeclaredAccessibility != Accessibility.Public)
+            {
+                return false;
+            }
+
+            if (symbol.Name == null ||
+                !symbol.Name.StartsWith(SymbolNames.ConfigureServicesMethodPrefix, StringComparison.OrdinalIgnoreCase) ||
+                !symbol.Name.EndsWith(SymbolNames.ConfigureServicesMethodSuffix, StringComparison.OrdinalIgnoreCase))
+            {
+                return false;
+            }
+
+            if (symbol.Parameters.Length != 1)
+            {
+                return false;
+            }
+
+            if (symbol.Parameters[0].Type != symbols.IServiceCollection)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        // Based on StartupLoader. The philosophy is that we want to do analysis only on things
+        // that would be recognized as a Configure method to avoid false positives.
+        //
+        // The Configure method follows the naming pattern `Configure{Environment?}` (ignoring case).
+        // The Configure method must be public.
+        // The Configure method can be instance or static.
+        // The Configure method *can* have other parameters besides IApplicationBuilder.
+        //
+        // The Configure method does not actually need to accept IApplicationBuilder
+        // but we exclude that case because a Configure method that doesn't accept an
+        // IApplicationBuilder can't do anything interesting to analysis.
+        public static bool IsConfigure(StartupSymbols symbols, IMethodSymbol symbol)
+        {
+            if (symbol == null)
+            {
+                throw new ArgumentNullException(nameof(symbol));
+            }
+
+            if (symbol.DeclaredAccessibility != Accessibility.Public)
+            {
+                return false;
+            }
+
+            if (symbol.Name == null ||
+                !symbol.Name.StartsWith(SymbolNames.ConfigureMethodPrefix, StringComparison.OrdinalIgnoreCase))
+            {
+                return false;
+            }
+
+            // IApplicationBuilder can appear in any parameter, but must appear.
+            for (var i = 0; i < symbol.Parameters.Length; i++)
+            {
+                if (symbol.Parameters[i].Type == symbols.IApplicationBuilder)
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+}
diff --git a/src/Analyzers/Analyzers/src/StartupSymbols.cs b/src/Analyzers/Analyzers/src/StartupSymbols.cs
new file mode 100644
index 00000000000..9b98302b461
--- /dev/null
+++ b/src/Analyzers/Analyzers/src/StartupSymbols.cs
@@ -0,0 +1,22 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using Microsoft.CodeAnalysis;
+
+namespace Microsoft.AspNetCore.Analyzers
+{
+    internal class StartupSymbols
+    {
+        public StartupSymbols(Compilation compilation)
+        {
+            IApplicationBuilder = compilation.GetTypeByMetadataName(SymbolNames.IApplicationBuilder.MetadataName);
+            IServiceCollection = compilation.GetTypeByMetadataName(SymbolNames.IServiceCollection.MetadataName);
+        }
+
+        public bool HasRequiredSymbols => IApplicationBuilder != null && IServiceCollection != null;
+
+        public INamedTypeSymbol IApplicationBuilder { get; }
+
+        public INamedTypeSymbol IServiceCollection { get; }
+    }
+}
diff --git a/src/Analyzers/Analyzers/src/SymbolNames.cs b/src/Analyzers/Analyzers/src/SymbolNames.cs
new file mode 100644
index 00000000000..0aff8e07384
--- /dev/null
+++ b/src/Analyzers/Analyzers/src/SymbolNames.cs
@@ -0,0 +1,26 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using Microsoft.CodeAnalysis;
+
+namespace Microsoft.AspNetCore.Analyzers
+{
+    internal static class SymbolNames
+    {
+        public const string ConfigureServicesMethodPrefix = "Configure";
+
+        public const string ConfigureServicesMethodSuffix = "Services";
+
+        public const string ConfigureMethodPrefix = "Configure";
+
+        public static class IApplicationBuilder
+        {
+            public const string MetadataName = "Microsoft.AspNetCore.Builder.IApplicationBuilder";
+        }
+
+        public static class IServiceCollection
+        {
+            public const string MetadataName = "Microsoft.Extensions.DependencyInjection.IServiceCollection";
+        }
+    }
+}
diff --git a/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
new file mode 100644
index 00000000000..85b0e4b31b5
--- /dev/null
+++ b/src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
@@ -0,0 +1,59 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Analyzer.Testing;
+using Microsoft.AspNetCore.Testing;
+using Microsoft.AspNetCore.Testing.xunit;
+using Microsoft.CodeAnalysis;
+
+namespace Microsoft.AspNetCore.Analyzers
+{
+    public abstract class AnalyzerTestBase
+    {
+        private static readonly string ProjectDirectory = GetProjectDirectory();
+
+        public TestSource Read(string source)
+        {
+            var filePath = Path.Combine(ProjectDirectory, "TestFiles", GetType().Name, source);
+            if (!File.Exists(filePath))
+            {
+                throw new FileNotFoundException($"TestFile {source} could not be found at {filePath}.", filePath);
+            }
+
+            var fileContent = File.ReadAllText(filePath);
+            return TestSource.Read(fileContent);
+        }
+
+        public Project CreateProject(string source)
+        {
+            if (!source.EndsWith(".cs"))
+            {
+                source = source + ".cs";
+            }
+
+            var read = Read(source);
+            return DiagnosticProject.Create(GetType().Assembly, new[] { read.Source, });
+        }
+
+        public Task<Compilation> CreateCompilationAsync(string source)
+        {
+            return CreateProject(source).GetCompilationAsync();
+        }
+
+        private static string GetProjectDirectory()
+        {
+            // On helix we use the published test files 
+            if (SkipOnHelixAttribute.OnHelix())
+            {
+                return AppContext.BaseDirectory;
+            }
+
+            var solutionDirectory = TestPathUtilities.GetSolutionRootDirectory("Analyzers");
+            var projectDirectory = Path.Combine(solutionDirectory, "Analyzers", "test");
+            return projectDirectory;
+        }
+    }
+}
diff --git a/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj
new file mode 100644
index 00000000000..59b34f4d466
--- /dev/null
+++ b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj
@@ -0,0 +1,30 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.0</TargetFramework>
+    <PreserveCompilationContext>true</PreserveCompilationContext>
+    <RootNamespace>Microsoft.AspNetCore.Analyzers</RootNamespace>
+    <!-- https://github.com/aspnet/AspNetCore/issues/6549 -->
+    <BuildHelixPayload>false</BuildHelixPayload>
+   </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
+    <Content Include="TestFiles\**\*.*" CopyToPublishDirectory="PreserveNewest" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\src\Microsoft.AspNetCore.Analyzers.csproj" />
+
+    <Reference Include="Microsoft.AspNetCore.Analyzer.Testing" />
+    <Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
+
+    <!--
+        These tests include startup code for most parts of our stack. This list will grow as we add more.
+    -->
+    <Reference Include="Microsoft.AspNetCore.Components.Server" />
+    <Reference Include="Microsoft.AspNetCore.Mvc" />
+    <Reference Include="Microsoft.AspNetCore.SignalR" />
+  </ItemGroup>
+
+</Project>
diff --git a/src/Analyzers/Analyzers/test/StartupFactsTest.cs b/src/Analyzers/Analyzers/test/StartupFactsTest.cs
new file mode 100644
index 00000000000..b7a25e85a38
--- /dev/null
+++ b/src/Analyzers/Analyzers/test/StartupFactsTest.cs
@@ -0,0 +1,142 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest;
+using Microsoft.CodeAnalysis;
+using Xunit;
+
+namespace Microsoft.AspNetCore.Analyzers
+{
+    public class StartupFactsTest : AnalyzerTestBase
+    {
+        [Theory]
+        [InlineData(nameof(BasicStartup), nameof(BasicStartup.ConfigureServices))]
+        [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.ConfigureDevelopmentServices))]
+        [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.configurePRODUCTIONservices))]
+        public async Task IsConfigureServices_FindsConfigureServicesMethod(string source, string methodName)
+        {
+            // Arrange
+            var compilation = await CreateCompilationAsync(source);
+            var symbols = new StartupSymbols(compilation);
+
+            var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single();
+            var methods = type.GetMembers(methodName).Cast<IMethodSymbol>();
+
+            foreach (var method in methods)
+            {
+                // Act
+                var result = StartupFacts.IsConfigureServices(symbols, method);
+
+                // Assert
+                Assert.True(result);
+            }
+        }
+
+        [Theory]
+        [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.ConfigureServices))]
+        [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.ConfigureSrvces))]
+
+        // This is an interesting case where a method follows both naming conventions.
+        [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.ConfigureDevelopmentServices2))]
+        public async Task IsConfigureServices_RejectsNonConfigureServicesMethod(string source, string methodName)
+        {
+            // Arrange
+            var compilation = await CreateCompilationAsync(source);
+            var symbols = new StartupSymbols(compilation);
+
+            var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single();
+            var methods = type.GetMembers(methodName).Cast<IMethodSymbol>();
+
+            foreach (var method in methods)
+            {
+                // Act
+                var result = StartupFacts.IsConfigureServices(symbols, method);
+
+                // Assert
+                Assert.False(result);
+            }
+        }
+
+        [Theory]
+        [InlineData(nameof(BasicStartup), nameof(BasicStartup.Configure))]
+        [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.configurePRODUCTION))]
+        [InlineData(nameof(EnvironmentStartup), nameof(EnvironmentStartup.ConfigureDevelopmentServices2))]
+        public async Task IsConfigure_FindsConfigureMethod(string source, string methodName)
+        {
+            // Arrange
+            var compilation = await CreateCompilationAsync(source);
+            var symbols = new StartupSymbols(compilation);
+
+            var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single();
+            var methods = type.GetMembers(methodName).Cast<IMethodSymbol>();
+
+            foreach (var method in methods)
+            {
+                // Act
+                var result = StartupFacts.IsConfigure(symbols, method);
+
+                // Assert
+                Assert.True(result);
+            }
+        }
+
+        [Theory]
+        [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.Configure))]
+        [InlineData(nameof(NotAStartupClass), nameof(NotAStartupClass.Configur))]
+        public async Task IsConfigure_RejectsNonConfigureMethod(string source, string methodName)
+        {
+            // Arrange
+            var compilation = await CreateCompilationAsync(source);
+            var symbols = new StartupSymbols(compilation);
+
+            var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single();
+            var methods = type.GetMembers(methodName).Cast<IMethodSymbol>();
+
+            foreach (var method in methods)
+            {
+                // Act
+                var result = StartupFacts.IsConfigure(symbols, method);
+
+                // Assert
+                Assert.False(result);
+            }
+        }
+
+        [Theory]
+        [InlineData(nameof(BasicStartup))]
+        [InlineData(nameof(EnvironmentStartup))]
+        public async Task IsStartupClass_FindsStartupClass(string source)
+        {
+            // Arrange
+            var compilation = await CreateCompilationAsync(source);
+            var symbols = new StartupSymbols(compilation);
+
+            var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single();
+
+            // Act
+            var result = StartupFacts.IsStartupClass(symbols, type);
+
+            // Assert
+            Assert.True(result);
+        }
+
+        [Theory]
+        [InlineData(nameof(NotAStartupClass))]
+        public async Task IsStartupClass_RejectsNotStartupClass(string source)
+        {
+            // Arrange
+            var compilation = await CreateCompilationAsync(source);
+            var symbols = new StartupSymbols(compilation);
+
+            var type = (INamedTypeSymbol)compilation.GetSymbolsWithName(source).Single();
+
+            // Act
+            var result = StartupFacts.IsStartupClass(symbols, type);
+
+            // Assert
+            Assert.False(result);
+        }
+    }
+}
diff --git a/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs
new file mode 100644
index 00000000000..7447e5e001e
--- /dev/null
+++ b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/BasicStartup.cs
@@ -0,0 +1,19 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest
+{
+    public class BasicStartup
+    {
+        public void ConfigureServices(IServiceCollection services)
+        {
+        }
+
+        public void Configure(IApplicationBuilder app)
+        {
+        }
+    }
+}
diff --git a/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs
new file mode 100644
index 00000000000..434a451277d
--- /dev/null
+++ b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/EnvironmentStartup.cs
@@ -0,0 +1,30 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest
+{
+    public class EnvironmentStartup
+    {
+        public void ConfigureDevelopmentServices(IServiceCollection services)
+        {
+        }
+
+        public void configurePRODUCTIONservices(IServiceCollection services)
+        {
+        }
+
+        // Yes, this is technically a Configure method - if you have an Enviroment called DevelopmentServices2.
+        public static void ConfigureDevelopmentServices2(IConfiguration configuration, ILogger logger, IApplicationBuilder app)
+        {
+        }
+
+        public static void configurePRODUCTION(IConfiguration configuration, ILogger logger, IApplicationBuilder app)
+        {
+        }
+    }
+}
diff --git a/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs
new file mode 100644
index 00000000000..74948f1e72d
--- /dev/null
+++ b/src/Analyzers/Analyzers/test/TestFiles/StartupFactsTest/NotAStartupClass.cs
@@ -0,0 +1,47 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Microsoft.AspNetCore.Analyzers.TestFiles.StartupFactsTest
+{
+    public class NotAStartupClass
+    {
+        // no args - not a ConfigureServices (technically it is, but we exclude this case).
+        public void ConfigureServices()
+        {
+        }
+
+        // extra arg - not a ConfigureServices
+        public void ConfigureServices(IServiceCollection services, string x)
+        {
+        }
+
+        // wrong name - not a ConfigureServices
+        public void ConfigureSrvces(IServiceCollection services)
+        {
+        }
+
+        // non-public - not a ConfigureServices
+        internal void ConfigureServices(IServiceCollection services)
+        {
+        }
+
+        // no IApplicationBuilder - not a Configure
+        public void Configure(IConfiguration configuration)
+        {
+        }
+
+        // wrong prefix - not a Configure
+        public void Configur(IApplicationBuilder app)
+        {
+        }
+
+        // non-public - not a Configure
+        internal void Configure(IApplicationBuilder app)
+        {
+        }
+    }
+}
diff --git a/src/Analyzers/build.cmd b/src/Analyzers/build.cmd
new file mode 100644
index 00000000000..033fe6f6146
--- /dev/null
+++ b/src/Analyzers/build.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+SET RepoRoot=%~dp0..\..
+%RepoRoot%\build.cmd -projects %~dp0\**\*.*proj %*
diff --git a/src/Analyzers/build.sh b/src/Analyzers/build.sh
new file mode 100644
index 00000000000..7046bb98a0f
--- /dev/null
+++ b/src/Analyzers/build.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+repo_root="$DIR/../.."
+"$repo_root/build.sh" --projects "$DIR/**/*.*proj" "$@"
diff --git a/src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj b/src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj
new file mode 100644
index 00000000000..81c027292be
--- /dev/null
+++ b/src/Analyzers/shared/FeatureDetection/Microsoft.AspNetCore.Analyzers.FeatureDetection.Sources.csproj
@@ -0,0 +1,53 @@
+<Project>
+
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
+
+  <PropertyGroup>
+    <!-- This does not represent the TFM for the code. It's only here because /t:Pack requires it. -->
+    <TargetFramework>netstandard1.0</TargetFramework>
+    <IsPackable>true</IsPackable>
+    <IsShipping>false</IsShipping>
+    <NoBuild>true</NoBuild>
+    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <IncludeBuildOutput>false</IncludeBuildOutput>
+    <IncludeSymbols>false</IncludeSymbols>
+    <ContentTargetFolders>contentFiles</ContentTargetFolders>
+    <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
+    <DefaultExcludeItems>$(DefaultExcludeItems);$(BaseOutputPath);$(BaseIntermediateOutputPath);</DefaultExcludeItems>
+    <NoWarn>$(NoWarn);NU5105;CS8021</NoWarn>
+    <IsProjectReferenceProvider>false</IsProjectReferenceProvider>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Compile Include="$(MSBuildProjectDirectory)\**\*.cs" Exclude="$(DefaultExcludeItems)">
+      <Pack>true</Pack>
+      <PackagePath>$(ContentTargetFolders)\cs\netstandard1.0\shared\</PackagePath>
+    </Compile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Include="../../Analyzers/src/StartupFacts.cs">
+      <Link>%(FileName)%(Extension)</Link>
+      <Pack>true</Pack>
+      <PackagePath>$(ContentTargetFolders)\cs\netstandard1.0\shared\</PackagePath>
+    </Compile>
+    <Compile Include="../../Analyzers/src/StartupSymbols.cs">
+      <Link>%(FileName)%(Extension)</Link>
+      <Pack>true</Pack>
+      <PackagePath>$(ContentTargetFolders)\cs\netstandard1.0\shared\</PackagePath>
+    </Compile>
+    <Compile Include="../../Analyzers/src/SymbolNames.cs">
+      <Link>%(FileName)%(Extension)</Link>
+      <Pack>true</Pack>
+      <PackagePath>$(ContentTargetFolders)\cs\netstandard1.0\shared\</PackagePath>
+    </Compile>
+  </ItemGroup>
+
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
+
+  <!-- This project does not produce a binary. Disable the compiler. -->
+  <Target Name="Compile" />
+  <Target Name="CopyFilesToOutputDirectory" />
+</Project>
diff --git a/src/Analyzers/startvs.cmd b/src/Analyzers/startvs.cmd
new file mode 100644
index 00000000000..9f4a9fdee99
--- /dev/null
+++ b/src/Analyzers/startvs.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+
+%~dp0..\..\startvs.cmd %~dp0Analyzers.sln
diff --git a/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj b/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj
index 3ad086e33b1..abd1e5e519c 100644
--- a/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj
+++ b/src/Components/Analyzers/src/Microsoft.AspNetCore.Components.Analyzers.csproj
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard1.3</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
     <IncludeBuildOutput>false</IncludeBuildOutput>
     <NoPackageAnalysis>true</NoPackageAnalysis>
     <GenerateDocumentationFile>false</GenerateDocumentationFile>
diff --git a/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj b/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj
index 83e63858149..1e92917e80e 100644
--- a/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj
+++ b/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj
@@ -5,7 +5,7 @@
      <!-- This package is for internal use only. It contains analyzers that are bundled in the .NET Core WebSDK. -->
     <IsShippingPackage>false</IsShippingPackage>
 
-    <TargetFramework>netstandard1.3</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
     <IncludeBuildOutput>false</IncludeBuildOutput>
     <GenerateDocumentationFile>false</GenerateDocumentationFile>
     <NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
diff --git a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs
index 9d2ff14ba1d..12dc164ba9b 100644
--- a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs
+++ b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalysisContext.cs
@@ -7,6 +7,7 @@ namespace Microsoft.AspNetCore.Analyzers
 {
     internal class StartupAnalysisContext
     {
+#pragma warning disable RS1012 // Start action has no registered actions.
         public StartupAnalysisContext(OperationBlockStartAnalysisContext operationBlockStartAnalysisContext, StartupSymbols startupSymbols)
         {
             OperationBlockStartAnalysisContext = operationBlockStartAnalysisContext;
@@ -16,5 +17,6 @@ namespace Microsoft.AspNetCore.Analyzers
         public OperationBlockStartAnalysisContext OperationBlockStartAnalysisContext { get; }
 
         public StartupSymbols StartupSymbols { get; }
+#pragma warning restore RS1012 // Start action has no registered actions.
     }
 }
diff --git a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs
index be2a9ebb880..983ad54a504 100644
--- a/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs
+++ b/src/Mvc/Mvc.Analyzers/src/Startup/StartupAnalzyer.cs
@@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore.Analyzers
                 OnConfigureMethodFound(method);
             }
         }
-
+#pragma warning disable RS1012 // Start action has no registered actions.
         private bool IsStartupFile(OperationBlockStartAnalysisContext context)
         {
             foreach (var location in context.OwningSymbol.Locations)
@@ -144,5 +144,6 @@ namespace Microsoft.AspNetCore.Analyzers
 
             return false;
         }
+#pragma warning restore RS1012 // Start action has no registered actions.
     }
 }
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs
index d138d6afb15..18b82c2ae1b 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs
@@ -37,6 +37,8 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
             _diagnostic = diagnostic;
         }
 
+        public override string EquivalenceKey => _diagnostic.Location.ToString();
+
         public override string Title => "Add ProducesResponseType attributes.";
 
         protected override async Task<Document> GetChangedDocumentAsync(CancellationToken cancellationToken)
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs
index a5a2a626137..bd9734e0b2a 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixProvider.cs
@@ -17,6 +17,8 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
             ApiDiagnosticDescriptors.API1000_ActionReturnsUndocumentedStatusCode.Id,
             ApiDiagnosticDescriptors.API1001_ActionReturnsUndocumentedSuccessResult.Id);
 
+        public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer;
+
         public sealed override Task RegisterCodeFixesAsync(CodeFixContext context)
         {
             if (context.Diagnostics.Length == 0)
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj b/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj
index ad062a74033..f5efb230a26 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj
+++ b/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj
@@ -5,7 +5,7 @@
      <!-- This package is for internal use only. It contains analyzers that are bundled in the .NET Core WebSDK. -->
     <IsShippingPackage>false</IsShippingPackage>
 
-    <TargetFramework>netstandard1.3</TargetFramework>
+    <TargetFramework>netstandard2.0</TargetFramework>
     <IncludeBuildOutput>false</IncludeBuildOutput>
     <GenerateDocumentationFile>false</GenerateDocumentationFile>
     <NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
-- 
GitLab