feat(advisory-ai): Add deployment guide, Dockerfile, and Helm chart for on-prem packaging
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled

- Introduced a comprehensive deployment guide for AdvisoryAI, detailing local builds, remote inference toggles, and scaling guidance.
- Created a multi-role Dockerfile for building WebService and Worker images.
- Added a docker-compose file for local and offline deployment.
- Implemented a Helm chart for Kubernetes deployment with persistence and remote inference options.
- Established a new API endpoint `/advisories/summary` for deterministic summaries of observations and linksets.
- Introduced a JSON schema for risk profiles and a validator to ensure compliance with the schema.
- Added unit tests for the risk profile validator to ensure functionality and error handling.
This commit is contained in:
StellaOps Bot
2025-11-23 00:35:33 +02:00
parent 2e89a92d92
commit 8d78dd219b
33 changed files with 1254 additions and 259 deletions

View File

@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using StellaOps.AdvisoryAI.Guardrails;
@@ -78,13 +79,15 @@ public sealed class AdvisoryGuardrailOptionsBindingTests
public FakeHostEnvironment(string contentRoot)
{
ContentRootPath = contentRoot;
ContentRootFileProvider = new PhysicalFileProvider(contentRoot);
}
public string EnvironmentName { get; set; } = Environments.Development;
public string ApplicationName { get; set; } = "StellaOps.AdvisoryAI.Tests";
public string ContentRootPath { get; set; }
= string.Empty;
public string ContentRootPath { get; set; } = string.Empty;
public IFileProvider ContentRootFileProvider { get; set; }
}
}

View File

@@ -17,7 +17,7 @@ public sealed class EvidenceTelemetryTests
using var listener = CreateListener((instrument, value, tags) =>
{
measurements.Add((instrument.Name, value, tags.ToList()));
measurements.Add((instrument.Name, value, tags.ToArray()));
});
EvidenceTelemetry.RecordChunkOutcome("tenant-a", "success", chunkCount: 3, truncated: true);
@@ -38,7 +38,7 @@ public sealed class EvidenceTelemetryTests
using var listener = CreateListener((instrument, value, tags) =>
{
measurements.Add((instrument.Name, value, tags.ToList()));
measurements.Add((instrument.Name, value, tags.ToArray()));
});
var now = DateTimeOffset.UtcNow;
@@ -74,6 +74,7 @@ public sealed class EvidenceTelemetryTests
listener.SetMeasurementEventCallback<long>((instrument, measurement, tags, _) => callback(instrument, measurement, tags));
listener.SetMeasurementEventCallback<int>((instrument, measurement, tags, _) => callback(instrument, measurement, tags));
listener.SetMeasurementEventCallback<double>((instrument, measurement, tags, _) => callback(instrument, measurement, tags));
listener.Start();
return listener;

View File

@@ -27,6 +27,8 @@
<ItemGroup>
<Compile Remove="**/*.cs" />
<Compile Include="AirgapImportEndpointTests.cs" />
<Compile Include="VexEvidenceChunkServiceTests.cs" />
<Compile Include="EvidenceTelemetryTests.cs" />
<Compile Include="TestAuthentication.cs" />
<Compile Include="TestServiceOverrides.cs" />
<Compile Include="TestWebApplicationFactory.cs" />

View File

@@ -1,4 +1,3 @@
#if false
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -52,14 +51,14 @@ public sealed class VexEvidenceChunkServiceTests
{
var product = new VexProduct("pkg:docker/demo", "demo", "1.0.0", "pkg:docker/demo:1.0.0", null, new[] { "component-a" });
var document = new VexClaimDocument(
VexDocumentFormat.SbomCycloneDx,
VexDocumentFormat.CycloneDx,
digest: Guid.NewGuid().ToString("N"),
sourceUri: new Uri("https://example.test/vex.json"),
revision: "r1",
signature: new VexSignatureMetadata("cosign", "demo", "issuer", keyId: "kid", verifiedAt: firstSeen, transparencyLogReference: null));
var signals = score.HasValue
? new VexSignalSnapshot(new VexSeveritySignal("cvss", score, "low", vector: null), Kev: null, Epss: null)
? new VexSignalSnapshot(new VexSeveritySignal("cvss", score, "low", vector: null), kev: null, epss: null)
: null;
return new VexClaim(
@@ -116,5 +115,3 @@ public sealed class VexEvidenceChunkServiceTests
public override DateTimeOffset GetUtcNow() => _timestamp;
}
}
#endif

View File

@@ -122,7 +122,7 @@ public sealed class VexEvidenceChunksEndpointTests : IDisposable
signature: new VexSignatureMetadata("cosign", "demo", "issuer", keyId: "kid", verifiedAt: firstSeen, transparencyLogReference: null));
var signals = score.HasValue
? new VexSignalSnapshot(new VexSeveritySignal("cvss", score, "low", vector: null), Kev: null, Epss: null)
? new VexSignalSnapshot(new VexSeveritySignal("cvss", score, "low", vector: null), kev: null, epss: null)
: null;
return new VexClaim(

View File

@@ -0,0 +1,19 @@
using System.Reflection;
using Json.Schema;
namespace StellaOps.Policy.RiskProfile.Schema;
public static class RiskProfileSchemaProvider
{
private const string SchemaResource = "StellaOps.Policy.RiskProfile.Schemas.risk-profile-schema@1.json";
public static JsonSchema GetSchema()
{
using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(SchemaResource)
?? throw new InvalidOperationException($"Schema resource '{SchemaResource}' not found.");
using var reader = new StreamReader(stream);
var schemaText = reader.ReadToEnd();
return JsonSchema.FromText(schemaText);
}
}

View File

@@ -0,0 +1,126 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://stellaops.dev/schemas/risk-profile-schema@1.json",
"title": "StellaOps RiskProfile v1",
"type": "object",
"required": [ "id", "version", "signals", "weights", "overrides" ],
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "Stable identifier for the risk profile (slug or URN)."
},
"version": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+(-[A-Za-z0-9.-]+)?$",
"description": "SemVer for the profile definition."
},
"description": {
"type": "string",
"description": "Human-readable summary of the profile intent."
},
"signals": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [ "name", "source", "type" ],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Logical signal key (e.g., reachability, kev, exploit_chain)."
},
"source": {
"type": "string",
"minLength": 1,
"description": "Upstream provider or calculation origin."
},
"type": {
"type": "string",
"enum": [ "boolean", "numeric", "categorical" ]
},
"path": {
"type": "string",
"description": "JSON Pointer to the signal in the evidence document."
},
"transform": {
"type": "string",
"description": "Optional transform applied before weighting (e.g., log, normalize)."
},
"unit": {
"type": "string",
"description": "Optional unit for numeric signals."
}
}
}
},
"weights": {
"type": "object",
"minProperties": 1,
"additionalProperties": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"description": "Weight per signal name; weights are normalized by the consumer."
},
"overrides": {
"type": "object",
"required": [ "severity", "decisions" ],
"additionalProperties": false,
"properties": {
"severity": {
"type": "array",
"items": {
"type": "object",
"required": [ "when", "set" ],
"additionalProperties": false,
"properties": {
"when": {
"type": "object",
"description": "Predicate over signals (key/value equals).",
"minProperties": 1,
"additionalProperties": { "type": [ "string", "number", "boolean" ] }
},
"set": {
"type": "string",
"enum": [ "critical", "high", "medium", "low", "informational" ]
}
}
}
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"required": [ "when", "action" ],
"additionalProperties": false,
"properties": {
"when": {
"type": "object",
"description": "Predicate over signals (key/value equals).",
"minProperties": 1,
"additionalProperties": { "type": [ "string", "number", "boolean" ] }
},
"action": {
"type": "string",
"enum": [ "allow", "review", "deny" ]
},
"reason": {
"type": "string"
}
}
}
}
}
},
"metadata": {
"type": "object",
"description": "Free-form metadata with stable keys.",
"additionalProperties": { "type": [ "string", "number", "boolean", "array", "object", "null" ] }
}
}
}

View File

@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JsonSchema.Net" Version="5.3.0" />
<PackageReference Include="System.Text.Json" Version="10.0.0-rc.2.25519.1" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Schemas\risk-profile-schema@1.json" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,30 @@
using System.Text.Json;
using Json.Schema;
using StellaOps.Policy.RiskProfile.Schema;
namespace StellaOps.Policy.RiskProfile.Validation;
public sealed class RiskProfileValidator
{
private readonly JsonSchema _schema;
public RiskProfileValidator() : this(RiskProfileSchemaProvider.GetSchema())
{
}
public RiskProfileValidator(JsonSchema schema)
{
_schema = schema ?? throw new ArgumentNullException(nameof(schema));
}
public ValidationResults Validate(string json)
{
if (string.IsNullOrWhiteSpace(json))
{
throw new ArgumentException("Risk profile payload is required.", nameof(json));
}
using var document = JsonDocument.Parse(json);
return _schema.Validate(document.RootElement);
}
}

View File

@@ -1,212 +1,395 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Engine", "StellaOps.Policy.Engine\StellaOps.Policy.Engine.csproj", "{83716724-0833-4EB4-BD13-7570DB47148E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{41F15E67-7190-CF23-3BC4-77E87134CADD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy", "__Libraries\StellaOps.Policy\StellaOps.Policy.csproj", "{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Configuration", "..\__Libraries\StellaOps.Configuration\StellaOps.Configuration.csproj", "{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Authority.Plugins.Abstractions", "..\Authority\StellaOps.Authority\StellaOps.Authority.Plugins.Abstractions\StellaOps.Authority.Plugins.Abstractions.csproj", "{E33561D0-D9C4-42F0-A414-CC6439302E5F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Cryptography", "..\__Libraries\StellaOps.Cryptography\StellaOps.Cryptography.csproj", "{C4F44230-D5FF-425E-BC1B-2ECE59908B59}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Auth.Abstractions", "..\Authority\StellaOps.Authority\StellaOps.Auth.Abstractions\StellaOps.Auth.Abstractions.csproj", "{93944DA7-ED8C-466C-90DF-E3522DC49B08}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.DependencyInjection", "..\__Libraries\StellaOps.DependencyInjection\StellaOps.DependencyInjection.csproj", "{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Auth.Client", "..\Authority\StellaOps.Authority\StellaOps.Auth.Client\StellaOps.Auth.Client.csproj", "{45287280-FC03-4233-9012-193F4CE41964}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Auth.ServerIntegration", "..\Authority\StellaOps.Authority\StellaOps.Auth.ServerIntegration\StellaOps.Auth.ServerIntegration.csproj", "{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Gateway", "StellaOps.Policy.Gateway\StellaOps.Policy.Gateway.csproj", "{6B83C5F2-EA81-4723-87EB-99101697B232}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Tests", "__Tests", "{56BCE1BF-7CBA-7CE8-203D-A88051F1D642}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Engine.Tests", "__Tests\StellaOps.Policy.Engine.Tests\StellaOps.Policy.Engine.Tests.csproj", "{478DF014-BF69-41BA-B78A-AAC0918337D8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Gateway.Tests", "__Tests\StellaOps.Policy.Gateway.Tests\StellaOps.Policy.Gateway.Tests.csproj", "{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Tests", "__Tests\StellaOps.Policy.Tests\StellaOps.Policy.Tests.csproj", "{D064D5C1-3311-470C-92A1-41E913125C14}"
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
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x64.ActiveCfg = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x64.Build.0 = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x86.ActiveCfg = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x86.Build.0 = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|Any CPU.Build.0 = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x64.ActiveCfg = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x64.Build.0 = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x86.ActiveCfg = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x86.Build.0 = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x64.ActiveCfg = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x64.Build.0 = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x86.ActiveCfg = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x86.Build.0 = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|Any CPU.Build.0 = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x64.ActiveCfg = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x64.Build.0 = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x86.ActiveCfg = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x86.Build.0 = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x64.ActiveCfg = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x64.Build.0 = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x86.ActiveCfg = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x86.Build.0 = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|Any CPU.Build.0 = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x64.ActiveCfg = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x64.Build.0 = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x86.ActiveCfg = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x86.Build.0 = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x64.ActiveCfg = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x64.Build.0 = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x86.ActiveCfg = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x86.Build.0 = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|Any CPU.Build.0 = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x64.ActiveCfg = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x64.Build.0 = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x86.ActiveCfg = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x86.Build.0 = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x64.ActiveCfg = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x64.Build.0 = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x86.ActiveCfg = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x86.Build.0 = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|Any CPU.Build.0 = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x64.ActiveCfg = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x64.Build.0 = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x86.ActiveCfg = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x86.Build.0 = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x64.ActiveCfg = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x64.Build.0 = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x86.ActiveCfg = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x86.Build.0 = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|Any CPU.Build.0 = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x64.ActiveCfg = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x64.Build.0 = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x86.ActiveCfg = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x86.Build.0 = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x64.ActiveCfg = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x64.Build.0 = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x86.ActiveCfg = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x86.Build.0 = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|Any CPU.Build.0 = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x64.ActiveCfg = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x64.Build.0 = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x86.ActiveCfg = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x86.Build.0 = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x64.ActiveCfg = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x64.Build.0 = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x86.ActiveCfg = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x86.Build.0 = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|Any CPU.Build.0 = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x64.ActiveCfg = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x64.Build.0 = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x86.ActiveCfg = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x86.Build.0 = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x64.ActiveCfg = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x64.Build.0 = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x86.ActiveCfg = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x86.Build.0 = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|Any CPU.Build.0 = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x64.ActiveCfg = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x64.Build.0 = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x86.ActiveCfg = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x86.Build.0 = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x64.ActiveCfg = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x64.Build.0 = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x86.ActiveCfg = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x86.Build.0 = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|Any CPU.Build.0 = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x64.ActiveCfg = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x64.Build.0 = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x86.ActiveCfg = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x86.Build.0 = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x64.Build.0 = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x86.ActiveCfg = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x86.Build.0 = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|Any CPU.Build.0 = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x64.ActiveCfg = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x64.Build.0 = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x86.ActiveCfg = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x86.Build.0 = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x64.ActiveCfg = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x64.Build.0 = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x86.ActiveCfg = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x86.Build.0 = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|Any CPU.Build.0 = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x64.ActiveCfg = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x64.Build.0 = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x86.ActiveCfg = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x86.Build.0 = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x64.ActiveCfg = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x64.Build.0 = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x86.ActiveCfg = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x86.Build.0 = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|Any CPU.Build.0 = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x64.ActiveCfg = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x64.Build.0 = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x86.ActiveCfg = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82} = {41F15E67-7190-CF23-3BC4-77E87134CADD}
{478DF014-BF69-41BA-B78A-AAC0918337D8} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
{D064D5C1-3311-470C-92A1-41E913125C14} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Engine", "StellaOps.Policy.Engine\StellaOps.Policy.Engine.csproj", "{83716724-0833-4EB4-BD13-7570DB47148E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{41F15E67-7190-CF23-3BC4-77E87134CADD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy", "__Libraries\StellaOps.Policy\StellaOps.Policy.csproj", "{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Configuration", "..\__Libraries\StellaOps.Configuration\StellaOps.Configuration.csproj", "{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Authority.Plugins.Abstractions", "..\Authority\StellaOps.Authority\StellaOps.Authority.Plugins.Abstractions\StellaOps.Authority.Plugins.Abstractions.csproj", "{E33561D0-D9C4-42F0-A414-CC6439302E5F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Cryptography", "..\__Libraries\StellaOps.Cryptography\StellaOps.Cryptography.csproj", "{C4F44230-D5FF-425E-BC1B-2ECE59908B59}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Auth.Abstractions", "..\Authority\StellaOps.Authority\StellaOps.Auth.Abstractions\StellaOps.Auth.Abstractions.csproj", "{93944DA7-ED8C-466C-90DF-E3522DC49B08}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.DependencyInjection", "..\__Libraries\StellaOps.DependencyInjection\StellaOps.DependencyInjection.csproj", "{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Auth.Client", "..\Authority\StellaOps.Authority\StellaOps.Auth.Client\StellaOps.Auth.Client.csproj", "{45287280-FC03-4233-9012-193F4CE41964}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Auth.ServerIntegration", "..\Authority\StellaOps.Authority\StellaOps.Auth.ServerIntegration\StellaOps.Auth.ServerIntegration.csproj", "{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Gateway", "StellaOps.Policy.Gateway\StellaOps.Policy.Gateway.csproj", "{6B83C5F2-EA81-4723-87EB-99101697B232}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Tests", "__Tests", "{56BCE1BF-7CBA-7CE8-203D-A88051F1D642}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Engine.Tests", "__Tests\StellaOps.Policy.Engine.Tests\StellaOps.Policy.Engine.Tests.csproj", "{478DF014-BF69-41BA-B78A-AAC0918337D8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Gateway.Tests", "__Tests\StellaOps.Policy.Gateway.Tests\StellaOps.Policy.Gateway.Tests.csproj", "{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.Tests", "__Tests\StellaOps.Policy.Tests\StellaOps.Policy.Tests.csproj", "{D064D5C1-3311-470C-92A1-41E913125C14}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.RiskProfile", "StellaOps.Policy.RiskProfile\StellaOps.Policy.RiskProfile.csproj", "{6206D9E9-F84C-424C-84E3-7A63774BCEC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Policy.RiskProfile.Tests", "__Tests\StellaOps.Policy.RiskProfile.Tests\StellaOps.Policy.RiskProfile.Tests.csproj", "{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.Testing", "..\Concelier\__Libraries\StellaOps.Concelier.Testing\StellaOps.Concelier.Testing.csproj", "{D3F5BCE7-7F50-474B-B70D-D16A559AC720}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.Connector.Common", "..\Concelier\__Libraries\StellaOps.Concelier.Connector.Common\StellaOps.Concelier.Connector.Common.csproj", "{5DE7674D-CB03-4475-A0FF-14528E45A3C8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.Storage.Mongo", "..\Concelier\__Libraries\StellaOps.Concelier.Storage.Mongo\StellaOps.Concelier.Storage.Mongo.csproj", "{EA35FF3B-16AD-48A9-B47D-632103BFC47F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.Core", "..\Concelier\__Libraries\StellaOps.Concelier.Core\StellaOps.Concelier.Core.csproj", "{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.Models", "..\Concelier\__Libraries\StellaOps.Concelier.Models\StellaOps.Concelier.Models.csproj", "{9CF5075A-E59B-4F59-90B9-82C92AC33410}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.RawModels", "..\Concelier\__Libraries\StellaOps.Concelier.RawModels\StellaOps.Concelier.RawModels.csproj", "{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Concelier.Normalization", "..\Concelier\__Libraries\StellaOps.Concelier.Normalization\StellaOps.Concelier.Normalization.csproj", "{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Ingestion.Telemetry", "..\__Libraries\StellaOps.Ingestion.Telemetry\StellaOps.Ingestion.Telemetry.csproj", "{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Provenance.Mongo", "..\__Libraries\StellaOps.Provenance.Mongo\StellaOps.Provenance.Mongo.csproj", "{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Plugin", "..\__Libraries\StellaOps.Plugin\StellaOps.Plugin.csproj", "{0482A07E-CDA3-4006-84E6-828B072995C2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Aoc", "..\Aoc\__Libraries\StellaOps.Aoc\StellaOps.Aoc.csproj", "{90DA7D82-B567-47CC-96F8-84C347DA8983}"
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
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x64.ActiveCfg = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x64.Build.0 = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x86.ActiveCfg = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Debug|x86.Build.0 = Debug|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|Any CPU.Build.0 = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x64.ActiveCfg = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x64.Build.0 = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x86.ActiveCfg = Release|Any CPU
{83716724-0833-4EB4-BD13-7570DB47148E}.Release|x86.Build.0 = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x64.ActiveCfg = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x64.Build.0 = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x86.ActiveCfg = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Debug|x86.Build.0 = Debug|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|Any CPU.Build.0 = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x64.ActiveCfg = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x64.Build.0 = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x86.ActiveCfg = Release|Any CPU
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82}.Release|x86.Build.0 = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x64.ActiveCfg = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x64.Build.0 = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x86.ActiveCfg = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Debug|x86.Build.0 = Debug|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|Any CPU.Build.0 = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x64.ActiveCfg = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x64.Build.0 = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x86.ActiveCfg = Release|Any CPU
{9F136BAA-6DBF-4FD5-ABD1-2648D1FA47AC}.Release|x86.Build.0 = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x64.ActiveCfg = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x64.Build.0 = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x86.ActiveCfg = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Debug|x86.Build.0 = Debug|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|Any CPU.Build.0 = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x64.ActiveCfg = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x64.Build.0 = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x86.ActiveCfg = Release|Any CPU
{E33561D0-D9C4-42F0-A414-CC6439302E5F}.Release|x86.Build.0 = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x64.ActiveCfg = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x64.Build.0 = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x86.ActiveCfg = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Debug|x86.Build.0 = Debug|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|Any CPU.Build.0 = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x64.ActiveCfg = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x64.Build.0 = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x86.ActiveCfg = Release|Any CPU
{C4F44230-D5FF-425E-BC1B-2ECE59908B59}.Release|x86.Build.0 = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x64.ActiveCfg = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x64.Build.0 = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x86.ActiveCfg = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Debug|x86.Build.0 = Debug|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|Any CPU.Build.0 = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x64.ActiveCfg = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x64.Build.0 = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x86.ActiveCfg = Release|Any CPU
{93944DA7-ED8C-466C-90DF-E3522DC49B08}.Release|x86.Build.0 = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x64.ActiveCfg = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x64.Build.0 = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x86.ActiveCfg = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Debug|x86.Build.0 = Debug|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|Any CPU.Build.0 = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x64.ActiveCfg = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x64.Build.0 = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x86.ActiveCfg = Release|Any CPU
{D9E27F55-32F4-42EE-AF96-DCC3B1DACD09}.Release|x86.Build.0 = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x64.ActiveCfg = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x64.Build.0 = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x86.ActiveCfg = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Debug|x86.Build.0 = Debug|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|Any CPU.Build.0 = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x64.ActiveCfg = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x64.Build.0 = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x86.ActiveCfg = Release|Any CPU
{45287280-FC03-4233-9012-193F4CE41964}.Release|x86.Build.0 = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x64.ActiveCfg = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x64.Build.0 = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x86.ActiveCfg = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Debug|x86.Build.0 = Debug|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|Any CPU.Build.0 = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x64.ActiveCfg = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x64.Build.0 = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x86.ActiveCfg = Release|Any CPU
{DF8EBB6E-1C72-4AB9-A5BB-3BB9095499CC}.Release|x86.Build.0 = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x64.ActiveCfg = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x64.Build.0 = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x86.ActiveCfg = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Debug|x86.Build.0 = Debug|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|Any CPU.Build.0 = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x64.ActiveCfg = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x64.Build.0 = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x86.ActiveCfg = Release|Any CPU
{6B83C5F2-EA81-4723-87EB-99101697B232}.Release|x86.Build.0 = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x64.Build.0 = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x86.ActiveCfg = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Debug|x86.Build.0 = Debug|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|Any CPU.Build.0 = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x64.ActiveCfg = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x64.Build.0 = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x86.ActiveCfg = Release|Any CPU
{478DF014-BF69-41BA-B78A-AAC0918337D8}.Release|x86.Build.0 = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x64.ActiveCfg = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x64.Build.0 = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x86.ActiveCfg = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Debug|x86.Build.0 = Debug|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|Any CPU.Build.0 = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x64.ActiveCfg = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x64.Build.0 = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x86.ActiveCfg = Release|Any CPU
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44}.Release|x86.Build.0 = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x64.ActiveCfg = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x64.Build.0 = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x86.ActiveCfg = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Debug|x86.Build.0 = Debug|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|Any CPU.Build.0 = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x64.ActiveCfg = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x64.Build.0 = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x86.ActiveCfg = Release|Any CPU
{D064D5C1-3311-470C-92A1-41E913125C14}.Release|x86.Build.0 = Release|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Debug|x64.ActiveCfg = Debug|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Debug|x64.Build.0 = Debug|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Debug|x86.ActiveCfg = Debug|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Debug|x86.Build.0 = Debug|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Release|Any CPU.Build.0 = Release|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Release|x64.ActiveCfg = Release|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Release|x64.Build.0 = Release|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Release|x86.ActiveCfg = Release|Any CPU
{6206D9E9-F84C-424C-84E3-7A63774BCEC9}.Release|x86.Build.0 = Release|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Debug|x64.ActiveCfg = Debug|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Debug|x64.Build.0 = Debug|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Debug|x86.ActiveCfg = Debug|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Debug|x86.Build.0 = Debug|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Release|Any CPU.Build.0 = Release|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Release|x64.ActiveCfg = Release|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Release|x64.Build.0 = Release|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Release|x86.ActiveCfg = Release|Any CPU
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD}.Release|x86.Build.0 = Release|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Debug|x64.ActiveCfg = Debug|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Debug|x64.Build.0 = Debug|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Debug|x86.ActiveCfg = Debug|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Debug|x86.Build.0 = Debug|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Release|Any CPU.Build.0 = Release|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Release|x64.ActiveCfg = Release|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Release|x64.Build.0 = Release|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Release|x86.ActiveCfg = Release|Any CPU
{D3F5BCE7-7F50-474B-B70D-D16A559AC720}.Release|x86.Build.0 = Release|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Debug|x64.ActiveCfg = Debug|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Debug|x64.Build.0 = Debug|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Debug|x86.ActiveCfg = Debug|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Debug|x86.Build.0 = Debug|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Release|Any CPU.Build.0 = Release|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Release|x64.ActiveCfg = Release|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Release|x64.Build.0 = Release|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Release|x86.ActiveCfg = Release|Any CPU
{5DE7674D-CB03-4475-A0FF-14528E45A3C8}.Release|x86.Build.0 = Release|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Debug|x64.ActiveCfg = Debug|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Debug|x64.Build.0 = Debug|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Debug|x86.ActiveCfg = Debug|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Debug|x86.Build.0 = Debug|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Release|Any CPU.Build.0 = Release|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Release|x64.ActiveCfg = Release|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Release|x64.Build.0 = Release|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Release|x86.ActiveCfg = Release|Any CPU
{EA35FF3B-16AD-48A9-B47D-632103BFC47F}.Release|x86.Build.0 = Release|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Debug|x64.ActiveCfg = Debug|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Debug|x64.Build.0 = Debug|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Debug|x86.ActiveCfg = Debug|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Debug|x86.Build.0 = Debug|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Release|Any CPU.Build.0 = Release|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Release|x64.ActiveCfg = Release|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Release|x64.Build.0 = Release|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Release|x86.ActiveCfg = Release|Any CPU
{EA1A2CA6-2B73-4C77-8A96-674AF06C0D52}.Release|x86.Build.0 = Release|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Debug|x64.ActiveCfg = Debug|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Debug|x64.Build.0 = Debug|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Debug|x86.ActiveCfg = Debug|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Debug|x86.Build.0 = Debug|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Release|Any CPU.Build.0 = Release|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Release|x64.ActiveCfg = Release|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Release|x64.Build.0 = Release|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Release|x86.ActiveCfg = Release|Any CPU
{9CF5075A-E59B-4F59-90B9-82C92AC33410}.Release|x86.Build.0 = Release|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Debug|x64.ActiveCfg = Debug|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Debug|x64.Build.0 = Debug|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Debug|x86.ActiveCfg = Debug|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Debug|x86.Build.0 = Debug|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Release|Any CPU.Build.0 = Release|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Release|x64.ActiveCfg = Release|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Release|x64.Build.0 = Release|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Release|x86.ActiveCfg = Release|Any CPU
{79E1A6AB-BDA0-4419-A697-69C65DE99C3D}.Release|x86.Build.0 = Release|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Debug|x64.ActiveCfg = Debug|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Debug|x64.Build.0 = Debug|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Debug|x86.ActiveCfg = Debug|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Debug|x86.Build.0 = Debug|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Release|Any CPU.Build.0 = Release|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Release|x64.ActiveCfg = Release|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Release|x64.Build.0 = Release|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Release|x86.ActiveCfg = Release|Any CPU
{5DCB6EC1-CACA-4AB8-97FD-A73A3738B97F}.Release|x86.Build.0 = Release|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Debug|x64.ActiveCfg = Debug|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Debug|x64.Build.0 = Debug|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Debug|x86.Build.0 = Debug|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Release|Any CPU.Build.0 = Release|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Release|x64.ActiveCfg = Release|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Release|x64.Build.0 = Release|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Release|x86.ActiveCfg = Release|Any CPU
{CD2E6593-79CC-4668-8CBD-EDF1A80DE0C6}.Release|x86.Build.0 = Release|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Debug|x64.ActiveCfg = Debug|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Debug|x64.Build.0 = Debug|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Debug|x86.ActiveCfg = Debug|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Debug|x86.Build.0 = Debug|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Release|Any CPU.Build.0 = Release|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Release|x64.ActiveCfg = Release|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Release|x64.Build.0 = Release|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Release|x86.ActiveCfg = Release|Any CPU
{F7DABB1F-2F0A-492B-A7D0-6AB0FED72D5B}.Release|x86.Build.0 = Release|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Debug|x64.ActiveCfg = Debug|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Debug|x64.Build.0 = Debug|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Debug|x86.Build.0 = Debug|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Release|Any CPU.Build.0 = Release|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Release|x64.ActiveCfg = Release|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Release|x64.Build.0 = Release|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Release|x86.ActiveCfg = Release|Any CPU
{0482A07E-CDA3-4006-84E6-828B072995C2}.Release|x86.Build.0 = Release|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Debug|x64.ActiveCfg = Debug|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Debug|x64.Build.0 = Debug|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Debug|x86.ActiveCfg = Debug|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Debug|x86.Build.0 = Debug|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Release|Any CPU.Build.0 = Release|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Release|x64.ActiveCfg = Release|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Release|x64.Build.0 = Release|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Release|x86.ActiveCfg = Release|Any CPU
{90DA7D82-B567-47CC-96F8-84C347DA8983}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{9C200CFD-2A8F-4CF5-BD33-AB8B06DA7C82} = {41F15E67-7190-CF23-3BC4-77E87134CADD}
{478DF014-BF69-41BA-B78A-AAC0918337D8} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
{77189D88-1CA1-46BD-A9DC-99B2B6EF7D44} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
{D064D5C1-3311-470C-92A1-41E913125C14} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
{EE0C81E5-7E50-4CC2-BEB9-F3F4FBEBB9CD} = {56BCE1BF-7CBA-7CE8-203D-A88051F1D642}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,64 @@
using System.Text.Json;
using StellaOps.Policy.RiskProfile.Validation;
using Xunit;
namespace StellaOps.Policy.RiskProfile.Tests;
public class RiskProfileValidatorTests
{
private readonly RiskProfileValidator _validator = new();
[Fact]
public void Valid_profile_passes_schema()
{
var profile = """
{
"id": "default-risk",
"version": "1.0.0",
"description": "Baseline risk profile",
"signals": [
{ "name": "reachability", "source": "signals", "type": "boolean", "path": "/reachability/exploitable" },
{ "name": "kev", "source": "cisa", "type": "boolean" }
],
"weights": {
"reachability": 0.6,
"kev": 0.4
},
"overrides": {
"severity": [
{ "when": { "kev": true }, "set": "critical" }
],
"decisions": [
{ "when": { "reachability": false }, "action": "review", "reason": "Not reachable" }
]
},
"metadata": {
"owner": "risk-team"
}
}
""";
var result = _validator.Validate(profile);
Assert.True(result.IsValid, string.Join(" | ", result.Errors ?? Array.Empty<string>()));
}
[Fact]
public void Missing_required_fields_fails_schema()
{
var invalidProfile = """
{ "id": "missing-fields" }
""";
var result = _validator.Validate(invalidProfile);
Assert.False(result.IsValid);
Assert.NotEmpty(result.Errors);
}
[Fact]
public void Empty_payload_throws()
{
Assert.Throws<ArgumentException>(() => _validator.Validate(" "));
}
}

View File

@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="../../StellaOps.Policy.RiskProfile/StellaOps.Policy.RiskProfile.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
</ItemGroup>
</Project>