-
-
Save digitalsanity/8c89d4c340a91b5b38a4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* OpenSimplex Noise in C# | |
| * Ported from https://gist.github.com/KdotJPG/b1270127455a94ac5d19 | |
| * and heavily refactored to improve performance. The main difference is that once the | |
| * bit flags are determined, the result is pulled from a lookup table, saving the time | |
| * used deciphering the bit flags again. */ | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Runtime.CompilerServices; | |
| namespace NoiseTest | |
| { | |
| public class OpenSimplexNoise | |
| { | |
| private const double STRETCH_2D = -0.211324865405187; //(1/Math.sqrt(2+1)-1)/2; | |
| private const double STRETCH_3D = -1.0 / 6.0; //(1/Math.sqrt(3+1)-1)/3; | |
| private const double STRETCH_4D = -0.138196601125011; //(1/Math.sqrt(4+1)-1)/4; | |
| private const double SQUISH_2D = 0.366025403784439; //(Math.sqrt(2+1)-1)/2; | |
| private const double SQUISH_3D = 1.0 / 3.0; //(Math.sqrt(3+1)-1)/3; | |
| private const double SQUISH_4D = 0.309016994374947; //(Math.sqrt(4+1)-1)/4; | |
| private const double NORM_2D = 1.0 / 47.0; | |
| private const double NORM_3D = 1.0 / 103.0; | |
| private const double NORM_4D = 1.0 / 30.0; | |
| private byte[] perm; | |
| private byte[] perm2D; | |
| private byte[] perm3D; | |
| private byte[] perm4D; | |
| private static double[] gradients2D = new double[] | |
| { | |
| 5, 2, 2, 5, | |
| -5, 2, -2, 5, | |
| 5, -2, 2, -5, | |
| -5, -2, -2, -5, | |
| }; | |
| private static double[] gradients3D = | |
| { | |
| -11, 4, 4, -4, 11, 4, -4, 4, 11, | |
| 11, 4, 4, 4, 11, 4, 4, 4, 11, | |
| -11, -4, 4, -4, -11, 4, -4, -4, 11, | |
| 11, -4, 4, 4, -11, 4, 4, -4, 11, | |
| -11, 4, -4, -4, 11, -4, -4, 4, -11, | |
| 11, 4, -4, 4, 11, -4, 4, 4, -11, | |
| -11, -4, -4, -4, -11, -4, -4, -4, -11, | |
| 11, -4, -4, 4, -11, -4, 4, -4, -11, | |
| }; | |
| private static double[] gradients4D = | |
| { | |
| 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, | |
| -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, | |
| 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, | |
| -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, | |
| 3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, | |
| -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, | |
| 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, | |
| -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, | |
| 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, | |
| -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, | |
| 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, | |
| -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, | |
| 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, | |
| -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, | |
| 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, -1, 1, -1, -1, -3, | |
| -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, | |
| }; | |
| private static Contribution2[][] contributions2D; | |
| private static Contribution3[][] contributions3D; | |
| private static Contribution4[][] contributions4D; | |
| static OpenSimplexNoise() | |
| { | |
| var base2D = new int[][] | |
| { | |
| new int[] { 1, 1, 0, 1, 0, 1, 0, 0, 0 }, | |
| new int[] { 1, 1, 0, 1, 0, 1, 2, 1, 1 } | |
| }; | |
| var permutations2D = new int[][] | |
| { | |
| new int[] { 0, 0, 1, -1, 0, -1, 1, 2, 1, 1 }, | |
| new int[] { 1, 2, 2, 0, 2, 0, 2, 0, 0, 0 } | |
| }; | |
| contributions2D = new Contribution2[base2D.Length][]; | |
| for (int i = 0; i < base2D.Length; i++) | |
| { | |
| var permutations = permutations2D[i]; | |
| var set = base2D[permutations[0]]; | |
| var contributions = new Contribution2[permutations.Length / 3]; | |
| for (int j = 1; j < permutations.Length; j += 3) | |
| { | |
| Contribution2 previous = null, current = null; | |
| for (int k = 0; k < set.Length; k += 3) | |
| { | |
| current = new Contribution2(set[k], set[k + 1], set[k + 2]); | |
| if (previous == null) | |
| { | |
| contributions[j / 3] = current; | |
| } | |
| else | |
| { | |
| previous.Next = current; | |
| } | |
| previous = current; | |
| } | |
| current.Next = new Contribution2(permutations[j], permutations[j + 1], permutations[j + 2]); | |
| } | |
| contributions2D[i] = contributions; | |
| } | |
| var base3D = new int[][] | |
| { | |
| new int[] { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1 }, | |
| new int[] { 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1, 3, 1, 1, 1 }, | |
| new int[] { 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1 } | |
| }; | |
| var permutations3D = new int[][] | |
| { | |
| new int[] { 0 ,0, -1, 0, 0, 0, 0, -1, -1, 0, 1, -1, 0, 0, 1, 0, -1, 0, -1, 1, 0, 0, 0, 1, -1, 0, 1, 1, 0, 0, 1, 1, -1, 0, -1, 0, 1, 0, 0, -1, 1, 0, 1, -1, 1, 0, 1, 0, 1, 0, -1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1 }, | |
| new int[] { 0 ,2, 0, 0, 0, 1, -1, -1, -1, 2, 1, 0, 0, 1, 1, -1, -1, 2, 0, 1, 0, 1, -1, 1, -1, 2, 1, 1, 0, 1, 1, 1, -1, 2, 0, 0, 1, 1, -1, -1, 1, 2, 1, 0, 1, 1, 1, -1, 1, 2, 0, 1, 1, 1, -1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1 }, | |
| new int[] { 1 ,3, 0, 0, 0, 3, 0, 0, 0, 3, 2, 0, 0, 3, 1, 0, 0, 3, 0, 2, 0, 3, 0, 1, 0, 3, 2, 1, 0, 3, 1, 2, 0, 3, 0, 0, 1, 3, 0, 0, 2, 3, 2, 0, 1, 3, 1, 0, 2, 3, 0, 2, 1, 3, 0, 1, 2, 3, 2, 1, 1, 3, 1, 2, 2 }, | |
| new int[] { 1 ,1, 0, 0, 0, 2, 0, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 1, 0, 1, 0, 2, 0, 2, 0, 1, 1, 1, 0, 2, 2, 2, 0, 1, 0, 0, 1, 2, 0, 0, 2, 1, 1, 0, 1, 2, 2, 0, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2 }, | |
| new int[] { 2 ,0, 0, 0, 0, 1, -1, 1, 1, 0, 0, 0, 0, 1, 1, -1, 1, 0, 0, 0, 0, 1, -1, 1, 1, 0, 0, 0, 0, 1, 1, 1, -1, 3, 1, 1, 1, 2, 0, 0, 2, 3, 1, 1, 1, 2, 2, 0, 0, 3, 1, 1, 1, 2, 0, 2, 0, 3, 1, 1, 1, 2, 2, 0, 0 }, | |
| new int[] { 2 ,1, -1, 1, 1, 2, 0, 0, 2, 1, -1, 1, 1, 2, 2, 0, 0, 1, -1, 1, 1, 2, 0, 2, 0, 1, -1, 1, 1, 2, 2, 0, 0, 1, 1, -1, 1, 2, 0, 0, 2, 1, 1, -1, 1, 2, 2, 0, 0, 1, 1, -1, 1, 2, 0, 2, 0, 1, 1, -1, 1, 2, 2, 0, 0, 1, -1, 1, 1, 2, 0, 0, 2, 1, -1, 1, 1, 2, 2, 0, 0, 1, -1, 1, 1, 2, 0, 2, 0, 1, -1, 1, 1, 2, 2, 0, 0, 1, 1, 1, -1, 2, 0, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 1, 1, 1, -1, 2, 0, 2, 0, 1, 1, 1, -1, 2, 2, 0, 0 } | |
| }; | |
| contributions3D = new Contribution3[permutations3D.Length][]; | |
| for (int i = 0; i < permutations3D.Length; i++) | |
| { | |
| var permutations = permutations3D[i]; | |
| var set = base3D[permutations[0]]; | |
| var contributions = new Contribution3[permutations.Length / 8]; | |
| for (int j = 1; j < permutations.Length; j += 8) | |
| { | |
| Contribution3 previous = null, current = null; | |
| for (int k = 0; k < set.Length; k += 4) | |
| { | |
| current = new Contribution3(set[k], set[k + 1], set[k + 2], set[k + 3]); | |
| if (previous == null) | |
| { | |
| contributions[j / 8] = current; | |
| } | |
| else | |
| { | |
| previous.Next = current; | |
| } | |
| previous = current; | |
| } | |
| current.Next = new Contribution3(permutations[j], permutations[j + 1], permutations[j + 2], permutations[j + 3]); | |
| current.Next.Next = new Contribution3(permutations[j + 4], permutations[j + 5], permutations[j + 6], permutations[j + 7]); | |
| } | |
| contributions3D[i] = contributions; | |
| } | |
| var base4D = new int[][] | |
| { | |
| new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1 }, | |
| new int[] { 3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 4, 1, 1, 1, 1 }, | |
| new int[] { 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1 }, | |
| new int[] { 3, 1, 1, 1, 0, 3, 1, 1, 0, 1, 3, 1, 0, 1, 1, 3, 0, 1, 1, 1, 2, 1, 1, 0, 0, 2, 1, 0, 1, 0, 2, 1, 0, 0, 1, 2, 0, 1, 1, 0, 2, 0, 1, 0, 1, 2, 0, 0, 1, 1 } | |
| }; | |
| var permutations4D = new int[][] | |
| { | |
| new int[] { 0 ,0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, -1, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, 0, 1, 1, -1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, -1, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1, -1, 0, 1, -1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, -1, 0, -1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, -1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, -1, 1, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, 0, 1, 0, 0, 1, 0, -1, 1, 0, 1, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, -1, 0, 1, 1, 0, 0, -1, 1, 1, 0, 0, 0, 1, 1, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, -1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1 }, | |
| new int[] { 0 ,2, 0, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 1, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 1, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 1, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 0, 1, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 1, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 1, 1, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 1, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 1, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 1, 1, 0, 1, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 1, 0, 1, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 1, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, | |
| new int[] { 1 ,4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 2, 0, 0, 0, 4, 1, 0, 0, 0, 4, 1, 0, 0, 0, 4, 0, 2, 0, 0, 4, 0, 1, 0, 0, 4, 0, 1, 0, 0, 4, 2, 1, 0, 0, 4, 1, 2, 0, 0, 4, 1, 1, 0, 0, 4, 0, 0, 2, 0, 4, 0, 0, 1, 0, 4, 0, 0, 1, 0, 4, 2, 0, 1, 0, 4, 1, 0, 2, 0, 4, 1, 0, 1, 0, 4, 0, 2, 1, 0, 4, 0, 1, 2, 0, 4, 0, 1, 1, 0, 4, 2, 1, 1, 0, 4, 1, 2, 1, 0, 4, 1, 1, 2, 0, 4, 0, 0, 0, 1, 4, 0, 0, 0, 1, 4, 0, 0, 0, 2, 4, 2, 0, 0, 1, 4, 1, 0, 0, 1, 4, 1, 0, 0, 2, 4, 0, 2, 0, 1, 4, 0, 1, 0, 1, 4, 0, 1, 0, 2, 4, 2, 1, 0, 1, 4, 1, 2, 0, 1, 4, 1, 1, 0, 2, 4, 0, 0, 2, 1, 4, 0, 0, 1, 1, 4, 0, 0, 1, 2, 4, 2, 0, 1, 1, 4, 1, 0, 2, 1, 4, 1, 0, 1, 2, 4, 0, 2, 1, 1, 4, 0, 1, 2, 1, 4, 0, 1, 1, 2, 4, 2, 1, 1, 1, 4, 1, 2, 1, 1, 4, 1, 1, 2, 2 }, | |
| new int[] { 1 ,2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, 0, 0, 0, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 0, 1, 0, 0, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, 1, 0, 0, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 0, 0, 1, 0, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, 0, 1, 0, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 0, 1, 1, 0, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, 1, 0, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 0, 0, 0, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, 0, 0, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 0, 1, 0, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, 0, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 0, 0, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, 0, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 0, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2 }, | |
| new int[] { 2 ,3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 0, 0, 2, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 0, 0, 2, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 0, 0, 2, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 0, 0, 2, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 0, 0, 2, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 0, 0, 2, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 0, 2, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 0, 0, 2, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 0, 0, 2, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 0, 0, 2, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 0, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 0, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 0, 0, 2, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 0, 2, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 0, 2, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 0, 2, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 0, 2, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 0, 2, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 0, 2, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 2, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 0, 2, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 0, 2, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 0, 2, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 0, 2, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 0, 2, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 2, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 2, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 0, 0, 2, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 0, 0, 2, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 0, 0, 2, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 0, 0, 2, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 0, 0, 2, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 0, 0, 2, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 0, 0, 2, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 0, 2, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 0, 0, 2, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 0, 0, 2, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 0, 0, 2, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 0, 0, 2, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 0, 0, 2, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 0, 2, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 0, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 0, 0, 2, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 0, 2, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 0, 2, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 0, 2, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 0, 2, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 0, 2, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 0, 2, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 0, 2, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 0, 2, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 0, 2, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 0, 2, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 0, 2, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 0, 2, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 0, 2, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 0, 2, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 0, 2, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 0, 2, 0, 0, 3, 0, 0, 0, 0, 2, -1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 0, 2, 1, 1, -1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 0, 2, -1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 0, 2, 1, -1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 0, 2, -1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 0, 3, 0, 0, 0, 1, 2, -1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 0, 1, 2, 1, -1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 0, 1, 2, -1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 0, 1, 2, 1, 1, -1, 1, 2, 2, 0, 0, 0, 3, 0, 0, 1, 1, 2, -1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 0, 1, 1, 2, 1, -1, 1, 1, 2, 2, 0, 0, 0, 3, 0, 1, 1, 1, 2, -1, 1, 1, 1, 2, 2, 0, 0, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 0, 0, 0 }, | |
| new int[] { 2 ,1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 0, 0, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 0, 0, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 0, 0, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 0, 0, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 0, 0, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 0, 0, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 0, 0, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 0, 0, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 0, 0, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 0, 0, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, | |
| new int[] { 2 ,1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 0, 0, 2, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 0, 0, 2, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 0, 0, 2, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 0, 0, 2, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 0, 0, 2, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 0, 0, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 0, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 2, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 0, 2, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 0, 2, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 0, 2, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 0, 2, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 0, 2, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 2, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 0, 2, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 0, 2, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 0, 2, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 0, 2, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 2, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 0, 2, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 2, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 0, 2, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 2, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 0, 0, 2, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 0, 0, 2, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 0, 0, 2, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 0, 0, 2, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 0, 0, 2, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 0, 2, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 0, 0, 2, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 0, 0, 2, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 0, 0, 2, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 0, 0, 2, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 0, 0, 2, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 2, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 0, 2, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 0, 2, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 0, 2, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 0, 2, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 0, 2, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 0, 2, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 0, 2, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 0, 2, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 0, 2, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 0, 2, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 0, 2, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 0, 2, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 0, 2, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 0, 2, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 2, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 0, 2, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 0, 2, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 0, 2, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 0, 1, -1, 0, 0, 0, 1, 0, -1, -1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 0, 1, 1, 0, -1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 0, 1, 0, 1, -1, -1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 0, 1, 1, 1, 0, -1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 0, 1, 0, -1, 1, -1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 0, 1, 0, 1, 1, -1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, -1, 2, 2, 0, 0, 0, 1, -1, 0, 0, 1, 1, 0, -1, -1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 0, 1, 1, 1, 0, -1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, 2, 2, 0, 0, 0, 1, 1, 1, -1, 1, 1, 1, 1, 0, 1, 2, 2, 0, 0, 0, 1, -1, 0, 1, 1, 1, 0, -1, 1, 1, 2, 2, 0, 0, 0, 1, 1, -1, 1, 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, 0, 1, -1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0 }, | |
| new int[] { 3 ,1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, -1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, -1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, -1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, -1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, -1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, -1, 1, 1, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 2, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 0, 1, 0, 2, 0, 0, 2, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1, 1, 0, 1, 0, 0, 2, 0, 2, 0, 0, 2, 1, 1, 1, -1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 0, 2, 1, 1, 1, -1 }, | |
| new int[] { 3 ,3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 4, 1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 4, 1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 4, 1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 4, 1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 4, 1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 4, 1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 4, 1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 4, 1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 4, 1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 4, 1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 4, 1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 4, 1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 4, 1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 4, 1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 4, 1, 1, 1, 1 }, | |
| new int[] { 3 ,3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, -1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, -1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, -1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, -1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, -1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, -1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, -1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, -1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, -1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, -1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, -1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, 1, -1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, 1, -1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, 1, -1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, -1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, 1, -1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, -1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, -1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, 1, -1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, 1, -1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1, -1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, -1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, 1, -1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, 1, -1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, 1, -1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, 1, -1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, 1, -1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, -1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, -1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, -1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, -1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, -1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, -1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, -1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, -1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, -1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, -1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, -1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, 1, 1, -1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, 1, 1, -1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, 1, 1, -1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, 1, -1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, 1, 1, -1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, 1, -1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, 1, -1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, 1, 1, -1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, 1, 1, -1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1, 1, -1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, 1, -1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, 1, 1, -1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, 1, 1, -1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, 1, 1, -1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, 1, 1, -1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, 1, 1, -1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, -1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, -1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, -1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, -1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, -1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, -1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, -1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, -1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, -1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, -1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, -1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, 1, -1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, 1, -1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, 1, -1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, -1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, 1, -1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, -1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, -1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, 1, -1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, 1, -1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1, -1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, -1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, 1, -1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, 1, -1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, 1, -1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, 1, -1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, 1, -1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, -1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, -1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, -1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, -1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, -1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, -1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, -1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, -1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, -1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, -1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, -1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, -1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, -1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, -1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, -1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, -1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, -1, 1, 1, 1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, -1, 1, 1, 1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, -1, 1, 1, 1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, -1, 1, 1, 1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, -1, 1, 1, 1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, -1, 1, 1, 1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, -1, 1, 1, 1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, -1, 1, 1, 1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, -1, 1, 1, 1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, -1, 1, 1, 1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, -1, 1, 1, 1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, -1, 1, 1, 1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, -1, 1, 1, 1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, -1, 1, 1, 1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, -1, 1, 1, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, -1, 1, 1, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 1, 1, 1, -1, 3, 2, 0, 0, 0, 3, 1, 0, 0, 0, 2, 1, 1, 1, -1, 3, 0, 2, 0, 0, 3, 0, 1, 0, 0, 2, 1, 1, 1, -1, 3, 2, 1, 0, 0, 3, 1, 2, 0, 0, 2, 1, 1, 1, -1, 3, 0, 0, 2, 0, 3, 0, 0, 1, 0, 2, 1, 1, 1, -1, 3, 2, 0, 1, 0, 3, 1, 0, 2, 0, 2, 1, 1, 1, -1, 3, 0, 2, 1, 0, 3, 0, 1, 2, 0, 2, 1, 1, 1, -1, 3, 2, 1, 1, 0, 3, 1, 2, 2, 0, 2, 1, 1, 1, -1, 3, 0, 0, 0, 1, 3, 0, 0, 0, 2, 2, 1, 1, 1, -1, 3, 2, 0, 0, 1, 3, 1, 0, 0, 2, 2, 1, 1, 1, -1, 3, 0, 2, 0, 1, 3, 0, 1, 0, 2, 2, 1, 1, 1, -1, 3, 2, 1, 0, 1, 3, 1, 2, 0, 2, 2, 1, 1, 1, -1, 3, 0, 0, 2, 1, 3, 0, 0, 1, 2, 2, 1, 1, 1, -1, 3, 2, 0, 1, 1, 3, 1, 0, 2, 2, 2, 1, 1, 1, -1, 3, 0, 2, 1, 1, 3, 0, 1, 2, 2, 2, 1, 1, 1, -1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 2, 2, 1, 1, 1, -1 } | |
| }; | |
| contributions4D = new Contribution4[permutations4D.Length][]; | |
| for (int i = 0; i < permutations4D.Length; i++) | |
| { | |
| var permutations = permutations4D[i]; | |
| var set = base4D[permutations[0]]; | |
| var contributions = new Contribution4[permutations.Length / 15]; | |
| for (int j = 1; j < permutations.Length; j += 15) | |
| { | |
| Contribution4 previous = null, current = null; | |
| for (int k = 0; k < set.Length; k += 5) | |
| { | |
| current = new Contribution4(set[k], set[k + 1], set[k + 2], set[k + 3], set[k + 4]); | |
| if (previous == null) | |
| { | |
| contributions[j / 15] = current; | |
| } | |
| else | |
| { | |
| previous.Next = current; | |
| } | |
| previous = current; | |
| } | |
| current.Next = new Contribution4(permutations[j], permutations[j + 1], permutations[j + 2], permutations[j + 3], permutations[j + 4]); | |
| current.Next.Next = new Contribution4(permutations[j + 5], permutations[j + 6], permutations[j + 7], permutations[j + 8], permutations[j + 9]); | |
| current.Next.Next.Next = new Contribution4(permutations[j + 10], permutations[j + 11], permutations[j + 12], permutations[j + 13], permutations[j + 14]); | |
| } | |
| contributions4D[i] = contributions; | |
| } | |
| } | |
| [MethodImpl(MethodImplOptions.AggressiveInlining)] | |
| private static int FastFloor(double x) | |
| { | |
| var xi = (int)x; | |
| return x < xi ? xi - 1 : xi; | |
| } | |
| public OpenSimplexNoise() | |
| : this(DateTime.Now.Ticks) | |
| { | |
| } | |
| public OpenSimplexNoise(long seed) | |
| { | |
| perm = new byte[256]; | |
| perm2D = new byte[256]; | |
| perm3D = new byte[256]; | |
| perm4D = new byte[256]; | |
| var source = new byte[256]; | |
| for (int i = 0; i < 256; i++) | |
| { | |
| source[i] = (byte)i; | |
| } | |
| seed = seed * 6364136223846793005L + 1442695040888963407L; | |
| seed = seed * 6364136223846793005L + 1442695040888963407L; | |
| seed = seed * 6364136223846793005L + 1442695040888963407L; | |
| for (int i = 255; i >= 0; i--) | |
| { | |
| seed = seed * 6364136223846793005L + 1442695040888963407L; | |
| int r = (int)((seed + 31) % (i + 1)); | |
| if (r < 0) | |
| { | |
| r += (i + 1); | |
| } | |
| perm[i] = source[r]; | |
| perm2D[i] = (byte)(perm[i] & 0x0E); | |
| perm3D[i] = (byte)((perm[i] % 24) * 3); | |
| perm4D[i] = (byte)(perm[i] & 0xFC); | |
| source[r] = source[i]; | |
| } | |
| } | |
| public double Evaluate(double x, double y) | |
| { | |
| var stretchOffset = (x + y) * STRETCH_2D; | |
| var xs = x + stretchOffset; | |
| var ys = y + stretchOffset; | |
| var xsb = FastFloor(xs); | |
| var ysb = FastFloor(ys); | |
| var squishOffset = (xsb + ysb) * SQUISH_2D; | |
| var xb = xsb + squishOffset; | |
| var yb = ysb + squishOffset; | |
| var dx0 = x - xb; | |
| var dy0 = y - yb; | |
| var xins = xs - xsb; | |
| var yins = ys - ysb; | |
| Contribution2 c; | |
| var inSum = xins + yins; | |
| if (inSum <= 1) | |
| { | |
| var zins = 1 - inSum; | |
| if (zins > xins || zins > yins) | |
| { | |
| if (xins > yins) | |
| { | |
| c = contributions2D[0][0]; | |
| } | |
| else | |
| { | |
| c = contributions2D[0][1]; | |
| } | |
| } | |
| else | |
| { | |
| c = contributions2D[0][2]; | |
| } | |
| } | |
| else | |
| { | |
| var zins = 2 - inSum; | |
| if (zins < xins || zins < yins) | |
| { | |
| if (xins > yins) | |
| { | |
| c = contributions2D[1][0]; | |
| } | |
| else | |
| { | |
| c = contributions2D[1][1]; | |
| } | |
| } | |
| else | |
| { | |
| c = contributions2D[1][2]; | |
| } | |
| } | |
| var value = 0.0; | |
| while (c != null) | |
| { | |
| var dx = dx0 + c.dx; | |
| var dy = dy0 + c.dy; | |
| var attn = 2 - dx * dx - dy * dy; | |
| if (attn > 0) | |
| { | |
| var px = xsb + c.xsb; | |
| var py = ysb + c.ysb; | |
| var i = perm2D[(perm[px & 0xFF] + py) & 0xFF]; | |
| var valuePart = gradients2D[i] * dx + gradients2D[i + 1] * dy; | |
| attn *= attn; | |
| value += attn * attn * valuePart; | |
| } | |
| c = c.Next; | |
| } | |
| return value * NORM_2D; | |
| } | |
| public double Evaluate(double x, double y, double z) | |
| { | |
| var stretchOffset = (x + y + z) * STRETCH_3D; | |
| var xs = x + stretchOffset; | |
| var ys = y + stretchOffset; | |
| var zs = z + stretchOffset; | |
| var xsb = FastFloor(xs); | |
| var ysb = FastFloor(ys); | |
| var zsb = FastFloor(zs); | |
| var squishOffset = (xsb + ysb + zsb) * SQUISH_3D; | |
| var xb = xsb + squishOffset; | |
| var yb = ysb + squishOffset; | |
| var zb = zsb + squishOffset; | |
| var dx0 = x - xb; | |
| var dy0 = y - yb; | |
| var dz0 = z - zb; | |
| var xins = xs - xsb; | |
| var yins = ys - ysb; | |
| var zins = zs - zsb; | |
| Contribution3 c; | |
| var inSum = xins + yins + zins; | |
| if (inSum <= 1) | |
| { | |
| var aPoint = 0x01; | |
| var aScore = xins; | |
| var bPoint = 0x02; | |
| var bScore = yins; | |
| if (aScore >= bScore && zins > bScore) | |
| { | |
| bScore = zins; | |
| bPoint = 0x04; | |
| } | |
| else if (aScore < bScore && zins > aScore) | |
| { | |
| aScore = zins; | |
| aPoint = 0x04; | |
| } | |
| var wins = 1 - inSum; | |
| if (wins > aScore || wins > bScore) | |
| { | |
| c = contributions3D[0][bScore > aScore ? bPoint : aPoint]; | |
| } | |
| else | |
| { | |
| c = contributions3D[1][aPoint | bPoint]; | |
| } | |
| } | |
| else if (inSum >= 2) | |
| { | |
| var aPoint = 0x06; | |
| var aScore = xins; | |
| var bPoint = 0x05; | |
| var bScore = yins; | |
| if (aScore <= bScore && zins < bScore) | |
| { | |
| bScore = zins; | |
| bPoint = 0x03; | |
| } | |
| else if (aScore > bScore && zins < aScore) | |
| { | |
| aScore = zins; | |
| aPoint = 0x03; | |
| } | |
| var wins = 3 - inSum; | |
| if (wins < aScore || wins < bScore) | |
| { | |
| c = contributions3D[2][bScore < aScore ? bPoint : aPoint]; | |
| } | |
| else | |
| { | |
| c = contributions3D[3][aPoint & bPoint]; | |
| } | |
| } | |
| else | |
| { | |
| byte aPoint; | |
| bool aIsFurtherSide; | |
| byte bPoint; | |
| bool bIsFurtherSide; | |
| var p1 = xins + yins; | |
| if (p1 > 1) | |
| { | |
| p1 = p1 - 1; | |
| aPoint = 0x03; | |
| aIsFurtherSide = true; | |
| } | |
| else | |
| { | |
| p1 = 1 - p1; | |
| aPoint = 0x04; | |
| aIsFurtherSide = false; | |
| } | |
| var p2 = xins + zins; | |
| if (p2 > 1) | |
| { | |
| p2 = p2 - 1; | |
| bPoint = 0x05; | |
| bIsFurtherSide = true; | |
| } | |
| else | |
| { | |
| p2 = 1 - p2; | |
| bPoint = 0x02; | |
| bIsFurtherSide = false; | |
| } | |
| var p3 = yins + zins; | |
| if (p3 > 1) | |
| { | |
| p3 = p3 - 1; | |
| if (p1 <= p2 && p1 < p3) | |
| { | |
| aPoint = 0x06; | |
| aIsFurtherSide = true; | |
| } | |
| else if (p1 > p2 && p2 < p3) | |
| { | |
| bPoint = 0x06; | |
| bIsFurtherSide = true; | |
| } | |
| } | |
| else | |
| { | |
| p3 = 1 - p3; | |
| if (p1 <= p2 && p1 < p3) | |
| { | |
| aPoint = 0x01; | |
| aIsFurtherSide = false; | |
| } | |
| else if (p1 > p2 && p2 < p3) | |
| { | |
| bPoint = 0x01; | |
| bIsFurtherSide = false; | |
| } | |
| } | |
| if (aIsFurtherSide == bIsFurtherSide) | |
| { | |
| c = contributions3D[4][aIsFurtherSide ? ((aPoint & bPoint) & 0x03) | 0x4 : (aPoint | bPoint) & 0x03]; | |
| } | |
| else | |
| { | |
| if (aIsFurtherSide) | |
| { | |
| c = contributions3D[5][((aPoint & 0x03) << 2) | (bPoint & 0x03)]; | |
| } | |
| else | |
| { | |
| c = contributions3D[5][((bPoint & 0x03) << 2) | (aPoint & 0x03)]; | |
| } | |
| } | |
| } | |
| var value = 0.0; | |
| while (c != null) | |
| { | |
| var dx = dx0 + c.dx; | |
| var dy = dy0 + c.dy; | |
| var dz = dz0 + c.dz; | |
| var attn = 2 - dx * dx - dy * dy - dz * dz; | |
| if (attn > 0) | |
| { | |
| var px = xsb + c.xsb; | |
| var py = ysb + c.ysb; | |
| var pz = zsb + c.zsb; | |
| var i = perm3D[(perm[(perm[px & 0xFF] + py) & 0xFF] + pz) & 0xFF]; | |
| var valuePart = gradients3D[i] * dx + gradients3D[i + 1] * dy + gradients3D[i + 2] * dz; | |
| attn *= attn; | |
| value += attn * attn * valuePart; | |
| } | |
| c = c.Next; | |
| } | |
| return value * NORM_3D; | |
| } | |
| public double Evaluate(double x, double y, double z, double w) | |
| { | |
| var stretchOffset = (x + y + z + w) * STRETCH_4D; | |
| var xs = x + stretchOffset; | |
| var ys = y + stretchOffset; | |
| var zs = z + stretchOffset; | |
| var ws = w + stretchOffset; | |
| var xsb = FastFloor(xs); | |
| var ysb = FastFloor(ys); | |
| var zsb = FastFloor(zs); | |
| var wsb = FastFloor(ws); | |
| var squishOffset = (xsb + ysb + zsb + wsb) * SQUISH_4D; | |
| var xb = xsb + squishOffset; | |
| var yb = ysb + squishOffset; | |
| var zb = zsb + squishOffset; | |
| var wb = wsb + squishOffset; | |
| var dx0 = x - xb; | |
| var dy0 = y - yb; | |
| var dz0 = z - zb; | |
| var dw0 = w - wb; | |
| var xins = xs - xsb; | |
| var yins = ys - ysb; | |
| var zins = zs - zsb; | |
| var wins = ws - wsb; | |
| double aScore, bScore; | |
| int aPoint, bPoint; | |
| Contribution4 c; | |
| var inSum = xins + yins + zins + wins; | |
| if (inSum <= 1) | |
| { | |
| aPoint = 0x01; | |
| aScore = xins; | |
| bPoint = 0x02; | |
| bScore = yins; | |
| if (aScore >= bScore && zins > bScore) | |
| { | |
| bScore = zins; | |
| bPoint = 0x04; | |
| } | |
| else if (aScore < bScore && zins > aScore) | |
| { | |
| aScore = zins; | |
| aPoint = 0x04; | |
| } | |
| if (aScore >= bScore && wins > bScore) | |
| { | |
| bScore = wins; | |
| bPoint = 0x08; | |
| } | |
| else if (aScore < bScore && wins > aScore) | |
| { | |
| aScore = wins; | |
| aPoint = 0x08; | |
| } | |
| var uins = 1 - inSum; | |
| if (uins > aScore || uins > bScore) | |
| { | |
| c = contributions4D[0][bScore > aScore ? bPoint : aPoint]; | |
| } | |
| else | |
| { | |
| c = contributions4D[1][aPoint | bPoint]; | |
| } | |
| } | |
| else if (inSum >= 3) | |
| { | |
| aPoint = 0x0E; | |
| aScore = xins; | |
| bPoint = 0x0D; | |
| bScore = yins; | |
| if (aScore <= bScore && zins < bScore) | |
| { | |
| bScore = zins; | |
| bPoint = 0x0B; | |
| } | |
| else if (aScore > bScore && zins < aScore) | |
| { | |
| aScore = zins; | |
| aPoint = 0x0B; | |
| } | |
| if (aScore <= bScore && wins < bScore) | |
| { | |
| bScore = wins; | |
| bPoint = 0x07; | |
| } | |
| else if (aScore > bScore && wins < aScore) | |
| { | |
| aScore = wins; | |
| aPoint = 0x07; | |
| } | |
| var uins = 4 - inSum; | |
| if (uins < aScore || uins < bScore) | |
| { | |
| c = contributions4D[2][bScore < aScore ? bPoint : aPoint]; | |
| } | |
| else | |
| { | |
| c = contributions4D[3][aPoint & bPoint]; | |
| } | |
| } | |
| else if (inSum <= 2) | |
| { | |
| var aIsBiggerSide = true; | |
| var bIsBiggerSide = true; | |
| if (xins + yins > zins + wins) | |
| { | |
| aScore = xins + yins; | |
| aPoint = 0x03; | |
| } | |
| else | |
| { | |
| aScore = zins + wins; | |
| aPoint = 0x0C; | |
| } | |
| if (xins + zins > yins + wins) | |
| { | |
| bScore = xins + zins; | |
| bPoint = 0x05; | |
| } | |
| else | |
| { | |
| bScore = yins + wins; | |
| bPoint = 0x0A; | |
| } | |
| if (xins + wins > yins + zins) | |
| { | |
| var score = xins + wins; | |
| if (aScore >= bScore && score > bScore) | |
| { | |
| bScore = score; | |
| bPoint = 0x09; | |
| } | |
| else if (aScore < bScore && score > aScore) | |
| { | |
| aScore = score; | |
| aPoint = 0x09; | |
| } | |
| } | |
| else | |
| { | |
| var score = yins + zins; | |
| if (aScore >= bScore && score > bScore) | |
| { | |
| bScore = score; | |
| bPoint = 0x06; | |
| } | |
| else if (aScore < bScore && score > aScore) | |
| { | |
| aScore = score; | |
| aPoint = 0x06; | |
| } | |
| } | |
| var p1 = 2 - inSum + xins; | |
| if (aScore >= bScore && p1 > bScore) | |
| { | |
| bScore = p1; | |
| bPoint = 0x01; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore < bScore && p1 > aScore) | |
| { | |
| aScore = p1; | |
| aPoint = 0x01; | |
| aIsBiggerSide = false; | |
| } | |
| var p2 = 2 - inSum + yins; | |
| if (aScore >= bScore && p2 > bScore) | |
| { | |
| bScore = p2; | |
| bPoint = 0x02; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore < bScore && p2 > aScore) | |
| { | |
| aScore = p2; | |
| aPoint = 0x02; | |
| aIsBiggerSide = false; | |
| } | |
| var p3 = 2 - inSum + zins; | |
| if (aScore >= bScore && p3 > bScore) | |
| { | |
| bScore = p3; | |
| bPoint = 0x04; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore < bScore && p3 > aScore) | |
| { | |
| aScore = p3; | |
| aPoint = 0x04; | |
| aIsBiggerSide = false; | |
| } | |
| var p4 = 2 - inSum + wins; | |
| if (aScore >= bScore && p4 > bScore) | |
| { | |
| bScore = p4; | |
| bPoint = 0x08; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore < bScore && p4 > aScore) | |
| { | |
| aScore = p4; | |
| aPoint = 0x08; | |
| aIsBiggerSide = false; | |
| } | |
| if (aIsBiggerSide == bIsBiggerSide) | |
| { | |
| if (aIsBiggerSide) | |
| { | |
| c = contributions4D[4][((aPoint | bPoint) & 0x0F) | ((aPoint & bPoint) << 4)]; | |
| } | |
| else | |
| { | |
| c = contributions4D[5][aPoint | bPoint]; | |
| } | |
| } | |
| else | |
| { | |
| if (aIsBiggerSide) | |
| { | |
| c = contributions4D[6][(aPoint & 0x0F) | (bPoint << 4)]; | |
| } | |
| else | |
| { | |
| c = contributions4D[6][(bPoint & 0x0F) | (aPoint << 4)]; | |
| } | |
| } | |
| } | |
| else | |
| { | |
| var aIsBiggerSide = true; | |
| var bIsBiggerSide = true; | |
| if (xins + yins < zins + wins) | |
| { | |
| aScore = xins + yins; | |
| aPoint = 0x0C; | |
| } | |
| else | |
| { | |
| aScore = zins + wins; | |
| aPoint = 0x03; | |
| } | |
| if (xins + zins < yins + wins) | |
| { | |
| bScore = xins + zins; | |
| bPoint = 0x0A; | |
| } | |
| else | |
| { | |
| bScore = yins + wins; | |
| bPoint = 0x05; | |
| } | |
| if (xins + wins < yins + zins) | |
| { | |
| var score = xins + wins; | |
| if (aScore <= bScore && score < bScore) | |
| { | |
| bScore = score; | |
| bPoint = 0x06; | |
| } | |
| else if (aScore > bScore && score < aScore) | |
| { | |
| aScore = score; | |
| aPoint = 0x06; | |
| } | |
| } | |
| else | |
| { | |
| var score = yins + zins; | |
| if (aScore <= bScore && score < bScore) | |
| { | |
| bScore = score; | |
| bPoint = 0x09; | |
| } | |
| else if (aScore > bScore && score < aScore) | |
| { | |
| aScore = score; | |
| aPoint = 0x09; | |
| } | |
| } | |
| var p1 = 3 - inSum + xins; | |
| if (aScore <= bScore && p1 < bScore) | |
| { | |
| bScore = p1; | |
| bPoint = 0x0E; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore > bScore && p1 < aScore) | |
| { | |
| aScore = p1; | |
| aPoint = 0x0E; | |
| aIsBiggerSide = false; | |
| } | |
| var p2 = 3 - inSum + yins; | |
| if (aScore <= bScore && p2 < bScore) | |
| { | |
| bScore = p2; | |
| bPoint = 0x0D; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore > bScore && p2 < aScore) | |
| { | |
| aScore = p2; | |
| aPoint = 0x0D; | |
| aIsBiggerSide = false; | |
| } | |
| var p3 = 3 - inSum + zins; | |
| if (aScore <= bScore && p3 < bScore) | |
| { | |
| bScore = p3; | |
| bPoint = 0x0B; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore > bScore && p3 < aScore) | |
| { | |
| aScore = p3; | |
| aPoint = 0x0B; | |
| aIsBiggerSide = false; | |
| } | |
| var p4 = 3 - inSum + wins; | |
| if (aScore <= bScore && p4 < bScore) | |
| { | |
| bScore = p4; | |
| bPoint = 0x07; | |
| bIsBiggerSide = false; | |
| } | |
| else if (aScore > bScore && p4 < aScore) | |
| { | |
| aScore = p4; | |
| aPoint = 0x07; | |
| aIsBiggerSide = false; | |
| } | |
| if (aIsBiggerSide == bIsBiggerSide) | |
| { | |
| if (aIsBiggerSide) | |
| { | |
| c = contributions4D[7][((aPoint & bPoint) & 0x0F) | ((aPoint | bPoint) << 4)]; | |
| } | |
| else | |
| { | |
| c = contributions4D[8][aPoint & bPoint]; | |
| } | |
| } | |
| else | |
| { | |
| if (aIsBiggerSide) | |
| { | |
| c = contributions4D[9][(aPoint & 0x0F) | (bPoint << 4)]; | |
| } | |
| else | |
| { | |
| c = contributions4D[9][(bPoint & 0x0F) | (aPoint << 4)]; | |
| } | |
| } | |
| } | |
| var value = 0.0; | |
| while (c != null) | |
| { | |
| var dx = dx0 + c.dx; | |
| var dy = dy0 + c.dy; | |
| var dz = dz0 + c.dz; | |
| var dw = dw0 + c.dw; | |
| var attn = 2 - dx * dx - dy * dy - dz * dz - dw * dw; | |
| if (attn > 0) | |
| { | |
| var px = xsb + c.xsb; | |
| var py = ysb + c.ysb; | |
| var pz = zsb + c.zsb; | |
| var pw = wsb + c.wsb; | |
| var i = perm4D[(perm[(perm[(perm[px & 0xFF] + py) & 0xFF] + pz) & 0xFF] + pw) & 0xFF]; | |
| var valuePart = gradients4D[i] * dx + gradients4D[i + 1] * dy + gradients4D[i + 2] * dz + gradients4D[i + 3] * dw; | |
| attn *= attn; | |
| value += attn * attn * valuePart; | |
| } | |
| c = c.Next; | |
| } | |
| return value * NORM_4D; | |
| } | |
| private class Contribution2 | |
| { | |
| public double dx, dy; | |
| public int xsb, ysb; | |
| public Contribution2 Next; | |
| public Contribution2(double multiplier, int xsb, int ysb) | |
| { | |
| dx = -xsb - multiplier * SQUISH_2D; | |
| dy = -ysb - multiplier * SQUISH_2D; | |
| this.xsb = xsb; | |
| this.ysb = ysb; | |
| } | |
| } | |
| private class Contribution3 | |
| { | |
| public double dx, dy, dz; | |
| public int xsb, ysb, zsb; | |
| public Contribution3 Next; | |
| public Contribution3(double multiplier, int xsb, int ysb, int zsb) | |
| { | |
| dx = -xsb - multiplier * SQUISH_3D; | |
| dy = -ysb - multiplier * SQUISH_3D; | |
| dz = -zsb - multiplier * SQUISH_3D; | |
| this.xsb = xsb; | |
| this.ysb = ysb; | |
| this.zsb = zsb; | |
| } | |
| } | |
| private class Contribution4 | |
| { | |
| public double dx, dy, dz, dw; | |
| public int xsb, ysb, zsb, wsb; | |
| public Contribution4 Next; | |
| public Contribution4(double multiplier, int xsb, int ysb, int zsb, int wsb) | |
| { | |
| dx = -xsb - multiplier * SQUISH_4D; | |
| dy = -ysb - multiplier * SQUISH_4D; | |
| dz = -zsb - multiplier * SQUISH_4D; | |
| dw = -wsb - multiplier * SQUISH_4D; | |
| this.xsb = xsb; | |
| this.ysb = ysb; | |
| this.zsb = zsb; | |
| this.wsb = wsb; | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment