[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": ".gitignore",
    "content": "# This .gitignore file should be placed at the root of your Unity project directory\n#\n# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore\n#\n/[Ll]ibrary/\n/[Tt]emp/\n/[Oo]bj/\n/[Bb]uild/\n/[Bb]uilds/\n/[Ll]ogs/\n/[Uu]ser[Ss]ettings/\n\n# MemoryCaptures can get excessive in size.\n# They also could contain extremely sensitive data\n/[Mm]emoryCaptures/\n\n# Recordings can get excessive in size\n/[Rr]ecordings/\n\n# Uncomment this line if you wish to ignore the asset store tools plugin\n# /[Aa]ssets/AssetStoreTools*\n\n# Autogenerated Jetbrains Rider plugin\n/[Aa]ssets/Plugins/Editor/JetBrains*\n\n# Visual Studio cache directory\n.vs/\n\n# Gradle cache directory\n.gradle/\n\n# Autogenerated VS/MD/Consulo solution and project files\nExportedObj/\n.consulo/\n*.csproj\n*.unityproj\n*.sln\n*.suo\n*.tmp\n*.user\n*.userprefs\n*.pidb\n*.booproj\n*.svd\n*.pdb\n*.mdb\n*.opendb\n*.VC.db\n\n# Unity3D generated meta files\n*.pidb.meta\n*.pdb.meta\n*.mdb.meta\n\n# Unity3D generated file on crash reports\nsysinfo.txt\n\n# Builds\n*.apk\n*.aab\n*.unitypackage\n*.app\n\n# Crashlytics generated file\ncrashlytics-build.properties\n\n# Packed Addressables\n/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*\n\n# Temporary auto-generated Android Assets\n/[Aa]ssets/[Ss]treamingAssets/aa.meta\n/[Aa]ssets/[Ss]treamingAssets/aa/*\n\n# Visual Studio Code cache directory\n.vscode/\n\n# DS_Store\n*.DS_Store"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstHelpers.cs",
    "content": "﻿using Unity.Burst.Intrinsics;\n\nnamespace BurstLinq\n{\n    internal static unsafe class BurstHelpers\n    {\n        internal static bool IsFloatingPoint256Supported => X86.Avx.IsAvxSupported;\n        internal static bool IsInteger256Supported => X86.Avx2.IsAvx2Supported;\n        internal static bool IsV256Supported => X86.Avx2.IsAvx2Supported;\n        internal static bool IsV128Supported => Arm.Neon.IsNeonSupported||X86.Sse4_1.IsSse41Supported;\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstHelpers.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 617908ec85574495e82cbe33f5fa3c3a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinq.asmdef",
    "content": "{\n    \"name\": \"BurstLinq\",\n    \"rootNamespace\": \"BurstLinq\",\n    \"references\": [\n        \"GUID:e0cd26848372d4e5c891c569017e11f1\",\n        \"GUID:2665a8d13d1b3f18800f46e256720795\",\n        \"GUID:d8b63aba1907145bea998dd612889d6b\"\n    ],\n    \"includePlatforms\": [],\n    \"excludePlatforms\": [],\n    \"allowUnsafeCode\": true,\n    \"overrideReferences\": false,\n    \"precompiledReferences\": [],\n    \"autoReferenced\": true,\n    \"defineConstraints\": [],\n    \"versionDefines\": [],\n    \"noEngineReferences\": false\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinq.asmdef.meta",
    "content": "fileFormatVersion: 2\nguid: 75a4edf3e29b24eacad77b2b175d4d8f\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Average.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Unity.Collections;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static double Average(this int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (int* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this List<int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this Memory<int> source)\n        {\n            return Average((ReadOnlySpan<int>)source.Span);\n        }\n\n        public static double Average(this ReadOnlyMemory<int> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double Average(this Span<int> source)\n        {\n            return Average((ReadOnlySpan<int>)source);\n        }\n\n        public static double Average(this ReadOnlySpan<int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (int* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Average(this uint[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (uint* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this List<uint> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this Memory<uint> source)\n        {\n            return Average((ReadOnlySpan<uint>)source.Span);\n        }\n\n        public static double Average(this ReadOnlyMemory<uint> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double Average(this Span<uint> source)\n        {\n            return Average((ReadOnlySpan<uint>)source);\n        }\n\n        public static double Average(this ReadOnlySpan<uint> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (uint* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Average(this long[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (long* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this List<long> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (long* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this Memory<long> source)\n        {\n            return Average((ReadOnlySpan<long>)source.Span);\n        }\n\n        public static double Average(this ReadOnlyMemory<long> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double Average(this Span<long> source)\n        {\n            return Average((ReadOnlySpan<long>)source);\n        }\n\n        public static double Average(this ReadOnlySpan<long> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (long* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Average(this ulong[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (ulong* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this List<ulong> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ulong* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this Memory<ulong> source)\n        {\n            return Average((ReadOnlySpan<ulong>)source.Span);\n        }\n\n        public static double Average(this ReadOnlyMemory<ulong> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double Average(this Span<ulong> source)\n        {\n            return Average((ReadOnlySpan<ulong>)source);\n        }\n\n        public static double Average(this ReadOnlySpan<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (ulong* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float Average(this float[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (float* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float Average(this List<float> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float Average(this Memory<float> source)\n        {\n            return Average((ReadOnlySpan<float>)source.Span);\n        }\n\n        public static float Average(this ReadOnlyMemory<float> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static float Average(this Span<float> source)\n        {\n            return Average((ReadOnlySpan<float>)source);\n        }\n\n        public static float Average(this ReadOnlySpan<float> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (float* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Average(this double[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (double* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this List<double> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Average(this Memory<double> source)\n        {\n            return Average((ReadOnlySpan<double>)source.Span);\n        }\n\n        public static double Average(this ReadOnlyMemory<double> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double Average(this Span<double> source)\n        {\n            return Average((ReadOnlySpan<double>)source);\n        }\n\n        public static double Average(this ReadOnlySpan<double> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (double* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector2 Average(this Vector2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (Vector2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2 Average(this List<Vector2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector2* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2 Average(this Memory<Vector2> source)\n        {\n            return Average((ReadOnlySpan<Vector2>)source.Span);\n        }\n\n        public static Vector2 Average(this ReadOnlyMemory<Vector2> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static Vector2 Average(this Span<Vector2> source)\n        {\n            return Average((ReadOnlySpan<Vector2>)source);\n        }\n\n        public static Vector2 Average(this ReadOnlySpan<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (Vector2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector2 Average(this Vector2Int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (Vector2Int* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2 Average(this List<Vector2Int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector2Int* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2 Average(this Memory<Vector2Int> source)\n        {\n            return Average((ReadOnlySpan<Vector2Int>)source.Span);\n        }\n\n        public static Vector2 Average(this ReadOnlyMemory<Vector2Int> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static Vector2 Average(this Span<Vector2Int> source)\n        {\n            return Average((ReadOnlySpan<Vector2Int>)source);\n        }\n\n        public static Vector2 Average(this ReadOnlySpan<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (Vector2Int* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector3 Average(this Vector3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (Vector3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3 Average(this List<Vector3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector3* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3 Average(this Memory<Vector3> source)\n        {\n            return Average((ReadOnlySpan<Vector3>)source.Span);\n        }\n\n        public static Vector3 Average(this ReadOnlyMemory<Vector3> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static Vector3 Average(this Span<Vector3> source)\n        {\n            return Average((ReadOnlySpan<Vector3>)source);\n        }\n\n        public static Vector3 Average(this ReadOnlySpan<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (Vector3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector3 Average(this Vector3Int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (Vector3Int* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3 Average(this List<Vector3Int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector3Int* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3 Average(this Memory<Vector3Int> source)\n        {\n            return Average((ReadOnlySpan<Vector3Int>)source.Span);\n        }\n\n        public static Vector3 Average(this ReadOnlyMemory<Vector3Int> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static Vector3 Average(this Span<Vector3Int> source)\n        {\n            return Average((ReadOnlySpan<Vector3Int>)source);\n        }\n\n        public static Vector3 Average(this ReadOnlySpan<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (Vector3Int* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector4 Average(this Vector4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (Vector4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector4 Average(this List<Vector4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector4* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector4 Average(this Memory<Vector4> source)\n        {\n            return Average((ReadOnlySpan<Vector4>)source.Span);\n        }\n\n        public static Vector4 Average(this ReadOnlyMemory<Vector4> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static Vector4 Average(this Span<Vector4> source)\n        {\n            return Average((ReadOnlySpan<Vector4>)source);\n        }\n\n        public static Vector4 Average(this ReadOnlySpan<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (Vector4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double2 Average(this int2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (int2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double2 Average(this List<int2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int2* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double2 Average(this Memory<int2> source)\n        {\n            return Average((ReadOnlySpan<int2>)source.Span);\n        }\n\n        public static double2 Average(this ReadOnlyMemory<int2> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double2 Average(this Span<int2> source)\n        {\n            return Average((ReadOnlySpan<int2>)source);\n        }\n\n        public static double2 Average(this ReadOnlySpan<int2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (int2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double3 Average(this int3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (int3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double3 Average(this List<int3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int3* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double3 Average(this Memory<int3> source)\n        {\n            return Average((ReadOnlySpan<int3>)source.Span);\n        }\n\n        public static double3 Average(this ReadOnlyMemory<int3> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double3 Average(this Span<int3> source)\n        {\n            return Average((ReadOnlySpan<int3>)source);\n        }\n\n        public static double3 Average(this ReadOnlySpan<int3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (int3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double4 Average(this int4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (int4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double4 Average(this List<int4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int4* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double4 Average(this Memory<int4> source)\n        {\n            return Average((ReadOnlySpan<int4>)source.Span);\n        }\n\n        public static double4 Average(this ReadOnlyMemory<int4> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double4 Average(this Span<int4> source)\n        {\n            return Average((ReadOnlySpan<int4>)source);\n        }\n\n        public static double4 Average(this ReadOnlySpan<int4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (int4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float2 Average(this float2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (float2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float2 Average(this List<float2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float2* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float2 Average(this Memory<float2> source)\n        {\n            return Average((ReadOnlySpan<float2>)source.Span);\n        }\n\n        public static float2 Average(this ReadOnlyMemory<float2> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static float2 Average(this Span<float2> source)\n        {\n            return Average((ReadOnlySpan<float2>)source);\n        }\n\n        public static float2 Average(this ReadOnlySpan<float2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (float2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float3 Average(this float3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (float3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float3 Average(this List<float3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float3* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float3 Average(this Memory<float3> source)\n        {\n            return Average((ReadOnlySpan<float3>)source.Span);\n        }\n\n        public static float3 Average(this ReadOnlyMemory<float3> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static float3 Average(this Span<float3> source)\n        {\n            return Average((ReadOnlySpan<float3>)source);\n        }\n\n        public static float3 Average(this ReadOnlySpan<float3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (float3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float4 Average(this float4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (float4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float4 Average(this List<float4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float4* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float4 Average(this Memory<float4> source)\n        {\n            return Average((ReadOnlySpan<float4>)source.Span);\n        }\n\n        public static float4 Average(this ReadOnlyMemory<float4> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static float4 Average(this Span<float4> source)\n        {\n            return Average((ReadOnlySpan<float4>)source);\n        }\n\n        public static float4 Average(this ReadOnlySpan<float4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (float4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double2 Average(this double2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (double2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double2 Average(this List<double2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double2* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double2 Average(this Memory<double2> source)\n        {\n            return Average((ReadOnlySpan<double2>)source.Span);\n        }\n\n        public static double2 Average(this ReadOnlyMemory<double2> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double2 Average(this Span<double2> source)\n        {\n            return Average((ReadOnlySpan<double2>)source);\n        }\n\n        public static double2 Average(this ReadOnlySpan<double2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (double2* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double3 Average(this double3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (double3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double3 Average(this List<double3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double3* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double3 Average(this Memory<double3> source)\n        {\n            return Average((ReadOnlySpan<double3>)source.Span);\n        }\n\n        public static double3 Average(this ReadOnlyMemory<double3> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double3 Average(this Span<double3> source)\n        {\n            return Average((ReadOnlySpan<double3>)source);\n        }\n\n        public static double3 Average(this ReadOnlySpan<double3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (double3* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double4 Average(this double4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (double4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double4 Average(this List<double4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double4* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double4 Average(this Memory<double4> source)\n        {\n            return Average((ReadOnlySpan<double4>)source.Span);\n        }\n\n        public static double4 Average(this ReadOnlyMemory<double4> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static double4 Average(this Span<double4> source)\n        {\n            return Average((ReadOnlySpan<double4>)source);\n        }\n\n        public static double4 Average(this ReadOnlySpan<double4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (double4* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Average.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 78fa11b0b39df45cf92985561e609461\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Average.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n    \n    System.Func<string, string> retType = (string x) => \n    {\n        switch (x)\n        {\n            default: return \"double\";\n            case \"float\": return \"float\";\n            case \"Vector2\":\n            case \"Vector2Int\": return \"Vector2\";\n            case \"Vector3\":\n            case \"Vector3Int\": return \"Vector3\";\n            case \"Vector4\": return \"Vector4\";\n            case \"float2\": return \"float2\";\n            case \"float3\": return \"float3\";\n            case \"float4\": return \"float4\";\n            case \"int2\":\n            case \"double2\": return \"double2\";\n            case \"int3\":\n            case \"double3\": return \"double3\";\n            case \"int4\":\n            case \"double4\": return \"double4\";\n        }\n        return \"\";\n    };\n#>\nusing System;\nusing System.Collections.Generic;\nusing Unity.Collections;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=retType(type)#> Average(this <#=type#>[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            \n            fixed (<#=type#>* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static <#=retType(type)#> Average(this List<<#=type#>> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (<#=type#>* ptr = span)\n            {\n                AverageCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static <#=retType(type)#> Average(this Memory<<#=type#>> source)\n        {\n            return Average((ReadOnlySpan<<#=type#>>)source.Span);\n        }\n\n        public static <#=retType(type)#> Average(this ReadOnlyMemory<<#=type#>> source)\n        {\n            return Average(source.Span);\n        }\n\n        public static <#=retType(type)#>  Average(this Span<<#=type#>> source)\n        {\n            return Average((ReadOnlySpan<<#=type#>>)source);\n        }\n\n        public static <#=retType(type)#>  Average(this ReadOnlySpan<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n\n            fixed (<#=type#>* ptr = source)\n            {\n                AverageCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Average.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 21e144b8b72bb4e0f842d711c313d4c4\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Contains.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static bool Contains(this byte[] source, byte value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (byte* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<byte> source, byte value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (byte* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<byte> source, byte value)\n        {\n            return Contains((ReadOnlySpan<byte>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<byte> source, byte value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<byte> source, byte value)\n        {\n            return Contains((ReadOnlySpan<byte>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<byte> source, byte value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (byte* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this sbyte[] source, sbyte value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (sbyte* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<sbyte> source, sbyte value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (sbyte* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<sbyte> source, sbyte value)\n        {\n            return Contains((ReadOnlySpan<sbyte>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<sbyte> source, sbyte value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<sbyte> source, sbyte value)\n        {\n            return Contains((ReadOnlySpan<sbyte>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<sbyte> source, sbyte value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (sbyte* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this short[] source, short value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (short* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<short> source, short value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (short* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<short> source, short value)\n        {\n            return Contains((ReadOnlySpan<short>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<short> source, short value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<short> source, short value)\n        {\n            return Contains((ReadOnlySpan<short>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<short> source, short value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (short* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this ushort[] source, ushort value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (ushort* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<ushort> source, ushort value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ushort* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<ushort> source, ushort value)\n        {\n            return Contains((ReadOnlySpan<ushort>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<ushort> source, ushort value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<ushort> source, ushort value)\n        {\n            return Contains((ReadOnlySpan<ushort>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<ushort> source, ushort value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (ushort* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this int[] source, int value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (int* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<int> source, int value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<int> source, int value)\n        {\n            return Contains((ReadOnlySpan<int>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<int> source, int value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<int> source, int value)\n        {\n            return Contains((ReadOnlySpan<int>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<int> source, int value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (int* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this uint[] source, uint value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (uint* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<uint> source, uint value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<uint> source, uint value)\n        {\n            return Contains((ReadOnlySpan<uint>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<uint> source, uint value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<uint> source, uint value)\n        {\n            return Contains((ReadOnlySpan<uint>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<uint> source, uint value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (uint* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this long[] source, long value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (long* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<long> source, long value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (long* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<long> source, long value)\n        {\n            return Contains((ReadOnlySpan<long>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<long> source, long value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<long> source, long value)\n        {\n            return Contains((ReadOnlySpan<long>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<long> source, long value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (long* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this ulong[] source, ulong value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (ulong* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<ulong> source, ulong value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ulong* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<ulong> source, ulong value)\n        {\n            return Contains((ReadOnlySpan<ulong>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<ulong> source, ulong value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<ulong> source, ulong value)\n        {\n            return Contains((ReadOnlySpan<ulong>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<ulong> source, ulong value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (ulong* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this float[] source, float value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (float* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<float> source, float value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<float> source, float value)\n        {\n            return Contains((ReadOnlySpan<float>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<float> source, float value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<float> source, float value)\n        {\n            return Contains((ReadOnlySpan<float>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<float> source, float value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (float* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this double[] source, double value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (double* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<double> source, double value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<double> source, double value)\n        {\n            return Contains((ReadOnlySpan<double>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<double> source, double value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<double> source, double value)\n        {\n            return Contains((ReadOnlySpan<double>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<double> source, double value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (double* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this Vector2[] source, Vector2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (Vector2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<Vector2> source, Vector2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector2* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<Vector2> source, Vector2 value)\n        {\n            return Contains((ReadOnlySpan<Vector2>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<Vector2> source, Vector2 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<Vector2> source, Vector2 value)\n        {\n            return Contains((ReadOnlySpan<Vector2>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<Vector2> source, Vector2 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (Vector2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this Vector2Int[] source, Vector2Int value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (Vector2Int* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<Vector2Int> source, Vector2Int value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector2Int* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<Vector2Int> source, Vector2Int value)\n        {\n            return Contains((ReadOnlySpan<Vector2Int>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<Vector2Int> source, Vector2Int value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<Vector2Int> source, Vector2Int value)\n        {\n            return Contains((ReadOnlySpan<Vector2Int>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<Vector2Int> source, Vector2Int value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (Vector2Int* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this Vector3[] source, Vector3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (Vector3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<Vector3> source, Vector3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector3* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<Vector3> source, Vector3 value)\n        {\n            return Contains((ReadOnlySpan<Vector3>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<Vector3> source, Vector3 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<Vector3> source, Vector3 value)\n        {\n            return Contains((ReadOnlySpan<Vector3>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<Vector3> source, Vector3 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (Vector3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this Vector3Int[] source, Vector3Int value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (Vector3Int* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<Vector3Int> source, Vector3Int value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector3Int* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<Vector3Int> source, Vector3Int value)\n        {\n            return Contains((ReadOnlySpan<Vector3Int>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<Vector3Int> source, Vector3Int value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<Vector3Int> source, Vector3Int value)\n        {\n            return Contains((ReadOnlySpan<Vector3Int>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<Vector3Int> source, Vector3Int value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (Vector3Int* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this Vector4[] source, Vector4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (Vector4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<Vector4> source, Vector4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector4* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<Vector4> source, Vector4 value)\n        {\n            return Contains((ReadOnlySpan<Vector4>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<Vector4> source, Vector4 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<Vector4> source, Vector4 value)\n        {\n            return Contains((ReadOnlySpan<Vector4>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<Vector4> source, Vector4 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (Vector4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this int2[] source, int2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (int2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<int2> source, int2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int2* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<int2> source, int2 value)\n        {\n            return Contains((ReadOnlySpan<int2>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<int2> source, int2 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<int2> source, int2 value)\n        {\n            return Contains((ReadOnlySpan<int2>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<int2> source, int2 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (int2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this int3[] source, int3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (int3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<int3> source, int3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int3* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<int3> source, int3 value)\n        {\n            return Contains((ReadOnlySpan<int3>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<int3> source, int3 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<int3> source, int3 value)\n        {\n            return Contains((ReadOnlySpan<int3>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<int3> source, int3 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (int3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this int4[] source, int4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (int4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<int4> source, int4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int4* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<int4> source, int4 value)\n        {\n            return Contains((ReadOnlySpan<int4>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<int4> source, int4 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<int4> source, int4 value)\n        {\n            return Contains((ReadOnlySpan<int4>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<int4> source, int4 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (int4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this uint2[] source, uint2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (uint2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<uint2> source, uint2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint2* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<uint2> source, uint2 value)\n        {\n            return Contains((ReadOnlySpan<uint2>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<uint2> source, uint2 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<uint2> source, uint2 value)\n        {\n            return Contains((ReadOnlySpan<uint2>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<uint2> source, uint2 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (uint2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this uint3[] source, uint3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (uint3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<uint3> source, uint3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint3* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<uint3> source, uint3 value)\n        {\n            return Contains((ReadOnlySpan<uint3>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<uint3> source, uint3 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<uint3> source, uint3 value)\n        {\n            return Contains((ReadOnlySpan<uint3>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<uint3> source, uint3 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (uint3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this uint4[] source, uint4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (uint4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<uint4> source, uint4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint4* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<uint4> source, uint4 value)\n        {\n            return Contains((ReadOnlySpan<uint4>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<uint4> source, uint4 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<uint4> source, uint4 value)\n        {\n            return Contains((ReadOnlySpan<uint4>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<uint4> source, uint4 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (uint4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this float2[] source, float2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (float2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<float2> source, float2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float2* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<float2> source, float2 value)\n        {\n            return Contains((ReadOnlySpan<float2>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<float2> source, float2 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<float2> source, float2 value)\n        {\n            return Contains((ReadOnlySpan<float2>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<float2> source, float2 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (float2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this float3[] source, float3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (float3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<float3> source, float3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float3* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<float3> source, float3 value)\n        {\n            return Contains((ReadOnlySpan<float3>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<float3> source, float3 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<float3> source, float3 value)\n        {\n            return Contains((ReadOnlySpan<float3>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<float3> source, float3 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (float3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this float4[] source, float4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (float4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<float4> source, float4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float4* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<float4> source, float4 value)\n        {\n            return Contains((ReadOnlySpan<float4>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<float4> source, float4 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<float4> source, float4 value)\n        {\n            return Contains((ReadOnlySpan<float4>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<float4> source, float4 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (float4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this double2[] source, double2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (double2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<double2> source, double2 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double2* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<double2> source, double2 value)\n        {\n            return Contains((ReadOnlySpan<double2>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<double2> source, double2 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<double2> source, double2 value)\n        {\n            return Contains((ReadOnlySpan<double2>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<double2> source, double2 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (double2* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this double3[] source, double3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (double3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<double3> source, double3 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double3* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<double3> source, double3 value)\n        {\n            return Contains((ReadOnlySpan<double3>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<double3> source, double3 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<double3> source, double3 value)\n        {\n            return Contains((ReadOnlySpan<double3>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<double3> source, double3 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (double3* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n        public static bool Contains(this double4[] source, double4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (double4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<double4> source, double4 value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double4* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<double4> source, double4 value)\n        {\n            return Contains((ReadOnlySpan<double4>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<double4> source, double4 value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<double4> source, double4 value)\n        {\n            return Contains((ReadOnlySpan<double4>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<double4> source, double4 value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (double4* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Contains.cs.meta",
    "content": "fileFormatVersion: 2\nguid: d9eb388d44f6c4009b8413bbef734ae2\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Contains.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n#>\nusing System;\nusing System.Collections.Generic;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static bool Contains(this <#=type#>[] source, <#=type#> value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Length == 0) return false;\n\n            fixed (<#=type#>* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n\n        public static bool Contains(this List<<#=type#>> source, <#=type#> value)\n        {\n            Error.ThrowIfNull(source);\n            if (source.Count == 0) return false;\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (<#=type#>* ptr = span)\n            {\n                return ContainsCore(ptr, source.Count, value);\n            }\n        }\n\n        public static bool Contains(this Memory<<#=type#>> source, <#=type#> value)\n        {\n            return Contains((ReadOnlySpan<<#=type#>>)source.Span, value);\n        }\n\n        public static bool Contains(this ReadOnlyMemory<<#=type#>> source, <#=type#> value)\n        {\n            return Contains(source.Span, value);\n        }\n\n        public static bool Contains(this Span<<#=type#>> source, <#=type#> value)\n        {\n            return Contains((ReadOnlySpan<<#=type#>>)source, value);\n        }\n\n        public static bool Contains(this ReadOnlySpan<<#=type#>> source, <#=type#> value)\n        {\n            if (source.IsEmpty) return false;\n\n            fixed (<#=type#>* ptr = source)\n            {\n                return ContainsCore(ptr, source.Length, value);\n            }\n        }\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Contains.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 09d9091d25ab146cd83aa6bd009f5fb9\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Max.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static byte Max(this byte[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (byte* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static byte Max(this List<byte> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (byte* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static byte Max(this Memory<byte> source)\n        {\n            return Max((ReadOnlySpan<byte>)source.Span);\n        }\n\n        public static byte Max(this ReadOnlyMemory<byte> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static byte Max(this Span<byte> source)\n        {\n            return Max((ReadOnlySpan<byte>)source);\n        }\n\n        public static byte Max(this ReadOnlySpan<byte> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (byte* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static sbyte Max(this sbyte[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (sbyte* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static sbyte Max(this List<sbyte> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (sbyte* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static sbyte Max(this Memory<sbyte> source)\n        {\n            return Max((ReadOnlySpan<sbyte>)source.Span);\n        }\n\n        public static sbyte Max(this ReadOnlyMemory<sbyte> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static sbyte Max(this Span<sbyte> source)\n        {\n            return Max((ReadOnlySpan<sbyte>)source);\n        }\n\n        public static sbyte Max(this ReadOnlySpan<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (sbyte* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static short Max(this short[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (short* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static short Max(this List<short> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (short* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static short Max(this Memory<short> source)\n        {\n            return Max((ReadOnlySpan<short>)source.Span);\n        }\n\n        public static short Max(this ReadOnlyMemory<short> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static short Max(this Span<short> source)\n        {\n            return Max((ReadOnlySpan<short>)source);\n        }\n\n        public static short Max(this ReadOnlySpan<short> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (short* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static ushort Max(this ushort[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (ushort* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static ushort Max(this List<ushort> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ushort* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static ushort Max(this Memory<ushort> source)\n        {\n            return Max((ReadOnlySpan<ushort>)source.Span);\n        }\n\n        public static ushort Max(this ReadOnlyMemory<ushort> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static ushort Max(this Span<ushort> source)\n        {\n            return Max((ReadOnlySpan<ushort>)source);\n        }\n\n        public static ushort Max(this ReadOnlySpan<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (ushort* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static int Max(this int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (int* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static int Max(this List<int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static int Max(this Memory<int> source)\n        {\n            return Max((ReadOnlySpan<int>)source.Span);\n        }\n\n        public static int Max(this ReadOnlyMemory<int> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static int Max(this Span<int> source)\n        {\n            return Max((ReadOnlySpan<int>)source);\n        }\n\n        public static int Max(this ReadOnlySpan<int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (int* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static uint Max(this uint[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (uint* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static uint Max(this List<uint> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static uint Max(this Memory<uint> source)\n        {\n            return Max((ReadOnlySpan<uint>)source.Span);\n        }\n\n        public static uint Max(this ReadOnlyMemory<uint> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static uint Max(this Span<uint> source)\n        {\n            return Max((ReadOnlySpan<uint>)source);\n        }\n\n        public static uint Max(this ReadOnlySpan<uint> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (uint* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static long Max(this long[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (long* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static long Max(this List<long> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (long* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static long Max(this Memory<long> source)\n        {\n            return Max((ReadOnlySpan<long>)source.Span);\n        }\n\n        public static long Max(this ReadOnlyMemory<long> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static long Max(this Span<long> source)\n        {\n            return Max((ReadOnlySpan<long>)source);\n        }\n\n        public static long Max(this ReadOnlySpan<long> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (long* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static ulong Max(this ulong[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (ulong* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static ulong Max(this List<ulong> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ulong* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static ulong Max(this Memory<ulong> source)\n        {\n            return Max((ReadOnlySpan<ulong>)source.Span);\n        }\n\n        public static ulong Max(this ReadOnlyMemory<ulong> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static ulong Max(this Span<ulong> source)\n        {\n            return Max((ReadOnlySpan<ulong>)source);\n        }\n\n        public static ulong Max(this ReadOnlySpan<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (ulong* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float Max(this float[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (float* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float Max(this List<float> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float Max(this Memory<float> source)\n        {\n            return Max((ReadOnlySpan<float>)source.Span);\n        }\n\n        public static float Max(this ReadOnlyMemory<float> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static float Max(this Span<float> source)\n        {\n            return Max((ReadOnlySpan<float>)source);\n        }\n\n        public static float Max(this ReadOnlySpan<float> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (float* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Max(this double[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (double* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Max(this List<double> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Max(this Memory<double> source)\n        {\n            return Max((ReadOnlySpan<double>)source.Span);\n        }\n\n        public static double Max(this ReadOnlyMemory<double> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static double Max(this Span<double> source)\n        {\n            return Max((ReadOnlySpan<double>)source);\n        }\n\n        public static double Max(this ReadOnlySpan<double> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (double* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Max.cs.meta",
    "content": "fileFormatVersion: 2\nguid: b45de311116c143618fe3131431441f3\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Max.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\"\n    };\n#>\nusing System;\nusing System.Collections.Generic;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=type#> Max(this <#=type#>[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            \n            fixed (<#=type#>* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static <#=type#> Max(this List<<#=type#>> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n            \n            var span = SpanHelper.AsSpan(source);\n            fixed (<#=type#>* ptr = span)\n            {\n                MaxCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static <#=type#> Max(this Memory<<#=type#>> source)\n        {\n            return Max((ReadOnlySpan<<#=type#>>)source.Span);\n        }\n\n        public static <#=type#> Max(this ReadOnlyMemory<<#=type#>> source)\n        {\n            return Max(source.Span);\n        }\n\n        public static <#=type#> Max(this Span<<#=type#>> source)\n        {\n            return Max((ReadOnlySpan<<#=type#>>)source);\n        }\n\n        public static <#=type#> Max(this ReadOnlySpan<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (<#=type#>* ptr = source)\n            {\n                MaxCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Max.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 689524d35dd334b42bdcb35388d0cd48\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Min.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static byte Min(this byte[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (byte* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static byte Min(this List<byte> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (byte* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static byte Min(this Memory<byte> source)\n        {\n            return Min((ReadOnlySpan<byte>)source.Span);\n        }\n\n        public static byte Min(this ReadOnlyMemory<byte> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static byte Min(this Span<byte> source)\n        {\n            return Min((ReadOnlySpan<byte>)source);\n        }\n\n        public static byte Min(this ReadOnlySpan<byte> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (byte* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static sbyte Min(this sbyte[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (sbyte* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static sbyte Min(this List<sbyte> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (sbyte* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static sbyte Min(this Memory<sbyte> source)\n        {\n            return Min((ReadOnlySpan<sbyte>)source.Span);\n        }\n\n        public static sbyte Min(this ReadOnlyMemory<sbyte> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static sbyte Min(this Span<sbyte> source)\n        {\n            return Min((ReadOnlySpan<sbyte>)source);\n        }\n\n        public static sbyte Min(this ReadOnlySpan<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (sbyte* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static short Min(this short[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (short* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static short Min(this List<short> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (short* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static short Min(this Memory<short> source)\n        {\n            return Min((ReadOnlySpan<short>)source.Span);\n        }\n\n        public static short Min(this ReadOnlyMemory<short> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static short Min(this Span<short> source)\n        {\n            return Min((ReadOnlySpan<short>)source);\n        }\n\n        public static short Min(this ReadOnlySpan<short> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (short* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static ushort Min(this ushort[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (ushort* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static ushort Min(this List<ushort> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ushort* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static ushort Min(this Memory<ushort> source)\n        {\n            return Min((ReadOnlySpan<ushort>)source.Span);\n        }\n\n        public static ushort Min(this ReadOnlyMemory<ushort> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static ushort Min(this Span<ushort> source)\n        {\n            return Min((ReadOnlySpan<ushort>)source);\n        }\n\n        public static ushort Min(this ReadOnlySpan<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (ushort* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static int Min(this int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (int* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static int Min(this List<int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static int Min(this Memory<int> source)\n        {\n            return Min((ReadOnlySpan<int>)source.Span);\n        }\n\n        public static int Min(this ReadOnlyMemory<int> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static int Min(this Span<int> source)\n        {\n            return Min((ReadOnlySpan<int>)source);\n        }\n\n        public static int Min(this ReadOnlySpan<int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (int* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static uint Min(this uint[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (uint* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static uint Min(this List<uint> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static uint Min(this Memory<uint> source)\n        {\n            return Min((ReadOnlySpan<uint>)source.Span);\n        }\n\n        public static uint Min(this ReadOnlyMemory<uint> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static uint Min(this Span<uint> source)\n        {\n            return Min((ReadOnlySpan<uint>)source);\n        }\n\n        public static uint Min(this ReadOnlySpan<uint> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (uint* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static long Min(this long[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (long* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static long Min(this List<long> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (long* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static long Min(this Memory<long> source)\n        {\n            return Min((ReadOnlySpan<long>)source.Span);\n        }\n\n        public static long Min(this ReadOnlyMemory<long> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static long Min(this Span<long> source)\n        {\n            return Min((ReadOnlySpan<long>)source);\n        }\n\n        public static long Min(this ReadOnlySpan<long> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (long* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static ulong Min(this ulong[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (ulong* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static ulong Min(this List<ulong> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ulong* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static ulong Min(this Memory<ulong> source)\n        {\n            return Min((ReadOnlySpan<ulong>)source.Span);\n        }\n\n        public static ulong Min(this ReadOnlyMemory<ulong> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static ulong Min(this Span<ulong> source)\n        {\n            return Min((ReadOnlySpan<ulong>)source);\n        }\n\n        public static ulong Min(this ReadOnlySpan<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (ulong* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float Min(this float[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (float* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float Min(this List<float> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float Min(this Memory<float> source)\n        {\n            return Min((ReadOnlySpan<float>)source.Span);\n        }\n\n        public static float Min(this ReadOnlyMemory<float> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static float Min(this Span<float> source)\n        {\n            return Min((ReadOnlySpan<float>)source);\n        }\n\n        public static float Min(this ReadOnlySpan<float> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (float* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Min(this double[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n\n            fixed (double* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Min(this List<double> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Min(this Memory<double> source)\n        {\n            return Min((ReadOnlySpan<double>)source.Span);\n        }\n\n        public static double Min(this ReadOnlyMemory<double> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static double Min(this Span<double> source)\n        {\n            return Min((ReadOnlySpan<double>)source);\n        }\n\n        public static double Min(this ReadOnlySpan<double> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (double* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Min.cs.meta",
    "content": "fileFormatVersion: 2\nguid: fd1e1e3cb6ec34036bcba189c14dce1a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Min.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\"\n    };\n#>\nusing System;\nusing System.Collections.Generic;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=type#> Min(this <#=type#>[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            \n            fixed (<#=type#>* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static <#=type#> Min(this List<<#=type#>> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n            \n            var span = SpanHelper.AsSpan(source);\n            fixed (<#=type#>* ptr = span)\n            {\n                MinCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static <#=type#> Min(this Memory<<#=type#>> source)\n        {\n            return Min((ReadOnlySpan<<#=type#>>)source.Span);\n        }\n\n        public static <#=type#> Min(this ReadOnlyMemory<<#=type#>> source)\n        {\n            return Min(source.Span);\n        }\n\n        public static <#=type#> Min(this Span<<#=type#>> source)\n        {\n            return Min((ReadOnlySpan<<#=type#>>)source);\n        }\n\n        public static <#=type#> Min(this ReadOnlySpan<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (<#=type#>* ptr = source)\n            {\n                MinCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Min.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 89ff07cc368864015b25aad430a8b665\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Average.cs",
    "content": "using Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static double Average(this NativeList<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeSlice<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeArray<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(int* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double)sum / length;\n        }\n\n        public static double Average(this NativeList<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeSlice<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeArray<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(uint* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double)sum / length;\n        }\n\n        public static double Average(this NativeList<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeSlice<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeArray<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(long* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double)sum / length;\n        }\n\n        public static double Average(this NativeList<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeSlice<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeArray<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(ulong* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double)sum / length;\n        }\n\n        public static float Average(this NativeList<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Average(this NativeSlice<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Average(this NativeArray<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(float* ptr, [AssumeRange(1, int.MaxValue)] int length, out float result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (float)sum / length;\n        }\n\n        public static double Average(this NativeList<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeSlice<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Average(this NativeArray<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(double* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double)sum / length;\n        }\n\n        public static Vector2 Average(this NativeList<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2 Average(this NativeSlice<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2 Average(this NativeArray<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(Vector2* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector2 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (Vector2)sum / length;\n        }\n\n        public static Vector2 Average(this NativeList<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector2Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2 Average(this NativeSlice<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector2Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2 Average(this NativeArray<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector2Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(Vector2Int* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector2 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (Vector2)sum / length;\n        }\n\n        public static Vector3 Average(this NativeList<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3 Average(this NativeSlice<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3 Average(this NativeArray<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(Vector3* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector3 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (Vector3)sum / length;\n        }\n\n        public static Vector3 Average(this NativeList<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector3Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3 Average(this NativeSlice<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector3Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3 Average(this NativeArray<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector3Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(Vector3Int* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector3 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (Vector3)sum / length;\n        }\n\n        public static Vector4 Average(this NativeList<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector4 Average(this NativeSlice<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector4 Average(this NativeArray<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((Vector4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(Vector4* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector4 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (Vector4)sum / length;\n        }\n\n        public static double2 Average(this NativeList<int2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double2 Average(this NativeSlice<int2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double2 Average(this NativeArray<int2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(int2* ptr, [AssumeRange(1, int.MaxValue)] int length, out double2 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double2)sum / length;\n        }\n\n        public static double3 Average(this NativeList<int3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double3 Average(this NativeSlice<int3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double3 Average(this NativeArray<int3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(int3* ptr, [AssumeRange(1, int.MaxValue)] int length, out double3 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double3)sum / length;\n        }\n\n        public static double4 Average(this NativeList<int4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double4 Average(this NativeSlice<int4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double4 Average(this NativeArray<int4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((int4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(int4* ptr, [AssumeRange(1, int.MaxValue)] int length, out double4 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double4)sum / length;\n        }\n\n        public static float2 Average(this NativeList<float2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float2 Average(this NativeSlice<float2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float2 Average(this NativeArray<float2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(float2* ptr, [AssumeRange(1, int.MaxValue)] int length, out float2 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (float2)sum / length;\n        }\n\n        public static float3 Average(this NativeList<float3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float3 Average(this NativeSlice<float3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float3 Average(this NativeArray<float3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(float3* ptr, [AssumeRange(1, int.MaxValue)] int length, out float3 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (float3)sum / length;\n        }\n\n        public static float4 Average(this NativeList<float4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float4 Average(this NativeSlice<float4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float4 Average(this NativeArray<float4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((float4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(float4* ptr, [AssumeRange(1, int.MaxValue)] int length, out float4 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (float4)sum / length;\n        }\n\n        public static double2 Average(this NativeList<double2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double2 Average(this NativeSlice<double2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double2 Average(this NativeArray<double2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(double2* ptr, [AssumeRange(1, int.MaxValue)] int length, out double2 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double2)sum / length;\n        }\n\n        public static double3 Average(this NativeList<double3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double3 Average(this NativeSlice<double3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double3 Average(this NativeArray<double3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(double3* ptr, [AssumeRange(1, int.MaxValue)] int length, out double3 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double3)sum / length;\n        }\n\n        public static double4 Average(this NativeList<double4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double4 Average(this NativeSlice<double4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double4 Average(this NativeArray<double4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((double4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(double4* ptr, [AssumeRange(1, int.MaxValue)] int length, out double4 result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (double4)sum / length;\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Average.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 9395d12cf09894920aa7da73fea1d6ea\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Average.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n    \n    System.Func<string, string> retType = (string x) => \n    {\n        switch (x)\n        {\n            default: return \"double\";\n            case \"float\": return \"float\";\n            case \"Vector2\":\n            case \"Vector2Int\": return \"Vector2\";\n            case \"Vector3\":\n            case \"Vector3Int\": return \"Vector3\";\n            case \"Vector4\": return \"Vector4\";\n            case \"float2\": return \"float2\";\n            case \"float3\": return \"float3\";\n            case \"float4\": return \"float4\";\n            case \"int2\":\n            case \"double2\": return \"double2\";\n            case \"int3\":\n            case \"double3\": return \"double3\";\n            case \"int4\":\n            case \"double4\": return \"double4\";\n        }\n        return \"\";\n    };\n#>\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=retType(type)#> Average(this NativeList<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=retType(type)#> Average(this NativeSlice<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=retType(type)#> Average(this NativeArray<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            AverageCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n        \n        [BurstCompile]\n        internal static void AverageCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, out <#=retType(type)#> result)\n        {\n            SumCore(ptr, length, out var sum);\n            result = (<#=retType(type)#>)sum / length;\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Average.tt.meta",
    "content": "fileFormatVersion: 2\nguid: e45c49a2aa40348b685f1b45af887076\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Contains.cs",
    "content": "using Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\nusing System.Runtime.CompilerServices;\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static bool Contains(this NativeList<byte> source, byte value)\n        {\n            return ContainsCore((byte*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<byte> source, byte value)\n        {\n            return ContainsCore((byte*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<byte> source, byte value)\n        {\n            return ContainsCore((byte*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(byte* ptr, [AssumeRange(1, int.MaxValue)] int length, in byte value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(byte);\n\n                static bool32 _contains(v256 a, byte* b) => new bool32(\n                    a.Byte0 == b[0],\n                    a.Byte1 == b[1],\n                    a.Byte2 == b[2],\n                    a.Byte3 == b[3],\n                    a.Byte4 == b[4],\n                    a.Byte5 == b[5],\n                    a.Byte6 == b[6],\n                    a.Byte7 == b[7],\n                    a.Byte8 == b[8],\n                    a.Byte9 == b[9],\n                    a.Byte10 == b[10],\n                    a.Byte11 == b[11],\n                    a.Byte12 == b[12],\n                    a.Byte13 == b[13],\n                    a.Byte14 == b[14],\n                    a.Byte15 == b[15],\n                    a.Byte16 == b[16],\n                    a.Byte17 == b[17],\n                    a.Byte18 == b[18],\n                    a.Byte19 == b[19],\n                    a.Byte20 == b[20],\n                    a.Byte21 == b[21],\n                    a.Byte22 == b[22],\n                    a.Byte23 == b[23],\n                    a.Byte24 == b[24],\n                    a.Byte25 == b[25],\n                    a.Byte26 == b[26],\n                    a.Byte27 == b[27],\n                    a.Byte28 == b[28],\n                    a.Byte29 == b[29],\n                    a.Byte30 == b[30],\n                    a.Byte31 == b[31]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(byte);\n              \n                static bool16 _contains(v128 a, byte* b) => new bool16(\n                    a.Byte0 == b[0],\n                    a.Byte1 == b[1],\n                    a.Byte2 == b[2],\n                    a.Byte3 == b[3],\n                    a.Byte4 == b[4],\n                    a.Byte5 == b[5],\n                    a.Byte6 == b[6],\n                    a.Byte7 == b[7],\n                    a.Byte8 == b[8],\n                    a.Byte9 == b[9],\n                    a.Byte10 == b[10],\n                    a.Byte11 == b[11],\n                    a.Byte12 == b[12],\n                    a.Byte13 == b[13],\n                    a.Byte14 == b[14],\n                    a.Byte15 == b[15]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<sbyte> source, sbyte value)\n        {\n            return ContainsCore((sbyte*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<sbyte> source, sbyte value)\n        {\n            return ContainsCore((sbyte*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<sbyte> source, sbyte value)\n        {\n            return ContainsCore((sbyte*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(sbyte* ptr, [AssumeRange(1, int.MaxValue)] int length, in sbyte value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(sbyte);\n\n                static bool32 _contains(v256 a, sbyte* b) => new bool32(\n                    a.SByte0 == b[0],\n                    a.SByte1 == b[1],\n                    a.SByte2 == b[2],\n                    a.SByte3 == b[3],\n                    a.SByte4 == b[4],\n                    a.SByte5 == b[5],\n                    a.SByte6 == b[6],\n                    a.SByte7 == b[7],\n                    a.SByte8 == b[8],\n                    a.SByte9 == b[9],\n                    a.SByte10 == b[10],\n                    a.SByte11 == b[11],\n                    a.SByte12 == b[12],\n                    a.SByte13 == b[13],\n                    a.SByte14 == b[14],\n                    a.SByte15 == b[15],\n                    a.SByte16 == b[16],\n                    a.SByte17 == b[17],\n                    a.SByte18 == b[18],\n                    a.SByte19 == b[19],\n                    a.SByte20 == b[20],\n                    a.SByte21 == b[21],\n                    a.SByte22 == b[22],\n                    a.SByte23 == b[23],\n                    a.SByte24 == b[24],\n                    a.SByte25 == b[25],\n                    a.SByte26 == b[26],\n                    a.SByte27 == b[27],\n                    a.SByte28 == b[28],\n                    a.SByte29 == b[29],\n                    a.SByte30 == b[30],\n                    a.SByte31 == b[31]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(sbyte);\n              \n                static bool16 _contains(v128 a, sbyte* b) => new bool16(\n                    a.SByte0 == b[0],\n                    a.SByte1 == b[1],\n                    a.SByte2 == b[2],\n                    a.SByte3 == b[3],\n                    a.SByte4 == b[4],\n                    a.SByte5 == b[5],\n                    a.SByte6 == b[6],\n                    a.SByte7 == b[7],\n                    a.SByte8 == b[8],\n                    a.SByte9 == b[9],\n                    a.SByte10 == b[10],\n                    a.SByte11 == b[11],\n                    a.SByte12 == b[12],\n                    a.SByte13 == b[13],\n                    a.SByte14 == b[14],\n                    a.SByte15 == b[15]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<short> source, short value)\n        {\n            return ContainsCore((short*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<short> source, short value)\n        {\n            return ContainsCore((short*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<short> source, short value)\n        {\n            return ContainsCore((short*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(short* ptr, [AssumeRange(1, int.MaxValue)] int length, in short value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(short);\n\n                static bool16 _contains(v256 a, short* b) => new bool16(\n                    a.SShort0 == b[0],\n                    a.SShort1 == b[1],\n                    a.SShort2 == b[2],\n                    a.SShort3 == b[3],\n                    a.SShort4 == b[4],\n                    a.SShort5 == b[5],\n                    a.SShort6 == b[6],\n                    a.SShort7 == b[7],\n                    a.SShort8 == b[8],\n                    a.SShort9 == b[9],\n                    a.SShort10 == b[10],\n                    a.SShort11 == b[11],\n                    a.SShort12 == b[12],\n                    a.SShort13 == b[13],\n                    a.SShort14 == b[14],\n                    a.SShort15 == b[15]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(short);\n              \n                static bool8 _contains(v128 a, short* b) => new bool8(\n                    a.SShort0 == b[0],\n                    a.SShort1 == b[1],\n                    a.SShort2 == b[2],\n                    a.SShort3 == b[3],\n                    a.SShort4 == b[4],\n                    a.SShort5 == b[5],\n                    a.SShort6 == b[6],\n                    a.SShort7 == b[7]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<ushort> source, ushort value)\n        {\n            return ContainsCore((ushort*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<ushort> source, ushort value)\n        {\n            return ContainsCore((ushort*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<ushort> source, ushort value)\n        {\n            return ContainsCore((ushort*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(ushort* ptr, [AssumeRange(1, int.MaxValue)] int length, in ushort value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(ushort);\n\n                static bool16 _contains(v256 a, ushort* b) => new bool16(\n                    a.UShort0 == b[0],\n                    a.UShort1 == b[1],\n                    a.UShort2 == b[2],\n                    a.UShort3 == b[3],\n                    a.UShort4 == b[4],\n                    a.UShort5 == b[5],\n                    a.UShort6 == b[6],\n                    a.UShort7 == b[7],\n                    a.UShort8 == b[8],\n                    a.UShort9 == b[9],\n                    a.UShort10 == b[10],\n                    a.UShort11 == b[11],\n                    a.UShort12 == b[12],\n                    a.UShort13 == b[13],\n                    a.UShort14 == b[14],\n                    a.UShort15 == b[15]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(ushort);\n              \n                static bool8 _contains(v128 a, ushort* b) => new bool8(\n                    a.UShort0 == b[0],\n                    a.UShort1 == b[1],\n                    a.UShort2 == b[2],\n                    a.UShort3 == b[3],\n                    a.UShort4 == b[4],\n                    a.UShort5 == b[5],\n                    a.UShort6 == b[6],\n                    a.UShort7 == b[7]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<int> source, int value)\n        {\n            return ContainsCore((int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<int> source, int value)\n        {\n            return ContainsCore((int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<int> source, int value)\n        {\n            return ContainsCore((int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(int* ptr, [AssumeRange(1, int.MaxValue)] int length, in int value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(int);\n\n                static bool8 _contains(v256 a, int* b) => new bool8(\n                    a.SInt0 == b[0],\n                    a.SInt1 == b[1],\n                    a.SInt2 == b[2],\n                    a.SInt3 == b[3],\n                    a.SInt4 == b[4],\n                    a.SInt5 == b[5],\n                    a.SInt6 == b[6],\n                    a.SInt7 == b[7]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(int);\n              \n                static bool4 _contains(v128 a, int* b) => new bool4(\n                    a.SInt0 == b[0],\n                    a.SInt1 == b[1],\n                    a.SInt2 == b[2],\n                    a.SInt3 == b[3]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<uint> source, uint value)\n        {\n            return ContainsCore((uint*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<uint> source, uint value)\n        {\n            return ContainsCore((uint*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<uint> source, uint value)\n        {\n            return ContainsCore((uint*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(uint* ptr, [AssumeRange(1, int.MaxValue)] int length, in uint value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(uint);\n\n                static bool8 _contains(v256 a, uint* b) => new bool8(\n                    a.UInt0 == b[0],\n                    a.UInt1 == b[1],\n                    a.UInt2 == b[2],\n                    a.UInt3 == b[3],\n                    a.UInt4 == b[4],\n                    a.UInt5 == b[5],\n                    a.UInt6 == b[6],\n                    a.UInt7 == b[7]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(uint);\n              \n                static bool4 _contains(v128 a, uint* b) => new bool4(\n                    a.UInt0 == b[0],\n                    a.UInt1 == b[1],\n                    a.UInt2 == b[2],\n                    a.UInt3 == b[3]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<long> source, long value)\n        {\n            return ContainsCore((long*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<long> source, long value)\n        {\n            return ContainsCore((long*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<long> source, long value)\n        {\n            return ContainsCore((long*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(long* ptr, [AssumeRange(1, int.MaxValue)] int length, in long value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(long);\n\n                static bool4 _contains(v256 a, long* b) => new bool4(\n                    a.SLong0 == b[0],\n                    a.SLong1 == b[1],\n                    a.SLong2 == b[2],\n                    a.SLong3 == b[3]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(long);\n              \n                static bool2 _contains(v128 a, long* b) => new bool2(\n                    a.SLong0 == b[0],\n                    a.SLong1 == b[1]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<ulong> source, ulong value)\n        {\n            return ContainsCore((ulong*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<ulong> source, ulong value)\n        {\n            return ContainsCore((ulong*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<ulong> source, ulong value)\n        {\n            return ContainsCore((ulong*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(ulong* ptr, [AssumeRange(1, int.MaxValue)] int length, in ulong value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(ulong);\n\n                static bool4 _contains(v256 a, ulong* b) => new bool4(\n                    a.ULong0 == b[0],\n                    a.ULong1 == b[1],\n                    a.ULong2 == b[2],\n                    a.ULong3 == b[3]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(ulong);\n              \n                static bool2 _contains(v128 a, ulong* b) => new bool2(\n                    a.ULong0 == b[0],\n                    a.ULong1 == b[1]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<float> source, float value)\n        {\n            return ContainsCore((float*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<float> source, float value)\n        {\n            return ContainsCore((float*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<float> source, float value)\n        {\n            return ContainsCore((float*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(float* ptr, [AssumeRange(1, int.MaxValue)] int length, in float value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(float);\n\n                static bool8 _contains(v256 a, float* b) => new bool8(\n                    a.Float0 == b[0],\n                    a.Float1 == b[1],\n                    a.Float2 == b[2],\n                    a.Float3 == b[3],\n                    a.Float4 == b[4],\n                    a.Float5 == b[5],\n                    a.Float6 == b[6],\n                    a.Float7 == b[7]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(float);\n              \n                static bool4 _contains(v128 a, float* b) => new bool4(\n                    a.Float0 == b[0],\n                    a.Float1 == b[1],\n                    a.Float2 == b[2],\n                    a.Float3 == b[3]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<double> source, double value)\n        {\n            return ContainsCore((double*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<double> source, double value)\n        {\n            return ContainsCore((double*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<double> source, double value)\n        {\n            return ContainsCore((double*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(double* ptr, [AssumeRange(1, int.MaxValue)] int length, in double value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(double);\n\n                static bool4 _contains(v256 a, double* b) => new bool4(\n                    a.Double0 == b[0],\n                    a.Double1 == b[1],\n                    a.Double2 == b[2],\n                    a.Double3 == b[3]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(double);\n              \n                static bool2 _contains(v128 a, double* b) => new bool2(\n                    a.Double0 == b[0],\n                    a.Double1 == b[1]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<Vector2> source, Vector2 value)\n        {\n            return ContainsCore((Vector2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<Vector2> source, Vector2 value)\n        {\n            return ContainsCore((Vector2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<Vector2> source, Vector2 value)\n        {\n            return ContainsCore((Vector2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(Vector2* ptr, [AssumeRange(0, int.MaxValue)] int length, in Vector2 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<Vector2Int> source, Vector2Int value)\n        {\n            return ContainsCore((Vector2Int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<Vector2Int> source, Vector2Int value)\n        {\n            return ContainsCore((Vector2Int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<Vector2Int> source, Vector2Int value)\n        {\n            return ContainsCore((Vector2Int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        internal static bool ContainsCore(Vector2Int* ptr, [AssumeRange(1, int.MaxValue)] int length, in Vector2Int value)\n        {\n            var temp = value;\n            var union = *(long*)&temp;\n            return ContainsCore((long*)ptr, length, union);\n        }\n        public static bool Contains(this NativeList<Vector3> source, Vector3 value)\n        {\n            return ContainsCore((Vector3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<Vector3> source, Vector3 value)\n        {\n            return ContainsCore((Vector3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<Vector3> source, Vector3 value)\n        {\n            return ContainsCore((Vector3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(Vector3* ptr, [AssumeRange(0, int.MaxValue)] int length, in Vector3 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<Vector3Int> source, Vector3Int value)\n        {\n            return ContainsCore((Vector3Int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<Vector3Int> source, Vector3Int value)\n        {\n            return ContainsCore((Vector3Int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<Vector3Int> source, Vector3Int value)\n        {\n            return ContainsCore((Vector3Int*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(Vector3Int* ptr, [AssumeRange(0, int.MaxValue)] int length, in Vector3Int value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<Vector4> source, Vector4 value)\n        {\n            return ContainsCore((Vector4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<Vector4> source, Vector4 value)\n        {\n            return ContainsCore((Vector4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<Vector4> source, Vector4 value)\n        {\n            return ContainsCore((Vector4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(Vector4* ptr, [AssumeRange(0, int.MaxValue)] int length, in Vector4 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<int2> source, int2 value)\n        {\n            return ContainsCore((int2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<int2> source, int2 value)\n        {\n            return ContainsCore((int2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<int2> source, int2 value)\n        {\n            return ContainsCore((int2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        internal static bool ContainsCore(int2* ptr, [AssumeRange(1, int.MaxValue)] int length, in int2 value)\n        {\n            var temp = value;\n            var union = *(long*)&temp;\n            return ContainsCore((long*)ptr, length, union);\n        }\n        public static bool Contains(this NativeList<int3> source, int3 value)\n        {\n            return ContainsCore((int3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<int3> source, int3 value)\n        {\n            return ContainsCore((int3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<int3> source, int3 value)\n        {\n            return ContainsCore((int3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(int3* ptr, [AssumeRange(0, int.MaxValue)] int length, in int3 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<int4> source, int4 value)\n        {\n            return ContainsCore((int4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<int4> source, int4 value)\n        {\n            return ContainsCore((int4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<int4> source, int4 value)\n        {\n            return ContainsCore((int4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(int4* ptr, [AssumeRange(0, int.MaxValue)] int length, in int4 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<uint2> source, uint2 value)\n        {\n            return ContainsCore((uint2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<uint2> source, uint2 value)\n        {\n            return ContainsCore((uint2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<uint2> source, uint2 value)\n        {\n            return ContainsCore((uint2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        internal static bool ContainsCore(uint2* ptr, [AssumeRange(1, int.MaxValue)] int length, in uint2 value)\n        {\n            var temp = value;\n            var union = *(long*)&temp;\n            return ContainsCore((long*)ptr, length, union);\n        }\n        public static bool Contains(this NativeList<uint3> source, uint3 value)\n        {\n            return ContainsCore((uint3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<uint3> source, uint3 value)\n        {\n            return ContainsCore((uint3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<uint3> source, uint3 value)\n        {\n            return ContainsCore((uint3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(uint3* ptr, [AssumeRange(0, int.MaxValue)] int length, in uint3 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<uint4> source, uint4 value)\n        {\n            return ContainsCore((uint4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<uint4> source, uint4 value)\n        {\n            return ContainsCore((uint4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<uint4> source, uint4 value)\n        {\n            return ContainsCore((uint4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(uint4* ptr, [AssumeRange(0, int.MaxValue)] int length, in uint4 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<float2> source, float2 value)\n        {\n            return ContainsCore((float2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<float2> source, float2 value)\n        {\n            return ContainsCore((float2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<float2> source, float2 value)\n        {\n            return ContainsCore((float2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(float2* ptr, [AssumeRange(0, int.MaxValue)] int length, in float2 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<float3> source, float3 value)\n        {\n            return ContainsCore((float3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<float3> source, float3 value)\n        {\n            return ContainsCore((float3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<float3> source, float3 value)\n        {\n            return ContainsCore((float3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(float3* ptr, [AssumeRange(0, int.MaxValue)] int length, in float3 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<float4> source, float4 value)\n        {\n            return ContainsCore((float4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<float4> source, float4 value)\n        {\n            return ContainsCore((float4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<float4> source, float4 value)\n        {\n            return ContainsCore((float4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(float4* ptr, [AssumeRange(0, int.MaxValue)] int length, in float4 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<double2> source, double2 value)\n        {\n            return ContainsCore((double2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<double2> source, double2 value)\n        {\n            return ContainsCore((double2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<double2> source, double2 value)\n        {\n            return ContainsCore((double2*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(double2* ptr, [AssumeRange(0, int.MaxValue)] int length, in double2 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<double3> source, double3 value)\n        {\n            return ContainsCore((double3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<double3> source, double3 value)\n        {\n            return ContainsCore((double3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<double3> source, double3 value)\n        {\n            return ContainsCore((double3*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(double3* ptr, [AssumeRange(0, int.MaxValue)] int length, in double3 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n        public static bool Contains(this NativeList<double4> source, double4 value)\n        {\n            return ContainsCore((double4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<double4> source, double4 value)\n        {\n            return ContainsCore((double4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<double4> source, double4 value)\n        {\n            return ContainsCore((double4*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        [BurstCompile]\n        internal static bool ContainsCore(double4* ptr, [AssumeRange(0, int.MaxValue)] int length, in double4 value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Contains.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7373cb17d160e40e9a94e729f79067b4\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Contains.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n\n    bool IsPrimitive(string type)\n    {\n        return type is  \"byte\"or  \"sbyte\"or  \"short\"or  \"ushort\"or \"int\" or \"uint\" or \"float\" or \"double\" or \"long\" or \"ulong\";\n    }\n    \n    string V256Name(string type)\n    {\n        switch (@type) {\n            case \"sbyte\": return \"SByte\";\n            case \"byte\": return \"Byte\";\n            case \"short\": return \"SShort\";\n            case \"ushort\": return \"UShort\";\n            case \"int\": return \"SInt\";\n            case \"uint\": return \"UInt\";\n            case \"long\": return \"SLong\";\n            case \"ulong\": return \"ULong\";\n            case \"float\": return \"Float\";\n            case \"double\": return \"Double\";\n        }\n        throw new Exception(\"Invalid type\");\n    }\n\n    int Size(string type)\n    {\n        switch (@type) \n        {\n            case \"sbyte\": return 1;\n            case \"byte\": return 1;\n            case \"short\": return 2;\n            case \"ushort\": return 2;\n            case \"int\": return 4;\n            case \"uint\": return 4;\n            case \"long\": return 8;\n            case \"ulong\": return 8;\n            case \"float\": return 4;\n            case \"double\": return 8;\n            case \"Vector2\": return sizeof(float) * 2;\n            case \"Vector2Int\": return sizeof(int) * 2;\n            case \"Vector3\": return sizeof(float) * 3;\n            case \"Vector3Int\": return sizeof(int) * 3;\n            case \"Vector4\": return sizeof(float) * 4;\n            case \"int2\": return sizeof(int) * 2;\n            case \"int3\": return sizeof(int) * 3;\n            case \"int4\": return sizeof(int) * 4;\n            case \"uint2\": return sizeof(uint) * 2;\n            case \"uint3\": return sizeof(uint) * 3;\n            case \"uint4\": return sizeof(uint) * 4;\n            case \"float2\": return sizeof(float) * 2;\n            case \"float3\": return sizeof(float) * 3;\n            case \"float4\": return sizeof(float) * 4;\n            case \"double2\": return sizeof(double) * 2;\n            case \"double3\": return sizeof(double) * 3;\n            case \"double4\": return sizeof(double) * 4;\n        }\n\n        throw new Exception(\"Invalid type\");\n    }\n\n    bool TryGetInteger(string type, out string type2)\n    {\n        type2 = null;\n        switch (type)\n        {\n            case \"int2\": type2 = \"long\"; return true;\n            case \"uint2\": type2 = \"long\"; return true;\n            case \"Vector2Int\": type2 = \"long\"; return true;\n            default: return false;\n        }\n    }\n#>\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\nusing System.Runtime.CompilerServices;\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static bool Contains(this NativeList<<#=type#>> source, <#=type#> value)\n        {\n            return ContainsCore((<#=type#>*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeSlice<<#=type#>> source, <#=type#> value)\n        {\n            return ContainsCore((<#=type#>*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n        public static bool Contains(this NativeArray<<#=type#>> source, <#=type#> value)\n        {\n            return ContainsCore((<#=type#>*)source.GetUnsafePtr(), source.Length, value);\n        }\n\n<#if (TryGetInteger(type, out var intType)){#>\n        internal static bool ContainsCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, in <#=type#> value)\n        {\n            var temp = value;\n            var union = *(<#=intType#>*)&temp;\n            return ContainsCore((<#=intType#>*)ptr, length, union);\n        }\n<#} else if (IsPrimitive(type)) { #>\n<#var vName = V256Name(type);#>\n        [BurstCompile]\n        internal static bool ContainsCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, in <#=type#> value)\n        {\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                const int packingLength = 32 / sizeof(<#=type#>);\n\n<# int vectorLength=32/Size(type);string typeName = V256Name(type);#>\n                static bool<#=vectorLength#> _contains(v256 a, <#=type#>* b) => new bool<#=vectorLength#>(\n<# for (int i =0;i<vectorLength-1;i++) {#>\n                    a.<#=typeName+i#> == b[<#=i#>],\n<# } #>\n                    a.<#=typeName+(vectorLength-1)#> == b[<#=vectorLength-1#>]\n                );\n                \n                if (0 < length / packingLength) \n                {\n                    var valueVector = new v256(value);\n                    for (; index < length-packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                const int packingLength = 16 / sizeof(<#=type#>);\n              \n                static bool<#=vectorLength/2#> _contains(v128 a, <#=type#>* b) => new bool<#=vectorLength/2#>(\n<# for (int i = 0; i < vectorLength / 2 - 1; i++) {#>\n                    a.<#=typeName + i#> == b[<#=i#>],\n<# } #>\n                    a.<#=typeName + (vectorLength / 2 - 1)#> == b[<#=vectorLength / 2 - 1#>]\n                );\n\n                if (0 < length / packingLength)\n                {\n                    var valueVector = new v128(value);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        if(_contains(valueVector, ptr + index).any()) return true;\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr[index] == value) return true;\n            }\n\n            return false;\n        }\n<#} else { #>\n        [BurstCompile]\n        internal static bool ContainsCore(<#=type#>* ptr, [AssumeRange(0, int.MaxValue)] int length, in <#=type#> value)\n        {\n            for (int i = 0; i < length; i++)\n            {\n                if (ptr[i].Equals(value)) return true;\n            }\n\n            return false;\n        }\n<# } #>\n<# } #>\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Contains.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 13b5d1c751c4848cd81a19097cbdb5a6\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Max.cs",
    "content": "using Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing static Unity.Burst.Intrinsics.Arm.Neon;\n\nnamespace BurstLinq\n{  \n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static byte Max(this NativeList<byte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((byte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static byte Max(this NativeSlice<byte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((byte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static byte Max(this NativeArray<byte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((byte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(byte* ptr, [AssumeRange(1, int.MaxValue)] int length, out byte result)\n        {\n            var tempResult = byte.MinValue;\n            static byte _max(byte a, byte b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static sbyte Max(this NativeList<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((sbyte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static sbyte Max(this NativeSlice<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((sbyte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static sbyte Max(this NativeArray<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((sbyte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(sbyte* ptr, [AssumeRange(1, int.MaxValue)] int length, out sbyte result)\n        {\n            var tempResult = sbyte.MinValue;\n            static sbyte _max(sbyte a, sbyte b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static short Max(this NativeList<short> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((short*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static short Max(this NativeSlice<short> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((short*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static short Max(this NativeArray<short> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((short*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(short* ptr, [AssumeRange(1, int.MaxValue)] int length, out short result)\n        {\n            var tempResult = short.MinValue;\n            static short _max(short a, short b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static ushort Max(this NativeList<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((ushort*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ushort Max(this NativeSlice<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((ushort*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ushort Max(this NativeArray<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((ushort*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(ushort* ptr, [AssumeRange(1, int.MaxValue)] int length, out ushort result)\n        {\n            var tempResult = ushort.MinValue;\n            static ushort _max(ushort a, ushort b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static int Max(this NativeList<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int Max(this NativeSlice<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int Max(this NativeArray<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(int* ptr, [AssumeRange(1, int.MaxValue)] int length, out int result)\n        {\n            var tempResult = int.MinValue;\n            static int _max(int a, int b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static uint Max(this NativeList<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint Max(this NativeSlice<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint Max(this NativeArray<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(uint* ptr, [AssumeRange(1, int.MaxValue)] int length, out uint result)\n        {\n            var tempResult = uint.MinValue;\n            static uint _max(uint a, uint b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static long Max(this NativeList<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static long Max(this NativeSlice<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static long Max(this NativeArray<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(long* ptr, [AssumeRange(1, int.MaxValue)] int length, out long result)\n        {\n            var tempResult = long.MinValue;\n            static long _max(long a, long b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static ulong Max(this NativeList<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ulong Max(this NativeSlice<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ulong Max(this NativeArray<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(ulong* ptr, [AssumeRange(1, int.MaxValue)] int length, out ulong result)\n        {\n            var tempResult = ulong.MinValue;\n            static ulong _max(ulong a, ulong b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static float Max(this NativeList<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Max(this NativeSlice<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Max(this NativeArray<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(float* ptr, [AssumeRange(1, int.MaxValue)] int length, out float result)\n        {\n            var tempResult = float.MinValue;\n            static float _max(float a, float b) => IsNeonSupported ? math.max(a,b) : a > b ? a : b;\n            \n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static v256 _max256(v256 a, float* b) => new v256(\n                    _max(a.Float0, b[0]),\n                    _max(a.Float1, b[1]),\n                    _max(a.Float2, b[2]),\n                    _max(a.Float3, b[3]),\n                    _max(a.Float4, b[4]),\n                    _max(a.Float5, b[5]),\n                    _max(a.Float6, b[6]),\n                    _max(a.Float7, b[7])\n                );\n                \n                var packingLength = sizeof(v256) / sizeof(float);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v256(float.MinValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _max256(temp, (ptr+index));\n                    }\n                    float* tempAsArray = (float*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _max(tempResult, tempAsArray[i]);\n                    }\n                }    \n             }\n             else if (BurstHelpers.IsV128Supported)\n             {\n                static v128 _max128(v128 a, float* b) => new v128(\n                    _max(a.Float0, b[0]),\n                    _max(a.Float1, b[1]),\n                    _max(a.Float2, b[2]),\n                    _max(a.Float3, b[3])\n                );\n                \n                var packingLength = sizeof(v128) / sizeof(float);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v128(float.MinValue);\n                    for (; index < length-packingLength; index+=packingLength)\n                    {\n                        temp = _max128(temp, ptr + index);\n                    }\n                    float* tempAsArray = (float*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _max(tempResult, tempAsArray[i]);\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                tempResult = _max(tempResult, ptr[index]);\n            }\n\n            result = tempResult;\n        }\n\n        public static double Max(this NativeList<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Max(this NativeSlice<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Max(this NativeArray<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(double* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            var tempResult = double.MinValue;\n            static double _max(double a, double b) => IsNeonSupported ? math.max(a,b) : a > b ? a : b;\n            \n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static v256 _max256(v256 a, double* b) => new v256(\n                    _max(a.Double0, b[0]),\n                    _max(a.Double1, b[1]),\n                    _max(a.Double2, b[2]),\n                    _max(a.Double3, b[3])\n                );\n                \n                var packingLength = sizeof(v256) / sizeof(double);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v256(double.MinValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _max256(temp, (ptr+index));\n                    }\n                    double* tempAsArray = (double*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _max(tempResult, tempAsArray[i]);\n                    }\n                }    \n             }\n             else if (BurstHelpers.IsV128Supported)\n             {\n                static v128 _max128(v128 a, double* b) => new v128(\n                    _max(a.Double0, b[0]),\n                    _max(a.Double1, b[1])\n                );\n                \n                var packingLength = sizeof(v128) / sizeof(double);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v128(double.MinValue);\n                    for (; index < length-packingLength; index+=packingLength)\n                    {\n                        temp = _max128(temp, ptr + index);\n                    }\n                    double* tempAsArray = (double*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _max(tempResult, tempAsArray[i]);\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                tempResult = _max(tempResult, ptr[index]);\n            }\n\n            result = tempResult;\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Max.cs.meta",
    "content": "fileFormatVersion: 2\nguid: cf9842e279ad54c088165db4c0c98505\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Max.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\"\n    };\n\n    string V256Name(string type)\n    {\n        switch (@type)\n        {\n            case \"sbyte\": return \"SByte\";\n            case \"byte\": return \"Byte\";\n            case \"short\": return \"SShort\";\n            case \"ushort\": return \"UShort\";\n            case \"int\": return \"SInt\";\n            case \"uint\": return \"UInt\";\n            case \"long\": return \"SLong\";\n            case \"ulong\": return \"ULong\";\n            case \"float\": return \"Float\";\n            case \"double\": return \"Double\";\n        }\n        throw new Exception(\"Invalid type\");\n    }\n\n    int Size(string type)\n    {\n        switch (@type)\n        {\n            case \"sbyte\": return 1;\n            case \"byte\": return 1;\n            case \"short\": return 2;\n            case \"ushort\": return 2;\n            case \"int\": return 4;\n            case \"uint\": return 4;\n            case \"long\": return 8;\n            case \"ulong\": return 8;\n            case \"float\": return 4;\n            case \"double\": return 8;\n        }\n        throw new Exception(\"Invalid type\");\n    }\n\n    bool IsFloating(string type)\n    {\n        return type is \"float\" or \"double\";\n    }\n#>\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing static Unity.Burst.Intrinsics.Arm.Neon;\n\nnamespace BurstLinq\n{  \n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=type#> Max(this NativeList<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=type#> Max(this NativeSlice<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=type#> Max(this NativeArray<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MaxCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MaxCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, out <#=type#> result)\n        {\n            var tempResult = <#=type#>.MinValue;\n<# if (IsFloating(type)) {#>\n            static <#=type#> _max(<#=type#> a, <#=type#> b) => IsNeonSupported ? math.max(a,b) : a > b ? a : b;\n            \n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static v256 _max256(v256 a, <#=type#>* b) => new v256(\n<#int vectorLength = 32 / Size(type); string typeName = V256Name(type);\nfor (int i = 0; i < vectorLength - 1; i++) {#>\n                    _max(a.<#=typeName+i#>, b[<#=i#>]),\n<# } #>\n                    _max(a.<#=typeName+(vectorLength-1)#>, b[<#=(vectorLength-1)#>])\n                );\n                \n                var packingLength = sizeof(v256) / sizeof(<#=type#>);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v256(<#=type#>.MinValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _max256(temp, (ptr+index));\n                    }\n                    <#=type#>* tempAsArray = (<#=type#>*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _max(tempResult, tempAsArray[i]);\n                    }\n                }    \n             }\n             else if (BurstHelpers.IsV128Supported)\n             {\n                static v128 _max128(v128 a, <#=type#>* b) => new v128(\n<# for (int i = 0; i < vectorLength / 2 - 1; i++) { #>\n                    _max(a.<#=typeName+i#>, b[<#=i#>]),\n<# } #>\n                    _max(a.<#=typeName+(vectorLength / 2 - 1)#>, b[<#=(vectorLength / 2 - 1)#>])\n                );\n                \n                var packingLength = sizeof(v128) / sizeof(<#=type#>);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v128(<#=type#>.MinValue);\n                    for (; index < length-packingLength; index+=packingLength)\n                    {\n                        temp = _max128(temp, ptr + index);\n                    }\n                    <#=type#>* tempAsArray = (<#=type#>*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _max(tempResult, tempAsArray[i]);\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                tempResult = _max(tempResult, ptr[index]);\n            }\n\n            result = tempResult;\n<# } else {#>\n            static <#=type#> _max(<#=type#> a, <#=type#> b) => a > b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _max(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n<# } #>\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Max.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 893b1e940b35d42019993a688cd20bf2\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Min.cs",
    "content": "using Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing static Unity.Burst.Intrinsics.Arm.Neon;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static byte Min(this NativeList<byte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((byte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static byte Min(this NativeSlice<byte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((byte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static byte Min(this NativeArray<byte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((byte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(byte* ptr, [AssumeRange(1, int.MaxValue)] int length, out byte result)\n        {\n            var tempResult = byte.MaxValue;\n            static byte _min(byte a, byte b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static sbyte Min(this NativeList<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((sbyte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static sbyte Min(this NativeSlice<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((sbyte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static sbyte Min(this NativeArray<sbyte> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((sbyte*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(sbyte* ptr, [AssumeRange(1, int.MaxValue)] int length, out sbyte result)\n        {\n            var tempResult = sbyte.MaxValue;\n            static sbyte _min(sbyte a, sbyte b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static short Min(this NativeList<short> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((short*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static short Min(this NativeSlice<short> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((short*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static short Min(this NativeArray<short> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((short*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(short* ptr, [AssumeRange(1, int.MaxValue)] int length, out short result)\n        {\n            var tempResult = short.MaxValue;\n            static short _min(short a, short b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static ushort Min(this NativeList<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((ushort*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ushort Min(this NativeSlice<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((ushort*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ushort Min(this NativeArray<ushort> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((ushort*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(ushort* ptr, [AssumeRange(1, int.MaxValue)] int length, out ushort result)\n        {\n            var tempResult = ushort.MaxValue;\n            static ushort _min(ushort a, ushort b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static int Min(this NativeList<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int Min(this NativeSlice<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int Min(this NativeArray<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(int* ptr, [AssumeRange(1, int.MaxValue)] int length, out int result)\n        {\n            var tempResult = int.MaxValue;\n            static int _min(int a, int b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static uint Min(this NativeList<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint Min(this NativeSlice<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint Min(this NativeArray<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(uint* ptr, [AssumeRange(1, int.MaxValue)] int length, out uint result)\n        {\n            var tempResult = uint.MaxValue;\n            static uint _min(uint a, uint b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static long Min(this NativeList<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static long Min(this NativeSlice<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static long Min(this NativeArray<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(long* ptr, [AssumeRange(1, int.MaxValue)] int length, out long result)\n        {\n            var tempResult = long.MaxValue;\n            static long _min(long a, long b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static ulong Min(this NativeList<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ulong Min(this NativeSlice<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ulong Min(this NativeArray<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(ulong* ptr, [AssumeRange(1, int.MaxValue)] int length, out ulong result)\n        {\n            var tempResult = ulong.MaxValue;\n            static ulong _min(ulong a, ulong b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n        }\n\n        public static float Min(this NativeList<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Min(this NativeSlice<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Min(this NativeArray<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(float* ptr, [AssumeRange(1, int.MaxValue)] int length, out float result)\n        {\n            var tempResult = float.MaxValue;\n            static float _min(float a, float b) => IsNeonSupported ? math.min(a,b): a < b ? a : b;\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static v256 _min256(v256 a, float* b) => new v256(\n                    _min(a.Float0, b[0]),\n                    _min(a.Float1, b[1]),\n                    _min(a.Float2, b[2]),\n                    _min(a.Float3, b[3]),\n                    _min(a.Float4, b[4]),\n                    _min(a.Float5, b[5]),\n                    _min(a.Float6, b[6]),\n                    _min(a.Float7, b[7])\n                );\n                \n                var packingLength = sizeof(v256) / sizeof(float);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v256(float.MaxValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _min256(temp, ptr+index);\n                    }\n                    float* tempAsArray = (float*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _min(tempResult, tempAsArray[i]);\n                    }\n                }    \n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                static v128 _min128(v128 a, float* b) => new v128(\n                    _min(a.Float0, b[0]),\n                    _min(a.Float1, b[1]),\n                    _min(a.Float2, b[2]),\n                    _min(a.Float3, b[3])\n                );\n                \n                var packingLength = sizeof(v128) / sizeof(float);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v128(float.MaxValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _min128(temp, ptr+index);\n                    }\n                    float* tempAsArray = (float*) &temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _min(tempResult, tempAsArray[i]);\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                tempResult = _min(tempResult, ptr[index]);\n            }\n\n            result =  tempResult;\n        }\n\n        public static double Min(this NativeList<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Min(this NativeSlice<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Min(this NativeArray<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(double* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            var tempResult = double.MaxValue;\n            static double _min(double a, double b) => IsNeonSupported ? math.min(a,b): a < b ? a : b;\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static v256 _min256(v256 a, double* b) => new v256(\n                    _min(a.Double0, b[0]),\n                    _min(a.Double1, b[1]),\n                    _min(a.Double2, b[2]),\n                    _min(a.Double3, b[3])\n                );\n                \n                var packingLength = sizeof(v256) / sizeof(double);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v256(double.MaxValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _min256(temp, ptr+index);\n                    }\n                    double* tempAsArray = (double*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _min(tempResult, tempAsArray[i]);\n                    }\n                }    \n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                static v128 _min128(v128 a, double* b) => new v128(\n                    _min(a.Double0, b[0]),\n                    _min(a.Double1, b[1])\n                );\n                \n                var packingLength = sizeof(v128) / sizeof(double);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v128(double.MaxValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _min128(temp, ptr+index);\n                    }\n                    double* tempAsArray = (double*) &temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _min(tempResult, tempAsArray[i]);\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                tempResult = _min(tempResult, ptr[index]);\n            }\n\n            result =  tempResult;\n        }\n\n        \n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Min.cs.meta",
    "content": "fileFormatVersion: 2\nguid: de88d273ca0384b83950cbdeff2ade41\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Min.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\"\n    };\n\n    string V256Name(string type)\n    {\n        switch (@type)\n        {\n            case \"sbyte\": return \"SByte\";\n            case \"byte\": return \"Byte\";\n            case \"short\": return \"SShort\";\n            case \"ushort\": return \"UShort\";\n            case \"int\": return \"SInt\";\n            case \"uint\": return \"UInt\";\n            case \"long\": return \"SLong\";\n            case \"ulong\": return \"ULong\";\n            case \"float\": return \"Float\";\n            case \"double\": return \"Double\";\n        }\n        throw new Exception(\"Invalid type\");\n    }\n\n    int Size(string type)\n    {\n        switch (@type)\n        {\n            case \"sbyte\": return 1;\n            case \"byte\": return 1;\n            case \"short\": return 2;\n            case \"ushort\": return 2;\n            case \"int\": return 4;\n            case \"uint\": return 4;\n            case \"long\": return 8;\n            case \"ulong\": return 8;\n            case \"float\": return 4;\n            case \"double\": return 8;\n        }\n        throw new Exception(\"Invalid type\");\n    }\n    \n    bool IsFloating(string type)\n    {\n        return type is \"float\" or \"double\";\n    }\n#>\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing static Unity.Burst.Intrinsics.Arm.Neon;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=type#> Min(this NativeList<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=type#> Min(this NativeSlice<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=type#> Min(this NativeArray<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            MinCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile]\n        internal static void MinCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, out <#=type#> result)\n        {\n            var tempResult = <#=type#>.MaxValue;\n<# if (IsFloating(type)) {#>\n            static <#=type#> _min(<#=type#> a, <#=type#> b) => IsNeonSupported ? math.min(a,b): a < b ? a : b;\n            var index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static v256 _min256(v256 a, <#=type#>* b) => new v256(\n<# int vectorLength = 32 / Size(type); string typeName = V256Name(type);\nfor (int i = 0; i < vectorLength - 1; i++) {#>\n                    _min(a.<#=typeName+i#>, b[<#=i#>]),\n<# } #>\n                    _min(a.<#=typeName+(vectorLength-1)#>, b[<#=(vectorLength-1)#>])\n                );\n                \n                var packingLength = sizeof(v256) / sizeof(<#=type#>);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v256(<#=type#>.MaxValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _min256(temp, ptr+index);\n                    }\n                    <#=type#>* tempAsArray = (<#=type#>*)&temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _min(tempResult, tempAsArray[i]);\n                    }\n                }    \n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                static v128 _min128(v128 a, <#=type#>* b) => new v128(\n<# for (int i =0;i<vectorLength/2-1;i++) {#>\n                    _min(a.<#=typeName+i#>, b[<#=i#>]),\n<# } #>\n                    _min(a.<#=typeName+(vectorLength/2-1)#>, b[<#=vectorLength/2-1#>])\n                );\n                \n                var packingLength = sizeof(v128) / sizeof(<#=type#>);\n                 \n                if (0 < length / packingLength)\n                {\n                    var temp = new v128(<#=type#>.MaxValue);\n                    for (; index < length - packingLength; index += packingLength)\n                    {\n                        temp = _min128(temp, ptr+index);\n                    }\n                    <#=type#>* tempAsArray = (<#=type#>*) &temp;\n                    for (int i = 0; i < packingLength; i++)\n                    {\n                        tempResult = _min(tempResult, tempAsArray[i]);\n                    }\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                tempResult = _min(tempResult, ptr[index]);\n            }\n\n            result =  tempResult;\n<# } else {#>\n            static <#=type#> _min(<#=type#> a, <#=type#> b) => a < b ? a : b;\n        \n            for (var i = 0; i < length; i++)\n            {\n                tempResult = _min(tempResult, ptr[i]);\n            }\n\n            result = tempResult;\n<# } #>\n        }\n\n<# } #>\n        \n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Min.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 2aec1a558601c493da363c3c64bef216\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.SequenceEqual.cs",
    "content": "\nusing System.Runtime.CompilerServices;\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static bool SequenceEqual(this NativeList<byte> first, NativeList<byte> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((byte*)first.GetUnsafePtr(), (byte*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<byte> first, NativeSlice<byte> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((byte*)first.GetUnsafePtr(), (byte*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<byte> first, NativeArray<byte> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((byte*)first.GetUnsafePtr(), (byte*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(byte* firstPtr, byte* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(byte)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<sbyte> first, NativeList<sbyte> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((sbyte*)first.GetUnsafePtr(), (sbyte*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<sbyte> first, NativeSlice<sbyte> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((sbyte*)first.GetUnsafePtr(), (sbyte*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<sbyte> first, NativeArray<sbyte> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((sbyte*)first.GetUnsafePtr(), (sbyte*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(sbyte* firstPtr, sbyte* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(sbyte)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<short> first, NativeList<short> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((short*)first.GetUnsafePtr(), (short*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<short> first, NativeSlice<short> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((short*)first.GetUnsafePtr(), (short*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<short> first, NativeArray<short> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((short*)first.GetUnsafePtr(), (short*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(short* firstPtr, short* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(short)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<ushort> first, NativeList<ushort> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((ushort*)first.GetUnsafePtr(), (ushort*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<ushort> first, NativeSlice<ushort> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((ushort*)first.GetUnsafePtr(), (ushort*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<ushort> first, NativeArray<ushort> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((ushort*)first.GetUnsafePtr(), (ushort*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(ushort* firstPtr, ushort* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(ushort)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<int> first, NativeList<int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int*)first.GetUnsafePtr(), (int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<int> first, NativeSlice<int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int*)first.GetUnsafePtr(), (int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<int> first, NativeArray<int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int*)first.GetUnsafePtr(), (int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(int* firstPtr, int* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(int)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<uint> first, NativeList<uint> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint*)first.GetUnsafePtr(), (uint*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<uint> first, NativeSlice<uint> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint*)first.GetUnsafePtr(), (uint*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<uint> first, NativeArray<uint> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint*)first.GetUnsafePtr(), (uint*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(uint* firstPtr, uint* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(uint)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<long> first, NativeList<long> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((long*)first.GetUnsafePtr(), (long*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<long> first, NativeSlice<long> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((long*)first.GetUnsafePtr(), (long*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<long> first, NativeArray<long> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((long*)first.GetUnsafePtr(), (long*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(long* firstPtr, long* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(long)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<ulong> first, NativeList<ulong> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((ulong*)first.GetUnsafePtr(), (ulong*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<ulong> first, NativeSlice<ulong> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((ulong*)first.GetUnsafePtr(), (ulong*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<ulong> first, NativeArray<ulong> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((ulong*)first.GetUnsafePtr(), (ulong*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(ulong* firstPtr, ulong* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(ulong)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<float> first, NativeList<float> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float*)first.GetUnsafePtr(), (float*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<float> first, NativeSlice<float> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float*)first.GetUnsafePtr(), (float*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<float> first, NativeArray<float> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float*)first.GetUnsafePtr(), (float*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(float* firstPtr, float* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(float) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<double> first, NativeList<double> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double*)first.GetUnsafePtr(), (double*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<double> first, NativeSlice<double> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double*)first.GetUnsafePtr(), (double*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<double> first, NativeArray<double> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double*)first.GetUnsafePtr(), (double*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(double* firstPtr, double* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.DoubleCmp((double*)firstPtr, (double*)secondPtr, length*(sizeof(double) / sizeof(double)));\n        }\n\n        public static bool SequenceEqual(this NativeList<Vector2> first, NativeList<Vector2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector2*)first.GetUnsafePtr(), (Vector2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<Vector2> first, NativeSlice<Vector2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector2*)first.GetUnsafePtr(), (Vector2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<Vector2> first, NativeArray<Vector2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector2*)first.GetUnsafePtr(), (Vector2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(Vector2* firstPtr, Vector2* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(Vector2) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<Vector2Int> first, NativeList<Vector2Int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector2Int*)first.GetUnsafePtr(), (Vector2Int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<Vector2Int> first, NativeSlice<Vector2Int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector2Int*)first.GetUnsafePtr(), (Vector2Int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<Vector2Int> first, NativeArray<Vector2Int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector2Int*)first.GetUnsafePtr(), (Vector2Int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(Vector2Int* firstPtr, Vector2Int* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(Vector2Int)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<Vector3> first, NativeList<Vector3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector3*)first.GetUnsafePtr(), (Vector3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<Vector3> first, NativeSlice<Vector3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector3*)first.GetUnsafePtr(), (Vector3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<Vector3> first, NativeArray<Vector3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector3*)first.GetUnsafePtr(), (Vector3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(Vector3* firstPtr, Vector3* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(Vector3) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<Vector3Int> first, NativeList<Vector3Int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector3Int*)first.GetUnsafePtr(), (Vector3Int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<Vector3Int> first, NativeSlice<Vector3Int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector3Int*)first.GetUnsafePtr(), (Vector3Int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<Vector3Int> first, NativeArray<Vector3Int> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector3Int*)first.GetUnsafePtr(), (Vector3Int*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(Vector3Int* firstPtr, Vector3Int* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(Vector3Int)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<Vector4> first, NativeList<Vector4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector4*)first.GetUnsafePtr(), (Vector4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<Vector4> first, NativeSlice<Vector4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector4*)first.GetUnsafePtr(), (Vector4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<Vector4> first, NativeArray<Vector4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((Vector4*)first.GetUnsafePtr(), (Vector4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(Vector4* firstPtr, Vector4* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(Vector4) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<int2> first, NativeList<int2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int2*)first.GetUnsafePtr(), (int2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<int2> first, NativeSlice<int2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int2*)first.GetUnsafePtr(), (int2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<int2> first, NativeArray<int2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int2*)first.GetUnsafePtr(), (int2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(int2* firstPtr, int2* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(int2)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<int3> first, NativeList<int3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int3*)first.GetUnsafePtr(), (int3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<int3> first, NativeSlice<int3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int3*)first.GetUnsafePtr(), (int3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<int3> first, NativeArray<int3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int3*)first.GetUnsafePtr(), (int3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(int3* firstPtr, int3* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(int3)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<int4> first, NativeList<int4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int4*)first.GetUnsafePtr(), (int4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<int4> first, NativeSlice<int4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int4*)first.GetUnsafePtr(), (int4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<int4> first, NativeArray<int4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((int4*)first.GetUnsafePtr(), (int4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(int4* firstPtr, int4* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(int4)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<uint2> first, NativeList<uint2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint2*)first.GetUnsafePtr(), (uint2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<uint2> first, NativeSlice<uint2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint2*)first.GetUnsafePtr(), (uint2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<uint2> first, NativeArray<uint2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint2*)first.GetUnsafePtr(), (uint2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(uint2* firstPtr, uint2* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(uint2)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<uint3> first, NativeList<uint3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint3*)first.GetUnsafePtr(), (uint3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<uint3> first, NativeSlice<uint3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint3*)first.GetUnsafePtr(), (uint3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<uint3> first, NativeArray<uint3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint3*)first.GetUnsafePtr(), (uint3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(uint3* firstPtr, uint3* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(uint3)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<uint4> first, NativeList<uint4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint4*)first.GetUnsafePtr(), (uint4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<uint4> first, NativeSlice<uint4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint4*)first.GetUnsafePtr(), (uint4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<uint4> first, NativeArray<uint4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((uint4*)first.GetUnsafePtr(), (uint4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(uint4* firstPtr, uint4* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(uint4)));  \n        }\n\n        public static bool SequenceEqual(this NativeList<float2> first, NativeList<float2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float2*)first.GetUnsafePtr(), (float2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<float2> first, NativeSlice<float2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float2*)first.GetUnsafePtr(), (float2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<float2> first, NativeArray<float2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float2*)first.GetUnsafePtr(), (float2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(float2* firstPtr, float2* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(float2) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<float3> first, NativeList<float3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float3*)first.GetUnsafePtr(), (float3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<float3> first, NativeSlice<float3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float3*)first.GetUnsafePtr(), (float3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<float3> first, NativeArray<float3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float3*)first.GetUnsafePtr(), (float3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(float3* firstPtr, float3* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(float3) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<float4> first, NativeList<float4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float4*)first.GetUnsafePtr(), (float4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<float4> first, NativeSlice<float4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float4*)first.GetUnsafePtr(), (float4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<float4> first, NativeArray<float4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((float4*)first.GetUnsafePtr(), (float4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(float4* firstPtr, float4* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(float4) / sizeof(float)));\n        }\n\n        public static bool SequenceEqual(this NativeList<double2> first, NativeList<double2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double2*)first.GetUnsafePtr(), (double2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<double2> first, NativeSlice<double2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double2*)first.GetUnsafePtr(), (double2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<double2> first, NativeArray<double2> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double2*)first.GetUnsafePtr(), (double2*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(double2* firstPtr, double2* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.DoubleCmp((double*)firstPtr, (double*)secondPtr, length*(sizeof(double2) / sizeof(double)));\n        }\n\n        public static bool SequenceEqual(this NativeList<double3> first, NativeList<double3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double3*)first.GetUnsafePtr(), (double3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<double3> first, NativeSlice<double3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double3*)first.GetUnsafePtr(), (double3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<double3> first, NativeArray<double3> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double3*)first.GetUnsafePtr(), (double3*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(double3* firstPtr, double3* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.DoubleCmp((double*)firstPtr, (double*)secondPtr, length*(sizeof(double3) / sizeof(double)));\n        }\n\n        public static bool SequenceEqual(this NativeList<double4> first, NativeList<double4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double4*)first.GetUnsafePtr(), (double4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<double4> first, NativeSlice<double4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double4*)first.GetUnsafePtr(), (double4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<double4> first, NativeArray<double4> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((double4*)first.GetUnsafePtr(), (double4*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(double4* firstPtr, double4* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n            return CmpHelpers.DoubleCmp((double*)firstPtr, (double*)secondPtr, length*(sizeof(double4) / sizeof(double)));\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.SequenceEqual.cs.meta",
    "content": "fileFormatVersion: 2\nguid: e0ccd9adadecb4bb7b6683997e98cbe7\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.SequenceEqual.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n\n    bool IsFloats(string type)\n    {\n        return type is \"float\"  or \"float2\" or \"float3\" or \"float4\"  or \"Vector2\" or \"Vector3\" or \"Vector4\";\n    }\n    bool IsDoubles(string type)\n    {\n        return type is  \"double\" or  \"double2\" or \"double3\" or \"double4\" ;\n    }\n#>\n\nusing System.Runtime.CompilerServices;\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static bool SequenceEqual(this NativeList<<#=type#>> first, NativeList<<#=type#>> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((<#=type#>*)first.GetUnsafePtr(), (<#=type#>*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeSlice<<#=type#>> first, NativeSlice<<#=type#>> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((<#=type#>*)first.GetUnsafePtr(), (<#=type#>*)second.GetUnsafePtr(), first.Length);\n        }\n\n        public static bool SequenceEqual(this NativeArray<<#=type#>> first, NativeArray<<#=type#>> second)\n        {\n            if (first.Length != second.Length) return false;\n            return SequenceEqualCore((<#=type#>*)first.GetUnsafePtr(), (<#=type#>*)second.GetUnsafePtr(), first.Length);\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        internal static bool SequenceEqualCore(<#=type#>* firstPtr, <#=type#>* secondPtr, [AssumeRange(0, int.MaxValue)] int length)\n        {\n<# if (IsFloats(type)){#>\n            return CmpHelpers.FloatCmp((float*)firstPtr, (float*)secondPtr, length*(sizeof(<#=type#>) / sizeof(float)));\n<# } else if(IsDoubles(type)){#>\n            return CmpHelpers.DoubleCmp((double*)firstPtr, (double*)secondPtr, length*(sizeof(<#=type#>) / sizeof(double)));\n<# } else{#>\n            return CmpHelpers.MemCmp(firstPtr, secondPtr, length * (sizeof(<#=type#>)));  \n<# } #>\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.SequenceEqual.tt.meta",
    "content": "fileFormatVersion: 2\nguid: d651c44abf06842ebaaa5b82e3471072\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Sum.cs",
    "content": "using Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static int Sum(this NativeList<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int Sum(this NativeSlice<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int Sum(this NativeArray<int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(int* ptr, [AssumeRange(1, int.MaxValue)] int length, out int result)\n        {\n            var sum = default(int);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static uint Sum(this NativeList<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint Sum(this NativeSlice<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint Sum(this NativeArray<uint> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(uint* ptr, [AssumeRange(1, int.MaxValue)] int length, out uint result)\n        {\n            var sum = default(uint);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static long Sum(this NativeList<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static long Sum(this NativeSlice<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static long Sum(this NativeArray<long> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((long*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(long* ptr, [AssumeRange(1, int.MaxValue)] int length, out long result)\n        {\n            var sum = default(long);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static ulong Sum(this NativeList<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ulong Sum(this NativeSlice<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static ulong Sum(this NativeArray<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((ulong*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(ulong* ptr, [AssumeRange(1, int.MaxValue)] int length, out ulong result)\n        {\n            var sum = default(ulong);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static float Sum(this NativeList<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Sum(this NativeSlice<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float Sum(this NativeArray<float> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(float* ptr, [AssumeRange(1, int.MaxValue)] int length, out float result)\n        {\n            var sum = default(float);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static double Sum(this NativeList<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Sum(this NativeSlice<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double Sum(this NativeArray<double> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(double* ptr, [AssumeRange(1, int.MaxValue)] int length, out double result)\n        {\n            var sum = default(double);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static Vector2 Sum(this NativeList<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2 Sum(this NativeSlice<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2 Sum(this NativeArray<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(Vector2* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector2 result)\n        {\n            SumCore((float4*)ptr, length / 2, out var sum2);\n            var sum = new Vector2(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n\n        public static Vector2Int Sum(this NativeList<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector2Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2Int Sum(this NativeSlice<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector2Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector2Int Sum(this NativeArray<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector2Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(Vector2Int* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector2Int result)\n        {\n            SumCore((int4*)ptr, length / 2, out var sum2);\n            var sum = new Vector2Int(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n\n        public static Vector3 Sum(this NativeList<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3 Sum(this NativeSlice<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3 Sum(this NativeArray<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(Vector3* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector3 result)\n        {\n            var sum = default(Vector3);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static Vector3Int Sum(this NativeList<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector3Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3Int Sum(this NativeSlice<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector3Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector3Int Sum(this NativeArray<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector3Int*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(Vector3Int* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector3Int result)\n        {\n            var sum = default(Vector3Int);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static Vector4 Sum(this NativeList<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector4 Sum(this NativeSlice<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static Vector4 Sum(this NativeArray<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((Vector4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(Vector4* ptr, [AssumeRange(1, int.MaxValue)] int length, out Vector4 result)\n        {\n            var sum = default(Vector4);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static int2 Sum(this NativeList<int2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int2 Sum(this NativeSlice<int2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int2 Sum(this NativeArray<int2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(int2* ptr, [AssumeRange(1, int.MaxValue)] int length, out int2 result)\n        {\n            SumCore((int4*)ptr, length / 2, out var sum2);\n            var sum = new int2(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n\n        public static int3 Sum(this NativeList<int3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int3 Sum(this NativeSlice<int3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int3 Sum(this NativeArray<int3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(int3* ptr, [AssumeRange(1, int.MaxValue)] int length, out int3 result)\n        {\n            var sum = default(int3);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static int4 Sum(this NativeList<int4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int4 Sum(this NativeSlice<int4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static int4 Sum(this NativeArray<int4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((int4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(int4* ptr, [AssumeRange(1, int.MaxValue)] int length, out int4 result)\n        {\n            var sum = default(int4);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static uint2 Sum(this NativeList<uint2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint2 Sum(this NativeSlice<uint2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint2 Sum(this NativeArray<uint2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(uint2* ptr, [AssumeRange(1, int.MaxValue)] int length, out uint2 result)\n        {\n            SumCore((uint4*)ptr, length / 2, out var sum2);\n            var sum = new uint2(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n\n        public static uint3 Sum(this NativeList<uint3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint3 Sum(this NativeSlice<uint3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint3 Sum(this NativeArray<uint3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(uint3* ptr, [AssumeRange(1, int.MaxValue)] int length, out uint3 result)\n        {\n            var sum = default(uint3);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static uint4 Sum(this NativeList<uint4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint4 Sum(this NativeSlice<uint4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static uint4 Sum(this NativeArray<uint4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((uint4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(uint4* ptr, [AssumeRange(1, int.MaxValue)] int length, out uint4 result)\n        {\n            var sum = default(uint4);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static float2 Sum(this NativeList<float2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float2 Sum(this NativeSlice<float2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float2 Sum(this NativeArray<float2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(float2* ptr, [AssumeRange(1, int.MaxValue)] int length, out float2 result)\n        {\n            SumCore((float4*)ptr, length / 2, out var sum2);\n            var sum = new float2(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n\n        public static float3 Sum(this NativeList<float3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float3 Sum(this NativeSlice<float3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float3 Sum(this NativeArray<float3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(float3* ptr, [AssumeRange(1, int.MaxValue)] int length, out float3 result)\n        {\n            var sum = default(float3);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static float4 Sum(this NativeList<float4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float4 Sum(this NativeSlice<float4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static float4 Sum(this NativeArray<float4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((float4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(float4* ptr, [AssumeRange(1, int.MaxValue)] int length, out float4 result)\n        {\n            var sum = default(float4);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static double2 Sum(this NativeList<double2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double2 Sum(this NativeSlice<double2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double2 Sum(this NativeArray<double2> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double2*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(double2* ptr, [AssumeRange(1, int.MaxValue)] int length, out double2 result)\n        {\n            SumCore((double4*)ptr, length / 2, out var sum2);\n            var sum = new double2(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n\n        public static double3 Sum(this NativeList<double3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double3 Sum(this NativeSlice<double3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double3 Sum(this NativeArray<double3> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double3*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(double3* ptr, [AssumeRange(1, int.MaxValue)] int length, out double3 result)\n        {\n            var sum = default(double3);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n        public static double4 Sum(this NativeList<double4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double4 Sum(this NativeSlice<double4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static double4 Sum(this NativeArray<double4> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((double4*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(double4* ptr, [AssumeRange(1, int.MaxValue)] int length, out double4 result)\n        {\n            var sum = default(double4);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Sum.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 714495b51e8264155bb1ccf1c6283ebb\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Sum.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n\n    bool TryGetTwiceVector(string type, out string longer)\n    {\n        longer = null;\n        switch (type)\n        {\n            case \"int2\": longer = \"int4\"; return true;\n            case \"uint2\": longer = \"uint4\"; return true;\n            case \"float2\": longer = \"float4\"; return true;\n            case \"double2\": longer = \"double4\"; return true;\n            case \"Vector2\": longer = \"float4\"; return true;\n            case \"Vector2Int\": longer = \"int4\"; return true;\n            default: return false;\n        }\n    }\n    \n#>\nusing Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=type#> Sum(this NativeList<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=type#> Sum(this NativeSlice<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n        public static <#=type#> Sum(this NativeArray<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.Length);\n            SumCore((<#=type#>*)source.GetUnsafePtr(), source.Length, out var result);\n            return result;\n        }\n\n<#if (TryGetTwiceVector(type, out var twiceType)) { #>\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, out <#=type#> result)\n        {\n            SumCore((<#=twiceType#>*)ptr, length / 2, out var sum2);\n            var sum = new <#=type#>(sum2.x + sum2.z, sum2.y + sum2.w);\n            if (length % 2 == 1) sum += ptr[length - 1];\n            result = sum;\n        }\n<# } else { #>\n        [BurstCompile(FloatMode = FloatMode.Fast)]\n        internal static void SumCore(<#=type#>* ptr, [AssumeRange(1, int.MaxValue)] int length, out <#=type#> result)\n        {\n            var sum = default(<#=type#>);\n            for (int i = 0; i < length; i++) sum += ptr[i];\n            result = sum;\n        }\n<# } #>\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Native.Sum.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 1cdd06228afb942f78b23c4dca6c4e47\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.SequenceEqual.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static bool SequenceEqual(this byte[] first, byte[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (byte* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this byte[] first, List<byte> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (byte* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this byte[] first, Memory<byte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<byte>)second.Span);\n        }\n\n        public static bool SequenceEqual(this byte[] first, ReadOnlyMemory<byte> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this byte[] first, Span<byte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<byte>)second);\n        }\n\n        public static bool SequenceEqual(this byte[] first, ReadOnlySpan<byte> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (byte* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<byte> first, byte[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<byte> first, List<byte> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (byte* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<byte> first, Memory<byte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<byte>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<byte> first, ReadOnlyMemory<byte> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<byte> first, Span<byte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<byte>)second);\n        }\n\n        public static bool SequenceEqual(this List<byte> first, ReadOnlySpan<byte> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (byte* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<byte> first, Memory<byte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<byte>)first.Span, (ReadOnlySpan<byte>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<byte> first, ReadOnlyMemory<byte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<byte>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<byte> first, ReadOnlyMemory<byte> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<byte> first, Span<byte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<byte>)first, (ReadOnlySpan<byte>)second);\n        }\n\n        public static bool SequenceEqual(this Span<byte> first, ReadOnlySpan<byte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<byte>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<byte> first, ReadOnlySpan<byte> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (byte* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this sbyte[] first, sbyte[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (sbyte* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this sbyte[] first, List<sbyte> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (sbyte* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this sbyte[] first, Memory<sbyte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<sbyte>)second.Span);\n        }\n\n        public static bool SequenceEqual(this sbyte[] first, ReadOnlyMemory<sbyte> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this sbyte[] first, Span<sbyte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<sbyte>)second);\n        }\n\n        public static bool SequenceEqual(this sbyte[] first, ReadOnlySpan<sbyte> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (sbyte* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<sbyte> first, sbyte[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<sbyte> first, List<sbyte> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (sbyte* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<sbyte> first, Memory<sbyte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<sbyte>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<sbyte> first, ReadOnlyMemory<sbyte> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<sbyte> first, Span<sbyte> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<sbyte>)second);\n        }\n\n        public static bool SequenceEqual(this List<sbyte> first, ReadOnlySpan<sbyte> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (sbyte* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<sbyte> first, Memory<sbyte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<sbyte>)first.Span, (ReadOnlySpan<sbyte>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<sbyte> first, ReadOnlyMemory<sbyte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<sbyte>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<sbyte> first, ReadOnlyMemory<sbyte> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<sbyte> first, Span<sbyte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<sbyte>)first, (ReadOnlySpan<sbyte>)second);\n        }\n\n        public static bool SequenceEqual(this Span<sbyte> first, ReadOnlySpan<sbyte> second)\n        {\n            return SequenceEqual((ReadOnlySpan<sbyte>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<sbyte> first, ReadOnlySpan<sbyte> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (sbyte* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this short[] first, short[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (short* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this short[] first, List<short> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (short* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this short[] first, Memory<short> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<short>)second.Span);\n        }\n\n        public static bool SequenceEqual(this short[] first, ReadOnlyMemory<short> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this short[] first, Span<short> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<short>)second);\n        }\n\n        public static bool SequenceEqual(this short[] first, ReadOnlySpan<short> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (short* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<short> first, short[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<short> first, List<short> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (short* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<short> first, Memory<short> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<short>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<short> first, ReadOnlyMemory<short> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<short> first, Span<short> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<short>)second);\n        }\n\n        public static bool SequenceEqual(this List<short> first, ReadOnlySpan<short> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (short* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<short> first, Memory<short> second)\n        {\n            return SequenceEqual((ReadOnlySpan<short>)first.Span, (ReadOnlySpan<short>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<short> first, ReadOnlyMemory<short> second)\n        {\n            return SequenceEqual((ReadOnlySpan<short>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<short> first, ReadOnlyMemory<short> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<short> first, Span<short> second)\n        {\n            return SequenceEqual((ReadOnlySpan<short>)first, (ReadOnlySpan<short>)second);\n        }\n\n        public static bool SequenceEqual(this Span<short> first, ReadOnlySpan<short> second)\n        {\n            return SequenceEqual((ReadOnlySpan<short>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<short> first, ReadOnlySpan<short> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (short* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this ushort[] first, ushort[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (ushort* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this ushort[] first, List<ushort> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (ushort* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this ushort[] first, Memory<ushort> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ushort>)second.Span);\n        }\n\n        public static bool SequenceEqual(this ushort[] first, ReadOnlyMemory<ushort> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this ushort[] first, Span<ushort> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ushort>)second);\n        }\n\n        public static bool SequenceEqual(this ushort[] first, ReadOnlySpan<ushort> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (ushort* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<ushort> first, ushort[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<ushort> first, List<ushort> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (ushort* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<ushort> first, Memory<ushort> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ushort>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<ushort> first, ReadOnlyMemory<ushort> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<ushort> first, Span<ushort> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ushort>)second);\n        }\n\n        public static bool SequenceEqual(this List<ushort> first, ReadOnlySpan<ushort> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (ushort* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<ushort> first, Memory<ushort> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ushort>)first.Span, (ReadOnlySpan<ushort>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<ushort> first, ReadOnlyMemory<ushort> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ushort>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<ushort> first, ReadOnlyMemory<ushort> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<ushort> first, Span<ushort> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ushort>)first, (ReadOnlySpan<ushort>)second);\n        }\n\n        public static bool SequenceEqual(this Span<ushort> first, ReadOnlySpan<ushort> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ushort>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<ushort> first, ReadOnlySpan<ushort> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (ushort* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this int[] first, int[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n            fixed (int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int[] first, List<int> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int[] first, Memory<int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this int[] first, ReadOnlyMemory<int> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this int[] first, Span<int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int>)second);\n        }\n\n        public static bool SequenceEqual(this int[] first, ReadOnlySpan<int> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int> first, int[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<int> first, List<int> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int> first, Memory<int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int> first, ReadOnlyMemory<int> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int> first, Span<int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int>)second);\n        }\n\n        public static bool SequenceEqual(this List<int> first, ReadOnlySpan<int> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (int* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<int> first, Memory<int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int>)first.Span, (ReadOnlySpan<int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<int> first, ReadOnlyMemory<int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<int> first, ReadOnlyMemory<int> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<int> first, Span<int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int>)first, (ReadOnlySpan<int>)second);\n        }\n\n        public static bool SequenceEqual(this Span<int> first, ReadOnlySpan<int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<int> first, ReadOnlySpan<int> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this uint[] first, uint[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (uint* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint[] first, List<uint> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint[] first, Memory<uint> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint>)second.Span);\n        }\n\n        public static bool SequenceEqual(this uint[] first, ReadOnlyMemory<uint> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this uint[] first, Span<uint> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint>)second);\n        }\n\n        public static bool SequenceEqual(this uint[] first, ReadOnlySpan<uint> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (uint* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint> first, uint[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<uint> first, List<uint> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint> first, Memory<uint> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint> first, ReadOnlyMemory<uint> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint> first, Span<uint> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint>)second);\n        }\n\n        public static bool SequenceEqual(this List<uint> first, ReadOnlySpan<uint> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (uint* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<uint> first, Memory<uint> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint>)first.Span, (ReadOnlySpan<uint>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<uint> first, ReadOnlyMemory<uint> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<uint> first, ReadOnlyMemory<uint> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<uint> first, Span<uint> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint>)first, (ReadOnlySpan<uint>)second);\n        }\n\n        public static bool SequenceEqual(this Span<uint> first, ReadOnlySpan<uint> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<uint> first, ReadOnlySpan<uint> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (uint* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this long[] first, long[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (long* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this long[] first, List<long> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (long* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this long[] first, Memory<long> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<long>)second.Span);\n        }\n\n        public static bool SequenceEqual(this long[] first, ReadOnlyMemory<long> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this long[] first, Span<long> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<long>)second);\n        }\n\n        public static bool SequenceEqual(this long[] first, ReadOnlySpan<long> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (long* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<long> first, long[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<long> first, List<long> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (long* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<long> first, Memory<long> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<long>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<long> first, ReadOnlyMemory<long> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<long> first, Span<long> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<long>)second);\n        }\n\n        public static bool SequenceEqual(this List<long> first, ReadOnlySpan<long> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (long* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<long> first, Memory<long> second)\n        {\n            return SequenceEqual((ReadOnlySpan<long>)first.Span, (ReadOnlySpan<long>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<long> first, ReadOnlyMemory<long> second)\n        {\n            return SequenceEqual((ReadOnlySpan<long>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<long> first, ReadOnlyMemory<long> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<long> first, Span<long> second)\n        {\n            return SequenceEqual((ReadOnlySpan<long>)first, (ReadOnlySpan<long>)second);\n        }\n\n        public static bool SequenceEqual(this Span<long> first, ReadOnlySpan<long> second)\n        {\n            return SequenceEqual((ReadOnlySpan<long>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<long> first, ReadOnlySpan<long> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (long* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this ulong[] first, ulong[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (ulong* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this ulong[] first, List<ulong> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (ulong* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this ulong[] first, Memory<ulong> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ulong>)second.Span);\n        }\n\n        public static bool SequenceEqual(this ulong[] first, ReadOnlyMemory<ulong> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this ulong[] first, Span<ulong> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ulong>)second);\n        }\n\n        public static bool SequenceEqual(this ulong[] first, ReadOnlySpan<ulong> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (ulong* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<ulong> first, ulong[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<ulong> first, List<ulong> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (ulong* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<ulong> first, Memory<ulong> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ulong>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<ulong> first, ReadOnlyMemory<ulong> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<ulong> first, Span<ulong> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<ulong>)second);\n        }\n\n        public static bool SequenceEqual(this List<ulong> first, ReadOnlySpan<ulong> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (ulong* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<ulong> first, Memory<ulong> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ulong>)first.Span, (ReadOnlySpan<ulong>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<ulong> first, ReadOnlyMemory<ulong> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ulong>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<ulong> first, ReadOnlyMemory<ulong> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<ulong> first, Span<ulong> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ulong>)first, (ReadOnlySpan<ulong>)second);\n        }\n\n        public static bool SequenceEqual(this Span<ulong> first, ReadOnlySpan<ulong> second)\n        {\n            return SequenceEqual((ReadOnlySpan<ulong>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<ulong> first, ReadOnlySpan<ulong> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (ulong* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this float[] first, float[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (float* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float[] first, List<float> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float[] first, Memory<float> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float>)second.Span);\n        }\n\n        public static bool SequenceEqual(this float[] first, ReadOnlyMemory<float> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this float[] first, Span<float> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float>)second);\n        }\n\n        public static bool SequenceEqual(this float[] first, ReadOnlySpan<float> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (float* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float> first, float[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<float> first, List<float> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float> first, Memory<float> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float> first, ReadOnlyMemory<float> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float> first, Span<float> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float>)second);\n        }\n\n        public static bool SequenceEqual(this List<float> first, ReadOnlySpan<float> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (float* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<float> first, Memory<float> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float>)first.Span, (ReadOnlySpan<float>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<float> first, ReadOnlyMemory<float> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<float> first, ReadOnlyMemory<float> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<float> first, Span<float> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float>)first, (ReadOnlySpan<float>)second);\n        }\n\n        public static bool SequenceEqual(this Span<float> first, ReadOnlySpan<float> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<float> first, ReadOnlySpan<float> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (float* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this double[] first, double[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (double* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double[] first, List<double> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double[] first, Memory<double> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double>)second.Span);\n        }\n\n        public static bool SequenceEqual(this double[] first, ReadOnlyMemory<double> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this double[] first, Span<double> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double>)second);\n        }\n\n        public static bool SequenceEqual(this double[] first, ReadOnlySpan<double> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (double* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double> first, double[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<double> first, List<double> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double> first, Memory<double> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double> first, ReadOnlyMemory<double> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double> first, Span<double> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double>)second);\n        }\n\n        public static bool SequenceEqual(this List<double> first, ReadOnlySpan<double> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (double* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<double> first, Memory<double> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double>)first.Span, (ReadOnlySpan<double>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<double> first, ReadOnlyMemory<double> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<double> first, ReadOnlyMemory<double> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<double> first, Span<double> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double>)first, (ReadOnlySpan<double>)second);\n        }\n\n        public static bool SequenceEqual(this Span<double> first, ReadOnlySpan<double> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<double> first, ReadOnlySpan<double> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (double* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this Vector2[] first, Vector2[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector2[] first, List<Vector2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector2* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector2[] first, Memory<Vector2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector2[] first, ReadOnlyMemory<Vector2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector2[] first, Span<Vector2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2>)second);\n        }\n\n        public static bool SequenceEqual(this Vector2[] first, ReadOnlySpan<Vector2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector2> first, Vector2[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<Vector2> first, List<Vector2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector2* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector2> first, Memory<Vector2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector2> first, ReadOnlyMemory<Vector2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector2> first, Span<Vector2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2>)second);\n        }\n\n        public static bool SequenceEqual(this List<Vector2> first, ReadOnlySpan<Vector2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (Vector2* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<Vector2> first, Memory<Vector2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2>)first.Span, (ReadOnlySpan<Vector2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<Vector2> first, ReadOnlyMemory<Vector2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<Vector2> first, ReadOnlyMemory<Vector2> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<Vector2> first, Span<Vector2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2>)first, (ReadOnlySpan<Vector2>)second);\n        }\n\n        public static bool SequenceEqual(this Span<Vector2> first, ReadOnlySpan<Vector2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<Vector2> first, ReadOnlySpan<Vector2> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this Vector2Int[] first, Vector2Int[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector2Int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector2Int[] first, List<Vector2Int> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector2Int* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector2Int[] first, Memory<Vector2Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2Int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector2Int[] first, ReadOnlyMemory<Vector2Int> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector2Int[] first, Span<Vector2Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2Int>)second);\n        }\n\n        public static bool SequenceEqual(this Vector2Int[] first, ReadOnlySpan<Vector2Int> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector2Int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector2Int> first, Vector2Int[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<Vector2Int> first, List<Vector2Int> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector2Int* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector2Int> first, Memory<Vector2Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2Int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector2Int> first, ReadOnlyMemory<Vector2Int> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector2Int> first, Span<Vector2Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector2Int>)second);\n        }\n\n        public static bool SequenceEqual(this List<Vector2Int> first, ReadOnlySpan<Vector2Int> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (Vector2Int* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<Vector2Int> first, Memory<Vector2Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2Int>)first.Span, (ReadOnlySpan<Vector2Int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<Vector2Int> first, ReadOnlyMemory<Vector2Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2Int>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<Vector2Int> first, ReadOnlyMemory<Vector2Int> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<Vector2Int> first, Span<Vector2Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2Int>)first, (ReadOnlySpan<Vector2Int>)second);\n        }\n\n        public static bool SequenceEqual(this Span<Vector2Int> first, ReadOnlySpan<Vector2Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector2Int>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<Vector2Int> first, ReadOnlySpan<Vector2Int> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector2Int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this Vector3[] first, Vector3[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector3[] first, List<Vector3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector3* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector3[] first, Memory<Vector3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector3[] first, ReadOnlyMemory<Vector3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector3[] first, Span<Vector3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3>)second);\n        }\n\n        public static bool SequenceEqual(this Vector3[] first, ReadOnlySpan<Vector3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector3> first, Vector3[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<Vector3> first, List<Vector3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector3* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector3> first, Memory<Vector3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector3> first, ReadOnlyMemory<Vector3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector3> first, Span<Vector3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3>)second);\n        }\n\n        public static bool SequenceEqual(this List<Vector3> first, ReadOnlySpan<Vector3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (Vector3* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<Vector3> first, Memory<Vector3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3>)first.Span, (ReadOnlySpan<Vector3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<Vector3> first, ReadOnlyMemory<Vector3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<Vector3> first, ReadOnlyMemory<Vector3> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<Vector3> first, Span<Vector3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3>)first, (ReadOnlySpan<Vector3>)second);\n        }\n\n        public static bool SequenceEqual(this Span<Vector3> first, ReadOnlySpan<Vector3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<Vector3> first, ReadOnlySpan<Vector3> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this Vector3Int[] first, Vector3Int[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector3Int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector3Int[] first, List<Vector3Int> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector3Int* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector3Int[] first, Memory<Vector3Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3Int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector3Int[] first, ReadOnlyMemory<Vector3Int> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector3Int[] first, Span<Vector3Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3Int>)second);\n        }\n\n        public static bool SequenceEqual(this Vector3Int[] first, ReadOnlySpan<Vector3Int> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector3Int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector3Int> first, Vector3Int[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<Vector3Int> first, List<Vector3Int> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector3Int* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector3Int> first, Memory<Vector3Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3Int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector3Int> first, ReadOnlyMemory<Vector3Int> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector3Int> first, Span<Vector3Int> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector3Int>)second);\n        }\n\n        public static bool SequenceEqual(this List<Vector3Int> first, ReadOnlySpan<Vector3Int> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (Vector3Int* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<Vector3Int> first, Memory<Vector3Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3Int>)first.Span, (ReadOnlySpan<Vector3Int>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<Vector3Int> first, ReadOnlyMemory<Vector3Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3Int>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<Vector3Int> first, ReadOnlyMemory<Vector3Int> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<Vector3Int> first, Span<Vector3Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3Int>)first, (ReadOnlySpan<Vector3Int>)second);\n        }\n\n        public static bool SequenceEqual(this Span<Vector3Int> first, ReadOnlySpan<Vector3Int> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector3Int>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<Vector3Int> first, ReadOnlySpan<Vector3Int> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector3Int* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this Vector4[] first, Vector4[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector4[] first, List<Vector4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector4* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this Vector4[] first, Memory<Vector4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector4[] first, ReadOnlyMemory<Vector4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this Vector4[] first, Span<Vector4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector4>)second);\n        }\n\n        public static bool SequenceEqual(this Vector4[] first, ReadOnlySpan<Vector4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector4> first, Vector4[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<Vector4> first, List<Vector4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (Vector4* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<Vector4> first, Memory<Vector4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector4> first, ReadOnlyMemory<Vector4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<Vector4> first, Span<Vector4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<Vector4>)second);\n        }\n\n        public static bool SequenceEqual(this List<Vector4> first, ReadOnlySpan<Vector4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (Vector4* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<Vector4> first, Memory<Vector4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector4>)first.Span, (ReadOnlySpan<Vector4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<Vector4> first, ReadOnlyMemory<Vector4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector4>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<Vector4> first, ReadOnlyMemory<Vector4> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<Vector4> first, Span<Vector4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector4>)first, (ReadOnlySpan<Vector4>)second);\n        }\n\n        public static bool SequenceEqual(this Span<Vector4> first, ReadOnlySpan<Vector4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<Vector4>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<Vector4> first, ReadOnlySpan<Vector4> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (Vector4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this int2[] first, int2[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (int2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int2[] first, List<int2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int2* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int2[] first, Memory<int2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this int2[] first, ReadOnlyMemory<int2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this int2[] first, Span<int2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int2>)second);\n        }\n\n        public static bool SequenceEqual(this int2[] first, ReadOnlySpan<int2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (int2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int2> first, int2[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<int2> first, List<int2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int2* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int2> first, Memory<int2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int2> first, ReadOnlyMemory<int2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int2> first, Span<int2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int2>)second);\n        }\n\n        public static bool SequenceEqual(this List<int2> first, ReadOnlySpan<int2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (int2* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<int2> first, Memory<int2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int2>)first.Span, (ReadOnlySpan<int2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<int2> first, ReadOnlyMemory<int2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int2>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<int2> first, ReadOnlyMemory<int2> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<int2> first, Span<int2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int2>)first, (ReadOnlySpan<int2>)second);\n        }\n\n        public static bool SequenceEqual(this Span<int2> first, ReadOnlySpan<int2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int2>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<int2> first, ReadOnlySpan<int2> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (int2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this int3[] first, int3[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (int3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int3[] first, List<int3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int3* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int3[] first, Memory<int3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this int3[] first, ReadOnlyMemory<int3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this int3[] first, Span<int3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int3>)second);\n        }\n\n        public static bool SequenceEqual(this int3[] first, ReadOnlySpan<int3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (int3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int3> first, int3[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<int3> first, List<int3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int3* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int3> first, Memory<int3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int3> first, ReadOnlyMemory<int3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int3> first, Span<int3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int3>)second);\n        }\n\n        public static bool SequenceEqual(this List<int3> first, ReadOnlySpan<int3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (int3* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<int3> first, Memory<int3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int3>)first.Span, (ReadOnlySpan<int3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<int3> first, ReadOnlyMemory<int3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int3>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<int3> first, ReadOnlyMemory<int3> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<int3> first, Span<int3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int3>)first, (ReadOnlySpan<int3>)second);\n        }\n\n        public static bool SequenceEqual(this Span<int3> first, ReadOnlySpan<int3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int3>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<int3> first, ReadOnlySpan<int3> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (int3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this int4[] first, int4[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (int4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int4[] first, List<int4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int4* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this int4[] first, Memory<int4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this int4[] first, ReadOnlyMemory<int4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this int4[] first, Span<int4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int4>)second);\n        }\n\n        public static bool SequenceEqual(this int4[] first, ReadOnlySpan<int4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (int4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int4> first, int4[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<int4> first, List<int4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (int4* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<int4> first, Memory<int4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int4> first, ReadOnlyMemory<int4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<int4> first, Span<int4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<int4>)second);\n        }\n\n        public static bool SequenceEqual(this List<int4> first, ReadOnlySpan<int4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (int4* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<int4> first, Memory<int4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int4>)first.Span, (ReadOnlySpan<int4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<int4> first, ReadOnlyMemory<int4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int4>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<int4> first, ReadOnlyMemory<int4> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<int4> first, Span<int4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int4>)first, (ReadOnlySpan<int4>)second);\n        }\n\n        public static bool SequenceEqual(this Span<int4> first, ReadOnlySpan<int4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<int4>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<int4> first, ReadOnlySpan<int4> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (int4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this uint2[] first, uint2[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (uint2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint2[] first, List<uint2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint2* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint2[] first, Memory<uint2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this uint2[] first, ReadOnlyMemory<uint2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this uint2[] first, Span<uint2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint2>)second);\n        }\n\n        public static bool SequenceEqual(this uint2[] first, ReadOnlySpan<uint2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (uint2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint2> first, uint2[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<uint2> first, List<uint2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint2* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint2> first, Memory<uint2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint2> first, ReadOnlyMemory<uint2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint2> first, Span<uint2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint2>)second);\n        }\n\n        public static bool SequenceEqual(this List<uint2> first, ReadOnlySpan<uint2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (uint2* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<uint2> first, Memory<uint2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint2>)first.Span, (ReadOnlySpan<uint2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<uint2> first, ReadOnlyMemory<uint2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint2>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<uint2> first, ReadOnlyMemory<uint2> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<uint2> first, Span<uint2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint2>)first, (ReadOnlySpan<uint2>)second);\n        }\n\n        public static bool SequenceEqual(this Span<uint2> first, ReadOnlySpan<uint2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint2>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<uint2> first, ReadOnlySpan<uint2> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (uint2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this uint3[] first, uint3[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (uint3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint3[] first, List<uint3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint3* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint3[] first, Memory<uint3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this uint3[] first, ReadOnlyMemory<uint3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this uint3[] first, Span<uint3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint3>)second);\n        }\n\n        public static bool SequenceEqual(this uint3[] first, ReadOnlySpan<uint3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (uint3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint3> first, uint3[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<uint3> first, List<uint3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint3* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint3> first, Memory<uint3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint3> first, ReadOnlyMemory<uint3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint3> first, Span<uint3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint3>)second);\n        }\n\n        public static bool SequenceEqual(this List<uint3> first, ReadOnlySpan<uint3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (uint3* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<uint3> first, Memory<uint3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint3>)first.Span, (ReadOnlySpan<uint3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<uint3> first, ReadOnlyMemory<uint3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint3>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<uint3> first, ReadOnlyMemory<uint3> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<uint3> first, Span<uint3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint3>)first, (ReadOnlySpan<uint3>)second);\n        }\n\n        public static bool SequenceEqual(this Span<uint3> first, ReadOnlySpan<uint3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint3>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<uint3> first, ReadOnlySpan<uint3> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (uint3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this uint4[] first, uint4[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (uint4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint4[] first, List<uint4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint4* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this uint4[] first, Memory<uint4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this uint4[] first, ReadOnlyMemory<uint4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this uint4[] first, Span<uint4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint4>)second);\n        }\n\n        public static bool SequenceEqual(this uint4[] first, ReadOnlySpan<uint4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (uint4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint4> first, uint4[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<uint4> first, List<uint4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (uint4* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<uint4> first, Memory<uint4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint4> first, ReadOnlyMemory<uint4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<uint4> first, Span<uint4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<uint4>)second);\n        }\n\n        public static bool SequenceEqual(this List<uint4> first, ReadOnlySpan<uint4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (uint4* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<uint4> first, Memory<uint4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint4>)first.Span, (ReadOnlySpan<uint4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<uint4> first, ReadOnlyMemory<uint4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint4>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<uint4> first, ReadOnlyMemory<uint4> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<uint4> first, Span<uint4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint4>)first, (ReadOnlySpan<uint4>)second);\n        }\n\n        public static bool SequenceEqual(this Span<uint4> first, ReadOnlySpan<uint4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<uint4>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<uint4> first, ReadOnlySpan<uint4> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (uint4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this float2[] first, float2[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (float2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float2[] first, List<float2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float2* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float2[] first, Memory<float2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this float2[] first, ReadOnlyMemory<float2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this float2[] first, Span<float2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float2>)second);\n        }\n\n        public static bool SequenceEqual(this float2[] first, ReadOnlySpan<float2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (float2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float2> first, float2[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<float2> first, List<float2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float2* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float2> first, Memory<float2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float2> first, ReadOnlyMemory<float2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float2> first, Span<float2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float2>)second);\n        }\n\n        public static bool SequenceEqual(this List<float2> first, ReadOnlySpan<float2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (float2* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<float2> first, Memory<float2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float2>)first.Span, (ReadOnlySpan<float2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<float2> first, ReadOnlyMemory<float2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float2>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<float2> first, ReadOnlyMemory<float2> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<float2> first, Span<float2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float2>)first, (ReadOnlySpan<float2>)second);\n        }\n\n        public static bool SequenceEqual(this Span<float2> first, ReadOnlySpan<float2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float2>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<float2> first, ReadOnlySpan<float2> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (float2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this float3[] first, float3[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (float3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float3[] first, List<float3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float3* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float3[] first, Memory<float3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this float3[] first, ReadOnlyMemory<float3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this float3[] first, Span<float3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float3>)second);\n        }\n\n        public static bool SequenceEqual(this float3[] first, ReadOnlySpan<float3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (float3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float3> first, float3[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<float3> first, List<float3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float3* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float3> first, Memory<float3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float3> first, ReadOnlyMemory<float3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float3> first, Span<float3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float3>)second);\n        }\n\n        public static bool SequenceEqual(this List<float3> first, ReadOnlySpan<float3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (float3* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<float3> first, Memory<float3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float3>)first.Span, (ReadOnlySpan<float3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<float3> first, ReadOnlyMemory<float3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float3>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<float3> first, ReadOnlyMemory<float3> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<float3> first, Span<float3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float3>)first, (ReadOnlySpan<float3>)second);\n        }\n\n        public static bool SequenceEqual(this Span<float3> first, ReadOnlySpan<float3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float3>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<float3> first, ReadOnlySpan<float3> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (float3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this float4[] first, float4[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (float4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float4[] first, List<float4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float4* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this float4[] first, Memory<float4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this float4[] first, ReadOnlyMemory<float4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this float4[] first, Span<float4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float4>)second);\n        }\n\n        public static bool SequenceEqual(this float4[] first, ReadOnlySpan<float4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (float4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float4> first, float4[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<float4> first, List<float4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (float4* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<float4> first, Memory<float4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float4> first, ReadOnlyMemory<float4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<float4> first, Span<float4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<float4>)second);\n        }\n\n        public static bool SequenceEqual(this List<float4> first, ReadOnlySpan<float4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (float4* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<float4> first, Memory<float4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float4>)first.Span, (ReadOnlySpan<float4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<float4> first, ReadOnlyMemory<float4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float4>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<float4> first, ReadOnlyMemory<float4> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<float4> first, Span<float4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float4>)first, (ReadOnlySpan<float4>)second);\n        }\n\n        public static bool SequenceEqual(this Span<float4> first, ReadOnlySpan<float4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<float4>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<float4> first, ReadOnlySpan<float4> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (float4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this double2[] first, double2[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (double2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double2[] first, List<double2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double2* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double2[] first, Memory<double2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this double2[] first, ReadOnlyMemory<double2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this double2[] first, Span<double2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double2>)second);\n        }\n\n        public static bool SequenceEqual(this double2[] first, ReadOnlySpan<double2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (double2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double2> first, double2[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<double2> first, List<double2> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double2* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double2> first, Memory<double2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double2> first, ReadOnlyMemory<double2> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double2> first, Span<double2> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double2>)second);\n        }\n\n        public static bool SequenceEqual(this List<double2> first, ReadOnlySpan<double2> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (double2* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<double2> first, Memory<double2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double2>)first.Span, (ReadOnlySpan<double2>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<double2> first, ReadOnlyMemory<double2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double2>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<double2> first, ReadOnlyMemory<double2> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<double2> first, Span<double2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double2>)first, (ReadOnlySpan<double2>)second);\n        }\n\n        public static bool SequenceEqual(this Span<double2> first, ReadOnlySpan<double2> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double2>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<double2> first, ReadOnlySpan<double2> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (double2* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this double3[] first, double3[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (double3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double3[] first, List<double3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double3* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double3[] first, Memory<double3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this double3[] first, ReadOnlyMemory<double3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this double3[] first, Span<double3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double3>)second);\n        }\n\n        public static bool SequenceEqual(this double3[] first, ReadOnlySpan<double3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (double3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double3> first, double3[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<double3> first, List<double3> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double3* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double3> first, Memory<double3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double3> first, ReadOnlyMemory<double3> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double3> first, Span<double3> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double3>)second);\n        }\n\n        public static bool SequenceEqual(this List<double3> first, ReadOnlySpan<double3> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (double3* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<double3> first, Memory<double3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double3>)first.Span, (ReadOnlySpan<double3>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<double3> first, ReadOnlyMemory<double3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double3>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<double3> first, ReadOnlyMemory<double3> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<double3> first, Span<double3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double3>)first, (ReadOnlySpan<double3>)second);\n        }\n\n        public static bool SequenceEqual(this Span<double3> first, ReadOnlySpan<double3> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double3>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<double3> first, ReadOnlySpan<double3> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (double3* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n        public static bool SequenceEqual(this double4[] first, double4[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (double4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double4[] first, List<double4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double4* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this double4[] first, Memory<double4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this double4[] first, ReadOnlyMemory<double4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this double4[] first, Span<double4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double4>)second);\n        }\n\n        public static bool SequenceEqual(this double4[] first, ReadOnlySpan<double4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (double4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double4> first, double4[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<double4> first, List<double4> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n\n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (double4* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<double4> first, Memory<double4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double4> first, ReadOnlyMemory<double4> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<double4> first, Span<double4> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<double4>)second);\n        }\n\n        public static bool SequenceEqual(this List<double4> first, ReadOnlySpan<double4> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (double4* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<double4> first, Memory<double4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double4>)first.Span, (ReadOnlySpan<double4>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<double4> first, ReadOnlyMemory<double4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double4>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<double4> first, ReadOnlyMemory<double4> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<double4> first, Span<double4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double4>)first, (ReadOnlySpan<double4>)second);\n        }\n\n        public static bool SequenceEqual(this Span<double4> first, ReadOnlySpan<double4> second)\n        {\n            return SequenceEqual((ReadOnlySpan<double4>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<double4> first, ReadOnlySpan<double4> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (double4* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.SequenceEqual.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 688ab54d59cb2489b83bc2571ea87c9e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.SequenceEqual.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n#>\nusing System;\nusing System.Collections.Generic;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static bool SequenceEqual(this <#=type#>[] first, <#=type#>[] second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n            \n            if (first == second) return true;\n            if (first.Length != second.Length) return false;\n\n            fixed (<#=type#>* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this <#=type#>[] first, List<<#=type#>> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n            \n            if (first.Length != second.Count) return false;\n\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (<#=type#>* firstPtr = first, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this <#=type#>[] first, Memory<<#=type#>> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<<#=type#>>)second.Span);\n        }\n\n        public static bool SequenceEqual(this <#=type#>[] first, ReadOnlyMemory<<#=type#>> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this <#=type#>[] first, Span<<#=type#>> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<<#=type#>>)second);\n        }\n\n        public static bool SequenceEqual(this <#=type#>[] first, ReadOnlySpan<<#=type#>> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Length != second.Length) return false;\n\n            fixed (<#=type#>* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n\n        public static bool SequenceEqual(this List<<#=type#>> first, <#=type#>[] second)\n        {\n            return SequenceEqual(second, first);\n        }\n\n        public static bool SequenceEqual(this List<<#=type#>> first, List<<#=type#>> second)\n        {\n            Error.ThrowIfNull(first);\n            Error.ThrowIfNull(second);\n            \n            if (first == second) return true;\n            if (first.Count != second.Count) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            var secondSpan = SpanHelper.AsSpan(second);\n            fixed (<#=type#>* firstPtr = firstSpan, secondPtr = secondSpan)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this List<<#=type#>> first, Memory<<#=type#>> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<<#=type#>>)second.Span);\n        }\n\n        public static bool SequenceEqual(this List<<#=type#>> first, ReadOnlyMemory<<#=type#>> second)\n        {\n            return SequenceEqual(first, second.Span);\n        }\n\n        public static bool SequenceEqual(this List<<#=type#>> first, Span<<#=type#>> second)\n        {\n            return SequenceEqual(first, (ReadOnlySpan<<#=type#>>)second);\n        }\n\n        public static bool SequenceEqual(this List<<#=type#>> first, ReadOnlySpan<<#=type#>> second)\n        {\n            Error.ThrowIfNull(first);\n\n            if (first.Count != second.Length) return false;\n\n            var firstSpan = SpanHelper.AsSpan(first);\n            fixed (<#=type#>* firstPtr = firstSpan, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Count);\n            }\n        }\n\n        public static bool SequenceEqual(this Memory<<#=type#>> first, Memory<<#=type#>> second)\n        {\n            return SequenceEqual((ReadOnlySpan<<#=type#>>)first.Span, (ReadOnlySpan<<#=type#>>)second.Span);\n        }\n\n        public static bool SequenceEqual(this Memory<<#=type#>> first, ReadOnlyMemory<<#=type#>> second)\n        {\n            return SequenceEqual((ReadOnlySpan<<#=type#>>)first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this ReadOnlyMemory<<#=type#>> first, ReadOnlyMemory<<#=type#>> second)\n        {\n            return SequenceEqual(first.Span, second.Span);\n        }\n\n        public static bool SequenceEqual(this Span<<#=type#>> first, Span<<#=type#>> second)\n        {\n            return SequenceEqual((ReadOnlySpan<<#=type#>>)first, (ReadOnlySpan<<#=type#>>)second);\n        }\n\n        public static bool SequenceEqual(this Span<<#=type#>> first, ReadOnlySpan<<#=type#>> second)\n        {\n            return SequenceEqual((ReadOnlySpan<<#=type#>>)first, second);\n        }\n\n        public static bool SequenceEqual(this ReadOnlySpan<<#=type#>> first, ReadOnlySpan<<#=type#>> second)\n        {\n            if (first.Length != second.Length) return false;\n\n            fixed (<#=type#>* firstPtr = first, secondPtr = second)\n            {\n                return SequenceEqualCore(firstPtr, secondPtr, first.Length);\n            }\n        }\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.SequenceEqual.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 46ad07dd69d15432eadcd6ca697f2a5b\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Sum.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n        public static int Sum(this int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (int* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static int Sum(this List<int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static int Sum(this Memory<int> source)\n        {\n            return Sum((ReadOnlySpan<int>)source.Span);\n        }\n\n        public static int Sum(this ReadOnlyMemory<int> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static int Sum(this Span<int> source)\n        {\n            return Sum((ReadOnlySpan<int>)source);\n        }\n\n        public static int Sum(this ReadOnlySpan<int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (int* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static uint Sum(this uint[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (uint* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static uint Sum(this List<uint> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static uint Sum(this Memory<uint> source)\n        {\n            return Sum((ReadOnlySpan<uint>)source.Span);\n        }\n\n        public static uint Sum(this ReadOnlyMemory<uint> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static uint Sum(this Span<uint> source)\n        {\n            return Sum((ReadOnlySpan<uint>)source);\n        }\n\n        public static uint Sum(this ReadOnlySpan<uint> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (uint* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static long Sum(this long[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (long* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static long Sum(this List<long> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (long* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static long Sum(this Memory<long> source)\n        {\n            return Sum((ReadOnlySpan<long>)source.Span);\n        }\n\n        public static long Sum(this ReadOnlyMemory<long> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static long Sum(this Span<long> source)\n        {\n            return Sum((ReadOnlySpan<long>)source);\n        }\n\n        public static long Sum(this ReadOnlySpan<long> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (long* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static ulong Sum(this ulong[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (ulong* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static ulong Sum(this List<ulong> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (ulong* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static ulong Sum(this Memory<ulong> source)\n        {\n            return Sum((ReadOnlySpan<ulong>)source.Span);\n        }\n\n        public static ulong Sum(this ReadOnlyMemory<ulong> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static ulong Sum(this Span<ulong> source)\n        {\n            return Sum((ReadOnlySpan<ulong>)source);\n        }\n\n        public static ulong Sum(this ReadOnlySpan<ulong> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (ulong* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float Sum(this float[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (float* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float Sum(this List<float> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float Sum(this Memory<float> source)\n        {\n            return Sum((ReadOnlySpan<float>)source.Span);\n        }\n\n        public static float Sum(this ReadOnlyMemory<float> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static float Sum(this Span<float> source)\n        {\n            return Sum((ReadOnlySpan<float>)source);\n        }\n\n        public static float Sum(this ReadOnlySpan<float> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (float* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double Sum(this double[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (double* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double Sum(this List<double> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double Sum(this Memory<double> source)\n        {\n            return Sum((ReadOnlySpan<double>)source.Span);\n        }\n\n        public static double Sum(this ReadOnlyMemory<double> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static double Sum(this Span<double> source)\n        {\n            return Sum((ReadOnlySpan<double>)source);\n        }\n\n        public static double Sum(this ReadOnlySpan<double> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (double* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector2 Sum(this Vector2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (Vector2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2 Sum(this List<Vector2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector2* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2 Sum(this Memory<Vector2> source)\n        {\n            return Sum((ReadOnlySpan<Vector2>)source.Span);\n        }\n\n        public static Vector2 Sum(this ReadOnlyMemory<Vector2> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static Vector2 Sum(this Span<Vector2> source)\n        {\n            return Sum((ReadOnlySpan<Vector2>)source);\n        }\n\n        public static Vector2 Sum(this ReadOnlySpan<Vector2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (Vector2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector2Int Sum(this Vector2Int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (Vector2Int* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2Int Sum(this List<Vector2Int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector2Int* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector2Int Sum(this Memory<Vector2Int> source)\n        {\n            return Sum((ReadOnlySpan<Vector2Int>)source.Span);\n        }\n\n        public static Vector2Int Sum(this ReadOnlyMemory<Vector2Int> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static Vector2Int Sum(this Span<Vector2Int> source)\n        {\n            return Sum((ReadOnlySpan<Vector2Int>)source);\n        }\n\n        public static Vector2Int Sum(this ReadOnlySpan<Vector2Int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (Vector2Int* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector3 Sum(this Vector3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (Vector3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3 Sum(this List<Vector3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector3* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3 Sum(this Memory<Vector3> source)\n        {\n            return Sum((ReadOnlySpan<Vector3>)source.Span);\n        }\n\n        public static Vector3 Sum(this ReadOnlyMemory<Vector3> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static Vector3 Sum(this Span<Vector3> source)\n        {\n            return Sum((ReadOnlySpan<Vector3>)source);\n        }\n\n        public static Vector3 Sum(this ReadOnlySpan<Vector3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (Vector3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector3Int Sum(this Vector3Int[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (Vector3Int* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3Int Sum(this List<Vector3Int> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector3Int* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector3Int Sum(this Memory<Vector3Int> source)\n        {\n            return Sum((ReadOnlySpan<Vector3Int>)source.Span);\n        }\n\n        public static Vector3Int Sum(this ReadOnlyMemory<Vector3Int> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static Vector3Int Sum(this Span<Vector3Int> source)\n        {\n            return Sum((ReadOnlySpan<Vector3Int>)source);\n        }\n\n        public static Vector3Int Sum(this ReadOnlySpan<Vector3Int> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (Vector3Int* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static Vector4 Sum(this Vector4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (Vector4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static Vector4 Sum(this List<Vector4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (Vector4* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static Vector4 Sum(this Memory<Vector4> source)\n        {\n            return Sum((ReadOnlySpan<Vector4>)source.Span);\n        }\n\n        public static Vector4 Sum(this ReadOnlyMemory<Vector4> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static Vector4 Sum(this Span<Vector4> source)\n        {\n            return Sum((ReadOnlySpan<Vector4>)source);\n        }\n\n        public static Vector4 Sum(this ReadOnlySpan<Vector4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (Vector4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static int2 Sum(this int2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (int2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static int2 Sum(this List<int2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int2* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static int2 Sum(this Memory<int2> source)\n        {\n            return Sum((ReadOnlySpan<int2>)source.Span);\n        }\n\n        public static int2 Sum(this ReadOnlyMemory<int2> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static int2 Sum(this Span<int2> source)\n        {\n            return Sum((ReadOnlySpan<int2>)source);\n        }\n\n        public static int2 Sum(this ReadOnlySpan<int2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (int2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static int3 Sum(this int3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (int3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static int3 Sum(this List<int3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int3* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static int3 Sum(this Memory<int3> source)\n        {\n            return Sum((ReadOnlySpan<int3>)source.Span);\n        }\n\n        public static int3 Sum(this ReadOnlyMemory<int3> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static int3 Sum(this Span<int3> source)\n        {\n            return Sum((ReadOnlySpan<int3>)source);\n        }\n\n        public static int3 Sum(this ReadOnlySpan<int3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (int3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static int4 Sum(this int4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (int4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static int4 Sum(this List<int4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (int4* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static int4 Sum(this Memory<int4> source)\n        {\n            return Sum((ReadOnlySpan<int4>)source.Span);\n        }\n\n        public static int4 Sum(this ReadOnlyMemory<int4> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static int4 Sum(this Span<int4> source)\n        {\n            return Sum((ReadOnlySpan<int4>)source);\n        }\n\n        public static int4 Sum(this ReadOnlySpan<int4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (int4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static uint2 Sum(this uint2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (uint2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static uint2 Sum(this List<uint2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint2* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static uint2 Sum(this Memory<uint2> source)\n        {\n            return Sum((ReadOnlySpan<uint2>)source.Span);\n        }\n\n        public static uint2 Sum(this ReadOnlyMemory<uint2> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static uint2 Sum(this Span<uint2> source)\n        {\n            return Sum((ReadOnlySpan<uint2>)source);\n        }\n\n        public static uint2 Sum(this ReadOnlySpan<uint2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (uint2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static uint3 Sum(this uint3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (uint3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static uint3 Sum(this List<uint3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint3* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static uint3 Sum(this Memory<uint3> source)\n        {\n            return Sum((ReadOnlySpan<uint3>)source.Span);\n        }\n\n        public static uint3 Sum(this ReadOnlyMemory<uint3> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static uint3 Sum(this Span<uint3> source)\n        {\n            return Sum((ReadOnlySpan<uint3>)source);\n        }\n\n        public static uint3 Sum(this ReadOnlySpan<uint3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (uint3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static uint4 Sum(this uint4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (uint4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static uint4 Sum(this List<uint4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (uint4* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static uint4 Sum(this Memory<uint4> source)\n        {\n            return Sum((ReadOnlySpan<uint4>)source.Span);\n        }\n\n        public static uint4 Sum(this ReadOnlyMemory<uint4> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static uint4 Sum(this Span<uint4> source)\n        {\n            return Sum((ReadOnlySpan<uint4>)source);\n        }\n\n        public static uint4 Sum(this ReadOnlySpan<uint4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (uint4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float2 Sum(this float2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (float2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float2 Sum(this List<float2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float2* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float2 Sum(this Memory<float2> source)\n        {\n            return Sum((ReadOnlySpan<float2>)source.Span);\n        }\n\n        public static float2 Sum(this ReadOnlyMemory<float2> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static float2 Sum(this Span<float2> source)\n        {\n            return Sum((ReadOnlySpan<float2>)source);\n        }\n\n        public static float2 Sum(this ReadOnlySpan<float2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (float2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float3 Sum(this float3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (float3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float3 Sum(this List<float3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float3* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float3 Sum(this Memory<float3> source)\n        {\n            return Sum((ReadOnlySpan<float3>)source.Span);\n        }\n\n        public static float3 Sum(this ReadOnlyMemory<float3> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static float3 Sum(this Span<float3> source)\n        {\n            return Sum((ReadOnlySpan<float3>)source);\n        }\n\n        public static float3 Sum(this ReadOnlySpan<float3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (float3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static float4 Sum(this float4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (float4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static float4 Sum(this List<float4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (float4* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static float4 Sum(this Memory<float4> source)\n        {\n            return Sum((ReadOnlySpan<float4>)source.Span);\n        }\n\n        public static float4 Sum(this ReadOnlyMemory<float4> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static float4 Sum(this Span<float4> source)\n        {\n            return Sum((ReadOnlySpan<float4>)source);\n        }\n\n        public static float4 Sum(this ReadOnlySpan<float4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (float4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double2 Sum(this double2[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (double2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double2 Sum(this List<double2> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double2* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double2 Sum(this Memory<double2> source)\n        {\n            return Sum((ReadOnlySpan<double2>)source.Span);\n        }\n\n        public static double2 Sum(this ReadOnlyMemory<double2> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static double2 Sum(this Span<double2> source)\n        {\n            return Sum((ReadOnlySpan<double2>)source);\n        }\n\n        public static double2 Sum(this ReadOnlySpan<double2> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (double2* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double3 Sum(this double3[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (double3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double3 Sum(this List<double3> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double3* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double3 Sum(this Memory<double3> source)\n        {\n            return Sum((ReadOnlySpan<double3>)source.Span);\n        }\n\n        public static double3 Sum(this ReadOnlyMemory<double3> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static double3 Sum(this Span<double3> source)\n        {\n            return Sum((ReadOnlySpan<double3>)source);\n        }\n\n        public static double3 Sum(this ReadOnlySpan<double3> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (double3* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n        public static double4 Sum(this double4[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (double4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static double4 Sum(this List<double4> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (double4* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static double4 Sum(this Memory<double4> source)\n        {\n            return Sum((ReadOnlySpan<double4>)source.Span);\n        }\n\n        public static double4 Sum(this ReadOnlyMemory<double4> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static double4 Sum(this Span<double4> source)\n        {\n            return Sum((ReadOnlySpan<double4>)source);\n        }\n\n        public static double4 Sum(this ReadOnlySpan<double4> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (double4* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Sum.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 0f6fa0c26972249c2a78d5cc0d4336fe\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Sum.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    var types = new string[]\n    {\n        \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n#>\nusing System;\nusing System.Collections.Generic;\nusing Unity.Mathematics;\nusing UnityEngine;\n\nnamespace BurstLinq\n{\n    public unsafe static partial class BurstLinqExtensions\n    {\n<# foreach(var type in types) { #>\n        public static <#=type#> Sum(this <#=type#>[] source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Length);\n            fixed (<#=type#>* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n\n        public static <#=type#> Sum(this List<<#=type#>> source)\n        {\n            Error.ThrowIfNull(source);\n            Error.ThrowIfEmpty(source.Count);\n\n            var span = SpanHelper.AsSpan(source);\n            fixed (<#=type#>* ptr = span)\n            {\n                SumCore(ptr, source.Count, out var result);\n                return result;\n            }\n        }\n\n        public static <#=type#> Sum(this Memory<<#=type#>> source)\n        {\n            return Sum((ReadOnlySpan<<#=type#>>)source.Span);\n        }\n\n        public static <#=type#> Sum(this ReadOnlyMemory<<#=type#>> source)\n        {\n            return Sum(source.Span);\n        }\n\n        public static <#=type#> Sum(this Span<<#=type#>> source)\n        {\n            return Sum((ReadOnlySpan<<#=type#>>)source);\n        }\n\n        public static <#=type#> Sum(this ReadOnlySpan<<#=type#>> source)\n        {\n            Error.ThrowIfEmpty(source.IsEmpty);\n            fixed (<#=type#>* ptr = source)\n            {\n                SumCore(ptr, source.Length, out var result);\n                return result;\n            }\n        }\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.Sum.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 740008369ba8d4a3381adaa087070605\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.cs",
    "content": "using Unity.Burst;\n\nnamespace BurstLinq\n{\n    [BurstCompile(OptimizeFor = OptimizeFor.Performance)]\n    public static partial class BurstLinqExtensions\n    {\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/BurstLinqExtensions.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 66be7336c90984baaab6a9756a847e1a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/CmpHelpers.cs",
    "content": "﻿using Unity.Burst;\nusing Unity.Burst.CompilerServices;\nusing Unity.Burst.Intrinsics;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\n\nnamespace BurstLinq\n{\n    [BurstCompile]\n    internal static unsafe class CmpHelpers\n    {\n        [BurstCompile]\n        public static bool MemCmp(void* ptr1, void* ptr2, long size)\n        {\n            return UnsafeUtility.MemCmp(ptr1, ptr2, size) == 0;\n        }\n\n        [BurstCompile]\n        public static bool FloatCmp(float* ptr1, float* ptr2, [AssumeRange(1, long.MaxValue)] long length)\n        {\n            long index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                static bool8 _equals256(v256 a, v256 b)\n                {\n                    return new bool8(\n                        a.Float0 == b.Float0,\n                        a.Float1 == b.Float1,\n                        a.Float2 == b.Float2,\n                        a.Float3 == b.Float3,\n                        a.Float4 == b.Float4,\n                        a.Float5 == b.Float5,\n                        a.Float6 == b.Float6,\n                        a.Float7 == b.Float7\n                    );\n                }\n\n                var packingLength = sizeof(v256) / sizeof(float);\n\n                for (; index < length - packingLength; index += packingLength)\n                {\n                    if (!_equals256(*(v256*)(ptr1 + index), *(v256*)(ptr2 + index)).all())\n                        return false;\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                var packingLength = sizeof(v128) / sizeof(float);\n\n                for (; index < length - packingLength; index += packingLength)\n                {\n                    if (math.any(*(float4*)(ptr1 + index) != *(float4*)(ptr2 + index))) return false;\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr1[index] != ptr2[index]) return false;\n            }\n\n            return true;\n        }\n\n        [BurstCompile]\n        public static bool DoubleCmp(double* ptr1, double* ptr2, [AssumeRange(1, long.MaxValue)] long length)\n        {\n            long index = 0;\n            if (BurstHelpers.IsV256Supported)\n            {\n                var packingLength = sizeof(v256) / sizeof(double);\n\n                for (; index < length - packingLength; index += packingLength)\n                {\n                    if (math.any(*(double4*)(ptr1 + index) != *(double4*)(ptr2 + index))) return false;\n                }\n            }\n            else if (BurstHelpers.IsV128Supported)\n            {\n                var packingLength = sizeof(v128) / sizeof(double);\n\n                for (; index < length - packingLength; index += packingLength)\n                {\n                    if (math.any(*(double2*)(ptr1 + index) != *(double2*)(ptr2 + index))) return false;\n                }\n            }\n\n            for (; index < length; index++)\n            {\n                if (ptr1[index] != ptr2[index]) return false;\n            }\n            return true;\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/CmpHelpers.cs.meta",
    "content": "fileFormatVersion: 2\nguid: e727f3cb65621412f8927f011e760a82\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/Error.cs",
    "content": "using System;\nusing System.Runtime.CompilerServices;\n\nnamespace BurstLinq\n{\n    internal static class Error\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static void ThrowIfNull<T>(T obj)\n        {\n            if (obj == null) throw new ArgumentNullException();\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static void ThrowIfEmpty(int length)\n        {\n            if (length <= 0) throw new InvalidOperationException(\"Sequence contains no elements\");\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static void ThrowIfEmpty(bool isEmpty)\n        {\n            if (isEmpty) throw new InvalidOperationException(\"Sequence contains no elements\");\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/Error.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 947a1f13c914d44aebc6da923dd1c657\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/SpanHelper.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing Unity.Burst;\nusing Unity.Collections;\nusing Unity.Collections.LowLevel.Unsafe;\n\nnamespace BurstLinq\n{\n    // Class for extracting the contents of List with UnsafeUtility.As\n    internal sealed class ListView<T>\n    {\n        public T[] _items;\n    }\n\n    [BurstCompile]\n    internal static class SpanHelper\n    {\n        [BurstCompile]\n        public static unsafe void CopyFrom<T>(in NativeArray<T> array, in ReadOnlySpan<T> source)\n            where T : unmanaged\n        {\n            CheckLength(source.Length, array.Length);\n            void* dstPtr = array.GetUnsafePtr();\n\n            fixed (void* srcPtr = source)\n            {\n                UnsafeUtility.MemCpy(dstPtr, srcPtr, array.Length * UnsafeUtility.SizeOf<T>());\n            }\n        }\n\n        public static Span<T> AsSpan<T>(List<T> list) where T : unmanaged\n        {\n            ref var view = ref UnsafeUtility.As<List<T>, ListView<T>>(ref list);\n            return view._items.AsSpan(0, list.Count);\n        }\n\n        [Conditional(\"ENABLE_UNITY_COLLECTIONS_CHECKS\")]\n        static void CheckLength(int srcLength, int dstLength)\n        {\n            if (srcLength != dstLength) throw new ArgumentException(\"source and destination length must be the same\");\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/SpanHelper.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7723c8bdc26dc44c3934d82af7ee3843\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime/Vectors.cs",
    "content": "﻿using System;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing Unity.Mathematics;\n\nnamespace BurstLinq\n{\n    internal static class VectorExtensions\n    {\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static bool any(this bool2 v) => v.x || v.y;\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static bool any(this bool3 v) => v.x || v.y || v.z;\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static bool any(this bool4 v) => v.x || v.y || v.z || v.w;\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static bool all(this bool2 v) => v.x && v.y;\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static bool all(this bool3 v) => v.x && v.y && v.z;\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public static bool all(this bool4 v) => v.x && v.y && v.z && v.w;\n    }\n\n    [Serializable]\n    [StructLayout(LayoutKind.Explicit, Size = 32 * sizeof(bool))]\n    internal struct bool32\n    {\n        [FieldOffset(0)]\n        public bool x0;\n\n        [FieldOffset(1)]\n        public bool x1;\n\n        [FieldOffset(2)]\n        public bool x2;\n\n        [FieldOffset(3)]\n        public bool x3;\n\n        [FieldOffset(4)]\n        public bool x4;\n\n        [FieldOffset(5)]\n        public bool x5;\n\n        [FieldOffset(6)]\n        public bool x6;\n\n        [FieldOffset(7)]\n        public bool x7;\n\n        [FieldOffset(8)]\n        public bool x8;\n\n        [FieldOffset(9)]\n        public bool x9;\n\n        [FieldOffset(10)]\n        public bool x10;\n\n        [FieldOffset(11)]\n        public bool x11;\n\n        [FieldOffset(12)]\n        public bool x12;\n\n        [FieldOffset(13)]\n        public bool x13;\n\n        [FieldOffset(14)]\n        public bool x14;\n\n        [FieldOffset(15)]\n        public bool x15;\n\n        [FieldOffset(16)]\n        public bool x16;\n\n        [FieldOffset(17)]\n        public bool x17;\n\n        [FieldOffset(18)]\n        public bool x18;\n\n        [FieldOffset(19)]\n        public bool x19;\n\n        [FieldOffset(20)]\n        public bool x20;\n\n        [FieldOffset(21)]\n        public bool x21;\n\n        [FieldOffset(22)]\n        public bool x22;\n\n        [FieldOffset(23)]\n        public bool x23;\n\n        [FieldOffset(24)]\n        public bool x24;\n\n        [FieldOffset(25)]\n        public bool x25;\n\n        [FieldOffset(26)]\n        public bool x26;\n\n        [FieldOffset(27)]\n        public bool x27;\n\n        [FieldOffset(28)]\n        public bool x28;\n\n        [FieldOffset(29)]\n        public bool x29;\n\n        [FieldOffset(30)]\n        public bool x30;\n\n        [FieldOffset(31)]\n        public bool x31;\n\n        public bool32(bool x0, bool x1, bool x2, bool x3, bool x4, bool x5, bool x6, bool x7, bool x8, bool x9, bool x10, bool x11, bool x12, bool x13, bool x14, bool x15, bool x16, bool x17, bool x18, bool x19, bool x20, bool x21, bool x22, bool x23, bool x24, bool x25, bool x26, bool x27, bool x28, bool x29, bool x30, bool x31)\n        {\n            this.x0 = x0;\n            this.x1 = x1;\n            this.x2 = x2;\n            this.x3 = x3;\n            this.x4 = x4;\n            this.x5 = x5;\n            this.x6 = x6;\n            this.x7 = x7;\n            this.x8 = x8;\n            this.x9 = x9;\n            this.x10 = x10;\n            this.x11 = x11;\n            this.x12 = x12;\n            this.x13 = x13;\n            this.x14 = x14;\n            this.x15 = x15;\n            this.x16 = x16;\n            this.x17 = x17;\n            this.x18 = x18;\n            this.x19 = x19;\n            this.x20 = x20;\n            this.x21 = x21;\n            this.x22 = x22;\n            this.x23 = x23;\n            this.x24 = x24;\n            this.x25 = x25;\n            this.x26 = x26;\n            this.x27 = x27;\n            this.x28 = x28;\n            this.x29 = x29;\n            this.x30 = x30;\n            this.x31 = x31;\n        }\n\n        public bool any() => x0 || x1 || x2 || x3 || x4 || x5 || x6 || x7 || x8 || x9 || x10 || x11 || x12 || x13 || x14 || x15 || x16 || x17 || x18 || x19 || x20 || x21 || x22 || x23 || x24 || x25 || x26 || x27 || x28 || x29 || x30 || x31;\n        public bool all() => x0 && x1 && x2 && x3 && x4 && x5 && x6 && x7 && x8 && x9 && x10 && x11 && x12 && x13 && x14 && x15 && x16 && x17 && x18 && x19 && x20 && x21 && x22 && x23 && x24 && x25 && x26 && x27 && x28 && x29 && x30 && x31;\n    }\n\n    [Serializable]\n    [StructLayout(LayoutKind.Explicit, Size = 16 * sizeof(bool))]\n    internal struct bool16\n    {\n        [FieldOffset(0)]\n        public bool x0;\n\n        [FieldOffset(1)]\n        public bool x1;\n\n        [FieldOffset(2)]\n        public bool x2;\n\n        [FieldOffset(3)]\n        public bool x3;\n\n        [FieldOffset(4)]\n        public bool x4;\n\n        [FieldOffset(5)]\n        public bool x5;\n\n        [FieldOffset(6)]\n        public bool x6;\n\n        [FieldOffset(7)]\n        public bool x7;\n\n        [FieldOffset(8)]\n        public bool x8;\n\n        [FieldOffset(9)]\n        public bool x9;\n\n        [FieldOffset(10)]\n\n        public bool x10;\n\n        [FieldOffset(11)]\n\n        public bool x11;\n\n        [FieldOffset(12)]\n\n        public bool x12;\n\n        [FieldOffset(13)]\n\n        public bool x13;\n\n        [FieldOffset(14)]\n\n        public bool x14;\n\n        [FieldOffset(15)]\n\n        public bool x15;\n\n        public bool16(bool x0, bool x1, bool x2, bool x3, bool x4, bool x5, bool x6, bool x7, bool x8, bool x9, bool x10, bool x11, bool x12, bool x13, bool x14, bool x15)\n        {\n            this.x0 = x0;\n            this.x1 = x1;\n            this.x2 = x2;\n            this.x3 = x3;\n            this.x4 = x4;\n            this.x5 = x5;\n            this.x6 = x6;\n            this.x7 = x7;\n            this.x8 = x8;\n            this.x9 = x9;\n            this.x10 = x10;\n            this.x11 = x11;\n            this.x12 = x12;\n            this.x13 = x13;\n            this.x14 = x14;\n            this.x15 = x15;\n        }\n\n\n        public bool any() => x0 || x1 || x2 || x3 || x4 || x5 || x6 || x7 || x8 || x9 || x10 || x11 || x12 || x13 || x14 || x15;\n        public bool all() => x0 && x1 && x2 && x3 && x4 && x5 && x6 && x7 || x8 && x9 && x10 && x11 && x12 && x13 && x14 && x15;\n    }\n\n    [Serializable]\n    [StructLayout(LayoutKind.Explicit, Size = 8 * sizeof(bool))]\n    internal struct bool8\n    {\n        [FieldOffset(0)]\n        public bool x0;\n\n        [FieldOffset(1)]\n        public bool x1;\n\n        [FieldOffset(2)]\n        public bool x2;\n\n        [FieldOffset(3)]\n        public bool x3;\n\n        [FieldOffset(4)]\n        public bool x4;\n\n        [FieldOffset(5)]\n        public bool x5;\n\n        [FieldOffset(6)]\n        public bool x6;\n\n        [FieldOffset(7)]\n        public bool x7;\n        public bool8(bool x0, bool x1, bool x2, bool x3, bool x4, bool x5, bool x6, bool x7)\n        {\n            this.x0 = x0;\n            this.x1 = x1;\n            this.x2 = x2;\n            this.x3 = x3;\n            this.x4 = x4;\n            this.x5 = x5;\n            this.x6 = x6;\n            this.x7 = x7;\n        }\n\n        public bool any() => x0 || x1 || x2 || x3 || x4 || x5 || x6 || x7;\n        public bool all() => x0 && x1 && x2 && x3 && x4 && x5 && x6 && x7;\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Runtime/Vectors.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 1f2d942b28d6b4a7c9962b2614ef9190\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Runtime.meta",
    "content": "fileFormatVersion: 2\nguid: bcb9141eec5a6493d8e1f71aea2aac29\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/AssertEx.cs",
    "content": "using System;\nusing Unity.Mathematics;\nusing UnityEngine;\nusing UnityEngine.Assertions;\n\nnamespace BurstLinq.Tests\n{\n    public static class AssertEx\n    {\n        public static void AreApproximatelyEqual(float a, float b)\n        {\n            Assert.AreApproximatelyEqual(a, b, 0.1f);\n        }\n\n        public static void AreApproximatelyEqual(Vector2 a, Vector2 b)\n        {\n            Assert.AreApproximatelyEqual(a.x, b.x, 0.1f);\n            Assert.AreApproximatelyEqual(a.y, b.y, 0.1f);\n        }\n\n        public static void AreApproximatelyEqual(Vector3 a, Vector3 b)\n        {\n            Assert.AreApproximatelyEqual(a.x, b.x, 0.1f);\n            Assert.AreApproximatelyEqual(a.y, b.y, 0.1f);\n            Assert.AreApproximatelyEqual(a.z, b.z, 0.1f);\n        }\n\n        public static void AreApproximatelyEqual(Vector4 a, Vector4 b)\n        {\n            Assert.AreApproximatelyEqual(a.x, b.x, 0.1f);\n            Assert.AreApproximatelyEqual(a.y, b.y, 0.1f);\n            Assert.AreApproximatelyEqual(a.z, b.z, 0.1f);\n            Assert.AreApproximatelyEqual(a.w, b.w, 0.1f);\n        }\n\n        public static void AreApproximatelyEqual(double a, double b)\n        {\n            Assert.IsTrue(Math.Abs(a - b) < 0.001);\n        }\n\n        public static void AreApproximatelyEqual(double2 a, double2 b)\n        {\n            AreApproximatelyEqual(a.x, b.x);\n            AreApproximatelyEqual(a.y, b.y);\n        }\n\n        public static void AreApproximatelyEqual(double3 a, double3 b)\n        {\n            AreApproximatelyEqual(a.x, b.x);\n            AreApproximatelyEqual(a.y, b.y);\n            AreApproximatelyEqual(a.z, b.z);\n        }\n\n        public static void AreApproximatelyEqual(double4 a, double4 b)\n        {\n            AreApproximatelyEqual(a.x, b.x);\n            AreApproximatelyEqual(a.y, b.y);\n            AreApproximatelyEqual(a.z, b.z);\n            AreApproximatelyEqual(a.w, b.w);\n        }\n\n        public static void AreApproximatelyEqual(float2 a, float2 b)\n        {\n            Assert.AreApproximatelyEqual(a.x, b.x, 0.1f);\n            Assert.AreApproximatelyEqual(a.y, b.y, 0.1f);\n        }\n\n        public static void AreApproximatelyEqual(float3 a, float3 b)\n        {\n            Assert.AreApproximatelyEqual(a.x, b.x, 0.1f);\n            Assert.AreApproximatelyEqual(a.y, b.y, 0.1f);\n            Assert.AreApproximatelyEqual(a.z, b.z, 0.1f);\n        }\n\n        public static void AreApproximatelyEqual(float4 a, float4 b)\n        {\n            Assert.AreApproximatelyEqual(a.x, b.x, 0.1f);\n            Assert.AreApproximatelyEqual(a.y, b.y, 0.1f);\n            Assert.AreApproximatelyEqual(a.z, b.z, 0.1f);\n            Assert.AreApproximatelyEqual(a.w, b.w, 0.1f);\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/AssertEx.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 4e5dd188b1cd44c4ead7c1aa8da6ae4d\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/AverageTest.cs",
    "content": "using System;\nusing System.Linq;\nusing NUnit.Framework;\nusing UnityEngine;\nusing Unity.Mathematics;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class AverageTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 100; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Average(list);\n                var result2 = BurstLinqExtensions.Average(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Average(array);\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt(0, 100, 1000).ToArray();\n\n                uint sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Long()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatLong(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Average(array);\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_ULong()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatULong(0, 100, 1000).ToArray();\n\n                ulong sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Average(array);\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Average(array);\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector2(0, 100, 1000).ToArray();\n\n                Vector2 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (Vector2)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector2Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector2Int(0, 100, 1000).ToArray();\n\n                Vector2Int sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (Vector2)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector3(0, 100, 1000).ToArray();\n\n                Vector3 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (Vector3)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector3Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector3Int(0, 100, 1000).ToArray();\n\n                Vector3Int sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (Vector3)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector4(0, 100, 1000).ToArray();\n\n                Vector4 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (Vector4)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt2(0, 100, 1000).ToArray();\n\n                int2 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double2)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt3(0, 100, 1000).ToArray();\n\n                int3 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double3)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt4(0, 100, 1000).ToArray();\n\n                int4 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double4)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat2(0, 100, 1000).ToArray();\n\n                float2 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (float2)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat3(0, 100, 1000).ToArray();\n\n                float3 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (float3)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat4(0, 100, 1000).ToArray();\n\n                float4 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (float4)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble2(0, 100, 1000).ToArray();\n\n                double2 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double2)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble3(0, 100, 1000).ToArray();\n\n                double3 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double3)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble4(0, 100, 1000).ToArray();\n\n                double4 sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (double4)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/AverageTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 28462f0a22ab54b8eb216473e8105c23\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/AverageTest.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    string GetTypeName(string typeName)\n    {\n        if (typeName[0] == 'u') return \"U\" + char.ToUpper(typeName[1]) + typeName.Substring(2);\n        if (typeName == \"sbyte\") return \"SByte\";\n        return char.ToUpper(typeName[0]) + typeName.Substring(1);\n    }\n\n    bool IsLinqSupport(string typeName)\n    {\n        return typeName is \"int\" or \"long\" or \"float\" or \"double\";\n    }\n\n    bool IsFloat(string typeName)\n    {\n        return typeName is \"float\" or \"float2\" or \"float3\" or \"float4\"\n            or \"double\" or \"double2\" or \"double3\" or \"double4\"\n            or \"Vector2\" or \"Vector3\" or \"Vector4\";\n    }\n\n    var types = new string[]\n    {\n        \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n\n    System.Func<string, string> retType = (string x) => \n    {\n        switch (x)\n        {\n            default: return \"double\";\n            case \"float\": return \"float\";\n            case \"Vector2\":\n            case \"Vector2Int\": return \"Vector2\";\n            case \"Vector3\":\n            case \"Vector3Int\": return \"Vector3\";\n            case \"Vector4\": return \"Vector4\";\n            case \"float2\": return \"float2\";\n            case \"float3\": return \"float3\";\n            case \"float4\": return \"float4\";\n            case \"int2\":\n            case \"double2\": return \"double2\";\n            case \"int3\":\n            case \"double3\": return \"double3\";\n            case \"int4\":\n            case \"double4\": return \"double4\";\n        }\n        return \"\";\n    };\n#>\nusing System;\nusing System.Linq;\nusing NUnit.Framework;\nusing UnityEngine;\nusing Unity.Mathematics;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class AverageTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 100; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Average(list);\n                var result2 = BurstLinqExtensions.Average(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# foreach(var type in types) { #>\n        [Test]\n        public void Test_Array_<#=GetTypeName(type)#>()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.Repeat<#=GetTypeName(type)#>(0, 100, 1000).ToArray();\n\n<# if (IsLinqSupport(type)) { #>\n                var result1 = Enumerable.Average(array);\n                var result2 = BurstLinqExtensions.Average(array);\n<# } else { #>\n                <#=type#> sum = default;\n                for (int n = 0; n < array.Length; n++) sum += array[n];\n                var result1 = (<#=retType(type)#>)sum / array.Length;\n                var result2 = BurstLinqExtensions.Average(array);\n<# } #>\n\n<# if (IsFloat(retType(type))) { #>\n                AssertEx.AreApproximatelyEqual(result1, result2);\n<# } else { #>\n                Assert.AreEqual(result1, result2);\n<# } #>\n            }\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/AverageTest.tt.meta",
    "content": "fileFormatVersion: 2\nguid: f7d1190a97bce4842b286021d8796d4d\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/Benchmark.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing NUnit.Framework;\nusing Unity.PerformanceTesting;\n\n#pragma warning disable CS0219\n\nnamespace BurstLinq.Tests\n{\n    public class BenchmarkFloatSum\n    {\n        const int WarmupCount = 5;\n        const int MeasurementCount = 100;\n\n        static readonly float[] array = Enumerable.Repeat(1.0f, 10000).ToArray();\n\n        [TearDown]\n        public void TearDown()\n        {\n            GC.Collect();\n        }\n\n        [Test, Performance]\n        public void For()\n        {\n            Measure.Method(() =>\n            {\n                if (array == null) return;\n\n                var result = 0.0f;\n                for (int i = 0; i < array.Length; i++)\n                {\n                    result += array[i];\n                }\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Float Sum: For\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void LINQ()\n        {\n            Measure.Method(() =>\n            {\n                Enumerable.Sum(array);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Float Sum: LINQ\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void BurstLinq()\n        {\n            Measure.Method(() =>\n            {\n                BurstLinqExtensions.Sum(array);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Float Sum: BurstLinq\", SampleUnit.Microsecond))\n            .Run();\n        }\n    }\n\n    public class BenchmarkIntSequenceEqual\n    {\n        const int WarmupCount = 5;\n        const int MeasurementCount = 100;\n\n        static readonly int[] array1 = Enumerable.Range(0, 10000).ToArray();\n        static readonly int[] array2 = Enumerable.Range(0, 10000).ToArray();\n\n        [TearDown]\n        public void TearDown()\n        {\n            GC.Collect();\n        }\n\n        [Test, Performance]\n        public void For()\n        {\n            Measure.Method(() =>\n            {\n                if (array1 == null) return;\n                if (array2 == null) return;\n\n                var result = true;\n                if (array1.Length != array2.Length)\n                {\n                    result = false;\n                    return;\n                }\n\n                for (int i = 0; i < array1.Length; i++)\n                {\n                    if (array1[i] != array2[i])\n                    {\n                        result = false;\n                        break;\n                    }\n                }\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int SequenceEqual: For\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void LINQ()\n        {\n            Measure.Method(() =>\n            {\n                Enumerable.SequenceEqual(array1, array2);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int SequenceEqual: LINQ\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void BurstLinq()\n        {\n            Measure.Method(() =>\n            {\n                BurstLinqExtensions.SequenceEqual(array1, array2);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int SequenceEqual: BurstLinq\", SampleUnit.Microsecond))\n            .Run();\n        }\n    }\n\n    public class BenchmarkDoubleMin\n    {\n        const int WarmupCount = 5;\n        const int MeasurementCount = 100;\n\n        static readonly double[] array = DoubleRange(10000).ToArray();\n        static IEnumerable<double> DoubleRange(int count)\n        {\n            var current = 0.0;\n            for (int i = 0; i < count; i++) yield return current++;\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            GC.Collect();\n        }\n\n        [Test, Performance]\n        public void For()\n        {\n            Measure.Method(() =>\n            {\n                if (array == null) return;\n\n                var result = double.MaxValue;\n                for (int i = 0; i < array.Length; i++)\n                {\n                    if (array[i] < result) result = array[i];\n                }\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Double Min: For\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void LINQ()\n        {\n            Measure.Method(() =>\n            {\n                Enumerable.Min(array);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Double Min: LINQ\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void BurstLinq()\n        {\n            Measure.Method(() =>\n            {\n                BurstLinqExtensions.Min(array);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Double Min: BurstLinq\", SampleUnit.Microsecond))\n            .Run();\n        }\n    }\n\n    public class BenchmarkIntMin\n    {\n        const int WarmupCount = 5;\n        const int MeasurementCount = 100;\n\n        static readonly int[] array = Enumerable.Range(0, 10000).ToArray();\n\n        [TearDown]\n        public void TearDown()\n        {\n            GC.Collect();\n        }\n\n        [Test, Performance]\n        public void For()\n        {\n            Measure.Method(() =>\n            {\n                if (array == null) return;\n\n                var result = int.MaxValue;\n                for (int i = 0; i < array.Length; i++)\n                {\n                    if (array[i] < result) result = array[i];\n                }\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int Min: For\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void LINQ()\n        {\n            Measure.Method(() =>\n            {\n                Enumerable.Min(array);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int Min: LINQ\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void BurstLinq()\n        {\n            Measure.Method(() =>\n            {\n                BurstLinqExtensions.Min(array);\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int Min: BurstLinq\", SampleUnit.Microsecond))\n            .Run();\n        }\n    }\n\n\n    public class BenchmarkIntContains\n    {\n        const int WarmupCount = 5;\n        const int MeasurementCount = 100;\n\n        static readonly int[] array = Enumerable.Range(0, 10000).ToArray();\n\n        [TearDown]\n        public void TearDown()\n        {\n            GC.Collect();\n        }\n\n        [Test, Performance]\n        public void For()\n        {\n            Measure.Method(() =>\n            {\n                if (array == null) return;\n\n                var value = array.Last();\n                var result = false;\n                for (int i = 0; i < array.Length; i++)\n                {\n                    if (array[i] == value)\n                    {\n                        result = true;\n                        break;\n                    }\n                }\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int Contains: For\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void LINQ()\n        {\n            Measure.Method(() =>\n            {\n                Enumerable.Contains(array, array.Last());\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int Contains: LINQ\", SampleUnit.Microsecond))\n            .Run();\n        }\n\n        [Test, Performance]\n        public void BurstLinq()\n        {\n            Measure.Method(() =>\n            {\n                BurstLinqExtensions.Contains(array, array.Last());\n            })\n            .WarmupCount(WarmupCount)\n            .MeasurementCount(MeasurementCount)\n            .SampleGroup(new SampleGroup(\"Int Contains: BurstLinq\", SampleUnit.Microsecond))\n            .Run();\n        }\n    }\n\n}\n\n#pragma warning restore CS0219"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/Benchmark.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 1d39bdb98ccf048429c5c1c5a933bc6f\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/BurstLinq.Tests.Runtime.asmdef",
    "content": "{\n    \"name\": \"BurstLinq.Tests.Runtime\",\n    \"rootNamespace\": \"BurstLinq.Tests\",\n    \"references\": [\n        \"UnityEngine.TestRunner\",\n        \"UnityEditor.TestRunner\",\n        \"Unity.PerformanceTesting\",\n        \"Unity.Mathematics\",\n        \"Unity.Collections\",\n        \"BurstLinq\"\n    ],\n    \"includePlatforms\": [],\n    \"excludePlatforms\": [],\n    \"allowUnsafeCode\": false,\n    \"overrideReferences\": true,\n    \"precompiledReferences\": [\n        \"nunit.framework.dll\"\n    ],\n    \"autoReferenced\": false,\n    \"defineConstraints\": [\n        \"UNITY_INCLUDE_TESTS\"\n    ],\n    \"versionDefines\": [],\n    \"noEngineReferences\": false\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/BurstLinq.Tests.Runtime.asmdef.meta",
    "content": "fileFormatVersion: 2\nguid: 3091443d419f943faae76bebd1e7ac5f\nAssemblyDefinitionImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/ContainsTest.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing NUnit.Framework;\nusing UnityEngine;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class ContainsTest\n    {\n        const int IterationCount = 1000;\n\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_Contains_Int_List()\n        {\n            for (int i = 0; i < IterationCount; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n                var value = Random.Range(0, 2) == 0 ? 50 : -1;\n\n                var result1 = Enumerable.Contains(list, value);\n                var result2 = BurstLinqExtensions.Contains(list, value);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Contains_Int_Array()\n        {\n            for (int i = 0; i < IterationCount; i++)\n            {\n                var array = RandomEnumerable.RepeatInt(0, 100, 100).ToArray();\n                var value = Random.Range(0, 2) == 0 ? 50 : -1;\n\n                var result1 = Enumerable.Contains(array, value);\n                var result2 = BurstLinqExtensions.Contains(array, value);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Contains_Float_Array()\n        {\n            for (int i = 0; i < IterationCount; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat(0f, 100f, 1000).ToArray();\n                var value = Random.Range(0, 2) == 0 ? 50f : -1f;\n\n                var result1 = Enumerable.Contains(array, value);\n                var result2 = BurstLinqExtensions.Contains(array, value);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/ContainsTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: c667f33a822124332b2f9d372526724e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MaxTest.cs",
    "content": "using System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class MaxTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Max(list);\n                var result2 = BurstLinqExtensions.Max(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Byte()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatByte(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_SByte()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatSByte(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Short()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatShort(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UShort()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUShort(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Long()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatLong(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_ULong()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatULong(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MaxTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 37fd8c825ce154f449e852fea235633e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MaxTest.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    string GetTypeName(string typeName)\n    {\n        if (typeName[0] == 'u') return \"U\" + char.ToUpper(typeName[1]) + typeName.Substring(2);\n        if (typeName == \"sbyte\") return \"SByte\";\n        return char.ToUpper(typeName[0]) + typeName.Substring(1);\n    }\n\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\"\n    };\n#>\nusing System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class MaxTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Max(list);\n                var result2 = BurstLinqExtensions.Max(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# foreach(var type in types) { #>\n        [Test]\n        public void Test_Array_<#=GetTypeName(type)#>()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.Repeat<#=GetTypeName(type)#>(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Max(array);\n                var result2 = BurstLinqExtensions.Max(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MaxTest.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 0407dc155148540d5a8ad6a1a9695d9c\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MinTest.cs",
    "content": "using System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class MinTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Min(list);\n                var result2 = BurstLinqExtensions.Min(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Byte()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatByte(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_SByte()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatSByte(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Short()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatShort(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UShort()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUShort(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Long()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatLong(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_ULong()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatULong(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MinTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 09b6c4f1dba244af19367d039be910f7\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MinTest.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    string GetTypeName(string typeName)\n    {\n        if (typeName[0] == 'u') return \"U\" + char.ToUpper(typeName[1]) + typeName.Substring(2);\n        if (typeName == \"sbyte\") return \"SByte\";\n        return char.ToUpper(typeName[0]) + typeName.Substring(1);\n    }\n\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\"\n    };\n#>\nusing System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class MinTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Min(list);\n                var result2 = BurstLinqExtensions.Min(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# foreach(var type in types) { #>\n        [Test]\n        public void Test_Array_<#=GetTypeName(type)#>()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.Repeat<#=GetTypeName(type)#>(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Min(array);\n                var result2 = BurstLinqExtensions.Min(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/MinTest.tt.meta",
    "content": "fileFormatVersion: 2\nguid: 56d0dea43820d4f1fa307da050280f15\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/RandomEnumerable.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Unity.Collections.LowLevel.Unsafe;\nusing Unity.Mathematics;\nusing UnityEngine;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public static class RandomEnumerable\n    {\n\n        public static IEnumerable<Vector2> RepeatVector2(float min, float max, int count)\n        {\n            var minVector = new Vector2(min, min);\n            var maxVector = new Vector2(max, max);\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextFloat2(UnsafeUtility.As<Vector2, float2>(ref minVector), UnsafeUtility.As<Vector2, float2>(ref maxVector));\n                yield return UnsafeUtility.As<float2, Vector2>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector2> RepeatVector2(Vector2 min, Vector2 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextFloat2(UnsafeUtility.As<Vector2, float2>(ref min), UnsafeUtility.As<Vector2, float2>(ref max));\n                yield return UnsafeUtility.As<float2, Vector2>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector3> RepeatVector3(float min, float max, int count)\n        {\n            var minVector = new Vector3(min, min, min);\n            var maxVector = new Vector3(max, max, max);\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextFloat3(UnsafeUtility.As<Vector3, float3>(ref minVector), UnsafeUtility.As<Vector3, float3>(ref maxVector));\n                yield return UnsafeUtility.As<float3, Vector3>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector3> RepeatVector3(Vector3 min, Vector3 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextFloat3(UnsafeUtility.As<Vector3, float3>(ref min), UnsafeUtility.As<Vector3, float3>(ref max));\n                yield return UnsafeUtility.As<float3, Vector3>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector4> RepeatVector4(float min, float max, int count)\n        {\n            var minVector = new Vector4(min, min, min, min);\n            var maxVector = new Vector4(max, max, max, max);\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextFloat4(UnsafeUtility.As<Vector4, float4>(ref minVector), UnsafeUtility.As<Vector4, float4>(ref maxVector));\n                yield return UnsafeUtility.As<float4, Vector4>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector4> RepeatVector4(Vector4 min, Vector4 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextFloat4(UnsafeUtility.As<Vector4, float4>(ref min), UnsafeUtility.As<Vector4, float4>(ref max));\n                yield return UnsafeUtility.As<float4, Vector4>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector3Int> RepeatVector3Int(int min, int max, int count)\n        {\n            var minVector = new Vector3Int(min, min, min);\n            var maxVector = new Vector3Int(max, max, max);\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextUInt3(UnsafeUtility.As<Vector3Int, uint3>(ref minVector), UnsafeUtility.As<Vector3Int, uint3>(ref maxVector));\n                yield return UnsafeUtility.As<uint3, Vector3Int>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector3Int> RepeatVector3Int(Vector3Int min, Vector3Int max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextUInt3(UnsafeUtility.As<Vector3Int, uint3>(ref min), UnsafeUtility.As<Vector3Int, uint3>(ref max));\n                yield return UnsafeUtility.As<uint3, Vector3Int>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector2Int> RepeatVector2Int(int min, int max, int count)\n        {\n            var minVector = new Vector2Int(min, min);\n            var maxVector = new Vector2Int(max, max);\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextUInt2(UnsafeUtility.As<Vector2Int, uint2>(ref minVector), UnsafeUtility.As<Vector2Int, uint2>(ref maxVector));\n                yield return UnsafeUtility.As<uint2, Vector2Int>(ref value);\n            }\n        }\n\n        public static IEnumerable<Vector2Int> RepeatVector2Int(Vector2Int min, Vector2Int max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                var value = random.NextUInt2(UnsafeUtility.As<Vector2Int, uint2>(ref min), UnsafeUtility.As<Vector2Int, uint2>(ref max));\n                yield return UnsafeUtility.As<uint2, Vector2Int>(ref value);\n            }\n        }\n\n        public static IEnumerable<byte> RepeatByte(byte min, byte max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return (byte)random.NextInt(min, max);\n            }\n        }\n\n        public static IEnumerable<sbyte> RepeatSByte(sbyte min, sbyte max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return (sbyte)random.NextInt(min, max);\n            }\n        }\n\n        public static IEnumerable<short> RepeatShort(short min, short max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return (short)random.NextInt(min, max);\n            }\n        }\n\n        public static IEnumerable<ushort> RepeatUShort(ushort min, ushort max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return (ushort)random.NextInt(min, max);\n            }\n        }\n\n        public static IEnumerable<uint> RepeatUInt(uint min, uint max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextUInt(min, max);\n            }\n        }\n\n        public static IEnumerable<uint2> RepeatUInt2(uint2 min, uint2 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextUInt2(min, max);\n            }\n        }\n\n        public static IEnumerable<uint3> RepeatUInt3(uint3 min, uint3 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextUInt3(min, max);\n            }\n        }\n\n        public static IEnumerable<uint4> RepeatUInt4(uint4 min, uint4 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextUInt4(min, max);\n            }\n        }\n\n        public static IEnumerable<long> RepeatLong(long min, long max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextInt((int)min, (int)max);\n            }\n        }\n\n        public static IEnumerable<ulong> RepeatULong(ulong min, ulong max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextUInt((uint)min, (uint)max);\n            }\n        }\n\n        public static IEnumerable<int> RepeatInt(int min, int max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextInt(min, max);\n            }\n        }\n\n        public static IEnumerable<int2> RepeatInt2(int2 min, int2 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextInt2(min, max);\n            }\n        }\n\n        public static IEnumerable<int3> RepeatInt3(int3 min, int3 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextInt3(min, max);\n            }\n        }\n\n        public static IEnumerable<int4> RepeatInt4(int4 min, int4 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextInt4(min, max);\n            }\n        }\n\n        public static IEnumerable<float> RepeatFloat(float min, float max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextFloat(min, max);\n            }\n        }\n\n        public static IEnumerable<float2> RepeatFloat2(float2 min, float2 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextFloat2(min, max);\n            }\n        }\n\n        public static IEnumerable<float3> RepeatFloat3(float3 min, float3 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextFloat3(min, max);\n            }\n        }\n\n        public static IEnumerable<float4> RepeatFloat4(float4 min, float4 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextFloat4(min, max);\n            }\n        }\n\n        public static IEnumerable<double> RepeatDouble(double min, double max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextDouble(min, max);\n            }\n        }\n\n        public static IEnumerable<double2> RepeatDouble2(double2 min, double2 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextDouble2(min, max);\n            }\n        }\n\n        public static IEnumerable<double3> RepeatDouble3(double3 min, double3 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextDouble3(min, max);\n            }\n        }\n\n        public static IEnumerable<double4> RepeatDouble4(double4 min, double4 max, int count)\n        {\n            var random = new Unity.Mathematics.Random((uint)Random.Range(0, int.MaxValue));\n            for (int i = 0; i < count; i++)\n            {\n                yield return random.NextDouble4(min, max);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/RandomEnumerable.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 3ba11c532da2d473b8b8076083d9ff6a\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SequenceEqualTest.cs",
    "content": "using System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class SequenceEqualTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 100; i++)\n            {\n                var list1 = RandomEnumerable.RepeatInt(0, 2, 10).ToList();\n                var list2 = RandomEnumerable.RepeatInt(0, 2, 10).ToList();\n\n                var result1 = Enumerable.SequenceEqual(list1, list2);\n                var result2 = BurstLinqExtensions.SequenceEqual(list1, list2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Byte()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatByte(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatByte(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_SByte()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatSByte(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatSByte(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Short()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatShort(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatShort(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UShort()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatUShort(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatUShort(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatInt(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatInt(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatUInt(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatUInt(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Long()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatLong(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatLong(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_ULong()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatULong(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatULong(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatFloat(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatFloat(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatDouble(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatDouble(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatVector2(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatVector2(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector2Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatVector2Int(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatVector2Int(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatVector3(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatVector3(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector3Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatVector3Int(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatVector3Int(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatVector4(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatVector4(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatInt2(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatInt2(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatInt3(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatInt3(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatInt4(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatInt4(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatUInt2(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatUInt2(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatUInt3(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatUInt3(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatUInt4(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatUInt4(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatFloat2(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatFloat2(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatFloat3(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatFloat3(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatFloat4(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatFloat4(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatDouble2(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatDouble2(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatDouble3(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatDouble3(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.RepeatDouble4(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.RepeatDouble4(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SequenceEqualTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 94d745d244014480caeeb7ce8941916e\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SequenceEqualTest.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    string GetTypeName(string typeName)\n    {\n        if (typeName[0] == 'u') return \"U\" + char.ToUpper(typeName[1]) + typeName.Substring(2);\n        if (typeName == \"sbyte\") return \"SByte\";\n        return char.ToUpper(typeName[0]) + typeName.Substring(1);\n    }\n\n    var types = new string[]\n    {\n        \"byte\", \"sbyte\", \"short\", \"ushort\", \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n#>\nusing System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class SequenceEqualTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 100; i++)\n            {\n                var list1 = RandomEnumerable.RepeatInt(0, 2, 10).ToList();\n                var list2 = RandomEnumerable.RepeatInt(0, 2, 10).ToList();\n\n                var result1 = Enumerable.SequenceEqual(list1, list2);\n                var result2 = BurstLinqExtensions.SequenceEqual(list1, list2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# foreach(var type in types) { #>\n        [Test]\n        public void Test_Array_<#=GetTypeName(type)#>()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array1 = RandomEnumerable.Repeat<#=GetTypeName(type)#>(0, 2, 10).ToArray();\n                var array2 = RandomEnumerable.Repeat<#=GetTypeName(type)#>(0, 2, 10).ToArray();\n\n                var result1 = Enumerable.SequenceEqual(array1, array2);\n                var result2 = BurstLinqExtensions.SequenceEqual(array1, array2);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# } #>\n    }\n}\n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SequenceEqualTest.tt.meta",
    "content": "fileFormatVersion: 2\nguid: e7566cc4bcab64f6d844a81af29ff526\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SumTest.cs",
    "content": "using System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Unity.Mathematics;\nusing UnityEngine;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class SumTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Sum(list);\n                var result2 = BurstLinqExtensions.Sum(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Sum(array);\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt(0, 100, 1000).ToArray();\n\n                uint result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Long()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatLong(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Sum(array);\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_ULong()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatULong(0, 100, 1000).ToArray();\n\n                ulong result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Sum(array);\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble(0, 100, 1000).ToArray();\n\n                var result1 = Enumerable.Sum(array);\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector2(0, 100, 1000).ToArray();\n\n                Vector2 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector2Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector2Int(0, 100, 1000).ToArray();\n\n                Vector2Int result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector3(0, 100, 1000).ToArray();\n\n                Vector3 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector3Int()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector3Int(0, 100, 1000).ToArray();\n\n                Vector3Int result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Vector4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatVector4(0, 100, 1000).ToArray();\n\n                Vector4 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt2(0, 100, 1000).ToArray();\n\n                int2 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt3(0, 100, 1000).ToArray();\n\n                int3 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Int4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatInt4(0, 100, 1000).ToArray();\n\n                int4 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt2(0, 100, 1000).ToArray();\n\n                uint2 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt3(0, 100, 1000).ToArray();\n\n                uint3 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_UInt4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatUInt4(0, 100, 1000).ToArray();\n\n                uint4 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat2(0, 100, 1000).ToArray();\n\n                float2 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat3(0, 100, 1000).ToArray();\n\n                float3 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Float4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatFloat4(0, 100, 1000).ToArray();\n\n                float4 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double2()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble2(0, 100, 1000).ToArray();\n\n                double2 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double3()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble3(0, 100, 1000).ToArray();\n\n                double3 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n        [Test]\n        public void Test_Array_Double4()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.RepeatDouble4(0, 100, 1000).ToArray();\n\n                double4 result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n\n                AssertEx.AreApproximatelyEqual(result1, result2);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SumTest.cs.meta",
    "content": "fileFormatVersion: 2\nguid: a4294f56768c24a19aef47ed0630569c\nMonoImporter:\n  externalObjects: {}\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SumTest.tt",
    "content": "<#@ template language=\"C#\" #>\n<#@ assembly name=\"System.Core\" #>\n<#@ import namespace=\"System.Linq\" #>\n<#@ import namespace=\"System.Text\" #>\n<#@ import namespace=\"System.Collections.Generic\" #>\n<#@ output extension=\".cs\" #>\n<#\n    string GetTypeName(string typeName)\n    {\n        if (typeName[0] == 'u') return \"U\" + char.ToUpper(typeName[1]) + typeName.Substring(2);\n        if (typeName == \"sbyte\") return \"SByte\";\n        return char.ToUpper(typeName[0]) + typeName.Substring(1);\n    }\n\n    bool IsLinqSupport(string typeName)\n    {\n        return typeName is \"int\" or \"long\" or \"float\" or \"double\";\n    }\n\n    bool IsFloat(string typeName)\n    {\n        return typeName is \"float\" or \"float2\" or \"float3\" or \"float4\"\n            or \"double\" or \"double2\" or \"double3\" or \"double4\"\n            or \"Vector2\" or \"Vector3\" or \"Vector4\";\n    }\n\n    var types = new string[]\n    {\n        \"int\", \"uint\", \"long\", \"ulong\", \"float\", \"double\",\n        \"Vector2\", \"Vector2Int\", \"Vector3\", \"Vector3Int\", \"Vector4\",\n        \"int2\", \"int3\", \"int4\",\n        \"uint2\", \"uint3\", \"uint4\",\n        \"float2\", \"float3\", \"float4\",\n        \"double2\", \"double3\", \"double4\",\n    };\n#>\nusing System;\nusing System.Linq;\nusing NUnit.Framework;\nusing Unity.Mathematics;\nusing UnityEngine;\nusing Assert = UnityEngine.Assertions.Assert;\nusing Random = UnityEngine.Random;\n\nnamespace BurstLinq.Tests\n{\n    public class SumTest\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            Random.InitState((int)DateTime.Now.Ticks);\n        }\n\n        [Test]\n        public void Test_List()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var list = RandomEnumerable.RepeatInt(0, 100, 1000).ToList();\n\n                var result1 = Enumerable.Sum(list);\n                var result2 = BurstLinqExtensions.Sum(list);\n\n                Assert.AreEqual(result1, result2);\n            }\n        }\n\n<# foreach(var type in types) { #>\n        [Test]\n        public void Test_Array_<#=GetTypeName(type)#>()\n        {\n            for (int i = 0; i < 1000; i++)\n            {\n                var array = RandomEnumerable.Repeat<#=GetTypeName(type)#>(0, 100, 1000).ToArray();\n\n<# if (IsLinqSupport(type)) { #>\n                var result1 = Enumerable.Sum(array);\n                var result2 = BurstLinqExtensions.Sum(array);\n<# } else { #>\n                <#=type#> result1 = default;\n                for (int n = 0; n < array.Length; n++) result1 += array[n];\n                var result2 = BurstLinqExtensions.Sum(array);\n<# } #>\n\n<# if (IsFloat(type)) { #>\n                AssertEx.AreApproximatelyEqual(result1, result2);\n<# } else { #>\n                Assert.AreEqual(result1, result2);\n<# } #>\n            }\n        }\n\n<# } #>\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime/SumTest.tt.meta",
    "content": "fileFormatVersion: 2\nguid: b60ef8315855e4099ac7d5322be6a5c4\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests/Runtime.meta",
    "content": "fileFormatVersion: 2\nguid: 015f9dfd74a6549a8ba6973215bdec35\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/Tests.meta",
    "content": "fileFormatVersion: 2\nguid: 4ed136c7d2231406f954843969852723\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq/package.json",
    "content": "{\n    \"name\": \"com.annulusgames.burst-linq\",\n    \"version\": \"1.2.0\",\n    \"displayName\": \"Burst Linq\",\n    \"description\": \"Extremely fast LINQ aggregation operations implementation optimized by Burst Compiler\",\n    \"unity\": \"2020.1\",\n    \"author\": {\n        \"name\": \"Annulus Games\",\n        \"url\": \"https://github.com/AnnulusGames\"\n    }\n}"
  },
  {
    "path": "Assets/BurstLinq/package.json.meta",
    "content": "fileFormatVersion: 2\nguid: 5f0678f7ba168481590801edce899326\nTextScriptImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "Assets/BurstLinq.meta",
    "content": "fileFormatVersion: 2\nguid: d0bc2035faf064fc9b39816314a001d7\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Annulus Games\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Packages/manifest.json",
    "content": "{\n  \"dependencies\": {\n    \"com.unity.collab-proxy\": \"2.2.0\",\n    \"com.unity.collections\": \"2.1.4\",\n    \"com.unity.feature.development\": \"1.0.1\",\n    \"com.unity.ide.visualstudio\": \"2.0.22\",\n    \"com.unity.test-framework.performance\": \"3.0.3\",\n    \"com.unity.textmeshpro\": \"3.0.6\",\n    \"com.unity.timeline\": \"1.7.5\",\n    \"com.unity.toolchain.macos-arm64-linux-x86_64\": \"2.0.0\",\n    \"com.unity.ugui\": \"1.0.0\",\n    \"com.unity.visualscripting\": \"1.8.0\",\n    \"com.unity.modules.ai\": \"1.0.0\",\n    \"com.unity.modules.androidjni\": \"1.0.0\",\n    \"com.unity.modules.animation\": \"1.0.0\",\n    \"com.unity.modules.assetbundle\": \"1.0.0\",\n    \"com.unity.modules.audio\": \"1.0.0\",\n    \"com.unity.modules.cloth\": \"1.0.0\",\n    \"com.unity.modules.director\": \"1.0.0\",\n    \"com.unity.modules.imageconversion\": \"1.0.0\",\n    \"com.unity.modules.imgui\": \"1.0.0\",\n    \"com.unity.modules.jsonserialize\": \"1.0.0\",\n    \"com.unity.modules.particlesystem\": \"1.0.0\",\n    \"com.unity.modules.physics\": \"1.0.0\",\n    \"com.unity.modules.physics2d\": \"1.0.0\",\n    \"com.unity.modules.screencapture\": \"1.0.0\",\n    \"com.unity.modules.terrain\": \"1.0.0\",\n    \"com.unity.modules.terrainphysics\": \"1.0.0\",\n    \"com.unity.modules.tilemap\": \"1.0.0\",\n    \"com.unity.modules.ui\": \"1.0.0\",\n    \"com.unity.modules.uielements\": \"1.0.0\",\n    \"com.unity.modules.umbra\": \"1.0.0\",\n    \"com.unity.modules.unityanalytics\": \"1.0.0\",\n    \"com.unity.modules.unitywebrequest\": \"1.0.0\",\n    \"com.unity.modules.unitywebrequestassetbundle\": \"1.0.0\",\n    \"com.unity.modules.unitywebrequestaudio\": \"1.0.0\",\n    \"com.unity.modules.unitywebrequesttexture\": \"1.0.0\",\n    \"com.unity.modules.unitywebrequestwww\": \"1.0.0\",\n    \"com.unity.modules.vehicles\": \"1.0.0\",\n    \"com.unity.modules.video\": \"1.0.0\",\n    \"com.unity.modules.vr\": \"1.0.0\",\n    \"com.unity.modules.wind\": \"1.0.0\",\n    \"com.unity.modules.xr\": \"1.0.0\"\n  }\n}\n"
  },
  {
    "path": "Packages/packages-lock.json",
    "content": "{\n  \"dependencies\": {\n    \"com.unity.burst\": {\n      \"version\": \"1.8.7\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.mathematics\": \"1.2.1\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.collab-proxy\": {\n      \"version\": \"2.2.0\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.collections\": {\n      \"version\": \"2.1.4\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.burst\": \"1.8.4\",\n        \"com.unity.modules.unityanalytics\": \"1.0.0\",\n        \"com.unity.nuget.mono-cecil\": \"1.11.4\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.editorcoroutines\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.ext.nunit\": {\n      \"version\": \"1.0.6\",\n      \"depth\": 2,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.feature.development\": {\n      \"version\": \"1.0.1\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.ide.visualstudio\": \"2.0.18\",\n        \"com.unity.ide.rider\": \"3.0.24\",\n        \"com.unity.ide.vscode\": \"1.2.5\",\n        \"com.unity.editorcoroutines\": \"1.0.0\",\n        \"com.unity.performance.profile-analyzer\": \"1.2.2\",\n        \"com.unity.test-framework\": \"1.1.33\",\n        \"com.unity.testtools.codecoverage\": \"1.2.4\"\n      }\n    },\n    \"com.unity.ide.rider\": {\n      \"version\": \"3.0.24\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.ext.nunit\": \"1.0.6\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.ide.visualstudio\": {\n      \"version\": \"2.0.22\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.test-framework\": \"1.1.9\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.ide.vscode\": {\n      \"version\": \"1.2.5\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.mathematics\": {\n      \"version\": \"1.2.6\",\n      \"depth\": 2,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.nuget.mono-cecil\": {\n      \"version\": \"1.11.4\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.performance.profile-analyzer\": {\n      \"version\": \"1.2.2\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.settings-manager\": {\n      \"version\": \"2.0.1\",\n      \"depth\": 2,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.sysroot\": {\n      \"version\": \"2.0.7\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {},\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.sysroot.linux-x86_64\": {\n      \"version\": \"2.0.6\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.sysroot\": \"2.0.7\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.test-framework\": {\n      \"version\": \"1.1.33\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.ext.nunit\": \"1.0.6\",\n        \"com.unity.modules.imgui\": \"1.0.0\",\n        \"com.unity.modules.jsonserialize\": \"1.0.0\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.test-framework.performance\": {\n      \"version\": \"3.0.3\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.test-framework\": \"1.1.31\",\n        \"com.unity.modules.jsonserialize\": \"1.0.0\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.testtools.codecoverage\": {\n      \"version\": \"1.2.4\",\n      \"depth\": 1,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.test-framework\": \"1.0.16\",\n        \"com.unity.settings-manager\": \"1.0.1\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.textmeshpro\": {\n      \"version\": \"3.0.6\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.ugui\": \"1.0.0\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.timeline\": {\n      \"version\": \"1.7.5\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.modules.director\": \"1.0.0\",\n        \"com.unity.modules.animation\": \"1.0.0\",\n        \"com.unity.modules.audio\": \"1.0.0\",\n        \"com.unity.modules.particlesystem\": \"1.0.0\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.toolchain.macos-arm64-linux-x86_64\": {\n      \"version\": \"2.0.0\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.sysroot\": \"2.0.7\",\n        \"com.unity.sysroot.linux-x86_64\": \"2.0.6\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.ugui\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.ui\": \"1.0.0\",\n        \"com.unity.modules.imgui\": \"1.0.0\"\n      }\n    },\n    \"com.unity.visualscripting\": {\n      \"version\": \"1.8.0\",\n      \"depth\": 0,\n      \"source\": \"registry\",\n      \"dependencies\": {\n        \"com.unity.ugui\": \"1.0.0\",\n        \"com.unity.modules.jsonserialize\": \"1.0.0\"\n      },\n      \"url\": \"https://packages.unity.com\"\n    },\n    \"com.unity.modules.ai\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.androidjni\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.animation\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.assetbundle\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.audio\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.cloth\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.physics\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.director\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.audio\": \"1.0.0\",\n        \"com.unity.modules.animation\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.imageconversion\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.imgui\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.jsonserialize\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.particlesystem\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.physics\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.physics2d\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.screencapture\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.imageconversion\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.subsystems\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 1,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.jsonserialize\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.terrain\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.terrainphysics\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.physics\": \"1.0.0\",\n        \"com.unity.modules.terrain\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.tilemap\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.physics2d\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.ui\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.uielements\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.ui\": \"1.0.0\",\n        \"com.unity.modules.imgui\": \"1.0.0\",\n        \"com.unity.modules.jsonserialize\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.umbra\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.unityanalytics\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.unitywebrequest\": \"1.0.0\",\n        \"com.unity.modules.jsonserialize\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.unitywebrequest\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.unitywebrequestassetbundle\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.assetbundle\": \"1.0.0\",\n        \"com.unity.modules.unitywebrequest\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.unitywebrequestaudio\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.unitywebrequest\": \"1.0.0\",\n        \"com.unity.modules.audio\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.unitywebrequesttexture\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.unitywebrequest\": \"1.0.0\",\n        \"com.unity.modules.imageconversion\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.unitywebrequestwww\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.unitywebrequest\": \"1.0.0\",\n        \"com.unity.modules.unitywebrequestassetbundle\": \"1.0.0\",\n        \"com.unity.modules.unitywebrequestaudio\": \"1.0.0\",\n        \"com.unity.modules.audio\": \"1.0.0\",\n        \"com.unity.modules.assetbundle\": \"1.0.0\",\n        \"com.unity.modules.imageconversion\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.vehicles\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.physics\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.video\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.audio\": \"1.0.0\",\n        \"com.unity.modules.ui\": \"1.0.0\",\n        \"com.unity.modules.unitywebrequest\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.vr\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.jsonserialize\": \"1.0.0\",\n        \"com.unity.modules.physics\": \"1.0.0\",\n        \"com.unity.modules.xr\": \"1.0.0\"\n      }\n    },\n    \"com.unity.modules.wind\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {}\n    },\n    \"com.unity.modules.xr\": {\n      \"version\": \"1.0.0\",\n      \"depth\": 0,\n      \"source\": \"builtin\",\n      \"dependencies\": {\n        \"com.unity.modules.physics\": \"1.0.0\",\n        \"com.unity.modules.jsonserialize\": \"1.0.0\",\n        \"com.unity.modules.subsystems\": \"1.0.0\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "ProjectSettings/AudioManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!11 &1\nAudioManager:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_Volume: 1\n  Rolloff Scale: 1\n  Doppler Factor: 1\n  Default Speaker Mode: 2\n  m_SampleRate: 0\n  m_DSPBufferSize: 1024\n  m_VirtualVoiceCount: 512\n  m_RealVoiceCount: 32\n  m_SpatializerPlugin: \n  m_AmbisonicDecoderPlugin: \n  m_DisableAudio: 0\n  m_VirtualizeEffects: 1\n  m_RequestedDSPBufferSize: 1024\n"
  },
  {
    "path": "ProjectSettings/BurstAotSettings_StandaloneOSX.json",
    "content": "{\n  \"MonoBehaviour\": {\n    \"Version\": 4,\n    \"EnableBurstCompilation\": true,\n    \"EnableOptimisations\": true,\n    \"EnableSafetyChecks\": false,\n    \"EnableDebugInAllBuilds\": false,\n    \"DebugDataKind\": 1,\n    \"EnableArmv9SecurityFeatures\": false,\n    \"CpuMinTargetX32\": 0,\n    \"CpuMaxTargetX32\": 0,\n    \"CpuMinTargetX64\": 0,\n    \"CpuMaxTargetX64\": 0,\n    \"CpuTargetsX64\": 72,\n    \"OptimizeFor\": 0\n  }\n}\n"
  },
  {
    "path": "ProjectSettings/ClusterInputManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!236 &1\nClusterInputManager:\n  m_ObjectHideFlags: 0\n  m_Inputs: []\n"
  },
  {
    "path": "ProjectSettings/CommonBurstAotSettings.json",
    "content": "{\n  \"MonoBehaviour\": {\n    \"Version\": 4,\n    \"DisabledWarnings\": \"\"\n  }\n}\n"
  },
  {
    "path": "ProjectSettings/DynamicsManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!55 &1\nPhysicsManager:\n  m_ObjectHideFlags: 0\n  serializedVersion: 11\n  m_Gravity: {x: 0, y: -9.81, z: 0}\n  m_DefaultMaterial: {fileID: 0}\n  m_BounceThreshold: 2\n  m_SleepThreshold: 0.005\n  m_DefaultContactOffset: 0.01\n  m_DefaultSolverIterations: 6\n  m_DefaultSolverVelocityIterations: 1\n  m_QueriesHitBackfaces: 0\n  m_QueriesHitTriggers: 1\n  m_EnableAdaptiveForce: 0\n  m_ClothInterCollisionDistance: 0\n  m_ClothInterCollisionStiffness: 0\n  m_ContactsGeneration: 1\n  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n  m_AutoSimulation: 1\n  m_AutoSyncTransforms: 0\n  m_ReuseCollisionCallbacks: 1\n  m_ClothInterCollisionSettingsToggle: 0\n  m_ContactPairsMode: 0\n  m_BroadphaseType: 0\n  m_WorldBounds:\n    m_Center: {x: 0, y: 0, z: 0}\n    m_Extent: {x: 250, y: 250, z: 250}\n  m_WorldSubdivisions: 8\n  m_FrictionType: 0\n  m_EnableEnhancedDeterminism: 0\n  m_EnableUnifiedHeightmaps: 1\n  m_DefaultMaxAngluarSpeed: 7\n"
  },
  {
    "path": "ProjectSettings/EditorBuildSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!1045 &1\nEditorBuildSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_Scenes: []\n  m_configObjects: {}\n"
  },
  {
    "path": "ProjectSettings/EditorSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!159 &1\nEditorSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 12\n  m_SerializationMode: 2\n  m_LineEndingsForNewScripts: 0\n  m_DefaultBehaviorMode: 0\n  m_PrefabRegularEnvironment: {fileID: 0}\n  m_PrefabUIEnvironment: {fileID: 0}\n  m_SpritePackerMode: 0\n  m_SpritePackerCacheSize: 10\n  m_SpritePackerPaddingPower: 1\n  m_Bc7TextureCompressor: 0\n  m_EtcTextureCompressorBehavior: 1\n  m_EtcTextureFastCompressor: 1\n  m_EtcTextureNormalCompressor: 2\n  m_EtcTextureBestCompressor: 4\n  m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref\n  m_ProjectGenerationRootNamespace: \n  m_EnableTextureStreamingInEditMode: 1\n  m_EnableTextureStreamingInPlayMode: 1\n  m_EnableEditorAsyncCPUTextureLoading: 0\n  m_AsyncShaderCompilation: 1\n  m_PrefabModeAllowAutoSave: 1\n  m_EnterPlayModeOptionsEnabled: 1\n  m_EnterPlayModeOptions: 3\n  m_GameObjectNamingDigits: 1\n  m_GameObjectNamingScheme: 0\n  m_AssetNamingUsesSpace: 1\n  m_InspectorUseIMGUIDefaultInspector: 0\n  m_UseLegacyProbeSampleCount: 0\n  m_SerializeInlineMappingsOnOneLine: 1\n  m_DisableCookiesInLightmapper: 0\n  m_AssetPipelineMode: 1\n  m_RefreshImportMode: 0\n  m_CacheServerMode: 0\n  m_CacheServerEndpoint: \n  m_CacheServerNamespacePrefix: default\n  m_CacheServerEnableDownload: 1\n  m_CacheServerEnableUpload: 1\n  m_CacheServerEnableAuth: 0\n  m_CacheServerEnableTls: 0\n  m_CacheServerValidationMode: 2\n  m_CacheServerDownloadBatchSize: 128\n  m_EnableEnlightenBakedGI: 0\n"
  },
  {
    "path": "ProjectSettings/GraphicsSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!30 &1\nGraphicsSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 13\n  m_Deferred:\n    m_Mode: 1\n    m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}\n  m_DeferredReflections:\n    m_Mode: 1\n    m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}\n  m_ScreenSpaceShadows:\n    m_Mode: 1\n    m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}\n  m_LegacyDeferred:\n    m_Mode: 1\n    m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}\n  m_DepthNormals:\n    m_Mode: 1\n    m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}\n  m_MotionVectors:\n    m_Mode: 1\n    m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}\n  m_LightHalo:\n    m_Mode: 1\n    m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}\n  m_LensFlare:\n    m_Mode: 1\n    m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}\n  m_AlwaysIncludedShaders:\n  - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}\n  - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}\n  - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}\n  - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}\n  - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}\n  - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}\n  m_PreloadedShaders: []\n  m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,\n    type: 0}\n  m_CustomRenderPipeline: {fileID: 0}\n  m_TransparencySortMode: 0\n  m_TransparencySortAxis: {x: 0, y: 0, z: 1}\n  m_DefaultRenderingPath: 1\n  m_DefaultMobileRenderingPath: 1\n  m_TierSettings: []\n  m_LightmapStripping: 0\n  m_FogStripping: 0\n  m_InstancingStripping: 0\n  m_LightmapKeepPlain: 1\n  m_LightmapKeepDirCombined: 1\n  m_LightmapKeepDynamicPlain: 1\n  m_LightmapKeepDynamicDirCombined: 1\n  m_LightmapKeepShadowMask: 1\n  m_LightmapKeepSubtractive: 1\n  m_FogKeepLinear: 1\n  m_FogKeepExp: 1\n  m_FogKeepExp2: 1\n  m_AlbedoSwatchInfos: []\n  m_LightsUseLinearIntensity: 0\n  m_LightsUseColorTemperature: 0\n  m_LogWhenShaderIsCompiled: 0\n  m_AllowEnlightenSupportForUpgradedProject: 0\n"
  },
  {
    "path": "ProjectSettings/InputManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!13 &1\nInputManager:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_Axes:\n  - serializedVersion: 3\n    m_Name: Horizontal\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: left\n    positiveButton: right\n    altNegativeButton: a\n    altPositiveButton: d\n    gravity: 3\n    dead: 0.001\n    sensitivity: 3\n    snap: 1\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Vertical\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: down\n    positiveButton: up\n    altNegativeButton: s\n    altPositiveButton: w\n    gravity: 3\n    dead: 0.001\n    sensitivity: 3\n    snap: 1\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Fire1\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: left ctrl\n    altNegativeButton: \n    altPositiveButton: mouse 0\n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Fire2\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: left alt\n    altNegativeButton: \n    altPositiveButton: mouse 1\n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Fire3\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: left shift\n    altNegativeButton: \n    altPositiveButton: mouse 2\n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Jump\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: space\n    altNegativeButton: \n    altPositiveButton: \n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Mouse X\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: \n    altNegativeButton: \n    altPositiveButton: \n    gravity: 0\n    dead: 0\n    sensitivity: 0.1\n    snap: 0\n    invert: 0\n    type: 1\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Mouse Y\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: \n    altNegativeButton: \n    altPositiveButton: \n    gravity: 0\n    dead: 0\n    sensitivity: 0.1\n    snap: 0\n    invert: 0\n    type: 1\n    axis: 1\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Mouse ScrollWheel\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: \n    altNegativeButton: \n    altPositiveButton: \n    gravity: 0\n    dead: 0\n    sensitivity: 0.1\n    snap: 0\n    invert: 0\n    type: 1\n    axis: 2\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Horizontal\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: \n    altNegativeButton: \n    altPositiveButton: \n    gravity: 0\n    dead: 0.19\n    sensitivity: 1\n    snap: 0\n    invert: 0\n    type: 2\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Vertical\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: \n    altNegativeButton: \n    altPositiveButton: \n    gravity: 0\n    dead: 0.19\n    sensitivity: 1\n    snap: 0\n    invert: 1\n    type: 2\n    axis: 1\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Fire1\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: joystick button 0\n    altNegativeButton: \n    altPositiveButton: \n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Fire2\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: joystick button 1\n    altNegativeButton: \n    altPositiveButton: \n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Fire3\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: joystick button 2\n    altNegativeButton: \n    altPositiveButton: \n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Jump\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: joystick button 3\n    altNegativeButton: \n    altPositiveButton: \n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Submit\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: return\n    altNegativeButton: \n    altPositiveButton: joystick button 0\n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Submit\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: enter\n    altNegativeButton: \n    altPositiveButton: space\n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n  - serializedVersion: 3\n    m_Name: Cancel\n    descriptiveName: \n    descriptiveNegativeName: \n    negativeButton: \n    positiveButton: escape\n    altNegativeButton: \n    altPositiveButton: joystick button 1\n    gravity: 1000\n    dead: 0.001\n    sensitivity: 1000\n    snap: 0\n    invert: 0\n    type: 0\n    axis: 0\n    joyNum: 0\n"
  },
  {
    "path": "ProjectSettings/MemorySettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!387306366 &1\nMemorySettings:\n  m_ObjectHideFlags: 0\n  m_EditorMemorySettings:\n    m_MainAllocatorBlockSize: -1\n    m_ThreadAllocatorBlockSize: -1\n    m_MainGfxBlockSize: -1\n    m_ThreadGfxBlockSize: -1\n    m_CacheBlockSize: -1\n    m_TypetreeBlockSize: -1\n    m_ProfilerBlockSize: -1\n    m_ProfilerEditorBlockSize: -1\n    m_BucketAllocatorGranularity: -1\n    m_BucketAllocatorBucketsCount: -1\n    m_BucketAllocatorBlockSize: -1\n    m_BucketAllocatorBlockCount: -1\n    m_ProfilerBucketAllocatorGranularity: -1\n    m_ProfilerBucketAllocatorBucketsCount: -1\n    m_ProfilerBucketAllocatorBlockSize: -1\n    m_ProfilerBucketAllocatorBlockCount: -1\n    m_TempAllocatorSizeMain: -1\n    m_JobTempAllocatorBlockSize: -1\n    m_BackgroundJobTempAllocatorBlockSize: -1\n    m_JobTempAllocatorReducedBlockSize: -1\n    m_TempAllocatorSizeGIBakingWorker: -1\n    m_TempAllocatorSizeNavMeshWorker: -1\n    m_TempAllocatorSizeAudioWorker: -1\n    m_TempAllocatorSizeCloudWorker: -1\n    m_TempAllocatorSizeGfx: -1\n    m_TempAllocatorSizeJobWorker: -1\n    m_TempAllocatorSizeBackgroundWorker: -1\n    m_TempAllocatorSizePreloadManager: -1\n  m_PlatformMemorySettings: {}\n"
  },
  {
    "path": "ProjectSettings/NavMeshAreas.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!126 &1\nNavMeshProjectSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  areas:\n  - name: Walkable\n    cost: 1\n  - name: Not Walkable\n    cost: 1\n  - name: Jump\n    cost: 2\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  - name: \n    cost: 1\n  m_LastAgentTypeID: -887442657\n  m_Settings:\n  - serializedVersion: 2\n    agentTypeID: 0\n    agentRadius: 0.5\n    agentHeight: 2\n    agentSlope: 45\n    agentClimb: 0.75\n    ledgeDropHeight: 0\n    maxJumpAcrossDistance: 0\n    minRegionArea: 2\n    manualCellSize: 0\n    cellSize: 0.16666667\n    manualTileSize: 0\n    tileSize: 256\n    accuratePlacement: 0\n    debug:\n      m_Flags: 0\n  m_SettingNames:\n  - Humanoid\n"
  },
  {
    "path": "ProjectSettings/PackageManagerSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!114 &1\nMonoBehaviour:\n  m_ObjectHideFlags: 61\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 0}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}\n  m_Name: \n  m_EditorClassIdentifier: \n  m_EnablePreReleasePackages: 0\n  m_EnablePackageDependencies: 0\n  m_AdvancedSettingsExpanded: 1\n  m_ScopedRegistriesSettingsExpanded: 1\n  m_SeeAllPackageVersions: 0\n  oneTimeWarningShown: 0\n  m_Registries:\n  - m_Id: main\n    m_Name: \n    m_Url: https://packages.unity.com\n    m_Scopes: []\n    m_IsDefault: 1\n    m_Capabilities: 7\n  m_UserSelectedRegistryName: \n  m_UserAddingNewScopedRegistry: 0\n  m_RegistryInfoDraft:\n    m_Modified: 0\n    m_ErrorMessage: \n    m_UserModificationsInstanceId: -830\n    m_OriginalInstanceId: -832\n  m_LoadAssets: 0\n"
  },
  {
    "path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json",
    "content": "{\n    \"m_Dictionary\": {\n        \"m_DictionaryValues\": []\n    }\n}"
  },
  {
    "path": "ProjectSettings/Physics2DSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!19 &1\nPhysics2DSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 4\n  m_Gravity: {x: 0, y: -9.81}\n  m_DefaultMaterial: {fileID: 0}\n  m_VelocityIterations: 8\n  m_PositionIterations: 3\n  m_VelocityThreshold: 1\n  m_MaxLinearCorrection: 0.2\n  m_MaxAngularCorrection: 8\n  m_MaxTranslationSpeed: 100\n  m_MaxRotationSpeed: 360\n  m_BaumgarteScale: 0.2\n  m_BaumgarteTimeOfImpactScale: 0.75\n  m_TimeToSleep: 0.5\n  m_LinearSleepTolerance: 0.01\n  m_AngularSleepTolerance: 2\n  m_DefaultContactOffset: 0.01\n  m_JobOptions:\n    serializedVersion: 2\n    useMultithreading: 0\n    useConsistencySorting: 0\n    m_InterpolationPosesPerJob: 100\n    m_NewContactsPerJob: 30\n    m_CollideContactsPerJob: 100\n    m_ClearFlagsPerJob: 200\n    m_ClearBodyForcesPerJob: 200\n    m_SyncDiscreteFixturesPerJob: 50\n    m_SyncContinuousFixturesPerJob: 50\n    m_FindNearestContactsPerJob: 100\n    m_UpdateTriggerContactsPerJob: 100\n    m_IslandSolverCostThreshold: 100\n    m_IslandSolverBodyCostScale: 1\n    m_IslandSolverContactCostScale: 10\n    m_IslandSolverJointCostScale: 10\n    m_IslandSolverBodiesPerJob: 50\n    m_IslandSolverContactsPerJob: 50\n  m_AutoSimulation: 1\n  m_QueriesHitTriggers: 1\n  m_QueriesStartInColliders: 1\n  m_CallbacksOnDisable: 1\n  m_ReuseCollisionCallbacks: 1\n  m_AutoSyncTransforms: 0\n  m_AlwaysShowColliders: 0\n  m_ShowColliderSleep: 1\n  m_ShowColliderContacts: 0\n  m_ShowColliderAABB: 0\n  m_ContactArrowScale: 0.2\n  m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}\n  m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}\n  m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}\n  m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}\n  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n"
  },
  {
    "path": "ProjectSettings/PresetManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!1386491679 &1\nPresetManager:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_DefaultPresets: {}\n"
  },
  {
    "path": "ProjectSettings/ProjectSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!129 &1\nPlayerSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 26\n  productGUID: 15fdc041956714e4fb8c47bde0aa2e9e\n  AndroidProfiler: 0\n  AndroidFilterTouchesWhenObscured: 0\n  AndroidEnableSustainedPerformanceMode: 0\n  defaultScreenOrientation: 4\n  targetDevice: 2\n  useOnDemandResources: 0\n  accelerometerFrequency: 60\n  companyName: AnnulusGames\n  productName: BurstLinq\n  defaultCursor: {fileID: 0}\n  cursorHotspot: {x: 0, y: 0}\n  m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}\n  m_ShowUnitySplashScreen: 0\n  m_ShowUnitySplashLogo: 1\n  m_SplashScreenOverlayOpacity: 1\n  m_SplashScreenAnimation: 1\n  m_SplashScreenLogoStyle: 1\n  m_SplashScreenDrawMode: 0\n  m_SplashScreenBackgroundAnimationZoom: 1\n  m_SplashScreenLogoAnimationZoom: 1\n  m_SplashScreenBackgroundLandscapeAspect: 1\n  m_SplashScreenBackgroundPortraitAspect: 1\n  m_SplashScreenBackgroundLandscapeUvs:\n    serializedVersion: 2\n    x: 0\n    y: 0\n    width: 1\n    height: 1\n  m_SplashScreenBackgroundPortraitUvs:\n    serializedVersion: 2\n    x: 0\n    y: 0\n    width: 1\n    height: 1\n  m_SplashScreenLogos: []\n  m_VirtualRealitySplashScreen: {fileID: 0}\n  m_HolographicTrackingLossScreen: {fileID: 0}\n  defaultScreenWidth: 1920\n  defaultScreenHeight: 1080\n  defaultScreenWidthWeb: 960\n  defaultScreenHeightWeb: 600\n  m_StereoRenderingPath: 0\n  m_ActiveColorSpace: 0\n  m_SpriteBatchVertexThreshold: 300\n  m_MTRendering: 1\n  mipStripping: 0\n  numberOfMipsStripped: 0\n  numberOfMipsStrippedPerMipmapLimitGroup: {}\n  m_StackTraceTypes: 010000000100000001000000010000000100000001000000\n  iosShowActivityIndicatorOnLoading: -1\n  androidShowActivityIndicatorOnLoading: -1\n  iosUseCustomAppBackgroundBehavior: 0\n  allowedAutorotateToPortrait: 1\n  allowedAutorotateToPortraitUpsideDown: 1\n  allowedAutorotateToLandscapeRight: 1\n  allowedAutorotateToLandscapeLeft: 1\n  useOSAutorotation: 1\n  use32BitDisplayBuffer: 1\n  preserveFramebufferAlpha: 0\n  disableDepthAndStencilBuffers: 0\n  androidStartInFullscreen: 1\n  androidRenderOutsideSafeArea: 1\n  androidUseSwappy: 1\n  androidBlitType: 0\n  androidResizableWindow: 0\n  androidDefaultWindowWidth: 1920\n  androidDefaultWindowHeight: 1080\n  androidMinimumWindowWidth: 400\n  androidMinimumWindowHeight: 300\n  androidFullscreenMode: 1\n  defaultIsNativeResolution: 1\n  macRetinaSupport: 1\n  runInBackground: 1\n  captureSingleScreen: 0\n  muteOtherAudioSources: 0\n  Prepare IOS For Recording: 0\n  Force IOS Speakers When Recording: 0\n  deferSystemGesturesMode: 0\n  hideHomeButton: 0\n  submitAnalytics: 1\n  usePlayerLog: 1\n  bakeCollisionMeshes: 0\n  forceSingleInstance: 0\n  useFlipModelSwapchain: 1\n  resizableWindow: 1\n  useMacAppStoreValidation: 0\n  macAppStoreCategory: public.app-category.games\n  gpuSkinning: 1\n  xboxPIXTextureCapture: 0\n  xboxEnableAvatar: 0\n  xboxEnableKinect: 0\n  xboxEnableKinectAutoTracking: 0\n  xboxEnableFitness: 0\n  visibleInBackground: 1\n  allowFullscreenSwitch: 1\n  fullscreenMode: 3\n  xboxSpeechDB: 0\n  xboxEnableHeadOrientation: 0\n  xboxEnableGuest: 0\n  xboxEnablePIXSampling: 0\n  metalFramebufferOnly: 0\n  xboxOneResolution: 0\n  xboxOneSResolution: 0\n  xboxOneXResolution: 3\n  xboxOneMonoLoggingLevel: 0\n  xboxOneLoggingLevel: 1\n  xboxOneDisableEsram: 0\n  xboxOneEnableTypeOptimization: 0\n  xboxOnePresentImmediateThreshold: 0\n  switchQueueCommandMemory: 0\n  switchQueueControlMemory: 16384\n  switchQueueComputeMemory: 262144\n  switchNVNShaderPoolsGranularity: 33554432\n  switchNVNDefaultPoolsGranularity: 16777216\n  switchNVNOtherPoolsGranularity: 16777216\n  switchGpuScratchPoolGranularity: 2097152\n  switchAllowGpuScratchShrinking: 0\n  switchNVNMaxPublicTextureIDCount: 0\n  switchNVNMaxPublicSamplerIDCount: 0\n  switchNVNGraphicsFirmwareMemory: 32\n  stadiaPresentMode: 0\n  stadiaTargetFramerate: 0\n  vulkanNumSwapchainBuffers: 3\n  vulkanEnableSetSRGBWrite: 0\n  vulkanEnablePreTransform: 1\n  vulkanEnableLateAcquireNextImage: 0\n  vulkanEnableCommandBufferRecycling: 1\n  loadStoreDebugModeEnabled: 0\n  bundleVersion: 0.1\n  preloadedAssets: []\n  metroInputSource: 0\n  wsaTransparentSwapchain: 0\n  m_HolographicPauseOnTrackingLoss: 1\n  xboxOneDisableKinectGpuReservation: 1\n  xboxOneEnable7thCore: 1\n  vrSettings:\n    enable360StereoCapture: 0\n  isWsaHolographicRemotingEnabled: 0\n  enableFrameTimingStats: 0\n  enableOpenGLProfilerGPURecorders: 1\n  useHDRDisplay: 0\n  hdrBitDepth: 0\n  m_ColorGamuts: 00000000\n  targetPixelDensity: 30\n  resolutionScalingMode: 0\n  resetResolutionOnWindowResize: 0\n  androidSupportedAspectRatio: 1\n  androidMaxAspectRatio: 2.1\n  applicationIdentifier:\n    Standalone: com.AnnulusGames.BurstLinq\n  buildNumber:\n    Standalone: 0\n    VisionOS: 0\n    iPhone: 0\n    tvOS: 0\n  overrideDefaultApplicationIdentifier: 0\n  AndroidBundleVersionCode: 1\n  AndroidMinSdkVersion: 22\n  AndroidTargetSdkVersion: 0\n  AndroidPreferredInstallLocation: 1\n  aotOptions: nimt-trampolines=1024\n  stripEngineCode: 1\n  iPhoneStrippingLevel: 0\n  iPhoneScriptCallOptimization: 0\n  ForceInternetPermission: 0\n  ForceSDCardPermission: 0\n  CreateWallpaper: 0\n  APKExpansionFiles: 0\n  keepLoadedShadersAlive: 0\n  StripUnusedMeshComponents: 1\n  strictShaderVariantMatching: 0\n  VertexChannelCompressionMask: 4054\n  iPhoneSdkVersion: 988\n  iOSTargetOSVersionString: 12.0\n  tvOSSdkVersion: 0\n  tvOSRequireExtendedGameController: 0\n  tvOSTargetOSVersionString: 12.0\n  VisionOSSdkVersion: 0\n  VisionOSTargetOSVersionString: 1.0\n  uIPrerenderedIcon: 0\n  uIRequiresPersistentWiFi: 0\n  uIRequiresFullScreen: 1\n  uIStatusBarHidden: 1\n  uIExitOnSuspend: 0\n  uIStatusBarStyle: 0\n  appleTVSplashScreen: {fileID: 0}\n  appleTVSplashScreen2x: {fileID: 0}\n  tvOSSmallIconLayers: []\n  tvOSSmallIconLayers2x: []\n  tvOSLargeIconLayers: []\n  tvOSLargeIconLayers2x: []\n  tvOSTopShelfImageLayers: []\n  tvOSTopShelfImageLayers2x: []\n  tvOSTopShelfImageWideLayers: []\n  tvOSTopShelfImageWideLayers2x: []\n  iOSLaunchScreenType: 0\n  iOSLaunchScreenPortrait: {fileID: 0}\n  iOSLaunchScreenLandscape: {fileID: 0}\n  iOSLaunchScreenBackgroundColor:\n    serializedVersion: 2\n    rgba: 0\n  iOSLaunchScreenFillPct: 100\n  iOSLaunchScreenSize: 100\n  iOSLaunchScreenCustomXibPath: \n  iOSLaunchScreeniPadType: 0\n  iOSLaunchScreeniPadImage: {fileID: 0}\n  iOSLaunchScreeniPadBackgroundColor:\n    serializedVersion: 2\n    rgba: 0\n  iOSLaunchScreeniPadFillPct: 100\n  iOSLaunchScreeniPadSize: 100\n  iOSLaunchScreeniPadCustomXibPath: \n  iOSLaunchScreenCustomStoryboardPath: \n  iOSLaunchScreeniPadCustomStoryboardPath: \n  iOSDeviceRequirements: []\n  iOSURLSchemes: []\n  macOSURLSchemes: []\n  iOSBackgroundModes: 0\n  iOSMetalForceHardShadows: 0\n  metalEditorSupport: 1\n  metalAPIValidation: 1\n  iOSRenderExtraFrameOnPause: 0\n  iosCopyPluginsCodeInsteadOfSymlink: 0\n  appleDeveloperTeamID: \n  iOSManualSigningProvisioningProfileID: \n  tvOSManualSigningProvisioningProfileID: \n  VisionOSManualSigningProvisioningProfileID: \n  iOSManualSigningProvisioningProfileType: 0\n  tvOSManualSigningProvisioningProfileType: 0\n  VisionOSManualSigningProvisioningProfileType: 0\n  appleEnableAutomaticSigning: 0\n  iOSRequireARKit: 0\n  iOSAutomaticallyDetectAndAddCapabilities: 1\n  appleEnableProMotion: 0\n  shaderPrecisionModel: 0\n  clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea\n  templatePackageId: com.unity.template.3d@8.1.1\n  templateDefaultScene: Assets/Scenes/SampleScene.unity\n  useCustomMainManifest: 0\n  useCustomLauncherManifest: 0\n  useCustomMainGradleTemplate: 0\n  useCustomLauncherGradleManifest: 0\n  useCustomBaseGradleTemplate: 0\n  useCustomGradlePropertiesTemplate: 0\n  useCustomGradleSettingsTemplate: 0\n  useCustomProguardFile: 0\n  AndroidTargetArchitectures: 1\n  AndroidTargetDevices: 0\n  AndroidSplashScreenScale: 0\n  androidSplashScreen: {fileID: 0}\n  AndroidKeystoreName: \n  AndroidKeyaliasName: \n  AndroidEnableArmv9SecurityFeatures: 0\n  AndroidBuildApkPerCpuArchitecture: 0\n  AndroidTVCompatibility: 0\n  AndroidIsGame: 1\n  AndroidEnableTango: 0\n  androidEnableBanner: 1\n  androidUseLowAccuracyLocation: 0\n  androidUseCustomKeystore: 0\n  m_AndroidBanners:\n  - width: 320\n    height: 180\n    banner: {fileID: 0}\n  androidGamepadSupportLevel: 0\n  chromeosInputEmulation: 1\n  AndroidMinifyRelease: 0\n  AndroidMinifyDebug: 0\n  AndroidValidateAppBundleSize: 1\n  AndroidAppBundleSizeToValidate: 150\n  m_BuildTargetIcons: []\n  m_BuildTargetPlatformIcons:\n  - m_BuildTarget: iPhone\n    m_Icons:\n    - m_Textures: []\n      m_Width: 180\n      m_Height: 180\n      m_Kind: 0\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 120\n      m_Height: 120\n      m_Kind: 0\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 167\n      m_Height: 167\n      m_Kind: 0\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 152\n      m_Height: 152\n      m_Kind: 0\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 76\n      m_Height: 76\n      m_Kind: 0\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 120\n      m_Height: 120\n      m_Kind: 3\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 80\n      m_Height: 80\n      m_Kind: 3\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 80\n      m_Height: 80\n      m_Kind: 3\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 40\n      m_Height: 40\n      m_Kind: 3\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 87\n      m_Height: 87\n      m_Kind: 1\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 58\n      m_Height: 58\n      m_Kind: 1\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 29\n      m_Height: 29\n      m_Kind: 1\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 58\n      m_Height: 58\n      m_Kind: 1\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 29\n      m_Height: 29\n      m_Kind: 1\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 60\n      m_Height: 60\n      m_Kind: 2\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 40\n      m_Height: 40\n      m_Kind: 2\n      m_SubKind: iPhone\n    - m_Textures: []\n      m_Width: 40\n      m_Height: 40\n      m_Kind: 2\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 20\n      m_Height: 20\n      m_Kind: 2\n      m_SubKind: iPad\n    - m_Textures: []\n      m_Width: 1024\n      m_Height: 1024\n      m_Kind: 4\n      m_SubKind: App Store\n  - m_BuildTarget: Android\n    m_Icons:\n    - m_Textures: []\n      m_Width: 432\n      m_Height: 432\n      m_Kind: 2\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 324\n      m_Height: 324\n      m_Kind: 2\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 216\n      m_Height: 216\n      m_Kind: 2\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 162\n      m_Height: 162\n      m_Kind: 2\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 108\n      m_Height: 108\n      m_Kind: 2\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 81\n      m_Height: 81\n      m_Kind: 2\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 192\n      m_Height: 192\n      m_Kind: 1\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 144\n      m_Height: 144\n      m_Kind: 1\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 96\n      m_Height: 96\n      m_Kind: 1\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 72\n      m_Height: 72\n      m_Kind: 1\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 48\n      m_Height: 48\n      m_Kind: 1\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 36\n      m_Height: 36\n      m_Kind: 1\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 192\n      m_Height: 192\n      m_Kind: 0\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 144\n      m_Height: 144\n      m_Kind: 0\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 96\n      m_Height: 96\n      m_Kind: 0\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 72\n      m_Height: 72\n      m_Kind: 0\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 48\n      m_Height: 48\n      m_Kind: 0\n      m_SubKind: \n    - m_Textures: []\n      m_Width: 36\n      m_Height: 36\n      m_Kind: 0\n      m_SubKind: \n  m_BuildTargetBatching:\n  - m_BuildTarget: Standalone\n    m_StaticBatching: 1\n    m_DynamicBatching: 0\n  - m_BuildTarget: tvOS\n    m_StaticBatching: 1\n    m_DynamicBatching: 0\n  - m_BuildTarget: Android\n    m_StaticBatching: 1\n    m_DynamicBatching: 0\n  - m_BuildTarget: iPhone\n    m_StaticBatching: 1\n    m_DynamicBatching: 0\n  - m_BuildTarget: WebGL\n    m_StaticBatching: 0\n    m_DynamicBatching: 0\n  m_BuildTargetShaderSettings: []\n  m_BuildTargetGraphicsJobs:\n  - m_BuildTarget: MacStandaloneSupport\n    m_GraphicsJobs: 0\n  - m_BuildTarget: Switch\n    m_GraphicsJobs: 1\n  - m_BuildTarget: MetroSupport\n    m_GraphicsJobs: 1\n  - m_BuildTarget: AppleTVSupport\n    m_GraphicsJobs: 0\n  - m_BuildTarget: BJMSupport\n    m_GraphicsJobs: 1\n  - m_BuildTarget: LinuxStandaloneSupport\n    m_GraphicsJobs: 1\n  - m_BuildTarget: PS4Player\n    m_GraphicsJobs: 1\n  - m_BuildTarget: iOSSupport\n    m_GraphicsJobs: 0\n  - m_BuildTarget: WindowsStandaloneSupport\n    m_GraphicsJobs: 1\n  - m_BuildTarget: XboxOnePlayer\n    m_GraphicsJobs: 1\n  - m_BuildTarget: LuminSupport\n    m_GraphicsJobs: 0\n  - m_BuildTarget: AndroidPlayer\n    m_GraphicsJobs: 0\n  - m_BuildTarget: WebGLSupport\n    m_GraphicsJobs: 0\n  m_BuildTargetGraphicsJobMode:\n  - m_BuildTarget: PS4Player\n    m_GraphicsJobMode: 0\n  - m_BuildTarget: XboxOnePlayer\n    m_GraphicsJobMode: 0\n  m_BuildTargetGraphicsAPIs:\n  - m_BuildTarget: AndroidPlayer\n    m_APIs: 150000000b000000\n    m_Automatic: 1\n  - m_BuildTarget: iOSSupport\n    m_APIs: 10000000\n    m_Automatic: 1\n  - m_BuildTarget: AppleTVSupport\n    m_APIs: 10000000\n    m_Automatic: 1\n  - m_BuildTarget: WebGLSupport\n    m_APIs: 0b000000\n    m_Automatic: 1\n  m_BuildTargetVRSettings:\n  - m_BuildTarget: Standalone\n    m_Enabled: 0\n    m_Devices:\n    - Oculus\n    - OpenVR\n  m_DefaultShaderChunkSizeInMB: 16\n  m_DefaultShaderChunkCount: 0\n  openGLRequireES31: 0\n  openGLRequireES31AEP: 0\n  openGLRequireES32: 0\n  m_TemplateCustomTags: {}\n  mobileMTRendering:\n    Android: 1\n    iPhone: 1\n    tvOS: 1\n  m_BuildTargetGroupLightmapEncodingQuality:\n  - m_BuildTarget: Android\n    m_EncodingQuality: 1\n  - m_BuildTarget: iPhone\n    m_EncodingQuality: 1\n  - m_BuildTarget: tvOS\n    m_EncodingQuality: 1\n  m_BuildTargetGroupHDRCubemapEncodingQuality:\n  - m_BuildTarget: Android\n    m_EncodingQuality: 1\n  - m_BuildTarget: iPhone\n    m_EncodingQuality: 1\n  - m_BuildTarget: tvOS\n    m_EncodingQuality: 1\n  m_BuildTargetGroupLightmapSettings: []\n  m_BuildTargetGroupLoadStoreDebugModeSettings: []\n  m_BuildTargetNormalMapEncoding:\n  - m_BuildTarget: Android\n    m_Encoding: 1\n  - m_BuildTarget: iPhone\n    m_Encoding: 1\n  - m_BuildTarget: tvOS\n    m_Encoding: 1\n  m_BuildTargetDefaultTextureCompressionFormat:\n  - m_BuildTarget: Android\n    m_Format: 3\n  playModeTestRunnerEnabled: 0\n  runPlayModeTestAsEditModeTest: 0\n  actionOnDotNetUnhandledException: 1\n  enableInternalProfiler: 0\n  logObjCUncaughtExceptions: 1\n  enableCrashReportAPI: 0\n  cameraUsageDescription: \n  locationUsageDescription: \n  microphoneUsageDescription: \n  bluetoothUsageDescription: \n  macOSTargetOSVersion: 10.13.0\n  switchNMETAOverride: \n  switchNetLibKey: \n  switchSocketMemoryPoolSize: 6144\n  switchSocketAllocatorPoolSize: 128\n  switchSocketConcurrencyLimit: 14\n  switchScreenResolutionBehavior: 2\n  switchUseCPUProfiler: 0\n  switchUseGOLDLinker: 0\n  switchLTOSetting: 0\n  switchApplicationID: 0x01004b9000490000\n  switchNSODependencies: \n  switchCompilerFlags: \n  switchTitleNames_0: \n  switchTitleNames_1: \n  switchTitleNames_2: \n  switchTitleNames_3: \n  switchTitleNames_4: \n  switchTitleNames_5: \n  switchTitleNames_6: \n  switchTitleNames_7: \n  switchTitleNames_8: \n  switchTitleNames_9: \n  switchTitleNames_10: \n  switchTitleNames_11: \n  switchTitleNames_12: \n  switchTitleNames_13: \n  switchTitleNames_14: \n  switchTitleNames_15: \n  switchPublisherNames_0: \n  switchPublisherNames_1: \n  switchPublisherNames_2: \n  switchPublisherNames_3: \n  switchPublisherNames_4: \n  switchPublisherNames_5: \n  switchPublisherNames_6: \n  switchPublisherNames_7: \n  switchPublisherNames_8: \n  switchPublisherNames_9: \n  switchPublisherNames_10: \n  switchPublisherNames_11: \n  switchPublisherNames_12: \n  switchPublisherNames_13: \n  switchPublisherNames_14: \n  switchPublisherNames_15: \n  switchIcons_0: {fileID: 0}\n  switchIcons_1: {fileID: 0}\n  switchIcons_2: {fileID: 0}\n  switchIcons_3: {fileID: 0}\n  switchIcons_4: {fileID: 0}\n  switchIcons_5: {fileID: 0}\n  switchIcons_6: {fileID: 0}\n  switchIcons_7: {fileID: 0}\n  switchIcons_8: {fileID: 0}\n  switchIcons_9: {fileID: 0}\n  switchIcons_10: {fileID: 0}\n  switchIcons_11: {fileID: 0}\n  switchIcons_12: {fileID: 0}\n  switchIcons_13: {fileID: 0}\n  switchIcons_14: {fileID: 0}\n  switchIcons_15: {fileID: 0}\n  switchSmallIcons_0: {fileID: 0}\n  switchSmallIcons_1: {fileID: 0}\n  switchSmallIcons_2: {fileID: 0}\n  switchSmallIcons_3: {fileID: 0}\n  switchSmallIcons_4: {fileID: 0}\n  switchSmallIcons_5: {fileID: 0}\n  switchSmallIcons_6: {fileID: 0}\n  switchSmallIcons_7: {fileID: 0}\n  switchSmallIcons_8: {fileID: 0}\n  switchSmallIcons_9: {fileID: 0}\n  switchSmallIcons_10: {fileID: 0}\n  switchSmallIcons_11: {fileID: 0}\n  switchSmallIcons_12: {fileID: 0}\n  switchSmallIcons_13: {fileID: 0}\n  switchSmallIcons_14: {fileID: 0}\n  switchSmallIcons_15: {fileID: 0}\n  switchManualHTML: \n  switchAccessibleURLs: \n  switchLegalInformation: \n  switchMainThreadStackSize: 1048576\n  switchPresenceGroupId: \n  switchLogoHandling: 0\n  switchReleaseVersion: 0\n  switchDisplayVersion: 1.0.0\n  switchStartupUserAccount: 0\n  switchSupportedLanguagesMask: 0\n  switchLogoType: 0\n  switchApplicationErrorCodeCategory: \n  switchUserAccountSaveDataSize: 0\n  switchUserAccountSaveDataJournalSize: 0\n  switchApplicationAttribute: 0\n  switchCardSpecSize: -1\n  switchCardSpecClock: -1\n  switchRatingsMask: 0\n  switchRatingsInt_0: 0\n  switchRatingsInt_1: 0\n  switchRatingsInt_2: 0\n  switchRatingsInt_3: 0\n  switchRatingsInt_4: 0\n  switchRatingsInt_5: 0\n  switchRatingsInt_6: 0\n  switchRatingsInt_7: 0\n  switchRatingsInt_8: 0\n  switchRatingsInt_9: 0\n  switchRatingsInt_10: 0\n  switchRatingsInt_11: 0\n  switchRatingsInt_12: 0\n  switchLocalCommunicationIds_0: \n  switchLocalCommunicationIds_1: \n  switchLocalCommunicationIds_2: \n  switchLocalCommunicationIds_3: \n  switchLocalCommunicationIds_4: \n  switchLocalCommunicationIds_5: \n  switchLocalCommunicationIds_6: \n  switchLocalCommunicationIds_7: \n  switchParentalControl: 0\n  switchAllowsScreenshot: 1\n  switchAllowsVideoCapturing: 1\n  switchAllowsRuntimeAddOnContentInstall: 0\n  switchDataLossConfirmation: 0\n  switchUserAccountLockEnabled: 0\n  switchSystemResourceMemory: 16777216\n  switchSupportedNpadStyles: 22\n  switchNativeFsCacheSize: 32\n  switchIsHoldTypeHorizontal: 0\n  switchSupportedNpadCount: 8\n  switchEnableTouchScreen: 1\n  switchSocketConfigEnabled: 0\n  switchTcpInitialSendBufferSize: 32\n  switchTcpInitialReceiveBufferSize: 64\n  switchTcpAutoSendBufferSizeMax: 256\n  switchTcpAutoReceiveBufferSizeMax: 256\n  switchUdpSendBufferSize: 9\n  switchUdpReceiveBufferSize: 42\n  switchSocketBufferEfficiency: 4\n  switchSocketInitializeEnabled: 1\n  switchNetworkInterfaceManagerInitializeEnabled: 1\n  switchPlayerConnectionEnabled: 1\n  switchUseNewStyleFilepaths: 1\n  switchUseLegacyFmodPriorities: 0\n  switchUseMicroSleepForYield: 1\n  switchEnableRamDiskSupport: 0\n  switchMicroSleepForYieldTime: 25\n  switchRamDiskSpaceSize: 12\n  ps4NPAgeRating: 12\n  ps4NPTitleSecret: \n  ps4NPTrophyPackPath: \n  ps4ParentalLevel: 11\n  ps4ContentID: ED1633-NPXX51362_00-0000000000000000\n  ps4Category: 0\n  ps4MasterVersion: 01.00\n  ps4AppVersion: 01.00\n  ps4AppType: 0\n  ps4ParamSfxPath: \n  ps4VideoOutPixelFormat: 0\n  ps4VideoOutInitialWidth: 1920\n  ps4VideoOutBaseModeInitialWidth: 1920\n  ps4VideoOutReprojectionRate: 60\n  ps4PronunciationXMLPath: \n  ps4PronunciationSIGPath: \n  ps4BackgroundImagePath: \n  ps4StartupImagePath: \n  ps4StartupImagesFolder: \n  ps4IconImagesFolder: \n  ps4SaveDataImagePath: \n  ps4SdkOverride: \n  ps4BGMPath: \n  ps4ShareFilePath: \n  ps4ShareOverlayImagePath: \n  ps4PrivacyGuardImagePath: \n  ps4ExtraSceSysFile: \n  ps4NPtitleDatPath: \n  ps4RemotePlayKeyAssignment: -1\n  ps4RemotePlayKeyMappingDir: \n  ps4PlayTogetherPlayerCount: 0\n  ps4EnterButtonAssignment: 1\n  ps4ApplicationParam1: 0\n  ps4ApplicationParam2: 0\n  ps4ApplicationParam3: 0\n  ps4ApplicationParam4: 0\n  ps4DownloadDataSize: 0\n  ps4GarlicHeapSize: 2048\n  ps4ProGarlicHeapSize: 2560\n  playerPrefsMaxSize: 32768\n  ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ\n  ps4pnSessions: 1\n  ps4pnPresence: 1\n  ps4pnFriends: 1\n  ps4pnGameCustomData: 1\n  playerPrefsSupport: 0\n  enableApplicationExit: 0\n  resetTempFolder: 1\n  restrictedAudioUsageRights: 0\n  ps4UseResolutionFallback: 0\n  ps4ReprojectionSupport: 0\n  ps4UseAudio3dBackend: 0\n  ps4UseLowGarlicFragmentationMode: 1\n  ps4SocialScreenEnabled: 0\n  ps4ScriptOptimizationLevel: 0\n  ps4Audio3dVirtualSpeakerCount: 14\n  ps4attribCpuUsage: 0\n  ps4PatchPkgPath: \n  ps4PatchLatestPkgPath: \n  ps4PatchChangeinfoPath: \n  ps4PatchDayOne: 0\n  ps4attribUserManagement: 0\n  ps4attribMoveSupport: 0\n  ps4attrib3DSupport: 0\n  ps4attribShareSupport: 0\n  ps4attribExclusiveVR: 0\n  ps4disableAutoHideSplash: 0\n  ps4videoRecordingFeaturesUsed: 0\n  ps4contentSearchFeaturesUsed: 0\n  ps4CompatibilityPS5: 0\n  ps4AllowPS5Detection: 0\n  ps4GPU800MHz: 1\n  ps4attribEyeToEyeDistanceSettingVR: 0\n  ps4IncludedModules: []\n  ps4attribVROutputEnabled: 0\n  monoEnv: \n  splashScreenBackgroundSourceLandscape: {fileID: 0}\n  splashScreenBackgroundSourcePortrait: {fileID: 0}\n  blurSplashScreenBackground: 1\n  spritePackerPolicy: \n  webGLMemorySize: 16\n  webGLExceptionSupport: 1\n  webGLNameFilesAsHashes: 0\n  webGLShowDiagnostics: 0\n  webGLDataCaching: 1\n  webGLDebugSymbols: 0\n  webGLEmscriptenArgs: \n  webGLModulesDirectory: \n  webGLTemplate: APPLICATION:Default\n  webGLAnalyzeBuildSize: 0\n  webGLUseEmbeddedResources: 0\n  webGLCompressionFormat: 1\n  webGLWasmArithmeticExceptions: 0\n  webGLLinkerTarget: 1\n  webGLThreadsSupport: 0\n  webGLDecompressionFallback: 0\n  webGLInitialMemorySize: 32\n  webGLMaximumMemorySize: 2048\n  webGLMemoryGrowthMode: 2\n  webGLMemoryLinearGrowthStep: 16\n  webGLMemoryGeometricGrowthStep: 0.2\n  webGLMemoryGeometricGrowthCap: 96\n  webGLPowerPreference: 2\n  scriptingDefineSymbols:\n    Standalone: UNITY_BURST_EXPERIMENTAL_LOOP_INTRINSICS\n  additionalCompilerArguments: {}\n  platformArchitecture: {}\n  scriptingBackend:\n    Standalone: 1\n  il2cppCompilerConfiguration: {}\n  il2cppCodeGeneration: {}\n  managedStrippingLevel:\n    EmbeddedLinux: 1\n    GameCoreScarlett: 1\n    GameCoreXboxOne: 1\n    Nintendo Switch: 1\n    PS4: 1\n    PS5: 1\n    QNX: 1\n    Stadia: 1\n    VisionOS: 1\n    WebGL: 1\n    Windows Store Apps: 1\n    XboxOne: 1\n    iPhone: 1\n    tvOS: 1\n  incrementalIl2cppBuild: {}\n  suppressCommonWarnings: 1\n  allowUnsafeCode: 0\n  useDeterministicCompilation: 1\n  additionalIl2CppArgs: \n  scriptingRuntimeVersion: 1\n  gcIncremental: 1\n  gcWBarrierValidation: 0\n  apiCompatibilityLevelPerPlatform: {}\n  m_RenderingPath: 1\n  m_MobileRenderingPath: 1\n  metroPackageName: LinqJob\n  metroPackageVersion: \n  metroCertificatePath: \n  metroCertificatePassword: \n  metroCertificateSubject: \n  metroCertificateIssuer: \n  metroCertificateNotAfter: 0000000000000000\n  metroApplicationDescription: LinqJob\n  wsaImages: {}\n  metroTileShortName: \n  metroTileShowName: 0\n  metroMediumTileShowName: 0\n  metroLargeTileShowName: 0\n  metroWideTileShowName: 0\n  metroSupportStreamingInstall: 0\n  metroLastRequiredScene: 0\n  metroDefaultTileSize: 1\n  metroTileForegroundText: 2\n  metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}\n  metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}\n  metroSplashScreenUseBackgroundColor: 0\n  platformCapabilities: {}\n  metroTargetDeviceFamilies: {}\n  metroFTAName: \n  metroFTAFileTypes: []\n  metroProtocolName: \n  vcxProjDefaultLanguage: \n  XboxOneProductId: \n  XboxOneUpdateKey: \n  XboxOneSandboxId: \n  XboxOneContentId: \n  XboxOneTitleId: \n  XboxOneSCId: \n  XboxOneGameOsOverridePath: \n  XboxOnePackagingOverridePath: \n  XboxOneAppManifestOverridePath: \n  XboxOneVersion: 1.0.0.0\n  XboxOnePackageEncryption: 0\n  XboxOnePackageUpdateGranularity: 2\n  XboxOneDescription: \n  XboxOneLanguage:\n  - enus\n  XboxOneCapability: []\n  XboxOneGameRating: {}\n  XboxOneIsContentPackage: 0\n  XboxOneEnhancedXboxCompatibilityMode: 0\n  XboxOneEnableGPUVariability: 1\n  XboxOneSockets: {}\n  XboxOneSplashScreen: {fileID: 0}\n  XboxOneAllowedProductIds: []\n  XboxOnePersistentLocalStorageSize: 0\n  XboxOneXTitleMemory: 8\n  XboxOneOverrideIdentityName: \n  XboxOneOverrideIdentityPublisher: \n  vrEditorSettings: {}\n  cloudServicesEnabled:\n    UNet: 1\n  luminIcon:\n    m_Name: \n    m_ModelFolderPath: \n    m_PortalFolderPath: \n  luminCert:\n    m_CertPath: \n    m_SignPackage: 1\n  luminIsChannelApp: 0\n  luminVersion:\n    m_VersionCode: 1\n    m_VersionName: \n  hmiPlayerDataPath: \n  hmiForceSRGBBlit: 1\n  embeddedLinuxEnableGamepadInput: 1\n  hmiLogStartupTiming: 0\n  hmiCpuConfiguration: \n  apiCompatibilityLevel: 6\n  activeInputHandler: 0\n  windowsGamepadBackendHint: 0\n  cloudProjectId: \n  framebufferDepthMemorylessMode: 0\n  qualitySettingsNames: []\n  projectName: \n  organizationId: \n  cloudEnabled: 0\n  legacyClampBlendShapeWeights: 0\n  hmiLoadingImage: {fileID: 0}\n  platformRequiresReadableAssets: 0\n  virtualTexturingSupportEnabled: 0\n  insecureHttpOption: 0\n"
  },
  {
    "path": "ProjectSettings/ProjectVersion.txt",
    "content": "m_EditorVersion: 2022.3.7f1\nm_EditorVersionWithRevision: 2022.3.7f1 (b16b3b16c7a0)\n"
  },
  {
    "path": "ProjectSettings/QualitySettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!47 &1\nQualitySettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 5\n  m_CurrentQuality: 5\n  m_QualitySettings:\n  - serializedVersion: 2\n    name: Very Low\n    pixelLightCount: 0\n    shadows: 0\n    shadowResolution: 0\n    shadowProjection: 1\n    shadowCascades: 1\n    shadowDistance: 15\n    shadowNearPlaneOffset: 3\n    shadowCascade2Split: 0.33333334\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\n    shadowmaskMode: 0\n    blendWeights: 1\n    textureQuality: 1\n    anisotropicTextures: 0\n    antiAliasing: 0\n    softParticles: 0\n    softVegetation: 0\n    realtimeReflectionProbes: 0\n    billboardsFaceCameraPosition: 0\n    vSyncCount: 0\n    lodBias: 0.3\n    maximumLODLevel: 0\n    streamingMipmapsActive: 0\n    streamingMipmapsAddAllCameras: 1\n    streamingMipmapsMemoryBudget: 512\n    streamingMipmapsRenderersPerFrame: 512\n    streamingMipmapsMaxLevelReduction: 2\n    streamingMipmapsMaxFileIORequests: 1024\n    particleRaycastBudget: 4\n    asyncUploadTimeSlice: 2\n    asyncUploadBufferSize: 16\n    asyncUploadPersistentBuffer: 1\n    resolutionScalingFixedDPIFactor: 1\n    excludedTargetPlatforms: []\n  - serializedVersion: 2\n    name: Low\n    pixelLightCount: 0\n    shadows: 0\n    shadowResolution: 0\n    shadowProjection: 1\n    shadowCascades: 1\n    shadowDistance: 20\n    shadowNearPlaneOffset: 3\n    shadowCascade2Split: 0.33333334\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\n    shadowmaskMode: 0\n    blendWeights: 2\n    textureQuality: 0\n    anisotropicTextures: 0\n    antiAliasing: 0\n    softParticles: 0\n    softVegetation: 0\n    realtimeReflectionProbes: 0\n    billboardsFaceCameraPosition: 0\n    vSyncCount: 0\n    lodBias: 0.4\n    maximumLODLevel: 0\n    streamingMipmapsActive: 0\n    streamingMipmapsAddAllCameras: 1\n    streamingMipmapsMemoryBudget: 512\n    streamingMipmapsRenderersPerFrame: 512\n    streamingMipmapsMaxLevelReduction: 2\n    streamingMipmapsMaxFileIORequests: 1024\n    particleRaycastBudget: 16\n    asyncUploadTimeSlice: 2\n    asyncUploadBufferSize: 16\n    asyncUploadPersistentBuffer: 1\n    resolutionScalingFixedDPIFactor: 1\n    excludedTargetPlatforms: []\n  - serializedVersion: 2\n    name: Medium\n    pixelLightCount: 1\n    shadows: 1\n    shadowResolution: 0\n    shadowProjection: 1\n    shadowCascades: 1\n    shadowDistance: 20\n    shadowNearPlaneOffset: 3\n    shadowCascade2Split: 0.33333334\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\n    shadowmaskMode: 0\n    blendWeights: 2\n    textureQuality: 0\n    anisotropicTextures: 1\n    antiAliasing: 0\n    softParticles: 0\n    softVegetation: 0\n    realtimeReflectionProbes: 0\n    billboardsFaceCameraPosition: 0\n    vSyncCount: 1\n    lodBias: 0.7\n    maximumLODLevel: 0\n    streamingMipmapsActive: 0\n    streamingMipmapsAddAllCameras: 1\n    streamingMipmapsMemoryBudget: 512\n    streamingMipmapsRenderersPerFrame: 512\n    streamingMipmapsMaxLevelReduction: 2\n    streamingMipmapsMaxFileIORequests: 1024\n    particleRaycastBudget: 64\n    asyncUploadTimeSlice: 2\n    asyncUploadBufferSize: 16\n    asyncUploadPersistentBuffer: 1\n    resolutionScalingFixedDPIFactor: 1\n    excludedTargetPlatforms: []\n  - serializedVersion: 2\n    name: High\n    pixelLightCount: 2\n    shadows: 2\n    shadowResolution: 1\n    shadowProjection: 1\n    shadowCascades: 2\n    shadowDistance: 40\n    shadowNearPlaneOffset: 3\n    shadowCascade2Split: 0.33333334\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\n    shadowmaskMode: 1\n    blendWeights: 2\n    textureQuality: 0\n    anisotropicTextures: 1\n    antiAliasing: 0\n    softParticles: 0\n    softVegetation: 1\n    realtimeReflectionProbes: 1\n    billboardsFaceCameraPosition: 1\n    vSyncCount: 1\n    lodBias: 1\n    maximumLODLevel: 0\n    streamingMipmapsActive: 0\n    streamingMipmapsAddAllCameras: 1\n    streamingMipmapsMemoryBudget: 512\n    streamingMipmapsRenderersPerFrame: 512\n    streamingMipmapsMaxLevelReduction: 2\n    streamingMipmapsMaxFileIORequests: 1024\n    particleRaycastBudget: 256\n    asyncUploadTimeSlice: 2\n    asyncUploadBufferSize: 16\n    asyncUploadPersistentBuffer: 1\n    resolutionScalingFixedDPIFactor: 1\n    excludedTargetPlatforms: []\n  - serializedVersion: 2\n    name: Very High\n    pixelLightCount: 3\n    shadows: 2\n    shadowResolution: 2\n    shadowProjection: 1\n    shadowCascades: 2\n    shadowDistance: 70\n    shadowNearPlaneOffset: 3\n    shadowCascade2Split: 0.33333334\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\n    shadowmaskMode: 1\n    blendWeights: 4\n    textureQuality: 0\n    anisotropicTextures: 2\n    antiAliasing: 2\n    softParticles: 1\n    softVegetation: 1\n    realtimeReflectionProbes: 1\n    billboardsFaceCameraPosition: 1\n    vSyncCount: 1\n    lodBias: 1.5\n    maximumLODLevel: 0\n    streamingMipmapsActive: 0\n    streamingMipmapsAddAllCameras: 1\n    streamingMipmapsMemoryBudget: 512\n    streamingMipmapsRenderersPerFrame: 512\n    streamingMipmapsMaxLevelReduction: 2\n    streamingMipmapsMaxFileIORequests: 1024\n    particleRaycastBudget: 1024\n    asyncUploadTimeSlice: 2\n    asyncUploadBufferSize: 16\n    asyncUploadPersistentBuffer: 1\n    resolutionScalingFixedDPIFactor: 1\n    excludedTargetPlatforms: []\n  - serializedVersion: 2\n    name: Ultra\n    pixelLightCount: 4\n    shadows: 2\n    shadowResolution: 2\n    shadowProjection: 1\n    shadowCascades: 4\n    shadowDistance: 150\n    shadowNearPlaneOffset: 3\n    shadowCascade2Split: 0.33333334\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\n    shadowmaskMode: 1\n    blendWeights: 4\n    textureQuality: 0\n    anisotropicTextures: 2\n    antiAliasing: 2\n    softParticles: 1\n    softVegetation: 1\n    realtimeReflectionProbes: 1\n    billboardsFaceCameraPosition: 1\n    vSyncCount: 1\n    lodBias: 2\n    maximumLODLevel: 0\n    streamingMipmapsActive: 0\n    streamingMipmapsAddAllCameras: 1\n    streamingMipmapsMemoryBudget: 512\n    streamingMipmapsRenderersPerFrame: 512\n    streamingMipmapsMaxLevelReduction: 2\n    streamingMipmapsMaxFileIORequests: 1024\n    particleRaycastBudget: 4096\n    asyncUploadTimeSlice: 2\n    asyncUploadBufferSize: 16\n    asyncUploadPersistentBuffer: 1\n    resolutionScalingFixedDPIFactor: 1\n    excludedTargetPlatforms: []\n  m_PerPlatformDefaultQuality:\n    Android: 2\n    Lumin: 5\n    Nintendo 3DS: 5\n    Nintendo Switch: 5\n    PS4: 5\n    PSP2: 2\n    Stadia: 5\n    Standalone: 5\n    WebGL: 3\n    Windows Store Apps: 5\n    XboxOne: 5\n    iPhone: 2\n    tvOS: 2\n"
  },
  {
    "path": "ProjectSettings/SceneTemplateSettings.json",
    "content": "{\n    \"templatePinStates\": [],\n    \"dependencyTypeInfos\": [\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.AnimationClip\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEditor.Animations.AnimatorController\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.AnimatorOverrideController\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEditor.Audio.AudioMixerController\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.ComputeShader\",\n            \"defaultInstantiationMode\": 1\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Cubemap\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.GameObject\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEditor.LightingDataAsset\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.LightingSettings\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Material\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEditor.MonoScript\",\n            \"defaultInstantiationMode\": 1\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.PhysicMaterial\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.PhysicsMaterial2D\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Rendering.PostProcessing.PostProcessProfile\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Rendering.PostProcessing.PostProcessResources\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Rendering.VolumeProfile\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEditor.SceneAsset\",\n            \"defaultInstantiationMode\": 1\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Shader\",\n            \"defaultInstantiationMode\": 1\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.ShaderVariantCollection\",\n            \"defaultInstantiationMode\": 1\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Texture\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Texture2D\",\n            \"defaultInstantiationMode\": 0\n        },\n        {\n            \"userAdded\": false,\n            \"type\": \"UnityEngine.Timeline.TimelineAsset\",\n            \"defaultInstantiationMode\": 0\n        }\n    ],\n    \"defaultDependencyTypeInfo\": {\n        \"userAdded\": false,\n        \"type\": \"<default_scene_template_dependencies>\",\n        \"defaultInstantiationMode\": 1\n    },\n    \"newSceneOverride\": 0\n}"
  },
  {
    "path": "ProjectSettings/TagManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!78 &1\nTagManager:\n  serializedVersion: 2\n  tags: []\n  layers:\n  - Default\n  - TransparentFX\n  - Ignore Raycast\n  - \n  - Water\n  - UI\n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  - \n  m_SortingLayers:\n  - name: Default\n    uniqueID: 0\n    locked: 0\n"
  },
  {
    "path": "ProjectSettings/TimeManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!5 &1\nTimeManager:\n  m_ObjectHideFlags: 0\n  Fixed Timestep: 0.02\n  Maximum Allowed Timestep: 0.33333334\n  m_TimeScale: 1\n  Maximum Particle Timestep: 0.03\n"
  },
  {
    "path": "ProjectSettings/UnityConnectSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!310 &1\nUnityConnectSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 1\n  m_Enabled: 0\n  m_TestMode: 0\n  m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events\n  m_EventUrl: https://cdp.cloud.unity3d.com/v1/events\n  m_ConfigUrl: https://config.uca.cloud.unity3d.com\n  m_DashboardUrl: https://dashboard.unity3d.com\n  m_TestInitMode: 0\n  CrashReportingSettings:\n    m_EventUrl: https://perf-events.cloud.unity3d.com\n    m_Enabled: 0\n    m_LogBufferSize: 10\n    m_CaptureEditorExceptions: 1\n  UnityPurchasingSettings:\n    m_Enabled: 0\n    m_TestMode: 0\n  UnityAnalyticsSettings:\n    m_Enabled: 0\n    m_TestMode: 0\n    m_InitializeOnStartup: 1\n    m_PackageRequiringCoreStatsPresent: 0\n  UnityAdsSettings:\n    m_Enabled: 0\n    m_InitializeOnStartup: 1\n    m_TestMode: 0\n    m_IosGameId: \n    m_AndroidGameId: \n    m_GameIds: {}\n    m_GameId: \n  PerformanceReportingSettings:\n    m_Enabled: 0\n"
  },
  {
    "path": "ProjectSettings/VFXManager.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!937362698 &1\nVFXManager:\n  m_ObjectHideFlags: 0\n  m_IndirectShader: {fileID: 0}\n  m_CopyBufferShader: {fileID: 0}\n  m_SortShader: {fileID: 0}\n  m_StripUpdateShader: {fileID: 0}\n  m_RenderPipeSettingsPath: \n  m_FixedTimeStep: 0.016666668\n  m_MaxDeltaTime: 0.05\n"
  },
  {
    "path": "ProjectSettings/VersionControlSettings.asset",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!890905787 &1\nVersionControlSettings:\n  m_ObjectHideFlags: 0\n  m_Mode: Visible Meta Files\n  m_CollabEditorSettings:\n    inProgressEnabled: 1\n"
  },
  {
    "path": "ProjectSettings/XRSettings.asset",
    "content": "{\n    \"m_SettingKeys\": [\n        \"VR Device Disabled\",\n        \"VR Device User Alert\"\n    ],\n    \"m_SettingValues\": [\n        \"False\",\n        \"False\"\n    ]\n}"
  },
  {
    "path": "README.md",
    "content": "# BurstLinq\nExtremely fast LINQ aggregation operations implementation optimized by Burst Compiler\n\n<img src=\"https://github.com/AnnulusGames/BurstLinq/blob/main/Assets/BurstLinq/Documentation~/img1.png\" width=\"800\">\n\n[![license](https://img.shields.io/badge/LICENSE-MIT-green.svg)](LICENSE)\n\n[日本語版READMEはこちら](README_JA.md)\n\n## Overview\n\nBurstLinq is a library designed to accelerate LINQ aggregation operations (`Sum`, `Average`, `Min`, etc.) using Unity's Burst Compiler. By integrating BurstLinq, automatically optimized implementations are applied to LINQ methods eligible for Burst, resulting in significantly higher performance compared to regular LINQ.\n\nAdditionally, BurstLinq adds operators like `Sum`, `Min`, etc., to collection types that LINQ cannot usually operate on, such as `NativeArray<T>` or `Span<T>`. It also supports operations like `Sum` and `Average` for Unity-specific types such as `Vector3` and `float3`.\n\n> The concept of BurstLinq is inspired by [Cysharp/SimdLinq](https://github.com/Cysharp/SimdLinq). BurstLinq is a Unity-optimized version that uses Burst instead of .NET's SIMD API.\n\n## Setup\n\n### Requirements\n\n* Unity 2021.3 or later\n* Burst 1.6.0 or later\n\n### Installation\n\n1. Open the Package Manager by going to Window > Package Manager.\n2. Click on the \"+\" button and select \"Add package from git URL\".\n3. Enter the following URL:\n\n```\nhttps://github.com/AnnulusGames/BurstLinq.git?path=/Assets/BurstLinq\n```\n\nAlternatively, open `Packages/manifest.json` and add the following to the `dependencies` block:\n\n```json\n{\n    \"dependencies\": {\n        \"com.annulusgames.burst-linq\": \"https://github.com/AnnulusGames/BurstLinq.git?path=/Assets/BurstLinq\"\n    }\n}\n```\n\n## Quick Start\n\nBurstLinq is designed as a 'Drop-in replacement' similar to SimdLinq, simply including `using BurstLinq;` will automatically apply BurstLinq methods to all operators eligible for Burst.\n\n```cs\nusing System.Collections.Generic;\nusing System.Linq;\nusing BurstLinq;\n\nvar enumerable = Enumerable.Range(0, 100);\nvar array = enumerable.ToArray();\n\n// Enumerable.Sum()\nvar linqSum = enumerable.Sum();\n\n// BurstLinqExtensions.Sum()\nvar burstLinqSum = array.Sum();\n```\n\n## Supported Types and Operators\n\nBelow is the list of operators and types supported by BurstLinq.\n\n### Supported Collection Types\n\n* `T[]`\n* `List<T>`\n* `Memory<T>`\n* `ReadOnlyMemory<T>`\n* `Span<T>`\n* `ReadOnlySpan<T>`\n* `NativeArray<T>`\n* `NativeList<T>`\n* `NativeSlice<T>`\n\n### Supported Operators\n\n* Sum (`int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n* Average (`int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n* Min (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`)\n* Max (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`)\n* Contains (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n* SequenceEqual (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n\n## Compatibility with LINQ\n\nBurstLinq may behave differently compared to LINQ as it prioritizes high performance. Be mindful of the following differences when using it.\n\n### Sum/Average\n\nWhile LINQ's Sum is `checked`, BurstLinq is `unchecked`. Burst does not support overflow detection, hence it is set to `unchecked` to avoid behavioral differences when Burst is disabled.\n\n### Handling of Floating-Point Types\n\nBurstLinq's `Sum` specifies `[BurstCompile(FloatMode = FloatMode.Fast)]`, resulting in slight computational discrepancies compared to regular LINQ's `Sum`. While this is rarely an issue, note the lack of compatibility.\n\nAdditionally, BurstLinq does not check for NaN for float/double types, so please take note of this aspect.\n\n## License\n\n[MIT License](LICENSE)"
  },
  {
    "path": "README_JA.md",
    "content": "# BurstLinq\n Extremely fast LINQ aggregation operations implementation optimized by Burst Compiler\n\n<img src=\"https://github.com/AnnulusGames/BurstLinq/blob/main/Assets/BurstLinq/Documentation~/img1.png\" width=\"800\">\n\n[![license](https://img.shields.io/badge/LICENSE-MIT-green.svg)](LICENSE)\n\n[English README is here](README.md)\n\n## 概要\n\nBurstLinqはUnityのBurst Compilerを用いてLINQの集約操作(`Sum`、`Average`、`Min`, etc..)を高速化するライブラリです。BurstLinqを導入することで、Burstが適用可能なLINQメソッドに対して自動的に最適化された実装が適用されるようになり、通常のLINQと比較して遥かに高いパフォーマンスを実現します。\n\nまた、`NativeArray<T>`や`Span<T>`など本来LINQが使用できないコレクション型に対して`Sum`、`Min`などのオペレータを追加するほか、`Vector3`、`float3`などのUnity独自の型に対する`Sum`、`Average`もサポートします。\n\n> BurstLinqのコンセプトは[Cysharp/SimdLinq](https://github.com/Cysharp/SimdLinq)にインスパイアされており、こちらは.NETのSIMD APIの代わりにBurstを利用した、Unityに最適化された実装になっています。\n\n## セットアップ\n\n### 要件\n\n* Unity 2021.3 以上\n* Burst 1.6.0 以上\n\n### インストール\n\n1. Window > Package ManagerからPackage Managerを開く\n2. 「+」ボタン > Add package from git URL\n3. 以下のURLを入力する\n\n```\nhttps://github.com/AnnulusGames/BurstLinq.git?path=/Assets/BurstLinq\n```\n\nあるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記\n\n```json\n{\n    \"dependencies\": {\n        \"com.annulusgames.burst-linq\": \"https://github.com/AnnulusGames/BurstLinq.git?path=/Assets/BurstLinq\"\n    }\n}\n```\n\n## Quick Start\n\nBurstLinqはSimdLinqと同様'Drop-in replacement'となるように設計されており、`using BurstLinq;`を含めるだけでBurstが適用可能な全てのオペレータに対して自動的にBurstLinqのメソッドを適用します。\n\n```cs\nusing System.Collections.Generic;\nusing System.Linq;\nusing BurstLinq;\n\nvar enumerable = Enumerable.Range(0, 100);\nvar array = enumerable.ToArray();\n\n// Enumerable.Sum()\nvar linqSum = enumerable.Sum();\n\n// BurstLinqExtensions.Sum()\nvar burstLinqSum = array.Sum();\n```\n\n## サポートする型とオペレータ\n\nBurstLinqが対応するオペレータと型の一覧は以下の通りです。\n\n### サポートするコレクション型\n\n* `T[]`\n* `List<T>`\n* `Memory<T>`\n* `ReadOnlyMemory<T>`\n* `Span<T>`\n* `ReadOnlySpan<T>`\n* `NativeArray<T>`\n* `NativeList<T>`\n* `NativeSlice<T>`\n\n### サポートするオペレータ\n\n* Sum (`int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n* Average (`int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n* Min (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`)\n* Max (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`)\n* Contains (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n* SequenceEqual (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`, `float`, `double`, `Vector2`, `Vector3`, `Vector4`, `int2..4`, `uint2..4`, `float2..4`, `double2..4`)\n\n## LINQとの互換性\n\nBurstLinqはパフォーマンスの高さを優先するため、LINQと比べて挙動が異なる場合があります。使用する際は以下の違いに注意してください。\n\n### Sum/Average\n\nLINQのSumは`checked`ですが、BurstLinqは`unchecked`です。Burstはオーバーフローの検知をサポートしないため、Burstが無効化された際に動作の違いが生じないように`unchecked`としています。\n\n### 浮動小数点型の扱い\n\nBurstLinqのSumは`[BurstCompile(FloatMode = FloatMode.Fast)]`を指定するため、通常のLINQのSumと比較して計算結果に僅かな誤差が生じます。これが問題になることは稀ですが、互換性がないことには留意してください。\n\nまたBurstLinqはfloat/doubleに対するNaNのチェックを行わないため、その点にも注意してください。\n\n## ライセンス\n\n[MIT License](LICENSE)"
  }
]