Files
ColaFlow/colaflow-api/ColaFlow.sln
Yaojia Wang 0857a8ba2a feat(backend): Implement MCP API Key Management System (Story 5.2)
Implemented comprehensive API Key authentication and management system
for MCP Server to ensure only authorized AI agents can access ColaFlow.

## Domain Layer
- Created McpApiKey aggregate root with BCrypt password hashing
- Implemented ApiKeyPermissions value object (read/write, resource/tool filtering)
- Added ApiKeyStatus enum (Active, Revoked)
- Created domain events (ApiKeyCreatedEvent, ApiKeyRevokedEvent)
- API key format: cola_<36 random chars> (cryptographically secure)
- Default expiration: 90 days

## Application Layer
- Implemented McpApiKeyService with full CRUD operations
- Created DTOs for API key creation, validation, and updates
- Validation logic: hash verification, expiration check, IP whitelist
- Usage tracking: last_used_at, usage_count

## Infrastructure Layer
- Created McpDbContext with PostgreSQL configuration
- EF Core entity configuration with JSONB for permissions/IP whitelist
- Implemented McpApiKeyRepository with prefix-based lookup
- Database migration: mcp_api_keys table with indexes
- Created McpApiKeyAuthenticationMiddleware for API key validation
- Middleware validates Authorization: Bearer <api_key> header

## API Layer
- Created McpApiKeysController with REST endpoints:
  - POST /api/mcp/keys - Create API Key (returns plain key once!)
  - GET /api/mcp/keys - List tenant's API Keys
  - GET /api/mcp/keys/{id} - Get API Key details
  - PATCH /api/mcp/keys/{id}/metadata - Update name/description
  - PATCH /api/mcp/keys/{id}/permissions - Update permissions
  - DELETE /api/mcp/keys/{id} - Revoke API Key
- Requires JWT authentication (not API key auth)

## Testing
- Created 17 unit tests for McpApiKey entity
- Created 7 unit tests for ApiKeyPermissions value object
- All 49 tests passing (including existing MCP tests)
- Test coverage > 80% for Domain layer

## Security Features
- BCrypt hashing with work factor 12
- API key shown only once at creation (never logged)
- Key prefix lookup for fast validation (indexed)
- Multi-tenant isolation (tenant_id filter)
- IP whitelist support
- Permission scopes (read/write, resources, tools)
- Automatic expiration after 90 days

## Database Schema
Table: mcp.mcp_api_keys
- Indexes: key_prefix (unique), tenant_id, tenant_user, expires_at, status
- JSONB columns for permissions and IP whitelist
- Soft delete via revoked_at

## Integration
- Updated Program.cs to register MCP module with configuration
- Added MCP DbContext migration in development mode
- Authentication middleware runs before MCP protocol handler

Changes:
- Created 31 new files (2321+ lines)
- Domain: 6 files (McpApiKey, events, repository, value objects)
- Application: 9 files (service, DTOs)
- Infrastructure: 8 files (DbContext, repository, middleware, migration)
- API: 1 file (McpApiKeysController)
- Tests: 2 files (17 + 7 unit tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 18:40:56 +01:00

381 lines
30 KiB
Plaintext

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Application", "src\ColaFlow.Application\ColaFlow.Application.csproj", "{6ECE123E-3FD9-4146-B44E-B1332FAFC010}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Infrastructure", "src\ColaFlow.Infrastructure\ColaFlow.Infrastructure.csproj", "{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.API", "src\ColaFlow.API\ColaFlow.API.csproj", "{AED08D6B-D0A2-4B67-BF43-D8244C424145}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Domain.Tests", "tests\ColaFlow.Domain.Tests\ColaFlow.Domain.Tests.csproj", "{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Application.Tests", "tests\ColaFlow.Application.Tests\ColaFlow.Application.Tests.csproj", "{73C1CF97-527D-427B-842B-C4CBED3429B5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.IntegrationTests", "tests\ColaFlow.IntegrationTests\ColaFlow.IntegrationTests.csproj", "{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{C8E42992-5E42-0C2B-DBFE-AA848D06431C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Shared.Kernel", "src\Shared\ColaFlow.Shared.Kernel\ColaFlow.Shared.Kernel.csproj", "{EAF2C884-939C-428D-981F-CDABE5D42852}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{EC447DCF-ABFA-6E24-52A5-D7FD48A5C558}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProjectManagement", "ProjectManagement", "{CA0D0B73-F1EC-F12F-54BA-8DF761F62CA4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.ProjectManagement.Domain", "src\Modules\ProjectManagement\ColaFlow.Modules.ProjectManagement.Domain\ColaFlow.Modules.ProjectManagement.Domain.csproj", "{1D172B0D-9D60-4366-999B-E2D186B55D46}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.ProjectManagement.Application", "src\Modules\ProjectManagement\ColaFlow.Modules.ProjectManagement.Application\ColaFlow.Modules.ProjectManagement.Application.csproj", "{95343C64-EF22-40D0-ABA6-489CE65AF11F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.ProjectManagement.Infrastructure", "src\Modules\ProjectManagement\ColaFlow.Modules.ProjectManagement.Infrastructure\ColaFlow.Modules.ProjectManagement.Infrastructure.csproj", "{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.ProjectManagement.Contracts", "src\Modules\ProjectManagement\ColaFlow.Modules.ProjectManagement.Contracts\ColaFlow.Modules.ProjectManagement.Contracts.csproj", "{EF0BCA60-10E6-48AF-807D-416D262B85E3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.ArchitectureTests", "tests\ColaFlow.ArchitectureTests\ColaFlow.ArchitectureTests.csproj", "{A059FDA9-5454-49A8-A025-0FC5130574EE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Identity", "Identity", "{0EC62A1A-9858-3A60-8A0C-FC9AACFA2EC7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Identity.Domain", "src\Modules\Identity\ColaFlow.Modules.Identity.Domain\ColaFlow.Modules.Identity.Domain.csproj", "{1647C962-6F4B-4AF4-8608-11B784B8C59E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Identity.Application", "src\Modules\Identity\ColaFlow.Modules.Identity.Application\ColaFlow.Modules.Identity.Application.csproj", "{97193F5A-5F0D-48C2-8A94-9768B624437D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Identity.Infrastructure", "src\Modules\Identity\ColaFlow.Modules.Identity.Infrastructure\ColaFlow.Modules.Identity.Infrastructure.csproj", "{775AF575-9989-4D7C-BD3B-18262CD9283F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{D7DC9B74-6BC4-2470-2038-1E57C2DCB73B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Identity", "Identity", "{ACB2D19B-6984-27D8-539C-F209B7C78BA5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Identity.Domain.Tests", "tests\Modules\Identity\ColaFlow.Modules.Identity.Domain.Tests\ColaFlow.Modules.Identity.Domain.Tests.csproj", "{18EA8D3B-8570-4D51-B410-580F0782A61C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Identity.Infrastructure.Tests", "tests\Modules\Identity\ColaFlow.Modules.Identity.Infrastructure.Tests\ColaFlow.Modules.Identity.Infrastructure.Tests.csproj", "{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Identity.IntegrationTests", "tests\Modules\Identity\ColaFlow.Modules.Identity.IntegrationTests\ColaFlow.Modules.Identity.IntegrationTests.csproj", "{86D74CD1-A0F7-467B-899B-82641451A8C4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Mcp.Application", "src\Modules\Mcp\ColaFlow.Modules.Mcp.Application\ColaFlow.Modules.Mcp.Application.csproj", "{D07B22E9-2C46-5425-4076-2E0D5E128488}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp", "Mcp", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Mcp.Contracts", "src\Modules\Mcp\ColaFlow.Modules.Mcp.Contracts\ColaFlow.Modules.Mcp.Contracts.csproj", "{9B021F2B-646E-3639-D365-19BA2E4693D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Mcp.Domain", "src\Modules\Mcp\ColaFlow.Modules.Mcp.Domain\ColaFlow.Modules.Mcp.Domain.csproj", "{C26E375D-DE7C-134E-9846-F87FA19AFEAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColaFlow.Modules.Mcp.Infrastructure", "src\Modules\Mcp\ColaFlow.Modules.Mcp.Infrastructure\ColaFlow.Modules.Mcp.Infrastructure.csproj", "{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}"
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
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Debug|x64.ActiveCfg = Debug|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Debug|x64.Build.0 = Debug|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Debug|x86.ActiveCfg = Debug|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Debug|x86.Build.0 = Debug|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Release|Any CPU.Build.0 = Release|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Release|x64.ActiveCfg = Release|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Release|x64.Build.0 = Release|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Release|x86.ActiveCfg = Release|Any CPU
{6ECE123E-3FD9-4146-B44E-B1332FAFC010}.Release|x86.Build.0 = Release|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Debug|x64.ActiveCfg = Debug|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Debug|x64.Build.0 = Debug|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Debug|x86.ActiveCfg = Debug|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Debug|x86.Build.0 = Debug|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Release|Any CPU.Build.0 = Release|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Release|x64.ActiveCfg = Release|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Release|x64.Build.0 = Release|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Release|x86.ActiveCfg = Release|Any CPU
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494}.Release|x86.Build.0 = Release|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Debug|x64.ActiveCfg = Debug|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Debug|x64.Build.0 = Debug|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Debug|x86.ActiveCfg = Debug|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Debug|x86.Build.0 = Debug|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Release|Any CPU.Build.0 = Release|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Release|x64.ActiveCfg = Release|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Release|x64.Build.0 = Release|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Release|x86.ActiveCfg = Release|Any CPU
{AED08D6B-D0A2-4B67-BF43-D8244C424145}.Release|x86.Build.0 = Release|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Debug|x64.ActiveCfg = Debug|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Debug|x64.Build.0 = Debug|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Debug|x86.ActiveCfg = Debug|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Debug|x86.Build.0 = Debug|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Release|Any CPU.Build.0 = Release|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Release|x64.ActiveCfg = Release|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Release|x64.Build.0 = Release|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Release|x86.ActiveCfg = Release|Any CPU
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E}.Release|x86.Build.0 = Release|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Debug|x64.ActiveCfg = Debug|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Debug|x64.Build.0 = Debug|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Debug|x86.ActiveCfg = Debug|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Debug|x86.Build.0 = Debug|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Release|Any CPU.Build.0 = Release|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Release|x64.ActiveCfg = Release|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Release|x64.Build.0 = Release|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Release|x86.ActiveCfg = Release|Any CPU
{73C1CF97-527D-427B-842B-C4CBED3429B5}.Release|x86.Build.0 = Release|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Debug|x64.ActiveCfg = Debug|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Debug|x64.Build.0 = Debug|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Debug|x86.ActiveCfg = Debug|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Debug|x86.Build.0 = Debug|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Release|Any CPU.Build.0 = Release|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Release|x64.ActiveCfg = Release|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Release|x64.Build.0 = Release|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Release|x86.ActiveCfg = Release|Any CPU
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E}.Release|x86.Build.0 = Release|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Debug|x64.ActiveCfg = Debug|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Debug|x64.Build.0 = Debug|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Debug|x86.ActiveCfg = Debug|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Debug|x86.Build.0 = Debug|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Release|Any CPU.Build.0 = Release|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Release|x64.ActiveCfg = Release|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Release|x64.Build.0 = Release|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Release|x86.ActiveCfg = Release|Any CPU
{EAF2C884-939C-428D-981F-CDABE5D42852}.Release|x86.Build.0 = Release|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Debug|x64.ActiveCfg = Debug|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Debug|x64.Build.0 = Debug|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Debug|x86.ActiveCfg = Debug|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Debug|x86.Build.0 = Debug|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Release|Any CPU.Build.0 = Release|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Release|x64.ActiveCfg = Release|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Release|x64.Build.0 = Release|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Release|x86.ActiveCfg = Release|Any CPU
{1D172B0D-9D60-4366-999B-E2D186B55D46}.Release|x86.Build.0 = Release|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Debug|x64.ActiveCfg = Debug|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Debug|x64.Build.0 = Debug|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Debug|x86.ActiveCfg = Debug|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Debug|x86.Build.0 = Debug|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Release|Any CPU.Build.0 = Release|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Release|x64.ActiveCfg = Release|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Release|x64.Build.0 = Release|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Release|x86.ActiveCfg = Release|Any CPU
{95343C64-EF22-40D0-ABA6-489CE65AF11F}.Release|x86.Build.0 = Release|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Debug|x64.ActiveCfg = Debug|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Debug|x64.Build.0 = Debug|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Debug|x86.ActiveCfg = Debug|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Debug|x86.Build.0 = Debug|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Release|Any CPU.Build.0 = Release|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Release|x64.ActiveCfg = Release|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Release|x64.Build.0 = Release|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Release|x86.ActiveCfg = Release|Any CPU
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29}.Release|x86.Build.0 = Release|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Debug|x64.ActiveCfg = Debug|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Debug|x64.Build.0 = Debug|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Debug|x86.ActiveCfg = Debug|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Debug|x86.Build.0 = Debug|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Release|Any CPU.Build.0 = Release|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Release|x64.ActiveCfg = Release|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Release|x64.Build.0 = Release|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Release|x86.ActiveCfg = Release|Any CPU
{EF0BCA60-10E6-48AF-807D-416D262B85E3}.Release|x86.Build.0 = Release|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Debug|x64.ActiveCfg = Debug|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Debug|x64.Build.0 = Debug|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Debug|x86.ActiveCfg = Debug|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Debug|x86.Build.0 = Debug|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Release|Any CPU.Build.0 = Release|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Release|x64.ActiveCfg = Release|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Release|x64.Build.0 = Release|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Release|x86.ActiveCfg = Release|Any CPU
{A059FDA9-5454-49A8-A025-0FC5130574EE}.Release|x86.Build.0 = Release|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Debug|x64.ActiveCfg = Debug|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Debug|x64.Build.0 = Debug|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Debug|x86.ActiveCfg = Debug|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Debug|x86.Build.0 = Debug|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Release|Any CPU.Build.0 = Release|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Release|x64.ActiveCfg = Release|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Release|x64.Build.0 = Release|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Release|x86.ActiveCfg = Release|Any CPU
{1647C962-6F4B-4AF4-8608-11B784B8C59E}.Release|x86.Build.0 = Release|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Debug|x64.ActiveCfg = Debug|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Debug|x64.Build.0 = Debug|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Debug|x86.ActiveCfg = Debug|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Debug|x86.Build.0 = Debug|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Release|Any CPU.Build.0 = Release|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Release|x64.ActiveCfg = Release|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Release|x64.Build.0 = Release|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Release|x86.ActiveCfg = Release|Any CPU
{97193F5A-5F0D-48C2-8A94-9768B624437D}.Release|x86.Build.0 = Release|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Debug|x64.ActiveCfg = Debug|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Debug|x64.Build.0 = Debug|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Debug|x86.ActiveCfg = Debug|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Debug|x86.Build.0 = Debug|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Release|Any CPU.Build.0 = Release|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Release|x64.ActiveCfg = Release|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Release|x64.Build.0 = Release|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Release|x86.ActiveCfg = Release|Any CPU
{775AF575-9989-4D7C-BD3B-18262CD9283F}.Release|x86.Build.0 = Release|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Debug|x64.ActiveCfg = Debug|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Debug|x64.Build.0 = Debug|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Debug|x86.ActiveCfg = Debug|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Debug|x86.Build.0 = Debug|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Release|Any CPU.Build.0 = Release|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Release|x64.ActiveCfg = Release|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Release|x64.Build.0 = Release|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Release|x86.ActiveCfg = Release|Any CPU
{18EA8D3B-8570-4D51-B410-580F0782A61C}.Release|x86.Build.0 = Release|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Debug|x64.ActiveCfg = Debug|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Debug|x64.Build.0 = Debug|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Debug|x86.ActiveCfg = Debug|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Debug|x86.Build.0 = Debug|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Release|Any CPU.Build.0 = Release|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Release|x64.ActiveCfg = Release|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Release|x64.Build.0 = Release|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Release|x86.ActiveCfg = Release|Any CPU
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA}.Release|x86.Build.0 = Release|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Debug|x64.ActiveCfg = Debug|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Debug|x64.Build.0 = Debug|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Debug|x86.ActiveCfg = Debug|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Debug|x86.Build.0 = Debug|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Release|Any CPU.Build.0 = Release|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Release|x64.ActiveCfg = Release|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Release|x64.Build.0 = Release|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Release|x86.ActiveCfg = Release|Any CPU
{86D74CD1-A0F7-467B-899B-82641451A8C4}.Release|x86.Build.0 = Release|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Debug|x64.ActiveCfg = Debug|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Debug|x64.Build.0 = Debug|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Debug|x86.ActiveCfg = Debug|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Debug|x86.Build.0 = Debug|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Release|Any CPU.Build.0 = Release|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Release|x64.ActiveCfg = Release|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Release|x64.Build.0 = Release|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Release|x86.ActiveCfg = Release|Any CPU
{D07B22E9-2C46-5425-4076-2E0D5E128488}.Release|x86.Build.0 = Release|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Debug|x64.ActiveCfg = Debug|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Debug|x64.Build.0 = Debug|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Debug|x86.ActiveCfg = Debug|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Debug|x86.Build.0 = Debug|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Release|Any CPU.Build.0 = Release|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Release|x64.ActiveCfg = Release|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Release|x64.Build.0 = Release|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Release|x86.ActiveCfg = Release|Any CPU
{9B021F2B-646E-3639-D365-19BA2E4693D7}.Release|x86.Build.0 = Release|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Debug|x64.ActiveCfg = Debug|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Debug|x64.Build.0 = Debug|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Debug|x86.ActiveCfg = Debug|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Debug|x86.Build.0 = Debug|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Release|Any CPU.Build.0 = Release|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Release|x64.ActiveCfg = Release|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Release|x64.Build.0 = Release|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Release|x86.ActiveCfg = Release|Any CPU
{C26E375D-DE7C-134E-9846-F87FA19AFEAD}.Release|x86.Build.0 = Release|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Debug|Any CPU.Build.0 = Debug|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Debug|x64.ActiveCfg = Debug|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Debug|x64.Build.0 = Debug|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Debug|x86.ActiveCfg = Debug|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Debug|x86.Build.0 = Debug|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Release|Any CPU.ActiveCfg = Release|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Release|Any CPU.Build.0 = Release|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Release|x64.ActiveCfg = Release|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Release|x64.Build.0 = Release|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Release|x86.ActiveCfg = Release|Any CPU
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{6ECE123E-3FD9-4146-B44E-B1332FAFC010} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{D6E0C1D8-CAA7-4F95-88E1-C253B0390494} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{AED08D6B-D0A2-4B67-BF43-D8244C424145} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{931322BD-B4BD-436A-BEE8-FCF95FF4A09E} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{73C1CF97-527D-427B-842B-C4CBED3429B5} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{614DB4A0-24C4-457F-82BB-CE077BCA6E4E} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{C8E42992-5E42-0C2B-DBFE-AA848D06431C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{EAF2C884-939C-428D-981F-CDABE5D42852} = {C8E42992-5E42-0C2B-DBFE-AA848D06431C}
{EC447DCF-ABFA-6E24-52A5-D7FD48A5C558} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{CA0D0B73-F1EC-F12F-54BA-8DF761F62CA4} = {EC447DCF-ABFA-6E24-52A5-D7FD48A5C558}
{1D172B0D-9D60-4366-999B-E2D186B55D46} = {CA0D0B73-F1EC-F12F-54BA-8DF761F62CA4}
{95343C64-EF22-40D0-ABA6-489CE65AF11F} = {CA0D0B73-F1EC-F12F-54BA-8DF761F62CA4}
{2AC4CB72-078B-44D7-A3E6-B1651F1B8C29} = {CA0D0B73-F1EC-F12F-54BA-8DF761F62CA4}
{EF0BCA60-10E6-48AF-807D-416D262B85E3} = {CA0D0B73-F1EC-F12F-54BA-8DF761F62CA4}
{A059FDA9-5454-49A8-A025-0FC5130574EE} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{0EC62A1A-9858-3A60-8A0C-FC9AACFA2EC7} = {EC447DCF-ABFA-6E24-52A5-D7FD48A5C558}
{1647C962-6F4B-4AF4-8608-11B784B8C59E} = {0EC62A1A-9858-3A60-8A0C-FC9AACFA2EC7}
{97193F5A-5F0D-48C2-8A94-9768B624437D} = {0EC62A1A-9858-3A60-8A0C-FC9AACFA2EC7}
{775AF575-9989-4D7C-BD3B-18262CD9283F} = {0EC62A1A-9858-3A60-8A0C-FC9AACFA2EC7}
{D7DC9B74-6BC4-2470-2038-1E57C2DCB73B} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{ACB2D19B-6984-27D8-539C-F209B7C78BA5} = {D7DC9B74-6BC4-2470-2038-1E57C2DCB73B}
{18EA8D3B-8570-4D51-B410-580F0782A61C} = {ACB2D19B-6984-27D8-539C-F209B7C78BA5}
{6401A1D7-2E1E-4FE1-B2F6-3DC82C2948DA} = {ACB2D19B-6984-27D8-539C-F209B7C78BA5}
{86D74CD1-A0F7-467B-899B-82641451A8C4} = {ACB2D19B-6984-27D8-539C-F209B7C78BA5}
{D07B22E9-2C46-5425-4076-2E0D5E128488} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {EC447DCF-ABFA-6E24-52A5-D7FD48A5C558}
{9B021F2B-646E-3639-D365-19BA2E4693D7} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{C26E375D-DE7C-134E-9846-F87FA19AFEAD} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{31D96779-9DDF-04D6-B22B-6F0FBCB6E846} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3A6D2E28-927B-49D8-BABA-B5D2FC6D416E}
EndGlobalSection
EndGlobal