aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--lib/Net.Compression/readme.md4
-rw-r--r--lib/Net.Http/readme.md15
-rw-r--r--lib/Net.Messaging.FBM/README.md44
-rw-r--r--lib/Net.Rest.Client/README.md18
-rw-r--r--lib/Net.Transport.SimpleTCP/README.md11
-rw-r--r--lib/Plugins.Essentials/README.md15
-rw-r--r--lib/Plugins.PluginBase/README.md16
-rw-r--r--lib/Plugins/README.md4
-rw-r--r--lib/Utils/README.md12
-rw-r--r--vnlib.core.build.sln204
11 files changed, 286 insertions, 61 deletions
diff --git a/.gitignore b/.gitignore
index 879ba07..0a9160d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -363,10 +363,6 @@ MigrationBackup/
#package config files
**[Pp]ackages*
-#Do not include sln files for build process only
-*.sln
*.filters
-*.ps1
-**/.task/*
/lib/Net.Compression/vnlib_compress/build
diff --git a/lib/Net.Compression/readme.md b/lib/Net.Compression/readme.md
index 6b7f5f1..d0074ab 100644
--- a/lib/Net.Compression/readme.md
+++ b/lib/Net.Compression/readme.md
@@ -5,10 +5,10 @@ Provides a cross platform (w/ cmake) native compression DLL for Brotli, Deflate,
The native library relies on source code (which are statically compiled) for Brotli and Zlib. The original repositories for both libraries will do, but I use the Cloudflare fork of Zlib for testing. You should consult my documentation below for how and where to get the source for these libraries.
-### Builds
+## Builds
Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
-### Docs and Guides
+## Docs and Guides
Documentation, specifications, and setup guides are available on my website.
[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_vnlib.net.compression)
diff --git a/lib/Net.Http/readme.md b/lib/Net.Http/readme.md
index 6692205..c087ce8 100644
--- a/lib/Net.Http/readme.md
+++ b/lib/Net.Http/readme.md
@@ -1,6 +1,15 @@
# VNLib.Net.Http
-*Provides a resource efficient, high performance, single library HTTP(s) server, with extensable processors and transport providers.*
+Provides a compact, resource efficient, high performance, single library HTTP(s) server, with extensible processors and transport providers so its not opinionated. You can use this library to add HTTP processing to any .NETCore project with no external dependencies. If you want to do normal web handling (more than the bare HTTP protocol) consider adding the [Plugins.Essentials](../Plugins.Essentials/#) library to your project.
-#### Builds
-Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my [website](https://www.vaughnnugent.com/resources/software). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file. \ No newline at end of file
+## Builds
+Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
+
+## Docs and Guides
+Documentation, specifications, and setup guides are available on my website.
+
+[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_vnlib.net.http)
+[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core)
+
+## License
+The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the LICENSE files for more information. \ No newline at end of file
diff --git a/lib/Net.Messaging.FBM/README.md b/lib/Net.Messaging.FBM/README.md
index 19e925c..3b7713e 100644
--- a/lib/Net.Messaging.FBM/README.md
+++ b/lib/Net.Messaging.FBM/README.md
@@ -1,42 +1,18 @@
# VNLib.Net.Messaging.FBM
-High performance structured web-socket based asynchronous request/response messaging library for .NET.
+High performance structured web-socket based asynchronous request/response messaging library for .NET.
-[**Client Lib**](src/Client/#) - FBM Fixed Buffer Messaging client library
+[**Client Lib**](src/Client/#) - FBM Fixed Buffer Messaging client library
+[**Server Lib**](src/Server/#) - FBM Fixed Buffer Messaging server/listener helper library
-[**Server Lib**](src/Server/#) - FBM Fixed Buffer Messaging server/listener helper library
-
-## Fixed Buffer Message protocol overview
-FBM is a simple binary message protocol that supports asynchronous messaging between clients-servers that is built atop HTTP and web-sockets. It client and server architecture uses fixed sized buffers and assumes all messages sent/received will fit those buffers, this helps reduce copying and allocations. Streaming is minimally supported for clients but servers will still have a fixed max message size, so it cannot stream arbitrary length data. Servers will always buffer request messages into memory, so a max message size is the only guard for resource abuse.
-
-#### FBM Message frames
-Message frames consist of a 4-byte message id, a collection of key-value encoded headers, and a message body/payload. The first 4 bytes of a message is the ID (for normal messages a signed integer greater than 0), 0 is reserved for error conditions, and negative numbers are reserved for internal messages. Headers are identified by a single byte, followed by a variable length UTF8 encoded character sequence, followed by a termination of 0xFF, 0xF1 (may change).
-```
- 4 byte positive (big endian signed 32-bit integer) message id
- 2 byte termination [0xFF,0xF1]
- 1 byte header-id
- variable length UTF8 value
- 2 byte termination [0xFF,0xF1]
- <-- other headers -->
- 2 byte termination (extra termination, ie: empty header) [0xFF,0xF1]
- variable length payload
- <end of message is the end of the payload>
-Example:
-id=0x8EB26 term Action cmd utf8 "read" End header End header section
-[0x00,0x08, 0xEB, 0x26, 0xFF, 0xF1, 0x04, 0x72, 0x65, 0x61, 0x64, 0xFF, 0xF1, 0xFF, 0xF1]
-
-```
-
-Buffer sizes are generally negotiated on initial web-socket upgrade, so to buffer entire messages in a single read/write from the web-socket. Received messages are read into memory until the web-socket has no more data available. The message is then parsed and passed for processing on the server side, or complete a pending request on the client side. Servers may drop the web-socket connection and return an error if messages exceed the size of the pre-negotiated buffer. Servers should validate buffer sizes before accepting a connection.
+## Builds
+Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
-#### Architecture goal
-The goal of the FBM protocol for is to provide efficient use of resources (memory, network, and minimize GC load) to transfer small messages truly asynchronously, at wire speeds, with only web-socket and transport overhead. Using web-sockets simplifies implementation, and allows compatibility across platforms, programming languages, and versions.
+## Docs and Guides
+Documentation, specifications, and setup guides are available on my website.
-## Final Notes
-This library is likely a niche use case, and is probably not for everyone. Unless you care about reasonably efficient high frequency request/response messaging, this probably isn't for you. This library provides a reasonable building block for distributed lock mechanisms and small data caching.
+[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Net.Messaging.FBM)
+[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core)
## License
-The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the [LICENSE](LICENSE.txt) file for more information.
-
-## Builds
-Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my [website](https://www.vaughnnugent.com/resources/software). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file. \ No newline at end of file
+The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the [LICENSE](LICENSE.txt) file for more information. \ No newline at end of file
diff --git a/lib/Net.Rest.Client/README.md b/lib/Net.Rest.Client/README.md
index 132c590..c3e7210 100644
--- a/lib/Net.Rest.Client/README.md
+++ b/lib/Net.Rest.Client/README.md
@@ -1,4 +1,18 @@
# VNLib.Net.Rest.Client
-#### Builds
-Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my [website](https://www.vaughnnugent.com/resources/software). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file. \ No newline at end of file
+Provides helpful extensions for rapid development of rest client libraries. Thread safe client pooling, endpoint construction framework, and OAuth2 authentication implementation.
+
+### Third party deps
+This library relies on the [RestSharp](https://github.com/restsharp/RestSharp) rest client library. This may change in the future for a higher-performance alternative, but for now I really like RestSharp and it is currently well supported.
+
+## Builds
+Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
+
+## Docs and Guides
+Documentation, specifications, and setup guides are available on my website.
+
+[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_vnlib.net.rest.client)
+[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core)
+
+## License
+The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the LICENSE files for more information. \ No newline at end of file
diff --git a/lib/Net.Transport.SimpleTCP/README.md b/lib/Net.Transport.SimpleTCP/README.md
index 0012499..d4d921e 100644
--- a/lib/Net.Transport.SimpleTCP/README.md
+++ b/lib/Net.Transport.SimpleTCP/README.md
@@ -4,11 +4,14 @@
This library was created for use with the VNLib.Net.Http library and subsequent stacked framework libraries, however it was designed to be useful as a standalone high-performance .NET TCP listener. This library relies on the managed .NET [System.IO.Pipelines](https://github.com/dotnet/docs/blob/main/docs/standard/io/pipelines.md) library, and the [VNLib.Utils](../Utils) library.
-## Docs
-Documentation, including overview/architecture and usage is available [here](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Net.Transport.SimpleTCP).
-
## Builds
-Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my [website](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
+Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
+
+## Docs and Guides
+Documentation, specifications, and setup guides are available on my website.
+
+[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Net.Transport.SimpleTCP)
+[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core)
## License
The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the LICENSE files for more information. \ No newline at end of file
diff --git a/lib/Plugins.Essentials/README.md b/lib/Plugins.Essentials/README.md
index a085c05..110f962 100644
--- a/lib/Plugins.Essentials/README.md
+++ b/lib/Plugins.Essentials/README.md
@@ -1,6 +1,15 @@
# VNLib.Plugins.Essentials
-A library to add essential http processing features to your VNLib http application. This library is a part of the VNLib project and mostly focuses on the http content processing. It provides a layer between the base HTTP protocol and serving web content. It provides essential processing layers, extension methods, helper namespaces and more. Some features include stateful sessions, dynamic content routing, runtime extensible plugins, and abstractions for building plugins.
+A library you need to extend the functionality of your VNLib.Net.Http server. It provides tons of primitives for building powerful web/http services. Some include, stateful sessions, user accounts, account security, web security boilerplate, authentication, OAuth2, content-routing, and extensions for rapid controller development.
-#### Builds
-Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my [website](https://www.vaughnnugent.com/resources/software). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file. \ No newline at end of file
+## Builds
+Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
+
+## Docs and Guides
+Documentation, specifications, and setup guides are available on my website.
+
+[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_vnlib.plugins.essentials)
+[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core)
+
+## License
+The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the LICENSE files for more information. \ No newline at end of file
diff --git a/lib/Plugins.PluginBase/README.md b/lib/Plugins.PluginBase/README.md
index 65af7f4..6534c25 100644
--- a/lib/Plugins.PluginBase/README.md
+++ b/lib/Plugins.PluginBase/README.md
@@ -1 +1,15 @@
-# PluginBase \ No newline at end of file
+# Plugins.PluginBase
+
+Provides a abstract base class implementation of an IPlugin interface that does helpful housekeeping and serves as a base type for a large collection of extension libraries to build from. Maintains routes, and handles host loading hooks. To better understand the plugin system please read [these articles.](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Plugins)
+
+## Builds
+Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
+
+## Docs and Guides
+Documentation, specifications, and setup guides are available on my website.
+
+[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_vnlib.plugins.pluginbase)
+[Builds and Source](https://www.vaughnnugent.com/resources/software/modules/VNLib.Core)
+
+## License
+The software in this repository is licensed under the GNU Affero General Public License (or any later version). See the LICENSE files for more information. \ No newline at end of file
diff --git a/lib/Plugins/README.md b/lib/Plugins/README.md
index 0f82523..e36560c 100644
--- a/lib/Plugins/README.md
+++ b/lib/Plugins/README.md
@@ -4,10 +4,10 @@ A compact and simple contract interface and supporting types for runtime loadabl
**This library has no internal or external dependencies**
-### Builds
+## Builds
Debug build w/ symbols & xml docs, release builds, NuGet packages, and individually packaged source code are available on my website (link below). All tar-gzip (.tgz) files will have an associated .sha384 appended checksum of the desired download file.
-### Docs and Guides
+## Docs and Guides
Documentation, specifications, and setup guides are available on my website.
[Docs and Articles](https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Plugins)
diff --git a/lib/Utils/README.md b/lib/Utils/README.md
index 632253c..29ccc50 100644
--- a/lib/Utils/README.md
+++ b/lib/Utils/README.md
@@ -2,14 +2,14 @@
A .NET 6 /C# library for common .NET operation and memory optimizations.
-### License
-The software in this repository is licensed under the GNU GPL version 2.0 (or any later version). See the LICENSE files for more information.
+### Builds & Feeds
+Builds contain the individual components listed below packaged per-project, available for download on my website. Build packages will be tgz archives (except for nuget packages). You can obtain debug and release builds, along with per-project source code.
-### Documentation
-Docs and articles will be available from the docs link below. This library is quite large and will take time to develop docs. I heavily document all public APIs in XML so you can at-least get basic information when using this library.
+### Docs and Guides
+Docs and articles will be available from the docs link below. This library is quite large and will take time to develop docs. I heavily document all public APIs in XML so you can at-least get basic information when using this library.
-### Builds & Feeds
-Builds contain the individual components listed below packaged per-project, available for download on my website. Build packages will be tgz archives (except for nuget packages). You can obtain debug and release builds, along with per-project source code.
+### License
+The software in this repository is licensed under the GNU GPL version 2.0 (or any later version). See the LICENSE files for more information.
### Links
[Home Page](https://www.vaughnnugent.com) - Website home page
diff --git a/vnlib.core.build.sln b/vnlib.core.build.sln
new file mode 100644
index 0000000..9af7292
--- /dev/null
+++ b/vnlib.core.build.sln
@@ -0,0 +1,204 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Hashing.Portable", "lib\Hashing.Portable\src\VNLib.Hashing.Portable.csproj", "{A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.Http", "lib\Net.Http\src\VNLib.Net.Http.csproj", "{5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.Messaging.FBM", "lib\Net.Messaging.FBM\src\VNLib.Net.Messaging.FBM.csproj", "{A88A4424-1537-4EA1-9B16-920CE450B83E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.Transport.SimpleTCP", "lib\Net.Transport.SimpleTCP\src\VNLib.Net.Transport.SimpleTCP.csproj", "{05E8CFD3-C678-4A75-8173-2E1C9F86C650}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Plugins", "lib\Plugins\src\VNLib.Plugins.csproj", "{4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Plugins.Essentials", "lib\Plugins.Essentials\src\VNLib.Plugins.Essentials.csproj", "{46467E6F-9B97-47B2-B5D4-4CF74338682B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Plugins.Essentials.ServiceStack", "lib\Plugins.Essentials.ServiceStack\src\VNLib.Plugins.Essentials.ServiceStack.csproj", "{5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Plugins.Runtime", "lib\Plugins.Runtime\src\VNLib.Plugins.Runtime.csproj", "{128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Utils", "lib\Utils\src\VNLib.Utils.csproj", "{ED9B6918-1129-485F-9278-F9BCF13FE161}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.Rest.Client", "lib\Net.Rest.Client\src\VNLib.Net.Rest.Client.csproj", "{4091D0B2-B4F6-4BB4-A44E-44A128AD1628}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Plugins.PluginBase", "lib\Plugins.PluginBase\src\VNLib.Plugins.PluginBase.csproj", "{68E4D3E2-AE19-403F-8436-1D87924B3903}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7E900836-E8C1-468E-899A-8FC82526F246}"
+ ProjectSection(SolutionItems) = preProject
+ .gitignore = .gitignore
+ .onedev-buildspec.yml = .onedev-buildspec.yml
+ GitVersion.yml = GitVersion.yml
+ README.md = README.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compression", "Compression", "{A7EC3CF5-76B0-4235-AE9F-05409E3308B9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VNLib.Net.Compression", "lib\Net.Compression\VNLib.Net.Compression\VNLib.Net.Compression.csproj", "{4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}"
+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
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Debug|x64.Build.0 = Debug|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Debug|x86.Build.0 = Debug|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Release|x64.ActiveCfg = Release|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Release|x64.Build.0 = Release|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Release|x86.ActiveCfg = Release|Any CPU
+ {A98E6166-C836-4EDE-9B0E-B5B3624EC8FE}.Release|x86.Build.0 = Release|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Debug|x64.Build.0 = Debug|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Debug|x86.Build.0 = Debug|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Release|x64.ActiveCfg = Release|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Release|x64.Build.0 = Release|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Release|x86.ActiveCfg = Release|Any CPU
+ {5BB717C4-A2B8-493D-B9CA-8097FD3AB0A4}.Release|x86.Build.0 = Release|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Debug|x64.Build.0 = Debug|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Debug|x86.Build.0 = Debug|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Release|x64.ActiveCfg = Release|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Release|x64.Build.0 = Release|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Release|x86.ActiveCfg = Release|Any CPU
+ {A88A4424-1537-4EA1-9B16-920CE450B83E}.Release|x86.Build.0 = Release|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Debug|x64.Build.0 = Debug|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Debug|x86.Build.0 = Debug|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Release|Any CPU.Build.0 = Release|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Release|x64.ActiveCfg = Release|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Release|x64.Build.0 = Release|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Release|x86.ActiveCfg = Release|Any CPU
+ {05E8CFD3-C678-4A75-8173-2E1C9F86C650}.Release|x86.Build.0 = Release|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Debug|x64.Build.0 = Debug|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Debug|x86.Build.0 = Debug|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Release|x64.ActiveCfg = Release|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Release|x64.Build.0 = Release|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Release|x86.ActiveCfg = Release|Any CPU
+ {4F7FD27D-F7A9-4BFA-AE82-81C1BD27F6D5}.Release|x86.Build.0 = Release|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Debug|x64.Build.0 = Debug|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Debug|x86.Build.0 = Debug|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Release|x64.ActiveCfg = Release|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Release|x64.Build.0 = Release|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Release|x86.ActiveCfg = Release|Any CPU
+ {46467E6F-9B97-47B2-B5D4-4CF74338682B}.Release|x86.Build.0 = Release|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Debug|x64.Build.0 = Debug|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Debug|x86.Build.0 = Debug|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Release|x64.ActiveCfg = Release|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Release|x64.Build.0 = Release|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Release|x86.ActiveCfg = Release|Any CPU
+ {5C4699CB-DC05-42BC-81B5-B6ABEE1B7063}.Release|x86.Build.0 = Release|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Debug|x64.Build.0 = Debug|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Debug|x86.Build.0 = Debug|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Release|x64.ActiveCfg = Release|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Release|x64.Build.0 = Release|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Release|x86.ActiveCfg = Release|Any CPU
+ {128A3DAE-7CDF-4075-A552-0FD8C9AFCCEC}.Release|x86.Build.0 = Release|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Debug|x64.Build.0 = Debug|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Debug|x86.Build.0 = Debug|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Release|x64.ActiveCfg = Release|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Release|x64.Build.0 = Release|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Release|x86.ActiveCfg = Release|Any CPU
+ {ED9B6918-1129-485F-9278-F9BCF13FE161}.Release|x86.Build.0 = Release|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Debug|x64.Build.0 = Debug|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Debug|x86.Build.0 = Debug|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Release|x64.ActiveCfg = Release|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Release|x64.Build.0 = Release|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Release|x86.ActiveCfg = Release|Any CPU
+ {4091D0B2-B4F6-4BB4-A44E-44A128AD1628}.Release|x86.Build.0 = Release|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Debug|x64.Build.0 = Debug|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Debug|x86.Build.0 = Debug|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Release|Any CPU.Build.0 = Release|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Release|x64.ActiveCfg = Release|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Release|x64.Build.0 = Release|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Release|x86.ActiveCfg = Release|Any CPU
+ {68E4D3E2-AE19-403F-8436-1D87924B3903}.Release|x86.Build.0 = Release|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Debug|x64.Build.0 = Debug|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Debug|x86.Build.0 = Debug|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x64.ActiveCfg = Release|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x64.Build.0 = Release|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x86.ActiveCfg = Release|Any CPU
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {4F7DCA8A-8B67-4277-8F14-FA43E479CB9B} = {A7EC3CF5-76B0-4235-AE9F-05409E3308B9}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {EA12D69B-8232-40F9-98F8-8A1C73796BFE}
+ EndGlobalSection
+EndGlobal