diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
commit | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch) | |
tree | 98110734c91668dfdbb126fcc0e15ddbd93738ca /tests/src/Loader/classloader/regressions | |
parent | fa45f57ed55137c75ac870356a1b8f76c84b229c (diff) | |
download | coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2 coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip |
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'tests/src/Loader/classloader/regressions')
183 files changed, 19985 insertions, 0 deletions
diff --git a/tests/src/Loader/classloader/regressions/101682/lib.cs b/tests/src/Loader/classloader/regressions/101682/lib.cs new file mode 100644 index 0000000000..1260a01e6b --- /dev/null +++ b/tests/src/Loader/classloader/regressions/101682/lib.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public class Foo<A> +{ + public virtual void FV<B>(B x) { + Console.WriteLine("Foo<{0}>.FV<{1}>({2})", typeof(A), typeof(B), x); + } + public virtual void FV<B,C>(B x) { + Console.WriteLine("Foo<{0}>.FV<{1},{2}>({3})", typeof(A), typeof(B), typeof(C), x); + } +} diff --git a/tests/src/Loader/classloader/regressions/101682/lib.csproj b/tests/src/Loader/classloader/regressions/101682/lib.csproj new file mode 100644 index 0000000000..be6b2bc9c3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/101682/lib.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>lib</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="lib.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/101904/test.cs b/tests/src/Loader/classloader/regressions/101904/test.cs new file mode 100644 index 0000000000..0748e53f14 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/101904/test.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// This test should be run with verification on: e.g. caspol -m -cg 1.1 Everything +// In this test, we have MyType implementing IFoo<T> twice, first indirectly through MyBaseType +// as IFoo<string>, and second directly as IFoo<int>. +// In the end, a MyType<string,int> should be assignable to an IFoo<string> or an IFoo<int>. +using System; + +public interface IFoo<T>{ +} + +public class MyBaseType<T> : IFoo<T>{ +} + +public class MyType<S,T> : MyBaseType<S>, IFoo<T>{ +} + +public class CMain{ + public static int Main(){ + MyType<string,int> mt = new MyType<string,int>(); + IFoo<int> f = mt; + Console.WriteLine("PASS"); // if we make this far, we passed. + return 100; + } +} diff --git a/tests/src/Loader/classloader/regressions/101904/test.csproj b/tests/src/Loader/classloader/regressions/101904/test.csproj new file mode 100644 index 0000000000..67d2b7c9a6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/101904/test.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/106647/lib.cs b/tests/src/Loader/classloader/regressions/106647/lib.cs new file mode 100644 index 0000000000..d0597939a6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/106647/lib.cs @@ -0,0 +1,28 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public class Base<A,B> +{ + public virtual void FV(ref MethodsFired pMF) { + pMF |= MethodsFired.Base; + } +} + +public class BaseNonGen +{ + public virtual void FV(ref MethodsFired pMF) { + pMF |= MethodsFired.Base; + } +} + +[Flags] +public enum MethodsFired{ + None = 0x0000, + Leaf = 0x0001, + Interior = 0x0002, + Base = 0x0004, + All = Leaf | Interior | Base +} diff --git a/tests/src/Loader/classloader/regressions/106647/lib.csproj b/tests/src/Loader/classloader/regressions/106647/lib.csproj new file mode 100644 index 0000000000..be6b2bc9c3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/106647/lib.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>lib</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="lib.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/111021/main.cs b/tests/src/Loader/classloader/regressions/111021/main.cs new file mode 100644 index 0000000000..7a107d7f00 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/111021/main.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +public class CMain{ + public static int Count = 0; + public static int Main(String[] args){ + String s; + s = Gen<String>.x; + // we expect the Gen<T>.cctor to fire only once! + if(1 == Count){ + Console.WriteLine("PASS"); + return 100; + } + else{ + Console.WriteLine("FAIL"); + return 101; + } + } +} + +public class Gen<T>{ + + public static T x; + static Gen(){ + CMain.Count++; + Console.WriteLine("cctor. Type: {0}",typeof(T).ToString()); + } +} diff --git a/tests/src/Loader/classloader/regressions/111021/main.csproj b/tests/src/Loader/classloader/regressions/111021/main.csproj new file mode 100644 index 0000000000..2719060551 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/111021/main.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>main</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="main.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/123413/ilib.cs b/tests/src/Loader/classloader/regressions/123413/ilib.cs new file mode 100644 index 0000000000..d21d6d5f97 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/123413/ilib.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public interface Int<A,B> +{ + void FV(ref MethodsFired pMF); +} + +[Flags] +public enum MethodsFired{ + None = 0x0000, + ExplicitInt = 0x0001, + Public = 0x0004 +} diff --git a/tests/src/Loader/classloader/regressions/123413/ilib.csproj b/tests/src/Loader/classloader/regressions/123413/ilib.csproj new file mode 100644 index 0000000000..eef563ff1c --- /dev/null +++ b/tests/src/Loader/classloader/regressions/123413/ilib.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>ilib</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="ilib.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/123413/lib.cs b/tests/src/Loader/classloader/regressions/123413/lib.cs new file mode 100644 index 0000000000..95c7435d04 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/123413/lib.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public class Base<A,B> +{ + public virtual void FV(ref MethodsFired pMF) { + pMF |= MethodsFired.Base; + } +} + +[Flags] +public enum MethodsFired{ + None = 0x0000, + Leaf = 0x0001, + Interior = 0x0002, + Base = 0x0004, + All = Leaf | Interior | Base +} diff --git a/tests/src/Loader/classloader/regressions/123413/lib.csproj b/tests/src/Loader/classloader/regressions/123413/lib.csproj new file mode 100644 index 0000000000..be6b2bc9c3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/123413/lib.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>lib</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="lib.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/139056/Foo.il b/tests/src/Loader/classloader/regressions/139056/Foo.il new file mode 100644 index 0000000000..a2bc3bba76 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/139056/Foo.il @@ -0,0 +1,163 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 1.2.30612.00 +// Copyright (C) Microsoft Corporation 1998-2003. All rights reserved. + + + +// Metadata version: v1.2.30612 +.assembly extern legacy library mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .hash = (81 51 4F DD 43 6C 78 C8 8C 87 6B 7F 41 A9 D8 DA // .QO.Clx...k.A... + FA 84 09 19 ) + .ver 1:2:3400:0 +} +.assembly legacy library Foo +{ + + // --- The following custom attribute is added automatically, do not uncomment ------- + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, + // bool) = ( 01 00 00 01 00 00 ) + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module Foo.exe +// MVID: {E2294DFD-8443-4AA7-9104-BC680C3B8133} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x04130000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit Foo + extends [mscorlib]System.Object +{ + .method public hidebysig newslot virtual + instance void DoFoo() cil managed + { + // Code size 11 (0xb) + .maxstack 8 + IL_0000: ldstr "Running Foo.DoFoo" + IL_0005: call void [System.Console]System.Console::WriteLine(string) + IL_000a: ret + } // end of method Foo::DoFoo + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Foo::.ctor + +} // end of class Foo + +.class public auto ansi beforefieldinit Bar + extends Foo +{ + .method public hidebysig newslot virtual + instance void NotDoFoo1() cil managed + { + .override Foo::DoFoo + + // Code size 11 (0xb) + .maxstack 8 + IL_0000: ldstr "Running Bar.NotDoFoo1" + IL_0005: call void [System.Console]System.Console::WriteLine(string) + IL_000a: ret + } // end of method Bar::NotDoFoo1 + + .method public hidebysig virtual instance void + DoFoo() cil managed + { + // Code size 11 (0xb) + .maxstack 8 + IL_0000: ldstr "Running Bar.DoFoo" + IL_0005: call void [System.Console]System.Console::WriteLine(string) + IL_000a: ret + } // end of method Bar::DoFoo + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void Foo::.ctor() + IL_0006: ret + } // end of method Bar::.ctor + +} // end of class Bar + +.class public auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + + .method public static int32 Main() + { + .entrypoint + .locals init (class Bar V_0, + class Foo V_1, + class [mscorlib]System.Exception V_2, + int32 V_3) + + .try + { + newobj instance void Bar::.ctor() + stloc.0 + ldloc.0 + stloc.1 + + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 100 + stloc.3 + leave.s end + } + catch [mscorlib]System.Exception + { + stloc.2 + ldstr "Caught unepxected exception: {0}" + ldloc.2 + callvirt instance string [mscorlib]System.Exception::get_Message() + call void [System.Console]System.Console::WriteLine(string, + object) + ldstr "FAIL" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 101 + stloc.3 + leave.s end + } + end: ldloc.3 + ret + } + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Test::.ctor + +} // end of class Test + + +// ============================================================= + +//*********** DISASSEMBLY COMPLETE *********************** +// WARNING: Created Win32 resource file Foo.res diff --git a/tests/src/Loader/classloader/regressions/139056/Foo.ilproj b/tests/src/Loader/classloader/regressions/139056/Foo.ilproj new file mode 100644 index 0000000000..96616b3328 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/139056/Foo.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Foo</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Foo.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/144257/vsw144257.cs b/tests/src/Loader/classloader/regressions/144257/vsw144257.cs new file mode 100644 index 0000000000..51bb22c6a7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/144257/vsw144257.cs @@ -0,0 +1,42 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this is regression test for VSW1 144257 +// Loading type C resulted in TypeLoadException + +using System; + +interface I +{ + void meth(); +} + +class A +{ + public void meth(){} +} + +class B : A +{ + new private void meth(){} +} + +class C : B, I +{ + public static int Main() + { + try + { + C c = new C(); + Console.WriteLine("PASS"); + return 100; + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected exception: " + e); + return 101; + } + + } +} diff --git a/tests/src/Loader/classloader/regressions/144257/vsw144257.csproj b/tests/src/Loader/classloader/regressions/144257/vsw144257.csproj new file mode 100644 index 0000000000..84db903f20 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/144257/vsw144257.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw144257</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw144257.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs new file mode 100644 index 0000000000..c865770120 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.cs @@ -0,0 +1,112 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// created 10/24/2002, mwilk +using System; +using System.Text; +using System.Reflection; + +public class MyObject{ + public const int MY_OBJECT_FOO = 42; + + public int foo(){ + return MY_OBJECT_FOO; + } +} + +public interface IFoo{ + int foo(); +} + +public class SubObject : MyObject, IFoo{ + // Note that this class claims to implement IFoo but does + // not appear to provide an impl for the foo() method. + // In this case, the compiler notices that the class extends + // MyObject, which does have a method foo() by the same signature, + // though it is not necessarily intended to implement the IFoo interface. + // the compiler will mark MyObject.foo() as 'virtual final' (use ildasm to prove it + // to yourself.), and all this class to inherit the implementation. +} + +public class MySecondObject{ + public const int MY_SECOND_OBJECT_FOO = 43; + + public int foo(){ + return MY_SECOND_OBJECT_FOO; + } +} + +public class SecondSubObject : MySecondObject, IFoo{ + public const int MY_SECOND_SUB_OBJECT_FOO = 44; + + // Note that since this class *does* provide an implementation + // of foo(), .... + public new int foo(){ + return MY_SECOND_SUB_OBJECT_FOO; + } +} + +public class Test{ + public const int PASS = 100; + public const int FAIL = 42; + + public static int Main(){ + + // Note: These first two tests are just to demonstrate the principle + // behind this bug/regression. If they fail, it is not really critical, + // They could be commented out if they ever started failing for some + // unknown reason. + + if(typeof(MyObject).GetMethod("foo").IsVirtual){ + Console.WriteLine("Good. MyObject.foo() is virtual, as expected."); + } + else{ + StringBuilder sb = new StringBuilder(); + sb.Append("Error. MyObject.foo() should have been made virtual "); + sb.Append("by the compiler. This is not necessarily an error, but it "); + sb.Append("violates the assumptions of this test. As long as "); + sb.Append("Object.GetType() is not virtual, you may safely ignore this error, "); + sb.Append("or you may be curious to look into why this has changed and update "); + sb.Append("this test. (B6CAF320-B776-AB69-FE96-7E3166D9F1B9)"); + Console.WriteLine(sb.ToString()); + return FAIL; + } + + if(typeof(MySecondObject).GetMethod("foo").IsVirtual){ + StringBuilder sb = new StringBuilder(); + sb.Append("Error. MySecondObject.foo() should NOT have been made virtual "); + sb.Append("by the compiler. This is not necessarily an error, but it "); + sb.Append("violates the assumptions of this test. As long as "); + sb.Append("Object.GetType() is not virtual, you may safely ignore this error, "); + sb.Append("or you may be curious to look into why this has changed and update "); + sb.Append("this test. (522823E1-C992-0EE2-EAE5-E5D3D137116C)"); + Console.WriteLine(sb.ToString()); + return FAIL; + } + else{ + Console.WriteLine("Good. MySecondObject.foo() is not virtual, as expected."); + } + + + // This is the REAL test. Make sure that Object.GetType() is NOT virtual. + if(typeof(Object).GetMethod("GetType").IsVirtual){ + StringBuilder sb = new StringBuilder(); + sb.Append("Error. Object.GetType() should NOT have been made virtual "); + sb.Append("by the compiler. According to NDPWhidbey bug 14610, this is "); + sb.Append("a bug. Perhaps this has resulted from a change in the compiler. "); + sb.Append("To investigate, use ildasm to inspect the signature of the Object.GetType "); + sb.Append("method in mscorlib.dll for the build that this error has occurred on. "); + sb.Append("You should find that the method is erroneously flagged as virtual."); + sb.Append("(6E27D9E2-C491-0F89-705C-1C0A66673D9E)"); + Console.WriteLine(sb.ToString()); + return FAIL; + } + else{ + Console.WriteLine("Good. Object.GetType() is not virtual, as expected."); + } + + Console.WriteLine("PASS!"); + return PASS; + } +} diff --git a/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj new file mode 100644 index 0000000000..64b24ce071 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/14610/TestObjectGetTypeVirtual.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>TestObjectGetTypeVirtual</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="TestObjectGetTypeVirtual.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il new file mode 100644 index 0000000000..3af857cb09 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.il @@ -0,0 +1,187 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// this test is a regression case for VSWhidbey 163172 +// Class A has method f() +// Class B extends A and explicitly implements A::f() (with B::g()) B::g() is final +// Class C extends B and implicitly implements A::f() +// Class D extends A and implicitly implements A::f() + +// The final on B::g() causd the target slot (A::f()) to be marked final as well and we got +// TypeLoadException when instantiating C and D + + + +// Metadata version: v1.2.30801 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .hash = (BB F5 50 CF 5C DC 3F F4 03 2C 76 78 5A 79 37 C7 // ..P.\.?..,vxZy7. + A4 08 4B CE ) // ..K. + .ver 1:2:3400:0 +} +.assembly MethodImplFinal +{ + .permissionset reqmin + "<PermissionSet class=\"System.Security.PermissionSe" + + "t\"\r\nversion=\"1\">\r\n<IPermission class=\"System.Security.Permis" + + "sions.SecurityPermission, mscorlib, Version=1.2.3400.0, Cult" + + "ure=neutral, PublicKeyToken=b77a5c561934e089\"\r\nversion=\"1\"\r\n" + + "Flags=\"SkipVerification\"/>\r\n</PermissionSet>\r\n" + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module MethodImplFinal.exe + + +// ================== GLOBAL METHODS ========================= + +.method public static int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) + main() cil managed + { + .entrypoint + + // Code size 42 (0x2a) + .maxstack 2 + .locals init (class [mscorlib]System.Exception V_0, + int32 V_1) + .try + { + + newobj instance void C::.ctor() + pop + newobj instance void D::.ctor() + pop + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + nop + ldc.i4.s 100 + stloc.1 + leave.s IL_0027 + + } // end .try + catch [mscorlib]System.Exception + { + stloc.0 + ldstr "FAIL: Caught unexpected exception: " + ldloc.0 + call string [mscorlib]System.String::Concat(object, + object) + call void [System.Console]System.Console::WriteLine(string) + nop + ldc.i4.s 101 + stloc.1 + IL_0025: leave.s IL_0027 + + } // end handler + IL_0027: nop + ldloc.1 + ret +} // end of global method main + + +// ============================================================= + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi A + extends [mscorlib]System.Object +{ + .method public newslot virtual instance void + f() cil managed + { + // Code size 1 (0x1) + .maxstack 0 + ret + } // end of method A::f + + .method public specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 1 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } // end of method A::.ctor + +} // end of class A + +.class public auto ansi B + extends A +{ + .method public newslot virtual final instance void + g() cil managed + { + .override A::f + // Code size 1 (0x1) + .maxstack 0 + ret + } // end of method B::g + + .method public specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 1 + ldarg.0 + call instance void A::.ctor() + ret + } // end of method B::.ctor + +} // end of class B + +.class public auto ansi C + extends B +{ + .method public virtual instance void f() cil managed + { + // Code size 1 (0x1) + .maxstack 0 + ret + } // end of method C::f + + .method public specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 1 + ldarg.0 + call instance void B::.ctor() + ret + } // end of method C::.ctor + +} // end of class C + + +.class public auto ansi D + extends A +{ + .method public virtual instance void f() cil managed + { + // Code size 1 (0x1) + .maxstack 0 + ret + } // end of method C::f + + .method public specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 1 + ldarg.0 + call instance void A::.ctor() + ret + } // end of method C::.ctor + +} // end of class C + + +// ============================================================= + +.data D_00008030 = bytearray ( + 01 00 00 06) +//*********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj new file mode 100644 index 0000000000..55fb3f30d7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/163172/MethodImplFinal.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>MethodImplFinal</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="MethodImplFinal.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/181424/test5.il b/tests/src/Loader/classloader/regressions/181424/test5.il new file mode 100644 index 0000000000..5fe54b8588 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/181424/test5.il @@ -0,0 +1,96 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly test5{} +.assembly extern test5{} +.assembly extern mscorlib{} + +// In this module, we define types Foo and Bar. We'll use PEHacker to postprocess +// the executable that results from this, changing the name of Bar to Foo. Then, +// we have two entirely different types that happen to have the same name in the +// same namespace. +// +// In Main, we have three tests. +// The first two effective load types Foo and (what originally was:) Bar. +// TypeDefs are used here, so the IL code will actually contain tokens to the +// respective types. This works fine. +// But in the third test, we try to use Foo through a TypeRef whose resolution scope +// is 'this' assembly, thereby trying to load type Foo by name. But this is ambiguous, +// since both types (after our postprocessing) have the name Foo. Originally, the runtime +// just took the first one it found, giving us no way to load the second one by name. +// Thus, VSWhidbey 181424 was filed to disallow this scenario. +// We expected a TypeLoadException now when trying to load two types that have the same +// name in the same namespace. + +.class public Bar extends [mscorlib]System.Object{ + .field public int32 i + .method public specialname instance void .ctor(){ + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ldarg.0 + ldc.i4.s 2 + stfld int32 Bar::i + ret + } +} + +.class public Foo extends [mscorlib]System.Object{ + .field public int32 i + .method public specialname instance void .ctor(){ + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ldarg.0 + ldc.i4.s 3 + stfld int32 Foo::i + ret + } +} + +.method public static int32 Main(){ + .entrypoint + .locals init(int32 retVal) + // there's no way to get to Foo through TypeRef + ldc.i4 100 // default pass + stloc retVal + newobj instance void Foo::.ctor() + ldfld int32 Foo::i + ldc.i4.s 3 + beq NEXT1 + ldc.i4 101 + stloc retVal + ldstr "FAIL: (Type 0x02000003) i != 3" + call void [System.Console]System.Console::WriteLine(string) + + NEXT1: + newobj instance void Bar::.ctor() + ldfld int32 Bar::i + ldc.i4.s 2 + beq NEXT2 + ldc.i4 101 + stloc retVal + ldstr "FAIL: (Type 0x02000002) i != 2" + call void [System.Console]System.Console::WriteLine(string) + + NEXT2: + newobj instance void [test5]Foo::.ctor() + ldfld int32 [test5]Foo::i + ldc.i4.s 3 + beq NEXT3 + ldc.i4 101 + stloc retVal + ldstr "FAIL: (TypeRef to Foo) i != 3" + call void [System.Console]System.Console::WriteLine(string) + + NEXT3: + ldloc retVal + ldc.i4 100 + bne.un END + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + + END: + ldloc retVal + ret +} diff --git a/tests/src/Loader/classloader/regressions/181424/test5.ilproj b/tests/src/Loader/classloader/regressions/181424/test5.ilproj new file mode 100644 index 0000000000..be13df5fce --- /dev/null +++ b/tests/src/Loader/classloader/regressions/181424/test5.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test5</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test5.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/208900/bug.cs b/tests/src/Loader/classloader/regressions/208900/bug.cs new file mode 100644 index 0000000000..7c0d7c57ea --- /dev/null +++ b/tests/src/Loader/classloader/regressions/208900/bug.cs @@ -0,0 +1,43 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Regression test for bug VSWhidbey 208900 +// "Corrupt OBJECTREF when calling a virtual generic method instantiated at a struct which returns that struct" + +#pragma warning disable 0414 +using System; + +struct MyStruct +{ + public MyStruct(object _f1, int _f2) { f1 = _f1; f2 = _f2; } + object f1; + int f2; +} + + +class M +{ + public virtual U GenericMethod<U>(U x1) { return x1; } +} + +class Test +{ + + static int Main() + { + M obj = new M(); + MyStruct myStruct = new MyStruct("obj", 787980); + if(obj.GenericMethod<MyStruct>(myStruct).Equals(myStruct)){ + Console.WriteLine("PASS"); + return 100; + } + else{ + Console.WriteLine("FAIL"); + return 101; + } + } + +} + + diff --git a/tests/src/Loader/classloader/regressions/208900/bug.csproj b/tests/src/Loader/classloader/regressions/208900/bug.csproj new file mode 100644 index 0000000000..25ec264eec --- /dev/null +++ b/tests/src/Loader/classloader/regressions/208900/bug.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>bug</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="bug.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/226741/test3.il b/tests/src/Loader/classloader/regressions/226741/test3.il new file mode 100644 index 0000000000..479f738620 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/226741/test3.il @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly test3{} +.assembly extern mscorlib{} + +.class public CMain{ + .method public static int32 Main(){ + .entrypoint + call int32 IFoo::Foo() + ret + } +} + +.class public interface IFoo{ + .method public static int32 Foo(){ + ldstr "PASS: In IFoo::Foo" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4 100 + ret + } +} diff --git a/tests/src/Loader/classloader/regressions/226741/test3.ilproj b/tests/src/Loader/classloader/regressions/226741/test3.ilproj new file mode 100644 index 0000000000..c25f9935eb --- /dev/null +++ b/tests/src/Loader/classloader/regressions/226741/test3.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test3</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test3.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/245191/nullenum1000.cs b/tests/src/Loader/classloader/regressions/245191/nullenum1000.cs new file mode 100644 index 0000000000..63d7091831 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/245191/nullenum1000.cs @@ -0,0 +1,7043 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; +using System.Threading; + +public enum T0 { } +public enum T1 { } +public enum T2 { } +public enum T3 { } +public enum T4 { } +public enum T5 { } +public enum T6 { } +public enum T7 { } +public enum T8 { } +public enum T9 { } +public enum T10 { } +public enum T11 { } +public enum T12 { } +public enum T13 { } +public enum T14 { } +public enum T15 { } +public enum T16 { } +public enum T17 { } +public enum T18 { } +public enum T19 { } +public enum T20 { } +public enum T21 { } +public enum T22 { } +public enum T23 { } +public enum T24 { } +public enum T25 { } +public enum T26 { } +public enum T27 { } +public enum T28 { } +public enum T29 { } +public enum T30 { } +public enum T31 { } +public enum T32 { } +public enum T33 { } +public enum T34 { } +public enum T35 { } +public enum T36 { } +public enum T37 { } +public enum T38 { } +public enum T39 { } +public enum T40 { } +public enum T41 { } +public enum T42 { } +public enum T43 { } +public enum T44 { } +public enum T45 { } +public enum T46 { } +public enum T47 { } +public enum T48 { } +public enum T49 { } +public enum T50 { } +public enum T51 { } +public enum T52 { } +public enum T53 { } +public enum T54 { } +public enum T55 { } +public enum T56 { } +public enum T57 { } +public enum T58 { } +public enum T59 { } +public enum T60 { } +public enum T61 { } +public enum T62 { } +public enum T63 { } +public enum T64 { } +public enum T65 { } +public enum T66 { } +public enum T67 { } +public enum T68 { } +public enum T69 { } +public enum T70 { } +public enum T71 { } +public enum T72 { } +public enum T73 { } +public enum T74 { } +public enum T75 { } +public enum T76 { } +public enum T77 { } +public enum T78 { } +public enum T79 { } +public enum T80 { } +public enum T81 { } +public enum T82 { } +public enum T83 { } +public enum T84 { } +public enum T85 { } +public enum T86 { } +public enum T87 { } +public enum T88 { } +public enum T89 { } +public enum T90 { } +public enum T91 { } +public enum T92 { } +public enum T93 { } +public enum T94 { } +public enum T95 { } +public enum T96 { } +public enum T97 { } +public enum T98 { } +public enum T99 { } +public enum T100 { } +public enum T101 { } +public enum T102 { } +public enum T103 { } +public enum T104 { } +public enum T105 { } +public enum T106 { } +public enum T107 { } +public enum T108 { } +public enum T109 { } +public enum T110 { } +public enum T111 { } +public enum T112 { } +public enum T113 { } +public enum T114 { } +public enum T115 { } +public enum T116 { } +public enum T117 { } +public enum T118 { } +public enum T119 { } +public enum T120 { } +public enum T121 { } +public enum T122 { } +public enum T123 { } +public enum T124 { } +public enum T125 { } +public enum T126 { } +public enum T127 { } +public enum T128 { } +public enum T129 { } +public enum T130 { } +public enum T131 { } +public enum T132 { } +public enum T133 { } +public enum T134 { } +public enum T135 { } +public enum T136 { } +public enum T137 { } +public enum T138 { } +public enum T139 { } +public enum T140 { } +public enum T141 { } +public enum T142 { } +public enum T143 { } +public enum T144 { } +public enum T145 { } +public enum T146 { } +public enum T147 { } +public enum T148 { } +public enum T149 { } +public enum T150 { } +public enum T151 { } +public enum T152 { } +public enum T153 { } +public enum T154 { } +public enum T155 { } +public enum T156 { } +public enum T157 { } +public enum T158 { } +public enum T159 { } +public enum T160 { } +public enum T161 { } +public enum T162 { } +public enum T163 { } +public enum T164 { } +public enum T165 { } +public enum T166 { } +public enum T167 { } +public enum T168 { } +public enum T169 { } +public enum T170 { } +public enum T171 { } +public enum T172 { } +public enum T173 { } +public enum T174 { } +public enum T175 { } +public enum T176 { } +public enum T177 { } +public enum T178 { } +public enum T179 { } +public enum T180 { } +public enum T181 { } +public enum T182 { } +public enum T183 { } +public enum T184 { } +public enum T185 { } +public enum T186 { } +public enum T187 { } +public enum T188 { } +public enum T189 { } +public enum T190 { } +public enum T191 { } +public enum T192 { } +public enum T193 { } +public enum T194 { } +public enum T195 { } +public enum T196 { } +public enum T197 { } +public enum T198 { } +public enum T199 { } +public enum T200 { } +public enum T201 { } +public enum T202 { } +public enum T203 { } +public enum T204 { } +public enum T205 { } +public enum T206 { } +public enum T207 { } +public enum T208 { } +public enum T209 { } +public enum T210 { } +public enum T211 { } +public enum T212 { } +public enum T213 { } +public enum T214 { } +public enum T215 { } +public enum T216 { } +public enum T217 { } +public enum T218 { } +public enum T219 { } +public enum T220 { } +public enum T221 { } +public enum T222 { } +public enum T223 { } +public enum T224 { } +public enum T225 { } +public enum T226 { } +public enum T227 { } +public enum T228 { } +public enum T229 { } +public enum T230 { } +public enum T231 { } +public enum T232 { } +public enum T233 { } +public enum T234 { } +public enum T235 { } +public enum T236 { } +public enum T237 { } +public enum T238 { } +public enum T239 { } +public enum T240 { } +public enum T241 { } +public enum T242 { } +public enum T243 { } +public enum T244 { } +public enum T245 { } +public enum T246 { } +public enum T247 { } +public enum T248 { } +public enum T249 { } +public enum T250 { } +public enum T251 { } +public enum T252 { } +public enum T253 { } +public enum T254 { } +public enum T255 { } +public enum T256 { } +public enum T257 { } +public enum T258 { } +public enum T259 { } +public enum T260 { } +public enum T261 { } +public enum T262 { } +public enum T263 { } +public enum T264 { } +public enum T265 { } +public enum T266 { } +public enum T267 { } +public enum T268 { } +public enum T269 { } +public enum T270 { } +public enum T271 { } +public enum T272 { } +public enum T273 { } +public enum T274 { } +public enum T275 { } +public enum T276 { } +public enum T277 { } +public enum T278 { } +public enum T279 { } +public enum T280 { } +public enum T281 { } +public enum T282 { } +public enum T283 { } +public enum T284 { } +public enum T285 { } +public enum T286 { } +public enum T287 { } +public enum T288 { } +public enum T289 { } +public enum T290 { } +public enum T291 { } +public enum T292 { } +public enum T293 { } +public enum T294 { } +public enum T295 { } +public enum T296 { } +public enum T297 { } +public enum T298 { } +public enum T299 { } +public enum T300 { } +public enum T301 { } +public enum T302 { } +public enum T303 { } +public enum T304 { } +public enum T305 { } +public enum T306 { } +public enum T307 { } +public enum T308 { } +public enum T309 { } +public enum T310 { } +public enum T311 { } +public enum T312 { } +public enum T313 { } +public enum T314 { } +public enum T315 { } +public enum T316 { } +public enum T317 { } +public enum T318 { } +public enum T319 { } +public enum T320 { } +public enum T321 { } +public enum T322 { } +public enum T323 { } +public enum T324 { } +public enum T325 { } +public enum T326 { } +public enum T327 { } +public enum T328 { } +public enum T329 { } +public enum T330 { } +public enum T331 { } +public enum T332 { } +public enum T333 { } +public enum T334 { } +public enum T335 { } +public enum T336 { } +public enum T337 { } +public enum T338 { } +public enum T339 { } +public enum T340 { } +public enum T341 { } +public enum T342 { } +public enum T343 { } +public enum T344 { } +public enum T345 { } +public enum T346 { } +public enum T347 { } +public enum T348 { } +public enum T349 { } +public enum T350 { } +public enum T351 { } +public enum T352 { } +public enum T353 { } +public enum T354 { } +public enum T355 { } +public enum T356 { } +public enum T357 { } +public enum T358 { } +public enum T359 { } +public enum T360 { } +public enum T361 { } +public enum T362 { } +public enum T363 { } +public enum T364 { } +public enum T365 { } +public enum T366 { } +public enum T367 { } +public enum T368 { } +public enum T369 { } +public enum T370 { } +public enum T371 { } +public enum T372 { } +public enum T373 { } +public enum T374 { } +public enum T375 { } +public enum T376 { } +public enum T377 { } +public enum T378 { } +public enum T379 { } +public enum T380 { } +public enum T381 { } +public enum T382 { } +public enum T383 { } +public enum T384 { } +public enum T385 { } +public enum T386 { } +public enum T387 { } +public enum T388 { } +public enum T389 { } +public enum T390 { } +public enum T391 { } +public enum T392 { } +public enum T393 { } +public enum T394 { } +public enum T395 { } +public enum T396 { } +public enum T397 { } +public enum T398 { } +public enum T399 { } +public enum T400 { } +public enum T401 { } +public enum T402 { } +public enum T403 { } +public enum T404 { } +public enum T405 { } +public enum T406 { } +public enum T407 { } +public enum T408 { } +public enum T409 { } +public enum T410 { } +public enum T411 { } +public enum T412 { } +public enum T413 { } +public enum T414 { } +public enum T415 { } +public enum T416 { } +public enum T417 { } +public enum T418 { } +public enum T419 { } +public enum T420 { } +public enum T421 { } +public enum T422 { } +public enum T423 { } +public enum T424 { } +public enum T425 { } +public enum T426 { } +public enum T427 { } +public enum T428 { } +public enum T429 { } +public enum T430 { } +public enum T431 { } +public enum T432 { } +public enum T433 { } +public enum T434 { } +public enum T435 { } +public enum T436 { } +public enum T437 { } +public enum T438 { } +public enum T439 { } +public enum T440 { } +public enum T441 { } +public enum T442 { } +public enum T443 { } +public enum T444 { } +public enum T445 { } +public enum T446 { } +public enum T447 { } +public enum T448 { } +public enum T449 { } +public enum T450 { } +public enum T451 { } +public enum T452 { } +public enum T453 { } +public enum T454 { } +public enum T455 { } +public enum T456 { } +public enum T457 { } +public enum T458 { } +public enum T459 { } +public enum T460 { } +public enum T461 { } +public enum T462 { } +public enum T463 { } +public enum T464 { } +public enum T465 { } +public enum T466 { } +public enum T467 { } +public enum T468 { } +public enum T469 { } +public enum T470 { } +public enum T471 { } +public enum T472 { } +public enum T473 { } +public enum T474 { } +public enum T475 { } +public enum T476 { } +public enum T477 { } +public enum T478 { } +public enum T479 { } +public enum T480 { } +public enum T481 { } +public enum T482 { } +public enum T483 { } +public enum T484 { } +public enum T485 { } +public enum T486 { } +public enum T487 { } +public enum T488 { } +public enum T489 { } +public enum T490 { } +public enum T491 { } +public enum T492 { } +public enum T493 { } +public enum T494 { } +public enum T495 { } +public enum T496 { } +public enum T497 { } +public enum T498 { } +public enum T499 { } +public enum T500 { } +public enum T501 { } +public enum T502 { } +public enum T503 { } +public enum T504 { } +public enum T505 { } +public enum T506 { } +public enum T507 { } +public enum T508 { } +public enum T509 { } +public enum T510 { } +public enum T511 { } +public enum T512 { } +public enum T513 { } +public enum T514 { } +public enum T515 { } +public enum T516 { } +public enum T517 { } +public enum T518 { } +public enum T519 { } +public enum T520 { } +public enum T521 { } +public enum T522 { } +public enum T523 { } +public enum T524 { } +public enum T525 { } +public enum T526 { } +public enum T527 { } +public enum T528 { } +public enum T529 { } +public enum T530 { } +public enum T531 { } +public enum T532 { } +public enum T533 { } +public enum T534 { } +public enum T535 { } +public enum T536 { } +public enum T537 { } +public enum T538 { } +public enum T539 { } +public enum T540 { } +public enum T541 { } +public enum T542 { } +public enum T543 { } +public enum T544 { } +public enum T545 { } +public enum T546 { } +public enum T547 { } +public enum T548 { } +public enum T549 { } +public enum T550 { } +public enum T551 { } +public enum T552 { } +public enum T553 { } +public enum T554 { } +public enum T555 { } +public enum T556 { } +public enum T557 { } +public enum T558 { } +public enum T559 { } +public enum T560 { } +public enum T561 { } +public enum T562 { } +public enum T563 { } +public enum T564 { } +public enum T565 { } +public enum T566 { } +public enum T567 { } +public enum T568 { } +public enum T569 { } +public enum T570 { } +public enum T571 { } +public enum T572 { } +public enum T573 { } +public enum T574 { } +public enum T575 { } +public enum T576 { } +public enum T577 { } +public enum T578 { } +public enum T579 { } +public enum T580 { } +public enum T581 { } +public enum T582 { } +public enum T583 { } +public enum T584 { } +public enum T585 { } +public enum T586 { } +public enum T587 { } +public enum T588 { } +public enum T589 { } +public enum T590 { } +public enum T591 { } +public enum T592 { } +public enum T593 { } +public enum T594 { } +public enum T595 { } +public enum T596 { } +public enum T597 { } +public enum T598 { } +public enum T599 { } +public enum T600 { } +public enum T601 { } +public enum T602 { } +public enum T603 { } +public enum T604 { } +public enum T605 { } +public enum T606 { } +public enum T607 { } +public enum T608 { } +public enum T609 { } +public enum T610 { } +public enum T611 { } +public enum T612 { } +public enum T613 { } +public enum T614 { } +public enum T615 { } +public enum T616 { } +public enum T617 { } +public enum T618 { } +public enum T619 { } +public enum T620 { } +public enum T621 { } +public enum T622 { } +public enum T623 { } +public enum T624 { } +public enum T625 { } +public enum T626 { } +public enum T627 { } +public enum T628 { } +public enum T629 { } +public enum T630 { } +public enum T631 { } +public enum T632 { } +public enum T633 { } +public enum T634 { } +public enum T635 { } +public enum T636 { } +public enum T637 { } +public enum T638 { } +public enum T639 { } +public enum T640 { } +public enum T641 { } +public enum T642 { } +public enum T643 { } +public enum T644 { } +public enum T645 { } +public enum T646 { } +public enum T647 { } +public enum T648 { } +public enum T649 { } +public enum T650 { } +public enum T651 { } +public enum T652 { } +public enum T653 { } +public enum T654 { } +public enum T655 { } +public enum T656 { } +public enum T657 { } +public enum T658 { } +public enum T659 { } +public enum T660 { } +public enum T661 { } +public enum T662 { } +public enum T663 { } +public enum T664 { } +public enum T665 { } +public enum T666 { } +public enum T667 { } +public enum T668 { } +public enum T669 { } +public enum T670 { } +public enum T671 { } +public enum T672 { } +public enum T673 { } +public enum T674 { } +public enum T675 { } +public enum T676 { } +public enum T677 { } +public enum T678 { } +public enum T679 { } +public enum T680 { } +public enum T681 { } +public enum T682 { } +public enum T683 { } +public enum T684 { } +public enum T685 { } +public enum T686 { } +public enum T687 { } +public enum T688 { } +public enum T689 { } +public enum T690 { } +public enum T691 { } +public enum T692 { } +public enum T693 { } +public enum T694 { } +public enum T695 { } +public enum T696 { } +public enum T697 { } +public enum T698 { } +public enum T699 { } +public enum T700 { } +public enum T701 { } +public enum T702 { } +public enum T703 { } +public enum T704 { } +public enum T705 { } +public enum T706 { } +public enum T707 { } +public enum T708 { } +public enum T709 { } +public enum T710 { } +public enum T711 { } +public enum T712 { } +public enum T713 { } +public enum T714 { } +public enum T715 { } +public enum T716 { } +public enum T717 { } +public enum T718 { } +public enum T719 { } +public enum T720 { } +public enum T721 { } +public enum T722 { } +public enum T723 { } +public enum T724 { } +public enum T725 { } +public enum T726 { } +public enum T727 { } +public enum T728 { } +public enum T729 { } +public enum T730 { } +public enum T731 { } +public enum T732 { } +public enum T733 { } +public enum T734 { } +public enum T735 { } +public enum T736 { } +public enum T737 { } +public enum T738 { } +public enum T739 { } +public enum T740 { } +public enum T741 { } +public enum T742 { } +public enum T743 { } +public enum T744 { } +public enum T745 { } +public enum T746 { } +public enum T747 { } +public enum T748 { } +public enum T749 { } +public enum T750 { } +public enum T751 { } +public enum T752 { } +public enum T753 { } +public enum T754 { } +public enum T755 { } +public enum T756 { } +public enum T757 { } +public enum T758 { } +public enum T759 { } +public enum T760 { } +public enum T761 { } +public enum T762 { } +public enum T763 { } +public enum T764 { } +public enum T765 { } +public enum T766 { } +public enum T767 { } +public enum T768 { } +public enum T769 { } +public enum T770 { } +public enum T771 { } +public enum T772 { } +public enum T773 { } +public enum T774 { } +public enum T775 { } +public enum T776 { } +public enum T777 { } +public enum T778 { } +public enum T779 { } +public enum T780 { } +public enum T781 { } +public enum T782 { } +public enum T783 { } +public enum T784 { } +public enum T785 { } +public enum T786 { } +public enum T787 { } +public enum T788 { } +public enum T789 { } +public enum T790 { } +public enum T791 { } +public enum T792 { } +public enum T793 { } +public enum T794 { } +public enum T795 { } +public enum T796 { } +public enum T797 { } +public enum T798 { } +public enum T799 { } +public enum T800 { } +public enum T801 { } +public enum T802 { } +public enum T803 { } +public enum T804 { } +public enum T805 { } +public enum T806 { } +public enum T807 { } +public enum T808 { } +public enum T809 { } +public enum T810 { } +public enum T811 { } +public enum T812 { } +public enum T813 { } +public enum T814 { } +public enum T815 { } +public enum T816 { } +public enum T817 { } +public enum T818 { } +public enum T819 { } +public enum T820 { } +public enum T821 { } +public enum T822 { } +public enum T823 { } +public enum T824 { } +public enum T825 { } +public enum T826 { } +public enum T827 { } +public enum T828 { } +public enum T829 { } +public enum T830 { } +public enum T831 { } +public enum T832 { } +public enum T833 { } +public enum T834 { } +public enum T835 { } +public enum T836 { } +public enum T837 { } +public enum T838 { } +public enum T839 { } +public enum T840 { } +public enum T841 { } +public enum T842 { } +public enum T843 { } +public enum T844 { } +public enum T845 { } +public enum T846 { } +public enum T847 { } +public enum T848 { } +public enum T849 { } +public enum T850 { } +public enum T851 { } +public enum T852 { } +public enum T853 { } +public enum T854 { } +public enum T855 { } +public enum T856 { } +public enum T857 { } +public enum T858 { } +public enum T859 { } +public enum T860 { } +public enum T861 { } +public enum T862 { } +public enum T863 { } +public enum T864 { } +public enum T865 { } +public enum T866 { } +public enum T867 { } +public enum T868 { } +public enum T869 { } +public enum T870 { } +public enum T871 { } +public enum T872 { } +public enum T873 { } +public enum T874 { } +public enum T875 { } +public enum T876 { } +public enum T877 { } +public enum T878 { } +public enum T879 { } +public enum T880 { } +public enum T881 { } +public enum T882 { } +public enum T883 { } +public enum T884 { } +public enum T885 { } +public enum T886 { } +public enum T887 { } +public enum T888 { } +public enum T889 { } +public enum T890 { } +public enum T891 { } +public enum T892 { } +public enum T893 { } +public enum T894 { } +public enum T895 { } +public enum T896 { } +public enum T897 { } +public enum T898 { } +public enum T899 { } +public enum T900 { } +public enum T901 { } +public enum T902 { } +public enum T903 { } +public enum T904 { } +public enum T905 { } +public enum T906 { } +public enum T907 { } +public enum T908 { } +public enum T909 { } +public enum T910 { } +public enum T911 { } +public enum T912 { } +public enum T913 { } +public enum T914 { } +public enum T915 { } +public enum T916 { } +public enum T917 { } +public enum T918 { } +public enum T919 { } +public enum T920 { } +public enum T921 { } +public enum T922 { } +public enum T923 { } +public enum T924 { } +public enum T925 { } +public enum T926 { } +public enum T927 { } +public enum T928 { } +public enum T929 { } +public enum T930 { } +public enum T931 { } +public enum T932 { } +public enum T933 { } +public enum T934 { } +public enum T935 { } +public enum T936 { } +public enum T937 { } +public enum T938 { } +public enum T939 { } +public enum T940 { } +public enum T941 { } +public enum T942 { } +public enum T943 { } +public enum T944 { } +public enum T945 { } +public enum T946 { } +public enum T947 { } +public enum T948 { } +public enum T949 { } +public enum T950 { } +public enum T951 { } +public enum T952 { } +public enum T953 { } +public enum T954 { } +public enum T955 { } +public enum T956 { } +public enum T957 { } +public enum T958 { } +public enum T959 { } +public enum T960 { } +public enum T961 { } +public enum T962 { } +public enum T963 { } +public enum T964 { } +public enum T965 { } +public enum T966 { } +public enum T967 { } +public enum T968 { } +public enum T969 { } +public enum T970 { } +public enum T971 { } +public enum T972 { } +public enum T973 { } +public enum T974 { } +public enum T975 { } +public enum T976 { } +public enum T977 { } +public enum T978 { } +public enum T979 { } +public enum T980 { } +public enum T981 { } +public enum T982 { } +public enum T983 { } +public enum T984 { } +public enum T985 { } +public enum T986 { } +public enum T987 { } +public enum T988 { } +public enum T989 { } +public enum T990 { } +public enum T991 { } +public enum T992 { } +public enum T993 { } +public enum T994 { } +public enum T995 { } +public enum T996 { } +public enum T997 { } +public enum T998 { } +public enum T999 { } + +public class Test { + public static int Main() + { + try + { + Do0(new T0()); + Do1(new T1()); + Do2(new T2()); + Do3(new T3()); + Do4(new T4()); + Do5(new T5()); + Do6(new T6()); + Do7(new T7()); + Do8(new T8()); + Do9(new T9()); + Do10(new T10()); + Do11(new T11()); + Do12(new T12()); + Do13(new T13()); + Do14(new T14()); + Do15(new T15()); + Do16(new T16()); + Do17(new T17()); + Do18(new T18()); + Do19(new T19()); + Do20(new T20()); + Do21(new T21()); + Do22(new T22()); + Do23(new T23()); + Do24(new T24()); + Do25(new T25()); + Do26(new T26()); + Do27(new T27()); + Do28(new T28()); + Do29(new T29()); + Do30(new T30()); + Do31(new T31()); + Do32(new T32()); + Do33(new T33()); + Do34(new T34()); + Do35(new T35()); + Do36(new T36()); + Do37(new T37()); + Do38(new T38()); + Do39(new T39()); + Do40(new T40()); + Do41(new T41()); + Do42(new T42()); + Do43(new T43()); + Do44(new T44()); + Do45(new T45()); + Do46(new T46()); + Do47(new T47()); + Do48(new T48()); + Do49(new T49()); + Do50(new T50()); + Do51(new T51()); + Do52(new T52()); + Do53(new T53()); + Do54(new T54()); + Do55(new T55()); + Do56(new T56()); + Do57(new T57()); + Do58(new T58()); + Do59(new T59()); + Do60(new T60()); + Do61(new T61()); + Do62(new T62()); + Do63(new T63()); + Do64(new T64()); + Do65(new T65()); + Do66(new T66()); + Do67(new T67()); + Do68(new T68()); + Do69(new T69()); + Do70(new T70()); + Do71(new T71()); + Do72(new T72()); + Do73(new T73()); + Do74(new T74()); + Do75(new T75()); + Do76(new T76()); + Do77(new T77()); + Do78(new T78()); + Do79(new T79()); + Do80(new T80()); + Do81(new T81()); + Do82(new T82()); + Do83(new T83()); + Do84(new T84()); + Do85(new T85()); + Do86(new T86()); + Do87(new T87()); + Do88(new T88()); + Do89(new T89()); + Do90(new T90()); + Do91(new T91()); + Do92(new T92()); + Do93(new T93()); + Do94(new T94()); + Do95(new T95()); + Do96(new T96()); + Do97(new T97()); + Do98(new T98()); + Do99(new T99()); + Do100(new T100()); + Do101(new T101()); + Do102(new T102()); + Do103(new T103()); + Do104(new T104()); + Do105(new T105()); + Do106(new T106()); + Do107(new T107()); + Do108(new T108()); + Do109(new T109()); + Do110(new T110()); + Do111(new T111()); + Do112(new T112()); + Do113(new T113()); + Do114(new T114()); + Do115(new T115()); + Do116(new T116()); + Do117(new T117()); + Do118(new T118()); + Do119(new T119()); + Do120(new T120()); + Do121(new T121()); + Do122(new T122()); + Do123(new T123()); + Do124(new T124()); + Do125(new T125()); + Do126(new T126()); + Do127(new T127()); + Do128(new T128()); + Do129(new T129()); + Do130(new T130()); + Do131(new T131()); + Do132(new T132()); + Do133(new T133()); + Do134(new T134()); + Do135(new T135()); + Do136(new T136()); + Do137(new T137()); + Do138(new T138()); + Do139(new T139()); + Do140(new T140()); + Do141(new T141()); + Do142(new T142()); + Do143(new T143()); + Do144(new T144()); + Do145(new T145()); + Do146(new T146()); + Do147(new T147()); + Do148(new T148()); + Do149(new T149()); + Do150(new T150()); + Do151(new T151()); + Do152(new T152()); + Do153(new T153()); + Do154(new T154()); + Do155(new T155()); + Do156(new T156()); + Do157(new T157()); + Do158(new T158()); + Do159(new T159()); + Do160(new T160()); + Do161(new T161()); + Do162(new T162()); + Do163(new T163()); + Do164(new T164()); + Do165(new T165()); + Do166(new T166()); + Do167(new T167()); + Do168(new T168()); + Do169(new T169()); + Do170(new T170()); + Do171(new T171()); + Do172(new T172()); + Do173(new T173()); + Do174(new T174()); + Do175(new T175()); + Do176(new T176()); + Do177(new T177()); + Do178(new T178()); + Do179(new T179()); + Do180(new T180()); + Do181(new T181()); + Do182(new T182()); + Do183(new T183()); + Do184(new T184()); + Do185(new T185()); + Do186(new T186()); + Do187(new T187()); + Do188(new T188()); + Do189(new T189()); + Do190(new T190()); + Do191(new T191()); + Do192(new T192()); + Do193(new T193()); + Do194(new T194()); + Do195(new T195()); + Do196(new T196()); + Do197(new T197()); + Do198(new T198()); + Do199(new T199()); + Do200(new T200()); + Do201(new T201()); + Do202(new T202()); + Do203(new T203()); + Do204(new T204()); + Do205(new T205()); + Do206(new T206()); + Do207(new T207()); + Do208(new T208()); + Do209(new T209()); + Do210(new T210()); + Do211(new T211()); + Do212(new T212()); + Do213(new T213()); + Do214(new T214()); + Do215(new T215()); + Do216(new T216()); + Do217(new T217()); + Do218(new T218()); + Do219(new T219()); + Do220(new T220()); + Do221(new T221()); + Do222(new T222()); + Do223(new T223()); + Do224(new T224()); + Do225(new T225()); + Do226(new T226()); + Do227(new T227()); + Do228(new T228()); + Do229(new T229()); + Do230(new T230()); + Do231(new T231()); + Do232(new T232()); + Do233(new T233()); + Do234(new T234()); + Do235(new T235()); + Do236(new T236()); + Do237(new T237()); + Do238(new T238()); + Do239(new T239()); + Do240(new T240()); + Do241(new T241()); + Do242(new T242()); + Do243(new T243()); + Do244(new T244()); + Do245(new T245()); + Do246(new T246()); + Do247(new T247()); + Do248(new T248()); + Do249(new T249()); + Do250(new T250()); + Do251(new T251()); + Do252(new T252()); + Do253(new T253()); + Do254(new T254()); + Do255(new T255()); + Do256(new T256()); + Do257(new T257()); + Do258(new T258()); + Do259(new T259()); + Do260(new T260()); + Do261(new T261()); + Do262(new T262()); + Do263(new T263()); + Do264(new T264()); + Do265(new T265()); + Do266(new T266()); + Do267(new T267()); + Do268(new T268()); + Do269(new T269()); + Do270(new T270()); + Do271(new T271()); + Do272(new T272()); + Do273(new T273()); + Do274(new T274()); + Do275(new T275()); + Do276(new T276()); + Do277(new T277()); + Do278(new T278()); + Do279(new T279()); + Do280(new T280()); + Do281(new T281()); + Do282(new T282()); + Do283(new T283()); + Do284(new T284()); + Do285(new T285()); + Do286(new T286()); + Do287(new T287()); + Do288(new T288()); + Do289(new T289()); + Do290(new T290()); + Do291(new T291()); + Do292(new T292()); + Do293(new T293()); + Do294(new T294()); + Do295(new T295()); + Do296(new T296()); + Do297(new T297()); + Do298(new T298()); + Do299(new T299()); + Do300(new T300()); + Do301(new T301()); + Do302(new T302()); + Do303(new T303()); + Do304(new T304()); + Do305(new T305()); + Do306(new T306()); + Do307(new T307()); + Do308(new T308()); + Do309(new T309()); + Do310(new T310()); + Do311(new T311()); + Do312(new T312()); + Do313(new T313()); + Do314(new T314()); + Do315(new T315()); + Do316(new T316()); + Do317(new T317()); + Do318(new T318()); + Do319(new T319()); + Do320(new T320()); + Do321(new T321()); + Do322(new T322()); + Do323(new T323()); + Do324(new T324()); + Do325(new T325()); + Do326(new T326()); + Do327(new T327()); + Do328(new T328()); + Do329(new T329()); + Do330(new T330()); + Do331(new T331()); + Do332(new T332()); + Do333(new T333()); + Do334(new T334()); + Do335(new T335()); + Do336(new T336()); + Do337(new T337()); + Do338(new T338()); + Do339(new T339()); + Do340(new T340()); + Do341(new T341()); + Do342(new T342()); + Do343(new T343()); + Do344(new T344()); + Do345(new T345()); + Do346(new T346()); + Do347(new T347()); + Do348(new T348()); + Do349(new T349()); + Do350(new T350()); + Do351(new T351()); + Do352(new T352()); + Do353(new T353()); + Do354(new T354()); + Do355(new T355()); + Do356(new T356()); + Do357(new T357()); + Do358(new T358()); + Do359(new T359()); + Do360(new T360()); + Do361(new T361()); + Do362(new T362()); + Do363(new T363()); + Do364(new T364()); + Do365(new T365()); + Do366(new T366()); + Do367(new T367()); + Do368(new T368()); + Do369(new T369()); + Do370(new T370()); + Do371(new T371()); + Do372(new T372()); + Do373(new T373()); + Do374(new T374()); + Do375(new T375()); + Do376(new T376()); + Do377(new T377()); + Do378(new T378()); + Do379(new T379()); + Do380(new T380()); + Do381(new T381()); + Do382(new T382()); + Do383(new T383()); + Do384(new T384()); + Do385(new T385()); + Do386(new T386()); + Do387(new T387()); + Do388(new T388()); + Do389(new T389()); + Do390(new T390()); + Do391(new T391()); + Do392(new T392()); + Do393(new T393()); + Do394(new T394()); + Do395(new T395()); + Do396(new T396()); + Do397(new T397()); + Do398(new T398()); + Do399(new T399()); + Do400(new T400()); + Do401(new T401()); + Do402(new T402()); + Do403(new T403()); + Do404(new T404()); + Do405(new T405()); + Do406(new T406()); + Do407(new T407()); + Do408(new T408()); + Do409(new T409()); + Do410(new T410()); + Do411(new T411()); + Do412(new T412()); + Do413(new T413()); + Do414(new T414()); + Do415(new T415()); + Do416(new T416()); + Do417(new T417()); + Do418(new T418()); + Do419(new T419()); + Do420(new T420()); + Do421(new T421()); + Do422(new T422()); + Do423(new T423()); + Do424(new T424()); + Do425(new T425()); + Do426(new T426()); + Do427(new T427()); + Do428(new T428()); + Do429(new T429()); + Do430(new T430()); + Do431(new T431()); + Do432(new T432()); + Do433(new T433()); + Do434(new T434()); + Do435(new T435()); + Do436(new T436()); + Do437(new T437()); + Do438(new T438()); + Do439(new T439()); + Do440(new T440()); + Do441(new T441()); + Do442(new T442()); + Do443(new T443()); + Do444(new T444()); + Do445(new T445()); + Do446(new T446()); + Do447(new T447()); + Do448(new T448()); + Do449(new T449()); + Do450(new T450()); + Do451(new T451()); + Do452(new T452()); + Do453(new T453()); + Do454(new T454()); + Do455(new T455()); + Do456(new T456()); + Do457(new T457()); + Do458(new T458()); + Do459(new T459()); + Do460(new T460()); + Do461(new T461()); + Do462(new T462()); + Do463(new T463()); + Do464(new T464()); + Do465(new T465()); + Do466(new T466()); + Do467(new T467()); + Do468(new T468()); + Do469(new T469()); + Do470(new T470()); + Do471(new T471()); + Do472(new T472()); + Do473(new T473()); + Do474(new T474()); + Do475(new T475()); + Do476(new T476()); + Do477(new T477()); + Do478(new T478()); + Do479(new T479()); + Do480(new T480()); + Do481(new T481()); + Do482(new T482()); + Do483(new T483()); + Do484(new T484()); + Do485(new T485()); + Do486(new T486()); + Do487(new T487()); + Do488(new T488()); + Do489(new T489()); + Do490(new T490()); + Do491(new T491()); + Do492(new T492()); + Do493(new T493()); + Do494(new T494()); + Do495(new T495()); + Do496(new T496()); + Do497(new T497()); + Do498(new T498()); + Do499(new T499()); + Do500(new T500()); + Do501(new T501()); + Do502(new T502()); + Do503(new T503()); + Do504(new T504()); + Do505(new T505()); + Do506(new T506()); + Do507(new T507()); + Do508(new T508()); + Do509(new T509()); + Do510(new T510()); + Do511(new T511()); + Do512(new T512()); + Do513(new T513()); + Do514(new T514()); + Do515(new T515()); + Do516(new T516()); + Do517(new T517()); + Do518(new T518()); + Do519(new T519()); + Do520(new T520()); + Do521(new T521()); + Do522(new T522()); + Do523(new T523()); + Do524(new T524()); + Do525(new T525()); + Do526(new T526()); + Do527(new T527()); + Do528(new T528()); + Do529(new T529()); + Do530(new T530()); + Do531(new T531()); + Do532(new T532()); + Do533(new T533()); + Do534(new T534()); + Do535(new T535()); + Do536(new T536()); + Do537(new T537()); + Do538(new T538()); + Do539(new T539()); + Do540(new T540()); + Do541(new T541()); + Do542(new T542()); + Do543(new T543()); + Do544(new T544()); + Do545(new T545()); + Do546(new T546()); + Do547(new T547()); + Do548(new T548()); + Do549(new T549()); + Do550(new T550()); + Do551(new T551()); + Do552(new T552()); + Do553(new T553()); + Do554(new T554()); + Do555(new T555()); + Do556(new T556()); + Do557(new T557()); + Do558(new T558()); + Do559(new T559()); + Do560(new T560()); + Do561(new T561()); + Do562(new T562()); + Do563(new T563()); + Do564(new T564()); + Do565(new T565()); + Do566(new T566()); + Do567(new T567()); + Do568(new T568()); + Do569(new T569()); + Do570(new T570()); + Do571(new T571()); + Do572(new T572()); + Do573(new T573()); + Do574(new T574()); + Do575(new T575()); + Do576(new T576()); + Do577(new T577()); + Do578(new T578()); + Do579(new T579()); + Do580(new T580()); + Do581(new T581()); + Do582(new T582()); + Do583(new T583()); + Do584(new T584()); + Do585(new T585()); + Do586(new T586()); + Do587(new T587()); + Do588(new T588()); + Do589(new T589()); + Do590(new T590()); + Do591(new T591()); + Do592(new T592()); + Do593(new T593()); + Do594(new T594()); + Do595(new T595()); + Do596(new T596()); + Do597(new T597()); + Do598(new T598()); + Do599(new T599()); + Do600(new T600()); + Do601(new T601()); + Do602(new T602()); + Do603(new T603()); + Do604(new T604()); + Do605(new T605()); + Do606(new T606()); + Do607(new T607()); + Do608(new T608()); + Do609(new T609()); + Do610(new T610()); + Do611(new T611()); + Do612(new T612()); + Do613(new T613()); + Do614(new T614()); + Do615(new T615()); + Do616(new T616()); + Do617(new T617()); + Do618(new T618()); + Do619(new T619()); + Do620(new T620()); + Do621(new T621()); + Do622(new T622()); + Do623(new T623()); + Do624(new T624()); + Do625(new T625()); + Do626(new T626()); + Do627(new T627()); + Do628(new T628()); + Do629(new T629()); + Do630(new T630()); + Do631(new T631()); + Do632(new T632()); + Do633(new T633()); + Do634(new T634()); + Do635(new T635()); + Do636(new T636()); + Do637(new T637()); + Do638(new T638()); + Do639(new T639()); + Do640(new T640()); + Do641(new T641()); + Do642(new T642()); + Do643(new T643()); + Do644(new T644()); + Do645(new T645()); + Do646(new T646()); + Do647(new T647()); + Do648(new T648()); + Do649(new T649()); + Do650(new T650()); + Do651(new T651()); + Do652(new T652()); + Do653(new T653()); + Do654(new T654()); + Do655(new T655()); + Do656(new T656()); + Do657(new T657()); + Do658(new T658()); + Do659(new T659()); + Do660(new T660()); + Do661(new T661()); + Do662(new T662()); + Do663(new T663()); + Do664(new T664()); + Do665(new T665()); + Do666(new T666()); + Do667(new T667()); + Do668(new T668()); + Do669(new T669()); + Do670(new T670()); + Do671(new T671()); + Do672(new T672()); + Do673(new T673()); + Do674(new T674()); + Do675(new T675()); + Do676(new T676()); + Do677(new T677()); + Do678(new T678()); + Do679(new T679()); + Do680(new T680()); + Do681(new T681()); + Do682(new T682()); + Do683(new T683()); + Do684(new T684()); + Do685(new T685()); + Do686(new T686()); + Do687(new T687()); + Do688(new T688()); + Do689(new T689()); + Do690(new T690()); + Do691(new T691()); + Do692(new T692()); + Do693(new T693()); + Do694(new T694()); + Do695(new T695()); + Do696(new T696()); + Do697(new T697()); + Do698(new T698()); + Do699(new T699()); + Do700(new T700()); + Do701(new T701()); + Do702(new T702()); + Do703(new T703()); + Do704(new T704()); + Do705(new T705()); + Do706(new T706()); + Do707(new T707()); + Do708(new T708()); + Do709(new T709()); + Do710(new T710()); + Do711(new T711()); + Do712(new T712()); + Do713(new T713()); + Do714(new T714()); + Do715(new T715()); + Do716(new T716()); + Do717(new T717()); + Do718(new T718()); + Do719(new T719()); + Do720(new T720()); + Do721(new T721()); + Do722(new T722()); + Do723(new T723()); + Do724(new T724()); + Do725(new T725()); + Do726(new T726()); + Do727(new T727()); + Do728(new T728()); + Do729(new T729()); + Do730(new T730()); + Do731(new T731()); + Do732(new T732()); + Do733(new T733()); + Do734(new T734()); + Do735(new T735()); + Do736(new T736()); + Do737(new T737()); + Do738(new T738()); + Do739(new T739()); + Do740(new T740()); + Do741(new T741()); + Do742(new T742()); + Do743(new T743()); + Do744(new T744()); + Do745(new T745()); + Do746(new T746()); + Do747(new T747()); + Do748(new T748()); + Do749(new T749()); + Do750(new T750()); + Do751(new T751()); + Do752(new T752()); + Do753(new T753()); + Do754(new T754()); + Do755(new T755()); + Do756(new T756()); + Do757(new T757()); + Do758(new T758()); + Do759(new T759()); + Do760(new T760()); + Do761(new T761()); + Do762(new T762()); + Do763(new T763()); + Do764(new T764()); + Do765(new T765()); + Do766(new T766()); + Do767(new T767()); + Do768(new T768()); + Do769(new T769()); + Do770(new T770()); + Do771(new T771()); + Do772(new T772()); + Do773(new T773()); + Do774(new T774()); + Do775(new T775()); + Do776(new T776()); + Do777(new T777()); + Do778(new T778()); + Do779(new T779()); + Do780(new T780()); + Do781(new T781()); + Do782(new T782()); + Do783(new T783()); + Do784(new T784()); + Do785(new T785()); + Do786(new T786()); + Do787(new T787()); + Do788(new T788()); + Do789(new T789()); + Do790(new T790()); + Do791(new T791()); + Do792(new T792()); + Do793(new T793()); + Do794(new T794()); + Do795(new T795()); + Do796(new T796()); + Do797(new T797()); + Do798(new T798()); + Do799(new T799()); + Do800(new T800()); + Do801(new T801()); + Do802(new T802()); + Do803(new T803()); + Do804(new T804()); + Do805(new T805()); + Do806(new T806()); + Do807(new T807()); + Do808(new T808()); + Do809(new T809()); + Do810(new T810()); + Do811(new T811()); + Do812(new T812()); + Do813(new T813()); + Do814(new T814()); + Do815(new T815()); + Do816(new T816()); + Do817(new T817()); + Do818(new T818()); + Do819(new T819()); + Do820(new T820()); + Do821(new T821()); + Do822(new T822()); + Do823(new T823()); + Do824(new T824()); + Do825(new T825()); + Do826(new T826()); + Do827(new T827()); + Do828(new T828()); + Do829(new T829()); + Do830(new T830()); + Do831(new T831()); + Do832(new T832()); + Do833(new T833()); + Do834(new T834()); + Do835(new T835()); + Do836(new T836()); + Do837(new T837()); + Do838(new T838()); + Do839(new T839()); + Do840(new T840()); + Do841(new T841()); + Do842(new T842()); + Do843(new T843()); + Do844(new T844()); + Do845(new T845()); + Do846(new T846()); + Do847(new T847()); + Do848(new T848()); + Do849(new T849()); + Do850(new T850()); + Do851(new T851()); + Do852(new T852()); + Do853(new T853()); + Do854(new T854()); + Do855(new T855()); + Do856(new T856()); + Do857(new T857()); + Do858(new T858()); + Do859(new T859()); + Do860(new T860()); + Do861(new T861()); + Do862(new T862()); + Do863(new T863()); + Do864(new T864()); + Do865(new T865()); + Do866(new T866()); + Do867(new T867()); + Do868(new T868()); + Do869(new T869()); + Do870(new T870()); + Do871(new T871()); + Do872(new T872()); + Do873(new T873()); + Do874(new T874()); + Do875(new T875()); + Do876(new T876()); + Do877(new T877()); + Do878(new T878()); + Do879(new T879()); + Do880(new T880()); + Do881(new T881()); + Do882(new T882()); + Do883(new T883()); + Do884(new T884()); + Do885(new T885()); + Do886(new T886()); + Do887(new T887()); + Do888(new T888()); + Do889(new T889()); + Do890(new T890()); + Do891(new T891()); + Do892(new T892()); + Do893(new T893()); + Do894(new T894()); + Do895(new T895()); + Do896(new T896()); + Do897(new T897()); + Do898(new T898()); + Do899(new T899()); + Do900(new T900()); + Do901(new T901()); + Do902(new T902()); + Do903(new T903()); + Do904(new T904()); + Do905(new T905()); + Do906(new T906()); + Do907(new T907()); + Do908(new T908()); + Do909(new T909()); + Do910(new T910()); + Do911(new T911()); + Do912(new T912()); + Do913(new T913()); + Do914(new T914()); + Do915(new T915()); + Do916(new T916()); + Do917(new T917()); + Do918(new T918()); + Do919(new T919()); + Do920(new T920()); + Do921(new T921()); + Do922(new T922()); + Do923(new T923()); + Do924(new T924()); + Do925(new T925()); + Do926(new T926()); + Do927(new T927()); + Do928(new T928()); + Do929(new T929()); + Do930(new T930()); + Do931(new T931()); + Do932(new T932()); + Do933(new T933()); + Do934(new T934()); + Do935(new T935()); + Do936(new T936()); + Do937(new T937()); + Do938(new T938()); + Do939(new T939()); + Do940(new T940()); + Do941(new T941()); + Do942(new T942()); + Do943(new T943()); + Do944(new T944()); + Do945(new T945()); + Do946(new T946()); + Do947(new T947()); + Do948(new T948()); + Do949(new T949()); + Do950(new T950()); + Do951(new T951()); + Do952(new T952()); + Do953(new T953()); + Do954(new T954()); + Do955(new T955()); + Do956(new T956()); + Do957(new T957()); + Do958(new T958()); + Do959(new T959()); + Do960(new T960()); + Do961(new T961()); + Do962(new T962()); + Do963(new T963()); + Do964(new T964()); + Do965(new T965()); + Do966(new T966()); + Do967(new T967()); + Do968(new T968()); + Do969(new T969()); + Do970(new T970()); + Do971(new T971()); + Do972(new T972()); + Do973(new T973()); + Do974(new T974()); + Do975(new T975()); + Do976(new T976()); + Do977(new T977()); + Do978(new T978()); + Do979(new T979()); + Do980(new T980()); + Do981(new T981()); + Do982(new T982()); + Do983(new T983()); + Do984(new T984()); + Do985(new T985()); + Do986(new T986()); + Do987(new T987()); + Do988(new T988()); + Do989(new T989()); + Do990(new T990()); + Do991(new T991()); + Do992(new T992()); + Do993(new T993()); + Do994(new T994()); + Do995(new T995()); + Do996(new T996()); + Do997(new T997()); + Do998(new T998()); + Do999(new T999()); + + Console.WriteLine("PASS"); + return 100; + } + catch (TypeLoadException e) + { + Console.WriteLine("FAIL: Caught unexpected TypeLoadException" + e.Message); + return 101; + } + catch (Exception e) + { + Console.WriteLine("FAIL: Caught unexpected exception:" + e.Message); + return 101; + } + + + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do0(T0 t) { + Nullable<T0> n = new Nullable<T0>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do1(T1 t) { + Nullable<T1> n = new Nullable<T1>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do2(T2 t) { + Nullable<T2> n = new Nullable<T2>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do3(T3 t) { + Nullable<T3> n = new Nullable<T3>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do4(T4 t) { + Nullable<T4> n = new Nullable<T4>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do5(T5 t) { + Nullable<T5> n = new Nullable<T5>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do6(T6 t) { + Nullable<T6> n = new Nullable<T6>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do7(T7 t) { + Nullable<T7> n = new Nullable<T7>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do8(T8 t) { + Nullable<T8> n = new Nullable<T8>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do9(T9 t) { + Nullable<T9> n = new Nullable<T9>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do10(T10 t) { + Nullable<T10> n = new Nullable<T10>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do11(T11 t) { + Nullable<T11> n = new Nullable<T11>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do12(T12 t) { + Nullable<T12> n = new Nullable<T12>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do13(T13 t) { + Nullable<T13> n = new Nullable<T13>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do14(T14 t) { + Nullable<T14> n = new Nullable<T14>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do15(T15 t) { + Nullable<T15> n = new Nullable<T15>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do16(T16 t) { + Nullable<T16> n = new Nullable<T16>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do17(T17 t) { + Nullable<T17> n = new Nullable<T17>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do18(T18 t) { + Nullable<T18> n = new Nullable<T18>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do19(T19 t) { + Nullable<T19> n = new Nullable<T19>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do20(T20 t) { + Nullable<T20> n = new Nullable<T20>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do21(T21 t) { + Nullable<T21> n = new Nullable<T21>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do22(T22 t) { + Nullable<T22> n = new Nullable<T22>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do23(T23 t) { + Nullable<T23> n = new Nullable<T23>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do24(T24 t) { + Nullable<T24> n = new Nullable<T24>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do25(T25 t) { + Nullable<T25> n = new Nullable<T25>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do26(T26 t) { + Nullable<T26> n = new Nullable<T26>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do27(T27 t) { + Nullable<T27> n = new Nullable<T27>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do28(T28 t) { + Nullable<T28> n = new Nullable<T28>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do29(T29 t) { + Nullable<T29> n = new Nullable<T29>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do30(T30 t) { + Nullable<T30> n = new Nullable<T30>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do31(T31 t) { + Nullable<T31> n = new Nullable<T31>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do32(T32 t) { + Nullable<T32> n = new Nullable<T32>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do33(T33 t) { + Nullable<T33> n = new Nullable<T33>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do34(T34 t) { + Nullable<T34> n = new Nullable<T34>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do35(T35 t) { + Nullable<T35> n = new Nullable<T35>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do36(T36 t) { + Nullable<T36> n = new Nullable<T36>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do37(T37 t) { + Nullable<T37> n = new Nullable<T37>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do38(T38 t) { + Nullable<T38> n = new Nullable<T38>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do39(T39 t) { + Nullable<T39> n = new Nullable<T39>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do40(T40 t) { + Nullable<T40> n = new Nullable<T40>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do41(T41 t) { + Nullable<T41> n = new Nullable<T41>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do42(T42 t) { + Nullable<T42> n = new Nullable<T42>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do43(T43 t) { + Nullable<T43> n = new Nullable<T43>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do44(T44 t) { + Nullable<T44> n = new Nullable<T44>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do45(T45 t) { + Nullable<T45> n = new Nullable<T45>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do46(T46 t) { + Nullable<T46> n = new Nullable<T46>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do47(T47 t) { + Nullable<T47> n = new Nullable<T47>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do48(T48 t) { + Nullable<T48> n = new Nullable<T48>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do49(T49 t) { + Nullable<T49> n = new Nullable<T49>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do50(T50 t) { + Nullable<T50> n = new Nullable<T50>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do51(T51 t) { + Nullable<T51> n = new Nullable<T51>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do52(T52 t) { + Nullable<T52> n = new Nullable<T52>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do53(T53 t) { + Nullable<T53> n = new Nullable<T53>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do54(T54 t) { + Nullable<T54> n = new Nullable<T54>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do55(T55 t) { + Nullable<T55> n = new Nullable<T55>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do56(T56 t) { + Nullable<T56> n = new Nullable<T56>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do57(T57 t) { + Nullable<T57> n = new Nullable<T57>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do58(T58 t) { + Nullable<T58> n = new Nullable<T58>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do59(T59 t) { + Nullable<T59> n = new Nullable<T59>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do60(T60 t) { + Nullable<T60> n = new Nullable<T60>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do61(T61 t) { + Nullable<T61> n = new Nullable<T61>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do62(T62 t) { + Nullable<T62> n = new Nullable<T62>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do63(T63 t) { + Nullable<T63> n = new Nullable<T63>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do64(T64 t) { + Nullable<T64> n = new Nullable<T64>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do65(T65 t) { + Nullable<T65> n = new Nullable<T65>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do66(T66 t) { + Nullable<T66> n = new Nullable<T66>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do67(T67 t) { + Nullable<T67> n = new Nullable<T67>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do68(T68 t) { + Nullable<T68> n = new Nullable<T68>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do69(T69 t) { + Nullable<T69> n = new Nullable<T69>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do70(T70 t) { + Nullable<T70> n = new Nullable<T70>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do71(T71 t) { + Nullable<T71> n = new Nullable<T71>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do72(T72 t) { + Nullable<T72> n = new Nullable<T72>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do73(T73 t) { + Nullable<T73> n = new Nullable<T73>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do74(T74 t) { + Nullable<T74> n = new Nullable<T74>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do75(T75 t) { + Nullable<T75> n = new Nullable<T75>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do76(T76 t) { + Nullable<T76> n = new Nullable<T76>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do77(T77 t) { + Nullable<T77> n = new Nullable<T77>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do78(T78 t) { + Nullable<T78> n = new Nullable<T78>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do79(T79 t) { + Nullable<T79> n = new Nullable<T79>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do80(T80 t) { + Nullable<T80> n = new Nullable<T80>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do81(T81 t) { + Nullable<T81> n = new Nullable<T81>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do82(T82 t) { + Nullable<T82> n = new Nullable<T82>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do83(T83 t) { + Nullable<T83> n = new Nullable<T83>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do84(T84 t) { + Nullable<T84> n = new Nullable<T84>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do85(T85 t) { + Nullable<T85> n = new Nullable<T85>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do86(T86 t) { + Nullable<T86> n = new Nullable<T86>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do87(T87 t) { + Nullable<T87> n = new Nullable<T87>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do88(T88 t) { + Nullable<T88> n = new Nullable<T88>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do89(T89 t) { + Nullable<T89> n = new Nullable<T89>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do90(T90 t) { + Nullable<T90> n = new Nullable<T90>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do91(T91 t) { + Nullable<T91> n = new Nullable<T91>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do92(T92 t) { + Nullable<T92> n = new Nullable<T92>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do93(T93 t) { + Nullable<T93> n = new Nullable<T93>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do94(T94 t) { + Nullable<T94> n = new Nullable<T94>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do95(T95 t) { + Nullable<T95> n = new Nullable<T95>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do96(T96 t) { + Nullable<T96> n = new Nullable<T96>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do97(T97 t) { + Nullable<T97> n = new Nullable<T97>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do98(T98 t) { + Nullable<T98> n = new Nullable<T98>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do99(T99 t) { + Nullable<T99> n = new Nullable<T99>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do100(T100 t) { + Nullable<T100> n = new Nullable<T100>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do101(T101 t) { + Nullable<T101> n = new Nullable<T101>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do102(T102 t) { + Nullable<T102> n = new Nullable<T102>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do103(T103 t) { + Nullable<T103> n = new Nullable<T103>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do104(T104 t) { + Nullable<T104> n = new Nullable<T104>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do105(T105 t) { + Nullable<T105> n = new Nullable<T105>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do106(T106 t) { + Nullable<T106> n = new Nullable<T106>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do107(T107 t) { + Nullable<T107> n = new Nullable<T107>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do108(T108 t) { + Nullable<T108> n = new Nullable<T108>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do109(T109 t) { + Nullable<T109> n = new Nullable<T109>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do110(T110 t) { + Nullable<T110> n = new Nullable<T110>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do111(T111 t) { + Nullable<T111> n = new Nullable<T111>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do112(T112 t) { + Nullable<T112> n = new Nullable<T112>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do113(T113 t) { + Nullable<T113> n = new Nullable<T113>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do114(T114 t) { + Nullable<T114> n = new Nullable<T114>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do115(T115 t) { + Nullable<T115> n = new Nullable<T115>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do116(T116 t) { + Nullable<T116> n = new Nullable<T116>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do117(T117 t) { + Nullable<T117> n = new Nullable<T117>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do118(T118 t) { + Nullable<T118> n = new Nullable<T118>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do119(T119 t) { + Nullable<T119> n = new Nullable<T119>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do120(T120 t) { + Nullable<T120> n = new Nullable<T120>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do121(T121 t) { + Nullable<T121> n = new Nullable<T121>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do122(T122 t) { + Nullable<T122> n = new Nullable<T122>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do123(T123 t) { + Nullable<T123> n = new Nullable<T123>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do124(T124 t) { + Nullable<T124> n = new Nullable<T124>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do125(T125 t) { + Nullable<T125> n = new Nullable<T125>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do126(T126 t) { + Nullable<T126> n = new Nullable<T126>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do127(T127 t) { + Nullable<T127> n = new Nullable<T127>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do128(T128 t) { + Nullable<T128> n = new Nullable<T128>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do129(T129 t) { + Nullable<T129> n = new Nullable<T129>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do130(T130 t) { + Nullable<T130> n = new Nullable<T130>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do131(T131 t) { + Nullable<T131> n = new Nullable<T131>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do132(T132 t) { + Nullable<T132> n = new Nullable<T132>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do133(T133 t) { + Nullable<T133> n = new Nullable<T133>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do134(T134 t) { + Nullable<T134> n = new Nullable<T134>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do135(T135 t) { + Nullable<T135> n = new Nullable<T135>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do136(T136 t) { + Nullable<T136> n = new Nullable<T136>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do137(T137 t) { + Nullable<T137> n = new Nullable<T137>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do138(T138 t) { + Nullable<T138> n = new Nullable<T138>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do139(T139 t) { + Nullable<T139> n = new Nullable<T139>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do140(T140 t) { + Nullable<T140> n = new Nullable<T140>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do141(T141 t) { + Nullable<T141> n = new Nullable<T141>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do142(T142 t) { + Nullable<T142> n = new Nullable<T142>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do143(T143 t) { + Nullable<T143> n = new Nullable<T143>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do144(T144 t) { + Nullable<T144> n = new Nullable<T144>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do145(T145 t) { + Nullable<T145> n = new Nullable<T145>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do146(T146 t) { + Nullable<T146> n = new Nullable<T146>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do147(T147 t) { + Nullable<T147> n = new Nullable<T147>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do148(T148 t) { + Nullable<T148> n = new Nullable<T148>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do149(T149 t) { + Nullable<T149> n = new Nullable<T149>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do150(T150 t) { + Nullable<T150> n = new Nullable<T150>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do151(T151 t) { + Nullable<T151> n = new Nullable<T151>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do152(T152 t) { + Nullable<T152> n = new Nullable<T152>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do153(T153 t) { + Nullable<T153> n = new Nullable<T153>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do154(T154 t) { + Nullable<T154> n = new Nullable<T154>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do155(T155 t) { + Nullable<T155> n = new Nullable<T155>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do156(T156 t) { + Nullable<T156> n = new Nullable<T156>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do157(T157 t) { + Nullable<T157> n = new Nullable<T157>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do158(T158 t) { + Nullable<T158> n = new Nullable<T158>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do159(T159 t) { + Nullable<T159> n = new Nullable<T159>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do160(T160 t) { + Nullable<T160> n = new Nullable<T160>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do161(T161 t) { + Nullable<T161> n = new Nullable<T161>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do162(T162 t) { + Nullable<T162> n = new Nullable<T162>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do163(T163 t) { + Nullable<T163> n = new Nullable<T163>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do164(T164 t) { + Nullable<T164> n = new Nullable<T164>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do165(T165 t) { + Nullable<T165> n = new Nullable<T165>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do166(T166 t) { + Nullable<T166> n = new Nullable<T166>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do167(T167 t) { + Nullable<T167> n = new Nullable<T167>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do168(T168 t) { + Nullable<T168> n = new Nullable<T168>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do169(T169 t) { + Nullable<T169> n = new Nullable<T169>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do170(T170 t) { + Nullable<T170> n = new Nullable<T170>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do171(T171 t) { + Nullable<T171> n = new Nullable<T171>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do172(T172 t) { + Nullable<T172> n = new Nullable<T172>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do173(T173 t) { + Nullable<T173> n = new Nullable<T173>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do174(T174 t) { + Nullable<T174> n = new Nullable<T174>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do175(T175 t) { + Nullable<T175> n = new Nullable<T175>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do176(T176 t) { + Nullable<T176> n = new Nullable<T176>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do177(T177 t) { + Nullable<T177> n = new Nullable<T177>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do178(T178 t) { + Nullable<T178> n = new Nullable<T178>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do179(T179 t) { + Nullable<T179> n = new Nullable<T179>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do180(T180 t) { + Nullable<T180> n = new Nullable<T180>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do181(T181 t) { + Nullable<T181> n = new Nullable<T181>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do182(T182 t) { + Nullable<T182> n = new Nullable<T182>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do183(T183 t) { + Nullable<T183> n = new Nullable<T183>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do184(T184 t) { + Nullable<T184> n = new Nullable<T184>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do185(T185 t) { + Nullable<T185> n = new Nullable<T185>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do186(T186 t) { + Nullable<T186> n = new Nullable<T186>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do187(T187 t) { + Nullable<T187> n = new Nullable<T187>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do188(T188 t) { + Nullable<T188> n = new Nullable<T188>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do189(T189 t) { + Nullable<T189> n = new Nullable<T189>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do190(T190 t) { + Nullable<T190> n = new Nullable<T190>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do191(T191 t) { + Nullable<T191> n = new Nullable<T191>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do192(T192 t) { + Nullable<T192> n = new Nullable<T192>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do193(T193 t) { + Nullable<T193> n = new Nullable<T193>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do194(T194 t) { + Nullable<T194> n = new Nullable<T194>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do195(T195 t) { + Nullable<T195> n = new Nullable<T195>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do196(T196 t) { + Nullable<T196> n = new Nullable<T196>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do197(T197 t) { + Nullable<T197> n = new Nullable<T197>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do198(T198 t) { + Nullable<T198> n = new Nullable<T198>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do199(T199 t) { + Nullable<T199> n = new Nullable<T199>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do200(T200 t) { + Nullable<T200> n = new Nullable<T200>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do201(T201 t) { + Nullable<T201> n = new Nullable<T201>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do202(T202 t) { + Nullable<T202> n = new Nullable<T202>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do203(T203 t) { + Nullable<T203> n = new Nullable<T203>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do204(T204 t) { + Nullable<T204> n = new Nullable<T204>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do205(T205 t) { + Nullable<T205> n = new Nullable<T205>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do206(T206 t) { + Nullable<T206> n = new Nullable<T206>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do207(T207 t) { + Nullable<T207> n = new Nullable<T207>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do208(T208 t) { + Nullable<T208> n = new Nullable<T208>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do209(T209 t) { + Nullable<T209> n = new Nullable<T209>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do210(T210 t) { + Nullable<T210> n = new Nullable<T210>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do211(T211 t) { + Nullable<T211> n = new Nullable<T211>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do212(T212 t) { + Nullable<T212> n = new Nullable<T212>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do213(T213 t) { + Nullable<T213> n = new Nullable<T213>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do214(T214 t) { + Nullable<T214> n = new Nullable<T214>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do215(T215 t) { + Nullable<T215> n = new Nullable<T215>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do216(T216 t) { + Nullable<T216> n = new Nullable<T216>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do217(T217 t) { + Nullable<T217> n = new Nullable<T217>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do218(T218 t) { + Nullable<T218> n = new Nullable<T218>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do219(T219 t) { + Nullable<T219> n = new Nullable<T219>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do220(T220 t) { + Nullable<T220> n = new Nullable<T220>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do221(T221 t) { + Nullable<T221> n = new Nullable<T221>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do222(T222 t) { + Nullable<T222> n = new Nullable<T222>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do223(T223 t) { + Nullable<T223> n = new Nullable<T223>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do224(T224 t) { + Nullable<T224> n = new Nullable<T224>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do225(T225 t) { + Nullable<T225> n = new Nullable<T225>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do226(T226 t) { + Nullable<T226> n = new Nullable<T226>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do227(T227 t) { + Nullable<T227> n = new Nullable<T227>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do228(T228 t) { + Nullable<T228> n = new Nullable<T228>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do229(T229 t) { + Nullable<T229> n = new Nullable<T229>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do230(T230 t) { + Nullable<T230> n = new Nullable<T230>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do231(T231 t) { + Nullable<T231> n = new Nullable<T231>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do232(T232 t) { + Nullable<T232> n = new Nullable<T232>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do233(T233 t) { + Nullable<T233> n = new Nullable<T233>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do234(T234 t) { + Nullable<T234> n = new Nullable<T234>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do235(T235 t) { + Nullable<T235> n = new Nullable<T235>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do236(T236 t) { + Nullable<T236> n = new Nullable<T236>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do237(T237 t) { + Nullable<T237> n = new Nullable<T237>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do238(T238 t) { + Nullable<T238> n = new Nullable<T238>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do239(T239 t) { + Nullable<T239> n = new Nullable<T239>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do240(T240 t) { + Nullable<T240> n = new Nullable<T240>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do241(T241 t) { + Nullable<T241> n = new Nullable<T241>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do242(T242 t) { + Nullable<T242> n = new Nullable<T242>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do243(T243 t) { + Nullable<T243> n = new Nullable<T243>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do244(T244 t) { + Nullable<T244> n = new Nullable<T244>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do245(T245 t) { + Nullable<T245> n = new Nullable<T245>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do246(T246 t) { + Nullable<T246> n = new Nullable<T246>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do247(T247 t) { + Nullable<T247> n = new Nullable<T247>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do248(T248 t) { + Nullable<T248> n = new Nullable<T248>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do249(T249 t) { + Nullable<T249> n = new Nullable<T249>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do250(T250 t) { + Nullable<T250> n = new Nullable<T250>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do251(T251 t) { + Nullable<T251> n = new Nullable<T251>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do252(T252 t) { + Nullable<T252> n = new Nullable<T252>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do253(T253 t) { + Nullable<T253> n = new Nullable<T253>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do254(T254 t) { + Nullable<T254> n = new Nullable<T254>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do255(T255 t) { + Nullable<T255> n = new Nullable<T255>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do256(T256 t) { + Nullable<T256> n = new Nullable<T256>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do257(T257 t) { + Nullable<T257> n = new Nullable<T257>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do258(T258 t) { + Nullable<T258> n = new Nullable<T258>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do259(T259 t) { + Nullable<T259> n = new Nullable<T259>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do260(T260 t) { + Nullable<T260> n = new Nullable<T260>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do261(T261 t) { + Nullable<T261> n = new Nullable<T261>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do262(T262 t) { + Nullable<T262> n = new Nullable<T262>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do263(T263 t) { + Nullable<T263> n = new Nullable<T263>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do264(T264 t) { + Nullable<T264> n = new Nullable<T264>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do265(T265 t) { + Nullable<T265> n = new Nullable<T265>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do266(T266 t) { + Nullable<T266> n = new Nullable<T266>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do267(T267 t) { + Nullable<T267> n = new Nullable<T267>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do268(T268 t) { + Nullable<T268> n = new Nullable<T268>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do269(T269 t) { + Nullable<T269> n = new Nullable<T269>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do270(T270 t) { + Nullable<T270> n = new Nullable<T270>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do271(T271 t) { + Nullable<T271> n = new Nullable<T271>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do272(T272 t) { + Nullable<T272> n = new Nullable<T272>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do273(T273 t) { + Nullable<T273> n = new Nullable<T273>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do274(T274 t) { + Nullable<T274> n = new Nullable<T274>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do275(T275 t) { + Nullable<T275> n = new Nullable<T275>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do276(T276 t) { + Nullable<T276> n = new Nullable<T276>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do277(T277 t) { + Nullable<T277> n = new Nullable<T277>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do278(T278 t) { + Nullable<T278> n = new Nullable<T278>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do279(T279 t) { + Nullable<T279> n = new Nullable<T279>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do280(T280 t) { + Nullable<T280> n = new Nullable<T280>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do281(T281 t) { + Nullable<T281> n = new Nullable<T281>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do282(T282 t) { + Nullable<T282> n = new Nullable<T282>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do283(T283 t) { + Nullable<T283> n = new Nullable<T283>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do284(T284 t) { + Nullable<T284> n = new Nullable<T284>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do285(T285 t) { + Nullable<T285> n = new Nullable<T285>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do286(T286 t) { + Nullable<T286> n = new Nullable<T286>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do287(T287 t) { + Nullable<T287> n = new Nullable<T287>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do288(T288 t) { + Nullable<T288> n = new Nullable<T288>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do289(T289 t) { + Nullable<T289> n = new Nullable<T289>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do290(T290 t) { + Nullable<T290> n = new Nullable<T290>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do291(T291 t) { + Nullable<T291> n = new Nullable<T291>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do292(T292 t) { + Nullable<T292> n = new Nullable<T292>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do293(T293 t) { + Nullable<T293> n = new Nullable<T293>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do294(T294 t) { + Nullable<T294> n = new Nullable<T294>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do295(T295 t) { + Nullable<T295> n = new Nullable<T295>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do296(T296 t) { + Nullable<T296> n = new Nullable<T296>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do297(T297 t) { + Nullable<T297> n = new Nullable<T297>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do298(T298 t) { + Nullable<T298> n = new Nullable<T298>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do299(T299 t) { + Nullable<T299> n = new Nullable<T299>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do300(T300 t) { + Nullable<T300> n = new Nullable<T300>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do301(T301 t) { + Nullable<T301> n = new Nullable<T301>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do302(T302 t) { + Nullable<T302> n = new Nullable<T302>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do303(T303 t) { + Nullable<T303> n = new Nullable<T303>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do304(T304 t) { + Nullable<T304> n = new Nullable<T304>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do305(T305 t) { + Nullable<T305> n = new Nullable<T305>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do306(T306 t) { + Nullable<T306> n = new Nullable<T306>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do307(T307 t) { + Nullable<T307> n = new Nullable<T307>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do308(T308 t) { + Nullable<T308> n = new Nullable<T308>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do309(T309 t) { + Nullable<T309> n = new Nullable<T309>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do310(T310 t) { + Nullable<T310> n = new Nullable<T310>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do311(T311 t) { + Nullable<T311> n = new Nullable<T311>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do312(T312 t) { + Nullable<T312> n = new Nullable<T312>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do313(T313 t) { + Nullable<T313> n = new Nullable<T313>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do314(T314 t) { + Nullable<T314> n = new Nullable<T314>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do315(T315 t) { + Nullable<T315> n = new Nullable<T315>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do316(T316 t) { + Nullable<T316> n = new Nullable<T316>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do317(T317 t) { + Nullable<T317> n = new Nullable<T317>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do318(T318 t) { + Nullable<T318> n = new Nullable<T318>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do319(T319 t) { + Nullable<T319> n = new Nullable<T319>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do320(T320 t) { + Nullable<T320> n = new Nullable<T320>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do321(T321 t) { + Nullable<T321> n = new Nullable<T321>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do322(T322 t) { + Nullable<T322> n = new Nullable<T322>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do323(T323 t) { + Nullable<T323> n = new Nullable<T323>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do324(T324 t) { + Nullable<T324> n = new Nullable<T324>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do325(T325 t) { + Nullable<T325> n = new Nullable<T325>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do326(T326 t) { + Nullable<T326> n = new Nullable<T326>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do327(T327 t) { + Nullable<T327> n = new Nullable<T327>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do328(T328 t) { + Nullable<T328> n = new Nullable<T328>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do329(T329 t) { + Nullable<T329> n = new Nullable<T329>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do330(T330 t) { + Nullable<T330> n = new Nullable<T330>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do331(T331 t) { + Nullable<T331> n = new Nullable<T331>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do332(T332 t) { + Nullable<T332> n = new Nullable<T332>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do333(T333 t) { + Nullable<T333> n = new Nullable<T333>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do334(T334 t) { + Nullable<T334> n = new Nullable<T334>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do335(T335 t) { + Nullable<T335> n = new Nullable<T335>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do336(T336 t) { + Nullable<T336> n = new Nullable<T336>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do337(T337 t) { + Nullable<T337> n = new Nullable<T337>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do338(T338 t) { + Nullable<T338> n = new Nullable<T338>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do339(T339 t) { + Nullable<T339> n = new Nullable<T339>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do340(T340 t) { + Nullable<T340> n = new Nullable<T340>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do341(T341 t) { + Nullable<T341> n = new Nullable<T341>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do342(T342 t) { + Nullable<T342> n = new Nullable<T342>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do343(T343 t) { + Nullable<T343> n = new Nullable<T343>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do344(T344 t) { + Nullable<T344> n = new Nullable<T344>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do345(T345 t) { + Nullable<T345> n = new Nullable<T345>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do346(T346 t) { + Nullable<T346> n = new Nullable<T346>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do347(T347 t) { + Nullable<T347> n = new Nullable<T347>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do348(T348 t) { + Nullable<T348> n = new Nullable<T348>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do349(T349 t) { + Nullable<T349> n = new Nullable<T349>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do350(T350 t) { + Nullable<T350> n = new Nullable<T350>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do351(T351 t) { + Nullable<T351> n = new Nullable<T351>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do352(T352 t) { + Nullable<T352> n = new Nullable<T352>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do353(T353 t) { + Nullable<T353> n = new Nullable<T353>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do354(T354 t) { + Nullable<T354> n = new Nullable<T354>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do355(T355 t) { + Nullable<T355> n = new Nullable<T355>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do356(T356 t) { + Nullable<T356> n = new Nullable<T356>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do357(T357 t) { + Nullable<T357> n = new Nullable<T357>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do358(T358 t) { + Nullable<T358> n = new Nullable<T358>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do359(T359 t) { + Nullable<T359> n = new Nullable<T359>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do360(T360 t) { + Nullable<T360> n = new Nullable<T360>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do361(T361 t) { + Nullable<T361> n = new Nullable<T361>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do362(T362 t) { + Nullable<T362> n = new Nullable<T362>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do363(T363 t) { + Nullable<T363> n = new Nullable<T363>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do364(T364 t) { + Nullable<T364> n = new Nullable<T364>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do365(T365 t) { + Nullable<T365> n = new Nullable<T365>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do366(T366 t) { + Nullable<T366> n = new Nullable<T366>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do367(T367 t) { + Nullable<T367> n = new Nullable<T367>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do368(T368 t) { + Nullable<T368> n = new Nullable<T368>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do369(T369 t) { + Nullable<T369> n = new Nullable<T369>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do370(T370 t) { + Nullable<T370> n = new Nullable<T370>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do371(T371 t) { + Nullable<T371> n = new Nullable<T371>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do372(T372 t) { + Nullable<T372> n = new Nullable<T372>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do373(T373 t) { + Nullable<T373> n = new Nullable<T373>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do374(T374 t) { + Nullable<T374> n = new Nullable<T374>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do375(T375 t) { + Nullable<T375> n = new Nullable<T375>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do376(T376 t) { + Nullable<T376> n = new Nullable<T376>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do377(T377 t) { + Nullable<T377> n = new Nullable<T377>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do378(T378 t) { + Nullable<T378> n = new Nullable<T378>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do379(T379 t) { + Nullable<T379> n = new Nullable<T379>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do380(T380 t) { + Nullable<T380> n = new Nullable<T380>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do381(T381 t) { + Nullable<T381> n = new Nullable<T381>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do382(T382 t) { + Nullable<T382> n = new Nullable<T382>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do383(T383 t) { + Nullable<T383> n = new Nullable<T383>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do384(T384 t) { + Nullable<T384> n = new Nullable<T384>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do385(T385 t) { + Nullable<T385> n = new Nullable<T385>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do386(T386 t) { + Nullable<T386> n = new Nullable<T386>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do387(T387 t) { + Nullable<T387> n = new Nullable<T387>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do388(T388 t) { + Nullable<T388> n = new Nullable<T388>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do389(T389 t) { + Nullable<T389> n = new Nullable<T389>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do390(T390 t) { + Nullable<T390> n = new Nullable<T390>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do391(T391 t) { + Nullable<T391> n = new Nullable<T391>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do392(T392 t) { + Nullable<T392> n = new Nullable<T392>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do393(T393 t) { + Nullable<T393> n = new Nullable<T393>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do394(T394 t) { + Nullable<T394> n = new Nullable<T394>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do395(T395 t) { + Nullable<T395> n = new Nullable<T395>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do396(T396 t) { + Nullable<T396> n = new Nullable<T396>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do397(T397 t) { + Nullable<T397> n = new Nullable<T397>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do398(T398 t) { + Nullable<T398> n = new Nullable<T398>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do399(T399 t) { + Nullable<T399> n = new Nullable<T399>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do400(T400 t) { + Nullable<T400> n = new Nullable<T400>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do401(T401 t) { + Nullable<T401> n = new Nullable<T401>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do402(T402 t) { + Nullable<T402> n = new Nullable<T402>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do403(T403 t) { + Nullable<T403> n = new Nullable<T403>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do404(T404 t) { + Nullable<T404> n = new Nullable<T404>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do405(T405 t) { + Nullable<T405> n = new Nullable<T405>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do406(T406 t) { + Nullable<T406> n = new Nullable<T406>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do407(T407 t) { + Nullable<T407> n = new Nullable<T407>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do408(T408 t) { + Nullable<T408> n = new Nullable<T408>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do409(T409 t) { + Nullable<T409> n = new Nullable<T409>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do410(T410 t) { + Nullable<T410> n = new Nullable<T410>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do411(T411 t) { + Nullable<T411> n = new Nullable<T411>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do412(T412 t) { + Nullable<T412> n = new Nullable<T412>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do413(T413 t) { + Nullable<T413> n = new Nullable<T413>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do414(T414 t) { + Nullable<T414> n = new Nullable<T414>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do415(T415 t) { + Nullable<T415> n = new Nullable<T415>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do416(T416 t) { + Nullable<T416> n = new Nullable<T416>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do417(T417 t) { + Nullable<T417> n = new Nullable<T417>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do418(T418 t) { + Nullable<T418> n = new Nullable<T418>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do419(T419 t) { + Nullable<T419> n = new Nullable<T419>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do420(T420 t) { + Nullable<T420> n = new Nullable<T420>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do421(T421 t) { + Nullable<T421> n = new Nullable<T421>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do422(T422 t) { + Nullable<T422> n = new Nullable<T422>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do423(T423 t) { + Nullable<T423> n = new Nullable<T423>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do424(T424 t) { + Nullable<T424> n = new Nullable<T424>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do425(T425 t) { + Nullable<T425> n = new Nullable<T425>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do426(T426 t) { + Nullable<T426> n = new Nullable<T426>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do427(T427 t) { + Nullable<T427> n = new Nullable<T427>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do428(T428 t) { + Nullable<T428> n = new Nullable<T428>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do429(T429 t) { + Nullable<T429> n = new Nullable<T429>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do430(T430 t) { + Nullable<T430> n = new Nullable<T430>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do431(T431 t) { + Nullable<T431> n = new Nullable<T431>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do432(T432 t) { + Nullable<T432> n = new Nullable<T432>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do433(T433 t) { + Nullable<T433> n = new Nullable<T433>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do434(T434 t) { + Nullable<T434> n = new Nullable<T434>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do435(T435 t) { + Nullable<T435> n = new Nullable<T435>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do436(T436 t) { + Nullable<T436> n = new Nullable<T436>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do437(T437 t) { + Nullable<T437> n = new Nullable<T437>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do438(T438 t) { + Nullable<T438> n = new Nullable<T438>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do439(T439 t) { + Nullable<T439> n = new Nullable<T439>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do440(T440 t) { + Nullable<T440> n = new Nullable<T440>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do441(T441 t) { + Nullable<T441> n = new Nullable<T441>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do442(T442 t) { + Nullable<T442> n = new Nullable<T442>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do443(T443 t) { + Nullable<T443> n = new Nullable<T443>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do444(T444 t) { + Nullable<T444> n = new Nullable<T444>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do445(T445 t) { + Nullable<T445> n = new Nullable<T445>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do446(T446 t) { + Nullable<T446> n = new Nullable<T446>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do447(T447 t) { + Nullable<T447> n = new Nullable<T447>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do448(T448 t) { + Nullable<T448> n = new Nullable<T448>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do449(T449 t) { + Nullable<T449> n = new Nullable<T449>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do450(T450 t) { + Nullable<T450> n = new Nullable<T450>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do451(T451 t) { + Nullable<T451> n = new Nullable<T451>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do452(T452 t) { + Nullable<T452> n = new Nullable<T452>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do453(T453 t) { + Nullable<T453> n = new Nullable<T453>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do454(T454 t) { + Nullable<T454> n = new Nullable<T454>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do455(T455 t) { + Nullable<T455> n = new Nullable<T455>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do456(T456 t) { + Nullable<T456> n = new Nullable<T456>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do457(T457 t) { + Nullable<T457> n = new Nullable<T457>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do458(T458 t) { + Nullable<T458> n = new Nullable<T458>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do459(T459 t) { + Nullable<T459> n = new Nullable<T459>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do460(T460 t) { + Nullable<T460> n = new Nullable<T460>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do461(T461 t) { + Nullable<T461> n = new Nullable<T461>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do462(T462 t) { + Nullable<T462> n = new Nullable<T462>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do463(T463 t) { + Nullable<T463> n = new Nullable<T463>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do464(T464 t) { + Nullable<T464> n = new Nullable<T464>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do465(T465 t) { + Nullable<T465> n = new Nullable<T465>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do466(T466 t) { + Nullable<T466> n = new Nullable<T466>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do467(T467 t) { + Nullable<T467> n = new Nullable<T467>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do468(T468 t) { + Nullable<T468> n = new Nullable<T468>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do469(T469 t) { + Nullable<T469> n = new Nullable<T469>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do470(T470 t) { + Nullable<T470> n = new Nullable<T470>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do471(T471 t) { + Nullable<T471> n = new Nullable<T471>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do472(T472 t) { + Nullable<T472> n = new Nullable<T472>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do473(T473 t) { + Nullable<T473> n = new Nullable<T473>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do474(T474 t) { + Nullable<T474> n = new Nullable<T474>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do475(T475 t) { + Nullable<T475> n = new Nullable<T475>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do476(T476 t) { + Nullable<T476> n = new Nullable<T476>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do477(T477 t) { + Nullable<T477> n = new Nullable<T477>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do478(T478 t) { + Nullable<T478> n = new Nullable<T478>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do479(T479 t) { + Nullable<T479> n = new Nullable<T479>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do480(T480 t) { + Nullable<T480> n = new Nullable<T480>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do481(T481 t) { + Nullable<T481> n = new Nullable<T481>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do482(T482 t) { + Nullable<T482> n = new Nullable<T482>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do483(T483 t) { + Nullable<T483> n = new Nullable<T483>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do484(T484 t) { + Nullable<T484> n = new Nullable<T484>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do485(T485 t) { + Nullable<T485> n = new Nullable<T485>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do486(T486 t) { + Nullable<T486> n = new Nullable<T486>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do487(T487 t) { + Nullable<T487> n = new Nullable<T487>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do488(T488 t) { + Nullable<T488> n = new Nullable<T488>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do489(T489 t) { + Nullable<T489> n = new Nullable<T489>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do490(T490 t) { + Nullable<T490> n = new Nullable<T490>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do491(T491 t) { + Nullable<T491> n = new Nullable<T491>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do492(T492 t) { + Nullable<T492> n = new Nullable<T492>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do493(T493 t) { + Nullable<T493> n = new Nullable<T493>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do494(T494 t) { + Nullable<T494> n = new Nullable<T494>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do495(T495 t) { + Nullable<T495> n = new Nullable<T495>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do496(T496 t) { + Nullable<T496> n = new Nullable<T496>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do497(T497 t) { + Nullable<T497> n = new Nullable<T497>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do498(T498 t) { + Nullable<T498> n = new Nullable<T498>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do499(T499 t) { + Nullable<T499> n = new Nullable<T499>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do500(T500 t) { + Nullable<T500> n = new Nullable<T500>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do501(T501 t) { + Nullable<T501> n = new Nullable<T501>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do502(T502 t) { + Nullable<T502> n = new Nullable<T502>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do503(T503 t) { + Nullable<T503> n = new Nullable<T503>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do504(T504 t) { + Nullable<T504> n = new Nullable<T504>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do505(T505 t) { + Nullable<T505> n = new Nullable<T505>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do506(T506 t) { + Nullable<T506> n = new Nullable<T506>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do507(T507 t) { + Nullable<T507> n = new Nullable<T507>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do508(T508 t) { + Nullable<T508> n = new Nullable<T508>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do509(T509 t) { + Nullable<T509> n = new Nullable<T509>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do510(T510 t) { + Nullable<T510> n = new Nullable<T510>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do511(T511 t) { + Nullable<T511> n = new Nullable<T511>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do512(T512 t) { + Nullable<T512> n = new Nullable<T512>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do513(T513 t) { + Nullable<T513> n = new Nullable<T513>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do514(T514 t) { + Nullable<T514> n = new Nullable<T514>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do515(T515 t) { + Nullable<T515> n = new Nullable<T515>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do516(T516 t) { + Nullable<T516> n = new Nullable<T516>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do517(T517 t) { + Nullable<T517> n = new Nullable<T517>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do518(T518 t) { + Nullable<T518> n = new Nullable<T518>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do519(T519 t) { + Nullable<T519> n = new Nullable<T519>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do520(T520 t) { + Nullable<T520> n = new Nullable<T520>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do521(T521 t) { + Nullable<T521> n = new Nullable<T521>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do522(T522 t) { + Nullable<T522> n = new Nullable<T522>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do523(T523 t) { + Nullable<T523> n = new Nullable<T523>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do524(T524 t) { + Nullable<T524> n = new Nullable<T524>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do525(T525 t) { + Nullable<T525> n = new Nullable<T525>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do526(T526 t) { + Nullable<T526> n = new Nullable<T526>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do527(T527 t) { + Nullable<T527> n = new Nullable<T527>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do528(T528 t) { + Nullable<T528> n = new Nullable<T528>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do529(T529 t) { + Nullable<T529> n = new Nullable<T529>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do530(T530 t) { + Nullable<T530> n = new Nullable<T530>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do531(T531 t) { + Nullable<T531> n = new Nullable<T531>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do532(T532 t) { + Nullable<T532> n = new Nullable<T532>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do533(T533 t) { + Nullable<T533> n = new Nullable<T533>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do534(T534 t) { + Nullable<T534> n = new Nullable<T534>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do535(T535 t) { + Nullable<T535> n = new Nullable<T535>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do536(T536 t) { + Nullable<T536> n = new Nullable<T536>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do537(T537 t) { + Nullable<T537> n = new Nullable<T537>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do538(T538 t) { + Nullable<T538> n = new Nullable<T538>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do539(T539 t) { + Nullable<T539> n = new Nullable<T539>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do540(T540 t) { + Nullable<T540> n = new Nullable<T540>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do541(T541 t) { + Nullable<T541> n = new Nullable<T541>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do542(T542 t) { + Nullable<T542> n = new Nullable<T542>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do543(T543 t) { + Nullable<T543> n = new Nullable<T543>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do544(T544 t) { + Nullable<T544> n = new Nullable<T544>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do545(T545 t) { + Nullable<T545> n = new Nullable<T545>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do546(T546 t) { + Nullable<T546> n = new Nullable<T546>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do547(T547 t) { + Nullable<T547> n = new Nullable<T547>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do548(T548 t) { + Nullable<T548> n = new Nullable<T548>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do549(T549 t) { + Nullable<T549> n = new Nullable<T549>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do550(T550 t) { + Nullable<T550> n = new Nullable<T550>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do551(T551 t) { + Nullable<T551> n = new Nullable<T551>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do552(T552 t) { + Nullable<T552> n = new Nullable<T552>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do553(T553 t) { + Nullable<T553> n = new Nullable<T553>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do554(T554 t) { + Nullable<T554> n = new Nullable<T554>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do555(T555 t) { + Nullable<T555> n = new Nullable<T555>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do556(T556 t) { + Nullable<T556> n = new Nullable<T556>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do557(T557 t) { + Nullable<T557> n = new Nullable<T557>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do558(T558 t) { + Nullable<T558> n = new Nullable<T558>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do559(T559 t) { + Nullable<T559> n = new Nullable<T559>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do560(T560 t) { + Nullable<T560> n = new Nullable<T560>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do561(T561 t) { + Nullable<T561> n = new Nullable<T561>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do562(T562 t) { + Nullable<T562> n = new Nullable<T562>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do563(T563 t) { + Nullable<T563> n = new Nullable<T563>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do564(T564 t) { + Nullable<T564> n = new Nullable<T564>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do565(T565 t) { + Nullable<T565> n = new Nullable<T565>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do566(T566 t) { + Nullable<T566> n = new Nullable<T566>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do567(T567 t) { + Nullable<T567> n = new Nullable<T567>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do568(T568 t) { + Nullable<T568> n = new Nullable<T568>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do569(T569 t) { + Nullable<T569> n = new Nullable<T569>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do570(T570 t) { + Nullable<T570> n = new Nullable<T570>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do571(T571 t) { + Nullable<T571> n = new Nullable<T571>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do572(T572 t) { + Nullable<T572> n = new Nullable<T572>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do573(T573 t) { + Nullable<T573> n = new Nullable<T573>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do574(T574 t) { + Nullable<T574> n = new Nullable<T574>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do575(T575 t) { + Nullable<T575> n = new Nullable<T575>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do576(T576 t) { + Nullable<T576> n = new Nullable<T576>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do577(T577 t) { + Nullable<T577> n = new Nullable<T577>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do578(T578 t) { + Nullable<T578> n = new Nullable<T578>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do579(T579 t) { + Nullable<T579> n = new Nullable<T579>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do580(T580 t) { + Nullable<T580> n = new Nullable<T580>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do581(T581 t) { + Nullable<T581> n = new Nullable<T581>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do582(T582 t) { + Nullable<T582> n = new Nullable<T582>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do583(T583 t) { + Nullable<T583> n = new Nullable<T583>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do584(T584 t) { + Nullable<T584> n = new Nullable<T584>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do585(T585 t) { + Nullable<T585> n = new Nullable<T585>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do586(T586 t) { + Nullable<T586> n = new Nullable<T586>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do587(T587 t) { + Nullable<T587> n = new Nullable<T587>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do588(T588 t) { + Nullable<T588> n = new Nullable<T588>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do589(T589 t) { + Nullable<T589> n = new Nullable<T589>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do590(T590 t) { + Nullable<T590> n = new Nullable<T590>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do591(T591 t) { + Nullable<T591> n = new Nullable<T591>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do592(T592 t) { + Nullable<T592> n = new Nullable<T592>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do593(T593 t) { + Nullable<T593> n = new Nullable<T593>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do594(T594 t) { + Nullable<T594> n = new Nullable<T594>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do595(T595 t) { + Nullable<T595> n = new Nullable<T595>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do596(T596 t) { + Nullable<T596> n = new Nullable<T596>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do597(T597 t) { + Nullable<T597> n = new Nullable<T597>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do598(T598 t) { + Nullable<T598> n = new Nullable<T598>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do599(T599 t) { + Nullable<T599> n = new Nullable<T599>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do600(T600 t) { + Nullable<T600> n = new Nullable<T600>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do601(T601 t) { + Nullable<T601> n = new Nullable<T601>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do602(T602 t) { + Nullable<T602> n = new Nullable<T602>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do603(T603 t) { + Nullable<T603> n = new Nullable<T603>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do604(T604 t) { + Nullable<T604> n = new Nullable<T604>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do605(T605 t) { + Nullable<T605> n = new Nullable<T605>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do606(T606 t) { + Nullable<T606> n = new Nullable<T606>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do607(T607 t) { + Nullable<T607> n = new Nullable<T607>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do608(T608 t) { + Nullable<T608> n = new Nullable<T608>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do609(T609 t) { + Nullable<T609> n = new Nullable<T609>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do610(T610 t) { + Nullable<T610> n = new Nullable<T610>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do611(T611 t) { + Nullable<T611> n = new Nullable<T611>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do612(T612 t) { + Nullable<T612> n = new Nullable<T612>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do613(T613 t) { + Nullable<T613> n = new Nullable<T613>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do614(T614 t) { + Nullable<T614> n = new Nullable<T614>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do615(T615 t) { + Nullable<T615> n = new Nullable<T615>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do616(T616 t) { + Nullable<T616> n = new Nullable<T616>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do617(T617 t) { + Nullable<T617> n = new Nullable<T617>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do618(T618 t) { + Nullable<T618> n = new Nullable<T618>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do619(T619 t) { + Nullable<T619> n = new Nullable<T619>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do620(T620 t) { + Nullable<T620> n = new Nullable<T620>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do621(T621 t) { + Nullable<T621> n = new Nullable<T621>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do622(T622 t) { + Nullable<T622> n = new Nullable<T622>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do623(T623 t) { + Nullable<T623> n = new Nullable<T623>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do624(T624 t) { + Nullable<T624> n = new Nullable<T624>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do625(T625 t) { + Nullable<T625> n = new Nullable<T625>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do626(T626 t) { + Nullable<T626> n = new Nullable<T626>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do627(T627 t) { + Nullable<T627> n = new Nullable<T627>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do628(T628 t) { + Nullable<T628> n = new Nullable<T628>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do629(T629 t) { + Nullable<T629> n = new Nullable<T629>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do630(T630 t) { + Nullable<T630> n = new Nullable<T630>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do631(T631 t) { + Nullable<T631> n = new Nullable<T631>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do632(T632 t) { + Nullable<T632> n = new Nullable<T632>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do633(T633 t) { + Nullable<T633> n = new Nullable<T633>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do634(T634 t) { + Nullable<T634> n = new Nullable<T634>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do635(T635 t) { + Nullable<T635> n = new Nullable<T635>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do636(T636 t) { + Nullable<T636> n = new Nullable<T636>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do637(T637 t) { + Nullable<T637> n = new Nullable<T637>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do638(T638 t) { + Nullable<T638> n = new Nullable<T638>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do639(T639 t) { + Nullable<T639> n = new Nullable<T639>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do640(T640 t) { + Nullable<T640> n = new Nullable<T640>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do641(T641 t) { + Nullable<T641> n = new Nullable<T641>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do642(T642 t) { + Nullable<T642> n = new Nullable<T642>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do643(T643 t) { + Nullable<T643> n = new Nullable<T643>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do644(T644 t) { + Nullable<T644> n = new Nullable<T644>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do645(T645 t) { + Nullable<T645> n = new Nullable<T645>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do646(T646 t) { + Nullable<T646> n = new Nullable<T646>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do647(T647 t) { + Nullable<T647> n = new Nullable<T647>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do648(T648 t) { + Nullable<T648> n = new Nullable<T648>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do649(T649 t) { + Nullable<T649> n = new Nullable<T649>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do650(T650 t) { + Nullable<T650> n = new Nullable<T650>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do651(T651 t) { + Nullable<T651> n = new Nullable<T651>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do652(T652 t) { + Nullable<T652> n = new Nullable<T652>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do653(T653 t) { + Nullable<T653> n = new Nullable<T653>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do654(T654 t) { + Nullable<T654> n = new Nullable<T654>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do655(T655 t) { + Nullable<T655> n = new Nullable<T655>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do656(T656 t) { + Nullable<T656> n = new Nullable<T656>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do657(T657 t) { + Nullable<T657> n = new Nullable<T657>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do658(T658 t) { + Nullable<T658> n = new Nullable<T658>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do659(T659 t) { + Nullable<T659> n = new Nullable<T659>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do660(T660 t) { + Nullable<T660> n = new Nullable<T660>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do661(T661 t) { + Nullable<T661> n = new Nullable<T661>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do662(T662 t) { + Nullable<T662> n = new Nullable<T662>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do663(T663 t) { + Nullable<T663> n = new Nullable<T663>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do664(T664 t) { + Nullable<T664> n = new Nullable<T664>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do665(T665 t) { + Nullable<T665> n = new Nullable<T665>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do666(T666 t) { + Nullable<T666> n = new Nullable<T666>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do667(T667 t) { + Nullable<T667> n = new Nullable<T667>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do668(T668 t) { + Nullable<T668> n = new Nullable<T668>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do669(T669 t) { + Nullable<T669> n = new Nullable<T669>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do670(T670 t) { + Nullable<T670> n = new Nullable<T670>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do671(T671 t) { + Nullable<T671> n = new Nullable<T671>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do672(T672 t) { + Nullable<T672> n = new Nullable<T672>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do673(T673 t) { + Nullable<T673> n = new Nullable<T673>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do674(T674 t) { + Nullable<T674> n = new Nullable<T674>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do675(T675 t) { + Nullable<T675> n = new Nullable<T675>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do676(T676 t) { + Nullable<T676> n = new Nullable<T676>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do677(T677 t) { + Nullable<T677> n = new Nullable<T677>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do678(T678 t) { + Nullable<T678> n = new Nullable<T678>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do679(T679 t) { + Nullable<T679> n = new Nullable<T679>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do680(T680 t) { + Nullable<T680> n = new Nullable<T680>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do681(T681 t) { + Nullable<T681> n = new Nullable<T681>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do682(T682 t) { + Nullable<T682> n = new Nullable<T682>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do683(T683 t) { + Nullable<T683> n = new Nullable<T683>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do684(T684 t) { + Nullable<T684> n = new Nullable<T684>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do685(T685 t) { + Nullable<T685> n = new Nullable<T685>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do686(T686 t) { + Nullable<T686> n = new Nullable<T686>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do687(T687 t) { + Nullable<T687> n = new Nullable<T687>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do688(T688 t) { + Nullable<T688> n = new Nullable<T688>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do689(T689 t) { + Nullable<T689> n = new Nullable<T689>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do690(T690 t) { + Nullable<T690> n = new Nullable<T690>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do691(T691 t) { + Nullable<T691> n = new Nullable<T691>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do692(T692 t) { + Nullable<T692> n = new Nullable<T692>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do693(T693 t) { + Nullable<T693> n = new Nullable<T693>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do694(T694 t) { + Nullable<T694> n = new Nullable<T694>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do695(T695 t) { + Nullable<T695> n = new Nullable<T695>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do696(T696 t) { + Nullable<T696> n = new Nullable<T696>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do697(T697 t) { + Nullable<T697> n = new Nullable<T697>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do698(T698 t) { + Nullable<T698> n = new Nullable<T698>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do699(T699 t) { + Nullable<T699> n = new Nullable<T699>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do700(T700 t) { + Nullable<T700> n = new Nullable<T700>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do701(T701 t) { + Nullable<T701> n = new Nullable<T701>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do702(T702 t) { + Nullable<T702> n = new Nullable<T702>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do703(T703 t) { + Nullable<T703> n = new Nullable<T703>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do704(T704 t) { + Nullable<T704> n = new Nullable<T704>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do705(T705 t) { + Nullable<T705> n = new Nullable<T705>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do706(T706 t) { + Nullable<T706> n = new Nullable<T706>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do707(T707 t) { + Nullable<T707> n = new Nullable<T707>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do708(T708 t) { + Nullable<T708> n = new Nullable<T708>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do709(T709 t) { + Nullable<T709> n = new Nullable<T709>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do710(T710 t) { + Nullable<T710> n = new Nullable<T710>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do711(T711 t) { + Nullable<T711> n = new Nullable<T711>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do712(T712 t) { + Nullable<T712> n = new Nullable<T712>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do713(T713 t) { + Nullable<T713> n = new Nullable<T713>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do714(T714 t) { + Nullable<T714> n = new Nullable<T714>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do715(T715 t) { + Nullable<T715> n = new Nullable<T715>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do716(T716 t) { + Nullable<T716> n = new Nullable<T716>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do717(T717 t) { + Nullable<T717> n = new Nullable<T717>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do718(T718 t) { + Nullable<T718> n = new Nullable<T718>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do719(T719 t) { + Nullable<T719> n = new Nullable<T719>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do720(T720 t) { + Nullable<T720> n = new Nullable<T720>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do721(T721 t) { + Nullable<T721> n = new Nullable<T721>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do722(T722 t) { + Nullable<T722> n = new Nullable<T722>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do723(T723 t) { + Nullable<T723> n = new Nullable<T723>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do724(T724 t) { + Nullable<T724> n = new Nullable<T724>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do725(T725 t) { + Nullable<T725> n = new Nullable<T725>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do726(T726 t) { + Nullable<T726> n = new Nullable<T726>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do727(T727 t) { + Nullable<T727> n = new Nullable<T727>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do728(T728 t) { + Nullable<T728> n = new Nullable<T728>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do729(T729 t) { + Nullable<T729> n = new Nullable<T729>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do730(T730 t) { + Nullable<T730> n = new Nullable<T730>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do731(T731 t) { + Nullable<T731> n = new Nullable<T731>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do732(T732 t) { + Nullable<T732> n = new Nullable<T732>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do733(T733 t) { + Nullable<T733> n = new Nullable<T733>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do734(T734 t) { + Nullable<T734> n = new Nullable<T734>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do735(T735 t) { + Nullable<T735> n = new Nullable<T735>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do736(T736 t) { + Nullable<T736> n = new Nullable<T736>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do737(T737 t) { + Nullable<T737> n = new Nullable<T737>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do738(T738 t) { + Nullable<T738> n = new Nullable<T738>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do739(T739 t) { + Nullable<T739> n = new Nullable<T739>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do740(T740 t) { + Nullable<T740> n = new Nullable<T740>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do741(T741 t) { + Nullable<T741> n = new Nullable<T741>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do742(T742 t) { + Nullable<T742> n = new Nullable<T742>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do743(T743 t) { + Nullable<T743> n = new Nullable<T743>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do744(T744 t) { + Nullable<T744> n = new Nullable<T744>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do745(T745 t) { + Nullable<T745> n = new Nullable<T745>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do746(T746 t) { + Nullable<T746> n = new Nullable<T746>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do747(T747 t) { + Nullable<T747> n = new Nullable<T747>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do748(T748 t) { + Nullable<T748> n = new Nullable<T748>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do749(T749 t) { + Nullable<T749> n = new Nullable<T749>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do750(T750 t) { + Nullable<T750> n = new Nullable<T750>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do751(T751 t) { + Nullable<T751> n = new Nullable<T751>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do752(T752 t) { + Nullable<T752> n = new Nullable<T752>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do753(T753 t) { + Nullable<T753> n = new Nullable<T753>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do754(T754 t) { + Nullable<T754> n = new Nullable<T754>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do755(T755 t) { + Nullable<T755> n = new Nullable<T755>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do756(T756 t) { + Nullable<T756> n = new Nullable<T756>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do757(T757 t) { + Nullable<T757> n = new Nullable<T757>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do758(T758 t) { + Nullable<T758> n = new Nullable<T758>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do759(T759 t) { + Nullable<T759> n = new Nullable<T759>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do760(T760 t) { + Nullable<T760> n = new Nullable<T760>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do761(T761 t) { + Nullable<T761> n = new Nullable<T761>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do762(T762 t) { + Nullable<T762> n = new Nullable<T762>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do763(T763 t) { + Nullable<T763> n = new Nullable<T763>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do764(T764 t) { + Nullable<T764> n = new Nullable<T764>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do765(T765 t) { + Nullable<T765> n = new Nullable<T765>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do766(T766 t) { + Nullable<T766> n = new Nullable<T766>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do767(T767 t) { + Nullable<T767> n = new Nullable<T767>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do768(T768 t) { + Nullable<T768> n = new Nullable<T768>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do769(T769 t) { + Nullable<T769> n = new Nullable<T769>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do770(T770 t) { + Nullable<T770> n = new Nullable<T770>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do771(T771 t) { + Nullable<T771> n = new Nullable<T771>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do772(T772 t) { + Nullable<T772> n = new Nullable<T772>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do773(T773 t) { + Nullable<T773> n = new Nullable<T773>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do774(T774 t) { + Nullable<T774> n = new Nullable<T774>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do775(T775 t) { + Nullable<T775> n = new Nullable<T775>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do776(T776 t) { + Nullable<T776> n = new Nullable<T776>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do777(T777 t) { + Nullable<T777> n = new Nullable<T777>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do778(T778 t) { + Nullable<T778> n = new Nullable<T778>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do779(T779 t) { + Nullable<T779> n = new Nullable<T779>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do780(T780 t) { + Nullable<T780> n = new Nullable<T780>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do781(T781 t) { + Nullable<T781> n = new Nullable<T781>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do782(T782 t) { + Nullable<T782> n = new Nullable<T782>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do783(T783 t) { + Nullable<T783> n = new Nullable<T783>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do784(T784 t) { + Nullable<T784> n = new Nullable<T784>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do785(T785 t) { + Nullable<T785> n = new Nullable<T785>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do786(T786 t) { + Nullable<T786> n = new Nullable<T786>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do787(T787 t) { + Nullable<T787> n = new Nullable<T787>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do788(T788 t) { + Nullable<T788> n = new Nullable<T788>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do789(T789 t) { + Nullable<T789> n = new Nullable<T789>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do790(T790 t) { + Nullable<T790> n = new Nullable<T790>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do791(T791 t) { + Nullable<T791> n = new Nullable<T791>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do792(T792 t) { + Nullable<T792> n = new Nullable<T792>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do793(T793 t) { + Nullable<T793> n = new Nullable<T793>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do794(T794 t) { + Nullable<T794> n = new Nullable<T794>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do795(T795 t) { + Nullable<T795> n = new Nullable<T795>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do796(T796 t) { + Nullable<T796> n = new Nullable<T796>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do797(T797 t) { + Nullable<T797> n = new Nullable<T797>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do798(T798 t) { + Nullable<T798> n = new Nullable<T798>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do799(T799 t) { + Nullable<T799> n = new Nullable<T799>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do800(T800 t) { + Nullable<T800> n = new Nullable<T800>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do801(T801 t) { + Nullable<T801> n = new Nullable<T801>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do802(T802 t) { + Nullable<T802> n = new Nullable<T802>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do803(T803 t) { + Nullable<T803> n = new Nullable<T803>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do804(T804 t) { + Nullable<T804> n = new Nullable<T804>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do805(T805 t) { + Nullable<T805> n = new Nullable<T805>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do806(T806 t) { + Nullable<T806> n = new Nullable<T806>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do807(T807 t) { + Nullable<T807> n = new Nullable<T807>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do808(T808 t) { + Nullable<T808> n = new Nullable<T808>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do809(T809 t) { + Nullable<T809> n = new Nullable<T809>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do810(T810 t) { + Nullable<T810> n = new Nullable<T810>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do811(T811 t) { + Nullable<T811> n = new Nullable<T811>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do812(T812 t) { + Nullable<T812> n = new Nullable<T812>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do813(T813 t) { + Nullable<T813> n = new Nullable<T813>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do814(T814 t) { + Nullable<T814> n = new Nullable<T814>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do815(T815 t) { + Nullable<T815> n = new Nullable<T815>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do816(T816 t) { + Nullable<T816> n = new Nullable<T816>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do817(T817 t) { + Nullable<T817> n = new Nullable<T817>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do818(T818 t) { + Nullable<T818> n = new Nullable<T818>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do819(T819 t) { + Nullable<T819> n = new Nullable<T819>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do820(T820 t) { + Nullable<T820> n = new Nullable<T820>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do821(T821 t) { + Nullable<T821> n = new Nullable<T821>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do822(T822 t) { + Nullable<T822> n = new Nullable<T822>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do823(T823 t) { + Nullable<T823> n = new Nullable<T823>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do824(T824 t) { + Nullable<T824> n = new Nullable<T824>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do825(T825 t) { + Nullable<T825> n = new Nullable<T825>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do826(T826 t) { + Nullable<T826> n = new Nullable<T826>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do827(T827 t) { + Nullable<T827> n = new Nullable<T827>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do828(T828 t) { + Nullable<T828> n = new Nullable<T828>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do829(T829 t) { + Nullable<T829> n = new Nullable<T829>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do830(T830 t) { + Nullable<T830> n = new Nullable<T830>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do831(T831 t) { + Nullable<T831> n = new Nullable<T831>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do832(T832 t) { + Nullable<T832> n = new Nullable<T832>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do833(T833 t) { + Nullable<T833> n = new Nullable<T833>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do834(T834 t) { + Nullable<T834> n = new Nullable<T834>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do835(T835 t) { + Nullable<T835> n = new Nullable<T835>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do836(T836 t) { + Nullable<T836> n = new Nullable<T836>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do837(T837 t) { + Nullable<T837> n = new Nullable<T837>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do838(T838 t) { + Nullable<T838> n = new Nullable<T838>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do839(T839 t) { + Nullable<T839> n = new Nullable<T839>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do840(T840 t) { + Nullable<T840> n = new Nullable<T840>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do841(T841 t) { + Nullable<T841> n = new Nullable<T841>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do842(T842 t) { + Nullable<T842> n = new Nullable<T842>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do843(T843 t) { + Nullable<T843> n = new Nullable<T843>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do844(T844 t) { + Nullable<T844> n = new Nullable<T844>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do845(T845 t) { + Nullable<T845> n = new Nullable<T845>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do846(T846 t) { + Nullable<T846> n = new Nullable<T846>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do847(T847 t) { + Nullable<T847> n = new Nullable<T847>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do848(T848 t) { + Nullable<T848> n = new Nullable<T848>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do849(T849 t) { + Nullable<T849> n = new Nullable<T849>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do850(T850 t) { + Nullable<T850> n = new Nullable<T850>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do851(T851 t) { + Nullable<T851> n = new Nullable<T851>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do852(T852 t) { + Nullable<T852> n = new Nullable<T852>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do853(T853 t) { + Nullable<T853> n = new Nullable<T853>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do854(T854 t) { + Nullable<T854> n = new Nullable<T854>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do855(T855 t) { + Nullable<T855> n = new Nullable<T855>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do856(T856 t) { + Nullable<T856> n = new Nullable<T856>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do857(T857 t) { + Nullable<T857> n = new Nullable<T857>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do858(T858 t) { + Nullable<T858> n = new Nullable<T858>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do859(T859 t) { + Nullable<T859> n = new Nullable<T859>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do860(T860 t) { + Nullable<T860> n = new Nullable<T860>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do861(T861 t) { + Nullable<T861> n = new Nullable<T861>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do862(T862 t) { + Nullable<T862> n = new Nullable<T862>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do863(T863 t) { + Nullable<T863> n = new Nullable<T863>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do864(T864 t) { + Nullable<T864> n = new Nullable<T864>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do865(T865 t) { + Nullable<T865> n = new Nullable<T865>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do866(T866 t) { + Nullable<T866> n = new Nullable<T866>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do867(T867 t) { + Nullable<T867> n = new Nullable<T867>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do868(T868 t) { + Nullable<T868> n = new Nullable<T868>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do869(T869 t) { + Nullable<T869> n = new Nullable<T869>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do870(T870 t) { + Nullable<T870> n = new Nullable<T870>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do871(T871 t) { + Nullable<T871> n = new Nullable<T871>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do872(T872 t) { + Nullable<T872> n = new Nullable<T872>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do873(T873 t) { + Nullable<T873> n = new Nullable<T873>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do874(T874 t) { + Nullable<T874> n = new Nullable<T874>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do875(T875 t) { + Nullable<T875> n = new Nullable<T875>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do876(T876 t) { + Nullable<T876> n = new Nullable<T876>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do877(T877 t) { + Nullable<T877> n = new Nullable<T877>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do878(T878 t) { + Nullable<T878> n = new Nullable<T878>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do879(T879 t) { + Nullable<T879> n = new Nullable<T879>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do880(T880 t) { + Nullable<T880> n = new Nullable<T880>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do881(T881 t) { + Nullable<T881> n = new Nullable<T881>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do882(T882 t) { + Nullable<T882> n = new Nullable<T882>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do883(T883 t) { + Nullable<T883> n = new Nullable<T883>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do884(T884 t) { + Nullable<T884> n = new Nullable<T884>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do885(T885 t) { + Nullable<T885> n = new Nullable<T885>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do886(T886 t) { + Nullable<T886> n = new Nullable<T886>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do887(T887 t) { + Nullable<T887> n = new Nullable<T887>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do888(T888 t) { + Nullable<T888> n = new Nullable<T888>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do889(T889 t) { + Nullable<T889> n = new Nullable<T889>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do890(T890 t) { + Nullable<T890> n = new Nullable<T890>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do891(T891 t) { + Nullable<T891> n = new Nullable<T891>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do892(T892 t) { + Nullable<T892> n = new Nullable<T892>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do893(T893 t) { + Nullable<T893> n = new Nullable<T893>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do894(T894 t) { + Nullable<T894> n = new Nullable<T894>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do895(T895 t) { + Nullable<T895> n = new Nullable<T895>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do896(T896 t) { + Nullable<T896> n = new Nullable<T896>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do897(T897 t) { + Nullable<T897> n = new Nullable<T897>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do898(T898 t) { + Nullable<T898> n = new Nullable<T898>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do899(T899 t) { + Nullable<T899> n = new Nullable<T899>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do900(T900 t) { + Nullable<T900> n = new Nullable<T900>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do901(T901 t) { + Nullable<T901> n = new Nullable<T901>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do902(T902 t) { + Nullable<T902> n = new Nullable<T902>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do903(T903 t) { + Nullable<T903> n = new Nullable<T903>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do904(T904 t) { + Nullable<T904> n = new Nullable<T904>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do905(T905 t) { + Nullable<T905> n = new Nullable<T905>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do906(T906 t) { + Nullable<T906> n = new Nullable<T906>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do907(T907 t) { + Nullable<T907> n = new Nullable<T907>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do908(T908 t) { + Nullable<T908> n = new Nullable<T908>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do909(T909 t) { + Nullable<T909> n = new Nullable<T909>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do910(T910 t) { + Nullable<T910> n = new Nullable<T910>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do911(T911 t) { + Nullable<T911> n = new Nullable<T911>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do912(T912 t) { + Nullable<T912> n = new Nullable<T912>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do913(T913 t) { + Nullable<T913> n = new Nullable<T913>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do914(T914 t) { + Nullable<T914> n = new Nullable<T914>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do915(T915 t) { + Nullable<T915> n = new Nullable<T915>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do916(T916 t) { + Nullable<T916> n = new Nullable<T916>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do917(T917 t) { + Nullable<T917> n = new Nullable<T917>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do918(T918 t) { + Nullable<T918> n = new Nullable<T918>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do919(T919 t) { + Nullable<T919> n = new Nullable<T919>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do920(T920 t) { + Nullable<T920> n = new Nullable<T920>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do921(T921 t) { + Nullable<T921> n = new Nullable<T921>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do922(T922 t) { + Nullable<T922> n = new Nullable<T922>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do923(T923 t) { + Nullable<T923> n = new Nullable<T923>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do924(T924 t) { + Nullable<T924> n = new Nullable<T924>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do925(T925 t) { + Nullable<T925> n = new Nullable<T925>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do926(T926 t) { + Nullable<T926> n = new Nullable<T926>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do927(T927 t) { + Nullable<T927> n = new Nullable<T927>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do928(T928 t) { + Nullable<T928> n = new Nullable<T928>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do929(T929 t) { + Nullable<T929> n = new Nullable<T929>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do930(T930 t) { + Nullable<T930> n = new Nullable<T930>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do931(T931 t) { + Nullable<T931> n = new Nullable<T931>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do932(T932 t) { + Nullable<T932> n = new Nullable<T932>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do933(T933 t) { + Nullable<T933> n = new Nullable<T933>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do934(T934 t) { + Nullable<T934> n = new Nullable<T934>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do935(T935 t) { + Nullable<T935> n = new Nullable<T935>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do936(T936 t) { + Nullable<T936> n = new Nullable<T936>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do937(T937 t) { + Nullable<T937> n = new Nullable<T937>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do938(T938 t) { + Nullable<T938> n = new Nullable<T938>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do939(T939 t) { + Nullable<T939> n = new Nullable<T939>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do940(T940 t) { + Nullable<T940> n = new Nullable<T940>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do941(T941 t) { + Nullable<T941> n = new Nullable<T941>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do942(T942 t) { + Nullable<T942> n = new Nullable<T942>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do943(T943 t) { + Nullable<T943> n = new Nullable<T943>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do944(T944 t) { + Nullable<T944> n = new Nullable<T944>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do945(T945 t) { + Nullable<T945> n = new Nullable<T945>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do946(T946 t) { + Nullable<T946> n = new Nullable<T946>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do947(T947 t) { + Nullable<T947> n = new Nullable<T947>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do948(T948 t) { + Nullable<T948> n = new Nullable<T948>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do949(T949 t) { + Nullable<T949> n = new Nullable<T949>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do950(T950 t) { + Nullable<T950> n = new Nullable<T950>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do951(T951 t) { + Nullable<T951> n = new Nullable<T951>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do952(T952 t) { + Nullable<T952> n = new Nullable<T952>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do953(T953 t) { + Nullable<T953> n = new Nullable<T953>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do954(T954 t) { + Nullable<T954> n = new Nullable<T954>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do955(T955 t) { + Nullable<T955> n = new Nullable<T955>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do956(T956 t) { + Nullable<T956> n = new Nullable<T956>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do957(T957 t) { + Nullable<T957> n = new Nullable<T957>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do958(T958 t) { + Nullable<T958> n = new Nullable<T958>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do959(T959 t) { + Nullable<T959> n = new Nullable<T959>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do960(T960 t) { + Nullable<T960> n = new Nullable<T960>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do961(T961 t) { + Nullable<T961> n = new Nullable<T961>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do962(T962 t) { + Nullable<T962> n = new Nullable<T962>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do963(T963 t) { + Nullable<T963> n = new Nullable<T963>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do964(T964 t) { + Nullable<T964> n = new Nullable<T964>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do965(T965 t) { + Nullable<T965> n = new Nullable<T965>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do966(T966 t) { + Nullable<T966> n = new Nullable<T966>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do967(T967 t) { + Nullable<T967> n = new Nullable<T967>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do968(T968 t) { + Nullable<T968> n = new Nullable<T968>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do969(T969 t) { + Nullable<T969> n = new Nullable<T969>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do970(T970 t) { + Nullable<T970> n = new Nullable<T970>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do971(T971 t) { + Nullable<T971> n = new Nullable<T971>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do972(T972 t) { + Nullable<T972> n = new Nullable<T972>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do973(T973 t) { + Nullable<T973> n = new Nullable<T973>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do974(T974 t) { + Nullable<T974> n = new Nullable<T974>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do975(T975 t) { + Nullable<T975> n = new Nullable<T975>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do976(T976 t) { + Nullable<T976> n = new Nullable<T976>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do977(T977 t) { + Nullable<T977> n = new Nullable<T977>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do978(T978 t) { + Nullable<T978> n = new Nullable<T978>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do979(T979 t) { + Nullable<T979> n = new Nullable<T979>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do980(T980 t) { + Nullable<T980> n = new Nullable<T980>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do981(T981 t) { + Nullable<T981> n = new Nullable<T981>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do982(T982 t) { + Nullable<T982> n = new Nullable<T982>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do983(T983 t) { + Nullable<T983> n = new Nullable<T983>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do984(T984 t) { + Nullable<T984> n = new Nullable<T984>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do985(T985 t) { + Nullable<T985> n = new Nullable<T985>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do986(T986 t) { + Nullable<T986> n = new Nullable<T986>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do987(T987 t) { + Nullable<T987> n = new Nullable<T987>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do988(T988 t) { + Nullable<T988> n = new Nullable<T988>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do989(T989 t) { + Nullable<T989> n = new Nullable<T989>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do990(T990 t) { + Nullable<T990> n = new Nullable<T990>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do991(T991 t) { + Nullable<T991> n = new Nullable<T991>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do992(T992 t) { + Nullable<T992> n = new Nullable<T992>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do993(T993 t) { + Nullable<T993> n = new Nullable<T993>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do994(T994 t) { + Nullable<T994> n = new Nullable<T994>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do995(T995 t) { + Nullable<T995> n = new Nullable<T995>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do996(T996 t) { + Nullable<T996> n = new Nullable<T996>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do997(T997 t) { + Nullable<T997> n = new Nullable<T997>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do998(T998 t) { + Nullable<T998> n = new Nullable<T998>(t); + return Ensure(n.HasValue && n.Value == t); + } + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Do999(T999 t) { + Nullable<T999> n = new Nullable<T999>(t); + return Ensure(n.HasValue && n.Value == t); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Ensure(bool pred) { + if (!pred) + throw new Exception("Ensure fails"); + return pred; + } +} diff --git a/tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj b/tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj new file mode 100644 index 0000000000..8b85a6d735 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/245191/nullenum1000.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>nullenum1000</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="nullenum1000.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/307137/vsw307137.cs b/tests/src/Loader/classloader/regressions/307137/vsw307137.cs new file mode 100644 index 0000000000..bdd05d03d9 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/307137/vsw307137.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this is regression test for VSW 307137 + +/* +The bug description has a good summary of the issue (from AtsushiK): + +A summary of the whole sordid affair. + + +In V1 and Everett, sequential classes only affected unmanaged layout and the .size metadata was used to add padding to the +unmanaged layout (IJW used this to implement their unmanaged structures. That's the only reason the .size metadata exists. +Somewhere along the line, C# started using the .size metadata to implemented fixed buffer arrays inside managed structures. +They'd declare just one field of the array element type and use the .size metadata to allocate space for the other elements. +Problem was, the .size metadata was never defined to expand the managed layout. This feature should never have worked. + +So how did it work for them? Plain dumb luck. In the CLR, if your structure consists of just one scalar-type field, the CLR +classifies it internally as a "blittable" structure. That is, it makes the managed layout match the unmanaged layout byte for +byte so that interop can optimize the marshaling of this structure to a bit-copy. Thus, because of this accidental reliance on +this internal optimization by the CLR, fixed buffers "worked" for plain old integer/float/double types. +There was two cases where it wouldn't work: chars and booleans. That's because these datatypes don't translate byte for +byte (different sizes, bools need normalizing.) So the blitting optimization doesn't kick in in those cases. + +Someone found out that the was case for chars and opened VSW:147145. A couple months later, I unwittingly"fixed" this bug +when I implemented the managed sequential layout feature. This feature now causes the .size metadata to expand out the +managed layout too (whether this was a good idea is debatable but it got VSW:147145 off the CLR team's back even though +they didn't understand how it got fixed..) + +Now we have the boolean case. Booleans are also non-blittable (they have to be normalized so they aren't blittable even if you +use a FieldMarshal override to force the native size to 1.) But because both the unmanaged size and managed size impose a +minimum value on the .size metadata, the .size metadata can't go below 4 (sizeof(BOOL) in Win32 native). + +CLR now overrides the .size metadata if it is less than the minimum size needed to hold the fields. + +*/ + +using System; + +unsafe struct S +{ + fixed bool b[3]; +} + +public class Test +{ + public static int Main() + { + try + { + #pragma warning disable 219 + S s = new S(); + #pragma warning restore 219 + + Console.WriteLine("PASS"); + return 100; + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected excpetion: " + e); + return 101; + } + } + +} diff --git a/tests/src/Loader/classloader/regressions/307137/vsw307137.csproj b/tests/src/Loader/classloader/regressions/307137/vsw307137.csproj new file mode 100644 index 0000000000..c79c07d4cd --- /dev/null +++ b/tests/src/Loader/classloader/regressions/307137/vsw307137.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw307137</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw307137.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/347422/b347422.cs b/tests/src/Loader/classloader/regressions/347422/b347422.cs new file mode 100644 index 0000000000..7d916dc690 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/347422/b347422.cs @@ -0,0 +1,49 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this is regression for VSW 347422 +// the issue here was that the exception message was incorrect. + +// Expected: System.InvalidCastException: Unable to cast object of type 'System.Object' to type 'IFoo'. +// Actual: System.InvalidCastException: Unable to cast object of type 'IFoo' to type 'System.Object'. + + +using System; + +public interface IFoo{} + +public class Casting +{ + public static int Main() + { + Object obj = new Object(); + try + { + IFoo f = (IFoo) obj; + + Console.WriteLine("FAIL: Did not catch expected InvalidCastException"); + return 101; + + } + catch(InvalidCastException e) + { + string msg ="Unable to cast object of type 'System.Object' to type 'IFoo'."; + + + if (e.Message.Equals(msg) || e.Message.Contains("Debugging resource strings are unavailable")) + { + Console.WriteLine("PASS"); + return 100; + } + else + { + Console.WriteLine("FAIL: Caught expected exception, but error message is incorrect"); + Console.WriteLine("Expected: " + msg); + Console.WriteLine("Actual: " + e.Message); + + return 102; + } + } + } +} diff --git a/tests/src/Loader/classloader/regressions/347422/b347422.csproj b/tests/src/Loader/classloader/regressions/347422/b347422.csproj new file mode 100644 index 0000000000..434e7d43f0 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/347422/b347422.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>b347422</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="b347422.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/348842/A.cs b/tests/src/Loader/classloader/regressions/348842/A.cs new file mode 100644 index 0000000000..e3762d456e --- /dev/null +++ b/tests/src/Loader/classloader/regressions/348842/A.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace A +{ + public interface IPlugin { } +} diff --git a/tests/src/Loader/classloader/regressions/348842/A.csproj b/tests/src/Loader/classloader/regressions/348842/A.csproj new file mode 100644 index 0000000000..48dbfb6f03 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/348842/A.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>A</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="A.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/359519/test359519.cs b/tests/src/Loader/classloader/regressions/359519/test359519.cs new file mode 100644 index 0000000000..ac1359406b --- /dev/null +++ b/tests/src/Loader/classloader/regressions/359519/test359519.cs @@ -0,0 +1,49 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this is a regression test for VSWhidbey 359519 +// a struct Root, has a static field that appears earlier in the metadata than a valuetype instance field. + +using System; +using System.Runtime.InteropServices; + +class MainClass + +{ + //Variable + [StructLayout(LayoutKind.Explicit, Size=1, Pack=1, CharSet=CharSet.Unicode)] + public struct Variable + { + [FieldOffset(0), MarshalAs(UnmanagedType.I1)] + public bool boolean; // A boolean field marshalled as 1 byte) + } + + [StructLayout(LayoutKind.Explicit, Size=2, Pack=1, CharSet=CharSet.Unicode)] + public struct Root + { + public static byte byte1; + [FieldOffset(8)] + public Variable var1; + } + + public static int Main(String[] args) + { + try + { + Root r = new Root(); + + // to remove compiler warning + // warning CS0219: The variable 'r' is assigned but its value is never used + + r.ToString(); + Console.WriteLine("PASS"); + return 100; + } + catch (Exception e) + { + Console.WriteLine("FAIL: Caught unexpected exception - " + e); + return 101; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/359519/test359519.csproj b/tests/src/Loader/classloader/regressions/359519/test359519.csproj new file mode 100644 index 0000000000..6f81e65df2 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/359519/test359519.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test359519</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test359519.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/405223/vsw405223.cs b/tests/src/Loader/classloader/regressions/405223/vsw405223.cs new file mode 100644 index 0000000000..a1aa8e61f7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/405223/vsw405223.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Regression test for VSW 405223 +// We shouldn't be able to cast from short[] to char[] or from char[] to short[] +// since that is the behavior in Everett and we should be consistent in Whidbey. + +using System; + +class Class1 +{ + public static int Main() + { + object o1 = new short[3]; + object o2 = new char[3]; + + if(o1 is char[] || o2 is short[]) + { + Console.WriteLine("FAIL: Was able to cast short[] to char[] or char[] to short[]"); + return 101; + } + else + { + Console.WriteLine("PASS"); + return 100; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/405223/vsw405223.csproj b/tests/src/Loader/classloader/regressions/405223/vsw405223.csproj new file mode 100644 index 0000000000..59f799ce12 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/405223/vsw405223.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw405223</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw405223.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/421439/RefX1.il b/tests/src/Loader/classloader/regressions/421439/RefX1.il new file mode 100644 index 0000000000..0434e61744 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/421439/RefX1.il @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +.assembly extern mscorlib {} + +.assembly RefX1 {} + +.class public auto ansi beforefieldinit RefX1<T> + extends [mscorlib]System.Object +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + .maxstack 8 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + +} + + diff --git a/tests/src/Loader/classloader/regressions/421439/RefX1.ilproj b/tests/src/Loader/classloader/regressions/421439/RefX1.ilproj new file mode 100644 index 0000000000..b1bb38fef0 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/421439/RefX1.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>RefX1</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="RefX1.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/421439/Test.il b/tests/src/Loader/classloader/regressions/421439/Test.il new file mode 100644 index 0000000000..93c0c6f379 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/421439/Test.il @@ -0,0 +1,65 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib {} +.assembly extern RefX1 {} +.assembly extern ValX1 {} + +.assembly Test {} + +.class public sequential ansi sealed beforefieldinit Gen<T> + extends [mscorlib]System.ValueType +{ + .field public !T Fld1 + .method public hidebysig specialname rtspecialname + instance void .ctor(!T fld1) cil managed + { + .maxstack 8 + nop + ldarg.0 + ldarg.1 + stfld !0 valuetype Gen<!T>::Fld1 + ret + } +} + + +// the below lines cause an AV +// new Gen<ValX1<string>[][][]>(new ValX1<string>[1][][]); +// new Gen<RefX1<RefX1<RefX1<string>>>>(new RefX1<RefX1<RefX1<string>>>()); + +.class public auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 8 + nop + ldc.i4.1 + newarr valuetype [ValX1]ValX1<string>[][] + newobj instance void valuetype Gen<valuetype [ValX1]ValX1<string>[][][]>::.ctor(!0) + pop + newobj instance void class [RefX1]RefX1<class [RefX1]RefX1<class [RefX1]RefX1<string>>>::.ctor() + newobj instance void valuetype Gen<class [RefX1]RefX1<class [RefX1]RefX1<class [RefX1]RefX1<string>>>>::.ctor(!0) + pop + + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + + ldc.i4 100 + ret + } + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + .maxstack 8 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + +} diff --git a/tests/src/Loader/classloader/regressions/421439/Test.ilproj b/tests/src/Loader/classloader/regressions/421439/Test.ilproj new file mode 100644 index 0000000000..418664f41f --- /dev/null +++ b/tests/src/Loader/classloader/regressions/421439/Test.ilproj @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Test</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Test.il" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="RefX1.ilproj" /> + <ProjectReference Include="ValX1.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/421439/ValX1.il b/tests/src/Loader/classloader/regressions/421439/ValX1.il new file mode 100644 index 0000000000..4335a7839a --- /dev/null +++ b/tests/src/Loader/classloader/regressions/421439/ValX1.il @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +.assembly extern mscorlib {} + +.assembly ValX1 {} + + +.class public sequential ansi sealed beforefieldinit ValX1<T> + extends [mscorlib]System.ValueType +{ + .pack 0 + .size 1 +} + diff --git a/tests/src/Loader/classloader/regressions/421439/ValX1.ilproj b/tests/src/Loader/classloader/regressions/421439/ValX1.ilproj new file mode 100644 index 0000000000..89c9f3d444 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/421439/ValX1.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>ValX1</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="ValX1.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/429802/BarImpl.il b/tests/src/Loader/classloader/regressions/429802/BarImpl.il new file mode 100644 index 0000000000..af6e235e84 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/429802/BarImpl.il @@ -0,0 +1,75 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.41217.00 +// Copyright (C) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.41217 +.assembly extern retargetable mscorlib +{ + .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3". + .ver 0:0:0:0 +} +.assembly extern MyBar +{ + .ver 0:0:0:0 +} +.assembly extern mscorlib as mscorlib_2 +{ + .ver 2:0:0:0 +} +.assembly BarImpl +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module M +// MVID: {01C3371C-004D-0000-A745-03831C37C341} +.imagebase 0x034f0000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03090000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit BarImpl + extends [MyBar]MyBar +{ + .method public hidebysig virtual instance int32 + DoBar() cil managed + { + // Code size 14 (0xe) + .maxstack 1 + .locals init (int32 V_0) + IL_0000: ldstr "In BarImpl.DoBar" + IL_0005: call void [mscorlib_2]System.Console::WriteLine(string) + IL_000a: ldc.i4.2 + IL_000b: stloc.0 + IL_000c: ldloc.0 + IL_000d: ret + } // end of method BarImpl::DoBar + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [MyBar]MyBar::.ctor() + IL_0006: ret + } // end of method BarImpl::.ctor + +} // end of class BarImpl + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj b/tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj new file mode 100644 index 0000000000..ed13a887cc --- /dev/null +++ b/tests/src/Loader/classloader/regressions/429802/BarImpl.ilproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>BarImpl</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="BarImpl.il" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="MyBar.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/429802/CMain.il b/tests/src/Loader/classloader/regressions/429802/CMain.il new file mode 100644 index 0000000000..da86838fae --- /dev/null +++ b/tests/src/Loader/classloader/regressions/429802/CMain.il @@ -0,0 +1,127 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.41217.00 +// Copyright (C) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.41217 +.assembly extern retargetable mscorlib +{ + .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3". + .ver 0:0:0:0 +} +.assembly extern mscorlib as mscorlib_1 +{ + .ver 2:0:0:0 +} +.assembly extern BarImpl +{ + .ver 0:0:0:0 +} +.assembly extern MyBar +{ + .ver 0:0:0:0 +} +.assembly CMain +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module M +// MVID: {01C3371C-004D-0000-A745-03831C37C341} +.imagebase 0x034f0000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03090000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit CMain + extends [mscorlib_1]System.Object +{ + .method public hidebysig static int32 Main(string[] args) cil managed + { + .entrypoint + // Code size 106 (0x6a) + .maxstack 2 + .locals init (bool V_0, + class [BarImpl]BarImpl V_1, + class [MyBar]MyBar V_2, + int32 V_3) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: newobj instance void [BarImpl]BarImpl::.ctor() + IL_0007: stloc.1 + IL_0008: ldc.i4.2 + IL_0009: ldloc.1 + IL_000a: callvirt instance int32 [MyBar]MyBar::DoBar() + IL_000f: beq.s IL_001d + + IL_0011: ldstr "FAIL: expected BarImpl.DoBar to execute, but anoth" + + "er method was executed instead." + IL_0016: call void [mscorlib_1]System.Console::WriteLine(string) + IL_001b: ldc.i4.0 + IL_001c: stloc.0 + IL_001d: ldloc.1 + IL_001e: stloc.2 + IL_001f: ldc.i4.2 + IL_0020: ldloc.2 + IL_0021: callvirt instance int32 [MyBar]MyBar::DoBar() + IL_0026: beq.s IL_0034 + + IL_0028: ldstr "FAIL: expected BarImpl.DoBar to execute, but anoth" + + "er method was executed instead." + IL_002d: call void [mscorlib_1]System.Console::WriteLine(string) + IL_0032: ldc.i4.0 + IL_0033: stloc.0 + IL_0034: ldc.i4.1 + IL_0035: ldloc.2 + IL_0036: call instance int32 [MyBar]MyBar::DoBar() + IL_003b: beq.s IL_0049 + + IL_003d: ldstr "FAIL: expected MyBar.DoSelfBar to execute, but ano" + + "ther method was executed instead." + IL_0042: call void [mscorlib_1]System.Console::WriteLine(string) + IL_0047: ldc.i4.0 + IL_0048: stloc.0 + IL_0049: ldloc.0 + IL_004a: brtrue.s IL_005b + + IL_004c: ldc.i4.s 101 + IL_004e: stloc.3 + IL_004f: ldstr "FAIL" + IL_0054: call void [mscorlib_1]System.Console::WriteLine(string) + IL_0059: br.s IL_0068 + + IL_005b: ldc.i4.s 100 + IL_005d: stloc.3 + IL_005e: ldstr "PASS" + IL_0063: call void [mscorlib_1]System.Console::WriteLine(string) + IL_0068: ldloc.3 + IL_0069: ret + } // end of method CMain::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib_1]System.Object::.ctor() + IL_0006: ret + } // end of method CMain::.ctor + +} // end of class CMain + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/429802/CMain.ilproj b/tests/src/Loader/classloader/regressions/429802/CMain.ilproj new file mode 100644 index 0000000000..50fdb9b7bf --- /dev/null +++ b/tests/src/Loader/classloader/regressions/429802/CMain.ilproj @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>CMain</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="CMain.il" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="BarImpl.ilproj" /> + <ProjectReference Include="MyBar.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/429802/MyBar.il b/tests/src/Loader/classloader/regressions/429802/MyBar.il new file mode 100644 index 0000000000..4c8cfb88cb --- /dev/null +++ b/tests/src/Loader/classloader/regressions/429802/MyBar.il @@ -0,0 +1,77 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.41217.00 +// Copyright (C) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.41217 +.assembly extern retargetable mscorlib +{ + .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3". + .ver 0:0:0:0 +} +.assembly extern mscorlib as mscorlib_1 +{ + .ver 2:0:0:0 +} +.assembly MyBar +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module M +// MVID: {01C3371C-004D-0000-A745-03831C37C341} +.imagebase 0x034f0000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03090000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public abstract auto ansi beforefieldinit MyBar + extends [mscorlib_1]System.Object +{ + .method public hidebysig newslot abstract virtual + instance int32 DoBar() cil managed + { + } // end of method MyBar::DoBar + + .method public hidebysig virtual instance int32 + DoSelfBar() cil managed + { + .override MyBar::DoBar + // Code size 14 (0xe) + .maxstack 1 + .locals init (int32 V_0) + IL_0000: ldstr "In MyBar.DoSelfBar" + IL_0005: call void [mscorlib_1]System.Console::WriteLine(string) + IL_000a: ldc.i4.1 + IL_000b: stloc.0 + IL_000c: ldloc.0 + IL_000d: ret + } // end of method MyBar::DoSelfBar + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib_1]System.Object::.ctor() + IL_0006: ret + } // end of method MyBar::.ctor + +} // end of class MyBar + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/429802/MyBar.ilproj b/tests/src/Loader/classloader/regressions/429802/MyBar.ilproj new file mode 100644 index 0000000000..fd46420bd7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/429802/MyBar.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>MyBar</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="MyBar.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj b/tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj new file mode 100644 index 0000000000..560c1e1614 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/434481/b434481_GenericRecurInit.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>b434481_GenericRecurInit</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="b434481_genericrecurinit.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs b/tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs new file mode 100644 index 0000000000..2d37258573 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/434481/b434481_genericrecurinit.cs @@ -0,0 +1,75 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +internal class Program +{ + private static int Main() + { + int iErrorCount = 0; + String tstr = null; + try{ + S<int> i = new S<int>(); + tstr = i.ToString(); + System.Console.WriteLine(tstr); + if( tstr != "Program+S`1[System.Int32]" ) + { + Console.WriteLine( "Err_01: Expected type: Program+S`1[System.Int32]" ); + Console.WriteLine( "Err_01: Actualy get type: " + tstr ); + iErrorCount++; + } + S<object> o = new S<object>(); + tstr = o.ToString(); + System.Console.WriteLine(tstr); + if( tstr != "Program+S`1[System.Object]" ) + { + Console.WriteLine( "Err_02: Expected type: Program+S`1[System.Object]" ); + Console.WriteLine( "Err_02: Actualy get type: " + tstr ); + iErrorCount++; + } + + S<string> s = new S<string>(); + tstr = s.ToString(); + System.Console.WriteLine(tstr); + if( tstr != "Program+S`1[System.String]" ) + { + Console.WriteLine( "Err_01: Expected type: Program+S`1[System.String]" ); + Console.WriteLine( "Err_01: Actualy get type: " + tstr ); + iErrorCount++; + } + S<Program> p = new S<Program>(); + tstr = p.ToString(); + System.Console.WriteLine(tstr); + if( tstr != "Program+S`1[Program]" ) + { + Console.WriteLine( "Err_01: Expected type: Program+S`1[Program]" ); + Console.WriteLine( "Err_01: Actualy get type: " + tstr ); + iErrorCount++; + } + }catch( Exception e) + { + Console.WriteLine( "Unexpected: " + e ); + iErrorCount++; + } + if( iErrorCount > 0 ) + { + Console.WriteLine( "Test Failed" ); + return 101; + } + else { + Console.WriteLine( "Test passed" ); + return 100; + } + + } + + public struct S<T> + { +#pragma warning disable 0414 + public static S<T> Foo = new S<T>(); +#pragma warning restore 0414 + + } +} diff --git a/tests/src/Loader/classloader/regressions/440935/Bar.il b/tests/src/Loader/classloader/regressions/440935/Bar.il new file mode 100644 index 0000000000..31d946f45f --- /dev/null +++ b/tests/src/Loader/classloader/regressions/440935/Bar.il @@ -0,0 +1,75 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50117.00 +// Copyright (C) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.50117 +.assembly extern retargetable mscorlib +{ + .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3". + .ver 0:0:0:0 +} +.assembly extern mscorlib as mscorlib_1 +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} +.assembly Bar +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module M +// MVID: {01EC94B1-004D-0000-A745-0383B194EC41} +.imagebase 0x034f0000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03090000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi Bar<T> + extends [mscorlib_1]System.Object +{ + .method public hidebysig specialname rtspecialname static + void .cctor() cil managed + { + // Code size 13 (0xd) + .maxstack 8 + IL_000b: nop + IL_000c: ret + } // end of method Bar::.cctor + + .method public hidebysig static void BarMeth() cil managed + { + // Code size 2 (0x2) + .maxstack 8 + IL_0000: nop + IL_0001: ret + } // end of method Bar::BarMeth + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib_1]System.Object::.ctor() + IL_0006: ret + } // end of method Bar::.ctor + +} // end of class Bar + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/440935/Bar.ilproj b/tests/src/Loader/classloader/regressions/440935/Bar.ilproj new file mode 100644 index 0000000000..91dafdf0f1 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/440935/Bar.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Bar</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Bar.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/440935/Foo.il b/tests/src/Loader/classloader/regressions/440935/Foo.il new file mode 100644 index 0000000000..c987e47435 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/440935/Foo.il @@ -0,0 +1,72 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50117.00 +// Copyright (C) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.50117 +.assembly extern retargetable mscorlib +{ + .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3". + .ver 0:0:0:0 +} +.assembly extern mscorlib as mscorlib_1 +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} +.assembly extern Bar +{ + .ver 0:0:0:0 +} +.assembly Foo +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module M +// MVID: {01EC94B1-004D-0000-A745-0383B194EC41} +.imagebase 0x034f0000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03090000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit Foo + extends [mscorlib_1]System.Object +{ + .method public hidebysig static void Meth() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: nop + IL_0001: call void class [Bar]Bar<int32>::BarMeth() + IL_0006: nop + IL_0007: ret + } // end of method Foo::Meth + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib_1]System.Object::.ctor() + IL_0006: ret + } // end of method Foo::.ctor + +} // end of class Foo + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/440935/Foo.ilproj b/tests/src/Loader/classloader/regressions/440935/Foo.ilproj new file mode 100644 index 0000000000..badbbdf8f0 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/440935/Foo.ilproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Foo</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Foo.il" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Bar.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/440935/Test.il b/tests/src/Loader/classloader/regressions/440935/Test.il new file mode 100644 index 0000000000..be376a5da8 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/440935/Test.il @@ -0,0 +1,75 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50117.00 +// Copyright (C) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.50117 +.assembly extern retargetable mscorlib +{ + .publickeytoken = (96 9D B8 05 3D 33 22 AC ) // ....=3". + .ver 0:0:0:0 +} +.assembly extern mscorlib as mscorlib_1 +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} +.assembly extern Foo +{ + .ver 0:0:0:0 +} +.assembly Test +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module M +// MVID: {01EC94B1-004D-0000-A745-0383B194EC41} +.imagebase 0x034f0000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03090000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit Test + extends [mscorlib_1]System.Object +{ + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + // Code size 8 (0x8) + .maxstack 8 + IL_0000: nop + IL_0001: call void [Foo]Foo::Meth() + IL_0006: nop + + ldc.i4 100 + IL_0007: ret + } // end of method Test::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib_1]System.Object::.ctor() + IL_0006: ret + } // end of method Test::.ctor + +} // end of class Test + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/440935/Test.ilproj b/tests/src/Loader/classloader/regressions/440935/Test.ilproj new file mode 100644 index 0000000000..fed6e241a9 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/440935/Test.ilproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Test</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Test.il" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Foo.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/451034/LoadType.cs b/tests/src/Loader/classloader/regressions/451034/LoadType.cs new file mode 100644 index 0000000000..f6430da01a --- /dev/null +++ b/tests/src/Loader/classloader/regressions/451034/LoadType.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this is regression test for VSW 451034 +// ngening the assembly and running it resulted in AV + +using System; + +public class Test +{ + public static int Main() + { + S s = CReloc5<char>.s; + + Console.WriteLine("PASS"); + return 100; + + } +} diff --git a/tests/src/Loader/classloader/regressions/451034/LoadType.csproj b/tests/src/Loader/classloader/regressions/451034/LoadType.csproj new file mode 100644 index 0000000000..32b8b70106 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/451034/LoadType.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>LoadType</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="LoadType.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Type.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/451034/Type.il b/tests/src/Loader/classloader/regressions/451034/Type.il new file mode 100644 index 0000000000..a6cd0a5d4c --- /dev/null +++ b/tests/src/Loader/classloader/regressions/451034/Type.il @@ -0,0 +1,45 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + + +.assembly Type{} +.assembly extern mscorlib {} + +.data i1data = int32(43962) + +.class public sequential ansi sealed beforefieldinit S + extends [mscorlib]System.ValueType +{ + .pack 0 + .size 1 +} // end of class S + + +// Generics + RVA (Field ValueType) +.class public CReloc8<T> +{ + .field public static valuetype S s at i1data + +} + + +.class public auto ansi beforefieldinit CReloc5<T> + extends [mscorlib]System.Object +{ + .field public static valuetype S s + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyData::.ctor + +} // end of class MyData + diff --git a/tests/src/Loader/classloader/regressions/451034/Type.ilproj b/tests/src/Loader/classloader/regressions/451034/Type.ilproj new file mode 100644 index 0000000000..9f7ccd5687 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/451034/Type.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Type</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Type.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/452434/vsw452434.il b/tests/src/Loader/classloader/regressions/452434/vsw452434.il new file mode 100644 index 0000000000..71b0ca6f58 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/452434/vsw452434.il @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// this is regression test for VSW 452434. +// The issue here was that we are using the same RVA multiple times which created a problem when ngening the image. + +.assembly Type{} +.assembly extern mscorlib {} + +.data i1data = int32(43962) + +// RVA (Field ValueType) +.class public CReloc8 +{ + .field public static valuetype S1 s1 at i1data + .field public static valuetype S2 s2 at i1data +} + +.class public sequential ansi sealed beforefieldinit S1 + extends [mscorlib]System.ValueType +{ + .pack 0 + .size 1 +} // end of class S + +.class public sequential ansi sealed beforefieldinit S2 + extends [mscorlib]System.ValueType +{ + .pack 0 + .size 2 +} // end of class S diff --git a/tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj b/tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj new file mode 100644 index 0000000000..5071f53a52 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/452434/vsw452434.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw452434</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw452434.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/452707/b452707.il b/tests/src/Loader/classloader/regressions/452707/b452707.il new file mode 100644 index 0000000000..28f0d8d908 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/452707/b452707.il @@ -0,0 +1,67 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// this is regression test for VSW 452707 +// Overriding MyS.ToString caused an AV since we were attempting to create precode +// before the slot that the method desc points to has been filled in. + +.assembly extern mscorlib {} + +.assembly b452707 {} +.module b452707.exe + +.class private sequential ansi sealed beforefieldinit MyS + extends [mscorlib]System.ValueType +{ + .method public hidebysig virtual instance string + Bla() cil managed + { + .override [mscorlib]System.ValueType::ToString + + .maxstack 1 + .locals init (string V_0) + nop + ldstr "MyS.ToString" + stloc.0 + ldloc.0 + ret + } +} + + +.class private auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 Main() cil managed + { + .entrypoint + + .maxstack 1 + .locals init (valuetype MyS V_0) + nop + ldloca.s V_0 + initobj MyS + ldloc.0 + box MyS + call void [System.Console]System.Console::WriteLine(object) + nop + + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + + ldc.i4 100 + ret + } + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + .maxstack 8 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + +} diff --git a/tests/src/Loader/classloader/regressions/452707/b452707.ilproj b/tests/src/Loader/classloader/regressions/452707/b452707.ilproj new file mode 100644 index 0000000000..b947ade1e8 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/452707/b452707.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>b452707</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="b452707.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/523654/test532654_b.cs b/tests/src/Loader/classloader/regressions/523654/test532654_b.cs new file mode 100644 index 0000000000..860c2d64e9 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/523654/test532654_b.cs @@ -0,0 +1,190 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/* +This test is for VSW 523654. + +Before the fix we were doing the following: + +take loader lock +look for a MethodDesc in the hash table +didn't find it so create a new MethodDesc (MD) +add it to the hash table +release the lock + +But the problem with this is that during creation of MethodDesc we were looking at the type handle and +calling managed code while holding the lock and that could potentially lead to a deadlock. + +After the fix we do the following: + +take loader lock +look for a MethodDesc in the hash table +didn't find it, release the lock + +create a new MethodDesc + +take the lock again +check that no one added the MethodDesc while we were creating it +If not there, add it to the hash table +Otherwise the MethodDesc is already in there +release the lock + +There was a concern about race conditions for the scenario where we don't find the MD the first time +but find it the 2nd time. +This test calls the same method from 10 threads so that we would hit this scenario. But this code path +is only hit non-deterministically some of the time. +*/ + +using System; +using System.Threading; + +public class A +{ + public static int i = 0; + + public void meth<T>() + { + Console.WriteLine(Thread.CurrentThread.Name + ": Inside meth<int>"); + Interlocked.Increment(ref i); + } +} + +public class Test +{ + public static void RunTestThread1() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread2() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread3() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread4() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread5() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread6() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread7() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread8() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread9() + { + A obj = new A(); + obj.meth<int>(); + } + + public static void RunTestThread10() + { + A obj = new A(); + obj.meth<int>(); + } + + + public static int Main() + { + + Thread t1 = new Thread(RunTestThread1); + t1.Name = "T1"; + + Thread t2 = new Thread(RunTestThread2); + t2.Name = "T2"; + + Thread t3 = new Thread(RunTestThread3); + t3.Name = "T3"; + + Thread t4 = new Thread(RunTestThread4); + t4.Name = "T4"; + + Thread t5 = new Thread(RunTestThread5); + t5.Name = "T5"; + + Thread t6 = new Thread(RunTestThread6); + t6.Name = "T6"; + + Thread t7 = new Thread(RunTestThread7); + t7.Name = "T7"; + + Thread t8 = new Thread(RunTestThread8); + t8.Name = "T8"; + + Thread t9 = new Thread(RunTestThread9); + t9.Name = "T9"; + + Thread t10 = new Thread(RunTestThread10); + t10.Name = "T10"; + + t1.Start(); + t2.Start(); + t3.Start(); + t4.Start(); + t5.Start(); + + t6.Start(); + t7.Start(); + t8.Start(); + t9.Start(); + t10.Start(); + + + t1.Join(); + t2.Join(); + t3.Join(); + t4.Join(); + t5.Join(); + + t6.Join(); + t7.Join(); + t8.Join(); + t9.Join(); + t10.Join(); + + + Console.WriteLine("i should be 10"); + Console.WriteLine("i = " + A.i); + + if (A.i != 10) + { + Console.WriteLine("FAIL"); + return 101; + } + else + { + Console.WriteLine("PASS"); + return 100; + } + } + +} diff --git a/tests/src/Loader/classloader/regressions/523654/test532654_b.csproj b/tests/src/Loader/classloader/regressions/523654/test532654_b.csproj new file mode 100644 index 0000000000..4857a82a76 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/523654/test532654_b.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test532654_b</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test532654_b.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il new file mode 100644 index 0000000000..02341b48ba --- /dev/null +++ b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.il @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} + +.assembly moduleCctorThrow {} + + + .method private hidebysig specialname rtspecialname static + void .cctor() cil managed + { + .maxstack 8 + nop + ldstr "Inside module .cctor" + call void [System.Console]System.Console::WriteLine(string) + + newobj instance void [mscorlib]System.Exception::.ctor() + throw + + ret + } // end of method Foo::.cctor + + + +.class public auto ansi TriggerModuleCctorClass + extends [mscorlib]System.Object +{ + .field public static int32 intStatic + + .method public static void CheckInit() noinlining + { + ret + } + + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + + .maxstack 8 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } // end of method Test1::.ctor + +} + diff --git a/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj new file mode 100644 index 0000000000..f0e33fa40a --- /dev/null +++ b/tests/src/Loader/classloader/regressions/529206/moduleCctorThrow.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>moduleCctorThrow</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="moduleCctorThrow.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs new file mode 100644 index 0000000000..9bc966a1da --- /dev/null +++ b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.cs @@ -0,0 +1,93 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// regression test for VSWhidbey 529206 for throwing TypeInitialization inside module .cctor +// We were appending every time the callstack and using the same exception object. +// Now we still use the same object, but callstack is cleared every time. + + +using System; +using System.Runtime.CompilerServices; + +class Test +{ + public static bool pass; + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void RunTest() + { + // TRIGGER: static field access, ref type + TriggerModuleCctorClass.intStatic = 5; + } + + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void RunTest2() + { + // TRIGGER: static field access, ref type + TriggerModuleCctorClass.intStatic = 5; + } + + public static int Main() + { + pass = true; + + try + { + RunTest(); + + Console.WriteLine("Did not catch expected TypeInitializationException exception"); + pass = false; + } + catch (TypeInitializationException e) + { + Console.WriteLine("Caught expected exception 1st time\n" + e); + + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected exception 1st time: " + e); + pass = false; + } + + + try + { + RunTest2(); + + Console.WriteLine("Did not catch expected TypeInitializationException exception"); + pass = false; + } + catch (TypeInitializationException e ) + { + Console.WriteLine("Caught expected exception 2nd time\n" + e); + + // if this string is found in the callstack it means we're appending callstack + // instead of having a new one each time. + if (e.StackTrace.IndexOf("at Test.RunTest()") != -1) + { + Console.WriteLine("2nd time: Incorrect stack trace"); + pass = false; + } + + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected exception 2nd time: " + e); + pass = false; + + } + + if (pass) + { + Console.WriteLine("PASS"); + return 100; + } + else + { + Console.WriteLine("FAIL"); + return 101; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj new file mode 100644 index 0000000000..90fa1610e4 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/529206/vsw529206ModuleCctor.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw529206ModuleCctor</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw529206ModuleCctor.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="moduleCctorThrow.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs new file mode 100644 index 0000000000..e656a19592 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.cs @@ -0,0 +1,86 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// regression test for VSWhidbey 529206 for throwing TypeInitialization inside class .cctor +// We were appending every time the callstack and using the same exception object. +// Now we still use the same object, but callstack is cleared every time. + +using System; + +class BadInit +{ + static BadInit() + { + Console.WriteLine("BadInit.cctor() called."); + throw new ArgumentException("Hi. I'm the exception thrown by BadInit.cctor()"); + } +} + + +class Test +{ + public static bool pass; + + public static void foo() + { + Console.WriteLine(new BadInit()); + } + + public static void One() + { + try + { + foo(); + } + catch (TypeInitializationException e) + { + Console.WriteLine(e); + } + } + + + public static void Two() + { + try + { + foo(); + } + catch (TypeInitializationException e) + { + Console.WriteLine(e); + + // if this string is found in the callstack it means we're appending callstack + // instead of having a new one each time. + if (e.StackTrace.IndexOf(" at Test.One()") != -1) + { + Console.WriteLine("2nd time: Incorrect stack trace"); + pass = false; + } + } + + } + + + public static int Main() + { + pass = true; + + Console.WriteLine("Loading BadInit the first time...\n"); + One(); + + Console.WriteLine("\nLoading BadInit the second time...\n"); + Two(); + + if (pass) + { + Console.WriteLine("PASS"); + return 100; + } + else + { + Console.WriteLine("FAIL"); + return 101; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj new file mode 100644 index 0000000000..2cf345553e --- /dev/null +++ b/tests/src/Loader/classloader/regressions/529206/vsw529206StaticCctor.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw529206StaticCctor</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw529206StaticCctor.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/583649/Type_Class42.il b/tests/src/Loader/classloader/regressions/583649/Type_Class42.il new file mode 100644 index 0000000000..dcb3cfcfe4 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/583649/Type_Class42.il @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib {} +.assembly Type_Class42 {} + + +.class public sequential sealed beforefieldinit Class42 + extends [mscorlib]System.Object +{ + .field famorassem literal valuetype ValueType147 Field804 + + .method public specialname rtspecialname instance void .ctor() cil managed + { + .maxstack 8 + ret + } +} + +.class value public sequential sealed beforefieldinit ValueType147 + extends [mscorlib]System.ValueType +{ + .field famorassem literal string Field826 + + + +} diff --git a/tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj b/tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj new file mode 100644 index 0000000000..41c86f76b2 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/583649/Type_Class42.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Type_Class42</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Type_Class42.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/583649/vsw583649.cs b/tests/src/Loader/classloader/regressions/583649/vsw583649.cs new file mode 100644 index 0000000000..01595fba11 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/583649/vsw583649.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// This is regression test for VSW 583649 +// We were AVing due to checking whether the struct ValueType147 is marshalable. +// The struct contains a literal field and we should ignore marshaling data attached to literals and statics + +using System; + +public class Type_Class42_Driver +{ + + public static int Main() + { + try + { + Console.WriteLine("Instantiating: Class42_0..."); + Class42 Class42_0 = new Class42(); + + Console.WriteLine("PASS"); + return 100; + } + catch (Exception e) + { + Console.WriteLine("FAIL: Caught unexpected exception: " + e.Message); + return 101; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/583649/vsw583649.csproj b/tests/src/Loader/classloader/regressions/583649/vsw583649.csproj new file mode 100644 index 0000000000..1fa3e14954 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/583649/vsw583649.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw583649</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw583649.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Type_Class42.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs new file mode 100644 index 0000000000..3039771c9e --- /dev/null +++ b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.cs @@ -0,0 +1,78 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this test verifies that there is no deadlock when we do pumping inside a class constructor +// from an STA thread. + + +using System; + +public class MyWaitForPendingFinalizersClass +{ + public MyWaitForPendingFinalizersClass() + { + Console.WriteLine("Inside MyWaitForPendingFinalizersClass cctor"); + + // Wait for all finalizers to complete before continuing. + // This is essentially a way to pump in CLR since we are suspending the + // current thread until the thread processing the finalization queue has + // emptied that queue. + // For more info on this see cbrumme's blogg posting on Pumping in the CLR. + GC.WaitForPendingFinalizers(); + + Console.WriteLine("End of MyWaitForPendingFinalizersClass cctor"); + } +} + +class MyFinalizeObject +{ + ~MyFinalizeObject() + { + Console.WriteLine("Finalizing a MyFinalizeObject"); + } +} + +class Test +{ + // We can increase this number to fill up more memory. + const int numMfos = 10; + // We can increase this number to cause more + // post-finalization work to be done. + const int maxIterations = 10; + + // STA + [STAThread] + static int Main() + { + MyFinalizeObject mfo; + + // Create objects that require finalization. + for (int j = 0; j < numMfos; j++) + { + mfo = new MyFinalizeObject(); + } + + //Force garbage collection. + // all finalizable objects will be placed in Finalization queue. + GC.Collect(); + + MyWaitForPendingFinalizersClass cl = new MyWaitForPendingFinalizersClass(); + + // Worker loop to perform post-finalization code. + for (int i = 0; i < maxIterations; i++) + { + Console.WriteLine("Doing some post-finalize work"); + } + + // if we got to this point, the test passed since no deadlock happened + // inside MyWaitForPendingFinalizersClass class constructor. + Console.WriteLine("PASS"); + return 100; + } +} + + + + + diff --git a/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj new file mode 100644 index 0000000000..44725acaf5 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/91888/pumpFromCctor.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>pumpFromCctor</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="pumpFromCctor.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs new file mode 100644 index 0000000000..2c1df95fa6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.cs @@ -0,0 +1,50 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/* Regression Test for Dev12 bug #518401: Bug in accessing x64 bit Multidimensional Arrays in x64 + * + * Change description: Store the callee saved registers more often in hand generated assembly helper. +*/ +using System; + +#pragma warning disable 169 +struct MyStruct +{ + byte a, b, c; +} +#pragma warning restore 169 + +class My +{ + static void foo<T>(T[,] s) + { + s[0, 1] = s[1, 0]; + } + + static int Main() + { + try + { + Object o1 = new Object(); + Object o2 = new Object(); + Object o3 = new Object(); + Object o4 = new Object(); + + foo(new MyStruct[2, 2]); //corrupts registry + + o1.ToString(); + o2.ToString(); + o3.ToString(); + o4.ToString(); + } + catch (Exception e) + { + Console.WriteLine("Unexpected exception: " + e); + return 102; + } + + Console.WriteLine("Pass"); + return 100; + } +} diff --git a/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj new file mode 100644 index 0000000000..a3f1248b6f --- /dev/null +++ b/tests/src/Loader/classloader/regressions/Dev12_518401/dev12_518401.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev12_518401</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev12_518401.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test23.il b/tests/src/Loader/classloader/regressions/asurt150271/test23.il new file mode 100644 index 0000000000..fe0d3fe23d --- /dev/null +++ b/tests/src/Loader/classloader/regressions/asurt150271/test23.il @@ -0,0 +1,67 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// non-blittable by objref field, large offset, large field size, +// one field is a valuetype that has an objref member field +// (this is to hit EEClass::CheckValueClassLayout()) +.assembly test23{} +.assembly extern mscorlib{} + +.class public explicit sealed LargeClass extends [mscorlib]System.ValueType{ + .field [0] public object o1 + .size 0x200004 +} + +.class public explicit Class1 extends [mscorlib]System.Object{ + .field [0] public int32 i1 + .field [8] public object o1 + .field [16] public int32 i2 + .field [24] public valuetype LargeClass lc + + + .method public specialname rtspecialname void .ctor(){ + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + +} + +.method public static int32 Main(){ + .entrypoint + + .locals init(class Class1 c1) + + newobj instance void Class1::.ctor() + stloc.0 + + + + ldstr "hello" + call void [System.Console]System.Console::WriteLine(string) + + ldloc.0 + ldc.i4.1 + stfld int32 Class1::i1 + + + ldloc.0 + ldc.i4.2 + stfld int32 Class1::i2 + + + ldstr "field i1: {0}, i2: {1}\n\nPASS" + ldloc.0 + ldfld int32 Class1::i1 + box int32 + ldloc.0 + ldfld int32 Class1::i2 + box int32 + call void [System.Console]System.Console::WriteLine(string,object,object) + + ldc.i4 100 + ret + +} diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj b/tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj new file mode 100644 index 0000000000..7742c3e669 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/asurt150271/test23.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test23</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test23.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test3.il b/tests/src/Loader/classloader/regressions/asurt150271/test3.il new file mode 100644 index 0000000000..bacccfd1f4 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/asurt150271/test3.il @@ -0,0 +1,95 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// blittable, absurdly large field offset, expect TypeLoadException +.assembly test3{} +.assembly extern mscorlib{} + +.class public explicit Class1 extends [mscorlib]System.Object{ + .field [0] public int32 i1 + .field [1073741824] public int32 i2 // offset: 1024*1024*1024 + + .method public specialname rtspecialname void .ctor(){ + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + +} + + +.method public static int32 Main(){ + .entrypoint + + .locals init (class [mscorlib]System.Exception e2) + + .try{ + call void Go() + ldstr "FAIL: expected TypeLoadException, but no exception was caught" + call void [System.Console]System.Console::WriteLine(string) + leave NOT_CAUGHT + } + catch [mscorlib]System.TypeLoadException{ + pop // throw away the exception object + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + leave CAUGHT_EXPECTED + } + catch [mscorlib]System.Exception{ + stloc e2 + ldstr "FAIL: expected TypeLoadException, but instead caught the following:\n{0}" + ldloc e2 + call void [System.Console]System.Console::WriteLine(string,object) + leave CAUGHT_UNEXPECTED + } + + NOT_CAUGHT: + ldc.i4 101 + br END + + CAUGHT_EXPECTED: + ldc.i4 100 + br END + + CAUGHT_UNEXPECTED: + ldc.i4 102 + br END + + END: + ret +} + +.method public static void Go(){ + .locals init(class Class1 c1) + + newobj instance void Class1::.ctor() + stloc.0 + + + + ldstr "hello" + call void [System.Console]System.Console::WriteLine(string) + + ldloc.0 + ldc.i4.1 + stfld int32 Class1::i1 + + + ldloc.0 + ldc.i4.2 + stfld int32 Class1::i2 + + + ldstr "field i1: {0}, i2: {1}\n\nPASS" + ldloc.0 + ldfld int32 Class1::i1 + box int32 + ldloc.0 + ldfld int32 Class1::i2 + box int32 + call void [System.Console]System.Console::WriteLine(string,object,object) + + ret +} diff --git a/tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj b/tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj new file mode 100644 index 0000000000..c25f9935eb --- /dev/null +++ b/tests/src/Loader/classloader/regressions/asurt150271/test3.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test3</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test3.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dd116295/dd116295.cs b/tests/src/Loader/classloader/regressions/dd116295/dd116295.cs new file mode 100644 index 0000000000..d838c1dcf6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dd116295/dd116295.cs @@ -0,0 +1,58 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; + +namespace ConsoleApplication1 +{ + class Program + { + public struct A + { + } + + public struct B + { + A a; + } + + public struct C + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] + public B[] b; + } + + + + static int Main(string[] args) + { + try + { + M(); + Console.WriteLine("PASS"); + return 100; + } + catch(TypeLoadException) + { + Console.WriteLine("Caught TypeLoadException, FAIL"); + return 99; + } + catch(Exception e) + { + Console.WriteLine("Caught unexpected exception"); + Console.WriteLine(e); + Console.WriteLine("\nFAIL"); + return 99; + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void M() + { + C obj = new C(); // exception occurs in the initializing this memeber + } + } +} diff --git a/tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj b/tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj new file mode 100644 index 0000000000..d00da98b01 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dd116295/dd116295.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dd116295</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dd116295.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dd52/dd52.csproj b/tests/src/Loader/classloader/regressions/dd52/dd52.csproj new file mode 100644 index 0000000000..6d83027253 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dd52/dd52.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dd52</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="runtest.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="test.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dd52/runtest.cs b/tests/src/Loader/classloader/regressions/dd52/runtest.cs new file mode 100644 index 0000000000..a039a0c663 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dd52/runtest.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public class Test + +{ + public static int Main() + { + Console.WriteLine(); + + + C28<int> obj405 = new C28<int>(); + + + Console.WriteLine(obj405.M28()); + Console.WriteLine(obj405.M3()); + Console.WriteLine(); + + + C28<int> obj433 = new C29(); + + + Console.WriteLine(obj433.M28()); + + Console.WriteLine(obj433.M3()); + + + C29 obj434 = new C29(); + + + Console.WriteLine(obj434.M28()); + Console.WriteLine(obj434.M3()); + Console.WriteLine(); + Console.WriteLine("PASS"); + + return 100; + } +} diff --git a/tests/src/Loader/classloader/regressions/dd52/test.il b/tests/src/Loader/classloader/regressions/dd52/test.il new file mode 100644 index 0000000000..57a41c0ad3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dd52/test.il @@ -0,0 +1,70 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly test {} +.assembly extern mscorlib {} + + + +.class public C27<T0,T1,T2> +extends [mscorlib]System.Object +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } + + .method public newslot virtual instance int32 M3() + { + ldc.i4 53 + ret + } +} + +.class public C28<T0> +extends class C27<!T0,!T0,!T0> +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + ldarg.0 + call instance void class C27<!T0,!T0,!T0>::.ctor() + ret + } + .method public newslot virtual instance int32 M28() + { + .override class C27<!T0,!T0,!T0>::M3 + ldc.i4 54 + ret + } + .method public virtual instance int32 M3() + { + ldc.i4 55 + ret + } +} + +.class public C29 +extends class C28<int32> +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + ldarg.0 + call instance void class C28<int32>::.ctor() + ret + } + .method public virtual instance int32 M28() + { + .override class C28<int32>::M3 + ldc.i4 56 + ret + } + +} + diff --git a/tests/src/Loader/classloader/regressions/dd52/test.ilproj b/tests/src/Loader/classloader/regressions/dd52/test.ilproj new file mode 100644 index 0000000000..125d8ee753 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dd52/test.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>test</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="test.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs new file mode 100644 index 0000000000..d82ae605c6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +//Type load failed when compiling a class derived from a class that implicitly implements a generic method as a virtual method. +//The base class and the interface are in a separate module +//DDB186874: the output was: +// "Unhandled Exception: System.TypeLoadException: Method 'MyBase.Print' on type 'MyDerived' from assembly 'Test, +// Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' tried to implicitly implement an interface method with +// weaker type parameter constraints." + + + + +using System; + + +public class MyDerived : MyBase, I +{ +} + +class MyTest +{ + public static int Main() + { + I I1 = new MyDerived(); + + System.Console.WriteLine("I1.Print<object>: " + I1.Print<object>()); + + return 100; + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj new file mode 100644 index 0000000000..bd392490d3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_398410/dev10_398410.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_398410</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_398410.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="utility.csproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/utility.cs b/tests/src/Loader/classloader/regressions/dev10_398410/utility.cs new file mode 100644 index 0000000000..9f8b19d4ad --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_398410/utility.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +public interface I +{ + string Print<T>(); +} + +public class MyBase +{ + public virtual string Print<T>() { return "MyBase.Print<" + typeof(T) + "> called"; } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj b/tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj new file mode 100644 index 0000000000..70eeda9122 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_398410/utility.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>utility</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="utility.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il new file mode 100644 index 0000000000..912cc83024 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.il @@ -0,0 +1,223 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +//DDB187632: generic types and generic methods with more than 0xFFFF generic arguments should throw a TypeLoadException + +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} +.assembly extern genmeth +{ + .ver 0:0:0:0 +} +.assembly extern gentype +{ + .ver 0:0:0:0 +} +.assembly ddb187632 +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module ddb187632.exe +// MVID: {B6CD7E92-EDE7-4493-B78F-D3F743C68390} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x00900000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit Client + extends [mscorlib]System.Object +{ + .method public hidebysig static void M1() cil managed noinlining + { + // Code size 62 (0x3e) + .maxstack 2 + .locals init (class [genmeth]GenMeth V_0, + class [mscorlib]System.Type V_1, + class [mscorlib]System.Reflection.MethodInfo V_2, + class [mscorlib]System.Type[] V_3) + IL_0000: nop + IL_0001: newobj instance void [genmeth]GenMeth::.ctor() + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: call valuetype [mscorlib]System.RuntimeTypeHandle [mscorlib]System.Type::GetTypeHandle(object) + IL_000d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0012: stloc.1 + IL_0013: ldloc.1 + IL_0014: call void [System.Console]System.Console::WriteLine(object) + IL_0019: nop + IL_001a: ldloc.1 + IL_001b: ldstr "foo" + IL_0020: callvirt instance class [mscorlib]System.Reflection.MethodInfo [mscorlib]System.Type::GetMethod(string) + IL_0025: stloc.2 + IL_0026: ldloc.2 + IL_0027: call void [System.Console]System.Console::WriteLine(object) + IL_002c: nop + IL_002d: ldloc.2 + IL_002e: callvirt instance class [mscorlib]System.Type[] [mscorlib]System.Reflection.MethodBase::GetGenericArguments() + IL_0033: stloc.3 + IL_0034: ldloc.3 + IL_0035: ldlen + IL_0036: conv.i4 + IL_0037: call void [System.Console]System.Console::WriteLine(int32) + IL_003c: nop + IL_003d: ret + } // end of method Client::M1 + + .method public hidebysig static void M2() cil managed noinlining + { + // Code size 36 (0x24) + .maxstack 1 + .locals init (class [mscorlib]System.Type V_0, + class [mscorlib]System.Type[] V_1) + IL_1000: nop + IL_0000: ldtoken [gentype]GenType`1 + IL_0005: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_000b: stloc.0 + IL_000c: ldloc.0 + IL_000d: call void [System.Console]System.Console::WriteLine(object) + IL_0012: nop + IL_0013: ldloc.0 + IL_0014: callvirt instance class [mscorlib]System.Type[] [mscorlib]System.Type::GetGenericArguments() + IL_0019: stloc.1 + IL_001a: ldloc.1 + IL_001b: ldlen + IL_001c: conv.i4 + IL_001d: call void [System.Console]System.Console::WriteLine(int32) + IL_0022: nop + IL_0023: ret + } // end of method Client::M2 + + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + // Code size 155 (0x9b) + .maxstack 2 + .locals init (class [mscorlib]System.TypeLoadException V_0, + class [mscorlib]System.Exception V_1, + int32 V_2) + IL_0000: nop + .try + { + IL_0001: nop + IL_0002: ldstr "Testing huge generic methods..." + IL_0007: call void [System.Console]System.Console::WriteLine(string) + IL_000c: nop + IL_000d: call void Client::M1() + IL_0012: nop + IL_0013: ldstr "Failed: did not catch any TypeLoadException!!" + IL_0018: call void [System.Console]System.Console::WriteLine(string) + IL_001d: nop + IL_001e: ldc.i4.m1 + IL_001f: stloc.2 + IL_0020: leave.s IL_0098 + + } // end .try + catch [mscorlib]System.TypeLoadException + { + IL_0022: stloc.0 + IL_0023: nop + IL_0024: ldstr "Pass!" + IL_0029: call void [System.Console]System.Console::WriteLine(string) + IL_002e: nop + IL_002f: nop + IL_0030: leave.s IL_0049 + + } // end handler + catch [mscorlib]System.Exception + { + IL_0032: stloc.1 + IL_0033: nop + IL_0034: ldstr "Failed: caught unexpected exception: " + IL_0039: ldloc.1 + IL_003a: call string [mscorlib]System.String::Concat(object, + object) + IL_003f: call void [System.Console]System.Console::WriteLine(string) + IL_0044: nop + IL_0045: ldc.i4.1 + IL_0046: stloc.2 + IL_0047: leave.s IL_0098 + + } // end handler + IL_0049: nop + .try + { + IL_004a: nop + IL_004b: ldstr "Testing huge generic types..." + IL_0050: call void [System.Console]System.Console::WriteLine(string) + IL_0055: nop + IL_0056: call void Client::M2() + IL_005b: nop + IL_005c: ldstr "Failed: did not catch any TypeLoadException!!" + IL_0061: call void [System.Console]System.Console::WriteLine(string) + IL_0066: nop + IL_0067: ldc.i4.m1 + IL_0068: stloc.2 + IL_0069: leave.s IL_0098 + + } // end .try + catch [mscorlib]System.TypeLoadException + { + IL_006b: stloc.0 + IL_006c: nop + IL_006d: ldstr "Pass!" + IL_0072: call void [System.Console]System.Console::WriteLine(string) + IL_0077: nop + IL_0078: nop + IL_0079: leave.s IL_0092 + + } // end handler + catch [mscorlib]System.Exception + { + IL_007b: stloc.1 + IL_007c: nop + IL_007d: ldstr "Failed: caught unexpected exception: " + IL_0082: ldloc.1 + IL_0083: call string [mscorlib]System.String::Concat(object, + object) + IL_0088: call void [System.Console]System.Console::WriteLine(string) + IL_008d: nop + IL_008e: ldc.i4.1 + IL_008f: stloc.2 + IL_0090: leave.s IL_0098 + + } // end handler + IL_0092: nop + IL_0093: ldc.i4.s 100 + IL_0095: stloc.2 + IL_0096: br.s IL_0098 + + IL_0098: nop + IL_0099: ldloc.2 + IL_009a: ret + } // end of method Client::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Client::.ctor + +} // end of class Client + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj new file mode 100644 index 0000000000..4687451c76 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_403582/dev10_403582.ilproj @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_403582</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_403582.il" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="genmeth.ilproj" /> + <ProjectReference Include="gentype.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il new file mode 100644 index 0000000000..8d89da221d --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.il @@ -0,0 +1,64 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.30124.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.30124 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} +.assembly genmeth +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module genmeth.dll +// MVID: {E2B7E271-6615-4283-B6F1-9370E5BF0911} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x006D0000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit GenMeth + extends [mscorlib]System.Object +{ + .method public hidebysig static void foo<T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T>() cil managed + { + // Code size 2 (0x2) + .maxstack 8 + IL_0000: nop + IL_0001: ret + } // end of method GenMeth::foo + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method GenMeth::.ctor + +} // end of class GenMeth + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj new file mode 100644 index 0000000000..a76fcff7a1 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_403582/genmeth.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>genmeth</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="genmeth.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/gentype.il b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.il new file mode 100644 index 0000000000..3f4ee0b7cd --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.il @@ -0,0 +1,65 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.30124.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v2.0.30124 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} +.assembly gentype +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module gentype.dll +// MVID: {B8CFF910-FD86-4983-A914-64910238704A} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x01860000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class public auto ansi beforefieldinit GenType`1<T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T> + extends [mscorlib]System.Object +{ + .method public hidebysig instance void + foo() cil managed + { + // Code size 2 (0x2) + .maxstack 8 + IL_0000: nop + IL_0001: ret + } // end of method GenType`3::foo + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method GenType`3::.ctor + +} // end of class GenType`3 + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj new file mode 100644 index 0000000000..e0dde50160 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_403582/gentype.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>gentype</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="gentype.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il new file mode 100644 index 0000000000..eb47ce27d3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.il @@ -0,0 +1,123 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// +// Non-virtual call of System.Type.TypeHandle on result of ldtoken should not trigger typeof(XXX).TypeHandle optimization +// + +/* + +using System; + +class My { + +static int Main() { + try { + typeof(My).TypeHandle.ToString(); // Change to call get_TypeHandle non-virtually + } + catch (Exception e) { + Console.WriteLine("PASSED"); + return 100; + } + Console.WriteLine("FAILED"); + return 1; +} + +} + +*/ + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30215.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.30215 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly bug443322 +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module bug443322.exe +// MVID: {EDF83A15-9E74-47F0-B94B-197894607E38} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x004D0000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit My + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 + Main() cil managed + { + .entrypoint + // Code size 62 (0x3e) + .maxstack 1 + .locals init (int32 V_0, + valuetype [mscorlib]System.RuntimeTypeHandle V_1) + .try + { + IL_0000: ldtoken My + IL_0005: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) +// IL_000a: callvirt instance valuetype [mscorlib]System.RuntimeTypeHandle [mscorlib]System.Type::get_TypeHandle() + IL_000a: call instance valuetype [mscorlib]System.RuntimeTypeHandle [mscorlib]System.Type::get_TypeHandle() + IL_000f: stloc.1 + IL_0010: ldloca.s V_1 + IL_0012: constrained. [mscorlib]System.RuntimeTypeHandle + IL_0018: callvirt instance string [mscorlib]System.Object::ToString() + IL_001d: pop + IL_001e: leave.s IL_0030 + + } // end .try + catch [mscorlib]System.Exception + { + IL_0020: pop + IL_0021: ldstr "PASSED" + IL_0026: call void [System.Console]System.Console::WriteLine(string) + IL_002b: ldc.i4.s 100 + IL_002d: stloc.0 + IL_002e: leave.s IL_003c + + } // end handler + IL_0030: ldstr "FAILED" + IL_0035: call void [System.Console]System.Console::WriteLine(string) + IL_003a: ldc.i4.1 + IL_003b: ret + + IL_003c: ldloc.0 + IL_003d: ret + } // end of method My::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method My::.ctor + +} // end of class My + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** +// WARNING: Created Win32 resource file bug443322.res diff --git a/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj new file mode 100644 index 0000000000..5c00f39721 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_443322/dev10_443322.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_443322</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_443322.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il new file mode 100644 index 0000000000..0c6ba518d8 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.il @@ -0,0 +1,99 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30829.00 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.ret +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 0:0:0:0 +} +.assembly AppCompatBug +{ + .ver 0:0:0:0 +} +.module AppCompatBug.exe +// MVID: {EAE2209C-4B54-47C6-96C2-EC2352FC6386} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x00320000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit CustomMemStream + extends [mscorlib]System.IO.MemoryStream +{ + .method public hidebysig virtual instance void + Close() cil managed + { + .override [mscorlib]System.IO.MemoryStream::Close + // Code size 20 (0x14) + .maxstack 8 + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: call instance void [mscorlib]System.IO.Stream::Close() + IL_0007: nop + IL_0008: ldstr "Successfully called CustomStream.Close()" + IL_000d: call void [System.Console]System.Console::WriteLine(string) + IL_0012: nop + IL_0013: ret + } // end of method CustomMemStream::Close + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.IO.MemoryStream::.ctor() + IL_0006: ret + } // end of method CustomMemStream::.ctor + +} // end of class CustomMemStream + +.class private auto ansi beforefieldinit Program + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 Main(string[] args) cil managed + { + .entrypoint + // Code size 15 (0xf) + .maxstack 1 + .locals init (class [mscorlib]System.IO.MemoryStream V_0) + IL_0000: nop + IL_0001: newobj instance void CustomMemStream::.ctor() + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: callvirt instance void [mscorlib]System.IO.Stream::Close() + IL_000d: nop + ldc.i4 100 + IL_000e: ret + } // end of method Program::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Program::.ctor + +} // end of class Program + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj new file mode 100644 index 0000000000..23a3a4947e --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_493135/dev10_493135.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_493135</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_493135.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs new file mode 100644 index 0000000000..33d60b80b3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +//This pattern of interface implementation caused a buffer overflow and caused an AV (see bug DEV10_526434) + +using System; + +class HelloWorld +{ + static int Main(String[] args) + { + C<object> c = new C<object>(); + + Console.WriteLine("Pass"); + return 100; + } +} + +interface K<T> { void Print(); } +class C<T> : J<string, T>, K<T> +{ + public virtual void Print() { } + public virtual void PrintJ() { } +} + +interface I1<T> { void Print(); } +interface I2<T> { void Print(); } +interface I3<T> { void Print(); } +interface I4<T> { void Print(); } +interface I5<T> { void Print(); } +interface I6<T> { void Print(); } +interface J<T, U> : I1<T>, I2<T>, I3<T>, I4<T>, I5<T>, I6<T> +{ + void PrintJ(); +} diff --git a/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj new file mode 100644 index 0000000000..86934d0390 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_526434/dev10_526434.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_526434</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_526434.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs new file mode 100644 index 0000000000..46fdda235d --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.cs @@ -0,0 +1,111 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +interface I<S> { string Method(S param); string Method<M>(S param); } + +struct MyStruct : I<string>, I<object> +{ + public string Method(string param) { return "string"; } + public string Method(object param) { return "object"; } + public string Method<M>(string param) { return "GEN-string"; } + public string Method<M>(object param) { return "GEN-object"; } +} + +class Conversion1<T, U> where U : I<T>, new() +{ + public string Caller1(T param) + { + U instance = new U(); + return instance.Method(param); + } + + public string Caller2(T param) + { + U instance = new U(); + return instance.Method<object>(param); + } +} + +class Conversion2<U> where U : I<string>, new() +{ + public string Caller1() + { + U instance = new U(); + return instance.Method("mystring"); + } + + public string Caller2() + { + U instance = new U(); + return instance.Method<object>("mystring"); + } +} + +class Test +{ + static string Caller1<T, U>(T param) where U : I<T>, new() + { + U instance = new U(); + return instance.Method(param); + } + + static string Caller2<T, U>(T param) where U : I<T>, new() + { + U instance = new U(); + return instance.Method<object>(param); + } + + static string Caller3<U>() where U : I<string>, new() + { + U instance = new U(); + return instance.Method("mystring"); + } + + static string Caller4<U>() where U : I<string>, new() + { + U instance = new U(); + return instance.Method<object>("mystring"); + } + + static int Main() + { + int numFailures = 0; + + Conversion1<string, MyStruct> c1 = new Conversion1<string, MyStruct>(); + Conversion2<MyStruct> c2 = new Conversion2<MyStruct>(); + + string res1 = Caller1<string, MyStruct>("mystring"); + string res2 = Caller2<string, MyStruct>("mystring"); + Console.WriteLine(res1); + Console.WriteLine(res2); + if(res1 != "string" && res2 != "GEN-string") numFailures++; + + + + res1 = Caller3<MyStruct>(); + res2 = Caller4<MyStruct>(); + Console.WriteLine(res1); + Console.WriteLine(res2); + if(res1 != "string" && res2 != "GEN-string") numFailures++; + + + + res1 = c1.Caller1("mystring"); + res2 = c1.Caller2("mystring"); + Console.WriteLine(res1); + Console.WriteLine(res2); + if(res1 != "string" && res2 != "GEN-string") numFailures++; + + + res1 = c2.Caller1(); + res2 = c2.Caller2(); + Console.WriteLine(res1); + Console.WriteLine(res2); + if(res1 != "string" && res2 != "GEN-string") numFailures++; + + return ((numFailures == 0)?(100):(-1)); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj new file mode 100644 index 0000000000..7cbb7c5f92 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/ConstrainedMethods.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>ConstrainedMethods</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="ConstrainedMethods.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il new file mode 100644 index 0000000000..30e6b9c0a1 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.il @@ -0,0 +1,572 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20529.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.20529 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly StaticMethods +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module StaticMethods.exe +// MVID: {D3FCE52A-664A-48CB-A101-57680CEB43F1} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x00400000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private sequential ansi sealed beforefieldinit MyStruct`2<T,U> + extends [mscorlib]System.ValueType +{ + .pack 0 + .size 1 + .method public hidebysig static string + Method(!T param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "Method(T)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::Method + + .method public hidebysig static string + Method(!U param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "Method(U)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::Method + + .method public hidebysig static string + GenMethod<M>(!T param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "GenMethod<M>(T)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::GenMethod + + .method public hidebysig static string + GenMethod<M>(!U param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "GenMethod<M>(U)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::GenMethod + + .method public hidebysig instance string + GenInstMethod<M>(!T param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "GenInstMethod<M>(T)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::GenInstMethod + + .method public hidebysig instance string + GenInstMethod<M>(!U param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "GenInstMethod<M>(U)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::GenInstMethod + + .method public hidebysig instance string + VirtMethod(!T param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "VirtMethod(T)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::VirtMethod + + .method public hidebysig instance string + VirtMethod(!U param) cil managed + { + // Code size 11 (0xb) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldstr "VirtMethod(U)" + IL_0006: stloc.0 + IL_0007: br.s IL_0009 + + IL_0009: ldloc.0 + IL_000a: ret + } // end of method MyStruct`2::VirtMethod + +} // end of class MyStruct`2 + +.class private auto ansi beforefieldinit Caller`4<T,U,V,W> + extends [mscorlib]System.Object +{ + .method public hidebysig instance string + CallMethodT(!U param) cil managed + { + // Code size 12 (0xc) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: call string valuetype MyStruct`2<!U,!V>::Method(!0) + IL_0007: stloc.0 + IL_0008: br.s IL_000a + + IL_000a: ldloc.0 + IL_000b: ret + } // end of method Caller`4::CallMethodT + + .method public hidebysig instance string + CallMethodU(!V param) cil managed + { + // Code size 12 (0xc) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: call string valuetype MyStruct`2<!U,!V>::Method(!1) + IL_0007: stloc.0 + IL_0008: br.s IL_000a + + IL_000a: ldloc.0 + IL_000b: ret + } // end of method Caller`4::CallMethodU + + .method public hidebysig instance string + CallGenMethodT(!U param) cil managed + { + // Code size 12 (0xc) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: call string valuetype MyStruct`2<!U,!V>::GenMethod<!3>(!0) + IL_0007: stloc.0 + IL_0008: br.s IL_000a + + IL_000a: ldloc.0 + IL_000b: ret + } // end of method Caller`4::CallGenMethodT + + .method public hidebysig instance string + CallGenMethodU(!V param) cil managed + { + // Code size 12 (0xc) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: call string valuetype MyStruct`2<!U,!V>::GenMethod<!3>(!1) + IL_0007: stloc.0 + IL_0008: br.s IL_000a + + IL_000a: ldloc.0 + IL_000b: ret + } // end of method Caller`4::CallGenMethodU + + .method public hidebysig instance string + CallGenInstMethodT(!U param) cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0, + valuetype MyStruct`2<!U,!V> V_1) + IL_0000: nop + IL_0001: ldloca.s V_1 + IL_0003: initobj valuetype MyStruct`2<!U,!V> + IL_0009: ldloc.1 + IL_000a: stloc.1 + IL_000b: ldloca.s V_1 + IL_000d: ldarg.1 + IL_000e: call instance string valuetype MyStruct`2<!U,!V>::GenInstMethod<!3>(!0) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Caller`4::CallGenInstMethodT + + .method public hidebysig instance string + CallGenInstMethodU(!V param) cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0, + valuetype MyStruct`2<!U,!V> V_1) + IL_0000: nop + IL_0001: ldloca.s V_1 + IL_0003: initobj valuetype MyStruct`2<!U,!V> + IL_0009: ldloc.1 + IL_000a: stloc.1 + IL_000b: ldloca.s V_1 + IL_000d: ldarg.1 + IL_000e: call instance string valuetype MyStruct`2<!U,!V>::GenInstMethod<!3>(!1) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Caller`4::CallGenInstMethodU + + .method public hidebysig virtual instance string + CallVirtMethodT(!U param) cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0, + valuetype MyStruct`2<!U,!V> V_1) + IL_0000: nop + IL_0001: ldloca.s V_1 + IL_0003: initobj valuetype MyStruct`2<!U,!V> + IL_0009: ldloc.1 + IL_000a: stloc.1 + IL_000b: ldloca.s V_1 + IL_000d: ldarg.1 + IL_000e: call instance string valuetype MyStruct`2<!U,!V>::VirtMethod(!0) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Caller`4::CallVirtMethodT + + .method public hidebysig virtual instance string + CallVirtMethodU(!V param) cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0, + valuetype MyStruct`2<!U,!V> V_1) + IL_0000: nop + IL_0001: ldloca.s V_1 + IL_0003: initobj valuetype MyStruct`2<!U,!V> + IL_0009: ldloc.1 + IL_000a: stloc.1 + IL_000b: ldloca.s V_1 + IL_000d: ldarg.1 + IL_000e: call instance string valuetype MyStruct`2<!U,!V>::VirtMethod(!1) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Caller`4::CallVirtMethodU + + .method public hidebysig instance string + CallParentMethod() cil managed + { + // Code size 29 (0x1d) + .maxstack 1 + .locals init (string V_0, + valuetype MyStruct`2<!U,!V> V_1) + IL_0000: nop + IL_0001: ldloca.s V_1 + IL_0003: initobj valuetype MyStruct`2<!U,!V> + IL_0009: ldloc.1 + IL_000a: stloc.1 + IL_000b: ldloca.s V_1 + IL_000d: constrained. valuetype MyStruct`2<!U,!V> + IL_0013: callvirt instance string [mscorlib]System.Object::ToString() + IL_0018: stloc.0 + IL_0019: br.s IL_001b + + IL_001b: ldloc.0 + IL_001c: ret + } // end of method Caller`4::CallParentMethod + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Caller`4::.ctor + +} // end of class Caller`4 + +.class private auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 + Main() cil managed + { + .entrypoint + // Code size 375 (0x177) + .maxstack 2 + .locals init (int32 V_0, + class Caller`4<valuetype MyStruct`2<string,object>,string,object,object> V_1, + string V_2, + string V_3, + int32 V_4, + bool V_5) + IL_0000: nop + IL_0001: ldc.i4.0 + IL_0002: stloc.0 + IL_0003: newobj instance void class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::.ctor() + IL_0008: stloc.1 + IL_0009: ldloc.1 + IL_000a: ldstr "mystring" + IL_000f: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallMethodT(!1) + IL_0014: stloc.2 + IL_0015: ldloc.1 + IL_0016: newobj instance void [mscorlib]System.Object::.ctor() + IL_001b: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallMethodU(!2) + IL_0020: stloc.3 + IL_0021: ldloc.2 + IL_0022: call void [System.Console]System.Console::WriteLine(string) + IL_0027: nop + IL_0028: ldloc.3 + IL_0029: call void [System.Console]System.Console::WriteLine(string) + IL_002e: nop + IL_002f: ldloc.2 + IL_0030: ldstr "Method(T)" + IL_0035: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_003a: brfalse.s IL_004c + + IL_003c: ldloc.2 + IL_003d: ldstr "Method(U)" + IL_0042: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0047: ldc.i4.0 + IL_0048: ceq + IL_004a: br.s IL_004d + + IL_004c: ldc.i4.1 + IL_004d: stloc.s V_5 + IL_004f: ldloc.s V_5 + IL_0051: brtrue.s IL_0057 + + IL_0053: ldloc.0 + IL_0054: ldc.i4.1 + IL_0055: add + IL_0056: stloc.0 + IL_0057: ldloc.1 + IL_0058: ldstr "mystring" + IL_005d: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenMethodT(!1) + IL_0062: stloc.2 + IL_0063: ldloc.1 + IL_0064: newobj instance void [mscorlib]System.Object::.ctor() + IL_0069: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenMethodU(!2) + IL_006e: stloc.3 + IL_006f: ldloc.2 + IL_0070: call void [System.Console]System.Console::WriteLine(string) + IL_0075: nop + IL_0076: ldloc.3 + IL_0077: call void [System.Console]System.Console::WriteLine(string) + IL_007c: nop + IL_007d: ldloc.2 + IL_007e: ldstr "GenMethod<M>(T)" + IL_0083: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0088: brfalse.s IL_009a + + IL_008a: ldloc.2 + IL_008b: ldstr "GenMethod<M>(U)" + IL_0090: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0095: ldc.i4.0 + IL_0096: ceq + IL_0098: br.s IL_009b + + IL_009a: ldc.i4.1 + IL_009b: stloc.s V_5 + IL_009d: ldloc.s V_5 + IL_009f: brtrue.s IL_00a5 + + IL_00a1: ldloc.0 + IL_00a2: ldc.i4.1 + IL_00a3: add + IL_00a4: stloc.0 + IL_00a5: ldloc.1 + IL_00a6: ldstr "mystring" + IL_00ab: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenInstMethodT(!1) + IL_00b0: stloc.2 + IL_00b1: ldloc.1 + IL_00b2: newobj instance void [mscorlib]System.Object::.ctor() + IL_00b7: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallGenInstMethodU(!2) + IL_00bc: stloc.3 + IL_00bd: ldloc.2 + IL_00be: call void [System.Console]System.Console::WriteLine(string) + IL_00c3: nop + IL_00c4: ldloc.3 + IL_00c5: call void [System.Console]System.Console::WriteLine(string) + IL_00ca: nop + IL_00cb: ldloc.2 + IL_00cc: ldstr "GenInstMethod<M>(T)" + IL_00d1: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_00d6: brfalse.s IL_00e8 + + IL_00d8: ldloc.2 + IL_00d9: ldstr "GenInstMethod<M>(U)" + IL_00de: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_00e3: ldc.i4.0 + IL_00e4: ceq + IL_00e6: br.s IL_00e9 + + IL_00e8: ldc.i4.1 + IL_00e9: stloc.s V_5 + IL_00eb: ldloc.s V_5 + IL_00ed: brtrue.s IL_00f3 + + IL_00ef: ldloc.0 + IL_00f0: ldc.i4.1 + IL_00f1: add + IL_00f2: stloc.0 + IL_00f3: ldloc.1 + IL_00f4: ldstr "mystring" + IL_00f9: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallVirtMethodT(!1) + IL_00fe: stloc.2 + IL_00ff: ldloc.1 + IL_0100: newobj instance void [mscorlib]System.Object::.ctor() + IL_0105: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallVirtMethodU(!2) + IL_010a: stloc.3 + IL_010b: ldloc.2 + IL_010c: call void [System.Console]System.Console::WriteLine(string) + IL_0111: nop + IL_0112: ldloc.3 + IL_0113: call void [System.Console]System.Console::WriteLine(string) + IL_0118: nop + IL_0119: ldloc.2 + IL_011a: ldstr "VirtMethod(T)" + IL_011f: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0124: brfalse.s IL_0136 + + IL_0126: ldloc.2 + IL_0127: ldstr "VirtMethod(U)" + IL_012c: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0131: ldc.i4.0 + IL_0132: ceq + IL_0134: br.s IL_0137 + + IL_0136: ldc.i4.1 + IL_0137: stloc.s V_5 + IL_0139: ldloc.s V_5 + IL_013b: brtrue.s IL_0141 + + IL_013d: ldloc.0 + IL_013e: ldc.i4.1 + IL_013f: add + IL_0140: stloc.0 + IL_0141: ldloc.1 + IL_0142: callvirt instance string class Caller`4<valuetype MyStruct`2<string,object>,string,object,object>::CallParentMethod() + IL_0147: stloc.2 + IL_0148: ldloc.2 + IL_0149: call void [System.Console]System.Console::WriteLine(string) + IL_014e: nop + IL_014f: ldloc.2 + IL_0150: ldstr "MyStruct`2[System.String,System.Object]" + IL_0155: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_015a: ldc.i4.0 + IL_015b: ceq + IL_015d: stloc.s V_5 + IL_015f: ldloc.s V_5 + IL_0161: brtrue.s IL_0167 + + IL_0163: ldloc.0 + IL_0164: ldc.i4.1 + IL_0165: add + IL_0166: stloc.0 + IL_0167: ldloc.0 + IL_0168: brfalse.s IL_016e + + IL_016a: ldc.i4.s -2 + IL_016c: br.s IL_0170 + + IL_016e: ldc.i4.s 100 + IL_0170: stloc.s V_4 + IL_0172: br.s IL_0174 + + IL_0174: ldloc.s V_4 + IL_0176: ret + } // end of method Test::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Test::.ctor + +} // end of class Test + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** +// WARNING: Created Win32 resource file MethodCalls.res diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj new file mode 100644 index 0000000000..f3d90178a4 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/MethodCalls.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>MethodCalls</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="MethodCalls.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il new file mode 100644 index 0000000000..f49b2ed75c --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.il @@ -0,0 +1,343 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20618.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.20618 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly RecursiveGen +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module RecursiveGen.exe +// MVID: {CCE38E80-73AC-4FAC-A7CD-8B523BD6C64F} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x00870000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class interface private abstract auto ansi I`1<S> +{ + .method public hidebysig newslot abstract virtual + instance string Method() cil managed + { + } // end of method I`1::Method + +} // end of class I`1 + +.class private sequential ansi sealed beforefieldinit MyStruct + extends [mscorlib]System.ValueType + implements class I`1<valuetype MyStruct>, + class I`1<object> +{ + .field public int32 n + .method private hidebysig newslot virtual final + instance string 'I<MyStruct>.Method'() cil managed + { + .override method instance string class I`1<valuetype MyStruct>::Method() + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct::n + IL_000f: ldstr "I<MyStruct>.Method()" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct::'I<MyStruct>.Method' + + .method private hidebysig newslot virtual final + instance string 'I<System.Object>.Method'() cil managed + { + .override method instance string class I`1<object>::Method() + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct::n + IL_000f: ldstr "I<object>.Method()" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct::'I<System.Object>.Method' + +} // end of class MyStruct + +.class private sequential ansi sealed beforefieldinit GenStruct`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<valuetype GenStruct`2<!T,!U>>, + class I`1<valuetype GenStruct`2<!U,!T>> +{ + .field public int32 n + .method private hidebysig newslot virtual final instance string 'I<GenStruct<T,U>>.Method'() cil managed + { + .override method instance string class I`1<valuetype GenStruct`2<!T,!U>>::Method() + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype GenStruct`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype GenStruct`2<!T,!U>::n + IL_000f: ldstr "I<GenStruct<T, U>>.Method()" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method GenStruct`2::'I<GenStruct<T,U>>.Method' + + .method private hidebysig newslot virtual final instance string 'I<GenStruct<U,T>>.Method'() cil managed + { + .override method instance string class I`1<valuetype GenStruct`2<!U,!T>>::Method() + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype GenStruct`2<!U,!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype GenStruct`2<!U,!T>::n + IL_000f: ldstr "I<GenStruct<U, T>>.Method()" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method GenStruct`2::'I<GenStruct<T,U>>.Method' + + } // end of class GenStruct`2 + +.class private auto ansi beforefieldinit Conversion1`2<T,(class I`1<!T>) U> + extends [mscorlib]System.Object +{ + .method public hidebysig instance string + Caller(!U& 'instance') cil managed + { + // Code size 18 (0x12) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: constrained. !U + IL_0008: callvirt instance string class I`1<!T>::Method() + IL_000d: stloc.0 + IL_000e: br.s IL_0010 + + IL_0010: ldloc.0 + IL_0011: ret + } // end of method Conversion1`2::Caller + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Conversion1`2::.ctor + +} // end of class Conversion1`2 + +.class private auto ansi beforefieldinit Conversion2`3<T,U,(class I`1<valuetype GenStruct`2<!T,!U>>) V> + extends [mscorlib]System.Object +{ + .method public hidebysig instance string + Caller(!V& 'instance') cil managed + { + // Code size 18 (0x12) + .maxstack 1 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: constrained. !V + IL_0008: callvirt instance string class I`1<valuetype GenStruct`2<!T,!U>>::Method() + IL_000d: stloc.0 + IL_000e: br.s IL_0010 + + IL_0010: ldloc.0 + IL_0011: ret + } // end of method Conversion2`3::Caller + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Conversion2`3::.ctor + +} // end of class Conversion2`3 + +.class private auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 + Main() cil managed + { + .entrypoint + // Code size 206 (0xce) + .maxstack 2 + .locals init (bool V_0, + valuetype MyStruct V_1, + class Conversion1`2<valuetype MyStruct,valuetype MyStruct> V_2, + string V_3, + valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>> V_4, + class Conversion2`3<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>,valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>> V_5, + int32 V_6, + bool V_7) + IL_0000: nop + IL_0001: ldc.i4.1 + IL_0002: stloc.0 + IL_0003: ldloca.s V_1 + IL_0005: initobj MyStruct + IL_000b: newobj instance void class Conversion1`2<valuetype MyStruct,valuetype MyStruct>::.ctor() + IL_0010: stloc.2 + IL_0011: ldloc.2 + IL_0012: ldloca.s V_1 + IL_0014: callvirt instance string class Conversion1`2<valuetype MyStruct,valuetype MyStruct>::Caller(!1&) + IL_0019: stloc.3 + IL_001a: ldloc.3 + IL_001b: call void [System.Console]System.Console::WriteLine(string) + IL_0020: nop + IL_0021: ldloca.s V_1 + IL_0023: ldfld int32 MyStruct::n + IL_0028: call void [System.Console]System.Console::WriteLine(int32) + IL_002d: nop + IL_002e: ldloc.3 + IL_002f: ldstr "I<MyStruct>.Method()" + IL_0034: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0039: brtrue.s IL_0047 + + IL_003b: ldloca.s V_1 + IL_003d: ldfld int32 MyStruct::n + IL_0042: ldc.i4.1 + IL_0043: ceq + IL_0045: br.s IL_0048 + + IL_0047: ldc.i4.0 + IL_0048: stloc.s V_7 + IL_004a: ldloc.s V_7 + IL_004c: brtrue.s IL_0050 + + IL_004e: ldc.i4.0 + IL_004f: stloc.0 + IL_0050: ldloca.s V_4 + IL_0052: initobj valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>> + IL_0058: newobj instance void class Conversion2`3<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>,valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>>::.ctor() + IL_005d: stloc.s V_5 + IL_005f: ldloc.s V_5 + IL_0061: ldloca.s V_4 + IL_0063: callvirt instance string class Conversion2`3<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>,valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>>::Caller(!2&) + IL_0068: stloc.3 + IL_0069: ldloc.3 + IL_006a: call void [System.Console]System.Console::WriteLine(string) + IL_006f: nop + IL_0070: ldloca.s V_4 + IL_0072: ldfld int32 valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>::n + IL_0077: call void [System.Console]System.Console::WriteLine(int32) + IL_007c: nop + IL_007d: ldloc.3 + IL_007e: ldstr "I<GenStruct<T, U>>.Method()" + IL_0083: call bool [mscorlib]System.String::op_Inequality(string, + string) + IL_0088: brtrue.s IL_0096 + + IL_008a: ldloca.s V_4 + IL_008c: ldfld int32 valuetype GenStruct`2<valuetype GenStruct`2<string,object>,valuetype GenStruct`2<object,string>>::n + IL_0091: ldc.i4.1 + IL_0092: ceq + IL_0094: br.s IL_0097 + + IL_0096: ldc.i4.0 + IL_0097: stloc.s V_7 + IL_0099: ldloc.s V_7 + IL_009b: brtrue.s IL_009f + + IL_009d: ldc.i4.0 + IL_009e: stloc.0 + IL_009f: ldloc.0 + IL_00a0: ldc.i4.0 + IL_00a1: ceq + IL_00a3: stloc.s V_7 + IL_00a5: ldloc.s V_7 + IL_00a7: brtrue.s IL_00bb + + IL_00a9: nop + IL_00aa: ldstr "Pass" + IL_00af: call void [System.Console]System.Console::WriteLine(string) + IL_00b4: nop + IL_00b5: ldc.i4.s 100 + IL_00b7: stloc.s V_6 + IL_00b9: br.s IL_00cb + + IL_00bb: ldstr "Fail" + IL_00c0: call void [System.Console]System.Console::WriteLine(string) + IL_00c5: nop + IL_00c6: ldc.i4.m1 + IL_00c7: stloc.s V_6 + IL_00c9: br.s IL_00cb + + IL_00cb: ldloc.s V_6 + IL_00cd: ret + } // end of method Test::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Test::.ctor + +} // end of class Test + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** +// WARNING: Created Win32 resource file RecursiveGen.res diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj new file mode 100644 index 0000000000..dcf6f17463 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/RecursiveGen.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>RecursiveGen</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="RecursiveGen.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il new file mode 100644 index 0000000000..e29fad902f --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.il @@ -0,0 +1,1264 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20528.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.20528 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly SealedTypes +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module SealedTypes.exe +// MVID: {926F9C9D-6690-45EB-B4DA-12725C405BC3} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x016D0000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class interface public abstract auto ansi I`1<S> +{ + .method public hidebysig newslot abstract virtual + instance string Print(!S 'value') cil managed + { + } // end of method I`1::Print + +} // end of class I`1 + +.class public auto ansi sealed beforefieldinit MyStruct1 + extends [mscorlib]System.Object + implements class I`1<string>, + class I`1<object> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(string 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct1::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct1::n + IL_000f: ldstr "Print(string)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct1::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct1::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct1::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct1::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct1::.ctor + +} // end of class MyStruct1 + +.class public auto ansi sealed beforefieldinit MyStruct2 + extends [mscorlib]System.Object + implements class I`1<object>, + class I`1<string> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(string 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct2::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct2::n + IL_000f: ldstr "Print(string)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct2::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct2::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct2::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct2::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct2::.ctor + +} // end of class MyStruct2 + +.class public auto ansi sealed beforefieldinit MyStruct3`2<T,U> + extends [mscorlib]System.Object + implements class I`1<string>, + class I`1<object> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(string 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct3`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct3`2<!T,!U>::n + IL_000f: ldstr "Print(string)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct3`2::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct3`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct3`2<!T,!U>::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct3`2::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct3`2::.ctor + +} // end of class MyStruct3`2 + +.class public auto ansi sealed beforefieldinit MyStruct4`2<T,U> + extends [mscorlib]System.Object + implements class I`1<object>, + class I`1<string> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(string 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct4`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct4`2<!T,!U>::n + IL_000f: ldstr "Print(string)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct4`2::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct4`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct4`2<!T,!U>::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct4`2::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct4`2::.ctor + +} // end of class MyStruct4`2 + +.class public auto ansi sealed beforefieldinit MyStruct5`1<T> + extends [mscorlib]System.Object + implements class I`1<string>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(string 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct5`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct5`1<!T>::n + IL_000f: ldstr "Print(string)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct5`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct5`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct5`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct5`1::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct5`1::.ctor + +} // end of class MyStruct5`1 + +.class public auto ansi sealed beforefieldinit MyStruct6`1<T> + extends [mscorlib]System.Object + implements class I`1<!T>, + class I`1<string> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(string 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct6`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct6`1<!T>::n + IL_000f: ldstr "Print(string)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct6`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct6`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct6`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct6`1::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct6`1::.ctor + +} // end of class MyStruct6`1 + +.class public auto ansi sealed beforefieldinit MyStruct7`1<T> + extends [mscorlib]System.Object + implements class I`1<object>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct7`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct7`1<!T>::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct7`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct7`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct7`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct7`1::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct7`1::.ctor + +} // end of class MyStruct7`1 + +.class public auto ansi sealed beforefieldinit MyStruct8`1<T> + extends [mscorlib]System.Object + implements class I`1<!T>, + class I`1<object> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct8`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct8`1<!T>::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct8`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct8`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct8`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct8`1::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct8`1::.ctor + +} // end of class MyStruct8`1 + +.class public auto ansi sealed beforefieldinit MyStruct9`2<T,U> + extends [mscorlib]System.Object + implements class I`1<!T>, + class I`1<!U> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct9`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct9`2<!T,!U>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct9`2::Print + + .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct9`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct9`2<!T,!U>::n + IL_000f: ldstr "Print_U(" + IL_0014: ldtoken !U + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct9`2::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct9`2::.ctor + +} // end of class MyStruct9`2 + +.class public auto ansi sealed beforefieldinit MyStruct10`2<T,U> + extends [mscorlib]System.Object + implements class I`1<!U>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct10`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct10`2<!T,!U>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct10`2::Print + + .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 class MyStruct10`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 class MyStruct10`2<!T,!U>::n + IL_000f: ldstr "Print_U(" + IL_0014: ldtoken !U + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct10`2::Print + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method MyStruct10`2::.ctor + +} // end of class MyStruct10`2 + +.class private auto ansi beforefieldinit Conversion`2<.ctor (class I`1<!TString>) TMyStruct,TString> + extends [mscorlib]System.Object +{ + .field public !TString 'value' + .method public hidebysig instance string + Caller1() cil managed + { + // Code size 58 (0x3a) + .maxstack 2 + .locals init (!TMyStruct V_0, + string V_1, + !TMyStruct V_2) + IL_0000: nop + IL_0001: ldloca.s V_2 + IL_0003: initobj !TMyStruct + IL_0009: ldloc.2 + IL_000a: box !TMyStruct + IL_000f: brfalse.s IL_001c + + IL_0011: ldloca.s V_2 + IL_0013: initobj !TMyStruct + IL_0019: ldloc.2 + IL_001a: br.s IL_0021 + + IL_001c: call !!0 [mscorlib]System.Activator::CreateInstance<!TMyStruct>() + IL_0021: stloc.0 + IL_0022: ldloca.s V_0 + IL_0024: ldarg.0 + IL_0025: ldfld !1 class Conversion`2<!TMyStruct,!TString>::'value' + IL_002a: constrained. !TMyStruct + IL_0030: callvirt instance string class I`1<!TString>::Print(!0) + IL_0035: stloc.1 + IL_0036: br.s IL_0038 + + IL_0038: ldloc.1 + IL_0039: ret + } // end of method Conversion`2::Caller1 + + .method public hidebysig instance string + Caller2(!TMyStruct& 'instance') cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldarg.0 + IL_0003: ldfld !1 class Conversion`2<!TMyStruct,!TString>::'value' + IL_0008: constrained. !TMyStruct + IL_000e: callvirt instance string class I`1<!TString>::Print(!0) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Conversion`2::Caller2 + + .method public hidebysig instance string + Caller3(!TMyStruct& 'instance', + !TString param) cil managed + { + // Code size 19 (0x13) + .maxstack 2 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldarg.2 + IL_0003: constrained. !TMyStruct + IL_0009: callvirt instance string class I`1<!TString>::Print(!0) + IL_000e: stloc.0 + IL_000f: br.s IL_0011 + + IL_0011: ldloc.0 + IL_0012: ret + } // end of method Conversion`2::Caller3 + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Conversion`2::.ctor + +} // end of class Conversion`2 + +.class private auto ansi beforefieldinit Program + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 + Verification(string res1, + string res2, + string res3, + string expected, + int32 n) cil managed + { + // Code size 150 (0x96) + .maxstack 2 + .locals init (int32 V_0, + bool V_1) + IL_0000: nop + IL_0001: ldstr " " + IL_0006: ldarg.0 + IL_0007: call string [mscorlib]System.String::Concat(string, + string) + IL_000c: call void [System.Console]System.Console::WriteLine(string) + IL_0011: nop + IL_0012: ldstr " " + IL_0017: ldarg.1 + IL_0018: call string [mscorlib]System.String::Concat(string, + string) + IL_001d: call void [System.Console]System.Console::WriteLine(string) + IL_0022: nop + IL_0023: ldstr " " + IL_0028: ldarg.2 + IL_0029: call string [mscorlib]System.String::Concat(string, + string) + IL_002e: call void [System.Console]System.Console::WriteLine(string) + IL_0033: nop + IL_0034: ldstr " " + IL_0039: ldarg.s n + IL_003b: box [mscorlib]System.Int32 + IL_0040: call string [mscorlib]System.String::Concat(object, + object) + IL_0045: call void [System.Console]System.Console::WriteLine(string) + IL_004a: nop + IL_004b: ldarg.0 + IL_004c: ldarg.3 + IL_004d: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_0052: brfalse.s IL_0070 + + IL_0054: ldarg.1 + IL_0055: ldarg.3 + IL_0056: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_005b: brfalse.s IL_0070 + + IL_005d: ldarg.2 + IL_005e: ldarg.3 + IL_005f: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_0064: brfalse.s IL_0070 + + IL_0066: ldarg.s n + IL_0068: ldc.i4.2 + IL_0069: ceq + IL_006b: ldc.i4.0 + IL_006c: ceq + IL_006e: br.s IL_0071 + + IL_0070: ldc.i4.1 + IL_0071: stloc.1 + IL_0072: ldloc.1 + IL_0073: brtrue.s IL_0085 + + IL_0075: nop + IL_0076: ldstr "PASS\n" + IL_007b: call void [System.Console]System.Console::WriteLine(string) + IL_0080: nop + IL_0081: ldc.i4.0 + IL_0082: stloc.0 + IL_0083: br.s IL_0094 + + IL_0085: ldstr "FAIL\n" + IL_008a: call void [System.Console]System.Console::WriteLine(string) + IL_008f: nop + IL_0090: ldc.i4.1 + IL_0091: stloc.0 + IL_0092: br.s IL_0094 + + IL_0094: ldloc.0 + IL_0095: ret + } // end of method Program::Verification + + .method private hidebysig static int32 + Main(string[] args) cil managed + { + .entrypoint + // Code size 882 (0x372) + .maxstack 6 + .locals init (int32 V_0, + class MyStruct1 V_1, + class MyStruct2 V_2, + class MyStruct3`2<object,object> V_3, + class MyStruct4`2<object,object> V_4, + class MyStruct5`1<object> V_5, + class MyStruct6`1<object> V_6, + class MyStruct7`1<string> V_7, + class MyStruct8`1<string> V_8, + class MyStruct9`2<string,object> V_9, + class MyStruct10`2<string,object> V_10, + class Conversion`2<class MyStruct1,string> V_11, + class Conversion`2<class MyStruct2,string> V_12, + class Conversion`2<class MyStruct3`2<object,object>,string> V_13, + class Conversion`2<class MyStruct4`2<object,object>,string> V_14, + class Conversion`2<class MyStruct5`1<object>,string> V_15, + class Conversion`2<class MyStruct6`1<object>,string> V_16, + class Conversion`2<class MyStruct7`1<string>,string> V_17, + class Conversion`2<class MyStruct8`1<string>,string> V_18, + class Conversion`2<class MyStruct9`2<string,object>,string> V_19, + class Conversion`2<class MyStruct10`2<string,object>,string> V_20, + string V_21, + string V_22, + string V_23, + int32 V_24) + IL_0000: nop + IL_0001: ldc.i4.0 + IL_0002: stloc.0 + IL_0003: newobj instance void MyStruct1::.ctor() + IL_0008: stloc.1 + IL_0009: newobj instance void MyStruct2::.ctor() + IL_000e: stloc.2 + IL_000f: newobj instance void class MyStruct3`2<object,object>::.ctor() + IL_0014: stloc.3 + IL_0015: newobj instance void class MyStruct4`2<object,object>::.ctor() + IL_001a: stloc.s V_4 + IL_001c: newobj instance void class MyStruct5`1<object>::.ctor() + IL_0021: stloc.s V_5 + IL_0023: newobj instance void class MyStruct6`1<object>::.ctor() + IL_0028: stloc.s V_6 + IL_002a: newobj instance void class MyStruct7`1<string>::.ctor() + IL_002f: stloc.s V_7 + IL_0031: newobj instance void class MyStruct8`1<string>::.ctor() + IL_0036: stloc.s V_8 + IL_0038: newobj instance void class MyStruct9`2<string,object>::.ctor() + IL_003d: stloc.s V_9 + IL_003f: newobj instance void class MyStruct10`2<string,object>::.ctor() + IL_0044: stloc.s V_10 + IL_0046: newobj instance void class Conversion`2<class MyStruct1,string>::.ctor() + IL_004b: stloc.s V_11 + IL_004d: newobj instance void class Conversion`2<class MyStruct2,string>::.ctor() + IL_0052: stloc.s V_12 + IL_0054: newobj instance void class Conversion`2<class MyStruct3`2<object,object>,string>::.ctor() + IL_0059: stloc.s V_13 + IL_005b: newobj instance void class Conversion`2<class MyStruct4`2<object,object>,string>::.ctor() + IL_0060: stloc.s V_14 + IL_0062: newobj instance void class Conversion`2<class MyStruct5`1<object>,string>::.ctor() + IL_0067: stloc.s V_15 + IL_0069: newobj instance void class Conversion`2<class MyStruct6`1<object>,string>::.ctor() + IL_006e: stloc.s V_16 + IL_0070: newobj instance void class Conversion`2<class MyStruct7`1<string>,string>::.ctor() + IL_0075: stloc.s V_17 + IL_0077: newobj instance void class Conversion`2<class MyStruct8`1<string>,string>::.ctor() + IL_007c: stloc.s V_18 + IL_007e: newobj instance void class Conversion`2<class MyStruct9`2<string,object>,string>::.ctor() + IL_0083: stloc.s V_19 + IL_0085: newobj instance void class Conversion`2<class MyStruct10`2<string,object>,string>::.ctor() + IL_008a: stloc.s V_20 + IL_008c: ldstr "TEST1:" + IL_0091: call void [System.Console]System.Console::WriteLine(string) + IL_0096: nop + IL_0097: ldloc.s V_11 + IL_0099: callvirt instance string class Conversion`2<class MyStruct1,string>::Caller1() + IL_009e: stloc.s V_21 + IL_00a0: ldloc.s V_11 + IL_00a2: ldloca.s V_1 + IL_00a4: callvirt instance string class Conversion`2<class MyStruct1,string>::Caller2(!0&) + IL_00a9: stloc.s V_22 + IL_00ab: ldloc.s V_11 + IL_00ad: ldloca.s V_1 + IL_00af: ldstr "mystring" + IL_00b4: callvirt instance string class Conversion`2<class MyStruct1,string>::Caller3(!0&, + !1) + IL_00b9: stloc.s V_23 + IL_00bb: ldloc.0 + IL_00bc: ldloc.s V_21 + IL_00be: ldloc.s V_22 + IL_00c0: ldloc.s V_23 + IL_00c2: ldstr "Print(string)" + IL_00c7: ldloc.1 + IL_00c8: ldfld int32 MyStruct1::n + IL_00cd: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_00d2: add + IL_00d3: stloc.0 + IL_00d4: ldstr "TEST2:" + IL_00d9: call void [System.Console]System.Console::WriteLine(string) + IL_00de: nop + IL_00df: ldloc.s V_12 + IL_00e1: callvirt instance string class Conversion`2<class MyStruct2,string>::Caller1() + IL_00e6: stloc.s V_21 + IL_00e8: ldloc.s V_12 + IL_00ea: ldloca.s V_2 + IL_00ec: callvirt instance string class Conversion`2<class MyStruct2,string>::Caller2(!0&) + IL_00f1: stloc.s V_22 + IL_00f3: ldloc.s V_12 + IL_00f5: ldloca.s V_2 + IL_00f7: ldstr "mystring" + IL_00fc: callvirt instance string class Conversion`2<class MyStruct2,string>::Caller3(!0&, + !1) + IL_0101: stloc.s V_23 + IL_0103: ldloc.0 + IL_0104: ldloc.s V_21 + IL_0106: ldloc.s V_22 + IL_0108: ldloc.s V_23 + IL_010a: ldstr "Print(string)" + IL_010f: ldloc.2 + IL_0110: ldfld int32 MyStruct2::n + IL_0115: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_011a: add + IL_011b: stloc.0 + IL_011c: ldstr "TEST3:" + IL_0121: call void [System.Console]System.Console::WriteLine(string) + IL_0126: nop + IL_0127: ldloc.s V_13 + IL_0129: callvirt instance string class Conversion`2<class MyStruct3`2<object,object>,string>::Caller1() + IL_012e: stloc.s V_21 + IL_0130: ldloc.s V_13 + IL_0132: ldloca.s V_3 + IL_0134: callvirt instance string class Conversion`2<class MyStruct3`2<object,object>,string>::Caller2(!0&) + IL_0139: stloc.s V_22 + IL_013b: ldloc.s V_13 + IL_013d: ldloca.s V_3 + IL_013f: ldstr "mystring" + IL_0144: callvirt instance string class Conversion`2<class MyStruct3`2<object,object>,string>::Caller3(!0&, + !1) + IL_0149: stloc.s V_23 + IL_014b: ldloc.0 + IL_014c: ldloc.s V_21 + IL_014e: ldloc.s V_22 + IL_0150: ldloc.s V_23 + IL_0152: ldstr "Print(string)" + IL_0157: ldloc.3 + IL_0158: ldfld int32 class MyStruct3`2<object,object>::n + IL_015d: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0162: add + IL_0163: stloc.0 + IL_0164: ldstr "TEST4:" + IL_0169: call void [System.Console]System.Console::WriteLine(string) + IL_016e: nop + IL_016f: ldloc.s V_14 + IL_0171: callvirt instance string class Conversion`2<class MyStruct4`2<object,object>,string>::Caller1() + IL_0176: stloc.s V_21 + IL_0178: ldloc.s V_14 + IL_017a: ldloca.s V_4 + IL_017c: callvirt instance string class Conversion`2<class MyStruct4`2<object,object>,string>::Caller2(!0&) + IL_0181: stloc.s V_22 + IL_0183: ldloc.s V_14 + IL_0185: ldloca.s V_4 + IL_0187: ldstr "mystring" + IL_018c: callvirt instance string class Conversion`2<class MyStruct4`2<object,object>,string>::Caller3(!0&, + !1) + IL_0191: stloc.s V_23 + IL_0193: ldloc.0 + IL_0194: ldloc.s V_21 + IL_0196: ldloc.s V_22 + IL_0198: ldloc.s V_23 + IL_019a: ldstr "Print(string)" + IL_019f: ldloc.s V_4 + IL_01a1: ldfld int32 class MyStruct4`2<object,object>::n + IL_01a6: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_01ab: add + IL_01ac: stloc.0 + IL_01ad: ldstr "TEST5:" + IL_01b2: call void [System.Console]System.Console::WriteLine(string) + IL_01b7: nop + IL_01b8: ldloc.s V_15 + IL_01ba: callvirt instance string class Conversion`2<class MyStruct5`1<object>,string>::Caller1() + IL_01bf: stloc.s V_21 + IL_01c1: ldloc.s V_15 + IL_01c3: ldloca.s V_5 + IL_01c5: callvirt instance string class Conversion`2<class MyStruct5`1<object>,string>::Caller2(!0&) + IL_01ca: stloc.s V_22 + IL_01cc: ldloc.s V_15 + IL_01ce: ldloca.s V_5 + IL_01d0: ldstr "mystring" + IL_01d5: callvirt instance string class Conversion`2<class MyStruct5`1<object>,string>::Caller3(!0&, + !1) + IL_01da: stloc.s V_23 + IL_01dc: ldloc.0 + IL_01dd: ldloc.s V_21 + IL_01df: ldloc.s V_22 + IL_01e1: ldloc.s V_23 + IL_01e3: ldstr "Print(string)" + IL_01e8: ldloc.s V_5 + IL_01ea: ldfld int32 class MyStruct5`1<object>::n + IL_01ef: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_01f4: add + IL_01f5: stloc.0 + IL_01f6: ldstr "TEST6:" + IL_01fb: call void [System.Console]System.Console::WriteLine(string) + IL_0200: nop + IL_0201: ldloc.s V_16 + IL_0203: callvirt instance string class Conversion`2<class MyStruct6`1<object>,string>::Caller1() + IL_0208: stloc.s V_21 + IL_020a: ldloc.s V_16 + IL_020c: ldloca.s V_6 + IL_020e: callvirt instance string class Conversion`2<class MyStruct6`1<object>,string>::Caller2(!0&) + IL_0213: stloc.s V_22 + IL_0215: ldloc.s V_16 + IL_0217: ldloca.s V_6 + IL_0219: ldstr "mystring" + IL_021e: callvirt instance string class Conversion`2<class MyStruct6`1<object>,string>::Caller3(!0&, + !1) + IL_0223: stloc.s V_23 + IL_0225: ldloc.0 + IL_0226: ldloc.s V_21 + IL_0228: ldloc.s V_22 + IL_022a: ldloc.s V_23 + IL_022c: ldstr "Print(string)" + IL_0231: ldloc.s V_6 + IL_0233: ldfld int32 class MyStruct6`1<object>::n + IL_0238: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_023d: add + IL_023e: stloc.0 + IL_023f: ldstr "TEST7:" + IL_0244: call void [System.Console]System.Console::WriteLine(string) + IL_0249: nop + IL_024a: ldloc.s V_17 + IL_024c: callvirt instance string class Conversion`2<class MyStruct7`1<string>,string>::Caller1() + IL_0251: stloc.s V_21 + IL_0253: ldloc.s V_17 + IL_0255: ldloca.s V_7 + IL_0257: callvirt instance string class Conversion`2<class MyStruct7`1<string>,string>::Caller2(!0&) + IL_025c: stloc.s V_22 + IL_025e: ldloc.s V_17 + IL_0260: ldloca.s V_7 + IL_0262: ldstr "mystring" + IL_0267: callvirt instance string class Conversion`2<class MyStruct7`1<string>,string>::Caller3(!0&, + !1) + IL_026c: stloc.s V_23 + IL_026e: ldloc.0 + IL_026f: ldloc.s V_21 + IL_0271: ldloc.s V_22 + IL_0273: ldloc.s V_23 + IL_0275: ldstr "Print_T(System.String)" + IL_027a: ldloc.s V_7 + IL_027c: ldfld int32 class MyStruct7`1<string>::n + IL_0281: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0286: add + IL_0287: stloc.0 + IL_0288: ldstr "TEST8:" + IL_028d: call void [System.Console]System.Console::WriteLine(string) + IL_0292: nop + IL_0293: ldloc.s V_18 + IL_0295: callvirt instance string class Conversion`2<class MyStruct8`1<string>,string>::Caller1() + IL_029a: stloc.s V_21 + IL_029c: ldloc.s V_18 + IL_029e: ldloca.s V_8 + IL_02a0: callvirt instance string class Conversion`2<class MyStruct8`1<string>,string>::Caller2(!0&) + IL_02a5: stloc.s V_22 + IL_02a7: ldloc.s V_18 + IL_02a9: ldloca.s V_8 + IL_02ab: ldstr "mystring" + IL_02b0: callvirt instance string class Conversion`2<class MyStruct8`1<string>,string>::Caller3(!0&, + !1) + IL_02b5: stloc.s V_23 + IL_02b7: ldloc.0 + IL_02b8: ldloc.s V_21 + IL_02ba: ldloc.s V_22 + IL_02bc: ldloc.s V_23 + IL_02be: ldstr "Print_T(System.String)" + IL_02c3: ldloc.s V_8 + IL_02c5: ldfld int32 class MyStruct8`1<string>::n + IL_02ca: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_02cf: add + IL_02d0: stloc.0 + IL_02d1: ldstr "TEST9:" + IL_02d6: call void [System.Console]System.Console::WriteLine(string) + IL_02db: nop + IL_02dc: ldloc.s V_19 + IL_02de: callvirt instance string class Conversion`2<class MyStruct9`2<string,object>,string>::Caller1() + IL_02e3: stloc.s V_21 + IL_02e5: ldloc.s V_19 + IL_02e7: ldloca.s V_9 + IL_02e9: callvirt instance string class Conversion`2<class MyStruct9`2<string,object>,string>::Caller2(!0&) + IL_02ee: stloc.s V_22 + IL_02f0: ldloc.s V_19 + IL_02f2: ldloca.s V_9 + IL_02f4: ldstr "mystring" + IL_02f9: callvirt instance string class Conversion`2<class MyStruct9`2<string,object>,string>::Caller3(!0&, + !1) + IL_02fe: stloc.s V_23 + IL_0300: ldloc.0 + IL_0301: ldloc.s V_21 + IL_0303: ldloc.s V_22 + IL_0305: ldloc.s V_23 + IL_0307: ldstr "Print_T(System.String)" + IL_030c: ldloc.s V_9 + IL_030e: ldfld int32 class MyStruct9`2<string,object>::n + IL_0313: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0318: add + IL_0319: stloc.0 + IL_031a: ldstr "TEST10:" + IL_031f: call void [System.Console]System.Console::WriteLine(string) + IL_0324: nop + IL_0325: ldloc.s V_20 + IL_0327: callvirt instance string class Conversion`2<class MyStruct10`2<string,object>,string>::Caller1() + IL_032c: stloc.s V_21 + IL_032e: ldloc.s V_20 + IL_0330: ldloca.s V_10 + IL_0332: callvirt instance string class Conversion`2<class MyStruct10`2<string,object>,string>::Caller2(!0&) + IL_0337: stloc.s V_22 + IL_0339: ldloc.s V_20 + IL_033b: ldloca.s V_10 + IL_033d: ldstr "mystring" + IL_0342: callvirt instance string class Conversion`2<class MyStruct10`2<string,object>,string>::Caller3(!0&, + !1) + IL_0347: stloc.s V_23 + IL_0349: ldloc.0 + IL_034a: ldloc.s V_21 + IL_034c: ldloc.s V_22 + IL_034e: ldloc.s V_23 + IL_0350: ldstr "Print_T(System.String)" + IL_0355: ldloc.s V_10 + IL_0357: ldfld int32 class MyStruct10`2<string,object>::n + IL_035c: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0361: add + IL_0362: stloc.0 + IL_0363: ldloc.0 + IL_0364: brfalse.s IL_0369 + + IL_0366: ldc.i4.m1 + IL_0367: br.s IL_036b + + IL_0369: ldc.i4.s 100 + IL_036b: stloc.s V_24 + IL_036d: br.s IL_036f + + IL_036f: ldloc.s V_24 + IL_0371: ret + } // end of method Program::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Program::.ctor + +} // end of class Program + + +// ============================================================= + +// *********** DISASSEMBLY COMPLETE *********************** +// WARNING: Created Win32 resource file SealedTypes.res diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj new file mode 100644 index 0000000000..0788325260 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/SealedTypes.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>SealedTypes</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="SealedTypes.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il new file mode 100644 index 0000000000..066bdee1a4 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.il @@ -0,0 +1,819 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20528.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.20528 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly Variance1 +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module Variance1.exe +// MVID: {DC3FB067-F52C-4120-BD62-DFA180241B4B} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x009D0000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class interface private abstract auto ansi I`1<-S> +{ + .method public hidebysig newslot abstract virtual + instance string Print(!S 'value') cil managed + { + } // end of method I`1::Print + +} // end of class I`1 + +.class public auto ansi beforefieldinit CBase + extends [mscorlib]System.Object +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method CBase::.ctor + +} // end of class CBase + +.class public auto ansi beforefieldinit CDerived + extends CBase +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void CBase::.ctor() + IL_0006: ret + } // end of method CDerived::.ctor + +} // end of class CDerived + +.class public sequential ansi sealed beforefieldinit MyStruct1 + extends [mscorlib]System.ValueType + implements class I`1<class CDerived>, + class I`1<object> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct1::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct1::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct1::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct1::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct1::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct1::Print + +} // end of class MyStruct1 + +.class public sequential ansi sealed beforefieldinit MyStruct2 + extends [mscorlib]System.ValueType + implements class I`1<object>, + class I`1<class CDerived> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct2::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct2::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct2::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct2::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct2::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct2::Print + +} // end of class MyStruct2 + +.class public sequential ansi sealed beforefieldinit MyStruct3`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<class CDerived>, + class I`1<object> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct3`2::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct3`2::Print + +} // end of class MyStruct3`2 + +.class public sequential ansi sealed beforefieldinit MyStruct4`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<object>, + class I`1<class CDerived> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct4`2::Print + + .method public hidebysig newslot virtual final + instance string Print(object 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_000f: ldstr "Print(object)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct4`2::Print + +} // end of class MyStruct4`2 + +.class public sequential ansi sealed beforefieldinit MyStruct5`1<T> + extends [mscorlib]System.ValueType + implements class I`1<class CDerived>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct5`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct5`1::Print + +} // end of class MyStruct5`1 + +.class public sequential ansi sealed beforefieldinit MyStruct6`1<T> + extends [mscorlib]System.ValueType + implements class I`1<!T>, + class I`1<class CDerived> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct6`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct6`1::Print + +} // end of class MyStruct6`1 + +.class private auto ansi beforefieldinit Conversion`2<.ctor (class I`1<!TCBase>) TMyStruct,TCBase> + extends [mscorlib]System.Object +{ + .field public !TCBase 'value' + .method public hidebysig instance string + Caller1() cil managed + { + // Code size 58 (0x3a) + .maxstack 2 + .locals init (!TMyStruct V_0, + string V_1, + !TMyStruct V_2) + IL_0000: nop + IL_0001: ldloca.s V_2 + IL_0003: initobj !TMyStruct + IL_0009: ldloc.2 + IL_000a: box !TMyStruct + IL_000f: brfalse.s IL_001c + + IL_0011: ldloca.s V_2 + IL_0013: initobj !TMyStruct + IL_0019: ldloc.2 + IL_001a: br.s IL_0021 + + IL_001c: call !!0 [mscorlib]System.Activator::CreateInstance<!TMyStruct>() + IL_0021: stloc.0 + IL_0022: ldloca.s V_0 + IL_0024: ldarg.0 + IL_0025: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value' + IL_002a: constrained. !TMyStruct + IL_0030: callvirt instance string class I`1<!TCBase>::Print(!0) + IL_0035: stloc.1 + IL_0036: br.s IL_0038 + + IL_0038: ldloc.1 + IL_0039: ret + } // end of method Conversion`2::Caller1 + + .method public hidebysig instance string + Caller2(!TMyStruct& 'instance') cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldarg.0 + IL_0003: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value' + IL_0008: constrained. !TMyStruct + IL_000e: callvirt instance string class I`1<!TCBase>::Print(!0) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Conversion`2::Caller2 + + .method public hidebysig instance string + Caller3(!TMyStruct& 'instance', + !TCBase param) cil managed + { + // Code size 19 (0x13) + .maxstack 2 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldarg.2 + IL_0003: constrained. !TMyStruct + IL_0009: callvirt instance string class I`1<!TCBase>::Print(!0) + IL_000e: stloc.0 + IL_000f: br.s IL_0011 + + IL_0011: ldloc.0 + IL_0012: ret + } // end of method Conversion`2::Caller3 + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Conversion`2::.ctor + +} // end of class Conversion`2 + + +.class private auto ansi beforefieldinit Program + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 + Verification(string res1, + string res2, + string res3, + string expected, + int32 n) cil managed + { + // Code size 150 (0x96) + .maxstack 2 + .locals init (int32 V_0, + bool V_1) + IL_0000: nop + IL_0001: ldstr " " + IL_0006: ldarg.0 + IL_0007: call string [mscorlib]System.String::Concat(string, + string) + IL_000c: call void [System.Console]System.Console::WriteLine(string) + IL_0011: nop + IL_0012: ldstr " " + IL_0017: ldarg.1 + IL_0018: call string [mscorlib]System.String::Concat(string, + string) + IL_001d: call void [System.Console]System.Console::WriteLine(string) + IL_0022: nop + IL_0023: ldstr " " + IL_0028: ldarg.2 + IL_0029: call string [mscorlib]System.String::Concat(string, + string) + IL_002e: call void [System.Console]System.Console::WriteLine(string) + IL_0033: nop + IL_0034: ldstr " " + IL_0039: ldarg.s n + IL_003b: box [mscorlib]System.Int32 + IL_0040: call string [mscorlib]System.String::Concat(object, + object) + IL_0045: call void [System.Console]System.Console::WriteLine(string) + IL_004a: nop + IL_004b: ldarg.0 + IL_004c: ldarg.3 + IL_004d: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_0052: brfalse.s IL_0070 + + IL_0054: ldarg.1 + IL_0055: ldarg.3 + IL_0056: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_005b: brfalse.s IL_0070 + + IL_005d: ldarg.2 + IL_005e: ldarg.3 + IL_005f: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_0064: brfalse.s IL_0070 + + IL_0066: ldarg.s n + IL_0068: ldc.i4.2 + IL_0069: ceq + IL_006b: ldc.i4.0 + IL_006c: ceq + IL_006e: br.s IL_0071 + + IL_0070: ldc.i4.1 + IL_0071: stloc.1 + IL_0072: ldloc.1 + IL_0073: brtrue.s IL_0085 + + IL_0075: nop + IL_0076: ldstr "PASS\n" + IL_007b: call void [System.Console]System.Console::WriteLine(string) + IL_0080: nop + IL_0081: ldc.i4.0 + IL_0082: stloc.0 + IL_0083: br.s IL_0094 + + IL_0085: ldstr "FAIL\n" + IL_008a: call void [System.Console]System.Console::WriteLine(string) + IL_008f: nop + IL_0090: ldc.i4.1 + IL_0091: stloc.0 + IL_0092: br.s IL_0094 + + IL_0094: ldloc.0 + IL_0095: ret + } // end of method Program::Verification + + .method private hidebysig static int32 + Main(string[] args) cil managed + { + .entrypoint + // Code size 898 (0x382) + .maxstack 6 + .locals init (int32 V_0, + valuetype MyStruct1 V_1, + valuetype MyStruct2 V_2, + valuetype MyStruct3`2<object,object> V_3, + valuetype MyStruct4`2<object,object> V_4, + valuetype MyStruct5`1<object> V_5, + valuetype MyStruct6`1<object> V_6, + class Conversion`2<valuetype MyStruct1,class CBase> V_11, + class Conversion`2<valuetype MyStruct2,class CBase> V_12, + class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase> V_13, + class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase> V_14, + class Conversion`2<valuetype MyStruct5`1<object>,class CBase> V_15, + class Conversion`2<valuetype MyStruct6`1<object>,class CBase> V_16, + string V_21, + string V_22, + string V_23, + int32 V_24) + IL_0000: nop + IL_0001: ldc.i4.0 + IL_0002: stloc.0 + IL_0003: ldloca.s V_1 + IL_0005: initobj MyStruct1 + IL_000b: ldloca.s V_2 + IL_000d: initobj MyStruct2 + IL_0013: ldloca.s V_3 + IL_0015: initobj valuetype MyStruct3`2<object,object> + IL_001b: ldloca.s V_4 + IL_001d: initobj valuetype MyStruct4`2<object,object> + IL_0023: ldloca.s V_5 + IL_0025: initobj valuetype MyStruct5`1<object> + IL_002b: ldloca.s V_6 + IL_002d: initobj valuetype MyStruct6`1<object> + IL_0053: newobj instance void class Conversion`2<valuetype MyStruct1,class CBase>::.ctor() + IL_0058: stloc.s V_11 + IL_005a: newobj instance void class Conversion`2<valuetype MyStruct2,class CBase>::.ctor() + IL_005f: stloc.s V_12 + IL_0061: newobj instance void class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::.ctor() + IL_0066: stloc.s V_13 + IL_0068: newobj instance void class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::.ctor() + IL_006d: stloc.s V_14 + IL_006f: newobj instance void class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::.ctor() + IL_0074: stloc.s V_15 + IL_0076: newobj instance void class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::.ctor() + IL_007b: stloc.s V_16 + IL_0099: ldstr "TEST1:" + IL_009e: call void [System.Console]System.Console::WriteLine(string) + IL_00a3: nop + IL_00a4: ldloc.s V_11 + IL_00a6: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller1() + IL_00ab: stloc.s V_21 + IL_00ad: ldloc.s V_11 + IL_00af: ldloca.s V_1 + IL_00b1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller2(!0&) + IL_00b6: stloc.s V_22 + IL_00b8: ldloc.s V_11 + IL_00ba: ldloca.s V_1 + IL_00bc: newobj instance void class CBase::.ctor() + IL_00c1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller3(!0&, + !1) + IL_00c6: stloc.s V_23 + IL_00c8: ldloc.0 + IL_00c9: ldloc.s V_21 + IL_00cb: ldloc.s V_22 + IL_00cd: ldloc.s V_23 + IL_00cf: ldstr "Print(object)" + IL_00d4: ldloca.s V_1 + IL_00d6: ldfld int32 MyStruct1::n + IL_00db: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_00e0: add + IL_00e1: stloc.0 + IL_00e2: ldstr "TEST2:" + IL_00e7: call void [System.Console]System.Console::WriteLine(string) + IL_00ec: nop + IL_00ed: ldloc.s V_12 + IL_00ef: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller1() + IL_00f4: stloc.s V_21 + IL_00f6: ldloc.s V_12 + IL_00f8: ldloca.s V_2 + IL_00fa: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller2(!0&) + IL_00ff: stloc.s V_22 + IL_0101: ldloc.s V_12 + IL_0103: ldloca.s V_2 + IL_0105: newobj instance void class CBase::.ctor() + IL_010a: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller3(!0&, + !1) + IL_010f: stloc.s V_23 + IL_0111: ldloc.0 + IL_0112: ldloc.s V_21 + IL_0114: ldloc.s V_22 + IL_0116: ldloc.s V_23 + IL_0118: ldstr "Print(object)" + IL_011d: ldloca.s V_2 + IL_011f: ldfld int32 MyStruct2::n + IL_0124: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0129: add + IL_012a: stloc.0 + IL_012b: ldstr "TEST3:" + IL_0130: call void [System.Console]System.Console::WriteLine(string) + IL_0135: nop + IL_0136: ldloc.s V_13 + IL_0138: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller1() + IL_013d: stloc.s V_21 + IL_013f: ldloc.s V_13 + IL_0141: ldloca.s V_3 + IL_0143: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller2(!0&) + IL_0148: stloc.s V_22 + IL_014a: ldloc.s V_13 + IL_014c: ldloca.s V_3 + IL_014e: newobj instance void class CBase::.ctor() + IL_0153: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller3(!0&, + !1) + IL_0158: stloc.s V_23 + IL_015a: ldloc.0 + IL_015b: ldloc.s V_21 + IL_015d: ldloc.s V_22 + IL_015f: ldloc.s V_23 + IL_0161: ldstr "Print(object)" + IL_0166: ldloca.s V_3 + IL_0168: ldfld int32 valuetype MyStruct3`2<object,object>::n + IL_016d: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0172: add + IL_0173: stloc.0 + IL_0174: ldstr "TEST4:" + IL_0179: call void [System.Console]System.Console::WriteLine(string) + IL_017e: nop + IL_017f: ldloc.s V_14 + IL_0181: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller1() + IL_0186: stloc.s V_21 + IL_0188: ldloc.s V_14 + IL_018a: ldloca.s V_4 + IL_018c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller2(!0&) + IL_0191: stloc.s V_22 + IL_0193: ldloc.s V_14 + IL_0195: ldloca.s V_4 + IL_0197: newobj instance void class CBase::.ctor() + IL_019c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller3(!0&, + !1) + IL_01a1: stloc.s V_23 + IL_01a3: ldloc.0 + IL_01a4: ldloc.s V_21 + IL_01a6: ldloc.s V_22 + IL_01a8: ldloc.s V_23 + IL_01aa: ldstr "Print(object)" + IL_01af: ldloca.s V_4 + IL_01b1: ldfld int32 valuetype MyStruct4`2<object,object>::n + IL_01b6: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_01bb: add + IL_01bc: stloc.0 + IL_01bd: ldstr "TEST5:" + IL_01c2: call void [System.Console]System.Console::WriteLine(string) + IL_01c7: nop + IL_01c8: ldloc.s V_15 + IL_01ca: callvirt instance string class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::Caller1() + IL_01cf: stloc.s V_21 + IL_01d1: ldloc.s V_15 + IL_01d3: ldloca.s V_5 + IL_01d5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::Caller2(!0&) + IL_01da: stloc.s V_22 + IL_01dc: ldloc.s V_15 + IL_01de: ldloca.s V_5 + IL_01e0: newobj instance void class CBase::.ctor() + IL_01e5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<object>,class CBase>::Caller3(!0&, + !1) + IL_01ea: stloc.s V_23 + IL_01ec: ldloc.0 + IL_01ed: ldloc.s V_21 + IL_01ef: ldloc.s V_22 + IL_01f1: ldloc.s V_23 + IL_01f3: ldstr "Print_T(System.Object)" + IL_01f8: ldloca.s V_5 + IL_01fa: ldfld int32 valuetype MyStruct5`1<object>::n + IL_01ff: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0204: add + IL_0205: stloc.0 + IL_0206: ldstr "TEST6:" + IL_020b: call void [System.Console]System.Console::WriteLine(string) + IL_0210: nop + IL_0211: ldloc.s V_16 + IL_0213: callvirt instance string class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::Caller1() + IL_0218: stloc.s V_21 + IL_021a: ldloc.s V_16 + IL_021c: ldloca.s V_6 + IL_021e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::Caller2(!0&) + IL_0223: stloc.s V_22 + IL_0225: ldloc.s V_16 + IL_0227: ldloca.s V_6 + IL_0229: newobj instance void class CBase::.ctor() + IL_022e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<object>,class CBase>::Caller3(!0&, + !1) + IL_0233: stloc.s V_23 + IL_0235: ldloc.0 + IL_0236: ldloc.s V_21 + IL_0238: ldloc.s V_22 + IL_023a: ldloc.s V_23 + IL_023c: ldstr "Print_T(System.Object)" + IL_0241: ldloca.s V_6 + IL_0243: ldfld int32 valuetype MyStruct6`1<object>::n + IL_0248: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_024d: add + IL_024e: stloc.0 + IL_0373: ldloc.0 + IL_0374: brfalse.s IL_0379 + + IL_0376: ldc.i4.m1 + IL_0377: br.s IL_037b + + IL_0379: ldc.i4.s 100 + IL_037b: stloc.s V_24 + IL_037d: br.s IL_037f + + IL_037f: ldloc.s V_24 + IL_0381: ret + } // end of method Program::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Program::.ctor + +} // end of class Program + + diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj new file mode 100644 index 0000000000..62e7893ac6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance1.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Variance1</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Variance1.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il new file mode 100644 index 0000000000..56ee0ffc91 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.il @@ -0,0 +1,1191 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 4.0.20528.0 +// Copyright (c) Microsoft Corporation. All rights reserved. + + + +// Metadata version: v4.0.20528 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 4:0:0:0 +} +.assembly Variance1 +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx + 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module Variance1.exe +// MVID: {DC3FB067-F52C-4120-BD62-DFA180241B4B} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x009D0000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class interface private abstract auto ansi I`1<-S> +{ + .method public hidebysig newslot abstract virtual + instance string Print(!S 'value') cil managed + { + } // end of method I`1::Print + +} // end of class I`1 + +.class public auto ansi beforefieldinit CBase + extends [mscorlib]System.Object +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method CBase::.ctor + +} // end of class CBase + +.class public auto ansi beforefieldinit CDerived + extends CBase +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void CBase::.ctor() + IL_0006: ret + } // end of method CDerived::.ctor + +} // end of class CDerived + +.class public sequential ansi sealed beforefieldinit MyStruct1 + extends [mscorlib]System.ValueType + implements class I`1<class CDerived>, + class I`1<class CBase> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct1::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct1::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct1::Print + + .method public hidebysig newslot virtual final + instance string Print(class CBase 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct1::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct1::n + IL_000f: ldstr "Print(CBase)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct1::Print + +} // end of class MyStruct1 + +.class public sequential ansi sealed beforefieldinit MyStruct2 + extends [mscorlib]System.ValueType + implements class I`1<class CBase>, + class I`1<class CDerived> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct2::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct2::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct2::Print + + .method public hidebysig newslot virtual final + instance string Print(class CBase 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 MyStruct2::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 MyStruct2::n + IL_000f: ldstr "Print(CBase)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct2::Print + +} // end of class MyStruct2 + +.class public sequential ansi sealed beforefieldinit MyStruct3`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<class CDerived>, + class I`1<class CBase> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct3`2::Print + + .method public hidebysig newslot virtual final + instance string Print(class CBase 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct3`2<!T,!U>::n + IL_000f: ldstr "Print(CBase)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct3`2::Print + +} // end of class MyStruct3`2 + +.class public sequential ansi sealed beforefieldinit MyStruct4`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<class CBase>, + class I`1<class CDerived> +{ + .field public int32 n + .method public hidebysig newslot virtual final + instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct4`2::Print + + .method public hidebysig newslot virtual final + instance string Print(class CBase 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct4`2<!T,!U>::n + IL_000f: ldstr "Print(CBase)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct4`2::Print + +} // end of class MyStruct4`2 + +.class public sequential ansi sealed beforefieldinit MyStruct5`1<T> + extends [mscorlib]System.ValueType + implements class I`1<class CDerived>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct5`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct5`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct5`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct5`1::Print + +} // end of class MyStruct5`1 + +.class public sequential ansi sealed beforefieldinit MyStruct6`1<T> + extends [mscorlib]System.ValueType + implements class I`1<!T>, + class I`1<class CDerived> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(class CDerived 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n + IL_000f: ldstr "Print(CDerived)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct6`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct6`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct6`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct6`1::Print + +} // end of class MyStruct6`1 + +.class public sequential ansi sealed beforefieldinit MyStruct7`1<T> + extends [mscorlib]System.ValueType + implements class I`1<class CBase>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(class CBase 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct7`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct7`1<!T>::n + IL_000f: ldstr "Print(CBase)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct7`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct7`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct7`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct7`1::Print + +} // end of class MyStruct7`1 + +.class public sequential ansi sealed beforefieldinit MyStruct8`1<T> + extends [mscorlib]System.ValueType + implements class I`1<!T>, + class I`1<class CBase> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(class CBase 'value') cil managed + { + // Code size 25 (0x19) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct8`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct8`1<!T>::n + IL_000f: ldstr "Print(CBase)" + IL_0014: stloc.0 + IL_0015: br.s IL_0017 + + IL_0017: ldloc.0 + IL_0018: ret + } // end of method MyStruct8`1::Print + + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct8`1<!T>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct8`1<!T>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct8`1::Print + +} // end of class MyStruct8`1 + +.class public sequential ansi sealed beforefieldinit MyStruct9`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<!T>, + class I`1<!U> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct9`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct9`2<!T,!U>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct9`2::Print + + .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct9`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct9`2<!T,!U>::n + IL_000f: ldstr "Print_U(" + IL_0014: ldtoken !U + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct9`2::Print + +} // end of class MyStruct9`2 + +.class public sequential ansi sealed beforefieldinit MyStruct10`2<T,U> + extends [mscorlib]System.ValueType + implements class I`1<!U>, + class I`1<!T> +{ + .field public int32 n + .method public hidebysig newslot virtual final instance string Print(!T 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct10`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct10`2<!T,!U>::n + IL_000f: ldstr "Print_T(" + IL_0014: ldtoken !T + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct10`2::Print + + .method public hidebysig newslot virtual final instance string Print(!U 'value') cil managed + { + // Code size 45 (0x2d) + .maxstack 3 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: dup + IL_0003: ldfld int32 valuetype MyStruct10`2<!T,!U>::n + IL_0008: ldc.i4.1 + IL_0009: add + IL_000a: stfld int32 valuetype MyStruct10`2<!T,!U>::n + IL_000f: ldstr "Print_U(" + IL_0014: ldtoken !U + IL_0019: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_001e: ldstr ")" + IL_0023: call string [mscorlib]System.String::Concat(object, + object, + object) + IL_0028: stloc.0 + IL_0029: br.s IL_002b + + IL_002b: ldloc.0 + IL_002c: ret + } // end of method MyStruct10`2::Print + +} // end of class MyStruct10`2 + +.class private auto ansi beforefieldinit Conversion`2<.ctor (class I`1<!TCBase>) TMyStruct,TCBase> + extends [mscorlib]System.Object +{ + .field public !TCBase 'value' + .method public hidebysig instance string + Caller1() cil managed + { + // Code size 58 (0x3a) + .maxstack 2 + .locals init (!TMyStruct V_0, + string V_1, + !TMyStruct V_2) + IL_0000: nop + IL_0001: ldloca.s V_2 + IL_0003: initobj !TMyStruct + IL_0009: ldloc.2 + IL_000a: box !TMyStruct + IL_000f: brfalse.s IL_001c + + IL_0011: ldloca.s V_2 + IL_0013: initobj !TMyStruct + IL_0019: ldloc.2 + IL_001a: br.s IL_0021 + + IL_001c: call !!0 [mscorlib]System.Activator::CreateInstance<!TMyStruct>() + IL_0021: stloc.0 + IL_0022: ldloca.s V_0 + IL_0024: ldarg.0 + IL_0025: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value' + IL_002a: constrained. !TMyStruct + IL_0030: callvirt instance string class I`1<!TCBase>::Print(!0) + IL_0035: stloc.1 + IL_0036: br.s IL_0038 + + IL_0038: ldloc.1 + IL_0039: ret + } // end of method Conversion`2::Caller1 + + .method public hidebysig instance string + Caller2(!TMyStruct& 'instance') cil managed + { + // Code size 24 (0x18) + .maxstack 2 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldarg.0 + IL_0003: ldfld !1 class Conversion`2<!TMyStruct,!TCBase>::'value' + IL_0008: constrained. !TMyStruct + IL_000e: callvirt instance string class I`1<!TCBase>::Print(!0) + IL_0013: stloc.0 + IL_0014: br.s IL_0016 + + IL_0016: ldloc.0 + IL_0017: ret + } // end of method Conversion`2::Caller2 + + .method public hidebysig instance string + Caller3(!TMyStruct& 'instance', + !TCBase param) cil managed + { + // Code size 19 (0x13) + .maxstack 2 + .locals init (string V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldarg.2 + IL_0003: constrained. !TMyStruct + IL_0009: callvirt instance string class I`1<!TCBase>::Print(!0) + IL_000e: stloc.0 + IL_000f: br.s IL_0011 + + IL_0011: ldloc.0 + IL_0012: ret + } // end of method Conversion`2::Caller3 + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Conversion`2::.ctor + +} // end of class Conversion`2 + + +.class private auto ansi beforefieldinit Program + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 + Verification(string res1, + string res2, + string res3, + string expected, + int32 n) cil managed + { + // Code size 150 (0x96) + .maxstack 2 + .locals init (int32 V_0, + bool V_1) + IL_0000: nop + IL_0001: ldstr " " + IL_0006: ldarg.0 + IL_0007: call string [mscorlib]System.String::Concat(string, + string) + IL_000c: call void [System.Console]System.Console::WriteLine(string) + IL_0011: nop + IL_0012: ldstr " " + IL_0017: ldarg.1 + IL_0018: call string [mscorlib]System.String::Concat(string, + string) + IL_001d: call void [System.Console]System.Console::WriteLine(string) + IL_0022: nop + IL_0023: ldstr " " + IL_0028: ldarg.2 + IL_0029: call string [mscorlib]System.String::Concat(string, + string) + IL_002e: call void [System.Console]System.Console::WriteLine(string) + IL_0033: nop + IL_0034: ldstr " " + IL_0039: ldarg.s n + IL_003b: box [mscorlib]System.Int32 + IL_0040: call string [mscorlib]System.String::Concat(object, + object) + IL_0045: call void [System.Console]System.Console::WriteLine(string) + IL_004a: nop + IL_004b: ldarg.0 + IL_004c: ldarg.3 + IL_004d: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_0052: brfalse.s IL_0070 + + IL_0054: ldarg.1 + IL_0055: ldarg.3 + IL_0056: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_005b: brfalse.s IL_0070 + + IL_005d: ldarg.2 + IL_005e: ldarg.3 + IL_005f: call bool [mscorlib]System.String::op_Equality(string, + string) + IL_0064: brfalse.s IL_0070 + + IL_0066: ldarg.s n + IL_0068: ldc.i4.2 + IL_0069: ceq + IL_006b: ldc.i4.0 + IL_006c: ceq + IL_006e: br.s IL_0071 + + IL_0070: ldc.i4.1 + IL_0071: stloc.1 + IL_0072: ldloc.1 + IL_0073: brtrue.s IL_0085 + + IL_0075: nop + IL_0076: ldstr "PASS\n" + IL_007b: call void [System.Console]System.Console::WriteLine(string) + IL_0080: nop + IL_0081: ldc.i4.0 + IL_0082: stloc.0 + IL_0083: br.s IL_0094 + + IL_0085: ldstr "FAIL\n" + IL_008a: call void [System.Console]System.Console::WriteLine(string) + IL_008f: nop + IL_0090: ldc.i4.1 + IL_0091: stloc.0 + IL_0092: br.s IL_0094 + + IL_0094: ldloc.0 + IL_0095: ret + } // end of method Program::Verification + + .method private hidebysig static int32 + Main(string[] args) cil managed + { + .entrypoint + // Code size 898 (0x382) + .maxstack 6 + .locals init (int32 V_0, + valuetype MyStruct1 V_1, + valuetype MyStruct2 V_2, + valuetype MyStruct3`2<object,object> V_3, + valuetype MyStruct4`2<object,object> V_4, + valuetype MyStruct5`1<class CBase> V_5, + valuetype MyStruct6`1<class CBase> V_6, + valuetype MyStruct7`1<class CDerived> V_7, + valuetype MyStruct8`1<class CDerived> V_8, + valuetype MyStruct9`2<class CDerived,class CBase> V_9, + valuetype MyStruct10`2<class CDerived,class CBase> V_10, + class Conversion`2<valuetype MyStruct1,class CBase> V_11, + class Conversion`2<valuetype MyStruct2,class CBase> V_12, + class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase> V_13, + class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase> V_14, + class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase> V_15, + class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase> V_16, + class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase> V_17, + class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase> V_18, + class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase> V_19, + class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase> V_20, + string V_21, + string V_22, + string V_23, + int32 V_24) + IL_0000: nop + IL_0001: ldc.i4.0 + IL_0002: stloc.0 + IL_0003: ldloca.s V_1 + IL_0005: initobj MyStruct1 + IL_000b: ldloca.s V_2 + IL_000d: initobj MyStruct2 + IL_0013: ldloca.s V_3 + IL_0015: initobj valuetype MyStruct3`2<object,object> + IL_001b: ldloca.s V_4 + IL_001d: initobj valuetype MyStruct4`2<object,object> + IL_0023: ldloca.s V_5 + IL_0025: initobj valuetype MyStruct5`1<class CBase> + IL_002b: ldloca.s V_6 + IL_002d: initobj valuetype MyStruct6`1<class CBase> + IL_0033: ldloca.s V_7 + IL_0035: initobj valuetype MyStruct7`1<class CDerived> + IL_003b: ldloca.s V_8 + IL_003d: initobj valuetype MyStruct8`1<class CDerived> + IL_0043: ldloca.s V_9 + IL_0045: initobj valuetype MyStruct9`2<class CDerived,class CBase> + IL_004b: ldloca.s V_10 + IL_004d: initobj valuetype MyStruct10`2<class CDerived,class CBase> + IL_0053: newobj instance void class Conversion`2<valuetype MyStruct1,class CBase>::.ctor() + IL_0058: stloc.s V_11 + IL_005a: newobj instance void class Conversion`2<valuetype MyStruct2,class CBase>::.ctor() + IL_005f: stloc.s V_12 + IL_0061: newobj instance void class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::.ctor() + IL_0066: stloc.s V_13 + IL_0068: newobj instance void class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::.ctor() + IL_006d: stloc.s V_14 + IL_006f: newobj instance void class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::.ctor() + IL_0074: stloc.s V_15 + IL_0076: newobj instance void class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::.ctor() + IL_007b: stloc.s V_16 + IL_007d: newobj instance void class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::.ctor() + IL_0082: stloc.s V_17 + IL_0084: newobj instance void class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::.ctor() + IL_0089: stloc.s V_18 + IL_008b: newobj instance void class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::.ctor() + IL_0090: stloc.s V_19 + IL_0092: newobj instance void class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::.ctor() + IL_0097: stloc.s V_20 + IL_0099: ldstr "TEST1:" + IL_009e: call void [System.Console]System.Console::WriteLine(string) + IL_00a3: nop + IL_00a4: ldloc.s V_11 + IL_00a6: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller1() + IL_00ab: stloc.s V_21 + IL_00ad: ldloc.s V_11 + IL_00af: ldloca.s V_1 + IL_00b1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller2(!0&) + IL_00b6: stloc.s V_22 + IL_00b8: ldloc.s V_11 + IL_00ba: ldloca.s V_1 + IL_00bc: newobj instance void class CBase::.ctor() + IL_00c1: callvirt instance string class Conversion`2<valuetype MyStruct1,class CBase>::Caller3(!0&, + !1) + IL_00c6: stloc.s V_23 + IL_00c8: ldloc.0 + IL_00c9: ldloc.s V_21 + IL_00cb: ldloc.s V_22 + IL_00cd: ldloc.s V_23 + IL_00cf: ldstr "Print(CBase)" + IL_00d4: ldloca.s V_1 + IL_00d6: ldfld int32 MyStruct1::n + IL_00db: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_00e0: add + IL_00e1: stloc.0 + IL_00e2: ldstr "TEST2:" + IL_00e7: call void [System.Console]System.Console::WriteLine(string) + IL_00ec: nop + IL_00ed: ldloc.s V_12 + IL_00ef: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller1() + IL_00f4: stloc.s V_21 + IL_00f6: ldloc.s V_12 + IL_00f8: ldloca.s V_2 + IL_00fa: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller2(!0&) + IL_00ff: stloc.s V_22 + IL_0101: ldloc.s V_12 + IL_0103: ldloca.s V_2 + IL_0105: newobj instance void class CBase::.ctor() + IL_010a: callvirt instance string class Conversion`2<valuetype MyStruct2,class CBase>::Caller3(!0&, + !1) + IL_010f: stloc.s V_23 + IL_0111: ldloc.0 + IL_0112: ldloc.s V_21 + IL_0114: ldloc.s V_22 + IL_0116: ldloc.s V_23 + IL_0118: ldstr "Print(CBase)" + IL_011d: ldloca.s V_2 + IL_011f: ldfld int32 MyStruct2::n + IL_0124: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0129: add + IL_012a: stloc.0 + IL_012b: ldstr "TEST3:" + IL_0130: call void [System.Console]System.Console::WriteLine(string) + IL_0135: nop + IL_0136: ldloc.s V_13 + IL_0138: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller1() + IL_013d: stloc.s V_21 + IL_013f: ldloc.s V_13 + IL_0141: ldloca.s V_3 + IL_0143: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller2(!0&) + IL_0148: stloc.s V_22 + IL_014a: ldloc.s V_13 + IL_014c: ldloca.s V_3 + IL_014e: newobj instance void class CBase::.ctor() + IL_0153: callvirt instance string class Conversion`2<valuetype MyStruct3`2<object,object>,class CBase>::Caller3(!0&, + !1) + IL_0158: stloc.s V_23 + IL_015a: ldloc.0 + IL_015b: ldloc.s V_21 + IL_015d: ldloc.s V_22 + IL_015f: ldloc.s V_23 + IL_0161: ldstr "Print(CBase)" + IL_0166: ldloca.s V_3 + IL_0168: ldfld int32 valuetype MyStruct3`2<object,object>::n + IL_016d: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0172: add + IL_0173: stloc.0 + IL_0174: ldstr "TEST4:" + IL_0179: call void [System.Console]System.Console::WriteLine(string) + IL_017e: nop + IL_017f: ldloc.s V_14 + IL_0181: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller1() + IL_0186: stloc.s V_21 + IL_0188: ldloc.s V_14 + IL_018a: ldloca.s V_4 + IL_018c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller2(!0&) + IL_0191: stloc.s V_22 + IL_0193: ldloc.s V_14 + IL_0195: ldloca.s V_4 + IL_0197: newobj instance void class CBase::.ctor() + IL_019c: callvirt instance string class Conversion`2<valuetype MyStruct4`2<object,object>,class CBase>::Caller3(!0&, + !1) + IL_01a1: stloc.s V_23 + IL_01a3: ldloc.0 + IL_01a4: ldloc.s V_21 + IL_01a6: ldloc.s V_22 + IL_01a8: ldloc.s V_23 + IL_01aa: ldstr "Print(CBase)" + IL_01af: ldloca.s V_4 + IL_01b1: ldfld int32 valuetype MyStruct4`2<object,object>::n + IL_01b6: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_01bb: add + IL_01bc: stloc.0 + IL_01bd: ldstr "TEST5:" + IL_01c2: call void [System.Console]System.Console::WriteLine(string) + IL_01c7: nop + IL_01c8: ldloc.s V_15 + IL_01ca: callvirt instance string class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::Caller1() + IL_01cf: stloc.s V_21 + IL_01d1: ldloc.s V_15 + IL_01d3: ldloca.s V_5 + IL_01d5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::Caller2(!0&) + IL_01da: stloc.s V_22 + IL_01dc: ldloc.s V_15 + IL_01de: ldloca.s V_5 + IL_01e0: newobj instance void class CBase::.ctor() + IL_01e5: callvirt instance string class Conversion`2<valuetype MyStruct5`1<class CBase>,class CBase>::Caller3(!0&, + !1) + IL_01ea: stloc.s V_23 + IL_01ec: ldloc.0 + IL_01ed: ldloc.s V_21 + IL_01ef: ldloc.s V_22 + IL_01f1: ldloc.s V_23 + IL_01f3: ldstr "Print_T(CBase)" + IL_01f8: ldloca.s V_5 + IL_01fa: ldfld int32 valuetype MyStruct5`1<class CBase>::n + IL_01ff: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0204: add + IL_0205: stloc.0 + IL_0206: ldstr "TEST6:" + IL_020b: call void [System.Console]System.Console::WriteLine(string) + IL_0210: nop + IL_0211: ldloc.s V_16 + IL_0213: callvirt instance string class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::Caller1() + IL_0218: stloc.s V_21 + IL_021a: ldloc.s V_16 + IL_021c: ldloca.s V_6 + IL_021e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::Caller2(!0&) + IL_0223: stloc.s V_22 + IL_0225: ldloc.s V_16 + IL_0227: ldloca.s V_6 + IL_0229: newobj instance void class CBase::.ctor() + IL_022e: callvirt instance string class Conversion`2<valuetype MyStruct6`1<class CBase>,class CBase>::Caller3(!0&, + !1) + IL_0233: stloc.s V_23 + IL_0235: ldloc.0 + IL_0236: ldloc.s V_21 + IL_0238: ldloc.s V_22 + IL_023a: ldloc.s V_23 + IL_023c: ldstr "Print_T(CBase)" + IL_0241: ldloca.s V_6 + IL_0243: ldfld int32 valuetype MyStruct6`1<class CBase>::n + IL_0248: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_024d: add + IL_024e: stloc.0 + IL_024f: ldstr "TEST7:" + IL_0254: call void [System.Console]System.Console::WriteLine(string) + IL_0259: nop + IL_025a: ldloc.s V_17 + IL_025c: callvirt instance string class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::Caller1() + IL_0261: stloc.s V_21 + IL_0263: ldloc.s V_17 + IL_0265: ldloca.s V_7 + IL_0267: callvirt instance string class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::Caller2(!0&) + IL_026c: stloc.s V_22 + IL_026e: ldloc.s V_17 + IL_0270: ldloca.s V_7 + IL_0272: newobj instance void class CBase::.ctor() + IL_0277: callvirt instance string class Conversion`2<valuetype MyStruct7`1<class CDerived>,class CBase>::Caller3(!0&, + !1) + IL_027c: stloc.s V_23 + IL_027e: ldloc.0 + IL_027f: ldloc.s V_21 + IL_0281: ldloc.s V_22 + IL_0283: ldloc.s V_23 + IL_0285: ldstr "Print(CBase)" + IL_028a: ldloca.s V_7 + IL_028c: ldfld int32 valuetype MyStruct7`1<class CDerived>::n + IL_0291: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0296: add + IL_0297: stloc.0 + IL_0298: ldstr "TEST8:" + IL_029d: call void [System.Console]System.Console::WriteLine(string) + IL_02a2: nop + IL_02a3: ldloc.s V_18 + IL_02a5: callvirt instance string class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::Caller1() + IL_02aa: stloc.s V_21 + IL_02ac: ldloc.s V_18 + IL_02ae: ldloca.s V_8 + IL_02b0: callvirt instance string class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::Caller2(!0&) + IL_02b5: stloc.s V_22 + IL_02b7: ldloc.s V_18 + IL_02b9: ldloca.s V_8 + IL_02bb: newobj instance void class CBase::.ctor() + IL_02c0: callvirt instance string class Conversion`2<valuetype MyStruct8`1<class CDerived>,class CBase>::Caller3(!0&, + !1) + IL_02c5: stloc.s V_23 + IL_02c7: ldloc.0 + IL_02c8: ldloc.s V_21 + IL_02ca: ldloc.s V_22 + IL_02cc: ldloc.s V_23 + IL_02ce: ldstr "Print(CBase)" + IL_02d3: ldloca.s V_8 + IL_02d5: ldfld int32 valuetype MyStruct8`1<class CDerived>::n + IL_02da: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_02df: add + IL_02e0: stloc.0 + IL_02e1: ldstr "TEST9:" + IL_02e6: call void [System.Console]System.Console::WriteLine(string) + IL_02eb: nop + IL_02ec: ldloc.s V_19 + IL_02ee: callvirt instance string class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::Caller1() + IL_02f3: stloc.s V_21 + IL_02f5: ldloc.s V_19 + IL_02f7: ldloca.s V_9 + IL_02f9: callvirt instance string class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::Caller2(!0&) + IL_02fe: stloc.s V_22 + IL_0300: ldloc.s V_19 + IL_0302: ldloca.s V_9 + IL_0304: newobj instance void class CBase::.ctor() + IL_0309: callvirt instance string class Conversion`2<valuetype MyStruct9`2<class CDerived,class CBase>,class CBase>::Caller3(!0&, + !1) + IL_030e: stloc.s V_23 + IL_0310: ldloc.0 + IL_0311: ldloc.s V_21 + IL_0313: ldloc.s V_22 + IL_0315: ldloc.s V_23 + IL_0317: ldstr "Print_U(CBase)" + IL_031c: ldloca.s V_9 + IL_031e: ldfld int32 valuetype MyStruct9`2<class CDerived,class CBase>::n + IL_0323: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0328: add + IL_0329: stloc.0 + IL_032a: ldstr "TEST10:" + IL_032f: call void [System.Console]System.Console::WriteLine(string) + IL_0334: nop + IL_0335: ldloc.s V_20 + IL_0337: callvirt instance string class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::Caller1() + IL_033c: stloc.s V_21 + IL_033e: ldloc.s V_20 + IL_0340: ldloca.s V_10 + IL_0342: callvirt instance string class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::Caller2(!0&) + IL_0347: stloc.s V_22 + IL_0349: ldloc.s V_20 + IL_034b: ldloca.s V_10 + IL_034d: newobj instance void class CBase::.ctor() + IL_0352: callvirt instance string class Conversion`2<valuetype MyStruct10`2<class CDerived,class CBase>,class CBase>::Caller3(!0&, + !1) + IL_0357: stloc.s V_23 + IL_0359: ldloc.0 + IL_035a: ldloc.s V_21 + IL_035c: ldloc.s V_22 + IL_035e: ldloc.s V_23 + IL_0360: ldstr "Print_U(CBase)" + IL_0365: ldloca.s V_10 + IL_0367: ldfld int32 valuetype MyStruct10`2<class CDerived,class CBase>::n + IL_036c: call int32 Program::Verification(string, + string, + string, + string, + int32) + IL_0371: add + IL_0372: stloc.0 + IL_0373: ldloc.0 + IL_0374: brfalse.s IL_0379 + + IL_0376: ldc.i4.m1 + IL_0377: br.s IL_037b + + IL_0379: ldc.i4.s 100 + IL_037b: stloc.s V_24 + IL_037d: br.s IL_037f + + IL_037f: ldloc.s V_24 + IL_0381: ret + } // end of method Program::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Program::.ctor + +} // end of class Program + + diff --git a/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj new file mode 100644 index 0000000000..82958c56da --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_568786/4_Misc/Variance2.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Variance2</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Variance2.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs new file mode 100644 index 0000000000..a0ac0d1795 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.cs @@ -0,0 +1,44 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public interface I<W> +{ + string Method(); +} +public class MyBase<U, V> : I<U> +{ + string I<U>.Method() + { return "MyBase.Method()"; } +} +public class MyClass<T> : MyBase<string, T>, I<T> +{ + string I<T>.Method() + { return "MyClass.Method()"; } +} + +class Test +{ + public static int Main() + { + MyClass<string> s1 = new MyClass<string>(); + MyClass<object> s2 = new MyClass<object>(); + + string res1 = ((I<string>)s1).Method(); + string res2 = ((I<string>)s2).Method(); + string res3 = ((I<object>)s2).Method(); + Console.WriteLine(res1); + Console.WriteLine(res2); + Console.WriteLine(res3); + + if (res1 == "MyClass.Method()" && res2 == "MyBase.Method()" && res3 == "MyClass.Method()") + { + Console.WriteLine("Pass"); + return 100; + } + Console.WriteLine("FAIL"); + return -1; + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj new file mode 100644 index 0000000000..7c817575b1 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_630250/dev10_630250.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_630250</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_630250.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il new file mode 100644 index 0000000000..babb30d572 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il @@ -0,0 +1,99 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +/*BUG: Assert: Precondition failure: FAILED: !ContainsGenericVariables() (vm\method.cpp, Line: 1781) + +The bug related to populating MethodDesc slots in generic dictionaries at runtime. + + o The dictionary entry "signature" in these cases describes the compile-time <Type>::<Method> + pair that targets this MethodDesc. + + o The problem was specific to cases where the implementation of <Type>::<Method> was not defined + directly on <Type> but was instead inherited from some generic base class in <Type>'s base + class chain. +*/ + +.assembly extern mscorlib {} +.assembly Generated30 {} + +.class public DerivedDerived + extends class Derived`2<string,string> +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { } +} +.class public Derived`2<T0, T1> + extends class Base`2<int32,!T1> +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { } +} +.class public Base`2<T0, T1> +{ + .method public hidebysig newslot virtual instance string Method<M0>() cil managed + { + ldstr "Base::Method<" + ldtoken !!M0 + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + call string [mscorlib]System.String::Concat(object,object) + ldstr ">" + call string [mscorlib]System.String::Concat(object,object) + ret + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { } +} + + + +.class private auto ansi beforefieldinit Framework +{ + .method private hidebysig static void CheckResult(string expected, string actual) cil managed { + .maxstack 8 + IL_0000: ldstr "EXPECTED : " + IL_0005: ldarg.0 + IL_0006: call string [mscorlib]System.String::Concat(string,string) + IL_000b: call void [System.Console]System.Console::WriteLine(string) + IL_0010: ldstr "ACTUAL : " + IL_0015: ldarg.1 + IL_0016: call string [mscorlib]System.String::Concat(string,string) + IL_001b: call void [System.Console]System.Console::WriteLine(string) + IL_0020: ldarg.0 + IL_0021: ldarg.1 + IL_0022: call bool [mscorlib]System.String::op_Inequality(string,string) + IL_0027: brfalse.s IL_0034 + IL_0029: ldstr "CheckResult FAILED!" + IL_002e: newobj instance void [mscorlib]System.Exception::.ctor(string) + IL_0033: throw + IL_0034: ret + } // end of method Test::CheckResult + + .method static string ConstCaller<T0,T1,(class Derived`2<!!T0,!!T1>)W>(!!W 'inst') cil managed { + .maxstack 33 + + ldarga.s 0 + constrained. !!W + callvirt instance string class Derived`2<!!T0,!!T1>::Method<object>() + + ret + } + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 3 + + ldstr "Base::Method<System.Object>" + newobj instance void DerivedDerived::.ctor() + callvirt instance string class Derived`2<string,string>::Method<object>() + call void Framework::CheckResult(string,string) + + ldstr "Base::Method<System.Object>" + newobj instance void DerivedDerived::.ctor() + call string Framework::ConstCaller<string,string,class DerivedDerived>(!!2) + call void Framework::CheckResult(string,string) + + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 100 + ret + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj new file mode 100644 index 0000000000..488b3c4778 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_710121</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_710121.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il new file mode 100644 index 0000000000..8d590e31b3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.il @@ -0,0 +1,98 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +/* +if there are 3 classes A,B and C, and B inherits from A and C inherits from B, +and classes A and B have a public virtual newslot method M(), calling C::M() +on and instance of C calls the implenation of M() on A if class B is generic. +The implementation of M() on B should be called. C# will not generate the +function call DerivedDerived::Method() since the method is not defined on this type +*/ + +.assembly extern mscorlib {} +.assembly Generated26 {} + + +.class public DerivedDerived extends class Derived`2<string,int32> +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { + ldarg.0 + call instance void class Derived`2<string,int32>::.ctor() + ret + } +} +.class public Derived`2<T0, T1> extends Base +{ + .method public hidebysig newslot virtual instance string Method() cil managed { + ldstr "Derived::Method" + ret + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { + ldarg.0 + call instance void Base::.ctor() + ret + } +} +.class public Base +{ + .method public hidebysig newslot virtual instance string Method() cil managed { + ldstr "Base::Method" + ret + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + + + + +.class private auto ansi beforefieldinit Framework +{ + .method private hidebysig static int32 CheckResult(string expected, string actual) cil managed { + .maxstack 8 + ldstr "EXPECTED : " + ldarg.0 + call string [mscorlib]System.String::Concat(string,string) + call void [System.Console]System.Console::WriteLine(string) + ldstr "ACTUAL : " + ldarg.1 + call string [mscorlib]System.String::Concat(string,string) + call void [System.Console]System.Console::WriteLine(string) + ldarg.0 + ldarg.1 + call bool [mscorlib]System.String::op_Inequality(string,string) + brfalse.s PASSING + + ldstr "FAIL" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 99 + br END + + PASSING: + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 100 + + END: + ret + + } // end of method Test::CheckResult + + + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 10 + + ldstr "Derived::Method" + newobj instance void DerivedDerived::.ctor() + callvirt instance string DerivedDerived::Method() + call int32 Framework::CheckResult(string,string) + ret + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj new file mode 100644 index 0000000000..516f76df24 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_715437/dev10_715437.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_715437</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_715437.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il new file mode 100644 index 0000000000..fb65cdd93a --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.il @@ -0,0 +1,130 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +/* +We basically have an interface I<T,U>, class Base that implements I<string,int> and class Derived +that inherits from Base, and implements I<int,int>. I<T,U> has a method string Method(). + +Creating this delegate throws the assert: + -> Delegate.CreateDelegate(typeof(myClosedDel), new Derived(), typeof(I<string,int>.GetMethod("Method")); + +where MyClosedDel is: + -> public delegate string MyClosedDel (); + + +*/ +.assembly extern mscorlib {} +.assembly Generated0 {} + + + +.class public Derived extends Base implements class IBaseInterface2`2<int32,int32> +{ + .method public hidebysig virtual instance string Method() cil managed { + ldstr "Derived::Method" + ret + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { + ldarg.0 + call instance void Base::.ctor() + ret + } +} +.class public Base implements class IBaseInterface2`2<string,int32> +{ + .method public hidebysig virtual instance string Method() cil managed { + ldstr "Base::Method" + ret + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} +.class interface public abstract IBaseInterface2`2<T0,T1> +{ + .method public hidebysig newslot abstract virtual instance string Method() cil managed { + } +} + + + + +.class public sealed myClosedDel extends [mscorlib]System.MulticastDelegate { + .method public hidebysig specialname rtspecialname instance void .ctor(object 'object', native int 'method') runtime managed {} + .method public hidebysig newslot virtual instance class [mscorlib]System.IAsyncResult BeginInvoke(class [mscorlib]System.AsyncCallback callback, object 'object') runtime managed {} + .method public hidebysig newslot virtual instance string Invoke() runtime managed {} + .method public hidebysig newslot virtual instance string EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed {} +} +.class private auto ansi beforefieldinit Framework { + .method public hidebysig static string DelCall0(object inst, class [mscorlib]System.Type t, string mName) cil managed { + + //CS: + //Delegate d = Delegate.CreateDelegate(typeof(myClosedDel), inst, t.GetMethod(mName)); + //return (string)d.DynamicInvoke(null); + + .maxstack 10 + ldtoken myClosedDel + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ldarg.0 + ldarg.1 + ldarg.2 + callvirt instance class [mscorlib]System.Reflection.MethodInfo [mscorlib]System.Type::GetMethod(string) + call class [mscorlib]System.Delegate [mscorlib]System.Delegate::CreateDelegate(class [mscorlib]System.Type,object,class [mscorlib]System.Reflection.MethodInfo) + ldnull + callvirt instance object [mscorlib]System.Delegate::DynamicInvoke(object[]) + castclass [mscorlib]System.String + ret + } + .method private hidebysig static int32 CheckResult(string expected, string actual) cil managed { + .maxstack 8 + ldstr "EXPECTED : " + ldarg.0 + call string [mscorlib]System.String::Concat(string,string) + call void [System.Console]System.Console::WriteLine(string) + ldstr "ACTUAL : " + ldarg.1 + call string [mscorlib]System.String::Concat(string,string) + call void [System.Console]System.Console::WriteLine(string) + ldarg.0 + ldarg.1 + call bool [mscorlib]System.String::op_Inequality(string,string) + brfalse.s PASSING + + ldstr "FAIL" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 99 + br END + + PASSING: + ldstr "PASS" + call void [System.Console]System.Console::WriteLine(string) + ldc.i4.s 100 + + END: + ret + + } // end of method Test::CheckResult + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 10 + .locals init (object V_0) + + + //EXPECTED RETURN: "Derived::Method" + ldstr "Derived::Method" + newobj instance void class Derived::.ctor() + ldtoken class IBaseInterface2`2<string,int32> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + ldstr "Method" + call string Framework::DelCall0(object,class [mscorlib]System.Type,string) + call int32 Framework::CheckResult(string,string) + + + ret + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj new file mode 100644 index 0000000000..b7d4ea7740 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_720779/dev10_720779.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_720779</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_720779.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs new file mode 100644 index 0000000000..837297efe6 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.cs @@ -0,0 +1,168 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + + +//==================== Cases of nested classes ====================// +class Outer1 +{ + protected int field; + + public class Inner + { + public int Method(Outer1 param) { return (++param.field); } + } +} +class Outer2 +{ + protected int field; + + public class Inner<U> where U : Outer2 + { + public int Method(U param) { return (++param.field); } + } +} +class Outer3<T> +{ + protected int field; + + public class Inner + { + public int Method(Outer3<T> param) { return (++param.field); } + } +} +class Outer4<T> +{ + protected int field; + + public class Inner<U> where U : Outer4<T> + { + public int Method(U param) { return (++param.field); } + } +} + + + +//==================== Cases of derived classes ====================// +class Base1 +{ + protected int field; +} +class Derived1 : Base1 +{ + public class Inner + { + public int Method(Derived1 param) { return (++param.field); } + } +} +class Base2 +{ + protected int field; +} +class Derived2<T> : Base2 +{ + public class Inner + { + public int Method(Derived2<T> param) { return (++param.field); } + } +} +class Base3<T> +{ + protected int field; +} +class Derived3 : Base3<string> +{ + public class Inner + { + public int Method(Derived3 param) { return (++param.field); } + } +} +class Base4<T> +{ + protected int field; +} +class Derived4<T> : Base4<T> +{ + public class Inner + { + public int Method(Derived4<T> param) { return (++param.field); } + } +} + + +public class Test +{ + static bool Success = true; + + static void NestedClassesTest() + { + int res; + + //==================== Cases of nested classes ====================// + Outer1.Inner inner1 = new Outer1.Inner(); + res = inner1.Method(new Outer1()); + Console.WriteLine("Outer1.Inner.Method(new Outer1()) = " + res); + if (res != 1) Success = false; + + Outer2.Inner<Outer2> inner2 = new Outer2.Inner<Outer2>(); + res = inner2.Method(new Outer2()); + Console.WriteLine("Outer2.Inner<Outer2>.Method(new Outer2()) = " + res); + if (res != 1) Success = false; + + Outer3<string>.Inner inner3 = new Outer3<string>.Inner(); + res = inner3.Method(new Outer3<string>()); + Console.WriteLine("Outer3<string>.Inner.Method(new Outer3<string>()) = " + res); + if (res != 1) Success = false; + + Outer4<string>.Inner<Outer4<string>> inner4 = new Outer4<string>.Inner<Outer4<string>>(); + res = inner4.Method(new Outer4<string>()); + Console.WriteLine("Outer4<string>.Inner<Outer4<string>>.Method(new Outer4<string>()) = " + res); + if (res != 1) Success = false; + } + + static void DerivedClassesTest() + { + int res; + + //==================== Cases of derived classes ====================// + Derived1.Inner inner1 = new Derived1.Inner(); + res = inner1.Method(new Derived1()); + Console.WriteLine("Derived1.Inner.Method(new Derived1()) = " + res); + if (res != 1) Success = false; + + Derived2<string>.Inner inner2 = new Derived2<string>.Inner(); + res = inner2.Method(new Derived2<string>()); + Console.WriteLine("Derived2<string>.Inner.Method(new Derived2<string>()) = " + res); + if (res != 1) Success = false; + + Derived3.Inner inner3 = new Derived3.Inner(); + res = inner3.Method(new Derived3()); + Console.WriteLine("Derived3.Inner.Method(new Derived3()) = " + res); + if (res != 1) Success = false; + + Derived4<string>.Inner inner4 = new Derived4<string>.Inner(); + res = inner4.Method(new Derived4<string>()); + Console.WriteLine("Derived4<string>.Inner.Method(new Derived4<string>()) = " + res); + if (res != 1) Success = false; + } + + + static int Main() + { + NestedClassesTest(); + Console.WriteLine(); + + DerivedClassesTest(); + Console.WriteLine(); + + if (Success) + { + Console.WriteLine("Pass"); + return 100; + } + Console.WriteLine("Fail"); + return -1; + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj new file mode 100644 index 0000000000..cdd41d6a45 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_724989/dev10_724989.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_724989</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_724989.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il new file mode 100644 index 0000000000..b2df9c7e02 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.il @@ -0,0 +1,200 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib {} +.assembly Generated0 {} +.module Generated0.exe + +.class public sequential sealed MyStruct0 extends [mscorlib]System.ValueType +{ + .pack 0 + .size 1 + .method public hidebysig virtual instance bool Equals(object obj) cil managed { ldc.i4.0 ret } + .method public hidebysig virtual instance int32 GetHashCode() cil managed { ldc.i4.0 ret } + .method public hidebysig virtual instance string ToString() cil managed { ldstr "ToString()" ret } +} +.class public sequential sealed MyStruct1`1<T0> extends [mscorlib]System.ValueType +{ + .pack 0 + .size 1 + .method public hidebysig virtual instance bool Equals(object obj) cil managed { ldc.i4.0 ret } + .method public hidebysig virtual instance int32 GetHashCode() cil managed { ldc.i4.0 ret } + .method public hidebysig virtual instance string ToString() cil managed { ldstr "ToString()" ret } +} +.class private auto ansi beforefieldinit Framework { + .method public hidebysig static void StructCallvirtVerificationTest() cil managed + { + .maxstack 10 + ldstr "========================== Struct Callvirt Verification Test ==========================" + call void [System.Console]System.Console::WriteLine(string) + + //Testing with a non-generic struct: + .locals init (valuetype MyStruct0 V_1) + ldloca V_1 + initobj valuetype MyStruct0 + .try { + ldloca V_1 + ldnull + callvirt instance bool valuetype MyStruct0::Equals(object obj) + call void [System.Console]System.Console::WriteLine(bool) + leave.s LV6 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException1" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV6 + } LV6: + .try { + ldloca V_1 + callvirt + instance int32 valuetype MyStruct0::GetHashCode() + call void [System.Console]System.Console::WriteLine(int32) + leave.s LV7 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException2" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV7 + } LV7: + .try { + ldloca V_1 + callvirt instance string valuetype MyStruct0::ToString() + call void [System.Console]System.Console::WriteLine(string) + leave.s LV8 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException3" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV8 + } LV8: + .try { + ldloca V_1 + ldnull + constrained. valuetype MyStruct0 + callvirt instance bool valuetype MyStruct0::Equals(object) + call void [System.Console]System.Console::WriteLine(bool) + leave.s LV9 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException4" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV9 + } LV9: + .try { + ldloca V_1 + constrained. valuetype MyStruct0 + callvirt instance int32 valuetype MyStruct0::GetHashCode() + call void [System.Console]System.Console::WriteLine(int32) + leave.s LV10 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException5" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV10 + } LV10: + .try { + ldloca V_1 + constrained. valuetype MyStruct0 + callvirt instance string valuetype MyStruct0::ToString() + call void [System.Console]System.Console::WriteLine(string) + leave.s LV11 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException6" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV11 + } LV11: + + //Testing with a generic struct: + .locals init (valuetype MyStruct1`1<string> V_2) + ldloca V_2 + initobj valuetype MyStruct1`1<string> + .try { + ldloca V_2 + ldnull + callvirt instance bool valuetype MyStruct1`1<string>::Equals(object obj) + call void [System.Console]System.Console::WriteLine(bool) + leave.s LV14 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException7" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV14 + } LV14: + .try { + ldloca V_2 + callvirt instance int32 valuetype MyStruct1`1<string>::GetHashCode() + call void [System.Console]System.Console::WriteLine(int32) + leave.s LV15 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException8" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV15 + } LV15: + .try { + ldloca V_2 + callvirt instance string valuetype MyStruct1`1<string>::ToString() + call void [System.Console]System.Console::WriteLine(string) + leave.s LV16 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException9" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV16 + } LV16: + .try { + ldloca V_2 + ldnull + constrained. valuetype MyStruct1`1<string> + callvirt instance bool valuetype MyStruct1`1<string>::Equals(object) + call void [System.Console]System.Console::WriteLine(bool) + leave.s LV17 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException10" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV17 + } LV17: + .try { + ldloca V_2 + constrained. valuetype MyStruct1`1<string> + callvirt instance int32 valuetype MyStruct1`1<string>::GetHashCode() + call void [System.Console]System.Console::WriteLine(int32) + leave.s LV18 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException11" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV18 + } LV18: + .try { + ldloca V_2 + constrained. valuetype MyStruct1`1<string> + callvirt instance string valuetype MyStruct1`1<string>::ToString() + call void [System.Console]System.Console::WriteLine(string) + leave.s LV19 + } catch [mscorlib]System.Security.VerificationException { + pop + ldstr "VerificationException12" + call void [System.Console]System.Console::WriteLine(string) + leave.s LV19 + } LV19: + + ldstr "=======================================================================================\n\n" + call void [System.Console]System.Console::WriteLine(string) + ret + } + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 10 + + call void Framework::StructCallvirtVerificationTest() + + ldc.i4 100 + ret + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj new file mode 100644 index 0000000000..948174ee70 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_788724/dev10_788724.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_788724</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_788724.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs new file mode 100644 index 0000000000..dac3b25b37 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +struct A<T> { } +struct B<T> { } + +interface Interface<T> +{ A<T> InterfaceFunc(); } + +class Base<T> +{ public virtual B<T> Func() { return default(B<T>); } } + +class C<U,T> where U:Base<T>, Interface<T> +{ + public static void CallFunc(U u) { u.Func(); } + public static void CallInterfaceFunc(U u) { u.InterfaceFunc(); } +} + +class Problem : Base<object>, Interface<object> +{ + public A<object> InterfaceFunc() { return new A<object>(); } + public override B<object> Func() { return new B<object>(); } +} + +class Test +{ + static int Main() + { + C<Problem, object>.CallFunc(new Problem()); + C<Problem, object>.CallInterfaceFunc(new Problem()); + + Console.WriteLine("Pass"); + return 100; + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj new file mode 100644 index 0000000000..57abc23577 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_794943/dev10_794943.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_794943</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_794943.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs new file mode 100644 index 0000000000..5e620289cd --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +//Non-generic classes A and B + +public class HelloWorld +{ + public static int Main() + { + try { B b = new B(GetName()); } + catch (System.Exception) + { + System.Console.WriteLine("PASS"); + return 100; + } + System.Console.WriteLine("FAIL"); + return -1; + } + public static string GetName() { throw new System.Exception(); } +} + +public class B : A +{ + public B(string name) + { + System.Console.WriteLine("Creating object B({0})", name); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj new file mode 100644 index 0000000000..00ee550d61 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case1.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Case1</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Case1.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Library1.csproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs new file mode 100644 index 0000000000..30c4896d22 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +//Non-generic classe A and generic class B + +public class HelloWorld +{ + public static int Main() + { + try { B<string> b = new B<string>(GetName()); } + catch (System.Exception) + { + System.Console.WriteLine("PASS"); + return 100; + } + System.Console.WriteLine("FAIL"); + return -1; + } + public static string GetName() { throw new System.Exception(); } +} + +public class B<T> : A +{ + public B(string name) + { + System.Console.WriteLine("Creating object B({0})", name); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj new file mode 100644 index 0000000000..2ce9c9f380 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case2.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Case2</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Case2.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Library1.csproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs new file mode 100644 index 0000000000..fe690176a7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +//Non-generic class B and generic class A + +public class HelloWorld +{ + public static int Main() + { + try { B b = new B(GetName()); } + catch (System.Exception) + { + System.Console.WriteLine("PASS"); + return 100; + } + System.Console.WriteLine("FAIL"); + return -1; + } + public static string GetName() { throw new System.Exception(); } +} + +public class B : A<string> +{ + public B(string name) + { + System.Console.WriteLine("Creating object B({0})", name); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj new file mode 100644 index 0000000000..feeadba56f --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case3.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Case3</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Case3.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Library2.csproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs new file mode 100644 index 0000000000..745f23a504 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +//generic classes A and B + +public class HelloWorld +{ + public static int Main() + { + try { B<string> b = new B<string>(GetName()); } + catch (System.Exception) + { + System.Console.WriteLine("PASS"); + return 100; + } + System.Console.WriteLine("FAIL"); + return -1; + } + public static string GetName() { throw new System.Exception(); } +} + +public class B<T> : A<T> +{ + public B(string name) + { + System.Console.WriteLine("Creating object B({0})", name); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj new file mode 100644 index 0000000000..1938afa62e --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Case4.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Case4</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Case4.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Library2.csproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs new file mode 100644 index 0000000000..833baedb2c --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +public class A +{ + ~A() + { + System.Console.WriteLine("Class A finalizer called"); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj new file mode 100644 index 0000000000..0fa4e8c6e3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library1.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Library1</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Library1.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs new file mode 100644 index 0000000000..d7e68082f1 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +public class A<T> +{ + ~A() + { + System.Console.WriteLine("Class A finalizer called"); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj new file mode 100644 index 0000000000..4f8b714076 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_813331/Library2.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Library2</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Library2.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs new file mode 100644 index 0000000000..398508d7e9 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +/// <summary> +/// Regression test case for Dev10 851479 bug: Stackoverflow in .NET when using self referencing generics along with type constraints to another type parameter. +/// </summary> +class Program +{ + static Int32 Main() + { + Program p = new Program(); + + if (p.Run()) + { + Console.WriteLine("PASS"); + return 100; + } + else + { + Console.WriteLine("FAIL"); + return -1; + } + } + + public Boolean Run() + { + try + { + var B = new B(); + System.Console.WriteLine(B); + } + catch (Exception ex) + { + Console.WriteLine("Got unexpected error: " + ex); + return false; + } + + return true; + } +} + +class A<T, U> + where T : U + where U : A<T, U> { } + +class B : A<B, B> +{ +} diff --git a/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj new file mode 100644 index 0000000000..8f23535bde --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_851479/dev10_851479.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_851479</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_851479.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs new file mode 100644 index 0000000000..0b6d8dadb9 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.IO; + +interface IFoo { + void foo(); +} + +class My { + static int Main() + { + try { + IFoo s = null; + s.foo(); + } + catch (NullReferenceException) { + Console.WriteLine("Successfully caught a null reference exception."); + return 100; + } + + Console.WriteLine("Failed!!"); + return -1; + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj new file mode 100644 index 0000000000..b5d56cad44 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_889822/dev10_889822.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_889822</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_889822.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/Test.il b/tests/src/Loader/classloader/regressions/dev10_897464/Test.il new file mode 100644 index 0000000000..7177f3a225 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_897464/Test.il @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib +{ +} + +.assembly Test +{ + .hash algorithm 0x00008004 + .ver 1:0:0:0 +} + +.module Test.dll +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY + +.field public static literal valuetype Test.MyEnum LiteralValue = int32(0x00000001) + +.class public auto ansi sealed Test.MyEnum + extends [mscorlib]System.Enum +{ + .field public specialname rtspecialname int32 value__ + .field public static literal valuetype Test.MyEnum Zero = int32(0x00000000) + .field public static literal valuetype Test.MyEnum One = int32(0x00000001) +} + + +// Just here so we can reference something +/*.class interface public abstract auto ansi Test.IEmpty +{ +} +*/ diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj b/tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj new file mode 100644 index 0000000000..77903b344b --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_897464/Test.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Test</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Test.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs new file mode 100644 index 0000000000..7f3df9ca99 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.cs @@ -0,0 +1,43 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +/// <summary> +/// Regression test case for Dev10 897464 bug: Assemblies that contain global values will work with .NET 2.0 but fail with a BadImageFormat exception on .NET 4.0 +/// </summary> +class Program +{ + static Int32 Main() + { + Program p = new Program(); + + if (p.Run()) + { + Console.WriteLine("PASS"); + return 100; + } + else + { + Console.WriteLine("FAIL"); + return -1; + } + } + + public Boolean Run() + { + try + { + var v = Test.MyEnum.Zero; + Console.WriteLine(v); + } + catch (Exception ex) + { + Console.WriteLine("Got unexpected error: " + ex); + return false; + } + + return true; + } +} diff --git a/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj new file mode 100644 index 0000000000..376e93dcc7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev10_897464/dev10_897464.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev10_897464</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev10_897464.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="Test.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il new file mode 100644 index 0000000000..b966c9b8ad --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.il @@ -0,0 +1,102 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +// Generated by Synergy .NET compiler. + +.language '{EF62B8E3-E73E-4E46-8D14-02F45EC1D07B}', + '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', + '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' +.assembly extern System { auto } +.line 1 'c:\\wrk\\dbl\\src\\cmp_new\\cons7.dbl' +.assembly extern 'mscorlib' +{ + .ver 2:0:0:0 + .publickey = ( 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 ) +} +.assembly 'CONS7' {} +.module 'CONS7.exe' + + + +.class private sealed specialname _Synergy._Synergy {} + + +.namespace '_NS_CONS7' +{ + .class public auto ansi _CL + { + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGlobalScopeAttribute::.ctor() = ( 01 00 00 00 ) + } +} + +.namespace 'ns1' +{ + .class public auto ansi beforefieldinit 'MyGeneric`1'<T> extends ['mscorlib']'System'.'Object' + { + .method public hidebysig virtual final instance void 'test' () cil managed + { + .locals init ([0] class 'ns1'.'MyGeneric`1'/'$$_wrap_#1@test_2123805122'<!0> 'w') + .line 6 'c:\\wrk\\dbl\\src\\cmp_new\\cons7.dbl' + .maxstack 8 + newobj instance void class 'ns1'.'MyGeneric`1'/'$$_wrap_#1@test_2123805122'<!0>::.ctor() + stloc 'w' + _01: + ret + } + .class nested private sealed explicit '$$_#1@test_2123805122' extends [mscorlib]System.ValueType + { + .size 8 + } + .class nested private sealed auto '$$_wrap_#1@test_2123805122'<T> extends [mscorlib]System.Object + { + .data '$data_ns1_test_#1_2123805122' = bytearray(00 00 00 00 00 00 00 00 ) + .field public static initonly valuetype ns1.MyGeneric`1/'$$_#1@test_2123805122' $initstr at '$data_ns1_test_#1_2123805122' + .method public specialname void .ctor() + { + .maxstack 8 + .locals init ([0] native int iptr) + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ldsflda valuetype ns1.MyGeneric`1/'$$_#1@test_2123805122' class 'ns1'.'MyGeneric`1'/'$$_wrap_#1@test_2123805122'<!0>::$initstr + pop + ret + } + } + .method public specialname void .ctor () cil managed + { + ldarg.0 + call instance void object::.ctor() + .maxstack 8 + _01: + ret + } + } +} + +.namespace '_NS_CONS7' +{ + .class public auto ansi _CL + { + .custom instance void [System]System.ComponentModel.EditorBrowsableAttribute::.ctor(valuetype [System]System.ComponentModel.EditorBrowsableState) = ( 01 00 01 00 00 00 00 00 ) + .method public hidebysig static int32 MAIN$CONS7(string[] args) cil managed + { + .entrypoint + .locals init ( [0] class 'ns1'.'MyGeneric`1'<object> 'g') + .line 15 + .maxstack 8 + newobj instance void class 'ns1'.'MyGeneric`1'<object>::.ctor() + stloc.0 + .line 17 + ldloc.0 + call instance void class 'ns1'.'MyGeneric`1'<object>::'test'() + _01: + ldstr "PASS" + call void class [System.Console]System.Console::WriteLine(string) + ldc.i4 100 + ret + } + } +} + diff --git a/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj new file mode 100644 index 0000000000..8e3b28d7b7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_11333/dev11_11333.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev11_11333</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev11_11333.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/Library.il b/tests/src/Loader/classloader/regressions/dev11_221340/Library.il new file mode 100644 index 0000000000..03472b499c --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_221340/Library.il @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib {} +.assembly Library {} + +.class public auto ansi sealed MyClass1 +{ + .field public int32 myValue1 +} + +.class public auto ansi MyClass2 extends MyClass1 +{ + .field public int32 myValue2 +} diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj b/tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj new file mode 100644 index 0000000000..a0aa82e250 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_221340/Library.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Library</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Library.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il new file mode 100644 index 0000000000..5c508462c3 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.il @@ -0,0 +1,42 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib +{ + .ver 2:0:5:0 + .publickeytoken = (b7 7a 5c 56 19 34 e0 89) +} + +//Header for this dll +.assembly TestLib +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module TestLib.dll + +//The parent-class wich inherits enum +.class public auto ansi VA + extends [mscorlib]System.Enum +{ + + .field public specialname rtspecialname int32 value__ + + .field public static literal valuetype VA None = int32(0) + .field public static literal valuetype VA Leet = int32(1337) + +} + +//The vulnerable object: Enum.ToObject will overwrite both: the actual value of the enum (int32) and the obj-field (actually a pointer) +.class public auto ansi UB1 + extends VA +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } + .field public class [mscorlib]System.Object obj +} diff --git a/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj new file mode 100644 index 0000000000..30a31a9fff --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_221340/TestLib.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>TestLib</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="TestLib.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_256384/Library.cs b/tests/src/Loader/classloader/regressions/dev11_256384/Library.cs new file mode 100644 index 0000000000..5673cc4066 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_256384/Library.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +public interface I +{ + void M(); +} + +public class A : I +{ + public virtual void M() {} +} + +public class B_JIT : A +{ + // Just to make sure that we do not have shared VTable indirection with parent + public virtual void M2() {} +} diff --git a/tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj b/tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj new file mode 100644 index 0000000000..c75fd114de --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_256384/Library.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Library</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Library.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs new file mode 100644 index 0000000000..ebf5e58c0e --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public class Base<T> +{ +} + +public class Child<T> : Base<T> +{ +} + +public class VarType +{ + static public void foo<T>() + { + Console.WriteLine(typeof(T).ToString()); + } +} diff --git a/tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj new file mode 100644 index 0000000000..f4fa7821b2 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_38348/Lib.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>Lib</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="Lib.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs new file mode 100644 index 0000000000..04a3e35e8b --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.cs @@ -0,0 +1,10 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +// this struct will be referenced via type forwarder +public struct ProblematicStructThatIsForwarded +{ + public int value; +} diff --git a/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj new file mode 100644 index 0000000000..539161c033 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_383846/LibraryThatImplementsStruct.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>LibraryThatImplementsStruct</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="LibraryThatImplementsStruct.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj b/tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj new file mode 100644 index 0000000000..cadca984f7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_383846/TypeForwarderLibrary.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>TypeForwarderLibrary</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="LibraryThatImplementsStruct.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs new file mode 100644 index 0000000000..7c27539deb --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.cs @@ -0,0 +1,46 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/* Regression Test for Dev11 bug #95728: LINQ/CLR :: Accessing a static generic field <String> causes CLR to crash with FatalExecutionEngineError +* +* Comments from bug: FatalExecutionEngineError: The runtime has encountered a fatal error. The address of the error was at 0x71ff5dcd, +* on thread 0x7f4. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user +* code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack. +*/ + +using System; +using System.Linq.Expressions; + +namespace StaticFieldBug +{ + public class StubClass<T> + { + public StubClass(T value) + { + StubClass<T>.StaticField = value; + } + public static T StaticField = default(T); + public static T StaticProperty + { + get { return StaticField; } + } + } + + class Program + { + static int Main(string[] args) + { + Foo<string>("Run me to crash LINQ..."); + + Console.WriteLine("PASS (we didn't crash)!"); + return 100; + } + public static void Foo<T>(T value) + { + Expression<Func<int, T>> lambda; + StubClass<T> foo = new StubClass<T>((T)value); + lambda = i => StubClass<T>.StaticField; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj new file mode 100644 index 0000000000..893005c41d --- /dev/null +++ b/tests/src/Loader/classloader/regressions/dev11_95728/dev11_95728.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>dev11_95728</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="dev11_95728.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw111021/main.cs b/tests/src/Loader/classloader/regressions/vsw111021/main.cs new file mode 100644 index 0000000000..7a107d7f00 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw111021/main.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +public class CMain{ + public static int Count = 0; + public static int Main(String[] args){ + String s; + s = Gen<String>.x; + // we expect the Gen<T>.cctor to fire only once! + if(1 == Count){ + Console.WriteLine("PASS"); + return 100; + } + else{ + Console.WriteLine("FAIL"); + return 101; + } + } +} + +public class Gen<T>{ + + public static T x; + static Gen(){ + CMain.Count++; + Console.WriteLine("cctor. Type: {0}",typeof(T).ToString()); + } +} diff --git a/tests/src/Loader/classloader/regressions/vsw111021/main.csproj b/tests/src/Loader/classloader/regressions/vsw111021/main.csproj new file mode 100644 index 0000000000..2719060551 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw111021/main.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>main</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="main.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il new file mode 100644 index 0000000000..41468e99c7 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.il @@ -0,0 +1,224 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } + +// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.31013.0 +// Copyright (C) Microsoft Corporation 1998-2003. All rights reserved. + + + +// Metadata version: v2.0.31013 +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .hash = (0B D1 C7 0E 65 8B 67 F1 ED 21 D0 6D D4 DD 89 7A // ....e.g..!.m...z + 37 E9 11 BE ) // 7... + .ver 2:0:3600:0 +} +.assembly initialize +{ + + // --- The following custom attribute is added automatically, do not uncomment ------- + // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, + // bool) = ( 01 00 00 01 00 00 ) + + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module initialize.exe +// MVID: {31E86D7D-808F-4F1C-A755-94B3084C6466} +.imagebase 0x00400000 +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 // WINDOWS_CUI +.corflags 0x00000001 // ILONLY +// Image base: 0x03FA0000 + + +// =============== CLASS MEMBERS DECLARATION =================== + +.class sealed private auto ansi beforefieldinit C<([mscorlib]System.Object) T> + extends [mscorlib]System.ValueType +{ + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 75 (0x4b) + .maxstack 4 + IL_0006: ldc.i4.1 + IL_0007: stsfld bool Test::run + IL_000c: ldtoken !0 + IL_0011: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0016: ldsfld class [mscorlib]System.Type Test::t + IL_001b: beq.s IL_004a + + IL_001d: ldstr "C.typeof, typeof(T) = " + IL_0022: ldtoken !0 + IL_0027: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_002c: callvirt instance string [mscorlib]System.Object::ToString() + IL_0031: ldstr ", Test.t = " + IL_0036: ldsfld class [mscorlib]System.Type Test::t + IL_003b: callvirt instance string [mscorlib]System.Object::ToString() + IL_0040: call string [mscorlib]System.String::Concat(string, + string, + string, + string) + IL_0045: call void Test::fail(string) + IL_004a: ret + } // end of method C::.ctor + +} // end of valuetype C + +.class private auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + .field public static class [mscorlib]System.Type t + .field public static bool run + .field private static int32 failures + .method public hidebysig static void fail(string msg) cil managed + { + // Code size 24 (0x18) + .maxstack 8 + IL_0000: ldstr "Failure: {0}" + IL_0005: ldarg.0 + IL_0006: call void [System.Console]System.Console::WriteLine(string, + object) + IL_000b: ldsfld int32 Test::failures + IL_0010: ldc.i4.1 + IL_0011: add + IL_0012: stsfld int32 Test::failures + IL_0017: ret + } // end of method Test::fail + + .method private hidebysig static int32 + Main() cil managed + { + .entrypoint + // Code size 247 (0xf7) + .maxstack 5 + .locals init (valuetype C<int32>[] V_0, + valuetype C<string>[] V_1, + valuetype C<string[]>[] V_2, + valuetype C<object>[] V_3, + int32 V_4) + + IL_0000: ldc.i4.0 + IL_0001: stsfld bool Test::run + IL_0006: ldtoken [mscorlib]System.Int32 + IL_000b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0010: stsfld class [mscorlib]System.Type Test::t + IL_0015: ldc.i4.1 + IL_0016: newarr valuetype C<int32> + IL_001b: stloc.0 + IL_001c: ldloc.0 + IL_001d: callvirt instance void [mscorlib]System.Array::Initialize() + IL_0022: ldsfld bool Test::run + IL_0027: brtrue.s IL_0033 + IL_0029: ldstr "contructor not run" + IL_002e: call void Test::fail(string) + + + + IL_0033: ldstr "C<int> passed" call void [System.Console]System.Console::WriteLine(string) + + ldc.i4.0 + IL_0034: stsfld bool Test::run + IL_0039: ldtoken [mscorlib]System.String + IL_003e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0043: stsfld class [mscorlib]System.Type Test::t + IL_0048: ldc.i4.1 + IL_0049: newarr valuetype C<string> + IL_004e: stloc.1 + IL_004f: ldloc.1 + IL_0050: callvirt instance void [mscorlib]System.Array::Initialize() + IL_0055: ldsfld bool Test::run + IL_005a: brtrue.s IL_0066 + + IL_005c: ldstr "contructor not run" + IL_0061: call void Test::fail(string) + IL_0066: ldstr "C<string> passed" call void [System.Console]System.Console::WriteLine(string) + + ldc.i4.0 + IL_0067: stsfld bool Test::run + IL_006c: ldtoken string[] + IL_0071: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0076: stsfld class [mscorlib]System.Type Test::t + IL_007b: ldc.i4.1 + IL_007c: newarr valuetype C<string[]> + IL_0081: stloc.2 + IL_0082: ldloc.2 + IL_0083: callvirt instance void [mscorlib]System.Array::Initialize() + IL_0088: ldsfld bool Test::run + IL_008d: brtrue.s IL_0099 + + IL_008f: ldstr "contructor not run" + IL_0094: call void Test::fail(string) + IL_0099: ldstr "C<string[]> passed" call void [System.Console]System.Console::WriteLine(string) + + ldc.i4.0 + IL_009a: stsfld bool Test::run + IL_009f: ldtoken [mscorlib]System.Object + IL_00a4: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_00a9: stsfld class [mscorlib]System.Type Test::t + IL_00ae: ldc.i4.1 + IL_00af: newarr valuetype C<object> + IL_00b4: stloc.3 + IL_00b5: ldloc.3 + IL_00b6: callvirt instance void [mscorlib]System.Array::Initialize() + IL_00bb: ldsfld bool Test::run + IL_00c0: brtrue.s IL_00cc + + IL_00c2: ldstr "contructor not run" + IL_00c7: call void Test::fail(string) + IL_00cc: ldstr "C<object> passed" call void [System.Console]System.Console::WriteLine(string) + + ldsfld int32 Test::failures + IL_00d1: ldc.i4.0 + IL_00d2: ble.s IL_00e4 + + IL_00d4: ldstr "Test Failed" + IL_00d9: call void [System.Console]System.Console::WriteLine(string) + IL_00de: ldc.i4.s 99 + IL_00e0: stloc.s V_4 + IL_00e2: br.s IL_00f4 + + IL_00e4: ldstr "Test Passed" + IL_00e9: call void [System.Console]System.Console::WriteLine(string) + IL_00ee: ldc.i4.s 100 + IL_00f0: stloc.s V_4 + IL_00f2: br.s IL_00f4 + + IL_00f4: ldloc.s V_4 + IL_00f6: ret + } // end of method Test::Main + + .method private hidebysig specialname rtspecialname static + void .cctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 Test::failures + IL_0006: ret + } // end of method Test::.cctor + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: ret + } // end of method Test::.ctor + +} // end of class Test + + +// ============================================================= + +//*********** DISASSEMBLY COMPLETE *********************** +// WARNING: Created Win32 resource file initialize-struct.res diff --git a/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj new file mode 100644 index 0000000000..1708db6d4c --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw188290/vsw188290.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw188290</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw188290.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il new file mode 100644 index 0000000000..f0dba5c6e8 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssert.il @@ -0,0 +1,74 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib { } +.assembly GenericAssert +{ + .hash algorithm 0x00008004 + .ver 0:0:0:0 + .custom instance void [mscorlib]System.Security.SecurityRulesAttribute::.ctor(valuetype [mscorlib]System.Security.SecurityRuleSet) = ( 01 00 02 00 00 ) .custom instance void [mscorlib]System.Security.SecurityTransparentAttribute::.ctor() = ( 01 00 00 00 ) + .permissionset reqrefuse + "<PermissionSet class=\"System.Security.PermissionSet\" version=\"1\">" + + "<IPermission class=\"System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600, Culture=neutral, PublicKeyToken=b77a5c561934e089\" version=\"1\"" + + "Flags=\"SkipVerification\"/>" + + "</PermissionSet>" +} +.module GenericAssert + +.class interface public ContraVariantInterface<-T> { } +.class public interface StandardInterface { } + +.class public A extends [mscorlib]System.Object implements StandardInterface +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + .maxstack 1 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} + +.class public GenericAssert +{ + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 8 + + .try + { + // get the type of ContraVariantInterface<A> + ldtoken class ContraVariantInterface<class A> + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + + // now get the type of StandardInterface + ldtoken class StandardInterface + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + + // make sure they're compatible + callvirt instance bool [mscorlib]System.Type::IsAssignableFrom(class [mscorlib]System.Type) + leave PASS + } + catch [mscorlib]System.Exception + { + + leave FAIL + } + +PASS: + ldc.i4 100 + ldstr "Pass" + call void [System.Console]System.Console::WriteLine(string) + ret + +FAIL: + ldc.i4 101 + ldstr "FAIL" + call void [System.Console]System.Console::WriteLine(string) + ret + } +} + diff --git a/tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj new file mode 100644 index 0000000000..c4664e5150 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw305955/GenericAssertin.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>GenericAssertin</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="GenericAssert.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs new file mode 100644 index 0000000000..bdd05d03d9 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// this is regression test for VSW 307137 + +/* +The bug description has a good summary of the issue (from AtsushiK): + +A summary of the whole sordid affair. + + +In V1 and Everett, sequential classes only affected unmanaged layout and the .size metadata was used to add padding to the +unmanaged layout (IJW used this to implement their unmanaged structures. That's the only reason the .size metadata exists. +Somewhere along the line, C# started using the .size metadata to implemented fixed buffer arrays inside managed structures. +They'd declare just one field of the array element type and use the .size metadata to allocate space for the other elements. +Problem was, the .size metadata was never defined to expand the managed layout. This feature should never have worked. + +So how did it work for them? Plain dumb luck. In the CLR, if your structure consists of just one scalar-type field, the CLR +classifies it internally as a "blittable" structure. That is, it makes the managed layout match the unmanaged layout byte for +byte so that interop can optimize the marshaling of this structure to a bit-copy. Thus, because of this accidental reliance on +this internal optimization by the CLR, fixed buffers "worked" for plain old integer/float/double types. +There was two cases where it wouldn't work: chars and booleans. That's because these datatypes don't translate byte for +byte (different sizes, bools need normalizing.) So the blitting optimization doesn't kick in in those cases. + +Someone found out that the was case for chars and opened VSW:147145. A couple months later, I unwittingly"fixed" this bug +when I implemented the managed sequential layout feature. This feature now causes the .size metadata to expand out the +managed layout too (whether this was a good idea is debatable but it got VSW:147145 off the CLR team's back even though +they didn't understand how it got fixed..) + +Now we have the boolean case. Booleans are also non-blittable (they have to be normalized so they aren't blittable even if you +use a FieldMarshal override to force the native size to 1.) But because both the unmanaged size and managed size impose a +minimum value on the .size metadata, the .size metadata can't go below 4 (sizeof(BOOL) in Win32 native). + +CLR now overrides the .size metadata if it is less than the minimum size needed to hold the fields. + +*/ + +using System; + +unsafe struct S +{ + fixed bool b[3]; +} + +public class Test +{ + public static int Main() + { + try + { + #pragma warning disable 219 + S s = new S(); + #pragma warning restore 219 + + Console.WriteLine("PASS"); + return 100; + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected excpetion: " + e); + return 101; + } + } + +} diff --git a/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj new file mode 100644 index 0000000000..c79c07d4cd --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw307137/vsw307137.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw307137</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw307137.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il new file mode 100644 index 0000000000..02341b48ba --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.il @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +.assembly extern System.Console { } +.assembly extern mscorlib +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} + +.assembly moduleCctorThrow {} + + + .method private hidebysig specialname rtspecialname static + void .cctor() cil managed + { + .maxstack 8 + nop + ldstr "Inside module .cctor" + call void [System.Console]System.Console::WriteLine(string) + + newobj instance void [mscorlib]System.Exception::.ctor() + throw + + ret + } // end of method Foo::.cctor + + + +.class public auto ansi TriggerModuleCctorClass + extends [mscorlib]System.Object +{ + .field public static int32 intStatic + + .method public static void CheckInit() noinlining + { + ret + } + + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + + .maxstack 8 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } // end of method Test1::.ctor + +} + diff --git a/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj new file mode 100644 index 0000000000..f0e33fa40a --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw529206/moduleCctorThrow.ilproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>moduleCctorThrow</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>true</ReferenceLocalMscorlib> + <OutputType>Library</OutputType> + <CLRTestKind>BuildOnly</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="moduleCctorThrow.il" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs new file mode 100644 index 0000000000..9bc966a1da --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.cs @@ -0,0 +1,93 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// regression test for VSWhidbey 529206 for throwing TypeInitialization inside module .cctor +// We were appending every time the callstack and using the same exception object. +// Now we still use the same object, but callstack is cleared every time. + + +using System; +using System.Runtime.CompilerServices; + +class Test +{ + public static bool pass; + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void RunTest() + { + // TRIGGER: static field access, ref type + TriggerModuleCctorClass.intStatic = 5; + } + + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void RunTest2() + { + // TRIGGER: static field access, ref type + TriggerModuleCctorClass.intStatic = 5; + } + + public static int Main() + { + pass = true; + + try + { + RunTest(); + + Console.WriteLine("Did not catch expected TypeInitializationException exception"); + pass = false; + } + catch (TypeInitializationException e) + { + Console.WriteLine("Caught expected exception 1st time\n" + e); + + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected exception 1st time: " + e); + pass = false; + } + + + try + { + RunTest2(); + + Console.WriteLine("Did not catch expected TypeInitializationException exception"); + pass = false; + } + catch (TypeInitializationException e ) + { + Console.WriteLine("Caught expected exception 2nd time\n" + e); + + // if this string is found in the callstack it means we're appending callstack + // instead of having a new one each time. + if (e.StackTrace.IndexOf("at Test.RunTest()") != -1) + { + Console.WriteLine("2nd time: Incorrect stack trace"); + pass = false; + } + + } + catch (Exception e) + { + Console.WriteLine("Caught unexpected exception 2nd time: " + e); + pass = false; + + } + + if (pass) + { + Console.WriteLine("PASS"); + return 100; + } + else + { + Console.WriteLine("FAIL"); + return 101; + } + } +} diff --git a/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj new file mode 100644 index 0000000000..90fa1610e4 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw529206/vsw529206ModuleCctor.csproj @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw529206ModuleCctor</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="vsw529206ModuleCctor.cs" /> + </ItemGroup> + + + <ItemGroup> + <ProjectReference Include="moduleCctorThrow.ilproj" /> + </ItemGroup> + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> diff --git a/tests/src/Loader/classloader/regressions/vsw531159/repro.cs b/tests/src/Loader/classloader/regressions/vsw531159/repro.cs new file mode 100644 index 0000000000..768bd8bfa0 --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw531159/repro.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +public class Gen<U> +{ + public void Meth<T>(T t) where T : struct, U {} +} + +public class Test +{ + public static int Main() + { + try + { + Gen<System.ValueType> g1 = new Gen<ValueType>(); + g1.Meth(1); + Console.WriteLine("PASS"); + return 100; + } + catch(Exception e) + { + Console.WriteLine("cuaght unexpected exception \n {0}", e); + return 99; + } + } +} + diff --git a/tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj b/tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj new file mode 100644 index 0000000000..34dfb059ea --- /dev/null +++ b/tests/src/Loader/classloader/regressions/vsw531159/vsw531159.csproj @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <AssemblyName>vsw531159</AssemblyName> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <NuGetPackageImportStamp>7a9bfb7d</NuGetPackageImportStamp> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + <ReferenceLocalMscorlib>false</ReferenceLocalMscorlib> + <OutputType>Exe</OutputType> + <CLRTestKind>BuildAndRun</CLRTestKind> + <CLRTestPriority>0</CLRTestPriority> + </PropertyGroup> + + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + + <ItemGroup> + <Compile Include="repro.cs" /> + </ItemGroup> + + + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> +</Project> |