From 66d11bbe9e533ec5b296b3075faaa237bfd8f65a Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 01:27:18 +0100 Subject: [PATCH 01/49] Expose Crc32 Implementation and implement Crc32 software fallback --- .../src/System/Numerics/BitOperations.cs | 108 ++++++++++++++++++ .../System.Runtime/ref/System.Runtime.cs | 8 ++ 2 files changed, 116 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 6a7141cd01cd4..b4d745fe5371d 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -708,5 +708,113 @@ public static nuint RotateRight(nuint value, int offset) return (nuint)RotateRight((uint)value, offset); #endif } + + [CLSCompliant(false)] + public static uint Crc32(uint crc, byte data) + { + if (Sse42.IsSupported) + { + // uint32_t __crc32b (uint32_t a, uint8_t b) + return Sse42.Crc32(crc, data); + } + if (Runtime.Intrinsics.Arm.Crc32.IsSupported) + { + // uint32_t __crc32b (uint32_t a, uint8_t b) + return Runtime.Intrinsics.Arm.Crc32.ComputeCrc32(crc, data); + } + + + // Software fallback + + crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; + crc ^= data & 0xFFu; // Implicit byte to uint conversion + Sign Truncation + crc ^= (crc & 0xFF) >> 4; + crc ^= (crc << 12) & 0xffff; + crc ^= ((crc & 0xFF) << 5) & 0xffff; + + return crc; + } + + [CLSCompliant(false)] + public static uint Crc32(uint crc, ushort data) + { + if (Sse42.IsSupported) + { + // unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) + return Sse42.Crc32(crc, data); + } + if (Runtime.Intrinsics.Arm.Crc32.IsSupported) + { + // uint32_t __crc32h (uint32_t a, uint16_t b) + return Runtime.Intrinsics.Arm.Crc32.ComputeCrc32(crc, data); + } + + + // Software fallback + + // Implicit byte[] to ReadOnlySpan conversion + ReadOnlySpan bytes = BitConverter.GetBytes(data); + + foreach (byte b in bytes) + { + crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; + crc ^= b & 0xFFu; // Implicit byte to uint conversion + Sign Truncation + crc ^= (crc & 0xFF) >> 4; + crc ^= (crc << 12) & 0xffff; + crc ^= ((crc & 0xFF) << 5) & 0xffff; + } + + return crc; + } + + [CLSCompliant(false)] + public static uint Crc32(uint crc, uint data) + { + if (Sse42.IsSupported) + { + // unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) + return Sse42.Crc32(crc, data); + } + if (Runtime.Intrinsics.Arm.Crc32.IsSupported) + { + // uint32_t __crc32w (uint32_t a, uint32_t b) + return Runtime.Intrinsics.Arm.Crc32.ComputeCrc32(crc, data); + } + + + // Software fallback + + // Implicit byte[] to ReadOnlySpan conversion + ReadOnlySpan bytes = BitConverter.GetBytes(data); + + foreach (byte b in bytes) + { + crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; + crc ^= b & 0xFFu; // Implicit byte to uint conversion + Sign Truncation + crc ^= (crc & 0xFF) >> 4; + crc ^= (crc << 12) & 0xffff; + crc ^= ((crc & 0xFF) << 5) & 0xffff; + } + + return crc; + } + + [CLSCompliant(false)] + public static uint Crc32(uint crc, ulong data) + { + // Implicit byte[] to ReadOnlySpan conversion + ReadOnlySpan bytes = BitConverter.GetBytes(data); + + foreach (byte b in bytes) + { + crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; + crc ^= b & 0xFFu; // Implicit byte to uint conversion + Sign Truncation + crc ^= (crc & 0xFF) >> 4; + crc ^= (crc << 12) & 0xffff; + crc ^= ((crc & 0xFF) << 5) & 0xffff; + } + + return crc; + } } } diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index bd2e0d81869b2..9a474ff300585 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -11129,6 +11129,14 @@ public static partial class BitOperations public static int TrailingZeroCount(nint value) { throw null; } [System.CLSCompliantAttribute(false)] public static int TrailingZeroCount(nuint value) { throw null; } + [System.CLSCompliantAttribute(false)] + public static uint Crc32C(uint crc, byte data) { throw null; } + [System.CLSCompliantAttribute(false)] + public static uint Crc32C(uint crc, ushort data) { throw null; } + [System.CLSCompliantAttribute(false)] + public static uint Crc32C(uint crc, uint data) { throw null; } + [System.CLSCompliantAttribute(false)] + public static uint Crc32C(uint crc, ulong data) { throw null; } } } namespace System.Reflection From d33918c6bf6d52c2328215329646c5df1dcd5750 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 09:37:43 +0100 Subject: [PATCH 02/49] Fix signature of BitOperation Crc32 methods --- src/libraries/System.Runtime/ref/System.Runtime.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index 9a474ff300585..99ada40460d21 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -11130,13 +11130,13 @@ public static partial class BitOperations [System.CLSCompliantAttribute(false)] public static int TrailingZeroCount(nuint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32C(uint crc, byte data) { throw null; } + public static uint Crc32(uint crc, byte data) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32C(uint crc, ushort data) { throw null; } + public static uint Crc32(uint crc, ushort data) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32C(uint crc, uint data) { throw null; } + public static uint Crc32(uint crc, uint data) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32C(uint crc, ulong data) { throw null; } + public static uint Crc32(uint crc, ulong data) { throw null; } } } namespace System.Reflection From b8eb138a1d24f847d33dac29b7f1fa99d22d65a4 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 09:52:29 +0100 Subject: [PATCH 03/49] Implement common test cases --- .../System.Runtime.Extensions.sln | 233 ++++++------ .../System/Numerics/BitOperationsTests.cs | 44 +++ .../System.Runtime/System.Runtime.sln | 359 +++++++++--------- 3 files changed, 347 insertions(+), 289 deletions(-) diff --git a/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln b/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln index d19cfb44381f9..0d8ede8f05226 100644 --- a/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln +++ b/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln @@ -1,4 +1,8 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31702.278 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{D7A1E176-1515-41FE-86D0-A46C82B87B05}" @@ -27,7 +31,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestAppOutsideOfTPA", "test EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoidMainWithExitCodeApp", "tests\VoidMainWithExitCodeApp\VoidMainWithExitCodeApp.csproj", "{F55614A7-859C-4171-844B-46F37EDDD351}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{43D09D13-38C0-4504-AB84-D5F6B76170DF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{43D09D13-38C0-4504-AB84-D5F6B76170DF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.SourceGeneration", "..\System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj", "{A2438CFE-792C-4217-B060-E85A38B37B07}" EndProject @@ -40,18 +44,27 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{E603EA66-B62A-4B5E-93D1-30F8CC0AC497}" EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{5d8a8ef7-9a44-45c3-b7b2-b44a296a1be7}*SharedItemsImports = 5 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 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 - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.ActiveCfg = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.Build.0 = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.ActiveCfg = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.Build.0 = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.ActiveCfg = Checked|x86 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.Build.0 = Checked|x86 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Debug|Any CPU.ActiveCfg = Debug|x64 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Debug|Any CPU.Build.0 = Debug|x64 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Debug|x64.ActiveCfg = Debug|x64 @@ -64,12 +77,12 @@ Global {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Release|x64.Build.0 = Release|x64 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Release|x86.ActiveCfg = Release|x86 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Release|x86.Build.0 = Release|x86 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.ActiveCfg = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.Build.0 = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.ActiveCfg = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.Build.0 = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.ActiveCfg = Checked|x86 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.Build.0 = Checked|x86 + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.Build.0 = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.ActiveCfg = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.Build.0 = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.ActiveCfg = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.Build.0 = Debug|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Debug|Any CPU.Build.0 = Debug|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -82,12 +95,12 @@ Global {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Release|x64.Build.0 = Release|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Release|x86.ActiveCfg = Release|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Release|x86.Build.0 = Release|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.Build.0 = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.ActiveCfg = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.Build.0 = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.ActiveCfg = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.Build.0 = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.ActiveCfg = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.Build.0 = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.ActiveCfg = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.Build.0 = Debug|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -100,12 +113,12 @@ Global {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Release|x64.Build.0 = Release|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Release|x86.ActiveCfg = Release|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Release|x86.Build.0 = Release|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.ActiveCfg = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.Build.0 = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.ActiveCfg = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.Build.0 = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.ActiveCfg = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.Build.0 = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.ActiveCfg = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.Build.0 = Debug|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -118,12 +131,12 @@ Global {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Release|x64.Build.0 = Release|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Release|x86.ActiveCfg = Release|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Release|x86.Build.0 = Release|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.ActiveCfg = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.Build.0 = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.ActiveCfg = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.Build.0 = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.Build.0 = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.ActiveCfg = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.Build.0 = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.ActiveCfg = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.Build.0 = Debug|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Debug|Any CPU.Build.0 = Debug|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -136,12 +149,12 @@ Global {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Release|x64.Build.0 = Release|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Release|x86.ActiveCfg = Release|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Release|x86.Build.0 = Release|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.Build.0 = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.ActiveCfg = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.Build.0 = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.ActiveCfg = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.Build.0 = Debug|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.Build.0 = Debug|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -154,12 +167,12 @@ Global {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.Build.0 = Release|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.ActiveCfg = Release|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.Build.0 = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.Build.0 = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.ActiveCfg = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.Build.0 = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.ActiveCfg = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.Build.0 = Debug|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Debug|Any CPU.Build.0 = Debug|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -172,12 +185,12 @@ Global {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Release|x64.Build.0 = Release|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Release|x86.ActiveCfg = Release|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Release|x86.Build.0 = Release|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.ActiveCfg = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.Build.0 = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.ActiveCfg = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.Build.0 = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.Build.0 = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.ActiveCfg = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.Build.0 = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.ActiveCfg = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.Build.0 = Debug|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Debug|Any CPU.Build.0 = Debug|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -190,12 +203,12 @@ Global {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Release|x64.Build.0 = Release|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Release|x86.ActiveCfg = Release|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Release|x86.Build.0 = Release|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.Build.0 = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.ActiveCfg = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.Build.0 = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.ActiveCfg = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.Build.0 = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.ActiveCfg = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.Build.0 = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.ActiveCfg = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.Build.0 = Debug|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Debug|Any CPU.Build.0 = Debug|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -208,12 +221,12 @@ Global {01EC2059-605F-472C-A255-ED76197F62CD}.Release|x64.Build.0 = Release|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Release|x86.ActiveCfg = Release|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Release|x86.Build.0 = Release|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.ActiveCfg = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.Build.0 = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.ActiveCfg = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.Build.0 = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.Build.0 = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.ActiveCfg = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.Build.0 = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.ActiveCfg = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.Build.0 = Debug|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -226,12 +239,12 @@ Global {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Release|x64.Build.0 = Release|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Release|x86.ActiveCfg = Release|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Release|x86.Build.0 = Release|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.Build.0 = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.ActiveCfg = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.Build.0 = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.ActiveCfg = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.Build.0 = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.ActiveCfg = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.Build.0 = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.ActiveCfg = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.Build.0 = Debug|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Debug|Any CPU.Build.0 = Debug|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -244,12 +257,12 @@ Global {9192FB4F-9A3B-48CA-AB53-322888009601}.Release|x64.Build.0 = Release|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Release|x86.ActiveCfg = Release|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Release|x86.Build.0 = Release|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.ActiveCfg = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.Build.0 = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.ActiveCfg = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.Build.0 = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.ActiveCfg = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.Build.0 = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.ActiveCfg = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.Build.0 = Debug|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Debug|Any CPU.Build.0 = Debug|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -262,12 +275,12 @@ Global {1FDA0C56-0687-4F08-B147-E997C026A12D}.Release|x64.Build.0 = Release|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Release|x86.ActiveCfg = Release|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Release|x86.Build.0 = Release|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.ActiveCfg = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.Build.0 = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.ActiveCfg = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.Build.0 = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.Build.0 = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.ActiveCfg = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.Build.0 = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.ActiveCfg = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.Build.0 = Debug|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Debug|Any CPU.Build.0 = Debug|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -280,12 +293,12 @@ Global {397D1AB1-0A29-462A-9F05-14015B8B5796}.Release|x64.Build.0 = Release|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Release|x86.ActiveCfg = Release|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Release|x86.Build.0 = Release|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.Build.0 = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.ActiveCfg = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.Build.0 = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.ActiveCfg = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.Build.0 = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.ActiveCfg = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.Build.0 = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.ActiveCfg = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.Build.0 = Debug|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Debug|Any CPU.Build.0 = Debug|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -298,12 +311,12 @@ Global {F55614A7-859C-4171-844B-46F37EDDD351}.Release|x64.Build.0 = Release|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Release|x86.ActiveCfg = Release|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Release|x86.Build.0 = Release|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.ActiveCfg = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.Build.0 = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.ActiveCfg = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.Build.0 = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.Build.0 = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.ActiveCfg = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.Build.0 = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.ActiveCfg = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.Build.0 = Debug|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Debug|Any CPU.Build.0 = Debug|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -316,12 +329,12 @@ Global {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Release|x64.Build.0 = Release|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Release|x86.ActiveCfg = Release|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Release|x86.Build.0 = Release|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.Build.0 = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.ActiveCfg = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.Build.0 = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.ActiveCfg = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.Build.0 = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.Build.0 = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.ActiveCfg = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.Build.0 = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.ActiveCfg = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.Build.0 = Debug|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -334,12 +347,12 @@ Global {A2438CFE-792C-4217-B060-E85A38B37B07}.Release|x64.Build.0 = Release|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Release|x86.ActiveCfg = Release|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Release|x86.Build.0 = Release|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.ActiveCfg = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.Build.0 = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.ActiveCfg = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.Build.0 = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.Build.0 = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.ActiveCfg = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.Build.0 = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.ActiveCfg = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.Build.0 = Debug|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Debug|Any CPU.Build.0 = Debug|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -352,34 +365,28 @@ Global {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Release|x64.Build.0 = Release|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Release|x86.ActiveCfg = Release|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Release|x86.Build.0 = Release|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.Build.0 = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.ActiveCfg = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.Build.0 = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.ActiveCfg = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {D7A1E176-1515-41FE-86D0-A46C82B87B05} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {C7112A41-1DC9-421E-88A0-8830D081A7B1} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} {04BA3E3C-6979-4792-B19E-C797AD607F42} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {959EAFBC-9394-4E25-9A84-0B85152A7FCD} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {43D09D13-38C0-4504-AB84-D5F6B76170DF} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {A2438CFE-792C-4217-B060-E85A38B37B07} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {D7A1E176-1515-41FE-86D0-A46C82B87B05} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {01EC2059-605F-472C-A255-ED76197F62CD} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {9192FB4F-9A3B-48CA-AB53-322888009601} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {1FDA0C56-0687-4F08-B147-E997C026A12D} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {397D1AB1-0A29-462A-9F05-14015B8B5796} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {F55614A7-859C-4171-844B-46F37EDDD351} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} - {959EAFBC-9394-4E25-9A84-0B85152A7FCD} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} + {43D09D13-38C0-4504-AB84-D5F6B76170DF} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {A2438CFE-792C-4217-B060-E85A38B37B07} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D347D246-1A9D-4D45-83A4-58C47241FE13} diff --git a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs index 2bfc0d26ad6d2..576ed58a1f96e 100644 --- a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs +++ b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs @@ -887,5 +887,49 @@ public static void BitOps_RoundUpToPow2_nuint_64(ulong value, ulong expected) { Assert.Equal(expected, BitOperations.RoundUpToPowerOf2((nuint) value)); } + + [Theory] + [InlineData(0, 0, 0)] + [InlineData(0, 120, 4215344322)] + [InlineData(0, byte.MaxValue, 2910671697)] + [InlineData(123, byte.MaxValue, 1164749927)] + public static void BitOps_Crc32_byte(uint crc, byte data, uint expected) + { + var obtained = BitOperations.Crc32(crc, data); + Assert.Equal(expected, obtained); + } + + [Theory] + [InlineData(0, 0, 0)] + [InlineData(0, 120, 575477567)] + [InlineData(0, ushort.MaxValue, 245266386)] + [InlineData(123, ushort.MaxValue, 406112372)] + public static void BitOps_Crc32_ushort(uint crc, ushort data, uint expected) + { + var obtained = BitOperations.Crc32(crc, data); + Assert.Equal(expected, obtained); + } + + [Theory] + [InlineData(0, 0, 0)] + [InlineData(0, 120, 1671666103)] + [InlineData(0, uint.MaxValue, 3080238136)] + [InlineData(123, uint.MaxValue, 3055133878)] + public static void BitOps_Crc32_uint(uint crc, uint data, uint expected) + { + var obtained = BitOperations.Crc32(crc, data); + Assert.Equal(expected, obtained); + } + + [Theory] + [InlineData(0, 0, 0)] + [InlineData(0, 120, 44758)] + [InlineData(0, ulong.MaxValue, 42721)] + [InlineData(123, ulong.MaxValue, 27055)] + public static void BitOps_Crc32_ulong(uint crc, uint data, uint expected) + { + var obtained = BitOperations.Crc32(crc, data); + Assert.Equal(expected, obtained); + } } } diff --git a/src/libraries/System.Runtime/System.Runtime.sln b/src/libraries/System.Runtime/System.Runtime.sln index fc6aec975c863..aec93ad8e993e 100644 --- a/src/libraries/System.Runtime/System.Runtime.sln +++ b/src/libraries/System.Runtime/System.Runtime.sln @@ -1,4 +1,8 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31702.278 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{71AB8240-F179-4B21-A8BE-8BE6CD774ED9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities.Unicode", "..\Common\tests\TestUtilities.Unicode\TestUtilities.Unicode.csproj", "{9DF0247E-5B81-4EF3-82CA-3E70B3A56742}" @@ -21,7 +25,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{26541647-B653-4480-9448-BA275D53C81D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{7301E27F-F136-4649-947D-17F7E8DBCA08}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{7301E27F-F136-4649-947D-17F7E8DBCA08}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.SourceGeneration", "..\System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj", "{A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}" EndProject @@ -60,18 +64,27 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{5B2B5E7E-A2FB-4095-9E79-404BF53E0133}" EndProject Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{71ab8240-f179-4b21-a8be-8be6cd774ed9}*SharedItemsImports = 5 + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 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 - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.ActiveCfg = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.Build.0 = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.ActiveCfg = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.Build.0 = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.ActiveCfg = Checked|x86 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.Build.0 = Checked|x86 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Debug|Any CPU.ActiveCfg = Debug|x64 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Debug|Any CPU.Build.0 = Debug|x64 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Debug|x64.ActiveCfg = Debug|x64 @@ -84,12 +97,12 @@ Global {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Release|x64.Build.0 = Release|x64 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Release|x86.ActiveCfg = Release|x86 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Release|x86.Build.0 = Release|x86 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.ActiveCfg = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.Build.0 = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.ActiveCfg = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.Build.0 = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.ActiveCfg = Checked|x86 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.Build.0 = Checked|x86 + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.ActiveCfg = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.Build.0 = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.ActiveCfg = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.Build.0 = Debug|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Debug|Any CPU.Build.0 = Debug|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -102,12 +115,12 @@ Global {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Release|x64.Build.0 = Release|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Release|x86.ActiveCfg = Release|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Release|x86.Build.0 = Release|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.ActiveCfg = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.Build.0 = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.ActiveCfg = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.Build.0 = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.Build.0 = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.ActiveCfg = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.Build.0 = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.ActiveCfg = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.Build.0 = Debug|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -120,12 +133,12 @@ Global {FB17AC52-1633-4845-932B-9218DF895957}.Release|x64.Build.0 = Release|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Release|x86.ActiveCfg = Release|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Release|x86.Build.0 = Release|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.Build.0 = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.ActiveCfg = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.Build.0 = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.ActiveCfg = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.Build.0 = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.Build.0 = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.ActiveCfg = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.Build.0 = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.ActiveCfg = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.Build.0 = Debug|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Debug|Any CPU.Build.0 = Debug|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -138,12 +151,12 @@ Global {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Release|x64.Build.0 = Release|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Release|x86.ActiveCfg = Release|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Release|x86.Build.0 = Release|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.Build.0 = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.ActiveCfg = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.Build.0 = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.ActiveCfg = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.Build.0 = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.ActiveCfg = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.Build.0 = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.ActiveCfg = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.Build.0 = Debug|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -156,12 +169,12 @@ Global {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Release|x64.Build.0 = Release|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Release|x86.ActiveCfg = Release|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Release|x86.Build.0 = Release|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.ActiveCfg = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.Build.0 = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.ActiveCfg = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.Build.0 = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.ActiveCfg = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.Build.0 = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.ActiveCfg = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.Build.0 = Debug|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -174,12 +187,12 @@ Global {9C41B325-1225-43CA-9436-549AFF6D90A1}.Release|x64.Build.0 = Release|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Release|x86.ActiveCfg = Release|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Release|x86.Build.0 = Release|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.ActiveCfg = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.Build.0 = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.ActiveCfg = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.Build.0 = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.ActiveCfg = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.Build.0 = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.ActiveCfg = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.Build.0 = Debug|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Debug|Any CPU.Build.0 = Debug|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -192,12 +205,12 @@ Global {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Release|x64.Build.0 = Release|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Release|x86.ActiveCfg = Release|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Release|x86.Build.0 = Release|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.ActiveCfg = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.Build.0 = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.ActiveCfg = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.Build.0 = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.Build.0 = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.ActiveCfg = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.Build.0 = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.ActiveCfg = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.Build.0 = Debug|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -210,12 +223,12 @@ Global {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Release|x64.Build.0 = Release|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Release|x86.ActiveCfg = Release|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Release|x86.Build.0 = Release|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.ActiveCfg = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.Build.0 = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.ActiveCfg = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.Build.0 = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.Build.0 = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.ActiveCfg = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.Build.0 = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.ActiveCfg = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.Build.0 = Debug|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Debug|Any CPU.Build.0 = Debug|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -228,12 +241,12 @@ Global {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Release|x64.Build.0 = Release|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Release|x86.ActiveCfg = Release|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Release|x86.Build.0 = Release|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.ActiveCfg = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.Build.0 = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.ActiveCfg = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.Build.0 = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.ActiveCfg = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.Build.0 = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.ActiveCfg = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.Build.0 = Debug|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Debug|Any CPU.Build.0 = Debug|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -246,12 +259,12 @@ Global {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Release|x64.Build.0 = Release|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Release|x86.ActiveCfg = Release|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Release|x86.Build.0 = Release|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.ActiveCfg = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.Build.0 = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.ActiveCfg = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.Build.0 = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.Build.0 = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.ActiveCfg = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.Build.0 = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.ActiveCfg = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.Build.0 = Debug|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Debug|Any CPU.Build.0 = Debug|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -264,12 +277,12 @@ Global {26541647-B653-4480-9448-BA275D53C81D}.Release|x64.Build.0 = Release|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Release|x86.ActiveCfg = Release|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Release|x86.Build.0 = Release|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.ActiveCfg = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.Build.0 = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.ActiveCfg = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.Build.0 = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.Build.0 = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.ActiveCfg = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.Build.0 = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.ActiveCfg = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.Build.0 = Debug|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Debug|Any CPU.Build.0 = Debug|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -282,12 +295,12 @@ Global {7301E27F-F136-4649-947D-17F7E8DBCA08}.Release|x64.Build.0 = Release|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Release|x86.ActiveCfg = Release|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Release|x86.Build.0 = Release|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.Build.0 = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.ActiveCfg = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.Build.0 = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.ActiveCfg = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.Build.0 = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.Build.0 = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.ActiveCfg = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.Build.0 = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.ActiveCfg = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.Build.0 = Debug|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Debug|Any CPU.Build.0 = Debug|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -300,12 +313,12 @@ Global {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Release|x64.Build.0 = Release|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Release|x86.ActiveCfg = Release|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Release|x86.Build.0 = Release|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.ActiveCfg = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.Build.0 = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.ActiveCfg = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.Build.0 = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.ActiveCfg = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.Build.0 = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.ActiveCfg = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.Build.0 = Debug|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Debug|Any CPU.Build.0 = Debug|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -318,12 +331,12 @@ Global {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Release|x64.Build.0 = Release|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Release|x86.ActiveCfg = Release|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Release|x86.Build.0 = Release|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.ActiveCfg = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.Build.0 = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.ActiveCfg = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.Build.0 = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.Build.0 = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.ActiveCfg = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.Build.0 = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.ActiveCfg = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.Build.0 = Debug|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Debug|Any CPU.Build.0 = Debug|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -336,12 +349,12 @@ Global {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Release|x64.Build.0 = Release|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Release|x86.ActiveCfg = Release|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Release|x86.Build.0 = Release|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.ActiveCfg = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.Build.0 = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.ActiveCfg = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.Build.0 = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.Build.0 = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.ActiveCfg = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.Build.0 = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.ActiveCfg = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.Build.0 = Debug|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Debug|Any CPU.Build.0 = Debug|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -354,12 +367,12 @@ Global {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Release|x64.Build.0 = Release|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Release|x86.ActiveCfg = Release|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Release|x86.Build.0 = Release|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.Build.0 = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.ActiveCfg = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.Build.0 = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.ActiveCfg = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.Build.0 = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.Build.0 = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.ActiveCfg = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.Build.0 = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.ActiveCfg = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.Build.0 = Debug|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Debug|Any CPU.Build.0 = Debug|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -372,12 +385,12 @@ Global {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Release|x64.Build.0 = Release|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Release|x86.ActiveCfg = Release|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Release|x86.Build.0 = Release|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.ActiveCfg = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.Build.0 = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.ActiveCfg = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.Build.0 = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.ActiveCfg = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.Build.0 = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.ActiveCfg = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.Build.0 = Debug|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Debug|Any CPU.Build.0 = Debug|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -390,12 +403,12 @@ Global {C230AC88-A377-4BEB-824F-AB174C14DC86}.Release|x64.Build.0 = Release|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Release|x86.ActiveCfg = Release|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Release|x86.Build.0 = Release|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.ActiveCfg = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.Build.0 = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.ActiveCfg = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.Build.0 = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.ActiveCfg = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.Build.0 = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.ActiveCfg = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.Build.0 = Debug|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Debug|Any CPU.Build.0 = Debug|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -408,12 +421,12 @@ Global {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Release|x64.Build.0 = Release|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Release|x86.ActiveCfg = Release|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Release|x86.Build.0 = Release|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.ActiveCfg = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.Build.0 = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.ActiveCfg = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.Build.0 = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.Build.0 = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.ActiveCfg = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.Build.0 = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.ActiveCfg = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.Build.0 = Debug|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Debug|Any CPU.Build.0 = Debug|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -426,12 +439,12 @@ Global {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Release|x64.Build.0 = Release|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Release|x86.ActiveCfg = Release|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Release|x86.Build.0 = Release|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.Build.0 = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.ActiveCfg = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.Build.0 = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.ActiveCfg = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.Build.0 = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.ActiveCfg = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.Build.0 = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.ActiveCfg = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.Build.0 = Debug|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -444,12 +457,12 @@ Global {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Release|x64.Build.0 = Release|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Release|x86.ActiveCfg = Release|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Release|x86.Build.0 = Release|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.ActiveCfg = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.Build.0 = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.ActiveCfg = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.Build.0 = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.ActiveCfg = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.Build.0 = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.ActiveCfg = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.Build.0 = Debug|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Debug|Any CPU.Build.0 = Debug|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -462,12 +475,12 @@ Global {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Release|x64.Build.0 = Release|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Release|x86.ActiveCfg = Release|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Release|x86.Build.0 = Release|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.ActiveCfg = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.Build.0 = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.ActiveCfg = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.Build.0 = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.ActiveCfg = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.Build.0 = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.ActiveCfg = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.Build.0 = Debug|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -480,12 +493,12 @@ Global {F6A8185B-07C6-401D-9B40-3C560239E05F}.Release|x64.Build.0 = Release|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Release|x86.ActiveCfg = Release|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Release|x86.Build.0 = Release|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.ActiveCfg = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.Build.0 = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.ActiveCfg = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.Build.0 = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.Build.0 = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.ActiveCfg = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.Build.0 = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.ActiveCfg = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.Build.0 = Debug|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Debug|Any CPU.Build.0 = Debug|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -498,12 +511,12 @@ Global {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Release|x64.Build.0 = Release|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Release|x86.ActiveCfg = Release|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Release|x86.Build.0 = Release|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.Build.0 = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.ActiveCfg = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.Build.0 = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.ActiveCfg = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.Build.0 = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.ActiveCfg = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.Build.0 = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.ActiveCfg = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.Build.0 = Debug|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Debug|Any CPU.Build.0 = Debug|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -516,12 +529,12 @@ Global {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Release|x64.Build.0 = Release|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Release|x86.ActiveCfg = Release|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Release|x86.Build.0 = Release|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.ActiveCfg = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.Build.0 = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.ActiveCfg = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.Build.0 = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.Build.0 = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.ActiveCfg = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.Build.0 = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.ActiveCfg = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.Build.0 = Debug|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Debug|Any CPU.Build.0 = Debug|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -534,12 +547,12 @@ Global {82728202-1098-4E16-B598-5762EAF67D08}.Release|x64.Build.0 = Release|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Release|x86.ActiveCfg = Release|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Release|x86.Build.0 = Release|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.Build.0 = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.ActiveCfg = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.Build.0 = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.ActiveCfg = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.Build.0 = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.Build.0 = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.ActiveCfg = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.Build.0 = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.ActiveCfg = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.Build.0 = Debug|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Debug|Any CPU.Build.0 = Debug|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -552,44 +565,38 @@ Global {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Release|x64.Build.0 = Release|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Release|x86.ActiveCfg = Release|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Release|x86.Build.0 = Release|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.Build.0 = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.ActiveCfg = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.Build.0 = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.ActiveCfg = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {71AB8240-F179-4B21-A8BE-8BE6CD774ED9} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} + {FB17AC52-1633-4845-932B-9218DF895957} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {9C41B325-1225-43CA-9436-549AFF6D90A1} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B} = {28140562-A65A-48E9-ABAB-53BA939084F0} {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3} = {28140562-A65A-48E9-ABAB-53BA939084F0} {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {26541647-B653-4480-9448-BA275D53C81D} = {28140562-A65A-48E9-ABAB-53BA939084F0} {7301E27F-F136-4649-947D-17F7E8DBCA08} = {28140562-A65A-48E9-ABAB-53BA939084F0} {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {A83A8520-F5E2-49B4-83BC-0F82A412951D} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {F6A8185B-07C6-401D-9B40-3C560239E05F} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} - {FB17AC52-1633-4845-932B-9218DF895957} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {3B79DD71-8C2F-41BC-A1A7-86A490D6C726} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {4EE36055-AD7C-4779-B3F6-08687960DCC3} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {C230AC88-A377-4BEB-824F-AB174C14DC86} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {0F83B07B-2E3F-4708-BE6D-7A8DA8168803} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} - {9C41B325-1225-43CA-9436-549AFF6D90A1} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} + {F6A8185B-07C6-401D-9B40-3C560239E05F} = {28140562-A65A-48E9-ABAB-53BA939084F0} {25E8AB9D-2D10-44F5-9F83-5A5134526771} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13} = {28140562-A65A-48E9-ABAB-53BA939084F0} {82728202-1098-4E16-B598-5762EAF67D08} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA} = {28140562-A65A-48E9-ABAB-53BA939084F0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {19706846-1F47-42ED-B649-B0982EE96E6B} From f22c90d39e9fec5f646bc65988cd06b7837e25ed Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 10:43:36 +0100 Subject: [PATCH 04/49] Add X64 Intrinsic support for Crc32(uint crc, ulong data) --- .../src/System/Numerics/BitOperations.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index b4d745fe5371d..cbd6afc1160b0 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -802,6 +802,20 @@ public static uint Crc32(uint crc, uint data) [CLSCompliant(false)] public static uint Crc32(uint crc, ulong data) { + if (Sse42.X64.IsSupported) + { + // unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) + return (uint)Sse42.X64.Crc32(crc, data); + } + + if (Runtime.Intrinsics.Arm.Crc32.Arm64.IsSupported) + { + // uint32_t __crc32d (uint32_t a, uint64_t b) + return Runtime.Intrinsics.Arm.Crc32.Arm64.ComputeCrc32(crc, data); + } + + // Software fallback + // Implicit byte[] to ReadOnlySpan conversion ReadOnlySpan bytes = BitConverter.GetBytes(data); From 3b0313cef624211c5621af23df4b6b5d67a932a0 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 10:48:44 +0100 Subject: [PATCH 05/49] Add documentation comments --- .../src/System/Numerics/BitOperations.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index cbd6afc1160b0..cf350e93418d9 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -709,6 +709,16 @@ public static nuint RotateRight(nuint value, int offset) #endif } + /// + /// Calculates the CRC (Cyclic redundancy check) checksum. + /// + /// Uses following Hardware Intrinsics, if supported: + /// * uint32_t __crc32b (uint32_t a, uint8_t b) + /// * uint32_t __crc32b (uint32_t a, uint8_t b) + /// + /// The base value to calculate checksum on + /// The checksum data + /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32(uint crc, byte data) { @@ -735,6 +745,16 @@ public static uint Crc32(uint crc, byte data) return crc; } + /// + /// Calculates the CRC (Cyclic redundancy check) checksum. + /// + /// Uses following Hardware Intrinsics, if supported: + /// * unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) + /// * uint32_t __crc32h (uint32_t a, uint16_t b) + /// + /// The base value to calculate checksum on + /// The checksum data + /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32(uint crc, ushort data) { @@ -767,6 +787,16 @@ public static uint Crc32(uint crc, ushort data) return crc; } + /// + /// Calculates the CRC (Cyclic redundancy check) checksum. + /// + /// Uses following Hardware Intrinsics, if supported: + /// * unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) + /// * uint32_t __crc32w (uint32_t a, uint32_t b) + /// + /// The base value to calculate checksum on + /// The checksum data + /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32(uint crc, uint data) { @@ -799,6 +829,16 @@ public static uint Crc32(uint crc, uint data) return crc; } + /// + /// Calculates the CRC (Cyclic redundancy check) checksum. + /// + /// Uses following Hardware Intrinsics, if supported: + /// * unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) + /// * uint32_t __crc32d (uint32_t a, uint64_t b) + /// + /// The base value to calculate checksum on + /// The checksum data + /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32(uint crc, ulong data) { From ece5c27d8655278e7e5254502b3f6ff4bc3d1a2f Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 10:56:48 +0100 Subject: [PATCH 06/49] Remove Hwintrinsic doc-comment --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index cf350e93418d9..126d940d11844 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -714,7 +714,6 @@ public static nuint RotateRight(nuint value, int offset) /// /// Uses following Hardware Intrinsics, if supported: /// * uint32_t __crc32b (uint32_t a, uint8_t b) - /// * uint32_t __crc32b (uint32_t a, uint8_t b) /// /// The base value to calculate checksum on /// The checksum data From 1474babd59cf3620b5cf73720ab50d7876473bd9 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 14:37:13 +0100 Subject: [PATCH 07/49] Rename Crc32 to Crc32C --- .../src/System/Numerics/BitOperations.cs | 31 ++++++++++--------- .../System/Numerics/BitOperationsTests.cs | 16 +++++----- .../System.Runtime/ref/System.Runtime.cs | 8 ++--- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 126d940d11844..d4951d53ded98 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -714,22 +714,23 @@ public static nuint RotateRight(nuint value, int offset) /// /// Uses following Hardware Intrinsics, if supported: /// * uint32_t __crc32b (uint32_t a, uint8_t b) + /// * uint32_t __crc32cb (uint32_t a, uint8_t b) /// /// The base value to calculate checksum on /// The checksum data /// The CRC-checksum [CLSCompliant(false)] - public static uint Crc32(uint crc, byte data) + public static uint Crc32C(uint crc, byte data) { if (Sse42.IsSupported) { // uint32_t __crc32b (uint32_t a, uint8_t b) return Sse42.Crc32(crc, data); } - if (Runtime.Intrinsics.Arm.Crc32.IsSupported) + if (Crc32.IsSupported) { - // uint32_t __crc32b (uint32_t a, uint8_t b) - return Runtime.Intrinsics.Arm.Crc32.ComputeCrc32(crc, data); + // uint32_t __crc32cb (uint32_t a, uint8_t b) + return Crc32.ComputeCrc32C(crc, data); } @@ -749,23 +750,23 @@ public static uint Crc32(uint crc, byte data) /// /// Uses following Hardware Intrinsics, if supported: /// * unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) - /// * uint32_t __crc32h (uint32_t a, uint16_t b) + /// * uint32_t __crc32ch (uint32_t a, uint16_t b) /// /// The base value to calculate checksum on /// The checksum data /// The CRC-checksum [CLSCompliant(false)] - public static uint Crc32(uint crc, ushort data) + public static uint Crc32C(uint crc, ushort data) { if (Sse42.IsSupported) { // unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) return Sse42.Crc32(crc, data); } - if (Runtime.Intrinsics.Arm.Crc32.IsSupported) + if (Crc32.IsSupported) { - // uint32_t __crc32h (uint32_t a, uint16_t b) - return Runtime.Intrinsics.Arm.Crc32.ComputeCrc32(crc, data); + // uint32_t __crc32ch (uint32_t a, uint16_t b) + return Crc32.ComputeCrc32C(crc, data); } @@ -797,17 +798,17 @@ public static uint Crc32(uint crc, ushort data) /// The checksum data /// The CRC-checksum [CLSCompliant(false)] - public static uint Crc32(uint crc, uint data) + public static uint Crc32C(uint crc, uint data) { if (Sse42.IsSupported) { // unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) return Sse42.Crc32(crc, data); } - if (Runtime.Intrinsics.Arm.Crc32.IsSupported) + if (Crc32.IsSupported) { // uint32_t __crc32w (uint32_t a, uint32_t b) - return Runtime.Intrinsics.Arm.Crc32.ComputeCrc32(crc, data); + return Crc32.ComputeCrc32(crc, data); } @@ -839,7 +840,7 @@ public static uint Crc32(uint crc, uint data) /// The checksum data /// The CRC-checksum [CLSCompliant(false)] - public static uint Crc32(uint crc, ulong data) + public static uint Crc32C(uint crc, ulong data) { if (Sse42.X64.IsSupported) { @@ -847,10 +848,10 @@ public static uint Crc32(uint crc, ulong data) return (uint)Sse42.X64.Crc32(crc, data); } - if (Runtime.Intrinsics.Arm.Crc32.Arm64.IsSupported) + if (Crc32.Arm64.IsSupported) { // uint32_t __crc32d (uint32_t a, uint64_t b) - return Runtime.Intrinsics.Arm.Crc32.Arm64.ComputeCrc32(crc, data); + return Crc32.Arm64.ComputeCrc32(crc, data); } // Software fallback diff --git a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs index 576ed58a1f96e..0010120692e9b 100644 --- a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs +++ b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs @@ -893,9 +893,9 @@ public static void BitOps_RoundUpToPow2_nuint_64(ulong value, ulong expected) [InlineData(0, 120, 4215344322)] [InlineData(0, byte.MaxValue, 2910671697)] [InlineData(123, byte.MaxValue, 1164749927)] - public static void BitOps_Crc32_byte(uint crc, byte data, uint expected) + public static void BitOps_Crc32C_byte(uint crc, byte data, uint expected) { - var obtained = BitOperations.Crc32(crc, data); + var obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } @@ -904,9 +904,9 @@ public static void BitOps_Crc32_byte(uint crc, byte data, uint expected) [InlineData(0, 120, 575477567)] [InlineData(0, ushort.MaxValue, 245266386)] [InlineData(123, ushort.MaxValue, 406112372)] - public static void BitOps_Crc32_ushort(uint crc, ushort data, uint expected) + public static void BitOps_Crc32C_ushort(uint crc, ushort data, uint expected) { - var obtained = BitOperations.Crc32(crc, data); + var obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } @@ -915,9 +915,9 @@ public static void BitOps_Crc32_ushort(uint crc, ushort data, uint expected) [InlineData(0, 120, 1671666103)] [InlineData(0, uint.MaxValue, 3080238136)] [InlineData(123, uint.MaxValue, 3055133878)] - public static void BitOps_Crc32_uint(uint crc, uint data, uint expected) + public static void BitOps_Crc32C_uint(uint crc, uint data, uint expected) { - var obtained = BitOperations.Crc32(crc, data); + var obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } @@ -926,9 +926,9 @@ public static void BitOps_Crc32_uint(uint crc, uint data, uint expected) [InlineData(0, 120, 44758)] [InlineData(0, ulong.MaxValue, 42721)] [InlineData(123, ulong.MaxValue, 27055)] - public static void BitOps_Crc32_ulong(uint crc, uint data, uint expected) + public static void BitOps_Crc32C_ulong(uint crc, uint data, uint expected) { - var obtained = BitOperations.Crc32(crc, data); + var obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } } diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index 99ada40460d21..9a474ff300585 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -11130,13 +11130,13 @@ public static partial class BitOperations [System.CLSCompliantAttribute(false)] public static int TrailingZeroCount(nuint value) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32(uint crc, byte data) { throw null; } + public static uint Crc32C(uint crc, byte data) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32(uint crc, ushort data) { throw null; } + public static uint Crc32C(uint crc, ushort data) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32(uint crc, uint data) { throw null; } + public static uint Crc32C(uint crc, uint data) { throw null; } [System.CLSCompliantAttribute(false)] - public static uint Crc32(uint crc, ulong data) { throw null; } + public static uint Crc32C(uint crc, ulong data) { throw null; } } } namespace System.Reflection From a362cf9c14281616a210604d792d9910d2a449da Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 14:39:56 +0100 Subject: [PATCH 08/49] Remove unnessecary heap allocation --- .../src/System/Numerics/BitOperations.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index d4951d53ded98..733d8c4a48cbf 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -772,8 +772,8 @@ public static uint Crc32C(uint crc, ushort data) // Software fallback - // Implicit byte[] to ReadOnlySpan conversion - ReadOnlySpan bytes = BitConverter.GetBytes(data); + Span bytes = stackalloc byte[sizeof(ushort)]; + Unsafe.As(ref bytes[0]) = data; foreach (byte b in bytes) { @@ -814,8 +814,8 @@ public static uint Crc32C(uint crc, uint data) // Software fallback - // Implicit byte[] to ReadOnlySpan conversion - ReadOnlySpan bytes = BitConverter.GetBytes(data); + Span bytes = stackalloc byte[sizeof(uint)]; + Unsafe.As(ref bytes[0]) = data; foreach (byte b in bytes) { @@ -856,8 +856,8 @@ public static uint Crc32C(uint crc, ulong data) // Software fallback - // Implicit byte[] to ReadOnlySpan conversion - ReadOnlySpan bytes = BitConverter.GetBytes(data); + Span bytes = stackalloc byte[sizeof(ulong)]; + Unsafe.As(ref bytes[0]) = data; foreach (byte b in bytes) { From c42411b76b560715c11b3456b207d17ee7b73a4d Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Nov 2021 14:45:50 +0100 Subject: [PATCH 09/49] Fix software fallback using table-based-CRC --- .../src/System/Numerics/BitOperations.cs | 75 ++++++++++++------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 733d8c4a48cbf..c5e3c3ce0d007 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -41,6 +41,42 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; + private static ReadOnlySpan CrcTable => new uint[] + { + 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, + 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, + 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, + 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, + 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, + 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, + 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, + 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, + 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, + 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, + 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, + 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, + 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, + 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, + 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, + 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, + 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, + 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, + 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, + 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, + 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, + 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, + 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, + 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, + 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, + 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, + 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, + 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, + 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, + 2932959818, 3654703836, 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897, + 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, + 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117, + }; + /// /// Evaluate whether a given integral value is a power of 2. /// @@ -54,7 +90,7 @@ public static class BitOperations /// The value. [MethodImpl(MethodImplOptions.AggressiveInlining)] [CLSCompliant(false)] - public static bool IsPow2(uint value) => (value & (value - 1)) == 0 && value != 0 ; + public static bool IsPow2(uint value) => (value & (value - 1)) == 0 && value != 0; /// /// Evaluate whether a given integral value is a power of 2. @@ -735,14 +771,10 @@ public static uint Crc32C(uint crc, byte data) // Software fallback + int tableIndex = (int)((crc ^ data) & 0xFF); + crc = CrcTable[tableIndex] ^ (crc >> 8); - crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; - crc ^= data & 0xFFu; // Implicit byte to uint conversion + Sign Truncation - crc ^= (crc & 0xFF) >> 4; - crc ^= (crc << 12) & 0xffff; - crc ^= ((crc & 0xFF) << 5) & 0xffff; - - return crc; + return crc ^ 0xFFFFFFFF; } /// @@ -777,14 +809,11 @@ public static uint Crc32C(uint crc, ushort data) foreach (byte b in bytes) { - crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; - crc ^= b & 0xFFu; // Implicit byte to uint conversion + Sign Truncation - crc ^= (crc & 0xFF) >> 4; - crc ^= (crc << 12) & 0xffff; - crc ^= ((crc & 0xFF) << 5) & 0xffff; + int tableIndex = (int)((crc ^ b) & 0xFF); + crc = CrcTable[tableIndex] ^ (crc >> 8); } - return crc; + return crc ^ 0xFFFFFFFF; } /// @@ -819,14 +848,11 @@ public static uint Crc32C(uint crc, uint data) foreach (byte b in bytes) { - crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; - crc ^= b & 0xFFu; // Implicit byte to uint conversion + Sign Truncation - crc ^= (crc & 0xFF) >> 4; - crc ^= (crc << 12) & 0xffff; - crc ^= ((crc & 0xFF) << 5) & 0xffff; + int tableIndex = (int)((crc ^ b) & 0xFF); + crc = CrcTable[tableIndex] ^ (crc >> 8); } - return crc; + return crc ^ 0xFFFFFFFF; } /// @@ -861,14 +887,11 @@ public static uint Crc32C(uint crc, ulong data) foreach (byte b in bytes) { - crc = ((crc >> 8) | (crc << 8)) & 0xFFFF; - crc ^= b & 0xFFu; // Implicit byte to uint conversion + Sign Truncation - crc ^= (crc & 0xFF) >> 4; - crc ^= (crc << 12) & 0xffff; - crc ^= ((crc & 0xFF) << 5) & 0xffff; + int tableIndex = (int)((crc ^ b) & 0xFF); + crc = CrcTable[tableIndex] ^ (crc >> 8); } - return crc; + return crc ^ 0xFFFFFFFF; } } } From edff837f2dcb436cbc44f5d1082d3fbe2d722c01 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 06:47:51 +0100 Subject: [PATCH 10/49] Usage of uint32_t __crc32ch (uint32_t a, uint32_t b) --- .../src/System/Numerics/BitOperations.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index c5e3c3ce0d007..f6d1df9fb6ffb 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -821,7 +821,7 @@ public static uint Crc32C(uint crc, ushort data) /// /// Uses following Hardware Intrinsics, if supported: /// * unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) - /// * uint32_t __crc32w (uint32_t a, uint32_t b) + /// * uint32_t __crc32ch (uint32_t a, uint32_t b) /// /// The base value to calculate checksum on /// The checksum data @@ -836,8 +836,8 @@ public static uint Crc32C(uint crc, uint data) } if (Crc32.IsSupported) { - // uint32_t __crc32w (uint32_t a, uint32_t b) - return Crc32.ComputeCrc32(crc, data); + // uint32_t __crc32ch (uint32_t a, uint32_t b) + return Crc32.ComputeCrc32C(crc, data); } From 7ed1a092ccec86796bcd4ad7cb5c0eb01f8fb74a Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 08:12:05 +0100 Subject: [PATCH 11/49] Remove Crc.Sse42 implementation for Crc32C(uint crc, ulong data) There is no implementation which returns `uint32_t`. See https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#techs=MMX,SSE,SSE2,SSE3,SSSE3,SSE4_1,SSE4_2,AVX,AVX2,FMA,AVX_VNNI,AVX_512,KNC,AMX,SVML,Other&text=crc --- .../src/System/Numerics/BitOperations.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index f6d1df9fb6ffb..d80e3b87065c2 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -868,12 +868,6 @@ public static uint Crc32C(uint crc, uint data) [CLSCompliant(false)] public static uint Crc32C(uint crc, ulong data) { - if (Sse42.X64.IsSupported) - { - // unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) - return (uint)Sse42.X64.Crc32(crc, data); - } - if (Crc32.Arm64.IsSupported) { // uint32_t __crc32d (uint32_t a, uint64_t b) From 56953c9035057f01c2c9f87cca5f55c34e749218 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 19:10:04 +0100 Subject: [PATCH 12/49] Add SSE 4.2 x64 implementation with byte truncation for Crc32C(uint crc, ulong data) --- .../src/System/Numerics/BitOperations.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index d80e3b87065c2..181ef091bd4aa 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -868,6 +868,14 @@ public static uint Crc32C(uint crc, uint data) [CLSCompliant(false)] public static uint Crc32C(uint crc, ulong data) { + if (Sse42.X64.IsSupported) + { + // unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) + ulong result = Sse42.X64.Crc32(crc, data); + + // Truncate redundant bytes and cast to uint + return Unsafe.As(ref result); + } if (Crc32.Arm64.IsSupported) { // uint32_t __crc32d (uint32_t a, uint64_t b) From e171227ccfb7d7e521637509d88a26134eafb804 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 20:36:50 +0100 Subject: [PATCH 13/49] Replace Unsafe.As with unchecked-uint cast --- .../src/System/Numerics/BitOperations.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 181ef091bd4aa..e2d8c8bb5a4c7 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -873,8 +873,7 @@ public static uint Crc32C(uint crc, ulong data) // unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) ulong result = Sse42.X64.Crc32(crc, data); - // Truncate redundant bytes and cast to uint - return Unsafe.As(ref result); + return unchecked((uint)result); } if (Crc32.Arm64.IsSupported) { From bf95530c2092bd5f08a8db742aeda94b434cc2cf Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 21:42:51 +0100 Subject: [PATCH 14/49] Usage of WriteUnaligned instead of As MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Günther Foidl --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index e2d8c8bb5a4c7..c054375cdb623 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -805,7 +805,7 @@ public static uint Crc32C(uint crc, ushort data) // Software fallback Span bytes = stackalloc byte[sizeof(ushort)]; - Unsafe.As(ref bytes[0]) = data; + Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bytes), data); foreach (byte b in bytes) { From 4b91869527299dd5df3aacfdfbf5f095f52e19c3 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 21:43:12 +0100 Subject: [PATCH 15/49] Usage of WriteUnaligned instead of As MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Günther Foidl --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index c054375cdb623..068547e559c10 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -884,7 +884,7 @@ public static uint Crc32C(uint crc, ulong data) // Software fallback Span bytes = stackalloc byte[sizeof(ulong)]; - Unsafe.As(ref bytes[0]) = data; + Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bytes), data); foreach (byte b in bytes) { From 1ef85916540e0b719a6c047a5076e1e15de69546 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 21:43:22 +0100 Subject: [PATCH 16/49] Usage of WriteUnaligned instead of As MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Günther Foidl --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 068547e559c10..9ab2e1468573e 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -844,7 +844,7 @@ public static uint Crc32C(uint crc, uint data) // Software fallback Span bytes = stackalloc byte[sizeof(uint)]; - Unsafe.As(ref bytes[0]) = data; + Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bytes), data); foreach (byte b in bytes) { From b369a75370c46b5484f772c73bfe215317b86ca7 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Mon, 15 Nov 2021 21:46:57 +0100 Subject: [PATCH 17/49] Usage of explicit types --- .../tests/System/Numerics/BitOperationsTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs index 0010120692e9b..18cbbb9a179c0 100644 --- a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs +++ b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs @@ -895,7 +895,7 @@ public static void BitOps_RoundUpToPow2_nuint_64(ulong value, ulong expected) [InlineData(123, byte.MaxValue, 1164749927)] public static void BitOps_Crc32C_byte(uint crc, byte data, uint expected) { - var obtained = BitOperations.Crc32C(crc, data); + uint obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } @@ -906,7 +906,7 @@ public static void BitOps_Crc32C_byte(uint crc, byte data, uint expected) [InlineData(123, ushort.MaxValue, 406112372)] public static void BitOps_Crc32C_ushort(uint crc, ushort data, uint expected) { - var obtained = BitOperations.Crc32C(crc, data); + uint obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } @@ -917,7 +917,7 @@ public static void BitOps_Crc32C_ushort(uint crc, ushort data, uint expected) [InlineData(123, uint.MaxValue, 3055133878)] public static void BitOps_Crc32C_uint(uint crc, uint data, uint expected) { - var obtained = BitOperations.Crc32C(crc, data); + uint obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } @@ -928,7 +928,7 @@ public static void BitOps_Crc32C_uint(uint crc, uint data, uint expected) [InlineData(123, ulong.MaxValue, 27055)] public static void BitOps_Crc32C_ulong(uint crc, uint data, uint expected) { - var obtained = BitOperations.Crc32C(crc, data); + uint obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); } } From ca96fdfd428abec7256548c12972b1928b4702ad Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Tue, 16 Nov 2021 20:54:51 +0100 Subject: [PATCH 18/49] Fix Software-Fallback Table to Castalogni equivalent --- .../src/System/Numerics/BitOperations.cs | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 9ab2e1468573e..3b313df279a70 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -41,40 +41,40 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static ReadOnlySpan CrcTable => new uint[] + private static readonly uint[] s_crcTable = new uint[] { - 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, - 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, - 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, - 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, - 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, - 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, - 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, - 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, - 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, - 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, - 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, - 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, - 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, - 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, - 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, - 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, - 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, - 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, - 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, - 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, - 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, - 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, - 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, - 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, - 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, - 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, - 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, - 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, - 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, - 2932959818, 3654703836, 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897, - 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, - 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117, + 0x0, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, + 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, + 0x105EC76F, 0xE235446C, 0xF165B798, 0x30E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, + 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, + 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x61C6936, 0xF477EA35, + 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, + 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x5125DAD, 0x1642AE59, 0xE4292D5A, + 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, + 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, + 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0xC38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, + 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, + 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0xF36E6F7, + 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, + 0xEB1FCBAD, 0x197448AE, 0xA24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, + 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, + 0xFB410CC2, 0x92A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, + 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, + 0x82F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, + 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, + 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0xB21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, + 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, + 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0xE330A81, 0xFC588982, + 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, + 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0xD3D3E1A, 0x1E6DCDEE, 0xEC064EED, + 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, + 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, + 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x7198540, + 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, + 0xE330A81A, 0x115B2B19, 0x20BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, + 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, + 0xF36E6F75, 0x105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, + 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 }; /// @@ -772,7 +772,7 @@ public static uint Crc32C(uint crc, byte data) // Software fallback int tableIndex = (int)((crc ^ data) & 0xFF); - crc = CrcTable[tableIndex] ^ (crc >> 8); + crc = s_crcTable[tableIndex] ^ (crc >> 8); return crc ^ 0xFFFFFFFF; } @@ -810,7 +810,7 @@ public static uint Crc32C(uint crc, ushort data) foreach (byte b in bytes) { int tableIndex = (int)((crc ^ b) & 0xFF); - crc = CrcTable[tableIndex] ^ (crc >> 8); + crc = s_crcTable[tableIndex] ^ (crc >> 8); } return crc ^ 0xFFFFFFFF; @@ -849,7 +849,7 @@ public static uint Crc32C(uint crc, uint data) foreach (byte b in bytes) { int tableIndex = (int)((crc ^ b) & 0xFF); - crc = CrcTable[tableIndex] ^ (crc >> 8); + crc = s_crcTable[tableIndex] ^ (crc >> 8); } return crc ^ 0xFFFFFFFF; @@ -889,7 +889,7 @@ public static uint Crc32C(uint crc, ulong data) foreach (byte b in bytes) { int tableIndex = (int)((crc ^ b) & 0xFF); - crc = CrcTable[tableIndex] ^ (crc >> 8); + crc = s_crcTable[tableIndex] ^ (crc >> 8); } return crc ^ 0xFFFFFFFF; From 3ba68197cc8d262ee59828e29d2f9e2c85121c95 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 18:05:54 +0100 Subject: [PATCH 19/49] Fix test signature --- .../tests/System/Numerics/BitOperationsTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs index 18cbbb9a179c0..0c583a1160204 100644 --- a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs +++ b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs @@ -926,7 +926,7 @@ public static void BitOps_Crc32C_uint(uint crc, uint data, uint expected) [InlineData(0, 120, 44758)] [InlineData(0, ulong.MaxValue, 42721)] [InlineData(123, ulong.MaxValue, 27055)] - public static void BitOps_Crc32C_ulong(uint crc, uint data, uint expected) + public static void BitOps_Crc32C_ulong(uint crc, ulong data, uint expected) { uint obtained = BitOperations.Crc32C(crc, data); Assert.Equal(expected, obtained); From ca35eaac5a05b1d81e4d16fce6451f4a20ddf9d7 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 18:30:57 +0100 Subject: [PATCH 20/49] Remove mask for software fallback --- .../src/System/Numerics/BitOperations.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 3b313df279a70..25925cea4e501 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -774,7 +774,7 @@ public static uint Crc32C(uint crc, byte data) int tableIndex = (int)((crc ^ data) & 0xFF); crc = s_crcTable[tableIndex] ^ (crc >> 8); - return crc ^ 0xFFFFFFFF; + return crc; } /// @@ -813,7 +813,7 @@ public static uint Crc32C(uint crc, ushort data) crc = s_crcTable[tableIndex] ^ (crc >> 8); } - return crc ^ 0xFFFFFFFF; + return crc; } /// @@ -852,7 +852,7 @@ public static uint Crc32C(uint crc, uint data) crc = s_crcTable[tableIndex] ^ (crc >> 8); } - return crc ^ 0xFFFFFFFF; + return crc; } /// @@ -892,7 +892,7 @@ public static uint Crc32C(uint crc, ulong data) crc = s_crcTable[tableIndex] ^ (crc >> 8); } - return crc ^ 0xFFFFFFFF; + return crc; } } } From d74d96a9002e6691ef8d501c80e6cd7669db5097 Mon Sep 17 00:00:00 2001 From: kasperk81 <83082615+kasperk81@users.noreply.github.com> Date: Wed, 17 Nov 2021 18:33:02 +0000 Subject: [PATCH 21/49] reuse reflected table generator --- .../System/Numerics/Crc32ReflectedTable.cs | 34 ++++++++++++++++++ .../src/System.IO.Hashing.csproj | 3 ++ .../src/System/IO/Hashing/Crc32.Table.cs | 30 ++-------------- .../System.Private.CoreLib.Shared.projitems | 3 ++ .../src/System/Numerics/BitOperations.cs | 36 +------------------ 5 files changed, 44 insertions(+), 62 deletions(-) create mode 100644 src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs diff --git a/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs b/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs new file mode 100644 index 0000000000000..cbad9b4916d29 --- /dev/null +++ b/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs @@ -0,0 +1,34 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Numerics +{ + internal class Crc32ReflectedTable + { + internal static uint[] Generate(uint reflectedPolynomial) + { + uint[] table = new uint[256]; + + for (int i = 0; i < 256; i++) + { + uint val = (uint)i; + + for (int j = 0; j < 8; j++) + { + if ((val & 0b0000_0001) == 0) + { + val >>= 1; + } + else + { + val = (val >> 1) ^ reflectedPolynomial; + } + } + + table[i] = val; + } + + return table; + } + } +} diff --git a/src/libraries/System.IO.Hashing/src/System.IO.Hashing.csproj b/src/libraries/System.IO.Hashing/src/System.IO.Hashing.csproj index 20eb7e5484fd3..08937be69b621 100644 --- a/src/libraries/System.IO.Hashing/src/System.IO.Hashing.csproj +++ b/src/libraries/System.IO.Hashing/src/System.IO.Hashing.csproj @@ -22,6 +22,9 @@ System.IO.Hashing.XxHash32 + + Common\System\Numerics\Crc32ReflectedTable.cs + diff --git a/src/libraries/System.IO.Hashing/src/System/IO/Hashing/Crc32.Table.cs b/src/libraries/System.IO.Hashing/src/System/IO/Hashing/Crc32.Table.cs index 6dc3fd7c51844..5bf267ce0a328 100644 --- a/src/libraries/System.IO.Hashing/src/System/IO/Hashing/Crc32.Table.cs +++ b/src/libraries/System.IO.Hashing/src/System/IO/Hashing/Crc32.Table.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Numerics; + namespace System.IO.Hashing { public sealed partial class Crc32 : NonCryptographicHashAlgorithm @@ -9,32 +11,6 @@ public sealed partial class Crc32 : NonCryptographicHashAlgorithm // While this implementation is based on the standard CRC-32 polynomial, // x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + x0, // this version uses reflected bit ordering, so 0x04C11DB7 becomes 0xEDB88320 - private static readonly uint[] s_crcLookup = GenerateReflectedTable(0xEDB88320u); - - private static uint[] GenerateReflectedTable(uint reflectedPolynomial) - { - uint[] table = new uint[256]; - - for (int i = 0; i < 256; i++) - { - uint val = (uint)i; - - for (int j = 0; j < 8; j++) - { - if ((val & 0b0000_0001) == 0) - { - val >>= 1; - } - else - { - val = (val >> 1) ^ reflectedPolynomial; - } - } - - table[i] = val; - } - - return table; - } + private static readonly uint[] s_crcLookup = Crc32ReflectedTable.Generate(0xEDB88320u); } } diff --git a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems index 2d07a361eefba..6717a3246b012 100644 --- a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems +++ b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems @@ -1197,6 +1197,9 @@ Common\System\NotImplemented.cs + + Common\System\Numerics\Crc32ReflectedTable.cs + Common\System\Obsoletions.cs diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 25925cea4e501..fa56d7f5a9cc2 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -41,41 +41,7 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static readonly uint[] s_crcTable = new uint[] - { - 0x0, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, - 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, - 0x105EC76F, 0xE235446C, 0xF165B798, 0x30E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, - 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, - 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x61C6936, 0xF477EA35, - 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, - 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x5125DAD, 0x1642AE59, 0xE4292D5A, - 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, - 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, - 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0xC38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, - 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, - 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0xF36E6F7, - 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, - 0xEB1FCBAD, 0x197448AE, 0xA24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, - 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, - 0xFB410CC2, 0x92A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, - 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, - 0x82F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, - 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, - 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0xB21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, - 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, - 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0xE330A81, 0xFC588982, - 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, - 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0xD3D3E1A, 0x1E6DCDEE, 0xEC064EED, - 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, - 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, - 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x7198540, - 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, - 0xE330A81A, 0x115B2B19, 0x20BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, - 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, - 0xF36E6F75, 0x105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, - 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 - }; + private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); /// /// Evaluate whether a given integral value is a power of 2. From 5bb5943d67519dcf7704b805a655366afe0b88ec Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 19:54:40 +0100 Subject: [PATCH 22/49] Fix test data --- .../tests/System/Numerics/BitOperationsTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs index 0c583a1160204..d937b7169be08 100644 --- a/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs +++ b/src/libraries/System.Runtime.Extensions/tests/System/Numerics/BitOperationsTests.cs @@ -923,9 +923,9 @@ public static void BitOps_Crc32C_uint(uint crc, uint data, uint expected) [Theory] [InlineData(0, 0, 0)] - [InlineData(0, 120, 44758)] - [InlineData(0, ulong.MaxValue, 42721)] - [InlineData(123, ulong.MaxValue, 27055)] + [InlineData(0, 120, 3511526341)] + [InlineData(0, ulong.MaxValue, 3293575501)] + [InlineData(123, ulong.MaxValue, 3460750817)] public static void BitOps_Crc32C_ulong(uint crc, ulong data, uint expected) { uint obtained = BitOperations.Crc32C(crc, data); From d44a2151b917a1650d844da98f82d50bfad479ce Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 20:33:25 +0100 Subject: [PATCH 23/49] Usage of CRC Table Generator instead of constant values --- .../src/System/Numerics/BitOperations.cs | 60 ++++++++----------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 25925cea4e501..d1f1e0bdb47ad 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -41,41 +41,33 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static readonly uint[] s_crcTable = new uint[] + private static readonly uint[] s_crcTable = GenerateReflectedTable(0x82F63B78u); + + private static uint[] GenerateReflectedTable(uint reflectedPolynomial) { - 0x0, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, - 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, - 0x105EC76F, 0xE235446C, 0xF165B798, 0x30E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, - 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, - 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x61C6936, 0xF477EA35, - 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, - 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x5125DAD, 0x1642AE59, 0xE4292D5A, - 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, - 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, - 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0xC38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, - 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, - 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0xF36E6F7, - 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, - 0xEB1FCBAD, 0x197448AE, 0xA24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, - 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, - 0xFB410CC2, 0x92A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, - 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, - 0x82F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, - 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, - 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0xB21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, - 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, - 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0xE330A81, 0xFC588982, - 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, - 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0xD3D3E1A, 0x1E6DCDEE, 0xEC064EED, - 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, - 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, - 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x7198540, - 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, - 0xE330A81A, 0x115B2B19, 0x20BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, - 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, - 0xF36E6F75, 0x105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, - 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 - }; + uint[] table = new uint[256]; + + for (int i = 0; i < 256; i++) + { + uint val = (uint)i; + + for (int j = 0; j < 8; j++) + { + if ((val & 0b0000_0001) == 0) + { + val >>= 1; + } + else + { + val = (val >> 1) ^ reflectedPolynomial; + } + } + + table[i] = val; + } + + return table; + } /// /// Evaluate whether a given integral value is a power of 2. From 1e7a753d7ca0f9a272ba22927f52587c96c1b694 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 20:36:07 +0100 Subject: [PATCH 24/49] Fix solution file --- .../System.Runtime.Extensions.sln | 233 +++++++++--------- 1 file changed, 113 insertions(+), 120 deletions(-) diff --git a/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln b/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln index 0d8ede8f05226..d19cfb44381f9 100644 --- a/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln +++ b/src/libraries/System.Runtime.Extensions/System.Runtime.Extensions.sln @@ -1,8 +1,4 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31702.278 -MinimumVisualStudioVersion = 10.0.40219.1 +Microsoft Visual Studio Solution File, Format Version 12.00 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{D7A1E176-1515-41FE-86D0-A46C82B87B05}" @@ -31,7 +27,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestAppOutsideOfTPA", "test EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VoidMainWithExitCodeApp", "tests\VoidMainWithExitCodeApp\VoidMainWithExitCodeApp.csproj", "{F55614A7-859C-4171-844B-46F37EDDD351}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{43D09D13-38C0-4504-AB84-D5F6B76170DF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{43D09D13-38C0-4504-AB84-D5F6B76170DF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.SourceGeneration", "..\System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj", "{A2438CFE-792C-4217-B060-E85A38B37B07}" EndProject @@ -44,27 +40,18 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{E603EA66-B62A-4B5E-93D1-30F8CC0AC497}" EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{5d8a8ef7-9a44-45c3-b7b2-b44a296a1be7}*SharedItemsImports = 5 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 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 + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.ActiveCfg = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.Build.0 = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.ActiveCfg = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.Build.0 = Checked|x64 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.ActiveCfg = Checked|x86 - {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.Build.0 = Checked|x86 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Debug|Any CPU.ActiveCfg = Debug|x64 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Debug|Any CPU.Build.0 = Debug|x64 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Debug|x64.ActiveCfg = Debug|x64 @@ -77,12 +64,12 @@ Global {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Release|x64.Build.0 = Release|x64 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Release|x86.ActiveCfg = Release|x86 {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Release|x86.Build.0 = Release|x86 - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.Build.0 = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.ActiveCfg = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.Build.0 = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.ActiveCfg = Debug|Any CPU - {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.Build.0 = Debug|Any CPU + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.ActiveCfg = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|Any CPU.Build.0 = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.ActiveCfg = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x64.Build.0 = Checked|x64 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.ActiveCfg = Checked|x86 + {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7}.Checked|x86.Build.0 = Checked|x86 {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Debug|Any CPU.Build.0 = Debug|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -95,12 +82,12 @@ Global {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Release|x64.Build.0 = Release|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Release|x86.ActiveCfg = Release|Any CPU {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Release|x86.Build.0 = Release|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.ActiveCfg = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.Build.0 = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.ActiveCfg = Debug|Any CPU - {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.Build.0 = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|Any CPU.Build.0 = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.ActiveCfg = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x64.Build.0 = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.ActiveCfg = Debug|Any CPU + {D7A1E176-1515-41FE-86D0-A46C82B87B05}.Checked|x86.Build.0 = Debug|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -113,12 +100,12 @@ Global {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Release|x64.Build.0 = Release|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Release|x86.ActiveCfg = Release|Any CPU {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Release|x86.Build.0 = Release|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.ActiveCfg = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.Build.0 = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.ActiveCfg = Debug|Any CPU - {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.Build.0 = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.ActiveCfg = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x64.Build.0 = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.ActiveCfg = Debug|Any CPU + {C7112A41-1DC9-421E-88A0-8830D081A7B1}.Checked|x86.Build.0 = Debug|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -131,12 +118,12 @@ Global {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Release|x64.Build.0 = Release|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Release|x86.ActiveCfg = Release|Any CPU {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Release|x86.Build.0 = Release|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.Build.0 = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.ActiveCfg = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.Build.0 = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.ActiveCfg = Debug|Any CPU - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.Build.0 = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.ActiveCfg = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x64.Build.0 = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.ActiveCfg = Debug|Any CPU + {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2}.Checked|x86.Build.0 = Debug|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Debug|Any CPU.Build.0 = Debug|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -149,12 +136,12 @@ Global {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Release|x64.Build.0 = Release|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Release|x86.ActiveCfg = Release|Any CPU {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Release|x86.Build.0 = Release|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.Build.0 = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU - {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.Build.0 = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|Any CPU.Build.0 = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.ActiveCfg = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x64.Build.0 = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.ActiveCfg = Debug|Any CPU + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9}.Checked|x86.Build.0 = Debug|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.Build.0 = Debug|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -167,12 +154,12 @@ Global {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.Build.0 = Release|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.ActiveCfg = Release|Any CPU {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.Build.0 = Release|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.ActiveCfg = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.Build.0 = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.ActiveCfg = Debug|Any CPU - {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.Build.0 = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU + {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.Build.0 = Debug|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Debug|Any CPU.Build.0 = Debug|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -185,12 +172,12 @@ Global {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Release|x64.Build.0 = Release|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Release|x86.ActiveCfg = Release|Any CPU {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Release|x86.Build.0 = Release|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.Build.0 = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.ActiveCfg = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.Build.0 = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.ActiveCfg = Debug|Any CPU - {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.Build.0 = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.ActiveCfg = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x64.Build.0 = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.ActiveCfg = Debug|Any CPU + {959EAFBC-9394-4E25-9A84-0B85152A7FCD}.Checked|x86.Build.0 = Debug|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Debug|Any CPU.Build.0 = Debug|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -203,12 +190,12 @@ Global {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Release|x64.Build.0 = Release|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Release|x86.ActiveCfg = Release|Any CPU {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Release|x86.Build.0 = Release|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.ActiveCfg = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.Build.0 = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.ActiveCfg = Debug|Any CPU - {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.Build.0 = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|Any CPU.Build.0 = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.ActiveCfg = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x64.Build.0 = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.ActiveCfg = Debug|Any CPU + {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A}.Checked|x86.Build.0 = Debug|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Debug|Any CPU.Build.0 = Debug|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -221,12 +208,12 @@ Global {01EC2059-605F-472C-A255-ED76197F62CD}.Release|x64.Build.0 = Release|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Release|x86.ActiveCfg = Release|Any CPU {01EC2059-605F-472C-A255-ED76197F62CD}.Release|x86.Build.0 = Release|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.Build.0 = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.ActiveCfg = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.Build.0 = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.ActiveCfg = Debug|Any CPU - {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.Build.0 = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.ActiveCfg = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x64.Build.0 = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.ActiveCfg = Debug|Any CPU + {01EC2059-605F-472C-A255-ED76197F62CD}.Checked|x86.Build.0 = Debug|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -239,12 +226,12 @@ Global {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Release|x64.Build.0 = Release|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Release|x86.ActiveCfg = Release|Any CPU {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Release|x86.Build.0 = Release|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.ActiveCfg = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.Build.0 = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.ActiveCfg = Debug|Any CPU - {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.Build.0 = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|Any CPU.Build.0 = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.ActiveCfg = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x64.Build.0 = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.ActiveCfg = Debug|Any CPU + {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E}.Checked|x86.Build.0 = Debug|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Debug|Any CPU.Build.0 = Debug|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -257,12 +244,12 @@ Global {9192FB4F-9A3B-48CA-AB53-322888009601}.Release|x64.Build.0 = Release|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Release|x86.ActiveCfg = Release|Any CPU {9192FB4F-9A3B-48CA-AB53-322888009601}.Release|x86.Build.0 = Release|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.ActiveCfg = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.Build.0 = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.ActiveCfg = Debug|Any CPU - {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.Build.0 = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.ActiveCfg = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x64.Build.0 = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.ActiveCfg = Debug|Any CPU + {9192FB4F-9A3B-48CA-AB53-322888009601}.Checked|x86.Build.0 = Debug|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Debug|Any CPU.Build.0 = Debug|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -275,12 +262,12 @@ Global {1FDA0C56-0687-4F08-B147-E997C026A12D}.Release|x64.Build.0 = Release|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Release|x86.ActiveCfg = Release|Any CPU {1FDA0C56-0687-4F08-B147-E997C026A12D}.Release|x86.Build.0 = Release|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.Build.0 = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.ActiveCfg = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.Build.0 = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.ActiveCfg = Debug|Any CPU - {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.Build.0 = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.ActiveCfg = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x64.Build.0 = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.ActiveCfg = Debug|Any CPU + {1FDA0C56-0687-4F08-B147-E997C026A12D}.Checked|x86.Build.0 = Debug|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Debug|Any CPU.Build.0 = Debug|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -293,12 +280,12 @@ Global {397D1AB1-0A29-462A-9F05-14015B8B5796}.Release|x64.Build.0 = Release|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Release|x86.ActiveCfg = Release|Any CPU {397D1AB1-0A29-462A-9F05-14015B8B5796}.Release|x86.Build.0 = Release|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.ActiveCfg = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.Build.0 = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.ActiveCfg = Debug|Any CPU - {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.Build.0 = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|Any CPU.Build.0 = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.ActiveCfg = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x64.Build.0 = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.ActiveCfg = Debug|Any CPU + {397D1AB1-0A29-462A-9F05-14015B8B5796}.Checked|x86.Build.0 = Debug|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Debug|Any CPU.Build.0 = Debug|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -311,12 +298,12 @@ Global {F55614A7-859C-4171-844B-46F37EDDD351}.Release|x64.Build.0 = Release|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Release|x86.ActiveCfg = Release|Any CPU {F55614A7-859C-4171-844B-46F37EDDD351}.Release|x86.Build.0 = Release|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.Build.0 = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.ActiveCfg = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.Build.0 = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.ActiveCfg = Debug|Any CPU - {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.Build.0 = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.ActiveCfg = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x64.Build.0 = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.ActiveCfg = Debug|Any CPU + {F55614A7-859C-4171-844B-46F37EDDD351}.Checked|x86.Build.0 = Debug|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Debug|Any CPU.Build.0 = Debug|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -329,12 +316,12 @@ Global {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Release|x64.Build.0 = Release|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Release|x86.ActiveCfg = Release|Any CPU {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Release|x86.Build.0 = Release|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.ActiveCfg = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.Build.0 = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.ActiveCfg = Debug|Any CPU - {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.Build.0 = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|Any CPU.Build.0 = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.ActiveCfg = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x64.Build.0 = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.ActiveCfg = Debug|Any CPU + {43D09D13-38C0-4504-AB84-D5F6B76170DF}.Checked|x86.Build.0 = Debug|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -347,12 +334,12 @@ Global {A2438CFE-792C-4217-B060-E85A38B37B07}.Release|x64.Build.0 = Release|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Release|x86.ActiveCfg = Release|Any CPU {A2438CFE-792C-4217-B060-E85A38B37B07}.Release|x86.Build.0 = Release|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.Build.0 = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.ActiveCfg = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.Build.0 = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.ActiveCfg = Debug|Any CPU - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.Build.0 = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|Any CPU.Build.0 = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.ActiveCfg = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x64.Build.0 = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.ActiveCfg = Debug|Any CPU + {A2438CFE-792C-4217-B060-E85A38B37B07}.Checked|x86.Build.0 = Debug|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Debug|Any CPU.Build.0 = Debug|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -365,28 +352,34 @@ Global {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Release|x64.Build.0 = Release|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Release|x86.ActiveCfg = Release|Any CPU {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Release|x86.Build.0 = Release|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|Any CPU.Build.0 = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.ActiveCfg = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x64.Build.0 = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.ActiveCfg = Debug|Any CPU + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8}.Checked|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {5D8A8EF7-9A44-45C3-B7B2-B44A296A1BE7} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {D7A1E176-1515-41FE-86D0-A46C82B87B05} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {C7112A41-1DC9-421E-88A0-8830D081A7B1} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} {1E0C4DD8-3A04-4B4C-9699-DB5844F2CFB2} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} {04BA3E3C-6979-4792-B19E-C797AD607F42} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {959EAFBC-9394-4E25-9A84-0B85152A7FCD} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} {FF0EFAEE-3E1A-4C7B-8B4A-AAC8E0988A0A} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {43D09D13-38C0-4504-AB84-D5F6B76170DF} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {A2438CFE-792C-4217-B060-E85A38B37B07} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {D7A1E176-1515-41FE-86D0-A46C82B87B05} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {01EC2059-605F-472C-A255-ED76197F62CD} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {AA1BB6A8-7CC0-46BA-B83B-13B1F4CF825E} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {9192FB4F-9A3B-48CA-AB53-322888009601} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {1FDA0C56-0687-4F08-B147-E997C026A12D} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {397D1AB1-0A29-462A-9F05-14015B8B5796} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} {F55614A7-859C-4171-844B-46F37EDDD351} = {F4E65A6B-CBA4-40E2-A0B5-6C50C8AAB25C} - {43D09D13-38C0-4504-AB84-D5F6B76170DF} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {A2438CFE-792C-4217-B060-E85A38B37B07} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} - {2F9303F6-6EF0-4B14-80B9-A4D9BDA10AE8} = {2642DD1A-F4C5-4B39-8170-7BC51A75F5D1} + {8B176D63-5A92-4A28-B0BB-7FA9EDA3A4F9} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} + {959EAFBC-9394-4E25-9A84-0B85152A7FCD} = {E603EA66-B62A-4B5E-93D1-30F8CC0AC497} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D347D246-1A9D-4D45-83A4-58C47241FE13} From 43704ec02a99350bc69e88ebdf5b5ee16d6d444a Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 21:10:17 +0100 Subject: [PATCH 25/49] Revert "Usage of CRC Table Generator instead of constant values" This reverts commit d44a2151b917a1650d844da98f82d50bfad479ce. --- .../src/System/Numerics/BitOperations.cs | 60 +++++++++++-------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index d1f1e0bdb47ad..25925cea4e501 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -41,33 +41,41 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static readonly uint[] s_crcTable = GenerateReflectedTable(0x82F63B78u); - - private static uint[] GenerateReflectedTable(uint reflectedPolynomial) + private static readonly uint[] s_crcTable = new uint[] { - uint[] table = new uint[256]; - - for (int i = 0; i < 256; i++) - { - uint val = (uint)i; - - for (int j = 0; j < 8; j++) - { - if ((val & 0b0000_0001) == 0) - { - val >>= 1; - } - else - { - val = (val >> 1) ^ reflectedPolynomial; - } - } - - table[i] = val; - } - - return table; - } + 0x0, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, + 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, + 0x105EC76F, 0xE235446C, 0xF165B798, 0x30E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, + 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, + 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x61C6936, 0xF477EA35, + 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, + 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x5125DAD, 0x1642AE59, 0xE4292D5A, + 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, + 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, + 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0xC38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, + 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, + 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0xF36E6F7, + 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, + 0xEB1FCBAD, 0x197448AE, 0xA24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, + 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, + 0xFB410CC2, 0x92A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, + 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, + 0x82F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, + 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, + 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0xB21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, + 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, + 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0xE330A81, 0xFC588982, + 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, + 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0xD3D3E1A, 0x1E6DCDEE, 0xEC064EED, + 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, + 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, + 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x7198540, + 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, + 0xE330A81A, 0x115B2B19, 0x20BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, + 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, + 0xF36E6F75, 0x105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, + 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 + }; /// /// Evaluate whether a given integral value is a power of 2. From d7f21566202693feca632f13e2a6752aa33168c0 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Wed, 17 Nov 2021 21:13:05 +0100 Subject: [PATCH 26/49] Fix solution file --- .../System.Runtime/System.Runtime.sln | 359 +++++++++--------- 1 file changed, 176 insertions(+), 183 deletions(-) diff --git a/src/libraries/System.Runtime/System.Runtime.sln b/src/libraries/System.Runtime/System.Runtime.sln index aec93ad8e993e..fc6aec975c863 100644 --- a/src/libraries/System.Runtime/System.Runtime.sln +++ b/src/libraries/System.Runtime/System.Runtime.sln @@ -1,8 +1,4 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31702.278 -MinimumVisualStudioVersion = 10.0.40219.1 +Microsoft Visual Studio Solution File, Format Version 12.00 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{71AB8240-F179-4B21-A8BE-8BE6CD774ED9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities.Unicode", "..\Common\tests\TestUtilities.Unicode\TestUtilities.Unicode.csproj", "{9DF0247E-5B81-4EF3-82CA-3E70B3A56742}" @@ -25,7 +21,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{26541647-B653-4480-9448-BA275D53C81D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{7301E27F-F136-4649-947D-17F7E8DBCA08}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.DllImportGenerator", "..\System.Runtime.InteropServices\gen\DllImportGenerator\DllImportGenerator.csproj", "{7301E27F-F136-4649-947D-17F7E8DBCA08}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Interop.SourceGeneration", "..\System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj", "{A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}" EndProject @@ -64,27 +60,18 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{5B2B5E7E-A2FB-4095-9E79-404BF53E0133}" EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{71ab8240-f179-4b21-a8be-8be6cd774ed9}*SharedItemsImports = 5 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution - Checked|Any CPU = Checked|Any CPU - Checked|x64 = Checked|x64 - Checked|x86 = Checked|x86 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 + Checked|Any CPU = Checked|Any CPU + Checked|x64 = Checked|x64 + Checked|x86 = Checked|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.ActiveCfg = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.Build.0 = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.ActiveCfg = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.Build.0 = Checked|x64 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.ActiveCfg = Checked|x86 - {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.Build.0 = Checked|x86 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Debug|Any CPU.ActiveCfg = Debug|x64 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Debug|Any CPU.Build.0 = Debug|x64 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Debug|x64.ActiveCfg = Debug|x64 @@ -97,12 +84,12 @@ Global {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Release|x64.Build.0 = Release|x64 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Release|x86.ActiveCfg = Release|x86 {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Release|x86.Build.0 = Release|x86 - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.ActiveCfg = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.Build.0 = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.ActiveCfg = Debug|Any CPU - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.Build.0 = Debug|Any CPU + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.ActiveCfg = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|Any CPU.Build.0 = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.ActiveCfg = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x64.Build.0 = Checked|x64 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.ActiveCfg = Checked|x86 + {71AB8240-F179-4B21-A8BE-8BE6CD774ED9}.Checked|x86.Build.0 = Checked|x86 {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Debug|Any CPU.Build.0 = Debug|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -115,12 +102,12 @@ Global {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Release|x64.Build.0 = Release|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Release|x86.ActiveCfg = Release|Any CPU {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Release|x86.Build.0 = Release|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.Build.0 = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.ActiveCfg = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.Build.0 = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.ActiveCfg = Debug|Any CPU - {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.Build.0 = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.ActiveCfg = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x64.Build.0 = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.ActiveCfg = Debug|Any CPU + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742}.Checked|x86.Build.0 = Debug|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -133,12 +120,12 @@ Global {FB17AC52-1633-4845-932B-9218DF895957}.Release|x64.Build.0 = Release|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Release|x86.ActiveCfg = Release|Any CPU {FB17AC52-1633-4845-932B-9218DF895957}.Release|x86.Build.0 = Release|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.Build.0 = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.ActiveCfg = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.Build.0 = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.ActiveCfg = Debug|Any CPU - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.Build.0 = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|Any CPU.Build.0 = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.ActiveCfg = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x64.Build.0 = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.ActiveCfg = Debug|Any CPU + {FB17AC52-1633-4845-932B-9218DF895957}.Checked|x86.Build.0 = Debug|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Debug|Any CPU.Build.0 = Debug|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -151,12 +138,12 @@ Global {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Release|x64.Build.0 = Release|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Release|x86.ActiveCfg = Release|Any CPU {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Release|x86.Build.0 = Release|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.ActiveCfg = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.Build.0 = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.ActiveCfg = Debug|Any CPU - {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.Build.0 = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|Any CPU.Build.0 = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.ActiveCfg = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x64.Build.0 = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.ActiveCfg = Debug|Any CPU + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9}.Checked|x86.Build.0 = Debug|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -169,12 +156,12 @@ Global {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Release|x64.Build.0 = Release|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Release|x86.ActiveCfg = Release|Any CPU {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Release|x86.Build.0 = Release|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.ActiveCfg = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.Build.0 = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.ActiveCfg = Debug|Any CPU - {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.Build.0 = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.ActiveCfg = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x64.Build.0 = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.ActiveCfg = Debug|Any CPU + {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD}.Checked|x86.Build.0 = Debug|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -187,12 +174,12 @@ Global {9C41B325-1225-43CA-9436-549AFF6D90A1}.Release|x64.Build.0 = Release|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Release|x86.ActiveCfg = Release|Any CPU {9C41B325-1225-43CA-9436-549AFF6D90A1}.Release|x86.Build.0 = Release|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.ActiveCfg = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.Build.0 = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.ActiveCfg = Debug|Any CPU - {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.Build.0 = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.ActiveCfg = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x64.Build.0 = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.ActiveCfg = Debug|Any CPU + {9C41B325-1225-43CA-9436-549AFF6D90A1}.Checked|x86.Build.0 = Debug|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Debug|Any CPU.Build.0 = Debug|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -205,12 +192,12 @@ Global {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Release|x64.Build.0 = Release|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Release|x86.ActiveCfg = Release|Any CPU {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Release|x86.Build.0 = Release|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.ActiveCfg = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.Build.0 = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.ActiveCfg = Debug|Any CPU - {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.Build.0 = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.ActiveCfg = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x64.Build.0 = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.ActiveCfg = Debug|Any CPU + {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B}.Checked|x86.Build.0 = Debug|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -223,12 +210,12 @@ Global {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Release|x64.Build.0 = Release|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Release|x86.ActiveCfg = Release|Any CPU {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Release|x86.Build.0 = Release|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.ActiveCfg = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.Build.0 = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.ActiveCfg = Debug|Any CPU - {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.Build.0 = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|Any CPU.Build.0 = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.ActiveCfg = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x64.Build.0 = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.ActiveCfg = Debug|Any CPU + {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3}.Checked|x86.Build.0 = Debug|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Debug|Any CPU.Build.0 = Debug|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -241,12 +228,12 @@ Global {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Release|x64.Build.0 = Release|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Release|x86.ActiveCfg = Release|Any CPU {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Release|x86.Build.0 = Release|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.ActiveCfg = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.Build.0 = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.ActiveCfg = Debug|Any CPU - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.Build.0 = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|Any CPU.Build.0 = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.ActiveCfg = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x64.Build.0 = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.ActiveCfg = Debug|Any CPU + {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC}.Checked|x86.Build.0 = Debug|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Debug|Any CPU.Build.0 = Debug|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -259,12 +246,12 @@ Global {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Release|x64.Build.0 = Release|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Release|x86.ActiveCfg = Release|Any CPU {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Release|x86.Build.0 = Release|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.ActiveCfg = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.Build.0 = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.ActiveCfg = Debug|Any CPU - {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.Build.0 = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.ActiveCfg = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x64.Build.0 = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.ActiveCfg = Debug|Any CPU + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3}.Checked|x86.Build.0 = Debug|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Debug|Any CPU.Build.0 = Debug|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -277,12 +264,12 @@ Global {26541647-B653-4480-9448-BA275D53C81D}.Release|x64.Build.0 = Release|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Release|x86.ActiveCfg = Release|Any CPU {26541647-B653-4480-9448-BA275D53C81D}.Release|x86.Build.0 = Release|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.Build.0 = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.ActiveCfg = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.Build.0 = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.ActiveCfg = Debug|Any CPU - {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.Build.0 = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|Any CPU.Build.0 = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.ActiveCfg = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x64.Build.0 = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.ActiveCfg = Debug|Any CPU + {26541647-B653-4480-9448-BA275D53C81D}.Checked|x86.Build.0 = Debug|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Debug|Any CPU.Build.0 = Debug|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -295,12 +282,12 @@ Global {7301E27F-F136-4649-947D-17F7E8DBCA08}.Release|x64.Build.0 = Release|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Release|x86.ActiveCfg = Release|Any CPU {7301E27F-F136-4649-947D-17F7E8DBCA08}.Release|x86.Build.0 = Release|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.ActiveCfg = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.Build.0 = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.ActiveCfg = Debug|Any CPU - {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.Build.0 = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|Any CPU.Build.0 = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.ActiveCfg = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x64.Build.0 = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.ActiveCfg = Debug|Any CPU + {7301E27F-F136-4649-947D-17F7E8DBCA08}.Checked|x86.Build.0 = Debug|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Debug|Any CPU.Build.0 = Debug|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -313,12 +300,12 @@ Global {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Release|x64.Build.0 = Release|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Release|x86.ActiveCfg = Release|Any CPU {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Release|x86.Build.0 = Release|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.ActiveCfg = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.Build.0 = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.ActiveCfg = Debug|Any CPU - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.Build.0 = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|Any CPU.Build.0 = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.ActiveCfg = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x64.Build.0 = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.ActiveCfg = Debug|Any CPU + {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37}.Checked|x86.Build.0 = Debug|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Debug|Any CPU.Build.0 = Debug|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -331,12 +318,12 @@ Global {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Release|x64.Build.0 = Release|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Release|x86.ActiveCfg = Release|Any CPU {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Release|x86.Build.0 = Release|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.Build.0 = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.ActiveCfg = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.Build.0 = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.ActiveCfg = Debug|Any CPU - {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.Build.0 = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.ActiveCfg = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x64.Build.0 = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.ActiveCfg = Debug|Any CPU + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C}.Checked|x86.Build.0 = Debug|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Debug|Any CPU.Build.0 = Debug|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -349,12 +336,12 @@ Global {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Release|x64.Build.0 = Release|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Release|x86.ActiveCfg = Release|Any CPU {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Release|x86.Build.0 = Release|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.Build.0 = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.ActiveCfg = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.Build.0 = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.ActiveCfg = Debug|Any CPU - {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.Build.0 = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|Any CPU.Build.0 = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.ActiveCfg = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x64.Build.0 = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.ActiveCfg = Debug|Any CPU + {A83A8520-F5E2-49B4-83BC-0F82A412951D}.Checked|x86.Build.0 = Debug|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Debug|Any CPU.Build.0 = Debug|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -367,12 +354,12 @@ Global {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Release|x64.Build.0 = Release|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Release|x86.ActiveCfg = Release|Any CPU {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Release|x86.Build.0 = Release|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.Build.0 = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.ActiveCfg = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.Build.0 = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.ActiveCfg = Debug|Any CPU - {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.Build.0 = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|Any CPU.Build.0 = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.ActiveCfg = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x64.Build.0 = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.ActiveCfg = Debug|Any CPU + {3B79DD71-8C2F-41BC-A1A7-86A490D6C726}.Checked|x86.Build.0 = Debug|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Debug|Any CPU.Build.0 = Debug|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -385,12 +372,12 @@ Global {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Release|x64.Build.0 = Release|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Release|x86.ActiveCfg = Release|Any CPU {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Release|x86.Build.0 = Release|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.Build.0 = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.ActiveCfg = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.Build.0 = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.ActiveCfg = Debug|Any CPU - {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.Build.0 = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|Any CPU.Build.0 = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.ActiveCfg = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x64.Build.0 = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.ActiveCfg = Debug|Any CPU + {4EE36055-AD7C-4779-B3F6-08687960DCC3}.Checked|x86.Build.0 = Debug|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Debug|Any CPU.Build.0 = Debug|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -403,12 +390,12 @@ Global {C230AC88-A377-4BEB-824F-AB174C14DC86}.Release|x64.Build.0 = Release|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Release|x86.ActiveCfg = Release|Any CPU {C230AC88-A377-4BEB-824F-AB174C14DC86}.Release|x86.Build.0 = Release|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.ActiveCfg = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.Build.0 = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.ActiveCfg = Debug|Any CPU - {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.Build.0 = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|Any CPU.Build.0 = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.ActiveCfg = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x64.Build.0 = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.ActiveCfg = Debug|Any CPU + {C230AC88-A377-4BEB-824F-AB174C14DC86}.Checked|x86.Build.0 = Debug|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Debug|Any CPU.Build.0 = Debug|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -421,12 +408,12 @@ Global {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Release|x64.Build.0 = Release|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Release|x86.ActiveCfg = Release|Any CPU {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Release|x86.Build.0 = Release|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.Build.0 = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.ActiveCfg = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.Build.0 = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.ActiveCfg = Debug|Any CPU - {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.Build.0 = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.ActiveCfg = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x64.Build.0 = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.ActiveCfg = Debug|Any CPU + {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC}.Checked|x86.Build.0 = Debug|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Debug|Any CPU.Build.0 = Debug|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -439,12 +426,12 @@ Global {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Release|x64.Build.0 = Release|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Release|x86.ActiveCfg = Release|Any CPU {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Release|x86.Build.0 = Release|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.Build.0 = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.ActiveCfg = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.Build.0 = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.ActiveCfg = Debug|Any CPU - {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.Build.0 = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|Any CPU.Build.0 = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.ActiveCfg = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x64.Build.0 = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.ActiveCfg = Debug|Any CPU + {0F83B07B-2E3F-4708-BE6D-7A8DA8168803}.Checked|x86.Build.0 = Debug|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -457,12 +444,12 @@ Global {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Release|x64.Build.0 = Release|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Release|x86.ActiveCfg = Release|Any CPU {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Release|x86.Build.0 = Release|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.ActiveCfg = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.Build.0 = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.ActiveCfg = Debug|Any CPU - {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.Build.0 = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|Any CPU.Build.0 = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.ActiveCfg = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x64.Build.0 = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.ActiveCfg = Debug|Any CPU + {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD}.Checked|x86.Build.0 = Debug|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Debug|Any CPU.Build.0 = Debug|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -475,12 +462,12 @@ Global {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Release|x64.Build.0 = Release|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Release|x86.ActiveCfg = Release|Any CPU {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Release|x86.Build.0 = Release|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.Build.0 = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.ActiveCfg = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.Build.0 = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.ActiveCfg = Debug|Any CPU - {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.Build.0 = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|Any CPU.Build.0 = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.ActiveCfg = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x64.Build.0 = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.ActiveCfg = Debug|Any CPU + {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F}.Checked|x86.Build.0 = Debug|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -493,12 +480,12 @@ Global {F6A8185B-07C6-401D-9B40-3C560239E05F}.Release|x64.Build.0 = Release|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Release|x86.ActiveCfg = Release|Any CPU {F6A8185B-07C6-401D-9B40-3C560239E05F}.Release|x86.Build.0 = Release|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.Build.0 = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.ActiveCfg = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.Build.0 = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.ActiveCfg = Debug|Any CPU - {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.Build.0 = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|Any CPU.Build.0 = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.ActiveCfg = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x64.Build.0 = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.ActiveCfg = Debug|Any CPU + {F6A8185B-07C6-401D-9B40-3C560239E05F}.Checked|x86.Build.0 = Debug|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Debug|Any CPU.Build.0 = Debug|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -511,12 +498,12 @@ Global {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Release|x64.Build.0 = Release|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Release|x86.ActiveCfg = Release|Any CPU {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Release|x86.Build.0 = Release|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.Build.0 = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.ActiveCfg = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.Build.0 = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.ActiveCfg = Debug|Any CPU - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.Build.0 = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|Any CPU.Build.0 = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.ActiveCfg = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x64.Build.0 = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.ActiveCfg = Debug|Any CPU + {25E8AB9D-2D10-44F5-9F83-5A5134526771}.Checked|x86.Build.0 = Debug|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Debug|Any CPU.Build.0 = Debug|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -529,12 +516,12 @@ Global {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Release|x64.Build.0 = Release|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Release|x86.ActiveCfg = Release|Any CPU {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Release|x86.Build.0 = Release|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.Build.0 = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.ActiveCfg = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.Build.0 = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.ActiveCfg = Debug|Any CPU - {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.Build.0 = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|Any CPU.Build.0 = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.ActiveCfg = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x64.Build.0 = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.ActiveCfg = Debug|Any CPU + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13}.Checked|x86.Build.0 = Debug|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Debug|Any CPU.Build.0 = Debug|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -547,12 +534,12 @@ Global {82728202-1098-4E16-B598-5762EAF67D08}.Release|x64.Build.0 = Release|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Release|x86.ActiveCfg = Release|Any CPU {82728202-1098-4E16-B598-5762EAF67D08}.Release|x86.Build.0 = Release|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.ActiveCfg = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.Build.0 = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.ActiveCfg = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.Build.0 = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.ActiveCfg = Debug|Any CPU - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.Build.0 = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|Any CPU.Build.0 = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.ActiveCfg = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x64.Build.0 = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.ActiveCfg = Debug|Any CPU + {82728202-1098-4E16-B598-5762EAF67D08}.Checked|x86.Build.0 = Debug|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Debug|Any CPU.Build.0 = Debug|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -565,38 +552,44 @@ Global {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Release|x64.Build.0 = Release|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Release|x86.ActiveCfg = Release|Any CPU {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Release|x86.Build.0 = Release|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.ActiveCfg = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|Any CPU.Build.0 = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.ActiveCfg = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x64.Build.0 = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.ActiveCfg = Debug|Any CPU + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA}.Checked|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {71AB8240-F179-4B21-A8BE-8BE6CD774ED9} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {9DF0247E-5B81-4EF3-82CA-3E70B3A56742} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} - {FB17AC52-1633-4845-932B-9218DF895957} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} - {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {B41CB4AB-CDF6-4BB0-B826-D4BAE41411BD} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {9C41B325-1225-43CA-9436-549AFF6D90A1} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {F27DC16B-64F4-4BD7-AF9C-1C76F7ACC88B} = {28140562-A65A-48E9-ABAB-53BA939084F0} {CF79B5AE-38CB-4B80-BF92-CF634C0B7EC3} = {28140562-A65A-48E9-ABAB-53BA939084F0} {E7A05515-DABE-4C09-83CB-CE84EFDCD4CC} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {26541647-B653-4480-9448-BA275D53C81D} = {28140562-A65A-48E9-ABAB-53BA939084F0} {7301E27F-F136-4649-947D-17F7E8DBCA08} = {28140562-A65A-48E9-ABAB-53BA939084F0} {A7B7DE04-7261-4D4C-AA78-9F2D9B5A1C37} = {28140562-A65A-48E9-ABAB-53BA939084F0} - {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {A83A8520-F5E2-49B4-83BC-0F82A412951D} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {F6A8185B-07C6-401D-9B40-3C560239E05F} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {069C2B51-069A-4FBB-BFE9-42D573F1CEEA} = {28140562-A65A-48E9-ABAB-53BA939084F0} + {9DF0247E-5B81-4EF3-82CA-3E70B3A56742} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} + {FB17AC52-1633-4845-932B-9218DF895957} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {3B79DD71-8C2F-41BC-A1A7-86A490D6C726} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {4EE36055-AD7C-4779-B3F6-08687960DCC3} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {C230AC88-A377-4BEB-824F-AB174C14DC86} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {1BCCD2F5-A561-4641-8A0B-51F3EDCA35DC} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {0F83B07B-2E3F-4708-BE6D-7A8DA8168803} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} {833C1D45-9BBB-4A92-93B7-4EFFD9E945AD} = {FD72C125-C10D-457B-8AFC-6B4E5237AF6A} + {62C2AC8A-7410-4E06-B94E-43BF2DCFBDE9} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} + {9C41B325-1225-43CA-9436-549AFF6D90A1} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} + {C1B93F37-FDD5-4ABB-A244-C6C60BD11CF3} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} + {F39E2C7E-5FE1-460C-AC2C-7E2B50955F2C} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} {1B4552A4-91FD-4C6F-9EB4-3454C4BE428F} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} - {F6A8185B-07C6-401D-9B40-3C560239E05F} = {28140562-A65A-48E9-ABAB-53BA939084F0} {25E8AB9D-2D10-44F5-9F83-5A5134526771} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} - {9CF6C6E6-0E9F-4A95-84B5-6083EAB6FA13} = {28140562-A65A-48E9-ABAB-53BA939084F0} {82728202-1098-4E16-B598-5762EAF67D08} = {5B2B5E7E-A2FB-4095-9E79-404BF53E0133} - {069C2B51-069A-4FBB-BFE9-42D573F1CEEA} = {28140562-A65A-48E9-ABAB-53BA939084F0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {19706846-1F47-42ED-B649-B0982EE96E6B} From ee294c90e1f011bc3626b04fadf2582908d055a5 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 18 Nov 2021 14:12:16 +0100 Subject: [PATCH 27/49] Make Crc32ReflectedTable static Co-authored-by: kasperk81 <83082615+kasperk81@users.noreply.github.com> --- src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs b/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs index cbad9b4916d29..00324266cc0e8 100644 --- a/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs +++ b/src/libraries/Common/src/System/Numerics/Crc32ReflectedTable.cs @@ -3,7 +3,7 @@ namespace System.Numerics { - internal class Crc32ReflectedTable + internal static class Crc32ReflectedTable { internal static uint[] Generate(uint reflectedPolynomial) { From db9d590fbabfe03b467a8f9acc8b06349ed8cf31 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 18 Nov 2021 20:35:50 +0100 Subject: [PATCH 28/49] Fix wrong intrinsic for Arm64/BitOperations.Crc32C(uint crc, ulong data) --- .../src/System/Numerics/BitOperations.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index fa56d7f5a9cc2..228cdad4fee84 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -826,7 +826,7 @@ public static uint Crc32C(uint crc, uint data) /// /// Uses following Hardware Intrinsics, if supported: /// * unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) - /// * uint32_t __crc32d (uint32_t a, uint64_t b) + /// * uint32_t __crc32cd (uint32_t a, uint64_t b) /// /// The base value to calculate checksum on /// The checksum data @@ -843,8 +843,8 @@ public static uint Crc32C(uint crc, ulong data) } if (Crc32.Arm64.IsSupported) { - // uint32_t __crc32d (uint32_t a, uint64_t b) - return Crc32.Arm64.ComputeCrc32(crc, data); + // uint32_t __crc32cd (uint32_t a, uint64_t b) + return Crc32.Arm64.ComputeCrc32C(crc, data); } // Software fallback From 385f528d23c72474972b760fac2dd3b7a9181bb7 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Fri, 19 Nov 2021 23:44:39 +0100 Subject: [PATCH 29/49] Reduce amount of stackalloc statements and replace them with MemoryMarshal.CreateReadOnlySpan --- .../src/System/Numerics/BitOperations.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 228cdad4fee84..a28e08688866a 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -769,11 +769,9 @@ public static uint Crc32C(uint crc, ushort data) // Software fallback + ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref data, 1); - Span bytes = stackalloc byte[sizeof(ushort)]; - Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bytes), data); - - foreach (byte b in bytes) + foreach (byte b in MemoryMarshal.AsBytes(span)) { int tableIndex = (int)((crc ^ b) & 0xFF); crc = s_crcTable[tableIndex] ^ (crc >> 8); @@ -808,11 +806,9 @@ public static uint Crc32C(uint crc, uint data) // Software fallback + ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref data, 1); - Span bytes = stackalloc byte[sizeof(uint)]; - Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bytes), data); - - foreach (byte b in bytes) + foreach (byte b in MemoryMarshal.AsBytes(span)) { int tableIndex = (int)((crc ^ b) & 0xFF); crc = s_crcTable[tableIndex] ^ (crc >> 8); @@ -848,11 +844,9 @@ public static uint Crc32C(uint crc, ulong data) } // Software fallback + ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref data, 1); - Span bytes = stackalloc byte[sizeof(ulong)]; - Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(bytes), data); - - foreach (byte b in bytes) + foreach (byte b in MemoryMarshal.AsBytes(span)) { int tableIndex = (int)((crc ^ b) & 0xFF); crc = s_crcTable[tableIndex] ^ (crc >> 8); From 4f8da5d6d2da0ab5443e7b30ac82e41e3e9255de Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sat, 20 Nov 2021 00:34:25 +0100 Subject: [PATCH 30/49] Loop unwinding and performance optimization --- .../src/System/Numerics/BitOperations.cs | 52 +++++++++++++------ 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index a28e08688866a..6ccc2de18a0e1 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Buffers.Binary; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -769,14 +770,17 @@ public static uint Crc32C(uint crc, ushort data) // Software fallback - ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref data, 1); - - foreach (byte b in MemoryMarshal.AsBytes(span)) + if (!BitConverter.IsLittleEndian) { - int tableIndex = (int)((crc ^ b) & 0xFF); - crc = s_crcTable[tableIndex] ^ (crc >> 8); + data = BinaryPrimitives.ReverseEndianness(data); } + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + return crc; } @@ -806,15 +810,14 @@ public static uint Crc32C(uint crc, uint data) // Software fallback - ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref data, 1); - - foreach (byte b in MemoryMarshal.AsBytes(span)) + if (!BitConverter.IsLittleEndian) { - int tableIndex = (int)((crc ^ b) & 0xFF); - crc = s_crcTable[tableIndex] ^ (crc >> 8); + data = BinaryPrimitives.ReverseEndianness(data); } - return crc; + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + return Crc32CImpl(ref lut, crc, data); } /// @@ -844,14 +847,31 @@ public static uint Crc32C(uint crc, ulong data) } // Software fallback - ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref data, 1); - - foreach (byte b in MemoryMarshal.AsBytes(span)) + if (!BitConverter.IsLittleEndian) { - int tableIndex = (int)((crc ^ b) & 0xFF); - crc = s_crcTable[tableIndex] ^ (crc >> 8); + data = BinaryPrimitives.ReverseEndianness(data); } + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + crc = Crc32CImpl(ref lut, crc, (uint)data); + data >>= 32; + crc = Crc32CImpl(ref lut, crc, (uint)data); + + return crc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint Crc32CImpl(ref uint lut, uint crc, uint data) + { + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + return crc; } } From 6023bcdb15b8a07c7d74ad2bce12e1010e288d73 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 21 Nov 2021 00:45:15 +0100 Subject: [PATCH 31/49] Remove unnessecary cast Co-authored-by: Clinton Ingram --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 6ccc2de18a0e1..fc57e7a0968cd 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -779,7 +779,7 @@ public static uint Crc32C(uint crc, ushort data) crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); return crc; } From d22566c3619f2f7e2bd115dd771009704c6accf7 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 21 Nov 2021 00:50:35 +0100 Subject: [PATCH 32/49] Use MemoryMarshal.GetArrayDataReference instead of direct array access --- .../src/System/Numerics/BitOperations.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 6ccc2de18a0e1..15d8693d7ee57 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -738,8 +738,8 @@ public static uint Crc32C(uint crc, byte data) // Software fallback - int tableIndex = (int)((crc ^ data) & 0xFF); - crc = s_crcTable[tableIndex] ^ (crc >> 8); + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); return crc; } From 0e4467fe2af14e45956f602d1fc48f92a014ce94 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 21 Nov 2021 00:51:53 +0100 Subject: [PATCH 33/49] Remove unnessecary newlines --- .../src/System/Numerics/BitOperations.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 15d8693d7ee57..ef62178619a2f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -736,7 +736,6 @@ public static uint Crc32C(uint crc, byte data) return Crc32.ComputeCrc32C(crc, data); } - // Software fallback ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); @@ -768,7 +767,6 @@ public static uint Crc32C(uint crc, ushort data) return Crc32.ComputeCrc32C(crc, data); } - // Software fallback if (!BitConverter.IsLittleEndian) { @@ -808,7 +806,6 @@ public static uint Crc32C(uint crc, uint data) return Crc32.ComputeCrc32C(crc, data); } - // Software fallback if (!BitConverter.IsLittleEndian) { From 02319eabaf9150e92d5fdfa1c158be0173c88e0f Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 25 Nov 2021 20:17:38 +0100 Subject: [PATCH 34/49] Update src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs Co-authored-by: kasperk81 <83082615+kasperk81@users.noreply.github.com> --- .../src/System/Numerics/BitOperations.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 5a64a82daa822..415ad013acf9c 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -42,7 +42,8 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); + private static readonly uint[] s_crcTable = Sse42.IsSupported || Crc32.IsSupported ? + Array.Empty() : Crc32ReflectedTable.Generate(0x82F63B78u); /// /// Evaluate whether a given integral value is a power of 2. From c5bc276019810f83d7f73c23b5641549ba08bc56 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sat, 27 Nov 2021 02:21:39 +0100 Subject: [PATCH 35/49] Add x64 SSE check Co-authored-by: kasperk81 <83082615+kasperk81@users.noreply.github.com> --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 415ad013acf9c..8025dc4e9e005 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -42,7 +42,7 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static readonly uint[] s_crcTable = Sse42.IsSupported || Crc32.IsSupported ? + private static readonly uint[] s_crcTable = Sse42.X64.IsSupported || Crc32.Arm64.IsSupported ? Array.Empty() : Crc32ReflectedTable.Generate(0x82F63B78u); /// From cf974b12e6d483808108044251d2491ec914b7e4 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 2 Dec 2021 20:38:53 +0100 Subject: [PATCH 36/49] Move Crc32 Software into own class --- .../src/System/Numerics/BitOperations.cs | 113 +++++++++++------- 1 file changed, 71 insertions(+), 42 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 5a64a82daa822..76e96ac6ec525 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -42,8 +42,6 @@ public static class BitOperations 19, 27, 23, 06, 26, 05, 04, 31 }; - private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); - /// /// Evaluate whether a given integral value is a power of 2. /// @@ -712,6 +710,73 @@ public static nuint RotateRight(nuint value, int offset) #endif } + private static class Crc32Fallback + { + + private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); + + internal static uint Crc32C(uint crc, byte data) + { + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + + return crc; + } + + internal static uint Crc32C(uint crc, ushort data) + { + + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + + return crc; + } + + internal static uint Crc32C(uint crc, uint data) + { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + return Crc32CImpl(ref lut, crc, data); + } + + internal static uint Crc32C(uint crc, ulong data) + { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + + ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + crc = Crc32CImpl(ref lut, crc, (uint)data); + data >>= 32; + crc = Crc32CImpl(ref lut, crc, (uint)data); + + return crc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint Crc32CImpl(ref uint lut, uint crc, uint data) + { + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + + return crc; + } + } + /// /// Calculates the CRC (Cyclic redundancy check) checksum. /// @@ -737,10 +802,7 @@ public static uint Crc32C(uint crc, byte data) } // Software fallback - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); - - return crc; + return Crc32Fallback.Crc32C(crc, data); } /// @@ -773,13 +835,7 @@ public static uint Crc32C(uint crc, ushort data) data = BinaryPrimitives.ReverseEndianness(data); } - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); - - return crc; + return Crc32Fallback.Crc32C(crc, data); } /// @@ -807,14 +863,7 @@ public static uint Crc32C(uint crc, uint data) } // Software fallback - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - - return Crc32CImpl(ref lut, crc, data); + return Crc32Fallback.Crc32C(crc, data); } /// @@ -849,27 +898,7 @@ public static uint Crc32C(uint crc, ulong data) data = BinaryPrimitives.ReverseEndianness(data); } - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - - crc = Crc32CImpl(ref lut, crc, (uint)data); - data >>= 32; - crc = Crc32CImpl(ref lut, crc, (uint)data); - - return crc; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static uint Crc32CImpl(ref uint lut, uint crc, uint data) - { - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); - - return crc; + return Crc32Fallback.Crc32C(crc, data); } } } From c4092f2b2f43825478fbc6b0b5c06f56e69ea148 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 2 Dec 2021 22:20:37 +0100 Subject: [PATCH 37/49] Remove IsSupported check --- .../src/System/Numerics/BitOperations.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 1b8ef2cf3a007..76e96ac6ec525 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -713,8 +713,7 @@ public static nuint RotateRight(nuint value, int offset) private static class Crc32Fallback { - private static readonly uint[] s_crcTable = Sse42.X64.IsSupported || Crc32.Arm64.IsSupported ? - Array.Empty() : Crc32ReflectedTable.Generate(0x82F63B78u); + private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); internal static uint Crc32C(uint crc, byte data) { From 6b7e6c4c73148b7812f0511f1a320b7915aba76e Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 2 Dec 2021 22:31:33 +0100 Subject: [PATCH 38/49] Fix parameter naming --- .../src/System/Numerics/BitOperations.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 76e96ac6ec525..625c627186658 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -717,8 +717,8 @@ private static class Crc32Fallback internal static uint Crc32C(uint crc, byte data) { - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); return crc; } @@ -726,11 +726,11 @@ internal static uint Crc32C(uint crc, byte data) internal static uint Crc32C(uint crc, ushort data) { - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); return crc; } @@ -742,8 +742,8 @@ internal static uint Crc32C(uint crc, uint data) data = BinaryPrimitives.ReverseEndianness(data); } - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - return Crc32CImpl(ref lut, crc, data); + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + return Crc32CImpl(ref lookupTable, crc, data); } internal static uint Crc32C(uint crc, ulong data) @@ -753,25 +753,25 @@ internal static uint Crc32C(uint crc, ulong data) data = BinaryPrimitives.ReverseEndianness(data); } - ref uint lut = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - crc = Crc32CImpl(ref lut, crc, (uint)data); + crc = Crc32CImpl(ref lookupTable, crc, (uint)data); data >>= 32; - crc = Crc32CImpl(ref lut, crc, (uint)data); + crc = Crc32CImpl(ref lookupTable, crc, (uint)data); return crc; } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static uint Crc32CImpl(ref uint lut, uint crc, uint data) + private static uint Crc32CImpl(ref uint lookupTable, uint crc, uint data) { - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); data >>= 8; - crc = Unsafe.Add(ref lut, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); return crc; } From de1efd97e4654254432372750b5f9eb7b31b0821 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Thu, 2 Dec 2021 22:41:20 +0100 Subject: [PATCH 39/49] Fix fallback implementation method naming --- .../src/System/Numerics/BitOperations.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 625c627186658..b256dcb4968f1 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -743,7 +743,7 @@ internal static uint Crc32C(uint crc, uint data) } ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - return Crc32CImpl(ref lookupTable, crc, data); + return Crc32CCore(ref lookupTable, crc, data); } internal static uint Crc32C(uint crc, ulong data) @@ -755,15 +755,15 @@ internal static uint Crc32C(uint crc, ulong data) ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - crc = Crc32CImpl(ref lookupTable, crc, (uint)data); + crc = Crc32CCore(ref lookupTable, crc, (uint)data); data >>= 32; - crc = Crc32CImpl(ref lookupTable, crc, (uint)data); + crc = Crc32CCore(ref lookupTable, crc, (uint)data); return crc; } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static uint Crc32CImpl(ref uint lookupTable, uint crc, uint data) + private static uint Crc32CCore(ref uint lookupTable, uint crc, uint data) { crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); data >>= 8; From c0da91031d4b38d63b2d1af110a40113e1b35ae0 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sat, 4 Dec 2021 00:02:15 +0100 Subject: [PATCH 40/49] Improve documentation --- .../src/System/Numerics/BitOperations.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index b256dcb4968f1..4f7cabe807cfe 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -778,7 +778,7 @@ private static uint Crc32CCore(ref uint lookupTable, uint crc, uint data) } /// - /// Calculates the CRC (Cyclic redundancy check) checksum. + /// Accumulates the CRC (Cyclic redundancy check) checksum. /// /// Uses following Hardware Intrinsics, if supported: /// * uint32_t __crc32b (uint32_t a, uint8_t b) @@ -806,7 +806,7 @@ public static uint Crc32C(uint crc, byte data) } /// - /// Calculates the CRC (Cyclic redundancy check) checksum. + /// Accumulates the CRC (Cyclic redundancy check) checksum. /// /// Uses following Hardware Intrinsics, if supported: /// * unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) @@ -839,7 +839,7 @@ public static uint Crc32C(uint crc, ushort data) } /// - /// Calculates the CRC (Cyclic redundancy check) checksum. + /// Accumulates the CRC (Cyclic redundancy check) checksum. /// /// Uses following Hardware Intrinsics, if supported: /// * unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) @@ -867,7 +867,7 @@ public static uint Crc32C(uint crc, uint data) } /// - /// Calculates the CRC (Cyclic redundancy check) checksum. + /// Accumulates the CRC (Cyclic redundancy check) checksum. /// /// Uses following Hardware Intrinsics, if supported: /// * unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) @@ -893,11 +893,6 @@ public static uint Crc32C(uint crc, ulong data) } // Software fallback - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - return Crc32Fallback.Crc32C(crc, data); } } From 2720d18acce6992380e0141adf9c9522e1649ba8 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sat, 4 Dec 2021 00:05:04 +0100 Subject: [PATCH 41/49] Move bswap into Crc32Fallback class --- .../src/System/Numerics/BitOperations.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 4f7cabe807cfe..f344e5bdc44f0 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -717,6 +717,11 @@ private static class Crc32Fallback internal static uint Crc32C(uint crc, byte data) { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); @@ -725,6 +730,10 @@ internal static uint Crc32C(uint crc, byte data) internal static uint Crc32C(uint crc, ushort data) { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); @@ -830,11 +839,6 @@ public static uint Crc32C(uint crc, ushort data) } // Software fallback - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - return Crc32Fallback.Crc32C(crc, data); } From 0cee4fffbfc3c024c84b90636aa85a08c79efb5f Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 12 Dec 2021 16:51:46 +0100 Subject: [PATCH 42/49] Implement efficient usage of SSE x86/x64 Co-authored-by: Clinton Ingram --- .../src/System/Numerics/BitOperations.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index f344e5bdc44f0..b82022e37ca66 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -885,10 +885,11 @@ public static uint Crc32C(uint crc, ulong data) { if (Sse42.X64.IsSupported) { - // unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) - ulong result = Sse42.X64.Crc32(crc, data); - - return unchecked((uint)result); + return (uint)Sse42.X64.Crc32(crc, data); + } + if (Sse42.IsSupported) + { + return Sse42.Crc32(Sse42.Crc32(crc, (uint)data), (uint)(data >> 32)); } if (Crc32.Arm64.IsSupported) { From ec74c04bf770ba19f071a59809a6f114db8c617d Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 12 Dec 2021 18:45:38 +0100 Subject: [PATCH 43/49] Style Changes for BitOperations.cs --- .../src/System/Numerics/BitOperations.cs | 151 +++++++++--------- 1 file changed, 75 insertions(+), 76 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index b82022e37ca66..7b445d7002e61 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -710,82 +710,6 @@ public static nuint RotateRight(nuint value, int offset) #endif } - private static class Crc32Fallback - { - - private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); - - internal static uint Crc32C(uint crc, byte data) - { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); - - return crc; - } - - internal static uint Crc32C(uint crc, ushort data) - { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); - - return crc; - } - - internal static uint Crc32C(uint crc, uint data) - { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - return Crc32CCore(ref lookupTable, crc, data); - } - - internal static uint Crc32C(uint crc, ulong data) - { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); - - crc = Crc32CCore(ref lookupTable, crc, (uint)data); - data >>= 32; - crc = Crc32CCore(ref lookupTable, crc, (uint)data); - - return crc; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static uint Crc32CCore(ref uint lookupTable, uint crc, uint data) - { - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); - data >>= 8; - crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); - - return crc; - } - } - /// /// Accumulates the CRC (Cyclic redundancy check) checksum. /// @@ -900,5 +824,80 @@ public static uint Crc32C(uint crc, ulong data) // Software fallback return Crc32Fallback.Crc32C(crc, data); } + + private static class Crc32Fallback + { + private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); + + internal static uint Crc32C(uint crc, byte data) + { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + + return crc; + } + + internal static uint Crc32C(uint crc, ushort data) + { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + + return crc; + } + + internal static uint Crc32C(uint crc, uint data) + { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + return Crc32CCore(ref lookupTable, crc, data); + } + + internal static uint Crc32C(uint crc, ulong data) + { + if (!BitConverter.IsLittleEndian) + { + data = BinaryPrimitives.ReverseEndianness(data); + } + + ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); + + crc = Crc32CCore(ref lookupTable, crc, (uint)data); + data >>= 32; + crc = Crc32CCore(ref lookupTable, crc, (uint)data); + + return crc; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static uint Crc32CCore(ref uint lookupTable, uint crc, uint data) + { + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); + data >>= 8; + crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); + + return crc; + } + } } } From 12d7a1c156ca5dc7474d3ba972000304ae727d2e Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 12 Dec 2021 18:46:27 +0100 Subject: [PATCH 44/49] Remove unnessecary `bswap` of a single byte --- .../src/System/Numerics/BitOperations.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 7b445d7002e61..bf2e75b5cfc7f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -831,11 +831,6 @@ private static class Crc32Fallback internal static uint Crc32C(uint crc, byte data) { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ data)) ^ (crc >> 8); From f0071281b93af775bfda384e5962268eee42f24d Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Aug 2022 19:06:48 +0200 Subject: [PATCH 45/49] Fix doc comments --- .../src/System/Numerics/BitOperations.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 269d3df67b2cf..67f32673c233a 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -915,6 +915,9 @@ private static uint Crc32CCore(ref uint lookupTable, uint crc, uint data) return crc; } + } + + /// /// Reset the lowest significant bit in the given value /// [MethodImpl(MethodImplOptions.AggressiveInlining)] From 0057d5ebefc4c3afd090244c28aa2684f729149a Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Aug 2022 19:22:28 +0200 Subject: [PATCH 46/49] fix doc --- .../src/System/Numerics/BitOperations.cs | 26 ++++--------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 67f32673c233a..6b0619d015fda 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -53,7 +53,7 @@ public static class BitOperations /// The value. [MethodImpl(MethodImplOptions.AggressiveInlining)] [CLSCompliant(false)] - public static bool IsPow2(uint value) => (value & (value - 1)) == 0 && value != 0; + public static bool IsPow2(uint value) => (value & (value - 1)) == 0 && value != 0 ; /// /// Evaluate whether a given integral value is a power of 2. @@ -734,13 +734,9 @@ public static nuint RotateRight(nuint value, int offset) /// /// Accumulates the CRC (Cyclic redundancy check) checksum. - /// - /// Uses following Hardware Intrinsics, if supported: - /// * uint32_t __crc32b (uint32_t a, uint8_t b) - /// * uint32_t __crc32cb (uint32_t a, uint8_t b) /// /// The base value to calculate checksum on - /// The checksum data + /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32C(uint crc, byte data) @@ -762,13 +758,9 @@ public static uint Crc32C(uint crc, byte data) /// /// Accumulates the CRC (Cyclic redundancy check) checksum. - /// - /// Uses following Hardware Intrinsics, if supported: - /// * unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) - /// * uint32_t __crc32ch (uint32_t a, uint16_t b) /// /// The base value to calculate checksum on - /// The checksum data + /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32C(uint crc, ushort data) @@ -790,13 +782,9 @@ public static uint Crc32C(uint crc, ushort data) /// /// Accumulates the CRC (Cyclic redundancy check) checksum. - /// - /// Uses following Hardware Intrinsics, if supported: - /// * unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) - /// * uint32_t __crc32ch (uint32_t a, uint32_t b) /// /// The base value to calculate checksum on - /// The checksum data + /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32C(uint crc, uint data) @@ -818,13 +806,9 @@ public static uint Crc32C(uint crc, uint data) /// /// Accumulates the CRC (Cyclic redundancy check) checksum. - /// - /// Uses following Hardware Intrinsics, if supported: - /// * unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) - /// * uint32_t __crc32cd (uint32_t a, uint64_t b) /// /// The base value to calculate checksum on - /// The checksum data + /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] public static uint Crc32C(uint crc, ulong data) From c6a69be757f5b4f44d46aaa83457b8846cd371cc Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Sun, 14 Aug 2022 19:40:26 +0200 Subject: [PATCH 47/49] Fix --- .../System.Private.CoreLib/src/System/Numerics/BitOperations.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index 6b0619d015fda..e59d89ed0cebf 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -53,7 +53,7 @@ public static class BitOperations /// The value. [MethodImpl(MethodImplOptions.AggressiveInlining)] [CLSCompliant(false)] - public static bool IsPow2(uint value) => (value & (value - 1)) == 0 && value != 0 ; + public static bool IsPow2(uint value) => (value & (value - 1)) == 0 && value != 0; /// /// Evaluate whether a given integral value is a power of 2. From f60964b7ee07ce33424e1b3cb811538611e4d731 Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Tue, 27 Sep 2022 21:53:26 +0200 Subject: [PATCH 48/49] Merge remote-tracking branch 'upstream/main' into issue-2036 From 59fa0e277a4bcc4af43f1d04f99676c47c6e0dba Mon Sep 17 00:00:00 2001 From: Robin Lindner Date: Tue, 27 Sep 2022 22:25:46 +0200 Subject: [PATCH 49/49] Apply suggestions --- .../src/System/Numerics/BitOperations.cs | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs index e59d89ed0cebf..e14f8409e5fb5 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/BitOperations.cs @@ -739,20 +739,19 @@ public static nuint RotateRight(nuint value, int offset) /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static uint Crc32C(uint crc, byte data) { if (Sse42.IsSupported) { - // uint32_t __crc32b (uint32_t a, uint8_t b) return Sse42.Crc32(crc, data); } + if (Crc32.IsSupported) { - // uint32_t __crc32cb (uint32_t a, uint8_t b) return Crc32.ComputeCrc32C(crc, data); } - // Software fallback return Crc32Fallback.Crc32C(crc, data); } @@ -763,20 +762,19 @@ public static uint Crc32C(uint crc, byte data) /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static uint Crc32C(uint crc, ushort data) { if (Sse42.IsSupported) { - // unsigned int _mm_crc32_u16 (unsigned int crc, unsigned short v) return Sse42.Crc32(crc, data); } + if (Crc32.IsSupported) { - // uint32_t __crc32ch (uint32_t a, uint16_t b) return Crc32.ComputeCrc32C(crc, data); } - // Software fallback return Crc32Fallback.Crc32C(crc, data); } @@ -787,20 +785,19 @@ public static uint Crc32C(uint crc, ushort data) /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static uint Crc32C(uint crc, uint data) { if (Sse42.IsSupported) { - // unsigned int _mm_crc32_u32 (unsigned int crc, unsigned int v) return Sse42.Crc32(crc, data); } + if (Crc32.IsSupported) { - // uint32_t __crc32ch (uint32_t a, uint32_t b) return Crc32.ComputeCrc32C(crc, data); } - // Software fallback return Crc32Fallback.Crc32C(crc, data); } @@ -811,28 +808,35 @@ public static uint Crc32C(uint crc, uint data) /// The data for which to compute the checksum /// The CRC-checksum [CLSCompliant(false)] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static uint Crc32C(uint crc, ulong data) { if (Sse42.X64.IsSupported) { + // This intrinsic returns a 64-bit register with the upper 32-bits set to 0. return (uint)Sse42.X64.Crc32(crc, data); } + if (Sse42.IsSupported) { - return Sse42.Crc32(Sse42.Crc32(crc, (uint)data), (uint)(data >> 32)); + uint result = Sse42.Crc32(crc, (uint)(data)); + return Sse42.Crc32(result, (uint)(data >> 32)); } + if (Crc32.Arm64.IsSupported) { - // uint32_t __crc32cd (uint32_t a, uint64_t b) return Crc32.Arm64.ComputeCrc32C(crc, data); } - // Software fallback return Crc32Fallback.Crc32C(crc, data); } private static class Crc32Fallback { + // Pre-computed CRC-32 transition table. + // While this implementation is based on the Castagnoli CRC-32 polynomial (CRC-32C), + // x32 + x28 + x27 + x26 + x25 + x23 + x22 + x20 + x19 + x18 + x14 + x13 + x11 + x10 + x9 + x8 + x6 + x0, + // this version uses reflected bit ordering, so 0x1EDC6F41 becomes 0x82F63B78u private static readonly uint[] s_crcTable = Crc32ReflectedTable.Generate(0x82F63B78u); internal static uint Crc32C(uint crc, byte data) @@ -845,11 +849,6 @@ internal static uint Crc32C(uint crc, byte data) internal static uint Crc32C(uint crc, ushort data) { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); crc = Unsafe.Add(ref lookupTable, (nint)(byte)(crc ^ (byte)data)) ^ (crc >> 8); @@ -861,22 +860,12 @@ internal static uint Crc32C(uint crc, ushort data) internal static uint Crc32C(uint crc, uint data) { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); return Crc32CCore(ref lookupTable, crc, data); } internal static uint Crc32C(uint crc, ulong data) { - if (!BitConverter.IsLittleEndian) - { - data = BinaryPrimitives.ReverseEndianness(data); - } - ref uint lookupTable = ref MemoryMarshal.GetArrayDataReference(s_crcTable); crc = Crc32CCore(ref lookupTable, crc, (uint)data);